[teiid-commits] teiid SVN: r3842 - in branches/7.7.x: connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc and 10 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Feb 2 11:22:11 EST 2012


Author: shawkins
Date: 2012-02-02 11:22:09 -0500 (Thu, 02 Feb 2012)
New Revision: 3842

Added:
   branches/7.7.x/metadata/src/test/resources/TEIIDDES992_VDB.vdb
Modified:
   branches/7.7.x/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
   branches/7.7.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java
   branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java
   branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java
   branches/7.7.x/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPSyncQueryExecution.java
   branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Constants.java
   branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java
   branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java
   branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml
   branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java
   branches/7.7.x/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java
   branches/7.7.x/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java
   branches/7.7.x/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
Log:
TEIID-1902 updating extension property keys and adding back source function support

Modified: branches/7.7.x/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
===================================================================
--- branches/7.7.x/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -59,6 +59,8 @@
 	
 	private LinkedHashMap<String, String> properties;
 	private String annotation;
+
+	public static final String RELATIONAL_URI = "{http://www.teiid.org/ext/relational/2012}"; //$NON-NLS-1$
 	
 	public String getUUID() {
 		if (uuid == null) {
@@ -134,6 +136,18 @@
     	return properties;
 	}
     
+    public String getProperty(String key, boolean checkUnqualified) {
+    	String value = getProperties().get(key);
+    	if (value != null || !checkUnqualified) {
+    		return value;
+    	}
+    	int index = key.indexOf('}');
+    	if (index > 0 && index < key.length() &&  key.charAt(0) == '{') {
+    		key = key.substring(index + 1, key.length());
+    	}
+    	return getProperties().get(key);
+    }
+    
     /**
      * The preferred setter for extension properties.
      * @param key

Modified: branches/7.7.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java
===================================================================
--- branches/7.7.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -108,7 +108,7 @@
     private Determinism determinism = Determinism.DETERMINISTIC;
     
     @XmlElement(name="inputParameters")
-    protected List<FunctionParameter> inParameters = new ArrayList<FunctionParameter>();
+    protected List<FunctionParameter> inParameters = new ArrayList<FunctionParameter>(2);
     private FunctionParameter outputParameter;
     private Schema parent;
         

Modified: branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -39,25 +39,13 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.teiid.language.Argument;
-import org.teiid.language.Call;
-import org.teiid.language.Command;
-import org.teiid.language.Comparison;
-import org.teiid.language.DerivedColumn;
-import org.teiid.language.ExpressionValueSource;
-import org.teiid.language.Function;
-import org.teiid.language.In;
-import org.teiid.language.LanguageObject;
-import org.teiid.language.Like;
-import org.teiid.language.Literal;
-import org.teiid.language.NamedTable;
-import org.teiid.language.SearchedCase;
-import org.teiid.language.SetClause;
+import org.teiid.language.*;
 import org.teiid.language.Argument.Direction;
 import org.teiid.language.SQLConstants.Reserved;
 import org.teiid.language.SQLConstants.Tokens;
 import org.teiid.language.SetQuery.Operation;
 import org.teiid.language.visitor.SQLStringVisitor;
+import org.teiid.metadata.AbstractMetadataRecord;
 import org.teiid.metadata.Procedure;
 import org.teiid.translator.ExecutionContext;
 import org.teiid.translator.TypeFacility;
@@ -68,9 +56,8 @@
  * to produce a SQL String.  This class is expected to be subclassed.
  */
 public class SQLConversionVisitor extends SQLStringVisitor{
-	
-	public static final String TEIID_NATIVE_QUERY = "teiid:native-query"; //$NON-NLS-1$
-	public static final String TEIID_NON_PREPARED = "teiid:non-prepared"; //$NON-NLS-1$
+	public static final String TEIID_NATIVE_QUERY = AbstractMetadataRecord.RELATIONAL_URI + "native-query"; //$NON-NLS-1$
+	public static final String TEIID_NON_PREPARED = AbstractMetadataRecord.RELATIONAL_URI + "non-prepared"; //$NON-NLS-1$
 
     private static DecimalFormat DECIMAL_FORMAT = 
         new DecimalFormat("#############################0.0#############################"); //$NON-NLS-1$    
@@ -193,10 +180,10 @@
     public void visit(Call obj) {
     	Procedure p = obj.getMetadataObject();
     	if (p != null) {
-	    	String nativeQuery = p.getProperties().get(TEIID_NATIVE_QUERY);
+	    	String nativeQuery = p.getProperty(TEIID_NATIVE_QUERY, false);
 	    	if (nativeQuery != null) {
 	    		List<Object> parts = parseNativeQueryParts(nativeQuery);
-	    		this.prepared = !Boolean.valueOf(p.getProperties().get(TEIID_NON_PREPARED));
+	    		this.prepared = !Boolean.valueOf(p.getProperty(TEIID_NON_PREPARED, false));
 	    		if (this.prepared) {
 	    			this.preparedValues = new ArrayList<Object>();
 	    		}
@@ -425,7 +412,7 @@
 	@Override
 	protected void appendBaseName(NamedTable obj) {
 		if (obj.getMetadataObject() != null) {
-			String nativeQuery = obj.getMetadataObject().getProperties().get(TEIID_NATIVE_QUERY);
+			String nativeQuery = obj.getMetadataObject().getProperty(TEIID_NATIVE_QUERY, false);
 	    	if (nativeQuery != null) {
 	    		buffer.append(Tokens.LPAREN).append(nativeQuery).append(Tokens.RPAREN);
 	    		if (obj.getCorrelationName() == null) {

Modified: branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -37,20 +37,7 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.teiid.language.Call;
-import org.teiid.language.ColumnReference;
-import org.teiid.language.Command;
-import org.teiid.language.DerivedColumn;
-import org.teiid.language.Expression;
-import org.teiid.language.ExpressionValueSource;
-import org.teiid.language.Function;
-import org.teiid.language.Insert;
-import org.teiid.language.LanguageObject;
-import org.teiid.language.Limit;
-import org.teiid.language.Literal;
-import org.teiid.language.NamedTable;
-import org.teiid.language.QueryExpression;
-import org.teiid.language.Select;
+import org.teiid.language.*;
 import org.teiid.language.SQLConstants.Tokens;
 import org.teiid.language.SetQuery.Operation;
 import org.teiid.language.visitor.CollectorVisitor;
@@ -607,7 +594,7 @@
     public List<?> translate(LanguageObject obj, ExecutionContext context) {
     	if (oracleSuppliedDriver && obj instanceof Call) {
     		Call call = (Call)obj;
-    		if (call.getReturnType() == null && call.getMetadataObject() != null && call.getMetadataObject().getProperties().get(SQLConversionVisitor.TEIID_NATIVE_QUERY) == null) { 
+    		if (call.getReturnType() == null && call.getMetadataObject() != null && call.getMetadataObject().getProperty(SQLConversionVisitor.TEIID_NATIVE_QUERY, false) == null) { 
     			//oracle returns the resultset as a parameter
     			call.setReturnType(RefCursorType.class);
     		}

Modified: branches/7.7.x/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPSyncQueryExecution.java
===================================================================
--- branches/7.7.x/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPSyncQueryExecution.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPSyncQueryExecution.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -80,7 +80,6 @@
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
@@ -458,15 +457,11 @@
 
 		// MPW: 3-11-07: Added support for java.lang.Integer conversion.
 		if(TypeFacility.RUNTIME_TYPES.TIMESTAMP.equals(modelAttrClass)) {
-			Map<String, String> p = modelElement.getProperties();
-
-			String timestampFormat = p.get("Format"); //$NON-NLS-1$
-			SimpleDateFormat dateFormat;
+			String timestampFormat = modelElement.getFormat();
 			if(timestampFormat == null) {
 				timestampFormat = LDAPConnectorConstants.ldapTimestampFormat;
-				
 			}
-			dateFormat = new SimpleDateFormat(timestampFormat);
+			SimpleDateFormat dateFormat = new SimpleDateFormat(timestampFormat);
 			try {
 				if(strResult != null) {
 					Date dateResult = dateFormat.parse(strResult);

Modified: branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Constants.java
===================================================================
--- branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Constants.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Constants.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -40,12 +40,14 @@
 
 	public static final String EMAIL_TYPE = "email"; //$NON-NLS-1$
 
+	public static final String EXTENSION_URI = "{http://www.teiid.org/translator/salesforce/2012}"; //$NON-NLS-1$
+
 	public static final String RESTRICTED_PICKLIST_TYPE = "restrictedpicklist"; //$NON-NLS-1$
 	
 	public static final String RESTRICTED_MULTISELECT_PICKLIST_TYPE = "restrictedmultiselectpicklist"; //$NON-NLS-1$
 
-	public static final String SUPPORTS_QUERY = "Supports Query";//$NON-NLS-1$
+	public static final String SUPPORTS_QUERY = EXTENSION_URI +"Supports Query";//$NON-NLS-1$
 	
-	public static final String SUPPORTS_RETRIEVE = "Supports Retrieve";//$NON-NLS-1$
+	public static final String SUPPORTS_RETRIEVE = EXTENSION_URI +"Supports Retrieve";//$NON-NLS-1$
 
 }

Modified: branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java
===================================================================
--- branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -37,6 +37,7 @@
 import org.teiid.metadata.RuntimeMetadata;
 import org.teiid.metadata.Table;
 import org.teiid.translator.TranslatorException;
+import org.teiid.translator.salesforce.Constants;
 import org.teiid.translator.salesforce.SalesForcePlugin;
 import org.teiid.translator.salesforce.Util;
 
@@ -365,7 +366,7 @@
 
     protected void loadColumnMetadata( NamedTable group ) throws TranslatorException {
         table = group.getMetadataObject();
-        String supportsQuery = table.getProperties().get("Supports Query"); //$NON-NLS-1$
+        String supportsQuery = table.getProperty(Constants.SUPPORTS_QUERY, true);
         if (!Boolean.valueOf(supportsQuery)) {
             throw new TranslatorException(table.getNameInSource() + " " + SalesForcePlugin.Util.getString("CriteriaVisitor.query.not.supported")); //$NON-NLS-1$ //$NON-NLS-2$
         }

Modified: branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java
===================================================================
--- branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -115,8 +115,8 @@
 	public void visit(NamedTable obj) {
 		try {
 			table = obj.getMetadataObject();
-	        String supportsQuery = table.getProperties().get(Constants.SUPPORTS_QUERY);
-	        objectSupportsRetrieve = Boolean.valueOf(table.getProperties().get(Constants.SUPPORTS_RETRIEVE));
+	        String supportsQuery = table.getProperty(Constants.SUPPORTS_QUERY, true);
+	        objectSupportsRetrieve = Boolean.valueOf(table.getProperty(Constants.SUPPORTS_RETRIEVE, true));
 	        if (!Boolean.valueOf(supportsQuery)) {
 	            throw new TranslatorException(table.getNameInSource() + " " + SalesForcePlugin.Util.getString("CriteriaVisitor.query.not.supported")); //$NON-NLS-1$ //$NON-NLS-2$
 	        }

Modified: branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml
===================================================================
--- branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml	2012-02-02 16:22:09 UTC (rev 3842)
@@ -547,15 +547,15 @@
         <section>
         	<title>Native Queries</title>
         	<para>Both physical tables and procedures may optionally have native queries associated with them.  No validation of the native query is performed, it is simply used in a straight-forward manner to generate the source SQL.  
-        	For a physical table setting the teiid:native-query extension metadata to the desired query string will have Teiid execute the native query as an inline view in the source query.  
-        	This feature should only be used against sources that support inline views.  For example on a physical table y with nameInSource=x and teiid:native-query=select c from g, the Teiid source query
+        	For a physical table setting the {http://www.teiid.org/ext/relational/2012}native-query extension metadata to the desired query string will have Teiid execute the native query as an inline view in the source query.  
+        	This feature should only be used against sources that support inline views.  For example on a physical table y with nameInSource="x" and {http://www.teiid.org/ext/relational/2012}native-query="select c from g", the Teiid source query
         	"SELECT c FROM y" would generate the SQL query "SELECT c FROM (select c from g) as x".  Note that the column names in the native query must match the nameInSource of the physical table columns for the resulting SQL
         	to be valid.</para>
-        	<para>For physical procedures you may also set the teiid:native-query extension metadata to a desired query string with the added ability to positionally reference IN parameters.  A parameter reference has the form
+        	<para>For physical procedures you may also set the {http://www.teiid.org/ext/relational/2012}native-query extension metadata to a desired query string with the added ability to positionally reference IN parameters.  A parameter reference has the form
         	$integer, e.g. $1.  Note that 1 based indexing is used and that only IN parameters may be referenced.  Dollar-sign integer is reserved in physical procedure native queries.  To use a $integer directly, it must be escaped with another $, e.g. $$1.
-        	By default bind values will be used for parameter values.  In some situations you may wish to bind values directly into the resulting SQL.  The teiid:non-prepared extension metadata property may be set to false to turn off
+        	By default bind values will be used for parameter values.  In some situations you may wish to bind values directly into the resulting SQL.  The {http://www.teiid.org/ext/relational/2012}non-prepared extension metadata property may be set to false to turn off
         	parameter binding.  Note this option should be used with caution as inbound may allow for SQL injection attacks if not properly validated.  The native query does not need to call a stored procedure.  Any SQL that returns
-        	a result set positionally matching the result set expected by the physical stored procedure metadata will work.  For example on a stored procedure x with teiid:native-query=select c from g where c1 = $1 and c2 = '$$1', the Teiid source query
+        	a result set positionally matching the result set expected by the physical stored procedure metadata will work.  For example on a stored procedure x with {http://www.teiid.org/ext/relational/2012}native-query="select c from g where c1 = $1 and c2 = '$$1'", the Teiid source query
         	"CALL x(?)" would generate the SQL query "select c from g where c1 = ? and c2 = '$1'".  Note that ? in this example will be replaced with the actual value bound to parameter 1.
         	</para>
         </section>

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -236,7 +236,7 @@
             if (!caps.supportsFunction(function.getFunctionDescriptor().getName())) {
                 return false;
             }
-        } else if (!schema.getFullName().equalsIgnoreCase(metadata.getFullName(modelID))) {
+        } else if (!isSameConnector(modelID, schema, metadata, capFinder)) {
         	return false; //not the right schema
         }
         

Modified: branches/7.7.x/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java
===================================================================
--- branches/7.7.x/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -47,18 +47,9 @@
 import org.teiid.core.index.IEntryResult;
 import org.teiid.core.util.StringUtil;
 import org.teiid.internal.core.index.Index;
-import org.teiid.metadata.AbstractMetadataRecord;
-import org.teiid.metadata.Column;
-import org.teiid.metadata.ColumnSet;
-import org.teiid.metadata.Datatype;
-import org.teiid.metadata.ForeignKey;
-import org.teiid.metadata.KeyRecord;
-import org.teiid.metadata.MetadataStore;
-import org.teiid.metadata.Procedure;
-import org.teiid.metadata.ProcedureParameter;
-import org.teiid.metadata.Schema;
-import org.teiid.metadata.Table;
-import org.teiid.metadata.VdbConstants;
+import org.teiid.metadata.*;
+import org.teiid.metadata.FunctionMethod.Determinism;
+import org.teiid.metadata.FunctionMethod.PushDown;
 import org.teiid.query.metadata.TransformationMetadata;
 import org.teiid.query.metadata.TransformationMetadata.Resource;
 
@@ -500,6 +491,35 @@
 		    		if(transformRecord != null) {
 		    			procedureRecord.setQueryPlan(transformRecord.getTransformation());
 		    		}
+		        } else if (procedureRecord.isFunction()) {
+		        	boolean deterministic = Boolean.valueOf(procedureRecord.getProperty(AbstractMetadataRecord.RELATIONAL_URI + "deterministic", true)); //$NON-NLS-1$
+		        	FunctionParameter outputParam = null;
+		        	List<FunctionParameter> args = new ArrayList<FunctionParameter>(procedureRecord.getParameters().size() - 1);
+		        	boolean valid = true;
+		        	for (ProcedureParameter param : procedureRecord.getParameters()) {
+						FunctionParameter fp = new FunctionParameter();
+						fp.setName(param.getName());
+						fp.setDescription(param.getAnnotation());
+						fp.setType(param.getRuntimeType());
+						switch (param.getType()) {
+						case ReturnValue:
+							if (outputParam != null) {
+								valid = false;
+							}
+							outputParam = fp;
+							break;
+						case In:
+							args.add(fp);
+							break;
+						default:
+							valid = false;
+						}
+					}
+		        	if (valid && outputParam != null) {
+			        	model.addFunction(new FunctionMethod(procedureRecord.getName(), procedureRecord.getAnnotation(), model.getName(), PushDown.MUST_PUSHDOWN, 
+			        			null, null, args.toArray(new FunctionParameter[args.size()]), outputParam, false, deterministic?Determinism.DETERMINISTIC:Determinism.NONDETERMINISTIC));
+			        	continue;
+		        	}
 		        }
 				model.addProcedure(procedureRecord);
 			}

Modified: branches/7.7.x/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java
===================================================================
--- branches/7.7.x/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -27,9 +27,11 @@
 import java.io.FileInputStream;
 import java.io.ObjectInputStream;
 import java.util.Collection;
+import java.util.Map;
 
 import org.junit.Test;
 import org.teiid.core.util.UnitTestUtil;
+import org.teiid.metadata.FunctionMethod;
 import org.teiid.metadata.Schema;
 import org.teiid.metadata.Table;
 import org.teiid.query.metadata.TransformationMetadata;
@@ -63,4 +65,13 @@
 		assertNotNull(schema.getFunctions());
 	}
 	
+	@Test public void testFunctionMetadata() throws Exception {
+		TransformationMetadata tm = VDBMetadataFactory.getVDBMetadata(UnitTestUtil.getTestDataPath() + "/TEIIDDES992_VDB.vdb");
+		Map<String, FunctionMethod> functions = tm.getMetadataStore().getSchema("TEIIDDES992").getFunctions();
+		assertEquals(1, functions.size());
+		FunctionMethod fm = functions.values().iterator().next();
+		assertEquals("sampleFunction", fm.getName());
+		assertEquals(1, fm.getInputParameters().size());
+	}
+	
 }

Copied: branches/7.7.x/metadata/src/test/resources/TEIIDDES992_VDB.vdb (from rev 3381, branches/7.4.x/metadata/src/test/resources/TEIIDDES992_VDB.vdb)
===================================================================
(Binary files differ)

Modified: branches/7.7.x/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
===================================================================
--- branches/7.7.x/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java	2012-02-01 22:01:48 UTC (rev 3841)
+++ branches/7.7.x/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java	2012-02-02 16:22:09 UTC (rev 3842)
@@ -174,7 +174,6 @@
 			mergedUDF.addFunctions(this.udf);
 		}
 		if (this.stores != null) {
-			//schema scoped source functions - this is only a dynamic vdb concept
 			for(MetadataStore store:this.stores.getStores()) {
 				for (Schema schema:store.getSchemas().values()) {
 					Collection<FunctionMethod> funcs = schema.getFunctions().values();



More information about the teiid-commits mailing list