[teiid-commits] teiid SVN: r4483 - in trunk: engine/src/main/java/org/teiid/query/metadata and 6 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Sep 27 15:55:14 EDT 2012


Author: shawkins
Date: 2012-09-27 15:55:13 -0400 (Thu, 27 Sep 2012)
New Revision: 4483

Added:
   trunk/api/src/main/java/org/teiid/metadata/ParseException.java
   trunk/api/src/main/java/org/teiid/metadata/Parser.java
Modified:
   trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java
   trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java
   trunk/engine/src/main/java/org/teiid/query/metadata/SystemMetadata.java
   trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java
   trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java
   trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
   trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java
   trunk/runtime/src/main/java/org/teiid/deployers/PgCatalogMetadataStore.java
   trunk/runtime/src/main/java/org/teiid/runtime/AbstractVDBDeployer.java
   trunk/runtime/src/main/java/org/teiid/runtime/EmbeddedServer.java
Log:
TEIID-2231 exposing a ddl parser

Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -22,15 +22,21 @@
 
 package org.teiid.metadata;
 
+import java.io.Reader;
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.TreeMap;
 
+import org.teiid.CommandContext;
 import org.teiid.connector.DataPlugin;
+import org.teiid.core.types.DataTypeManager;
+import org.teiid.metadata.FunctionMethod.PushDown;
 import org.teiid.metadata.ProcedureParameter.Type;
 import org.teiid.translator.TranslatorException;
 import org.teiid.translator.TypeFacility;
@@ -56,6 +62,7 @@
 	private Schema schema = new Schema();
 	private String idPrefix; 
 	private int count;
+	private transient Parser parser;
 	
 	public MetadataFactory(String vdbName, int vdbVersion, String schemaName, Map<String, Datatype> runtimeTypes, Properties importProperties, String rawMetadata) {
 		this.vdbName = vdbName;
@@ -400,6 +407,48 @@
 	}
 	
 	/**
+	 * Adds a non-pushdown function based upon the given {@link Method}.
+	 * @param name
+	 * @param method
+	 * @return
+	 * @throws TranslatorException
+	 */
+	public FunctionMethod addFunction(String name, Method method) throws TranslatorException {
+		String returnType = DataTypeManager.getDataTypeName(method.getReturnType());
+		Class<?>[] params = method.getParameterTypes();
+		String[] paramTypes = new String[params.length];
+		boolean nullOnNull = false;
+		for (int i = 0; i < params.length; i++) {
+			Class<?> clazz = params[i];
+			if (clazz.isPrimitive()) {
+				nullOnNull = true;
+				if      ( clazz == Boolean.TYPE   ) clazz = Boolean.class;
+	            else if ( clazz == Character.TYPE ) clazz = Character.class;
+	            else if ( clazz == Byte.TYPE      ) clazz = Byte.class;
+	            else if ( clazz == Short.TYPE     ) clazz = Short.class;
+	            else if ( clazz == Integer.TYPE   ) clazz = Integer.class;
+	            else if ( clazz == Long.TYPE      ) clazz = Long.class;
+	            else if ( clazz == Float.TYPE     ) clazz = Float.class;
+	            else if ( clazz == Double.TYPE    ) clazz = Double.class;
+			}
+			paramTypes[i] = DataTypeManager.getDataTypeName(clazz);
+		}
+		if (params.length > 0 && params[0] == CommandContext.class) {
+			paramTypes = Arrays.copyOfRange(paramTypes, 1, paramTypes.length);
+		}
+		FunctionMethod func = FunctionMethod.createFunctionMethod(name, null, null, returnType, paramTypes);
+		setUUID(func);
+		getSchema().addFunction(func);
+		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+		func.setInvocationMethod(method.getName());
+		func.setPushdown(PushDown.CANNOT_PUSHDOWN);
+		func.setClassloader(classLoader);
+		func.setInvocationClass(method.getDeclaringClass().getName());
+		func.setNullOnNull(nullOnNull);
+		return func;
+	}
+	
+	/**
 	 * Set to false to disable correcting column and other names to be valid Teiid names.
 	 * @param autoCorrectColumnNames
 	 */
@@ -422,6 +471,12 @@
 		return store;
 	}
 	
+	/**
+	 * Set the {@link Schema} to a different instance.  This is typically called
+	 * in special situations where the {@link MetadataFactory} logic is not used
+	 * to construct the {@link Schema}.
+	 * @param schema
+	 */
 	public void setSchema(Schema schema) {
 		this.schema = schema;
 	}
@@ -503,4 +558,21 @@
 	public Map<String, Datatype> getBuiltinDataTypes() {
 		return builtinDataTypes;
 	}
+	
+	/**
+	 * Parses, but does not close, the given {@link Reader} into this {@link MetadataFactory}
+	 * @param ddl
+	 * @throws ParseException
+	 */
+	public void parse(Reader ddl) throws ParseException {
+		this.parser.parseDDL(this, ddl);
+	}
+	
+	public void setParser(Parser parser) {
+		this.parser = parser;
+	}
+	
+	public Parser getParser() {
+		return parser;
+	}
 }

Added: trunk/api/src/main/java/org/teiid/metadata/ParseException.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/ParseException.java	                        (rev 0)
+++ trunk/api/src/main/java/org/teiid/metadata/ParseException.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -0,0 +1,34 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.metadata;
+
+import org.teiid.core.TeiidRuntimeException;
+import org.teiid.core.BundleUtil.Event;
+
+public class ParseException extends TeiidRuntimeException {
+	private static final long serialVersionUID = -7889770730039591817L;
+
+	public ParseException(Event event, Throwable cause) {
+		super(event, cause);
+	}
+}
\ No newline at end of file


Property changes on: trunk/api/src/main/java/org/teiid/metadata/ParseException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Added: trunk/api/src/main/java/org/teiid/metadata/Parser.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Parser.java	                        (rev 0)
+++ trunk/api/src/main/java/org/teiid/metadata/Parser.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -0,0 +1,37 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.metadata;
+
+import java.io.Reader;
+
+public interface Parser {
+	
+	/**
+	 * Parses the given {@link Reader} into the {@link MetadataFactory}.
+	 * The {@link Reader} will not be closed by this call.
+	 * @param factory
+	 * @param ddl
+	 * @throws ParseException
+	 */
+	void parseDDL(MetadataFactory factory, Reader ddl) throws ParseException;
+}
\ No newline at end of file


Property changes on: trunk/api/src/main/java/org/teiid/metadata/Parser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -21,23 +21,18 @@
  */
 package org.teiid.query.metadata;
 
-import org.teiid.api.exception.query.QueryParserException;
-import org.teiid.core.TeiidRuntimeException;
+import java.io.StringReader;
+
 import org.teiid.metadata.MetadataFactory;
-import org.teiid.query.QueryPlugin;
-import org.teiid.query.parser.QueryParser;
 import org.teiid.translator.ExecutionFactory;
 import org.teiid.translator.TranslatorException;
 
 public class DDLMetadataRepository extends BaseMetadataRepository {
 	
-	
 	@Override
 	public void loadMetadata(MetadataFactory factory, ExecutionFactory executionFactory, Object connectionFactory) throws TranslatorException {
-		try {
-			QueryParser.getQueryParser().parseDDL(factory, factory.getRawMetadata());
-		} catch (QueryParserException e) {
-			throw new TeiidRuntimeException(QueryPlugin.Event.TEIID30386, e);
+		if (factory.getRawMetadata() != null) {
+			factory.parse(new StringReader(factory.getRawMetadata()));
 		}
 		super.loadMetadata(factory, executionFactory, connectionFactory);
 	}	

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/SystemMetadata.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/SystemMetadata.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/SystemMetadata.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -34,7 +34,6 @@
 
 import org.teiid.adminapi.impl.ModelMetaData;
 import org.teiid.adminapi.impl.VDBMetaData;
-import org.teiid.api.exception.query.QueryParserException;
 import org.teiid.core.TeiidRuntimeException;
 import org.teiid.core.types.DataTypeManager;
 import org.teiid.core.types.DataTypeManager.DefaultDataTypes;
@@ -134,8 +133,6 @@
 			};
 			QueryParser.getQueryParser().parseDDL(factory, new InputStreamReader(is, Charset.forName("UTF-8"))); //$NON-NLS-1$
 			return factory;
-		} catch (QueryParserException e) {
-			throw new TeiidRuntimeException(e);
 		} finally {
 			try {
 				is.close();

Modified: trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -35,6 +35,7 @@
 import org.teiid.metadata.DuplicateRecordException;
 import org.teiid.metadata.FunctionMethod;
 import org.teiid.metadata.MetadataFactory;
+import org.teiid.metadata.Parser;
 import org.teiid.query.QueryPlugin;
 import org.teiid.query.sql.lang.CacheHint;
 import org.teiid.query.sql.lang.Command;
@@ -47,7 +48,7 @@
  * input stream.  Putting multiple queries into the same stream will result
  * in unpredictable and most likely incorrect behavior.</p>
  */
-public class QueryParser {
+public class QueryParser implements Parser {
     
     private static ThreadLocal<QueryParser> QUERY_PARSER = new ThreadLocal<QueryParser>() {
         /** 
@@ -356,15 +357,15 @@
         return new QueryParserException(QueryPlugin.Util.getString("QueryParser.parsingError", tme.getMessage())); //$NON-NLS-1$
     }
     
-    public void parseDDL(MetadataFactory factory, String ddl) throws QueryParserException {
+    public void parseDDL(MetadataFactory factory, String ddl) {
     	parseDDL(factory, new StringReader(ddl));
     }
     
-    public void parseDDL(MetadataFactory factory, Reader ddl) throws QueryParserException {
+    public void parseDDL(MetadataFactory factory, Reader ddl) {
     	try {
 			getSqlParser(ddl).parseMetadata(factory);
 		} catch (ParseException e) {
-			throw convertParserException(e);
+			throw new org.teiid.metadata.ParseException(QueryPlugin.Event.TEIID30386, convertParserException(e));
 		}
     	HashSet<FunctionMethod> functions = new HashSet<FunctionMethod>();
     	for (FunctionMethod functionMethod : factory.getSchema().getFunctions().values()) {

Modified: trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -34,6 +34,7 @@
 import org.teiid.metadata.MetadataStore;
 import org.teiid.metadata.Table;
 import org.teiid.query.function.SystemFunctionManager;
+import org.teiid.query.parser.QueryParser;
 import org.teiid.query.parser.TestDDLParser;
 import org.teiid.query.validator.ValidatorFailure;
 import org.teiid.query.validator.ValidatorReport;
@@ -64,6 +65,7 @@
 		
 		DDLMetadataRepository repo = new DDLMetadataRepository();
 		MetadataFactory mf = new MetadataFactory("myVDB",1, modelName, TestDDLParser.getDataTypes(), new Properties(), ddl);
+		mf.setParser(QueryParser.getQueryParser());
 		mf.setBuiltinDataTypes(SystemMetadata.getInstance().getSystemStore().getDatatypes());
 		mf.getSchema().setPhysical(physical);
 		repo.loadMetadata(mf, null, null);

Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -31,6 +31,7 @@
 import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.api.exception.query.QueryParserException;
 import org.teiid.metadata.*;
+import org.teiid.metadata.ParseException;
 import org.teiid.metadata.BaseColumn.NullType;
 import org.teiid.query.metadata.MetadataValidator;
 import org.teiid.query.metadata.SystemMetadata;
@@ -117,7 +118,7 @@
 		assertEquals("hello", e6.getDefaultValue());
 	}
 	
-	@Test(expected=QueryParserException.class)
+	@Test(expected=ParseException.class)
 	public void testDuplicatePrimarykey() throws Exception {
 		String ddl = "CREATE FOREIGN TABLE G1( e1 integer primary key, e2 varchar primary key)";
 		MetadataStore mds = new MetadataStore();
@@ -215,7 +216,7 @@
 		assertEquals(table.getColumns().subList(1, 3), table.getAccessPatterns().get(1).getColumns());
 	}	
 	
-	@Test(expected=QueryParserException.class)
+	@Test(expected=ParseException.class)
 	public void testWrongPrimarykey() throws Exception {
 		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, PRIMARY KEY (e3))";
 
@@ -340,7 +341,7 @@
 		assertEquals(fk.getPrimaryKey().getColumns(), s.getSchema("model").getTable("G1").getColumns());
 	}	
 	
-	@Test(expected=QueryParserException.class)
+	@Test(expected=ParseException.class)
 	public void testTableWithPlan() throws Exception {
 		String ddl = "CREATE foreign table G1 as select 1";
 		MetadataStore mds = new MetadataStore();
@@ -514,7 +515,7 @@
 		assertEquals("boolean", fm.getInputParameters().get(0).getType());
 	}
 	
-	@Test(expected=QueryParserException.class) public void testInvalidFunctionBody() throws Exception {
+	@Test(expected=ParseException.class) public void testInvalidFunctionBody() throws Exception {
 		String ddl = "CREATE FUNCTION SourceFunc(flag boolean) RETURNS varchar AS SELECT 'a';";
 
 		Schema s = helpParse(ddl, "model").getSchema();
@@ -523,7 +524,7 @@
 		assertTrue( fm.getInputParameters().get(0).isVarArg());
 	}
 	
-	@Test(expected=QueryParserException.class) public void testInvalidProcedureBody() throws Exception {
+	@Test(expected=ParseException.class) public void testInvalidProcedureBody() throws Exception {
 		String ddl = "CREATE FOREIGN PROCEDURE SourceFunc(flag boolean) RETURNS varchar AS SELECT 'a';";
 
 		Schema s = helpParse(ddl, "model").getSchema();

Modified: trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java
===================================================================
--- trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -53,10 +53,10 @@
 import org.teiid.adminapi.AdminProcessingException;
 import org.teiid.adminapi.Translator;
 import org.teiid.adminapi.impl.ModelMetaData;
-import org.teiid.adminapi.impl.ModelMetaData.Message.Severity;
 import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.adminapi.impl.VDBMetadataParser;
 import org.teiid.adminapi.impl.VDBTranslatorMetaData;
+import org.teiid.adminapi.impl.ModelMetaData.Message.Severity;
 import org.teiid.common.buffer.BufferManager;
 import org.teiid.core.TeiidException;
 import org.teiid.deployers.CompositeVDB;
@@ -69,8 +69,8 @@
 import org.teiid.deployers.VirtualDatabaseException;
 import org.teiid.dqp.internal.datamgr.ConnectorManager;
 import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
-import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository.ConnectorManagerException;
 import org.teiid.dqp.internal.datamgr.TranslatorRepository;
+import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository.ConnectorManagerException;
 import org.teiid.jboss.rest.ResteasyEnabler;
 import org.teiid.logging.LogConstants;
 import org.teiid.logging.LogManager;
@@ -361,10 +361,7 @@
 					cached = true;
 					LogManager.logTrace(LogConstants.CTX_RUNTIME, "Model ", model.getName(), "in VDB ", vdb.getName(), " was loaded from cached metadata"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				} else {
-					factory = new MetadataFactory(vdb.getName(), vdb.getVersion(), model.getName(), datatypes, model.getProperties(), model.getSchemaText());
-					factory.setBuiltinDataTypes(builtin);
-					factory.getSchema().setPhysical(model.isSource());
-					
+					factory = createMetadataFactory(vdb, model);
 					ExecutionFactory ef = null;
 					Object cf = null;
 					

Modified: trunk/runtime/src/main/java/org/teiid/deployers/PgCatalogMetadataStore.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/PgCatalogMetadataStore.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/runtime/src/main/java/org/teiid/deployers/PgCatalogMetadataStore.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -28,7 +28,6 @@
 import java.util.Map;
 import java.util.Properties;
 
-import org.teiid.CommandContext;
 import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.core.types.ArrayImpl;
 import org.teiid.core.types.DataTypeManager;
@@ -37,7 +36,6 @@
 import org.teiid.metadata.FunctionMethod;
 import org.teiid.metadata.MetadataFactory;
 import org.teiid.metadata.Table;
-import org.teiid.metadata.FunctionMethod.PushDown;
 import org.teiid.metadata.Table.Type;
 import org.teiid.odbc.ODBCServerRemoteImpl;
 import org.teiid.query.metadata.TransformationMetadata;
@@ -539,29 +537,15 @@
 		return t;
 	}	
 	
-	private FunctionMethod addFunction(String javaFunction, String name) {
+	private FunctionMethod addFunction(String javaFunction, String name) throws TranslatorException {
 		Method[] methods = FunctionMethods.class.getMethods();
 		for (Method method : methods) {
 			if (!method.getName().equals(javaFunction)) {
 				continue;
 			}
-			String returnType = DataTypeManager.getDataTypeName(method.getReturnType());
-			Class<?>[] params = method.getParameterTypes();
-			String[] paramTypes = new String[params.length];
-			for (int i = 0; i < params.length; i++) {
-				paramTypes[i] = DataTypeManager.getDataTypeName(params[i]);
-			}
-			if (params.length > 0 && params[0] == CommandContext.class) {
-				paramTypes = Arrays.copyOfRange(paramTypes, 1, paramTypes.length);
-			}
-			FunctionMethod func = FunctionMethod.createFunctionMethod(name, name, "pg", returnType, paramTypes); //$NON-NLS-1$
-			setUUID(func);
-			getSchema().addFunction(func);
-			ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-			func.setInvocationMethod(javaFunction);
-			func.setPushdown(PushDown.CANNOT_PUSHDOWN);
-			func.setClassloader(classLoader);
-			func.setInvocationClass(FunctionMethods.class.getName());
+			FunctionMethod func = addFunction(name, method);
+			func.setCategory("pg"); //$NON-NLS-1$
+			func.setDescription(name);
 			return func;
 		}
 		throw new AssertionError("Could not find function"); //$NON-NLS-1$

Modified: trunk/runtime/src/main/java/org/teiid/runtime/AbstractVDBDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/runtime/AbstractVDBDeployer.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/runtime/src/main/java/org/teiid/runtime/AbstractVDBDeployer.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -40,12 +40,14 @@
 import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
 import org.teiid.logging.LogConstants;
 import org.teiid.logging.LogManager;
+import org.teiid.metadata.Datatype;
 import org.teiid.metadata.MetadataFactory;
 import org.teiid.metadata.MetadataRepository;
 import org.teiid.metadata.MetadataStore;
 import org.teiid.query.metadata.DDLMetadataRepository;
 import org.teiid.query.metadata.DirectQueryMetadataRepository;
 import org.teiid.query.metadata.NativeMetadataRepository;
+import org.teiid.query.parser.QueryParser;
 import org.teiid.translator.TranslatorException;
 
 public abstract class AbstractVDBDeployer {
@@ -181,6 +183,16 @@
 			getVDBRepository().finishDeployment(vdb.getName(), vdb.getVersion());
 		}
 	}
+	
+	protected MetadataFactory createMetadataFactory(VDBMetaData vdb,
+			ModelMetaData model) {
+		Map<String, Datatype> datatypes = this.getVDBRepository().getRuntimeTypeMap();
+		MetadataFactory factory = new MetadataFactory(vdb.getName(), vdb.getVersion(), model.getName(), datatypes, model.getProperties(), model.getSchemaText());
+		factory.setBuiltinDataTypes(this.getVDBRepository().getSystemStore().getDatatypes());
+		factory.getSchema().setPhysical(model.isSource());
+		factory.setParser(new QueryParser()); //for thread safety each factory gets it's own instance.
+		return factory;
+	}
 
 	/**
 	 * @throws VirtualDatabaseException  

Modified: trunk/runtime/src/main/java/org/teiid/runtime/EmbeddedServer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/runtime/EmbeddedServer.java	2012-09-27 18:42:37 UTC (rev 4482)
+++ trunk/runtime/src/main/java/org/teiid/runtime/EmbeddedServer.java	2012-09-27 19:55:13 UTC (rev 4483)
@@ -31,7 +31,6 @@
 import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -78,7 +77,6 @@
 import org.teiid.jdbc.TeiidSQLException;
 import org.teiid.logging.LogConstants;
 import org.teiid.logging.LogManager;
-import org.teiid.metadata.Datatype;
 import org.teiid.metadata.MetadataFactory;
 import org.teiid.metadata.MetadataRepository;
 import org.teiid.metadata.MetadataStore;
@@ -481,10 +479,7 @@
 			ConnectorManagerRepository cmr,
 			MetadataRepository metadataRepository, MetadataStore store,
 			AtomicInteger loadCount) throws TranslatorException {
-		Map<String, Datatype> datatypes = this.repo.getRuntimeTypeMap();
-		MetadataFactory factory = new MetadataFactory(vdb.getName(), vdb.getVersion(), model.getName(), datatypes, model.getProperties(), model.getSchemaText());
-		factory.setBuiltinDataTypes(this.repo.getSystemStore().getDatatypes());
-		factory.getSchema().setPhysical(model.isSource());
+		MetadataFactory factory = createMetadataFactory(vdb, model);
 		
 		ExecutionFactory ef = null;
 		Object cf = null;



More information about the teiid-commits mailing list