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;