[teiid-commits] teiid SVN: r2825 - in trunk: connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce and 17 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Mon Jan 10 17:09:55 EST 2011
Author: shawkins
Date: 2011-01-10 17:09:53 -0500 (Mon, 10 Jan 2011)
New Revision: 2825
Modified:
trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java
trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java
trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java
trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
trunk/engine/src/main/resources/org/teiid/query/i18n.properties
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java
trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java
trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java
Log:
consolidating view resolving in anticipation of TEIID-1326. also simplifying resolving arguments and adding a resolving hook for trigger actions for designer integration
Modified: trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -56,56 +56,6 @@
return PATTERN.matcher(sql).matches();
}
- /**
- * Simple method which normalizes a SQL string by replacing CR characters, new line characters and Tab characters with spaces,
- * then trimming the string to remove unneeded spaces.
- *
- * @param inputSqlString
- * @return
- * @since 5.0
- */
- public static String normalize(String inputSqlString) {
- String normalizedString = inputSqlString;
- if (inputSqlString != null && inputSqlString.length() > 0) {
- if ( inputSqlString.indexOf(NL_CHAR) > -1 ||
- inputSqlString.indexOf(CR_CHAR) > -1 ||
- inputSqlString.indexOf(TAB_CHAR) > -1 ||
- inputSqlString.indexOf(StringUtil.Constants.DBL_SPACE) > -1) {
- normalizedString = normalizedString.replace(NL_CHAR, SPACE_CHAR);
- normalizedString = normalizedString.replace(CR_CHAR, SPACE_CHAR);
- normalizedString = normalizedString.replace(TAB_CHAR, SPACE_CHAR);
- normalizedString = StringUtil.replaceAll(normalizedString,
- StringUtil.Constants.DBL_SPACE,
- StringUtil.Constants.SPACE);
-
- }
- normalizedString = StringUtil.collapseWhitespace(normalizedString);
- }
- return normalizedString;
- }
-
- /**
- * determine if the supplied sql Strings are different
- * @param newSql the new SQL String
- * @param oldSql the old SQL String
- * @return 'true' if strings differ, 'false' if same
- */
- public static boolean stringsAreDifferent(String newSql, String oldSql) {
- boolean isDifferent = true;
- if(newSql==null) {
- if(oldSql==null) {
- isDifferent = false;
- }
- } else if(oldSql!=null) {
- String normalizedNewSql = normalize(newSql);
- String normalizedOldSql = normalize(oldSql);
- if(normalizedNewSql.equals(normalizedOldSql)) {
- isDifferent=false;
- }
- }
- return isDifferent;
- }
-
public static SQLException createFeatureNotSupportedException() {
return new SQLFeatureNotSupportedException();
}
Modified: trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -162,7 +162,7 @@
QueryOptions qo = partnerFactory.createQueryOptions();
qo.setBatchSize(batchSize);
try {
- if(queryAll) {
+ if(queryAll != null && queryAll) {
qr = sfSoap.queryAll(queryString, sh);
} else {
MruHeader mruHeader = partnerFactory.createMruHeader();
Modified: trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -65,6 +65,7 @@
import org.teiid.logging.LogManager;
import org.teiid.query.QueryPlugin;
import org.teiid.query.processor.relational.ListNestedSortComparator;
+import org.teiid.query.sql.symbol.Expression;
/**
@@ -582,7 +583,41 @@
@Override
public int getSchemaSize(List elements) {
- return elements.size();
+ int total = 0;
+ //we make a assumption that the average column size under 64bits is approximately 128bytes
+ //this includes alignment, row/array, and reference overhead
+ for (Object element : elements) {
+ Class<?> type = ((Expression)element).getType();
+ if (type == DataTypeManager.DefaultDataClasses.STRING) {
+ total += 256; //assumes an "average" string length of approximately 100 chars
+ } else if (type == DataTypeManager.DefaultDataClasses.DATE
+ || type == DataTypeManager.DefaultDataClasses.TIME
+ || type == DataTypeManager.DefaultDataClasses.TIMESTAMP) {
+ total += 32;
+ } else if (type == DataTypeManager.DefaultDataClasses.LONG
+ || type == DataTypeManager.DefaultDataClasses.DOUBLE) {
+ total += 20;
+ } else if (type == DataTypeManager.DefaultDataClasses.INTEGER
+ || type == DataTypeManager.DefaultDataClasses.FLOAT) {
+ total += 14;
+ } else if (type == DataTypeManager.DefaultDataClasses.CHAR
+ || type == DataTypeManager.DefaultDataClasses.SHORT) {
+ total += 10;
+ } else if (type == DataTypeManager.DefaultDataClasses.BOOLEAN
+ || type == DataTypeManager.DefaultDataClasses.BYTE
+ || type == DataTypeManager.DefaultDataClasses.NULL) {
+ //even if value caching is turned off we don't bother counting
+ //the additional references that may exist to boolean and byte values
+ total += 8;
+ } else if (type == DataTypeManager.DefaultDataClasses.OBJECT) {
+ total += 1024;
+ } else {
+ total += 512; //assumes buffer overhead in the case of lobs
+ //however the account for lobs is misleading as the lob
+ //references are not actually removed from memory
+ }
+ }
+ return Math.max(1, total/128);
}
public void setMaxReserveBatchColumns(int maxReserve) {
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -22,7 +22,6 @@
package org.teiid.dqp.internal.process;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -43,7 +42,6 @@
import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
import org.teiid.dqp.internal.process.multisource.MultiSourceMetadataWrapper;
import org.teiid.dqp.message.RequestID;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SupportConstants;
import org.teiid.query.metadata.TempMetadataAdapter;
@@ -213,7 +211,7 @@
command = plan.getCommand();
} else {
command = QueryParser.getQueryParser().parseCommand(sql, info);
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, this.metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, this.metadata);
}
return getMetadataForCommand(command);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -280,7 +280,7 @@
}
//ensure that the user command is distinct from the processing command
//rewrite and planning may alter options, symbols, etc.
- QueryResolver.resolveCommand(command, metadata, analysisRecord);
+ QueryResolver.resolveCommand(command, metadata);
this.userCommand = (Command)command.clone();
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -180,9 +180,7 @@
if (tempID.getType() != null) {
return DataTypeManager.getDataTypeName( tempID.getType() );
}
- // If type is null, check element ID stored in temp group store.
- TempMetadataID storedTempID = this.tempStore.getTempElementID(tempID.getID());
- return DataTypeManager.getDataTypeName( storedTempID.getType() );
+ throw new AssertionError("No type set for element " + elementID); //$NON-NLS-1$
}
return this.actualMetadata.getElementType(elementID);
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,7 +25,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -33,7 +32,6 @@
import java.util.Set;
import org.teiid.api.exception.query.QueryMetadataException;
-import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryPlannerException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.api.exception.query.QueryValidatorException;
@@ -66,13 +64,11 @@
import org.teiid.query.optimizer.relational.rules.RuleCollapseSource;
import org.teiid.query.optimizer.relational.rules.RuleConstants;
import org.teiid.query.optimizer.relational.rules.RuleMergeCriteria;
-import org.teiid.query.parser.QueryParser;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.processor.relational.RelationalPlan;
import org.teiid.query.processor.relational.JoinNode.JoinStrategyType;
import org.teiid.query.resolver.ProcedureContainerResolver;
import org.teiid.query.resolver.QueryResolver;
-import org.teiid.query.resolver.util.BindVariableVisitor;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.rewriter.QueryRewriter;
import org.teiid.query.sql.LanguageObject;
@@ -1095,7 +1091,7 @@
qnode = metadata.getVirtualPlan(metadataID);
}
- Command result = getCommand(virtualGroup, qnode, cacheString, metadata, analysisRecord);
+ Command result = QueryResolver.resolveView(virtualGroup, qnode, cacheString, metadata);
return QueryRewriter.rewrite(result, metadata, context);
}
@@ -1136,7 +1132,7 @@
for (Object index : indexes) {
id.addIndex(resolveIndex(metadata, id, index));
}
- Command c = getCommand(table, metadata.getVirtualPlan(table.getMetadataID()), SQLConstants.Reserved.SELECT, metadata, analysisRecord);
+ Command c = QueryResolver.resolveView(table, metadata.getVirtualPlan(table.getMetadataID()), SQLConstants.Reserved.SELECT, metadata);
CacheHint hint = c.getCacheHint();
if (hint != null) {
recordAnnotation(analysisRecord, Annotation.MATERIALIZED_VIEW, Priority.LOW, "SimpleQueryResolver.cache_hint_used", table, matTableName, id.getCacheHint()); //$NON-NLS-1$
@@ -1162,36 +1158,6 @@
return primaryKey;
}
- private static Command getCommand(GroupSymbol virtualGroup, QueryNode qnode,
- String cacheString, QueryMetadataInterface qmi, AnalysisRecord analysisRecord) throws TeiidComponentException,
- QueryMetadataException, QueryResolverException,
- QueryValidatorException {
- Command result = (Command)qmi.getFromMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString); //$NON-NLS-1$
- if (result != null) {
- result = (Command)result.clone();
- } else {
- result = qnode.getCommand();
-
- if (result == null) {
- try {
- result = QueryParser.getQueryParser().parseCommand(qnode.getQuery());
- } catch(QueryParserException e) {
- throw new QueryResolverException(e, "ERR.015.008.0011", QueryPlugin.Util.getString("ERR.015.008.0011", qnode.getGroupName())); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- //Handle bindings and references
- List bindings = qnode.getBindings();
- if (bindings != null){
- BindVariableVisitor.bindReferences(result, bindings, qmi);
- }
- }
- QueryResolver.resolveCommand(result, Collections.EMPTY_MAP, qmi, analysisRecord);
- Request.validateWithVisitor(new ValidationVisitor(), qmi, result);
- qmi.addToMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString, result.clone()); //$NON-NLS-1$
- }
- return result;
- }
-
public static boolean isNoCacheGroup(QueryMetadataInterface metadata,
Object metadataID,
Option option) throws QueryMetadataException,
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -37,7 +37,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
@@ -101,7 +100,7 @@
throws TeiidComponentException, QueryPlannerException {
// Run resolver
try {
- QueryResolver.resolveCommand(query, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(query, metadata);
} catch(QueryResolverException e) {
throw new QueryPlannerException(e, e.getMessage());
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,7 +25,6 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.sql.lang.Command;
@@ -40,14 +39,13 @@
* Resolve the command using the metadata.
* @param command The command to resolve
* @param metadata Metadata
- * @param analysis
* @param resolveNullLiterals true if the resolver should consider replacing null literals with more appropriate types
* @return the TempMetadataStore containing the metadata defined by this command
* @throws QueryMetadataException If there is a metadata problem
* @throws QueryResolverException If the query cannot be resolved
* @throws TeiidComponentException If there is an internal error
*/
- void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException;
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,7 +23,6 @@
package org.teiid.query.resolver;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import org.teiid.api.exception.query.QueryMetadataException;
@@ -60,8 +59,7 @@
public abstract class ProcedureContainerResolver implements CommandResolver {
public abstract void resolveProceduralCommand(Command command,
- TempMetadataAdapter metadata,
- AnalysisRecord analysis) throws QueryMetadataException,
+ TempMetadataAdapter metadata) throws QueryMetadataException,
QueryResolverException,
TeiidComponentException;
@@ -114,8 +112,8 @@
ta.setView(procCommand.getGroup());
TempMetadataAdapter tma = new TempMetadataAdapter(metadata, new TempMetadataStore());
ta.setTemporaryMetadata(tma.getMetadataStore().getData());
- GroupContext externalGroups = procCommand.getExternalGroupContexts();
-
+ GroupContext externalGroups = ta.getExternalGroupContexts();
+ //TODO: it seems easier to just inline the handling here rather than have each of the resolvers check for trigger actions
List<ElementSymbol> viewElements = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata);
if (procCommand instanceof Update || procCommand instanceof Insert) {
addChanging(tma.getMetadataStore(), externalGroups, viewElements);
@@ -124,10 +122,9 @@
if (procCommand instanceof Update || procCommand instanceof Delete) {
ProcedureContainerResolver.addScalarGroup(SQLConstants.Reserved.OLD, tma.getMetadataStore(), externalGroups, viewElements);
}
-
- new UpdateProcedureResolver().resolveBlock(new CreateUpdateProcedureCommand(), ta.getBlock(), externalGroups, tma, analysis);
-
- return subCommand;
+ QueryResolver.setChildMetadata(subCommand, tma.getMetadataStore().getData(), externalGroups);
+ QueryResolver.resolveCommand(subCommand, metadata);
+ return ta;
}
//find the childMetadata using a clean metadata store
@@ -138,7 +135,7 @@
QueryResolver.setChildMetadata(subCommand, childMetadata.getData(), externalGroups);
- QueryResolver.resolveCommand(subCommand, Collections.EMPTY_MAP, metadata, analysis);
+ QueryResolver.resolveCommand(subCommand, metadata);
return subCommand;
}
@@ -215,16 +212,16 @@
}
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
ProcedureContainer procCommand = (ProcedureContainer)command;
resolveGroup(metadata, procCommand);
- resolveProceduralCommand(procCommand, metadata, analysis);
+ resolveProceduralCommand(procCommand, metadata);
getPlan(metadata, procCommand);
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,19 +25,24 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.teiid.api.exception.query.QueryMetadataException;
+import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
+import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.core.TeiidComponentException;
+import org.teiid.dqp.internal.process.Request;
import org.teiid.logging.LogManager;
+import org.teiid.query.QueryPlugin;
import org.teiid.query.analysis.AnalysisRecord;
+import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.metadata.TempMetadataStore;
+import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.command.BatchedUpdateResolver;
import org.teiid.query.resolver.command.DeleteResolver;
import org.teiid.query.resolver.command.DynamicCommandResolver;
@@ -49,6 +54,7 @@
import org.teiid.query.resolver.command.UpdateProcedureResolver;
import org.teiid.query.resolver.command.UpdateResolver;
import org.teiid.query.resolver.command.XMLQueryResolver;
+import org.teiid.query.resolver.util.BindVariableVisitor;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.resolver.util.ResolverVisitor;
import org.teiid.query.sql.lang.Command;
@@ -60,9 +66,11 @@
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.lang.SubqueryContainer;
import org.teiid.query.sql.lang.UnaryFromClause;
+import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
+import org.teiid.query.validator.ValidationVisitor;
/**
@@ -91,67 +99,34 @@
return cr.expandCommand(proc, metadata, analysisRecord);
}
- /**
- * This implements an algorithm to resolve all the symbols created by the parser into real metadata IDs
- * @param command Command the SQL command we are running (Select, Update, Insert, Delete)
- * @param metadata QueryMetadataInterface the metadata
- * @param analysis The analysis record which can be used to add anotations and debug information.
- */
- public static void resolveCommand(Command command, QueryMetadataInterface metadata, AnalysisRecord analysis)
- throws QueryResolverException, TeiidComponentException {
+ /**
+ * This implements an algorithm to resolve all the symbols created by the
+ * parser into real metadata IDs
+ *
+ * @param command
+ * Command the SQL command we are running (Select, Update,
+ * Insert, Delete)
+ * @param metadata
+ * QueryMetadataInterface the metadata
+ * @return
+ */
+ public static TempMetadataStore resolveCommand(Command command,
+ QueryMetadataInterface metadata) throws QueryResolverException,
+ TeiidComponentException {
- resolveCommand(command, Collections.EMPTY_MAP, metadata, analysis);
- }
+ return resolveCommand(command, metadata, true);
+ }
- /**
- * This implements an algorithm to resolve all the symbols created by the parser into real metadata IDs
- * @param command Command the SQL command we are running (Select, Update, Insert, Delete)
- * @param metadata QueryMetadataInterface the metadata
- */
- public static void resolveCommand(Command command, QueryMetadataInterface metadata)
- throws QueryResolverException, TeiidComponentException {
-
- resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
- }
-
- /**
- * This implements an algorithm to resolve all the symbols created by the parser into real metadata IDs
- * @param externalMetadata Map of GroupSymbol to a List of ElementSymbol that identifies
- * valid external groups that can be resolved against. Any elements resolved against external
- * groups will be treated as variables
- * @param metadata QueryMetadataInterface the metadata
- * @param analysis The analysis record which can be used to add anotations and debug information.
- * @param command Command the SQL command we are running (Select, Update, Insert, Delete)
- */
- public static TempMetadataStore resolveCommand(Command currentCommand, Map externalMetadata, QueryMetadataInterface metadata,
- AnalysisRecord analysis)
- throws QueryResolverException, TeiidComponentException {
- return resolveCommand(currentCommand, externalMetadata, metadata, analysis, true);
- }
-
- public static TempMetadataStore resolveCommand(Command currentCommand, Map externalMetadata, QueryMetadataInterface metadata,
- AnalysisRecord analysis, boolean resolveNullLiterals)
+ public static TempMetadataStore resolveCommand(Command currentCommand, QueryMetadataInterface metadata, boolean resolveNullLiterals)
throws QueryResolverException, TeiidComponentException {
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving command", currentCommand}); //$NON-NLS-1$
TempMetadataAdapter resolverMetadata = null;
try {
- TempMetadataStore rootExternalStore = new TempMetadataStore();
- if(externalMetadata != null) {
- for(Iterator iter = externalMetadata.entrySet().iterator(); iter.hasNext();) {
- Map.Entry entry = (Map.Entry)iter.next();
- GroupSymbol group = (GroupSymbol) entry.getKey();
- List elements = (List) entry.getValue();
- rootExternalStore.addTempGroup(group.getName(), elements);
- currentCommand.addExternalGroupToContext(group);
- }
- }
Map tempMetadata = currentCommand.getTemporaryMetadata();
if(tempMetadata == null) {
- currentCommand.setTemporaryMetadata(new HashMap(rootExternalStore.getData()));
- } else {
- tempMetadata.putAll(rootExternalStore.getData());
+ currentCommand.setTemporaryMetadata(new HashMap());
}
TempMetadataStore discoveredMetadata = new TempMetadataStore(currentCommand.getTemporaryMetadata());
@@ -159,12 +134,11 @@
resolverMetadata = new TempMetadataAdapter(metadata, discoveredMetadata);
// Resolve external groups for command
- Collection externalGroups = currentCommand.getAllExternalGroups();
- Iterator extIter = externalGroups.iterator();
- while(extIter.hasNext()) {
- GroupSymbol extGroup = (GroupSymbol) extIter.next();
+ Collection<GroupSymbol> externalGroups = currentCommand.getAllExternalGroups();
+ for (GroupSymbol extGroup : externalGroups) {
Object metadataID = extGroup.getMetadataID();
//make sure that the group is resolved and that it is pointing to the appropriate temp group
+ //TODO: this is mainly for XML resolving since it sends external groups in unresolved
if (metadataID == null || (!(extGroup.getMetadataID() instanceof TempMetadataID) && discoveredMetadata.getTempGroupID(extGroup.getName()) != null)) {
metadataID = resolverMetadata.getGroupID(extGroup.getName());
extGroup.setMetadataID(metadataID);
@@ -174,7 +148,7 @@
CommandResolver resolver = chooseResolver(currentCommand, resolverMetadata);
// Resolve this command
- resolver.resolveCommand(currentCommand, resolverMetadata, analysis, resolveNullLiterals);
+ resolver.resolveCommand(currentCommand, resolverMetadata, resolveNullLiterals);
} catch(QueryMetadataException e) {
throw new QueryResolverException(e, e.getMessage());
}
@@ -207,6 +181,7 @@
case Command.TYPE_UPDATE: return UPDATE_RESOLVER;
case Command.TYPE_DELETE: return DELETE_RESOLVER;
case Command.TYPE_STORED_PROCEDURE: return EXEC_RESOLVER;
+ case Command.TYPE_TRIGGER_ACTION: return UPDATE_PROCEDURE_RESOLVER;
case Command.TYPE_UPDATE_PROCEDURE: return UPDATE_PROCEDURE_RESOLVER;
case Command.TYPE_BATCHED_UPDATE: return BATCHED_UPDATE_RESOLVER;
case Command.TYPE_DYNAMIC: return DYNAMIC_COMMAND_RESOLVER;
@@ -300,15 +275,61 @@
}
public static void resolveSubqueries(Command command,
- TempMetadataAdapter metadata, AnalysisRecord analysis, Collection<GroupSymbol> externalGroups)
+ TempMetadataAdapter metadata, Collection<GroupSymbol> externalGroups)
throws QueryResolverException, TeiidComponentException {
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(command)) {
QueryResolver.setChildMetadata(container.getCommand(), command);
if (externalGroups != null) {
container.getCommand().pushNewResolvingContext(externalGroups);
}
- QueryResolver.resolveCommand(container.getCommand(), Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(container.getCommand(), metadata.getMetadata());
}
}
+
+ public static Command resolveView(GroupSymbol virtualGroup, QueryNode qnode,
+ String cacheString, QueryMetadataInterface qmi) throws TeiidComponentException,
+ QueryMetadataException, QueryResolverException,
+ QueryValidatorException {
+ Command result = (Command)qmi.getFromMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString); //$NON-NLS-1$
+ if (result != null) {
+ result = (Command)result.clone();
+ } else {
+ result = qnode.getCommand();
+
+ if (result == null) {
+ try {
+ result = QueryParser.getQueryParser().parseCommand(qnode.getQuery());
+ } catch(QueryParserException e) {
+ throw new QueryResolverException(e, "ERR.015.008.0011", QueryPlugin.Util.getString("ERR.015.008.0011", qnode.getGroupName())); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ //Handle bindings and references
+ List bindings = qnode.getBindings();
+ if (bindings != null){
+ BindVariableVisitor.bindReferences(result, bindings, qmi);
+ }
+ }
+ QueryResolver.resolveCommand(result, qmi);
+ Request.validateWithVisitor(new ValidationVisitor(), qmi, result);
+ qmi.addToMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString, result.clone()); //$NON-NLS-1$
+ }
+ return result;
+ }
+
+ public static void buildExternalGroups(Map<GroupSymbol, List<ElementSymbol>> externalMetadata, Command currentCommand) {
+ TempMetadataStore rootExternalStore = new TempMetadataStore();
+ for(Map.Entry<GroupSymbol, List<ElementSymbol>> entry : externalMetadata.entrySet()) {
+ GroupSymbol group = entry.getKey();
+ List<ElementSymbol> elements = entry.getValue();
+ rootExternalStore.addTempGroup(group.getName(), elements);
+ currentCommand.addExternalGroupToContext(group);
+ }
+ Map tempMetadata = currentCommand.getTemporaryMetadata();
+ if(tempMetadata == null) {
+ currentCommand.setTemporaryMetadata(rootExternalStore.getData());
+ } else {
+ tempMetadata.putAll(rootExternalStore.getData());
+ }
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -22,13 +22,11 @@
package org.teiid.query.resolver.command;
-import java.util.Collections;
import java.util.Iterator;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
import org.teiid.query.resolver.QueryResolver;
@@ -42,7 +40,7 @@
*/
public class BatchedUpdateResolver implements CommandResolver {
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
BatchedUpdateCommand batchedUpdateCommand = (BatchedUpdateCommand) command;
@@ -50,7 +48,7 @@
for (Iterator i = batchedUpdateCommand.getSubCommands().iterator(); i.hasNext();) {
Command subCommand = (Command)i.next();
QueryResolver.setChildMetadata(subCommand, command);
- QueryResolver.resolveCommand(subCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(subCommand, metadata.getMetadata());
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -28,7 +28,6 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataStore;
@@ -48,9 +47,9 @@
public class DeleteResolver extends ProcedureContainerResolver {
/**
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
//Cast to known type
@@ -58,7 +57,7 @@
Set<GroupSymbol> groups = new HashSet<GroupSymbol>();
groups.add(delete.getGroup());
- QueryResolver.resolveSubqueries(command, metadata, analysis, groups);
+ QueryResolver.resolveSubqueries(command, metadata, groups);
ResolverVisitor.resolveLanguageObject(delete, groups, delete.getExternalGroupContexts(), metadata);
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -32,7 +32,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.CommandResolver;
@@ -50,9 +49,9 @@
public class DynamicCommandResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
DynamicCommand dynamicCmd = (DynamicCommand)command;
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,10 +23,8 @@
package org.teiid.query.resolver.command;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -36,7 +34,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.StoredProcedureInfo;
@@ -239,9 +236,7 @@
// Look through parameters to find input elements - these become child metadata
List<ElementSymbol> tempElements = new ArrayList<ElementSymbol>();
- Iterator iter = storedProcedureCommand.getParameters().iterator();
- while(iter.hasNext()) {
- SPParameter param = (SPParameter) iter.next();
+ for (SPParameter param : storedProcedureCommand.getParameters()) {
if(param.getParameterType() == ParameterInfo.IN || param.getParameterType() == ParameterInfo.INOUT) {
ElementSymbol symbol = param.getParameterSymbol();
tempElements.add(symbol);
@@ -254,58 +249,53 @@
}
/**
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
findCommandMetadata(command, metadata.getMetadataStore(), metadata);
//Resolve expressions on input parameters
StoredProcedure storedProcedureCommand = (StoredProcedure) command;
- List params = storedProcedureCommand.getParameters();
- if(params.size() > 0) {
- GroupContext externalGroups = storedProcedureCommand.getExternalGroupContexts();
- Iterator paramIter = params.iterator();
- while(paramIter.hasNext()) {
- SPParameter param = (SPParameter) paramIter.next();
- Expression expr = param.getExpression();
- if(expr == null) {
- continue;
- }
- for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
- QueryResolver.setChildMetadata(container.getCommand(), command);
-
- QueryResolver.resolveCommand(container.getCommand(), Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
- }
- ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
- Class paramType = param.getClassType();
-
- ResolverUtil.setDesiredType(expr, paramType, storedProcedureCommand);
+ GroupContext externalGroups = storedProcedureCommand.getExternalGroupContexts();
+ for (SPParameter param : storedProcedureCommand.getParameters()) {
+ Expression expr = param.getExpression();
+ if(expr == null) {
+ continue;
+ }
+ for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
+ QueryResolver.setChildMetadata(container.getCommand(), command);
- // Compare type of parameter expression against parameter type
- // and add implicit conversion if necessary
- Class exprType = expr.getType();
- if(paramType == null || exprType == null) {
- throw new QueryResolverException("ERR.015.008.0061", QueryPlugin.Util.getString("ERR.015.008.0061", storedProcedureCommand.getProcedureName(), param.getName())); //$NON-NLS-1$ //$NON-NLS-2$
- }
- String tgtType = DataTypeManager.getDataTypeName(paramType);
- String srcType = DataTypeManager.getDataTypeName(exprType);
- Expression result = null;
-
- if (param.getParameterType() == SPParameter.RETURN_VALUE || param.getParameterType() == SPParameter.OUT) {
- if (!ResolverUtil.canImplicitlyConvert(tgtType, srcType)) {
- throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.out_type_mismatch", param.getParameterSymbol(), tgtType, srcType)); //$NON-NLS-1$
- }
- } else {
- try {
- result = ResolverUtil.convertExpression(expr, tgtType, metadata);
- } catch (QueryResolverException e) {
- throw new QueryResolverException(e, QueryPlugin.Util.getString("ExecResolver.Param_convert_fail", new Object[] { srcType, tgtType})); //$NON-NLS-1$
- }
- param.setExpression(result);
- }
+ QueryResolver.resolveCommand(container.getCommand(), metadata.getMetadata());
}
+ ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
+ Class<?> paramType = param.getClassType();
+
+ ResolverUtil.setDesiredType(expr, paramType, storedProcedureCommand);
+
+ // Compare type of parameter expression against parameter type
+ // and add implicit conversion if necessary
+ Class<?> exprType = expr.getType();
+ if(paramType == null || exprType == null) {
+ throw new QueryResolverException("ERR.015.008.0061", QueryPlugin.Util.getString("ERR.015.008.0061", storedProcedureCommand.getProcedureName(), param.getName())); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ String tgtType = DataTypeManager.getDataTypeName(paramType);
+ String srcType = DataTypeManager.getDataTypeName(exprType);
+ Expression result = null;
+
+ if (param.getParameterType() == SPParameter.RETURN_VALUE || param.getParameterType() == SPParameter.OUT) {
+ if (!ResolverUtil.canImplicitlyConvert(tgtType, srcType)) {
+ throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.out_type_mismatch", param.getParameterSymbol(), tgtType, srcType)); //$NON-NLS-1$
+ }
+ } else {
+ try {
+ result = ResolverUtil.convertExpression(expr, tgtType, metadata);
+ } catch (QueryResolverException e) {
+ throw new QueryResolverException(e, QueryPlugin.Util.getString("ExecResolver.Param_convert_fail", new Object[] { srcType, tgtType})); //$NON-NLS-1$
+ }
+ param.setExpression(result);
+ }
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -24,7 +24,6 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -38,7 +37,6 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.Assertion;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.ProcedureContainerResolver;
@@ -66,16 +64,16 @@
/**
* Resolve an INSERT. Need to resolve elements, constants, types, etc.
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
// Cast to known type
Insert insert = (Insert) command;
if (insert.getValues() != null) {
- QueryResolver.resolveSubqueries(command, metadata, analysis, null);
+ QueryResolver.resolveSubqueries(command, metadata, null);
//variables and values must be resolved separately to account for implicitly defined temp groups
resolveList(insert.getValues(), metadata, insert.getExternalGroupContexts(), null);
}
@@ -83,7 +81,7 @@
if(insert.getQueryExpression() != null) {
QueryResolver.setChildMetadata(insert.getQueryExpression(), command);
- QueryResolver.resolveCommand(insert.getQueryExpression(), Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false);
}
Set<GroupSymbol> groups = new HashSet<GroupSymbol>();
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,7 +23,6 @@
package org.teiid.query.resolver.command;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -33,7 +32,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
@@ -50,19 +48,19 @@
public class SetQueryResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
SetQuery setQuery = (SetQuery) command;
- SimpleQueryResolver.resolveWith(metadata, analysis, setQuery);
+ SimpleQueryResolver.resolveWith(metadata, setQuery);
QueryCommand firstCommand = setQuery.getLeftQuery();
QueryResolver.setChildMetadata(firstCommand, setQuery);
- QueryResolver.resolveCommand(firstCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(firstCommand, metadata.getMetadata(), false);
List firstProject = firstCommand.getProjectedSymbols();
List<Class<?>> firstProjectTypes = new ArrayList<Class<?>>();
@@ -74,7 +72,7 @@
QueryCommand rightCommand = setQuery.getRightQuery();
QueryResolver.setChildMetadata(rightCommand, setQuery);
- QueryResolver.resolveCommand(rightCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(rightCommand, metadata.getMetadata(), false);
if (firstProject.size() != rightCommand.getProjectedSymbols().size()) {
throw new QueryResolverException(QueryPlugin.Util.getString("ERR.015.012.0035", setQuery.getOperation())); //$NON-NLS-1$
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -42,7 +42,6 @@
import org.teiid.core.TeiidRuntimeException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.StoredProcedureInfo;
import org.teiid.query.metadata.SupportConstants;
@@ -92,17 +91,17 @@
private static final String ALL_IN_GROUP_SUFFIX = ".*"; //$NON-NLS-1$
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
Query query = (Query) command;
- resolveWith(metadata, analysis, query);
+ resolveWith(metadata, query);
try {
- QueryResolverVisitor qrv = new QueryResolverVisitor(query, metadata, analysis);
+ QueryResolverVisitor qrv = new QueryResolverVisitor(query, metadata);
qrv.visit(query);
ResolverVisitor visitor = (ResolverVisitor)qrv.getVisitor();
visitor.throwException(true);
@@ -138,7 +137,7 @@
}
static void resolveWith(TempMetadataAdapter metadata,
- AnalysisRecord analysis, QueryCommand query) throws QueryResolverException, TeiidComponentException {
+ QueryCommand query) throws QueryResolverException, TeiidComponentException {
if (query.getWith() == null) {
return;
}
@@ -149,7 +148,7 @@
QueryResolver.setChildMetadata(queryExpression, query);
try {
- QueryResolver.resolveCommand(queryExpression, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(queryExpression, metadata.getMetadata(), false);
} catch (TeiidException err) {
throw new TeiidRuntimeException(err);
}
@@ -211,16 +210,14 @@
private List<GroupSymbol> implicitGroups = new LinkedList<GroupSymbol>();
private TempMetadataAdapter metadata;
private Query query;
- private AnalysisRecord analysis;
private boolean allowImplicit = true;
- public QueryResolverVisitor(Query query, TempMetadataAdapter metadata, AnalysisRecord record) {
+ public QueryResolverVisitor(Query query, TempMetadataAdapter metadata) {
super(new ResolverVisitor(metadata, null, query.getExternalGroupContexts()));
ResolverVisitor visitor = (ResolverVisitor)getVisitor();
visitor.setGroups(currentGroups);
this.query = query;
this.metadata = metadata;
- this.analysis = record;
}
protected void postVisitVisitor(LanguageObject obj) {
@@ -260,7 +257,7 @@
command.pushNewResolvingContext(externalGroups);
try {
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(command, metadata.getMetadata(), false);
} catch (TeiidException err) {
throw new TeiidRuntimeException(err);
}
@@ -496,7 +493,7 @@
}
}
- QueryResolver.resolveCommand(procQuery, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(procQuery, metadata.getMetadata());
List<SingleElementSymbol> projectedSymbols = procQuery.getProjectedSymbols();
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -31,7 +31,6 @@
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.CommandResolver;
@@ -51,9 +50,9 @@
public class TempTableResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
if(command.getType() == Command.TYPE_CREATE) {
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,27 +25,24 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.teiid.api.exception.query.QueryMetadataException;
-import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
+import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.api.exception.query.UnresolvedSymbolDescription;
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.language.SQLConstants;
import org.teiid.logging.LogManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
-import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.metadata.TempMetadataStore;
-import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.CommandResolver;
import org.teiid.query.resolver.ProcedureContainerResolver;
import org.teiid.query.resolver.QueryResolver;
@@ -69,10 +66,12 @@
import org.teiid.query.sql.proc.IfStatement;
import org.teiid.query.sql.proc.LoopStatement;
import org.teiid.query.sql.proc.Statement;
+import org.teiid.query.sql.proc.TriggerAction;
import org.teiid.query.sql.proc.WhileStatement;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
@@ -89,9 +88,7 @@
// not set by user command resolver in case of modeler
if(virtualGroup == null) {
- Iterator groupIter = procCommand.getAllExternalGroups().iterator();
- while(groupIter.hasNext()) {
- GroupSymbol groupSymbol = (GroupSymbol) groupIter.next();
+ for (GroupSymbol groupSymbol : procCommand.getAllExternalGroups()) {
String groupName = groupSymbol.getName();
if(!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUT) &&
!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUTS) &&
@@ -127,35 +124,31 @@
*/
public static Command getQueryTransformCmd(GroupSymbol virtualGroup, QueryMetadataInterface metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
- Command transformCmd = (Command)metadata.getFromMetadataCache(virtualGroup.getMetadataID(), "transformation/select"); //$NON-NLS-1$
- if (transformCmd != null) {
- return transformCmd;
- }
- QueryNode queryNode = metadata.getVirtualPlan(virtualGroup.getMetadataID());
- String transformQuery = queryNode.getQuery();
- try {
- transformCmd = QueryParser.getQueryParser().parseCommand(transformQuery);
- } catch(QueryParserException e) {
- throw new QueryResolverException(e, "ERR.015.008.0013", QueryPlugin.Util.getString("ERR.015.008.0013", virtualGroup)); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- QueryResolver.resolveCommand(transformCmd, metadata);
-
- return transformCmd;
+ try {
+ return QueryResolver.resolveView(virtualGroup, metadata.getVirtualPlan(virtualGroup.getMetadataID()), SQLConstants.Reserved.SELECT, metadata);
+ } catch (QueryValidatorException e) {
+ throw new QueryResolverException(e, e.getMessage());
+ }
}
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
+
+ if (command instanceof TriggerAction) {
+ TriggerAction ta = (TriggerAction)command;
+ resolveBlock(new CreateUpdateProcedureCommand(), ta.getBlock(), ta.getExternalGroupContexts(), metadata);
+ return;
+ }
CreateUpdateProcedureCommand procCommand = (CreateUpdateProcedureCommand) command;
//by creating a new group context here it means that variables will resolve with a higher precedence than input/changing
GroupContext externalGroups = command.getExternalGroupContexts();
- List symbols = new LinkedList();
+ List<ElementSymbol> symbols = new LinkedList<ElementSymbol>();
// virtual group elements in HAS and TRANSLATE criteria have to be resolved
if(procCommand.isUpdateProcedure()){
@@ -174,11 +167,11 @@
symbols.add(updateCount);
ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, metadata.getMetadataStore(), externalGroups, symbols);
- resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata, analysis);
+ resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata);
}
public void resolveBlock(CreateUpdateProcedureCommand command, Block block, GroupContext externalGroups,
- TempMetadataAdapter metadata, AnalysisRecord analysis)
+ TempMetadataAdapter metadata)
throws QueryResolverException, QueryMetadataException, TeiidComponentException {
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving block", block}); //$NON-NLS-1$
@@ -190,13 +183,12 @@
//create a new variables group for this block
GroupSymbol variables = ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, store, externalGroups, new LinkedList());
- Iterator stmtIter = block.getStatements().iterator();
- while(stmtIter.hasNext()) {
- resolveStatement(command, (Statement)stmtIter.next(), externalGroups, variables, metadata, analysis);
+ for (Statement statement : block.getStatements()) {
+ resolveStatement(command, statement, externalGroups, variables, metadata);
}
}
- private void resolveStatement(CreateUpdateProcedureCommand command, Statement statement, GroupContext externalGroups, GroupSymbol variables, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ private void resolveStatement(CreateUpdateProcedureCommand command, Statement statement, GroupContext externalGroups, GroupSymbol variables, TempMetadataAdapter metadata)
throws QueryResolverException, QueryMetadataException, TeiidComponentException {
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving statement", statement}); //$NON-NLS-1$
@@ -205,19 +197,19 @@
IfStatement ifStmt = (IfStatement) statement;
Criteria ifCrit = ifStmt.getCondition();
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ifCrit)) {
- resolveEmbeddedCommand(metadata, externalGroups, container.getCommand(), analysis);
+ resolveEmbeddedCommand(metadata, externalGroups, container.getCommand());
}
ResolverVisitor.resolveLanguageObject(ifCrit, null, externalGroups, metadata);
- resolveBlock(command, ifStmt.getIfBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, ifStmt.getIfBlock(), externalGroups, metadata);
if(ifStmt.hasElseBlock()) {
- resolveBlock(command, ifStmt.getElseBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, ifStmt.getElseBlock(), externalGroups, metadata);
}
break;
case Statement.TYPE_COMMAND:
CommandStatement cmdStmt = (CommandStatement) statement;
Command subCommand = cmdStmt.getCommand();
- TempMetadataStore discoveredMetadata = resolveEmbeddedCommand(metadata, externalGroups, subCommand, analysis);
+ TempMetadataStore discoveredMetadata = resolveEmbeddedCommand(metadata, externalGroups, subCommand);
if (subCommand instanceof StoredProcedure) {
StoredProcedure sp = (StoredProcedure)subCommand;
@@ -274,7 +266,7 @@
if (exprStmt.getExpression() != null) {
Expression expr = exprStmt.getExpression();
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
- resolveEmbeddedCommand(metadata, externalGroups, container.getCommand(), analysis);
+ resolveEmbeddedCommand(metadata, externalGroups, container.getCommand());
}
ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
}
@@ -307,10 +299,10 @@
WhileStatement whileStmt = (WhileStatement) statement;
Criteria whileCrit = whileStmt.getCondition();
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(whileCrit)) {
- resolveEmbeddedCommand(metadata, externalGroups, container.getCommand(), analysis);
+ resolveEmbeddedCommand(metadata, externalGroups, container.getCommand());
}
ResolverVisitor.resolveLanguageObject(whileCrit, null, externalGroups, metadata);
- resolveBlock(command, whileStmt.getBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, whileStmt.getBlock(), externalGroups, metadata);
break;
case Statement.TYPE_LOOP:
LoopStatement loopStmt = (LoopStatement) statement;
@@ -326,8 +318,8 @@
throw new QueryResolverException(errorMsg);
}
Command cmd = loopStmt.getCommand();
- resolveEmbeddedCommand(metadata, externalGroups, cmd, analysis);
- List symbols = cmd.getProjectedSymbols();
+ resolveEmbeddedCommand(metadata, externalGroups, cmd);
+ List<SingleElementSymbol> symbols = cmd.getProjectedSymbols();
//add the loop cursor group into its own context
TempMetadataStore store = new TempMetadataStore(new HashMap(metadata.getMetadataStore().getData()));
@@ -336,7 +328,7 @@
ProcedureContainerResolver.addScalarGroup(groupName, store, externalGroups, symbols);
- resolveBlock(command, loopStmt.getBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, loopStmt.getBlock(), externalGroups, metadata);
break;
case Statement.TYPE_BREAK:
case Statement.TYPE_CONTINUE:
@@ -347,11 +339,11 @@
}
private TempMetadataStore resolveEmbeddedCommand(TempMetadataAdapter metadata, GroupContext groupContext,
- Command cmd, AnalysisRecord analysis) throws TeiidComponentException,
+ Command cmd) throws TeiidComponentException,
QueryResolverException {
QueryResolver.setChildMetadata(cmd, metadata.getMetadataStore().getData(), groupContext);
- return QueryResolver.resolveCommand(cmd, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ return QueryResolver.resolveCommand(cmd, metadata.getMetadata());
}
private void collectDeclareVariable(DeclareStatement obj, GroupSymbol variables, TempMetadataAdapter metadata, GroupContext externalGroups) throws QueryResolverException, TeiidComponentException {
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -35,7 +35,6 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.ProcedureContainerResolver;
@@ -59,9 +58,9 @@
public class UpdateResolver extends ProcedureContainerResolver implements VariableResolver {
/**
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
//Cast to known type
@@ -73,7 +72,7 @@
for (SetClause clause : update.getChangeList().getClauses()) {
ResolverVisitor.resolveLanguageObject(clause.getSymbol(), groups, null, metadata);
}
- QueryResolver.resolveSubqueries(command, metadata, analysis, groups);
+ QueryResolver.resolveSubqueries(command, metadata, groups);
ResolverVisitor.resolveLanguageObject(update, groups, update.getExternalGroupContexts(), metadata);
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -33,7 +33,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.util.StringUtil;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
@@ -63,9 +62,9 @@
public class XMLQueryResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
Query query = (Query) command;
@@ -96,7 +95,7 @@
QueryResolver.setChildMetadata(subCommand, command);
- QueryResolver.resolveCommand(subCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(subCommand, metadata.getMetadata());
}
if(crit != null) {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -165,7 +165,7 @@
getExternalGroupContexts().addGroup(group);
}
- public void addExternalGroupsToContext(Collection groups) {
+ public void addExternalGroupsToContext(Collection<GroupSymbol> groups) {
getExternalGroupContexts().getGroups().addAll(groups);
}
@@ -177,8 +177,8 @@
}
}
- public void pushNewResolvingContext(Collection groups) {
- externalGroups = new GroupContext(externalGroups, new LinkedList(groups));
+ public void pushNewResolvingContext(Collection<GroupSymbol> groups) {
+ externalGroups = new GroupContext(externalGroups, new LinkedList<GroupSymbol>(groups));
}
public GroupContext getExternalGroupContexts() {
@@ -188,9 +188,9 @@
return this.externalGroups;
}
- public List getAllExternalGroups() {
+ public List<GroupSymbol> getAllExternalGroups() {
if (externalGroups == null) {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
return externalGroups.getAllGroups();
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -476,44 +476,18 @@
validateAssignment(obj, obj.getVariable());
}
-
- public void visit(IfStatement obj) {
- Criteria criteria = obj.getCondition();
-
- validatorCriteriaStatement(obj, criteria);
- }
- public void visit(WhileStatement obj) {
- Criteria criteria = obj.getCondition();
-
- validatorCriteriaStatement(obj, criteria);
- }
-
- /**
- * @param obj
- * @param criteria
- */
- private void validatorCriteriaStatement(LanguageObject obj,
- Criteria criteria) {
- Iterator criteriaIter = PredicateCollectorVisitor.getPredicates(criteria).iterator();
- while(criteriaIter.hasNext()) {
- Criteria predicateCriteria = (Criteria) criteriaIter.next();
- Iterator elmntIter = ElementCollectorVisitor.getElements(predicateCriteria, true).iterator();
- if(predicateCriteria instanceof TranslateCriteria) {
- handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0019"), obj); //$NON-NLS-1$
- } else if(!(predicateCriteria instanceof HasCriteria)) {
- while(elmntIter.hasNext()) {
- ElementSymbol element = (ElementSymbol) elmntIter.next();
- if(!element.isExternalReference()) {
- handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0020"), obj); //$NON-NLS-1$
- }
- }
- }
+ @Override
+ public void visit(HasCriteria obj) {
+ if (this.updateProc == null || !this.updateProc.isUpdateProcedure()) {
+ handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0019"), obj); //$NON-NLS-1$
}
}
-
+
public void visit(TranslateCriteria obj) {
-
+ if (this.updateProc == null || !this.updateProc.isUpdateProcedure()) {
+ handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0019"), obj); //$NON-NLS-1$
+ }
if(obj.hasTranslations()) {
Collection selectElmnts = null;
if(obj.getSelector().hasElements()) {
@@ -522,9 +496,9 @@
Iterator critIter = obj.getTranslations().iterator();
while(critIter.hasNext()) {
CompareCriteria transCrit = (CompareCriteria) critIter.next();
- Collection leftElmnts = ElementCollectorVisitor.getElements(transCrit.getLeftExpression(), true);
+ Collection<ElementSymbol> leftElmnts = ElementCollectorVisitor.getElements(transCrit.getLeftExpression(), true);
// there is always only one element
- ElementSymbol leftExpr = (ElementSymbol)leftElmnts.iterator().next();
+ ElementSymbol leftExpr = leftElmnts.iterator().next();
if(selectElmnts != null && !selectElmnts.contains(leftExpr)) {
handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0021"), leftExpr); //$NON-NLS-1$
@@ -581,7 +555,7 @@
*/
protected void validateTranslateCriteria(TranslateCriteria obj) {
if(this.currentCommand == null) {
- return;
+ return;
}
Map symbolMap = this.updateProc.getSymbolMap();
Command userCommand = this.updateProc.getUserCommand();
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-01-10 22:09:53 UTC (rev 2825)
@@ -183,8 +183,7 @@
ERR.015.012.0016 = Variable {0} not assigned any value in this procedure.
ERR.015.012.0017 = Variables declared the procedure''s DeclareStatement cannot be one of the special variables: {0}, {1} and {2}.
ERR.015.012.0018 = Inherent INSERT is not possible on a view defined by a UNION.
-ERR.015.012.0019 = TranslateCriteria cannot be used in on an if or while statement.
-ERR.015.012.0020 = Elements used on the criteria of an if or while statement should be variables declared in the procedure, virtual group elements can be used in the HAS Criteria
+ERR.015.012.0019 = Translate/HasCriteria cannot be used in a non-update procedure.
ERR.015.012.0021 = Element being translated in the WITH clause not among the elements on the ON clause of the TranslateCriteria.
ERR.015.012.0022 = Unable to translate criteria on the update command against the virtual group, the element {0} is mapped to an aggregate symbol in the virtual group''s query transform, and cannot be translated.
ERR.015.012.0023 = Unable to translate criteria on the update command against the virtual group, the element {0} is mapped to an expression whose elements are not present on the command in the procedure using the translated criteria.
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -22,7 +22,6 @@
package org.teiid.dqp.internal.process;
-import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -36,7 +35,6 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.dqp.internal.datamgr.FakeTransactionService;
import org.teiid.dqp.message.RequestID;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.QueryResolver;
@@ -55,7 +53,7 @@
public Map[] helpGetMetadata(String sql, QueryMetadataInterface metadata, VDBMetaData vdb) throws Exception {
// Prepare sql
Command command = QueryParser.getQueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
// Create components
SessionAwareCache<PreparedPlan> prepPlanCache = new SessionAwareCache<PreparedPlan>();
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,7 +23,6 @@
package org.teiid.dqp.internal.process;
import java.util.ArrayList;
-import java.util.Collections;
import junit.framework.TestCase;
@@ -36,7 +35,6 @@
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.dqp.internal.datamgr.FakeTransactionService;
import org.teiid.dqp.service.AutoGenDataService;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.processor.FakeDataManager;
@@ -75,7 +73,7 @@
Request request = new Request();
Command command = QueryParser.getQueryParser().parseCommand(QUERY);
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
RequestMessage message = new RequestMessage();
DQPWorkContext workContext = FakeMetadataFactory.buildWorkContext(metadata, FakeMetadataFactory.example1VDB());
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -36,7 +36,6 @@
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
@@ -844,8 +843,9 @@
Command procCommand = QueryParser.getQueryParser().parseCommand(procedure);
GroupSymbol virtualGroup = new GroupSymbol("vm1.g1"); //$NON-NLS-1$
virtualGroup.setMetadataID(metadata.getGroupID("vm1.g1")); //$NON-NLS-1$
- Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
- QueryResolver.resolveCommand(procCommand, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
+ QueryResolver.buildExternalGroups(externalMetadata, procCommand);
+ QueryResolver.resolveCommand(procCommand, metadata);
}
// special variable CHANGING compared against integer no implicit conversion available
@@ -881,8 +881,9 @@
GroupSymbol virtualGroup = new GroupSymbol("vm1.g1"); //$NON-NLS-1$
virtualGroup.setMetadataID(metadata.getGroupID("vm1.g1")); //$NON-NLS-1$
- Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
- QueryResolver.resolveCommand(procCommand, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
+ QueryResolver.buildExternalGroups(externalMetadata, procCommand);
+ QueryResolver.resolveCommand(procCommand, metadata);
}
// special variable CHANGING compared against integer no implicit conversion available
@@ -899,8 +900,9 @@
GroupSymbol virtualGroup = new GroupSymbol("vm1.g1"); //$NON-NLS-1$
virtualGroup.setMetadataID(metadata.getGroupID("vm1.g1")); //$NON-NLS-1$
- Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
- QueryResolver.resolveCommand(procCommand, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
+ QueryResolver.buildExternalGroups(externalMetadata, procCommand);
+ QueryResolver.resolveCommand(procCommand, metadata);
}
// TranslateCriteria on criteria of the if statement
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -167,7 +167,7 @@
}
public static Command helpResolve(String sql, QueryMetadataInterface queryMetadata, AnalysisRecord analysis){
- return helpResolve(helpParse(sql), queryMetadata, analysis);
+ return helpResolve(helpParse(sql), queryMetadata);
}
private Command helpResolve(String sql) {
@@ -175,13 +175,13 @@
}
private Command helpResolve(Command command) {
- return helpResolve(command, this.metadata, AnalysisRecord.createNonRecordingRecord());
+ return helpResolve(command, this.metadata);
}
- static Command helpResolve(Command command, QueryMetadataInterface queryMetadataInterface, AnalysisRecord analysis) {
+ static Command helpResolve(Command command, QueryMetadataInterface queryMetadataInterface) {
// resolve
try {
- QueryResolver.resolveCommand(command, queryMetadataInterface, analysis);
+ QueryResolver.resolveCommand(command, queryMetadataInterface);
} catch(TeiidException e) {
throw new RuntimeException(e);
}
@@ -985,8 +985,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
// Verify results
helpCheckFrom((Query)command, new String[] { "pm1.g1" }); //$NON-NLS-1$
@@ -1005,8 +1005,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
// Verify results
helpCheckFrom((Query)command, new String[] { "pm1.g1" }); //$NON-NLS-1$
@@ -1025,9 +1025,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
// Verify results
Collection vars = getVariables(command);
assertEquals("Did not find variable in resolved query", 1, vars.size()); //$NON-NLS-1$
@@ -1047,7 +1047,7 @@
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
fail("Expected exception on invalid variable pm1.sq2.in"); //$NON-NLS-1$
} catch(QueryResolverException e) {
@@ -1966,7 +1966,7 @@
@Test public void testDefect10809(){
String sql = "select * from LOB_TESTING_ONE where CLOB_COLUMN LIKE '%fff%'"; //$NON-NLS-1$
- helpResolve(helpParse(sql), FakeMetadataFactory.exampleBQTCached(), AnalysisRecord.createNonRecordingRecord());
+ helpResolve(helpParse(sql), FakeMetadataFactory.exampleBQTCached());
}
@Test public void testNonAutoConversionOfLiteralIntegerToShort() throws Exception {
@@ -2080,7 +2080,7 @@
helpResolve(
helpParse("SELECT myModel.myTable.myColumn AS myColumn from myModel.myTable UNION " + //$NON-NLS-1$
"SELECT convert(null, string) AS myColumn From myModel2.mySchema.myTable2"), //$NON-NLS-1$
- example_12968(), AnalysisRecord.createNonRecordingRecord());
+ example_12968());
}
@@ -2216,7 +2216,7 @@
String userSql = "SELECT null as x"; //$NON-NLS-1$
Query query = (Query)helpParse(userSql);
- QueryResolver.resolveCommand(query, FakeMetadataFactory.exampleBQTCached(), AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(query, FakeMetadataFactory.exampleBQTCached());
// Check type of resolved null constant
SingleElementSymbol symbol = (SingleElementSymbol) query.getSelect().getSymbols().get(0);
@@ -2233,7 +2233,7 @@
inputSetElements.add(inputSetElement);
externalMetadata.put(inputSet, inputSetElements);
Query command = (Query)helpParse(sql);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
Collection groups = GroupCollectorVisitor.getGroups(command, false);
assertFalse(groups.contains(inputSet));
}
@@ -2251,7 +2251,8 @@
param.setType(String.class);
procPrarms.add(param);
externalMetadata.put(procGroup, procPrarms);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
CreateUpdateProcedureCommand proc = (CreateUpdateProcedureCommand)command;
Query query = (Query)proc.getSubCommands().get(0);
ElementSymbol inElement = (ElementSymbol)((CompareCriteria)query.getCriteria()).getLeftExpression();
@@ -2521,7 +2522,8 @@
param.setType(DataTypeManager.DefaultDataClasses.STRING);
procPrarms.add(param);
externalMetadata.put(proc, procPrarms);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
}
@Test public void testBatchedUpdateResolver() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -399,8 +399,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, FakeMetadataFactory.example1Cached(), AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, FakeMetadataFactory.example1Cached());
// Verify results
Collection vars = TestResolver.getVariables(command);
@@ -443,7 +443,7 @@
expected.setOperator(CompareCriteria.EQ);
expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
- Query query = (Query) TestResolver.helpResolve(QueryParser.getQueryParser().parseCommand("select \"xml\" from xmltest.doc1 where node1 = 'yyz'"), FakeMetadataFactory.example1Cached(), null); //$NON-NLS-1$
+ Query query = (Query) TestResolver.helpResolve(QueryParser.getQueryParser().parseCommand("select \"xml\" from xmltest.doc1 where node1 = 'yyz'"), FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
Criteria actual = query.getCriteria();
assertEquals("Did not match expected criteria", expected, actual); //$NON-NLS-1$
}
Modified: trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -28,7 +28,7 @@
import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
+import org.teiid.core.types.DataTypeManager;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.QueryResolver;
@@ -55,9 +55,8 @@
public Command helpResolve(String sql, QueryMetadataInterface metadata, Map externalMetadata) throws QueryParserException, QueryResolverException, TeiidComponentException {
Command command = QueryParser.getQueryParser().parseCommand(sql);
-
- final boolean USE_METADATA_COMMANDS = true;
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
return command;
}
@@ -69,7 +68,7 @@
public void helpTestOptimize(String sql, QueryMetadataInterface metadata, String expected, Map externalMetadata) throws QueryMetadataException, TeiidComponentException, QueryParserException, QueryResolverException {
- Command command = helpResolve(sql, metadata, externalMetadata);
+ Command command = helpResolve(sql, metadata, externalMetadata);
ElementSymbolOptimizer.optimizeElements(command, metadata);
String actual = command.toString();
@@ -153,40 +152,6 @@
"EXEC pm1.vsp7(5)"); //$NON-NLS-1$
}
- public void testStoredQueryTransform() throws Exception {
-
- // Set up external metadata - stored query pm1.sq3 with
- // params in and in2
- Map externalMetadata = new HashMap();
- GroupSymbol gs = new GroupSymbol("pm1.sq3"); //$NON-NLS-1$
- List elements = new ArrayList(2);
- elements.add(new ElementSymbol("pm1.sq3.in")); //$NON-NLS-1$
- elements.add(new ElementSymbol("pm1.sq3.in2")); //$NON-NLS-1$
- externalMetadata.put(gs, elements);
-
- helpTestOptimize("SELECT pm1.g6.in, pm1.g6.in3 FROM pm1.g6 WHERE pm1.g6.in=pm1.sq3.in AND pm1.g6.in3=pm1.sq3.in2", //$NON-NLS-1$
- FakeMetadataFactory.example1Cached(),
- "SELECT pm1.g6.\"in\", in3 FROM pm1.g6 WHERE (pm1.g6.\"in\" = pm1.sq3.\"in\") AND (in3 = in2)", //$NON-NLS-1$
- externalMetadata);
- }
-
- /** Test stored query whose transformation is another stored query */
- public void testStoredQueryTransform2() throws Exception {
- // Set up external metadata - stored query pm1.sq3 with
- // params in and in2
- Map externalMetadata = new HashMap();
- GroupSymbol gs = new GroupSymbol("pm1.sq3"); //$NON-NLS-1$
- List elements = new ArrayList(2);
- elements.add(new ElementSymbol("pm1.sq3.in")); //$NON-NLS-1$
- elements.add(new ElementSymbol("pm1.sq3.in2")); //$NON-NLS-1$
- externalMetadata.put(gs, elements);
-
- helpTestOptimize("EXEC pm1.sq2(pm1.sq3.in)", //$NON-NLS-1$
- FakeMetadataFactory.example1Cached(),
- "EXEC pm1.sq2(\"in\")", //$NON-NLS-1$
- externalMetadata);
- }
-
public void testStoredQuerySubquery() throws Exception {
helpTestOptimize("select x.e1 from (EXEC pm1.sq1()) as x", //$NON-NLS-1$
FakeMetadataFactory.example1Cached(),
@@ -205,8 +170,9 @@
// params in and in2
Map externalMetadata = new HashMap();
GroupSymbol gs = new GroupSymbol("SYSTEM.DESCRIBE"); //$NON-NLS-1$
- List elements = new ArrayList(2);
+ List<ElementSymbol> elements = new ArrayList<ElementSymbol>(2);
elements.add(new ElementSymbol("SYSTEM.DESCRIBE.entity")); //$NON-NLS-1$
+ elements.get(0).setType(DataTypeManager.DefaultDataClasses.STRING);
externalMetadata.put(gs, elements);
Modified: trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -1856,7 +1856,7 @@
QueryNode vm1g2n1 = new QueryNode("vm1.g2", "SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3 FROM pm1.g2"); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vm1g2 = createUpdatableVirtualGroup("vm1.g2", vm1, vm1g2n1); //$NON-NLS-1$
- QueryNode vm1g3n1 = new QueryNode("vm1.g3", "SELECT CONCAT(e1, 'm') as x, (e2 +1) as y, Count(*) as e3, e4*50 as e4 FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ QueryNode vm1g3n1 = new QueryNode("vm1.g3", "SELECT CONCAT(e1, 'm') as x, (e2 +1) as y, 1 as e3, e4*50 as e4 FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vm1g3 = createUpdatableVirtualGroup("vm1.g3", vm1, vm1g3n1); //$NON-NLS-1$
QueryNode vm1g4n1 = new QueryNode("vm1.g4", "SELECT * FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -328,7 +328,8 @@
try {
command = QueryParser.getQueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
} catch(Exception e) {
throw new TeiidRuntimeException(e);
}
@@ -612,9 +613,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
helpRunValidator(command, new String[] {}, metadata);
}
@@ -631,9 +632,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
helpRunValidator(command, new String[] {}, metadata);
}
@@ -702,9 +703,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
helpRunValidator(command, new String[] {}, metadata);
}
@@ -721,8 +722,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
helpRunValidator(command, new String[] {}, metadata);
}
@@ -1162,7 +1163,7 @@
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
- helpFailProcedure(procedure, userUpdateStr,
+ helpValidateProcedure(procedure, userUpdateStr,
FakeMetadataObject.Props.UPDATE_PROCEDURE);
}
@@ -1199,6 +1200,7 @@
// virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
// failure, aggregate function in query transform
+ @Ignore
@Test public void testCreateUpdateProcedure18() {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
@@ -1215,6 +1217,7 @@
// virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
// failure, aggregate function in query transform
+ @Ignore
@Test public void testCreateUpdateProcedure18a() {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
@@ -1603,7 +1606,8 @@
GroupSymbol group = new GroupSymbol(procName);
Map externalMetadata = getStoredProcedureExternalMetadata(group, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
// Validate
return Validator.validate(command, metadata);
@@ -1665,7 +1669,7 @@
QueryMetadataInterface metadata = FakeMetadataFactory.example1Cached();
Command command = new QueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, new HashMap(), metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
// Validate
ValidatorReport report = Validator.validate(command, metadata);
@@ -1680,7 +1684,7 @@
e1.putProperty(FakeMetadataObject.Props.UPDATE, Boolean.FALSE);
Command command = new QueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, new HashMap(), metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
// Validate
ValidatorReport report = Validator.validate(command, metadata);
@@ -1751,6 +1755,7 @@
FakeMetadataObject paramID = (FakeMetadataObject)i.next();
if (paramID.getProperty(FakeMetadataObject.Props.DIRECTION).equals(new Integer(ParameterInfo.IN))) {
param.setMetadataID(paramID);
+ param.setType(DataTypeManager.getDataTypeClass((String)paramID.getProperty(FakeMetadataObject.Props.TYPE)));
break;
}
}
Modified: trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -111,6 +111,9 @@
@Override
public void closeSession(String sessionID) throws InvalidSessionException {
LogManager.logDetail(LogConstants.CTX_SECURITY, new Object[] {"closeSession", sessionID}); //$NON-NLS-1$
+ if (sessionID == null) {
+ throw new InvalidSessionException(RuntimePlugin.Util.getString("SessionServiceImpl.invalid_session", sessionID)); //$NON-NLS-1$
+ }
SessionMetadata info = this.sessionCache.remove(sessionID);
if (info == null) {
throw new InvalidSessionException(RuntimePlugin.Util.getString("SessionServiceImpl.invalid_session", sessionID)); //$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -56,6 +56,7 @@
protected void doProcess(QueryMetadataInterface metadata, String sql, CapabilitiesFinder capFinder, ProcessorDataManager dataManager, List[] expectedResults, boolean debug) throws Exception {
CommandContext context = createCommandContext();
+ context.setMetadata(metadata);
Command command = TestOptimizer.helpGetCommand(sql, metadata, null);
// plan
More information about the teiid-commits
mailing list