teiid SVN: r3740 - in trunk: build/kits/jboss-as7/docs/teiid and 58 other directories.
by teiid-commitsï¼ lists.jboss.org
Author: shawkins
Date: 2011-12-14 17:19:17 -0500 (Wed, 14 Dec 2011)
New Revision: 3740
Added:
trunk/engine/src/main/java/org/teiid/query/sql/symbol/DerivedExpression.java
Removed:
trunk/engine/src/main/java/org/teiid/query/sql/symbol/SelectSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/SingleElementSymbol.java
Modified:
trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
trunk/api/src/main/java/org/teiid/metadata/BaseColumn.java
trunk/api/src/main/java/org/teiid/metadata/MetadataStore.java
trunk/api/src/main/java/org/teiid/metadata/Schema.java
trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/netezza/TestNetezzaConvertModifier.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierTupleSource.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceMetadataWrapper.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java
trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java
trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingAttribute.java
trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingBaseNode.java
trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingDocument.java
trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingNode.java
trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingSourceNode.java
trunk/engine/src/main/java/org/teiid/query/metadata/CompositeMetadataStore.java
trunk/engine/src/main/java/org/teiid/query/metadata/GroupInfo.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java
trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java
trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
trunk/engine/src/main/java/org/teiid/query/optimizer/TriggerActionPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/AliasGenerator.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PartitionAnalyzer.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseJoinStrategy.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleDecomposeJoin.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeCriteria.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseNull.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/CriteriaPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/MarkExcludeVisitor.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/SourceNodePlannerVisitor.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLNodeMappingVisitor.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanToProcessVisitor.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlannerEnvironment.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLProjectionMinimizer.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLQueryPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLStagaingQueryPlanner.java
trunk/engine/src/main/java/org/teiid/query/parser/ParseInfo.java
trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java
trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java
trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java
trunk/engine/src/main/java/org/teiid/query/processor/proc/LoopInstruction.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/NestedTableJoinStrategy.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/ProjectNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java
trunk/engine/src/main/java/org/teiid/query/processor/xml/ExecSqlInstruction.java
trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLContext.java
trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLProcessorEnvironment.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/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/XMLQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java
trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Criteria.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Insert.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Query.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Select.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/SetQuery.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java
trunk/engine/src/main/java/org/teiid/query/sql/proc/Block.java
trunk/engine/src/main/java/org/teiid/query/sql/proc/CreateProcedureCommand.java
trunk/engine/src/main/java/org/teiid/query/sql/proc/TriggerAction.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/AliasSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/CaseExpression.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/ElementSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/Expression.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/ExpressionSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/Function.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/GroupSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/MultipleElementSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/QueryString.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/SearchedCaseExpression.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/Symbol.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/TextLine.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/WindowFunction.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLElement.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLForest.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLParse.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLSerialize.java
trunk/engine/src/main/java/org/teiid/query/sql/util/SymbolMap.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/ExpressionMappingVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/java/org/teiid/query/tempdata/AlterTempTable.java
trunk/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java
trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/Validator.java
trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/TestScalarSubqueryImpl.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceMetadataWrapper.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java
trunk/engine/src/test/java/org/teiid/query/metadata/TestTransformationMetadata.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestAggregatePushdown.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestInlineView.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinOptimization.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinWithFunction.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleRaiseNull.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestUnionPlanning.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java
trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLNodeMappingVisitor.java
trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLPlanner.java
trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java
trunk/engine/src/test/java/org/teiid/query/processor/TestCollectionTupleSource.java
trunk/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java
trunk/engine/src/test/java/org/teiid/query/processor/TestInherintlyUpdatableViews.java
trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java
trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
trunk/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java
trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java
trunk/engine/src/test/java/org/teiid/query/processor/proc/TestProcedureProcessor.java
trunk/engine/src/test/java/org/teiid/query/processor/xml/FakeXMLProcessorEnvironment.java
trunk/engine/src/test/java/org/teiid/query/processor/xml/TestInstructions.java
trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLPlanningEnhancements.java
trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java
trunk/engine/src/test/java/org/teiid/query/processor/xml/XMLProgramUtil.java
trunk/engine/src/test/java/org/teiid/query/resolver/CheckSymbolsAreResolvedVisitor.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/rewriter/TestOrderByRewrite.java
trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
trunk/engine/src/test/java/org/teiid/query/sql/lang/TestAliasSymbol.java
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestCaseExpression.java
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestElementSymbol.java
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestSearchedCaseExpression.java
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java
trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java
trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java
trunk/test-integration/common/src/test/java/org/teiid/jdbc/TestVDBMerge.java
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestODBCProceduresSchema.java
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestResultSetMetadata.java
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestVirtualDocWithVirtualProc.java
trunk/test-integration/common/src/test/resources/TestJDBCSocketTransport/testSelect.expected
trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected
trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_CLASS.expected
trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_INDEX.expected
trunk/test-integration/common/src/test/resources/TestODBCSocketTransport/testSelect.expected
trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testPrimaryKeys.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeyColumns.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeys.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testTables.expected
trunk/test-integration/db/src/main/java/org/teiid/test/client/ctc/QueryResults.java
Log:
TEIID-1560 removing the canonical name concept and beginning to rationalize aggregate vs. non-aggregate functions
Modified: trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -53,7 +53,6 @@
private String uuid; //globally unique id
private String name; //contextually unique name
- private String canonicalName;
private String nameInSource;
@@ -102,11 +101,10 @@
public void setName(String name) {
this.name = DataTypeManager.getCanonicalString(name);
- this.canonicalName = DataTypeManager.getCanonicalString(name.toUpperCase());
}
public String getCanonicalName() {
- return canonicalName;
+ return name.toUpperCase();
}
public String toString() {
Modified: trunk/api/src/main/java/org/teiid/metadata/BaseColumn.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/BaseColumn.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/api/src/main/java/org/teiid/metadata/BaseColumn.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -123,7 +123,7 @@
}
public void setRuntimeType(String string) {
- runtimeType = string;
+ runtimeType = DataTypeManager.getCanonicalString(string);
}
public void setDatatypeUUID(String string) {
Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataStore.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataStore.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataStore.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,10 +23,12 @@
package org.teiid.metadata;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
/**
* Simple holder for metadata.
@@ -34,7 +36,8 @@
public class MetadataStore implements Serializable {
private static final long serialVersionUID = -3130247626435324312L;
- protected Map<String, Schema> schemas = new LinkedHashMap<String, Schema>();
+ protected Map<String, Schema> schemas = new TreeMap<String, Schema>(String.CASE_INSENSITIVE_ORDER);
+ protected List<Schema> schemaList = new ArrayList<Schema>(); //used for a stable ordering
protected Collection<Datatype> datatypes = new LinkedHashSet<Datatype>();
public Map<String, Schema> getSchemas() {
@@ -42,9 +45,14 @@
}
public void addSchema(Schema schema) {
- this.schemas.put(schema.getCanonicalName(), schema);
+ this.schemas.put(schema.getName(), schema);
+ this.schemaList.add(schema);
}
+ public List<Schema> getSchemaList() {
+ return schemaList;
+ }
+
public void addDatatype(Datatype datatype) {
this.datatypes.add(datatype);
}
Modified: trunk/api/src/main/java/org/teiid/metadata/Schema.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Schema.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/api/src/main/java/org/teiid/metadata/Schema.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,6 +25,7 @@
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.TreeMap;
import org.teiid.connector.DataPlugin;
@@ -36,27 +37,27 @@
private boolean isVisible = true;
private String primaryMetamodelUri = "http://www.metamatrix.com/metamodels/Relational"; //$NON-NLS-1$
- private Map<String, Table> tables = new LinkedHashMap<String, Table>();
- private Map<String, Procedure> procedures = new LinkedHashMap<String, Procedure>();
- private Map<String, FunctionMethod> functions = new LinkedHashMap<String, FunctionMethod>();
+ private Map<String, Table> tables = new TreeMap<String, Table>(String.CASE_INSENSITIVE_ORDER);
+ private Map<String, Procedure> procedures = new TreeMap<String, Procedure>(String.CASE_INSENSITIVE_ORDER);
+ private Map<String, FunctionMethod> functions = new TreeMap<String, FunctionMethod>(String.CASE_INSENSITIVE_ORDER);
public void addTable(Table table) {
table.setParent(this);
- if (this.tables.put(table.getCanonicalName(), table) != null) {
+ if (this.tables.put(table.getName(), table) != null) {
throw new DuplicateRecordException(DataPlugin.Util.getString("Schema.duplicate_table", table.getName())); //$NON-NLS-1$
}
}
public void addProcedure(Procedure procedure) {
procedure.setParent(this);
- if (this.procedures.put(procedure.getCanonicalName(), procedure) != null) {
+ if (this.procedures.put(procedure.getName(), procedure) != null) {
throw new DuplicateRecordException(DataPlugin.Util.getString("Schema.duplicate_procedure", procedure.getName())); //$NON-NLS-1$
}
}
public void addFunction(FunctionMethod function) {
function.setParent(this);
- if (this.functions.put(function.getCanonicalName(), function) != null) {
+ if (this.functions.put(function.getName(), function) != null) {
throw new DuplicateRecordException(DataPlugin.Util.getString("Schema.duplicate_function", function.getName())); //$NON-NLS-1$
}
}
Modified: trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html 2011-12-14 22:19:17 UTC (rev 3740)
@@ -56,6 +56,7 @@
<li>BigDecimal division that returns a quotient that is equal to zero will have a scale of zero as well. Prior releases would typically return a zero value with a scale of 16.
<li>The env function no longer returns the value for the session id, the session_id() function should be used instead.
<li>The CommandContext no longer provides getEnvironmentProperties()
+ <li>Unaliased derived columns in the SELECT clause have different default names than prior releases. The name will be exprX where X is the SELECT clause position.
</ul>
<h4>from 7.5</h4>
Modified: trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/netezza/TestNetezzaConvertModifier.java
===================================================================
--- trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/netezza/TestNetezzaConvertModifier.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/netezza/TestNetezzaConvertModifier.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,29 +22,24 @@
package org.teiid.translator.jdbc.netezza;
+import static org.junit.Assert.*;
+
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
-import junit.framework.TestCase;
-
+import org.junit.Test;
import org.teiid.language.Expression;
import org.teiid.language.Function;
import org.teiid.language.LanguageFactory;
import org.teiid.translator.TypeFacility;
import org.teiid.translator.jdbc.SQLConversionVisitor;
+@SuppressWarnings("nls")
+public class TestNetezzaConvertModifier {
-/**
- */
-public class TestNetezzaConvertModifier extends TestCase {
-
private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
- public TestNetezzaConvertModifier(String name) {
- super(name);
- }
-
public String helpGetString(Expression expr) throws Exception {
NetezzaExecutionFactory trans = new NetezzaExecutionFactory();
trans.start();
@@ -65,443 +60,440 @@
expectedExpression, helpGetString(func));
}
-
-
-
// Source = STRING
- public void testStringToChar() throws Exception {
+ @Test public void testStringToChar() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "char", "cast('5' AS char(1))");
}
- public void testStringToBoolean() throws Exception {
+ @Test public void testStringToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "boolean", "CASE WHEN '5' IN ('false', '0') THEN '0' WHEN '5' IS NOT NULL THEN '1' END");
}
- public void testStringToByte() throws Exception {
+ @Test public void testStringToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "byte", "cast('5' AS byteint)");
}
- public void testStringToShort() throws Exception {
+ @Test public void testStringToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "short", "cast('5' AS smallint)");
}
- public void testStringToInteger() throws Exception {
+ @Test public void testStringToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "integer", "cast('5' AS integer)");
}
- public void testStringToLong() throws Exception {
+ @Test public void testStringToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "long", "cast('5' AS bigint)");
}
- public void testStringToBigInteger() throws Exception {
+ @Test public void testStringToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "biginteger", "cast('5' AS numeric(38))"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToFloat() throws Exception {
+ @Test public void testStringToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "float", "cast('5' AS float)");
}
- public void testStringToDouble() throws Exception {
+ @Test public void testStringToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "double", "cast('5' AS double)");
}
- public void testStringToDate() throws Exception {
+ @Test public void testStringToDate() throws Exception {
helpTest(LANG_FACTORY.createLiteral("2004-06-29", String.class), "date", "to_date('2004-06-29', 'YYYY-MM-DD')");
}
- public void testStringToTime() throws Exception {
+ @Test public void testStringToTime() throws Exception {
helpTest(LANG_FACTORY.createLiteral("23:59:59", String.class), "time", "to_timestamp('23:59:59', 'HH24:MI:SS')");
}
- public void testStringToTimestamp() throws Exception {
+ @Test public void testStringToTimestamp() throws Exception {
helpTest(LANG_FACTORY.createLiteral("2004-06-29 23:59:59.987", String.class), "timestamp", "to_timestamp('2004-06-29 23:59:59.987', 'YYYY-MM-DD HH24:MI:SS.MS')");
}
- public void testStringToBigDecimal() throws Exception {
+ @Test public void testStringToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "bigdecimal", "cast('5' AS numeric(38,18))");
}
// Source = CHAR
- public void testCharToString() throws Exception {
+ @Test public void testCharToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Character('5'), Character.class), "string", "'5'");
}
// Source = BOOLEAN
- public void testBooleanToString() throws Exception {
+ @Test public void testBooleanToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "CASE WHEN 1 = '0' THEN 'false' WHEN 1 IS NOT NULL THEN 'true' END");
}
- public void testBooleanToByte() throws Exception {
+ @Test public void testBooleanToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "byte", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToShort() throws Exception {
+ @Test public void testBooleanToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "short", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToInteger() throws Exception {
+ @Test public void testBooleanToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "integer", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToLong() throws Exception {
+ @Test public void testBooleanToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "long", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToBigInteger() throws Exception {
+ @Test public void testBooleanToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "biginteger", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToFloat() throws Exception {
+ @Test public void testBooleanToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "float", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToDouble() throws Exception {
+ @Test public void testBooleanToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "double", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
- public void testBooleanToBigDecimal() throws Exception {
+ @Test public void testBooleanToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), "bigdecimal", "(CASE WHEN 0 IN ( '0', 'FALSE') THEN 0 WHEN 0 IS NOT NULL THEN 1 END)");
}
// Source = BYTE
- public void testByteToString() throws Exception {
+ @Test public void testByteToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "string", "cast(1 AS varchar(4000))");
}
- public void testByteToBoolean() throws Exception {
+ @Test public void testByteToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "boolean", "CASE WHEN 1 = 0 THEN '0' WHEN 1 IS NOT NULL THEN '1' END");
}
-// public void testByteToShort() throws Exception {
+// @Test public void testByteToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "short", "1");
// }
//
-// public void testByteToInteger() throws Exception {
+// @Test public void testByteToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "integer", "integer(1)");
// }
//
-// public void testByteToLong() throws Exception {
+// @Test public void testByteToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "bigint(1)");
// }
//
-// public void testByteToBigInteger() throws Exception {
+// @Test public void testByteToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "cast(1 AS numeric(31,0))");
// }
//
-// public void testByteToFloat() throws Exception {
+// @Test public void testByteToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "cast(1 AS real)");
// }
//
-// public void testByteToDouble() throws Exception {
+// @Test public void testByteToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "double(1)");
// }
//
-// public void testByteToBigDecimal() throws Exception {
+// @Test public void testByteToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "cast(1 AS numeric(31,12))");
// }
// Source = SHORT
- public void testShortToString() throws Exception {
+ @Test public void testShortToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "string", "cast(1 AS varchar(4000))");
}
- public void testShortToBoolean() throws Exception {
+ @Test public void testShortToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "boolean", "CASE WHEN 1 = 0 THEN '0' WHEN 1 IS NOT NULL THEN '1' END");
}
-// public void testShortToByte() throws Exception {
+// @Test public void testShortToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "byte", "1");
// }
//
-// public void testShortToInteger() throws Exception {
+// @Test public void testShortToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "integer", "integer(1)");
// }
//
-// public void testShortToLong() throws Exception {
+// @Test public void testShortToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "bigint(1)");
// }
//
-// public void testShortToBigInteger() throws Exception {
+// @Test public void testShortToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "cast(1 AS numeric(31,0))");
// }
//
-// public void testShortToFloat() throws Exception {
+// @Test public void testShortToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "cast(1 AS real)");
// }
//
-// public void testShortToDouble() throws Exception {
+// @Test public void testShortToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "double(1)");
// }
//
-// public void testShortToBigDecimal() throws Exception {
+// @Test public void testShortToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "cast(1 AS numeric(31,12))");
// }
// Source = INTEGER
- public void testIntegerToString() throws Exception {
+ @Test public void testIntegerToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "string", "cast(1 AS varchar(4000))");
}
- public void testIntegerToBoolean() throws Exception {
+ @Test public void testIntegerToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "boolean", "CASE WHEN 1 = 0 THEN '0' WHEN 1 IS NOT NULL THEN '1' END");
}
-// public void testIntegerToByte() throws Exception {
+// @Test public void testIntegerToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "byte", "smallint(1)");
// }
//
-// public void testIntegerToShort() throws Exception {
+// @Test public void testIntegerToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "short", "smallint(1)");
// }
//
-// public void testIntegerToLong() throws Exception {
+// @Test public void testIntegerToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "bigint(1)");
// }
//
-// public void testIntegerToBigInteger() throws Exception {
+// @Test public void testIntegerToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "cast(1 AS numeric(31,0))");
// }
//
-// public void testIntegerToFloat() throws Exception {
+// @Test public void testIntegerToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "cast(1 AS real)");
// }
//
-// public void testIntegerToDouble() throws Exception {
+// @Test public void testIntegerToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "double(1)");
// }
//
-// public void testIntegerToBigDecimal() throws Exception {
+// @Test public void testIntegerToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "cast(1 AS numeric(31,12))");
// }
// Source = LONG
- public void testLongToString() throws Exception {
+ @Test public void testLongToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "string", "cast(1 AS varchar(4000))");
}
- public void testLongToBoolean() throws Exception {
+ @Test public void testLongToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "boolean", "CASE WHEN 1 = 0 THEN '0' WHEN 1 IS NOT NULL THEN '1' END");
}
-// public void testLongToByte() throws Exception {
+// @Test public void testLongToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "byte", "smallint(1)");
// }
//
-// public void testLongToShort() throws Exception {
+// @Test public void testLongToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "short", "smallint(1)");
// }
//
-// public void testLongToInteger() throws Exception {
+// @Test public void testLongToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "integer", "integer(1)");
// }
//
-// public void testLongToBigInteger() throws Exception {
+// @Test public void testLongToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "cast(1 AS numeric(31,0))");
// }
//
-// public void testLongToFloat() throws Exception {
+// @Test public void testLongToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "cast(1 AS real)");
// }
//
-// public void testLongToDouble() throws Exception {
+// @Test public void testLongToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "double(1)");
// }
//
-// public void testLongToBigDecimal() throws Exception {
+// @Test public void testLongToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "cast(1 AS numeric(31,12))");
// }
// Source = BIGINTEGER
- public void testBigIntegerToString() throws Exception {
+ @Test public void testBigIntegerToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "string", "cast(1 AS varchar(4000))");
}
- public void testBigIntegerToBoolean() throws Exception {
+ @Test public void testBigIntegerToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "boolean", "CASE WHEN 1 = 0 THEN '0' WHEN 1 IS NOT NULL THEN '1' END");
}
-// public void testBigIntegerToByte() throws Exception {
+// @Test public void testBigIntegerToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "byte", "smallint(1)");
// }
//
-// public void testBigIntegerToShort() throws Exception {
+// @Test public void testBigIntegerToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "short", "smallint(1)");
// }
//
-// public void testBigIntegerToInteger() throws Exception {
+// @Test public void testBigIntegerToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "integer", "integer(1)");
// }
//
-// public void testBigIntegerToLong() throws Exception {
+// @Test public void testBigIntegerToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "bigint(1)");
// }
//
-// public void testBigIntegerToFloat() throws Exception {
+// @Test public void testBigIntegerToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "cast(1 AS real)");
// }
//
-// public void testBigIntegerToDouble() throws Exception {
+// @Test public void testBigIntegerToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "double(1)");
// }
//
-// public void testBigIntegerToBigDecimal() throws Exception {
+// @Test public void testBigIntegerToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "cast(1 AS numeric(31,12))");
// }
// Source = FLOAT
- public void testFloatToString() throws Exception {
+ @Test public void testFloatToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "string", "cast(1.2 AS varchar(4000))");
}
- public void testFloatToBoolean() throws Exception {
+ @Test public void testFloatToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "boolean", "CASE WHEN 1.2 = 0 THEN '0' WHEN 1.2 IS NOT NULL THEN '1' END");
}
-// public void testFloatToByte() throws Exception {
+// @Test public void testFloatToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "byte", "smallint(1.2)");
// }
//
-// public void testFloatToShort() throws Exception {
+// @Test public void testFloatToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "short", "smallint(1.2)");
// }
//
-// public void testFloatToInteger() throws Exception {
+// @Test public void testFloatToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "integer", "integer(1.2)");
// }
//
-// public void testFloatToLong() throws Exception {
+// @Test public void testFloatToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "long", "bigint(1.2)");
// }
//
-// public void testFloatToBigInteger() throws Exception {
+// @Test public void testFloatToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "cast(1.2 AS numeric(31,0))");
// }
//
-// public void testFloatToDouble() throws Exception {
+// @Test public void testFloatToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "double(1.2)");
// }
//
-// public void testFloatToBigDecimal() throws Exception {
+// @Test public void testFloatToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "cast(1.2 AS numeric(31,12))");
// }
// Source = DOUBLE
- public void testDoubleToString() throws Exception {
+ @Test public void testDoubleToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "string", "cast(1.2 AS varchar(4000))");
}
- public void testDoubleToBoolean() throws Exception {
+ @Test public void testDoubleToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "boolean", "CASE WHEN 1.2 = 0 THEN '0' WHEN 1.2 IS NOT NULL THEN '1' END");
}
-// public void testDoubleToByte() throws Exception {
+// @Test public void testDoubleToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "byte", "smallint(1.2)");
// }
//
-// public void testDoubleToShort() throws Exception {
+// @Test public void testDoubleToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "short", "smallint(1.2)");
// }
//
-// public void testDoubleToInteger() throws Exception {
+// @Test public void testDoubleToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "integer", "integer(1.2)");
// }
//
-// public void testDoubleToLong() throws Exception {
+// @Test public void testDoubleToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "long", "bigint(1.2)");
// }
//
-// public void testDoubleToBigInteger() throws Exception {
+// @Test public void testDoubleToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "cast(1.2 AS numeric(31,0))");
// }
//
-// public void testDoubleToFloat() throws Exception {
+// @Test public void testDoubleToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "cast(1.2 AS real)");
// }
//
-// public void testDoubleToBigDecimal() throws Exception {
+// @Test public void testDoubleToBigDecimal() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "cast(1.2 AS numeric(31,12))");
// }
// Source = BIGDECIMAL
- public void testBigDecimalToString() throws Exception {
+ @Test public void testBigDecimalToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "string", "cast(1.0 AS varchar(4000))");
}
- public void testBigDecimalToBoolean() throws Exception {
+ @Test public void testBigDecimalToBoolean() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "boolean", "CASE WHEN 1.0 = 0 THEN '0' WHEN 1.0 IS NOT NULL THEN '1' END");
}
-// public void testBigDecimalToByte() throws Exception {
+// @Test public void testBigDecimalToByte() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "byte", "smallint(1.0)");
// }
//
-// public void testBigDecimalToShort() throws Exception {
+// @Test public void testBigDecimalToShort() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "short", "smallint(1.0)");
// }
//
-// public void testBigDecimalToInteger() throws Exception {
+// @Test public void testBigDecimalToInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "integer", "integer(1.0)");
// }
//
-// public void testBigDecimalToLong() throws Exception {
+// @Test public void testBigDecimalToLong() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "long", "bigint(1.0)");
// }
//
-// public void testBigDecimalToBigInteger() throws Exception {
+// @Test public void testBigDecimalToBigInteger() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "cast(1.0 AS numeric(31,0))");
// }
//
-// public void testBigDecimalToFloat() throws Exception {
+// @Test public void testBigDecimalToFloat() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "cast(1.0 AS real)");
// }
//
-// public void testBigDecimalToDouble() throws Exception {
+// @Test public void testBigDecimalToDouble() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "double(1.0)");
// }
// // Source = DATE
//
-// public void testDateToString() throws Exception {
+// @Test public void testDateToString() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createDate(103, 10, 1), java.sql.Date.class), "string", "char({d '2003-11-01'})");
// }
//
-// public void testDateToTimestamp() throws Exception {
+// @Test public void testDateToTimestamp() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createDate(103, 10, 1), java.sql.Date.class), "timestamp", "timestamp({d '2003-11-01'}, '00:00:00')");
// }
//
// // Source = TIME
//
-// public void testTimeToString() throws Exception {
+// @Test public void testTimeToString() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTime(23, 59, 59), java.sql.Time.class), "string", "char({t '23:59:59'})");
// }
//
-// public void testTimeToTimestamp() throws Exception {
+// @Test public void testTimeToTimestamp() throws Exception {
// helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTime(23, 59, 59), java.sql.Time.class), "timestamp", "timestamp('1970-01-01', {t '23:59:59'})");
// }
//
// // Source = TIMESTAMP
//
-// public void testTimestampToString() throws Exception {
+// @Test public void testTimestampToString() throws Exception {
// Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
// helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "string", "char({ts '2003-11-01 12:05:02.0'})");
// }
//
-// public void testTimestampToDate() throws Exception {
+// @Test public void testTimestampToDate() throws Exception {
// Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
// helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "date", "date({ts '2003-11-01 12:05:02.0'})");
// }
//
-// public void testTimestampToTime() throws Exception {
+// @Test public void testTimestampToTime() throws Exception {
// Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
// helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "time", "time({ts '2003-11-01 12:05:02.0'})");
// }
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,37 +35,10 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidException;
import org.teiid.core.TeiidRuntimeException;
-import org.teiid.language.AggregateFunction;
-import org.teiid.language.AndOr;
-import org.teiid.language.Argument;
-import org.teiid.language.BatchedUpdates;
-import org.teiid.language.Call;
-import org.teiid.language.ColumnReference;
-import org.teiid.language.Condition;
+import org.teiid.language.*;
import org.teiid.language.DerivedColumn;
-import org.teiid.language.DerivedTable;
-import org.teiid.language.Exists;
-import org.teiid.language.ExpressionValueSource;
-import org.teiid.language.In;
-import org.teiid.language.InsertValueSource;
-import org.teiid.language.IsNull;
-import org.teiid.language.IteratorValueSource;
-import org.teiid.language.Join;
-import org.teiid.language.Like;
-import org.teiid.language.Literal;
-import org.teiid.language.NamedTable;
-import org.teiid.language.Not;
-import org.teiid.language.QueryExpression;
-import org.teiid.language.SearchedCase;
-import org.teiid.language.SearchedWhenClause;
import org.teiid.language.Select;
-import org.teiid.language.SortSpecification;
-import org.teiid.language.SubqueryComparison;
-import org.teiid.language.SubqueryIn;
-import org.teiid.language.TableReference;
import org.teiid.language.WindowSpecification;
-import org.teiid.language.With;
-import org.teiid.language.WithItem;
import org.teiid.language.Argument.Direction;
import org.teiid.language.Comparison.Operator;
import org.teiid.language.SortSpecification.Ordering;
@@ -74,50 +47,20 @@
import org.teiid.metadata.ProcedureParameter;
import org.teiid.metadata.FunctionMethod.PushDown;
import org.teiid.query.metadata.QueryMetadataInterface;
-import org.teiid.query.sql.lang.BatchedUpdateCommand;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.CompoundCriteria;
-import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.lang.Delete;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.FromClause;
import org.teiid.query.sql.lang.GroupBy;
import org.teiid.query.sql.lang.Insert;
-import org.teiid.query.sql.lang.IsNullCriteria;
-import org.teiid.query.sql.lang.JoinPredicate;
-import org.teiid.query.sql.lang.JoinType;
import org.teiid.query.sql.lang.Limit;
-import org.teiid.query.sql.lang.MatchCriteria;
-import org.teiid.query.sql.lang.NotCriteria;
import org.teiid.query.sql.lang.OrderBy;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.QueryCommand;
-import org.teiid.query.sql.lang.SPParameter;
import org.teiid.query.sql.lang.SetClause;
-import org.teiid.query.sql.lang.SetClauseList;
-import org.teiid.query.sql.lang.SetCriteria;
import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubqueryFromClause;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.lang.UnaryFromClause;
import org.teiid.query.sql.lang.Update;
-import org.teiid.query.sql.lang.WithQueryCommand;
-import org.teiid.query.sql.symbol.AggregateSymbol;
-import org.teiid.query.sql.symbol.AliasSymbol;
-import org.teiid.query.sql.symbol.Constant;
-import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.*;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.Function;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SearchedCaseExpression;
-import org.teiid.query.sql.symbol.SelectSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.symbol.WindowFunction;
import org.teiid.translator.TranslatorException;
@@ -182,13 +125,13 @@
/* Query */
Select translate(Query query) {
- List<SelectSymbol> symbols = query.getSelect().getSymbols();
+ List<Expression> symbols = query.getSelect().getSymbols();
List<DerivedColumn> translatedSymbols = new ArrayList<DerivedColumn>(symbols.size());
- for (Iterator<SelectSymbol> i = symbols.iterator(); i.hasNext();) {
- SingleElementSymbol symbol = (SingleElementSymbol)i.next();
+ for (Iterator<Expression> i = symbols.iterator(); i.hasNext();) {
+ Expression symbol = i.next();
String alias = null;
if(symbol instanceof AliasSymbol) {
- alias = symbol.getOutputName();
+ alias = ((AliasSymbol)symbol).getOutputName();
symbol = ((AliasSymbol)symbol).getSymbol();
}
@@ -454,14 +397,14 @@
List<OrderByItem> items = orderBy.getOrderByItems();
List<SortSpecification> translatedItems = new ArrayList<SortSpecification>();
for (int i = 0; i < items.size(); i++) {
- SingleElementSymbol symbol = items.get(i).getSymbol();
+ Expression symbol = items.get(i).getSymbol();
Ordering direction = items.get(i).isAscending() ? Ordering.ASC: Ordering.DESC;
SortSpecification orderByItem = null;
if(!set && (items.get(i).isUnrelated() || symbol instanceof ElementSymbol)){
orderByItem = new SortSpecification(direction, translate(symbol));
} else {
- orderByItem = new SortSpecification(direction, new ColumnReference(null, SingleElementSymbol.getShortName(symbol.getOutputName()), null, symbol.getType()));
+ orderByItem = new SortSpecification(direction, new ColumnReference(null, Symbol.getShortName(((Symbol)symbol).getOutputName()), null, symbol.getType()));
}
orderByItem.setNullOrdering(items.get(i).getNullOrdering());
translatedItems.add(orderByItem);
@@ -475,6 +418,8 @@
if (expr == null) return null;
if (expr instanceof Constant) {
return translate((Constant)expr);
+ } else if (expr instanceof AggregateSymbol) {
+ return translate((AggregateSymbol)expr);
} else if (expr instanceof Function) {
return translate((Function)expr);
} else if (expr instanceof ScalarSubquery) {
@@ -483,8 +428,6 @@
return translate((SearchedCaseExpression)expr);
} else if (expr instanceof ElementSymbol) {
return translate((ElementSymbol)expr);
- } else if (expr instanceof AggregateSymbol) {
- return translate((AggregateSymbol)expr);
} else if (expr instanceof ExpressionSymbol) {
return translate((ExpressionSymbol)expr);
} else if (expr instanceof Criteria) {
@@ -536,7 +479,7 @@
name = function.getFunctionDescriptor().getMethod().getNameInSource();
}
} else {
- name = SingleElementSymbol.getShortName(name);
+ name = Symbol.getShortName(name);
}
//if there is any ambiguity in the function name it will be up to the translator logic to check the
@@ -568,7 +511,7 @@
}
ColumnReference translate(ElementSymbol symbol) {
- ColumnReference element = new ColumnReference(translate(symbol.getGroupSymbol()), SingleElementSymbol.getShortName(symbol.getOutputName()), null, symbol.getType());
+ ColumnReference element = new ColumnReference(translate(symbol.getGroupSymbol()), Symbol.getShortName(symbol.getOutputName()), null, symbol.getType());
if (element.getTable().getMetadataObject() == null) {
return element;
}
@@ -746,7 +689,7 @@
private String removeSchemaName(String fullGroup) {
//remove the model name
- int index = fullGroup.indexOf(ElementSymbol.SEPARATOR);
+ int index = fullGroup.indexOf(Symbol.SEPARATOR);
if (index > 0) {
fullGroup = fullGroup.substring(index + 1);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -539,7 +539,7 @@
private List<Schema> getVisibleSchemas(VDBMetaData vdb, CompositeMetadataStore metadata) {
ArrayList<Schema> result = new ArrayList<Schema>();
- for (Schema schema : metadata.getSchemas().values()) {
+ for (Schema schema : metadata.getSchemaList()) {
if(vdb.isVisible(schema.getName())) {
result.add(schema);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierTupleSource.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierTupleSource.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierTupleSource.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -63,8 +63,8 @@
import org.teiid.query.sql.lang.BatchedUpdateCommand;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.ProcedureContainer;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.translator.DataNotAvailableException;
import org.teiid.translator.TranslatorException;
@@ -112,12 +112,12 @@
this.cwi = cwi;
this.dtm = dtm;
this.limit = limit;
- List<SingleElementSymbol> symbols = this.aqr.getCommand().getProjectedSymbols();
+ List<Expression> symbols = this.aqr.getCommand().getProjectedSymbols();
this.schema = new Class[symbols.size()];
this.convertToDesiredRuntimeType = new boolean[symbols.size()];
this.convertToRuntimeType = new boolean[symbols.size()];
for (int i = 0; i < symbols.size(); i++) {
- SingleElementSymbol symbol = symbols.get(i);
+ Expression symbol = symbols.get(i);
this.schema[i] = symbol.getType();
this.convertToDesiredRuntimeType[i] = true;
this.convertToRuntimeType[i] = true;
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -63,9 +63,10 @@
import org.teiid.query.sql.symbol.Function;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.symbol.WindowFunction;
import org.teiid.query.sql.symbol.AggregateSymbol.Type;
+import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.ReferenceCollectorVisitor;
import org.teiid.query.tempdata.TempTableStore;
@@ -186,7 +187,7 @@
ex = ((Function)ex).getArg(0);
}
if (ex instanceof Reference) {
- paramMap.put((Reference)ex, SingleElementSymbol.getShortName(spParameter.getName()));
+ paramMap.put((Reference)ex, Symbol.getShortName(spParameter.getName()));
}
}
}
@@ -203,19 +204,19 @@
private Map[] createProjectedSymbolMetadata(Command originalCommand) throws TeiidComponentException {
Map[] columnMetadata;
// Allow command to use temporary metadata
- Map tempMetadata = originalCommand.getTemporaryMetadata();
- if(tempMetadata != null && tempMetadata.size() > 0) {
- TempMetadataAdapter tempFacade = new TempMetadataAdapter(this.metadata, new TempMetadataStore(tempMetadata));
+ TempMetadataStore tempMetadata = originalCommand.getTemporaryMetadata();
+ if(tempMetadata != null && tempMetadata.getData().size() > 0) {
+ TempMetadataAdapter tempFacade = new TempMetadataAdapter(this.metadata, tempMetadata);
this.metadata = tempFacade;
}
- List<SingleElementSymbol> projectedSymbols = originalCommand.getProjectedSymbols();
+ List<Expression> projectedSymbols = originalCommand.getProjectedSymbols();
columnMetadata = new Map[projectedSymbols.size()];
- Iterator<SingleElementSymbol> symbolIter = projectedSymbols.iterator();
+ Iterator<Expression> symbolIter = projectedSymbols.iterator();
for(int i=0; symbolIter.hasNext(); i++) {
- SingleElementSymbol symbol = symbolIter.next();
- String shortColumnName = SingleElementSymbol.getShortName(symbol.getOutputName());
+ Expression symbol = symbolIter.next();
+ String shortColumnName = Symbol.getShortName(Symbol.getOutputName(symbol));
if(symbol instanceof AliasSymbol) {
symbol = ((AliasSymbol)symbol).getSymbol();
}
@@ -255,14 +256,16 @@
return xmlMetadata;
}
- private Map createColumnMetadata(String label, SingleElementSymbol symbol) throws QueryMetadataException, TeiidComponentException {
+ private Map createColumnMetadata(String label, Expression symbol) throws QueryMetadataException, TeiidComponentException {
if(symbol instanceof ElementSymbol) {
return createElementMetadata(label, (ElementSymbol) symbol);
- } else if(symbol instanceof AggregateSymbol) {
- return createAggregateMetadata(label, (AggregateSymbol) symbol);
- } else if (symbol instanceof WindowFunction) {
- return createAggregateMetadata(label, ((WindowFunction) symbol).getFunction());
}
+ symbol = SymbolMap.getExpression(symbol);
+ if (symbol instanceof AggregateSymbol) {
+ return createAggregateMetadata(label, (AggregateSymbol)symbol);
+ } else if (symbol instanceof WindowFunction) {
+ return createAggregateMetadata(label, ((WindowFunction)symbol).getFunction());
+ }
return createTypedMetadata(label, symbol);
}
@@ -339,13 +342,13 @@
Type function = symbol.getAggregateFunction();
if(function == Type.MIN || function == Type.MAX){
if(expression instanceof ElementSymbol) {
- return createColumnMetadata(shortColumnName, (ElementSymbol)expression);
+ return createColumnMetadata(shortColumnName, expression);
}
}
return createTypedMetadata(shortColumnName, symbol);
}
- private Map createTypedMetadata(String shortColumnName, SingleElementSymbol symbol) {
+ private Map createTypedMetadata(String shortColumnName, Expression symbol) {
return getDefaultColumn(null, shortColumnName, symbol.getType());
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -76,7 +76,8 @@
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.SPParameter;
import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.util.CommandContext;
public class RequestWorkItem extends AbstractWorkItem implements PrioritizedRunnable {
@@ -696,13 +697,13 @@
return result;
}
- public ResultsMessage createResultsMessage(List<? extends List<?>> batch, List columnSymbols) {
+ public ResultsMessage createResultsMessage(List<? extends List<?>> batch, List<? extends Expression> columnSymbols) {
String[] columnNames = new String[columnSymbols.size()];
String[] dataTypes = new String[columnSymbols.size()];
for(int i=0; i<columnSymbols.size(); i++) {
- SingleElementSymbol symbol = (SingleElementSymbol) columnSymbols.get(i);
- columnNames[i] = SingleElementSymbol.getShortName(symbol.getOutputName());
+ Expression symbol = columnSymbols.get(i);
+ columnNames[i] = Symbol.getShortName(Symbol.getOutputName(symbol));
dataTypes[i] = DataTypeManager.getDataTypeName(symbol.getType());
}
ResultsMessage result = new ResultsMessage(batch, columnNames, dataTypes);
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceMetadataWrapper.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceMetadataWrapper.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceMetadataWrapper.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,7 +35,7 @@
import org.teiid.query.metadata.BasicQueryMetadataWrapper;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SupportConstants;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
/**
@@ -44,7 +44,7 @@
*/
public class MultiSourceMetadataWrapper extends BasicQueryMetadataWrapper {
- private static final String SUFFIX = SingleElementSymbol.SEPARATOR + MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME;
+ private static final String SUFFIX = Symbol.SEPARATOR + MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME;
private Set<String> multiSourceModels;
public MultiSourceMetadataWrapper(QueryMetadataInterface actualMetadata, Set<String> multiSourceModels){
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -65,8 +65,7 @@
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.util.CommandContext;
@@ -178,7 +177,7 @@
//should return a 0 update count
ProjectNode pnode = new ProjectNode(getID());
pnode.setElements(accessNode.getElements());
- pnode.setSelectSymbols(Arrays.asList(new ExpressionSymbol("x", new Constant(0)))); //$NON-NLS-1$
+ pnode.setSelectSymbols(Arrays.asList(new Constant(0)));
return pnode;
}
// Replace existing access node with a NullNode
@@ -208,8 +207,8 @@
if (RelationalNodeUtil.isUpdate(accessNode.getCommand())) {
update = true;
GroupingNode groupNode = new GroupingNode(getID());
- AggregateSymbol sumCount = new AggregateSymbol("SumCount", NonReserved.SUM, false, (Expression)accessNode.getElements().get(0)); //$NON-NLS-1$
- List<SingleElementSymbol> outputElements = new ArrayList<SingleElementSymbol>(1);
+ AggregateSymbol sumCount = new AggregateSymbol("SumCount", NonReserved.SUM, false, accessNode.getElements().get(0)); //$NON-NLS-1$
+ List<Expression> outputElements = new ArrayList<Expression>(1);
outputElements.add(sumCount);
groupNode.setElements(outputElements);
groupNode.addChild(unionNode);
@@ -218,9 +217,8 @@
Expression intSum = ResolverUtil.getConversion(sumCount, DataTypeManager.getDataTypeName(sumCount.getType()), DataTypeManager.DefaultDataTypes.INTEGER, false, metadata.getFunctionLibrary());
- ExpressionSymbol rowCount = new ExpressionSymbol("RowCount", intSum); //$NON-NLS-1$
- outputElements = new ArrayList<SingleElementSymbol>(1);
- outputElements.add(rowCount);
+ outputElements = new ArrayList<Expression>(1);
+ outputElements.add(intSum);
projectNode.setElements(outputElements);
projectNode.setSelectSymbols(outputElements);
projectNode.addChild(groupNode);
@@ -240,7 +238,7 @@
if (param.getParameterType() != SPParameter.IN) {
continue;
}
- String shortName = SingleElementSymbol.getShortName(param.getName());
+ String shortName = Symbol.getShortName(param.getName());
if(shortName.equalsIgnoreCase(MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME)) {
Constant source = (Constant)param.getExpression();
params.remove();
Modified: trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -38,7 +38,8 @@
import org.teiid.logging.MessageLevel;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.lang.SubqueryContainer;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
@@ -208,12 +209,12 @@
* @param projectedSymbols The list of SingleElementSymbol projected from a plan or node
* @return List of output columns for sending to the client as part of the plan
*/
- public static List<String> getOutputColumnProperties(List<? extends SingleElementSymbol> projectedSymbols) {
+ public static List<String> getOutputColumnProperties(List<? extends Expression> projectedSymbols) {
if(projectedSymbols != null) {
List<String> outputCols = new ArrayList<String>(projectedSymbols.size());
for(int i=0; i<projectedSymbols.size() ; i++) {
- SingleElementSymbol symbol = projectedSymbols.get(i);
- outputCols.add(symbol.getShortName() + " (" + DataTypeManager.getDataTypeName(symbol.getType()) + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ Expression symbol = projectedSymbols.get(i);
+ outputCols.add(Symbol.getShortName(symbol) + " (" + DataTypeManager.getDataTypeName(symbol.getType()) + ")"); //$NON-NLS-1$ //$NON-NLS-2$
}
return outputCols;
}
Modified: trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -54,16 +54,7 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.TeiidRuntimeException;
-import org.teiid.core.types.BlobType;
-import org.teiid.core.types.ClobImpl;
-import org.teiid.core.types.ClobType;
-import org.teiid.core.types.DataTypeManager;
-import org.teiid.core.types.InputStreamFactory;
-import org.teiid.core.types.SQLXMLImpl;
-import org.teiid.core.types.Sequencable;
-import org.teiid.core.types.Streamable;
-import org.teiid.core.types.TransformationException;
-import org.teiid.core.types.XMLType;
+import org.teiid.core.types.*;
import org.teiid.core.types.XMLType.Type;
import org.teiid.core.types.basic.StringToSQLXMLTransform;
import org.teiid.core.util.EquivalenceUtil;
@@ -77,42 +68,8 @@
import org.teiid.query.function.source.XMLSystemFunctions.XmlConcat;
import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.sql.LanguageObject;
-import org.teiid.query.sql.lang.AbstractSetCriteria;
-import org.teiid.query.sql.lang.CollectionValueIterator;
-import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.CompoundCriteria;
-import org.teiid.query.sql.lang.Criteria;
-import org.teiid.query.sql.lang.DependentSetCriteria;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.ExpressionCriteria;
-import org.teiid.query.sql.lang.IsNullCriteria;
-import org.teiid.query.sql.lang.MatchCriteria;
-import org.teiid.query.sql.lang.NotCriteria;
-import org.teiid.query.sql.lang.SetCriteria;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubqueryContainer;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.symbol.AggregateSymbol;
-import org.teiid.query.sql.symbol.CaseExpression;
-import org.teiid.query.sql.symbol.Constant;
-import org.teiid.query.sql.symbol.ContextReference;
-import org.teiid.query.sql.symbol.DerivedColumn;
-import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.Function;
-import org.teiid.query.sql.symbol.QueryString;
-import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SearchedCaseExpression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
-import org.teiid.query.sql.symbol.TextLine;
-import org.teiid.query.sql.symbol.XMLElement;
-import org.teiid.query.sql.symbol.XMLForest;
-import org.teiid.query.sql.symbol.XMLNamespaces;
-import org.teiid.query.sql.symbol.XMLParse;
-import org.teiid.query.sql.symbol.XMLQuery;
-import org.teiid.query.sql.symbol.XMLSerialize;
+import org.teiid.query.sql.lang.*;
+import org.teiid.query.sql.symbol.*;
import org.teiid.query.sql.symbol.XMLNamespaces.NamespaceItem;
import org.teiid.query.sql.util.ValueIterator;
import org.teiid.query.sql.util.ValueIteratorSource;
@@ -653,7 +610,7 @@
private Object internalEvaluate(Expression expression, List<?> tuple)
throws ExpressionEvaluationException, BlockedException, TeiidComponentException {
- if(expression instanceof SingleElementSymbol) {
+ if(expression instanceof DerivedExpression) {
if (elements != null) {
// Try to evaluate by lookup in the elements map (may work for both ElementSymbol and ExpressionSymbol
Integer index = (Integer) elements.get(expression);
@@ -663,7 +620,7 @@
}
// Otherwise this should be an ExpressionSymbol and we just need to dive in and evaluate the expression itself
- if (expression instanceof ExpressionSymbol && !(expression instanceof AggregateSymbol)) {
+ if (expression instanceof ExpressionSymbol) {
ExpressionSymbol exprSyb = (ExpressionSymbol) expression;
Expression expr = exprSyb.getExpression();
return internalEvaluate(expr, tuple);
Modified: trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingAttribute.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingAttribute.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingAttribute.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -105,10 +105,6 @@
return "@" + super.getPathName(); //$NON-NLS-1$
}
- public String getCanonicalName() {
- return getFullyQualifiedName().toUpperCase();
- }
-
/**
* Namespace prefix
* @return
@@ -185,4 +181,15 @@
}
return super.getSourceNode();
}
+
+ public String getType() {
+ return (String)getProperty(MappingNodeConstants.Properties.BUILT_IN_TYPE);
+ }
+
+ public MappingAttribute setType(String type) {
+ if (type != null) {
+ setProperty(MappingNodeConstants.Properties.BUILT_IN_TYPE, type);
+ }
+ return this;
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingBaseNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingBaseNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingBaseNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -71,7 +71,7 @@
if (elem.isRecursive()) {
MappingRecursiveElement recursiveElement = (MappingRecursiveElement)elem;
MappingBaseNode recursiveRoot = getRecursiveRootNode(recursiveElement);
- recursiveRoot.setRootRecursiveNode(true, recursiveElement.getMappingClass().toUpperCase());
+ recursiveRoot.setRootRecursiveNode(true, recursiveElement.getMappingClass());
addChild(elem);
}
else {
@@ -139,10 +139,6 @@
return null;
}
- public String getCanonicalName() {
- return getFullyQualifiedName().toUpperCase();
- }
-
public void removeChildNode(MappingBaseNode toRemove) {
getChildren().remove(toRemove);
}
Modified: trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingDocument.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingDocument.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingDocument.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -65,10 +65,6 @@
return name;
}
- public String getCanonicalName() {
- return name.toUpperCase();
- }
-
public MappingBaseNode getRootNode() {
return root;
}
Modified: trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -66,35 +66,31 @@
}
public static MappingNode findNode(MappingNode root, String partialName) {
+ return findNode(root, partialName, 0);
+ }
+
+ public static MappingNode findNode(MappingNode root, String partialName, int start) {
String canonicalName = root.getName();
if (canonicalName != null) {
- //@ is optional, so we need to check for it only with attributes
- if (partialName.startsWith("@")) { //$NON-NLS-1$
- canonicalName = "@" + canonicalName; //$NON-NLS-1$
- }
+ int offset = partialName.charAt(start)=='@'?1:0;
- canonicalName = canonicalName.toUpperCase();
-
- boolean abort = true;
-
- if (partialName.startsWith(canonicalName)) {
- if (partialName.length() > canonicalName.length() + 1 && partialName.charAt(canonicalName.length()) == ElementSymbol.SEPARATOR.toCharArray()[0]) {
- partialName = partialName.substring(canonicalName.length() + 1);
- abort = false;
- } else if (partialName.length() == canonicalName.length()) {
+ if (partialName.startsWith(canonicalName, start + offset)) {
+ if (partialName.length() - start > canonicalName.length() + 1 && partialName.charAt(start + canonicalName.length()) == '.') {
+ start += canonicalName.length() + 1;
+ } else if (partialName.length() - start == canonicalName.length() + offset) {
return root;
- }
+ } else {
+ return null;
+ }
+ } else {
+ return null;
}
-
- if (abort) {
- return null;
- }
}
for (Iterator<MappingNode> i = root.getChildren().iterator(); i.hasNext();) {
MappingNode child = i.next();
- MappingNode found = findNode(child, partialName);
+ MappingNode found = findNode(child, partialName, start);
if (found != null) {
return found;
}
Modified: trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingSourceNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingSourceNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/mapping/xml/MappingSourceNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,6 +25,7 @@
import java.util.HashMap;
import java.util.Map;
+import org.teiid.core.util.Assertion;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
@@ -153,6 +154,8 @@
public ElementSymbol getMappedSymbol(ElementSymbol symbol) {
ElementSymbol mappedSymbol = (ElementSymbol)symbolMap.get(symbol);
if (mappedSymbol == null) {
+ Assertion.assertTrue(symbol.getGroupSymbol() == null || !symbolMap.containsKey(symbol.getGroupSymbol()), "invalid symbol " + symbol); //$NON-NLS-1$
+
MappingSourceNode parentSourceNode = getParentSourceNode();
if (parentSourceNode != null) {
return parentSourceNode.getMappedSymbol(symbol);
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/CompositeMetadataStore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/CompositeMetadataStore.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/CompositeMetadataStore.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -39,10 +39,8 @@
/**
* Aggregates the metadata from multiple stores.
- * IMPORTANT: All strings queries should be in upper case.
*/
public class CompositeMetadataStore extends MetadataStore {
-
public CompositeMetadataStore(MetadataStore metadataStore) {
addMetadataStore(metadataStore);
@@ -56,6 +54,7 @@
public void addMetadataStore(MetadataStore metadataStore) {
this.schemas.putAll(metadataStore.getSchemas());
+ this.schemaList.addAll(metadataStore.getSchemaList());
this.datatypes.addAll(metadataStore.getDatatypes());
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/GroupInfo.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/GroupInfo.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/GroupInfo.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,10 +25,10 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import org.teiid.query.sql.symbol.ElementSymbol;
@@ -45,10 +45,10 @@
public GroupInfo(LinkedHashMap<Object, ElementSymbol> symbols) {
this.idToSymbolMap = symbols;
- this.symbolList = Collections.unmodifiableList(new ArrayList(symbols.values()));
- this.shortNameToSymbolMap = new HashMap<String, ElementSymbol>(symbolList.size());
+ this.symbolList = Collections.unmodifiableList(new ArrayList<ElementSymbol>(symbols.values()));
+ this.shortNameToSymbolMap = new TreeMap<String, ElementSymbol>(String.CASE_INSENSITIVE_ORDER);
for (ElementSymbol symbol : symbolList) {
- shortNameToSymbolMap.put(symbol.getShortCanonicalName(), symbol);
+ shortNameToSymbolMap.put(symbol.getShortName(), symbol);
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -33,7 +33,7 @@
import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.sql.lang.CacheHint;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
/**
* This class represents a temporary metadata ID. A temporary metadata ID
@@ -412,7 +412,7 @@
public String getName() {
if (this.name == null) {
- this.name = SingleElementSymbol.getShortName(this.ID);
+ this.name = Symbol.getShortName(this.ID);
}
return this.name;
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,18 +24,17 @@
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
+import java.util.NavigableMap;
+import java.util.TreeMap;
import org.teiid.query.metadata.TempMetadataID.Type;
-import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
/**
@@ -45,13 +44,13 @@
private static final long serialVersionUID = 4055072385672022478L;
// UPPER CASE TEMP GROUP NAME --> TempMetadataID for group
- private Map<String, TempMetadataID> tempGroups;
+ private NavigableMap<String, TempMetadataID> tempGroups;
/**
* Constructor for TempMetadataStore.
*/
public TempMetadataStore() {
- this(new HashMap<String, TempMetadataID>());
+ this(new TreeMap<String, TempMetadataID>(String.CASE_INSENSITIVE_ORDER));
}
/**
@@ -59,19 +58,25 @@
* the parameter is null, a new empty Map will beused instead.
* @param data Map of upper case group name to group TempMetadataID object
*/
- public TempMetadataStore(Map<String, TempMetadataID> data) {
+ public TempMetadataStore(NavigableMap<String, TempMetadataID> data) {
if (data == null) {
- tempGroups = new HashMap<String, TempMetadataID>();
+ tempGroups = new TreeMap<String, TempMetadataID>(String.CASE_INSENSITIVE_ORDER);
} else {
tempGroups = data;
}
}
+
+ public TempMetadataStore clone() {
+ TreeMap<String, TempMetadataID> clone = new TreeMap<String, TempMetadataID>(String.CASE_INSENSITIVE_ORDER);
+ clone.putAll(tempGroups);
+ return new TempMetadataStore(clone);
+ }
/**
* Get all temp group and element metadata
* @param data Map of upper case group name to group TempMetadataID object
*/
- public Map<String, TempMetadataID> getData() {
+ public NavigableMap<String, TempMetadataID> getData() {
return this.tempGroups;
}
@@ -103,27 +108,25 @@
* @param isVirtual whether or not the group is a virtual group
* @param isTempTable whether or not the group is a temporary table
*/
- public TempMetadataID addTempGroup(String tempGroup, List<? extends SingleElementSymbol> tempSymbols, boolean isVirtual, boolean isTempTable) {
+ public TempMetadataID addTempGroup(String tempGroup, List<? extends Expression> tempSymbols, boolean isVirtual, boolean isTempTable) {
// Add the temporary group
- String tempName = tempGroup.toUpperCase();
-
List<TempMetadataID> elementIDs = new ArrayList<TempMetadataID>(tempSymbols.size());
- for (SingleElementSymbol symbol : tempSymbols) {
- TempMetadataID elementID = createElementSymbol(tempName, symbol, isTempTable);
+ for (Expression symbol : tempSymbols) {
+ TempMetadataID elementID = createElementSymbol(tempGroup, symbol, isTempTable);
elementIDs.add(elementID);
}
// Create group ID
- TempMetadataID groupID = new TempMetadataID(tempName, elementIDs, isVirtual?Type.VIRTUAL:Type.TEMP);
- this.tempGroups.put(tempName, groupID);
+ TempMetadataID groupID = new TempMetadataID(tempGroup, elementIDs, isVirtual?Type.VIRTUAL:Type.TEMP);
+ this.tempGroups.put(tempGroup, groupID);
return groupID;
}
- private TempMetadataID createElementSymbol(String tempName, SingleElementSymbol symbol, boolean isTempTable) {
+ private TempMetadataID createElementSymbol(String tempName, Expression symbol, boolean isTempTable) {
// Create new element name
- String elementName = tempName + SingleElementSymbol.SEPARATOR + symbol.getShortName();
+ String elementName = tempName + Symbol.SEPARATOR + Symbol.getShortName(symbol);
Object metadataID = null;
@@ -132,14 +135,14 @@
symbol = as.getSymbol();
}
- //the following allows for orginal metadata ids to be determined for proc inputs
- if (symbol instanceof ExpressionSymbol && !(symbol instanceof AggregateSymbol)) {
+ //the following allows for original metadata ids to be determined for proc inputs
+ if (symbol instanceof ExpressionSymbol) {
Expression expr = ((ExpressionSymbol)symbol).getExpression();
if (expr instanceof Reference) {
expr = ((Reference)expr).getExpression();
}
if (expr instanceof ElementSymbol) {
- symbol = (ElementSymbol)expr;
+ symbol = expr;
}
}
@@ -163,12 +166,10 @@
* @param symbol - element to be added
* @return metadata id.
*/
- public TempMetadataID addElementSymbolToTempGroup(String tempGroup, SingleElementSymbol symbol) {
- String tempName = tempGroup.toUpperCase();
-
- TempMetadataID groupID = this.tempGroups.get(tempName);
+ public TempMetadataID addElementSymbolToTempGroup(String tempGroup, Expression symbol) {
+ TempMetadataID groupID = this.tempGroups.get(tempGroup);
if (groupID != null) {
- TempMetadataID elementID = createElementSymbol(tempName, symbol, false);
+ TempMetadataID elementID = createElementSymbol(tempGroup, symbol, false);
groupID.addElement(elementID);
@@ -183,7 +184,7 @@
* @return Metadata ID or null if not found
*/
public TempMetadataID getTempGroupID(String tempGroup) {
- return tempGroups.get(tempGroup.toUpperCase());
+ return tempGroups.get(tempGroup);
}
/**
@@ -192,13 +193,13 @@
* @return Metadata ID or null if not found
*/
public TempMetadataID getTempElementID(String tempElement) {
- int index = tempElement.lastIndexOf(SingleElementSymbol.SEPARATOR);
+ int index = tempElement.lastIndexOf(Symbol.SEPARATOR);
if(index < 0) {
return null;
}
String groupName = tempElement.substring(0, index);
- TempMetadataID groupID = tempGroups.get(groupName.toUpperCase());
+ TempMetadataID groupID = tempGroups.get(groupName);
if(groupID != null) {
for (TempMetadataID elementID : groupID.getElements()) {
if(elementID.getID().equalsIgnoreCase(tempElement)) {
@@ -226,14 +227,14 @@
}
public void addElementToTempGroup(String tempGroup, ElementSymbol symbol) {
- TempMetadataID groupID = tempGroups.get(tempGroup.toUpperCase());
+ TempMetadataID groupID = tempGroups.get(tempGroup);
if(groupID != null) {
groupID.addElement((TempMetadataID)symbol.getMetadataID());
}
}
public TempMetadataID removeTempGroup(String tempGroup) {
- return tempGroups.remove(tempGroup.toUpperCase());
+ return tempGroups.remove(tempGroup);
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,14 +22,29 @@
package org.teiid.query.metadata;
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
import org.jboss.vfs.VirtualFile;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.core.types.*;
+import org.teiid.core.types.BlobImpl;
+import org.teiid.core.types.ClobImpl;
+import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.types.InputStreamFactory;
+import org.teiid.core.types.SQLXMLImpl;
import org.teiid.core.util.ArgCheck;
import org.teiid.core.util.LRUCache;
import org.teiid.core.util.ObjectConverterUtil;
@@ -180,7 +195,7 @@
if (columnIndex == -1) {
throw new QueryMetadataException(elementName+TransformationMetadata.NOT_EXISTS_MESSAGE);
}
- Table table = this.store.findGroup(elementName.substring(0, columnIndex).toUpperCase());
+ Table table = this.store.findGroup(elementName.substring(0, columnIndex));
String shortElementName = elementName.substring(columnIndex + 1);
for (Column column : getElementIDsInGroupID(table)) {
if (column.getName().equalsIgnoreCase(shortElementName)) {
@@ -191,7 +206,7 @@
}
public Table getGroupID(final String groupName) throws TeiidComponentException, QueryMetadataException {
- return getMetadataStore().findGroup(groupName.toUpperCase());
+ return getMetadataStore().findGroup(groupName);
}
public Collection<String> getGroupsForPartialName(final String partialGroupName)
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,7 +24,6 @@
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.QueryPlannerException;
@@ -89,8 +88,12 @@
boolean debug = analysisRecord.recordDebug();
- Map tempMetadata = command.getTemporaryMetadata();
- metadata = new TempMetadataAdapter(metadata, new TempMetadataStore(tempMetadata));
+ TempMetadataStore tempMetadata = command.getTemporaryMetadata();
+ if (tempMetadata != null) {
+ metadata = new TempMetadataAdapter(metadata, tempMetadata);
+ } else if (!(metadata instanceof TempMetadataAdapter)) {
+ metadata = new TempMetadataAdapter(metadata, new TempMetadataStore());
+ }
// Create an ID generator that can be used for all plans to generate unique data node IDs
if(idGenerator == null) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/TriggerActionPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/TriggerActionPlanner.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/TriggerActionPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -51,9 +51,7 @@
import org.teiid.query.sql.proc.TriggerAction;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.SelectSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.util.CommandContext;
@@ -85,10 +83,10 @@
for (Map.Entry<ElementSymbol, Expression> entry : QueryResolver.getVariableValues(userCommand, false, metadata).entrySet()) {
if (entry.getKey().getGroupSymbol().getShortName().equalsIgnoreCase(SQLConstants.Reserved.NEW)) {
- Expression value = entry.getValue() instanceof SingleElementSymbol ? entry.getValue() : new ExpressionSymbol("x", entry.getValue()); //$NON-NLS-1$
+ Expression value = entry.getValue();
params.put(entry.getKey(), value);
if (userCommand instanceof Update) {
- ((Query)query).getSelect().addSymbol((SelectSymbol) value);
+ ((Query)query).getSelect().addSymbol(value);
}
} else {
params.put(entry.getKey(), entry.getValue());
@@ -109,13 +107,13 @@
Map<ElementSymbol, Expression> params)
throws QueryMetadataException, TeiidComponentException {
QueryCommand query;
- ArrayList<SelectSymbol> selectSymbols = new ArrayList<SelectSymbol>();
+ ArrayList<Expression> selectSymbols = new ArrayList<Expression>();
List<ElementSymbol> allSymbols = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata);
for (ElementSymbol elementSymbol : allSymbols) {
- params.put(new ElementSymbol(SQLConstants.Reserved.OLD + ElementSymbol.SEPARATOR + elementSymbol.getShortName()), elementSymbol);
+ params.put(new ElementSymbol(SQLConstants.Reserved.OLD + Symbol.SEPARATOR + elementSymbol.getShortName()), elementSymbol);
if (userCommand instanceof Update) {
//default to old
- params.put(new ElementSymbol(SQLConstants.Reserved.NEW + ElementSymbol.SEPARATOR + elementSymbol.getShortName()), elementSymbol);
+ params.put(new ElementSymbol(SQLConstants.Reserved.NEW + Symbol.SEPARATOR + elementSymbol.getShortName()), elementSymbol);
}
}
selectSymbols.addAll(LanguageObject.Util.deepClone(allSymbols, ElementSymbol.class));
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/AliasGenerator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/AliasGenerator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/AliasGenerator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -29,25 +29,15 @@
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.sql.LanguageVisitor;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.OrderBy;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.Select;
-import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubqueryFromClause;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.lang.UnaryFromClause;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.navigator.PreOrderNavigator;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.util.SymbolMap;
@@ -68,7 +58,7 @@
Map<String, Map<String, String>> elementMap = new HashMap<String, Map<String, String>>();
Map<String, String> groupNames = new HashMap<String, String>();
- Map<SingleElementSymbol, String> currentSymbols;
+ Map<Expression, String> currentSymbols;
boolean aliasColumns = false;
@@ -76,7 +66,7 @@
this.parent = parent;
}
- public String getElementName(SingleElementSymbol symbol, boolean renameGroup) {
+ public String getElementName(Expression symbol, boolean renameGroup) {
String name = null;
if (currentSymbols != null) {
name = currentSymbols.get(symbol);
@@ -91,9 +81,9 @@
return null;
}
ElementSymbol element = (ElementSymbol)symbol;
- Map<String, String> elements = this.elementMap.get(element.getGroupSymbol().getCanonicalName());
+ Map<String, String> elements = this.elementMap.get(element.getGroupSymbol().getName());
if (elements != null) {
- name = elements.get(element.getShortCanonicalName());
+ name = elements.get(element.getShortName());
if (name != null) {
if (renameGroup) {
renameGroup(element.getGroupSymbol());
@@ -116,7 +106,7 @@
public void renameGroup(GroupSymbol obj) {
if (aliasGroups) {
String definition = obj.getNonCorrelationName();
- String newAlias = getGroupName(obj.getCanonicalName());
+ String newAlias = getGroupName(obj.getName());
if (newAlias == null) {
return;
}
@@ -159,10 +149,10 @@
String newName = namingContext.getElementName(obj, true);
if (newName == null) {
- newName = ElementSymbol.getShortName(obj.getOutputName());
+ newName = Symbol.getShortName(obj.getOutputName());
}
- obj.setOutputName(group.getOutputName() + ElementSymbol.SEPARATOR + newName);
+ obj.setOutputName(group.getOutputName() + Symbol.SEPARATOR + newName);
obj.setDisplayMode(ElementSymbol.DisplayMode.OUTPUT_NAME);
}
@@ -216,36 +206,29 @@
public void visit(Select obj) {
super.visit(obj);
- List selectSymbols = obj.getSymbols();
- HashMap<SingleElementSymbol, String> symbols = new HashMap<SingleElementSymbol, String>(selectSymbols.size());
+ List<Expression> selectSymbols = obj.getSymbols();
+ HashMap<Expression, String> symbols = new HashMap<Expression, String>(selectSymbols.size());
for (int i = 0; i < selectSymbols.size(); i++) {
- SingleElementSymbol symbol = (SingleElementSymbol)selectSymbols.get(i);
+ Expression symbol = selectSymbols.get(i);
boolean needsAlias = visitor.namingContext.aliasColumns;
String newAlias = "c_" + i; //$NON-NLS-1$
- Expression expr = SymbolMap.getExpression(symbol);
+ Expression newSymbol = SymbolMap.getExpression(symbol);
- SingleElementSymbol newSymbol = symbol;
-
- if (!(expr instanceof SingleElementSymbol)) {
- newSymbol = new ExpressionSymbol(newSymbol.getShortName(), expr);
- } else if (expr instanceof ElementSymbol) {
- newSymbol = (ElementSymbol)expr;
+ if (newSymbol instanceof ElementSymbol) {
if (!needsAlias) {
- newAlias = newSymbol.getOutputName();
+ newAlias = ((ElementSymbol)newSymbol).getOutputName();
} else {
- needsAlias &= needsAlias(newAlias, (ElementSymbol)expr);
+ needsAlias &= needsAlias(newAlias, (ElementSymbol)newSymbol);
}
- } else {
- newSymbol = (SingleElementSymbol)expr;
}
symbols.put(symbol, newAlias);
if (visitor.namingContext.aliasColumns && needsAlias) {
- newSymbol = new AliasSymbol(symbol.getShortName(), newSymbol);
- newSymbol.setOutputName(newAlias);
+ newSymbol = new AliasSymbol(Symbol.getShortName(symbol), newSymbol);
+ ((AliasSymbol)newSymbol).setOutputName(newAlias);
}
selectSymbols.set(i, newSymbol);
}
@@ -277,10 +260,10 @@
visitor.createChildNamingContext(true);
obj.getCommand().acceptVisitor(this);
Map<String, String> viewGroup = new HashMap<String, String>();
- for (Entry<SingleElementSymbol, String> entry : visitor.namingContext.currentSymbols.entrySet()) {
- viewGroup.put(entry.getKey().getShortCanonicalName(), entry.getValue());
+ for (Entry<Expression, String> entry : visitor.namingContext.currentSymbols.entrySet()) {
+ viewGroup.put(Symbol.getShortName(entry.getKey()), entry.getValue());
}
- visitor.namingContext.parent.elementMap.put(obj.getName().toUpperCase(), viewGroup);
+ visitor.namingContext.parent.elementMap.put(obj.getName(), viewGroup);
visitor.removeChildNamingContext();
obj.getGroupSymbol().setOutputName(recontextGroup(obj.getGroupSymbol(), true));
}
@@ -304,7 +287,7 @@
} else {
newAlias = "g_" + groupIndex++; //$NON-NLS-1$
}
- visitor.namingContext.groupNames.put(symbol.getName().toUpperCase(), newAlias);
+ visitor.namingContext.groupNames.put(symbol.getName(), newAlias);
return newAlias;
}
@@ -344,32 +327,32 @@
//add/correct aliases if necessary
for (int i = 0; i < obj.getVariableCount(); i++) {
OrderByItem item = obj.getOrderByItems().get(i);
- SingleElementSymbol element = item.getSymbol();
+ Expression element = item.getSymbol();
if (item.isUnrelated()) {
visitNode(element);
continue;
}
String name = visitor.namingContext.getElementName(element, false);
boolean needsAlias = visitor.namingContext.aliasColumns;
- if (name != null) {
-
- Expression expr = SymbolMap.getExpression(element);
-
- if (!(expr instanceof SingleElementSymbol)) {
- expr = new ExpressionSymbol(element.getShortName(), expr);
- } else if (expr instanceof ElementSymbol) {
- needsAlias &= needsAlias(name, (ElementSymbol)expr);
- }
-
- if (needsAlias) {
- element = new AliasSymbol(element.getShortName(), (SingleElementSymbol)expr);
- } else if (expr instanceof ElementSymbol) {
- element = (ElementSymbol)expr;
- visitNode(element);
- }
- item.setSymbol(element);
- element.setOutputName(name);
+ if (name == null) {
+ continue;
}
+ Expression expr = SymbolMap.getExpression(element);
+
+ if (expr instanceof ElementSymbol) {
+ needsAlias &= needsAlias(name, (ElementSymbol)expr);
+ }
+
+ if (needsAlias) {
+ element = new AliasSymbol(Symbol.getShortName(element), expr);
+ } else if (expr instanceof ElementSymbol) {
+ element = expr;
+ visitNode(element);
+ }
+ item.setSymbol(element);
+ if (element instanceof Symbol) {
+ ((Symbol)element).setOutputName(name);
+ }
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PartitionAnalyzer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PartitionAnalyzer.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PartitionAnalyzer.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,18 +22,7 @@
package org.teiid.query.optimizer.relational;
-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.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.sql.lang.CompareCriteria;
@@ -46,7 +35,6 @@
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
/**
@@ -114,7 +102,7 @@
}
private static Map<ElementSymbol, Set<Constant>> extractPartitionInfo(Query query, List<ElementSymbol> projectedSymbols) {
- List<SingleElementSymbol> projected = query.getSelect().getProjectedSymbols();
+ List<Expression> projected = query.getSelect().getProjectedSymbols();
List<Criteria> crits = Criteria.separateCriteriaByAnd(query.getCriteria());
Map<Expression, Set<Constant>> inMap = new HashMap<Expression, Set<Constant>>();
for (Criteria criteria : crits) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -49,55 +49,18 @@
import org.teiid.query.optimizer.relational.rules.RuleAssignOutputElements;
import org.teiid.query.optimizer.relational.rules.RuleChooseJoinStrategy;
import org.teiid.query.processor.ProcessorPlan;
-import org.teiid.query.processor.relational.AccessNode;
-import org.teiid.query.processor.relational.ArrayTableNode;
-import org.teiid.query.processor.relational.DependentAccessNode;
-import org.teiid.query.processor.relational.DependentProcedureAccessNode;
-import org.teiid.query.processor.relational.DependentProcedureExecutionNode;
-import org.teiid.query.processor.relational.EnhancedSortMergeJoinStrategy;
-import org.teiid.query.processor.relational.GroupingNode;
-import org.teiid.query.processor.relational.InsertPlanExecutionNode;
-import org.teiid.query.processor.relational.JoinNode;
-import org.teiid.query.processor.relational.LimitNode;
-import org.teiid.query.processor.relational.MergeJoinStrategy;
-import org.teiid.query.processor.relational.NestedLoopJoinStrategy;
-import org.teiid.query.processor.relational.NestedTableJoinStrategy;
-import org.teiid.query.processor.relational.NullNode;
-import org.teiid.query.processor.relational.PlanExecutionNode;
-import org.teiid.query.processor.relational.ProjectIntoNode;
-import org.teiid.query.processor.relational.ProjectNode;
-import org.teiid.query.processor.relational.RelationalNode;
-import org.teiid.query.processor.relational.RelationalPlan;
-import org.teiid.query.processor.relational.SelectNode;
-import org.teiid.query.processor.relational.SortNode;
-import org.teiid.query.processor.relational.TextTableNode;
-import org.teiid.query.processor.relational.UnionAllNode;
-import org.teiid.query.processor.relational.WindowFunctionProjectNode;
-import org.teiid.query.processor.relational.XMLTableNode;
+import org.teiid.query.processor.relational.*;
import org.teiid.query.processor.relational.JoinNode.JoinStrategyType;
import org.teiid.query.processor.relational.MergeJoinStrategy.SortOption;
import org.teiid.query.processor.relational.SortUtility.Mode;
import org.teiid.query.resolver.util.ResolverUtil;
-import org.teiid.query.sql.lang.ArrayTable;
-import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.Criteria;
-import org.teiid.query.sql.lang.Insert;
-import org.teiid.query.sql.lang.JoinType;
-import org.teiid.query.sql.lang.OrderBy;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.QueryCommand;
-import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.lang.TableFunctionReference;
-import org.teiid.query.sql.lang.TextTable;
-import org.teiid.query.sql.lang.XMLTable;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.lang.SetQuery.Operation;
import org.teiid.query.sql.lang.XMLTable.XMLColumn;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.symbol.WindowFunction;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.EvaluatableVisitor;
@@ -221,7 +184,7 @@
}
} else {
- List<SingleElementSymbol> symbols = (List) node.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> symbols = (List) node.getProperty(NodeConstants.Info.PROJECT_COLS);
ProjectNode pnode = new ProjectNode(getID());
pnode.setSelectSymbols(symbols);
@@ -231,9 +194,9 @@
WindowFunctionProjectNode wfpn = new WindowFunctionProjectNode(getID());
Set<WindowFunction> windowFunctions = RuleAssignOutputElements.getWindowFunctions(symbols);
//TODO: check for selecting all window functions
- List<SingleElementSymbol> outputElements = new ArrayList<SingleElementSymbol>(windowFunctions);
+ List<Expression> outputElements = new ArrayList<Expression>(windowFunctions);
//collect the other projected expressions
- for (SingleElementSymbol singleElementSymbol : (List<SingleElementSymbol>)node.getFirstChild().getProperty(Info.OUTPUT_COLS)) {
+ for (Expression singleElementSymbol : (List<Expression>)node.getFirstChild().getProperty(Info.OUTPUT_COLS)) {
outputElements.add(singleElementSymbol);
}
wfpn.setElements(outputElements);
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -164,7 +164,7 @@
WithQueryCommand wqc = new WithQueryCommand(with.getGroupSymbol(), with.getColumns(), withCommand);
pushDownWith.add(wqc);
}
- names.add(with.getGroupSymbol().getCanonicalName());
+ names.add(with.getGroupSymbol().getName());
}
if (modelID != null && supportsWithPushdown) {
supportsWithPushdown = CapabilitiesUtil.supports(Capability.COMMON_TABLE_EXPRESSIONS, modelID, metadata, capFinder);
@@ -190,7 +190,7 @@
connectSubqueryContainers(plan); //TODO: merge with node creation
// Set top column information on top node
- List<SingleElementSymbol> topCols = Util.deepClone(command.getProjectedSymbols(), SingleElementSymbol.class);
+ List<Expression> topCols = Util.deepClone(command.getProjectedSymbols(), Expression.class);
// Build rule set based on hints
RuleStack rules = buildRules();
@@ -232,7 +232,7 @@
@Override
public void visit(UnaryFromClause obj) {
GroupSymbol group = obj.getGroup();
- if (names.contains(group.getNonCorrelationName().toUpperCase())) {
+ if (names.contains(group.getNonCorrelationName())) {
group.setModelMetadataId(modelID);
}
}
@@ -505,7 +505,7 @@
PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);
// Set output columns
- List<SingleElementSymbol> cols = command.getProjectedSymbols();
+ List<Expression> cols = command.getProjectedSymbols();
projectNode.setProperty(NodeConstants.Info.PROJECT_COLS, cols);
// Define source of data for stored query / procedure
@@ -975,7 +975,7 @@
mergeTempMetadata(nestedCommand, parentCommand);
PlanNode childRoot = generatePlan(nestedCommand, false);
node.addFirstChild(childRoot);
- List<SingleElementSymbol> projectCols = nestedCommand.getProjectedSymbols();
+ List<Expression> projectCols = nestedCommand.getProjectedSymbols();
SymbolMap map = SymbolMap.createSymbolMap(group, projectCols, metadata);
node.setProperty(NodeConstants.Info.SYMBOL_MAP, map);
} else {
@@ -1187,14 +1187,14 @@
static void mergeTempMetadata(
Command childCommand,
Command parentCommand) {
- Map childTempMetadata = childCommand.getTemporaryMetadata();
- if (childTempMetadata != null && !childTempMetadata.isEmpty()){
+ TempMetadataStore childTempMetadata = childCommand.getTemporaryMetadata();
+ if (childTempMetadata != null && !childTempMetadata.getData().isEmpty()){
// Add to parent temp metadata
- Map parentTempMetadata = parentCommand.getTemporaryMetadata();
+ TempMetadataStore parentTempMetadata = parentCommand.getTemporaryMetadata();
if (parentTempMetadata == null){
- parentCommand.setTemporaryMetadata(new HashMap(childTempMetadata));
+ parentCommand.setTemporaryMetadata(childTempMetadata);
} else {
- parentTempMetadata.putAll(childTempMetadata);
+ parentTempMetadata.getData().putAll(childTempMetadata.getData());
}
}
}
@@ -1249,7 +1249,7 @@
return QueryRewriter.rewrite(result, metadata, context);
}
- public static Query createMatViewQuery(Object matMetadataId, String matTableName, List<? extends SelectSymbol> select, boolean isGlobal) {
+ public static Query createMatViewQuery(Object matMetadataId, String matTableName, List<? extends Expression> select, boolean isGlobal) {
Query query = new Query();
query.setSelect(new Select(select));
GroupSymbol gs = new GroupSymbol(matTableName);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,16 +22,7 @@
package org.teiid.query.optimizer.relational.rules;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryPlannerException;
@@ -65,7 +56,6 @@
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
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.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.ExpressionMappingVisitor;
@@ -233,12 +223,12 @@
}
} else if(type == NodeConstants.Types.PROJECT) {
- List<SingleElementSymbol> projectedSymbols = (List<SingleElementSymbol>)node.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> projectedSymbols = (List<Expression>)node.getProperty(NodeConstants.Info.PROJECT_COLS);
Select select = new Select(projectedSymbols);
ExpressionMappingVisitor.mapExpressions(select, symbolMap);
if (rewrite) {
for (LanguageObject expr : select.getSymbols()) {
- rewriteSingleElementSymbol(metadata, (SingleElementSymbol) expr);
+ rewriteSingleElementSymbol(metadata, (Expression) expr);
}
}
node.setProperty(NodeConstants.Info.PROJECT_COLS, select.getSymbols());
@@ -296,7 +286,7 @@
}
private static void rewriteSingleElementSymbol(
- QueryMetadataInterface metadata, SingleElementSymbol ses) throws QueryPlannerException {
+ QueryMetadataInterface metadata, Expression ses) throws QueryPlannerException {
try {
if (ses instanceof AliasSymbol) {
ses = ((AliasSymbol)ses).getSymbol();
@@ -304,7 +294,7 @@
if (ses instanceof ExpressionSymbol) {
ExpressionSymbol es = (ExpressionSymbol)ses;
if (es.getExpression() != null) {
- es.setExpression(QueryRewriter.rewriteExpression(es.getExpression(), null, null, metadata));
+ es.setExpression(QueryRewriter.rewriteExpression(es.getExpression(), null, metadata));
}
}
} catch(TeiidProcessingException e) {
@@ -320,7 +310,7 @@
return expression;
}
- if(expression instanceof SingleElementSymbol) {
+ if(expression instanceof Expression) {
Expression mappedSymbol = (Expression) symbolMap.get(expression);
if (mappedSymbol != null) {
return mappedSymbol;
@@ -535,13 +525,13 @@
/**
* Finds the closest project columns in the current frame
*/
- static List<SingleElementSymbol> findTopCols(PlanNode node) {
+ static List<Expression> findTopCols(PlanNode node) {
PlanNode project = NodeEditor.findNodePreOrder(node, NodeConstants.Types.PROJECT, NodeConstants.Types.SOURCE);
if (project == null) {
project = NodeEditor.findParent(node, NodeConstants.Types.PROJECT, NodeConstants.Types.SOURCE);
}
if (project != null) {
- return (List<SingleElementSymbol>)project.getProperty(NodeConstants.Info.PROJECT_COLS);
+ return (List<Expression>)project.getProperty(NodeConstants.Info.PROJECT_COLS);
}
Assertion.failed("no top cols in frame"); //$NON-NLS-1$
return null;
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinUtil.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -153,7 +153,7 @@
Expression expr) {
Expression simplifiedExpression = (Expression)replaceWithNullValues(innerGroups, expr);
try {
- simplifiedExpression = QueryRewriter.rewriteExpression(simplifiedExpression, null, null, metadata);
+ simplifiedExpression = QueryRewriter.rewriteExpression(simplifiedExpression, null, metadata);
} catch (TeiidException err) {
//log the exception
return true;
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,17 +25,7 @@
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.Map.Entry;
import org.teiid.api.exception.query.QueryMetadataException;
@@ -55,25 +45,12 @@
import org.teiid.query.optimizer.relational.plantree.PlanNode;
import org.teiid.query.optimizer.relational.plantree.NodeConstants.Info;
import org.teiid.query.resolver.util.ResolverUtil;
-import org.teiid.query.sql.lang.AbstractSetCriteria;
-import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.CompoundCriteria;
-import org.teiid.query.sql.lang.Criteria;
-import org.teiid.query.sql.lang.DependentSetCriteria;
-import org.teiid.query.sql.lang.IsNullCriteria;
-import org.teiid.query.sql.lang.JoinType;
-import org.teiid.query.sql.lang.MatchCriteria;
-import org.teiid.query.sql.lang.NotCriteria;
-import org.teiid.query.sql.lang.PredicateCriteria;
-import org.teiid.query.sql.lang.SetCriteria;
-import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.lang.SetQuery.Operation;
import org.teiid.query.sql.symbol.Constant;
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.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.EvaluatableVisitor;
@@ -439,7 +416,7 @@
}
if (stats == null) {
if (node.getType() == NodeConstants.Types.PROJECT) {
- Collection<SingleElementSymbol> elems = new HashSet<SingleElementSymbol>();
+ Collection<Expression> elems = new HashSet<Expression>();
ElementCollectorVisitor.getElements(expr, elems);
newStats[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, childCardinality, metadata);
newStats[Stat.NNV.ordinal()] = getStat(Stat.NNV, elems, node, childCardinality, metadata);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -62,7 +62,6 @@
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.Function;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.symbol.WindowFunction;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
@@ -109,7 +108,7 @@
return plan;
}
- List<SingleElementSymbol> projectCols = (List<SingleElementSymbol>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> projectCols = (List<Expression>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
assignOutputElements(plan, projectCols, metadata, capFinder, rules, analysisRecord, context);
@@ -136,7 +135,7 @@
* @param outputElements Output elements needed for this node
* @param metadata Metadata implementation
*/
- private void assignOutputElements(PlanNode root, List<SingleElementSymbol> outputElements, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context)
+ private void assignOutputElements(PlanNode root, List<Expression> outputElements, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context)
throws QueryPlannerException, QueryMetadataException, TeiidComponentException {
int nodeType = root.getType();
@@ -156,7 +155,7 @@
root.setProperty(NodeConstants.Info.OUTPUT_COLS, command.getProjectedSymbols());
} else if (checkSymbols) {
Object modelId = RuleRaiseAccess.getModelIDFromAccess(root, metadata);
- for (SingleElementSymbol symbol : outputElements) {
+ for (Expression symbol : outputElements) {
if(!RuleRaiseAccess.canPushSymbol(symbol, true, modelId, metadata, capFinder, analysisRecord)) {
throw new QueryPlannerException(QueryPlugin.Util.getString("RuleAssignOutputElements.couldnt_push_expression", symbol, modelId)); //$NON-NLS-1$
}
@@ -168,7 +167,7 @@
if (root.hasBooleanProperty(NodeConstants.Info.UNRELATED_SORT)) {
//add missing sort columns
OrderBy elements = (OrderBy) root.getProperty(NodeConstants.Info.SORT_ORDER);
- outputElements = new ArrayList<SingleElementSymbol>(outputElements);
+ outputElements = new ArrayList<Expression>(outputElements);
boolean hasUnrelated = false;
for (OrderByItem item : elements.getOrderByItems()) {
if (item.getExpressionPosition() == -1) {
@@ -188,16 +187,16 @@
assignOutputElements(root.getLastChild(), outputElements, metadata, capFinder, rules, analysisRecord, context);
break;
case NodeConstants.Types.SOURCE: {
- outputElements = (List<SingleElementSymbol>)determineSourceOutput(root, outputElements, metadata, capFinder);
+ outputElements = (List<Expression>)determineSourceOutput(root, outputElements, metadata, capFinder);
root.setProperty(NodeConstants.Info.OUTPUT_COLS, outputElements);
- List<SingleElementSymbol> childElements = filterVirtualElements(root, outputElements, metadata);
+ List<Expression> childElements = filterVirtualElements(root, outputElements, metadata);
assignOutputElements(root.getFirstChild(), childElements, metadata, capFinder, rules, analysisRecord, context);
break;
}
case NodeConstants.Types.SET_OP: {
for (PlanNode childNode : root.getChildren()) {
PlanNode projectNode = NodeEditor.findNodePreOrder(childNode, NodeConstants.Types.PROJECT);
- List<SingleElementSymbol> projectCols = (List<SingleElementSymbol>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> projectCols = (List<Expression>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
assignOutputElements(childNode, projectCols, metadata, capFinder, rules, analysisRecord, context);
}
break;
@@ -210,14 +209,14 @@
execute(intoRoot.getFirstChild(), metadata, capFinder, rules, analysisRecord, context);
return;
}
- List<SingleElementSymbol> projectCols = outputElements;
+ List<Expression> projectCols = outputElements;
boolean modifiedProject = false;
PlanNode sortNode = NodeEditor.findParent(root, NodeConstants.Types.SORT, NodeConstants.Types.SOURCE);
if (sortNode != null && sortNode.hasBooleanProperty(NodeConstants.Info.UNRELATED_SORT)) {
//if this is the initial rule run, remove unrelated order before changing the project cols
if (!finalRun) {
OrderBy elements = (OrderBy) sortNode.getProperty(NodeConstants.Info.SORT_ORDER);
- projectCols = new ArrayList<SingleElementSymbol>(projectCols);
+ projectCols = new ArrayList<Expression>(projectCols);
for (OrderByItem item : elements.getOrderByItems()) {
if (item.getExpressionPosition() == -1) {
projectCols.remove(item.getSymbol());
@@ -241,7 +240,7 @@
}
}
- List<SingleElementSymbol> requiredInput = collectRequiredInputSymbols(root);
+ List<Expression> requiredInput = collectRequiredInputSymbols(root);
//targeted optimization for unnecessary aggregation
if (root.getType() == NodeConstants.Types.GROUP && root.hasBooleanProperty(Info.IS_OPTIONAL) && NodeEditor.findParent(root, NodeConstants.Types.ACCESS) == null) {
PlanNode old = root;
@@ -279,7 +278,7 @@
//determine which elements go to each side of the join
for (PlanNode childNode : root.getChildren()) {
Set<GroupSymbol> filterGroups = FrameUtil.findJoinSourceNode(childNode).getGroups();
- List<SingleElementSymbol> filteredElements = filterElements(requiredInput, filterGroups);
+ List<Expression> filteredElements = filterElements(requiredInput, filterGroups);
// Call child recursively
assignOutputElements(childNode, filteredElements, metadata, capFinder, rules, analysisRecord, context);
@@ -290,17 +289,17 @@
}
public static Set<WindowFunction> getWindowFunctions(
- List<SingleElementSymbol> projectCols) {
+ List<Expression> projectCols) {
LinkedHashSet<WindowFunction> windowFunctions = new LinkedHashSet<WindowFunction>();
- for (SingleElementSymbol singleElementSymbol : projectCols) {
+ for (Expression singleElementSymbol : projectCols) {
AggregateSymbolCollectorVisitor.getAggregates(singleElementSymbol, null, null, null, windowFunctions, null);
}
return windowFunctions;
}
- private List<SingleElementSymbol> filterElements(Collection<? extends SingleElementSymbol> requiredInput, Set<GroupSymbol> filterGroups) {
- List<SingleElementSymbol> filteredElements = new ArrayList<SingleElementSymbol>();
- for (SingleElementSymbol element : requiredInput) {
+ private List<Expression> filterElements(Collection<? extends Expression> requiredInput, Set<GroupSymbol> filterGroups) {
+ List<Expression> filteredElements = new ArrayList<Expression>();
+ for (Expression element : requiredInput) {
if(filterGroups.containsAll(GroupsUsedByElementsVisitor.getGroups(element))) {
filteredElements.add(element);
}
@@ -320,8 +319,8 @@
* @throws QueryMetadataException
* @throws QueryPlannerException
*/
- static List<? extends SingleElementSymbol> determineSourceOutput(PlanNode root,
- List<SingleElementSymbol> outputElements,
+ static List<? extends Expression> determineSourceOutput(PlanNode root,
+ List<Expression> outputElements,
QueryMetadataInterface metadata,
CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException, QueryPlannerException {
PlanNode virtualRoot = root.getLastChild();
@@ -350,7 +349,7 @@
return outputElements;
}
OrderBy sortOrder = (OrderBy)sort.getProperty(NodeConstants.Info.SORT_ORDER);
- List<SingleElementSymbol> topCols = FrameUtil.findTopCols(sort);
+ List<Expression> topCols = FrameUtil.findTopCols(sort);
SymbolMap symbolMap = (SymbolMap)root.getProperty(NodeConstants.Info.SYMBOL_MAP);
@@ -386,7 +385,7 @@
* @return The filtered list of columns for this node (used in recursing tree)
* @throws QueryPlannerException
*/
- static List<SingleElementSymbol> filterVirtualElements(PlanNode sourceNode, List<SingleElementSymbol> outputColumns, QueryMetadataInterface metadata) throws QueryPlannerException {
+ static List<Expression> filterVirtualElements(PlanNode sourceNode, List<Expression> outputColumns, QueryMetadataInterface metadata) throws QueryPlannerException {
PlanNode virtualRoot = sourceNode.getLastChild();
@@ -429,10 +428,10 @@
}
}
- List<SingleElementSymbol> newCols = null;
+ List<Expression> newCols = null;
for(int i=allProjects.size()-1; i>=0; i--) {
PlanNode projectNode = allProjects.get(i);
- List<SingleElementSymbol> projectCols = (List<SingleElementSymbol>) projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> projectCols = (List<Expression>) projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
newCols = RelationalNode.projectTuple(filteredIndex, projectCols, true);
@@ -442,7 +441,7 @@
if (filteredIndex[j] != -1) {
continue;
}
- SingleElementSymbol ex = (SingleElementSymbol) outputColumns.get(j).clone();
+ Expression ex = (Expression) outputColumns.get(j).clone();
ExpressionMappingVisitor.mapExpressions(ex, childMap.asMap());
newCols.set(j, ex);
filteredIndex[j] = j;
@@ -506,25 +505,25 @@
* for instance to create a new element symbol or sort on it, etc.
* @param node Node to collect for
*/
- private List<SingleElementSymbol> collectRequiredInputSymbols(PlanNode node) {
+ private List<Expression> collectRequiredInputSymbols(PlanNode node) {
- Set<SingleElementSymbol> requiredSymbols = new LinkedHashSet<SingleElementSymbol>();
- Set<SingleElementSymbol> createdSymbols = new HashSet<SingleElementSymbol>();
+ Set<Expression> requiredSymbols = new LinkedHashSet<Expression>();
+ Set<Expression> createdSymbols = new HashSet<Expression>();
- List<SingleElementSymbol> outputCols = (List<SingleElementSymbol>) node.getProperty(NodeConstants.Info.OUTPUT_COLS);
+ List<Expression> outputCols = (List<Expression>) node.getProperty(NodeConstants.Info.OUTPUT_COLS);
switch(node.getType()) {
case NodeConstants.Types.PROJECT:
{
- List<SingleElementSymbol> projectCols = (List<SingleElementSymbol>) node.getProperty(NodeConstants.Info.PROJECT_COLS);
- for (SingleElementSymbol ss : projectCols) {
+ List<Expression> projectCols = (List<Expression>) node.getProperty(NodeConstants.Info.PROJECT_COLS);
+ for (Expression ss : projectCols) {
if(ss instanceof AliasSymbol) {
createdSymbols.add(ss);
ss = ((AliasSymbol)ss).getSymbol();
}
- if (ss instanceof WindowFunction || (ss instanceof ExpressionSymbol && !(ss instanceof AggregateSymbol))) {
+ if (ss instanceof WindowFunction || ss instanceof ExpressionSymbol) {
createdSymbols.add(ss);
}
boolean symbolRequired = false;
@@ -573,7 +572,7 @@
Set<ElementSymbol> usedAggregates = new HashSet<ElementSymbol>();
// Take credit for creating any aggregates that are needed above
- for (SingleElementSymbol outputSymbol : outputCols) {
+ for (Expression outputSymbol : outputCols) {
if (!(outputSymbol instanceof ElementSymbol)) {
continue;
}
@@ -621,7 +620,7 @@
requiredSymbols.addAll(tempRequired);
*/
// Add any columns to required that are in this node's output but were not created here
- for (SingleElementSymbol currentOutputSymbol : outputCols) {
+ for (Expression currentOutputSymbol : outputCols) {
if(!(createdSymbols.contains(currentOutputSymbol)) ) {
requiredSymbols.add(currentOutputSymbol);
}
@@ -631,15 +630,15 @@
//TODO: this should depend upon whether the expressions are deterministic
if (node.getType() == NodeConstants.Types.PROJECT) {
Set<Expression> expressions = new HashSet<Expression>();
- for (Iterator<SingleElementSymbol> iterator = requiredSymbols.iterator(); iterator.hasNext();) {
- SingleElementSymbol ses = iterator.next();
+ for (Iterator<Expression> iterator = requiredSymbols.iterator(); iterator.hasNext();) {
+ Expression ses = iterator.next();
if (!expressions.add(SymbolMap.getExpression(ses))) {
iterator.remove();
}
}
}
- return new ArrayList<SingleElementSymbol>(requiredSymbols);
+ return new ArrayList<Expression>(requiredSymbols);
}
/**
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseJoinStrategy.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseJoinStrategy.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -45,7 +45,7 @@
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.GroupsUsedByElementsVisitor;
import org.teiid.query.util.CommandContext;
@@ -167,11 +167,11 @@
}
}
- public static List<SingleElementSymbol> createExpressionSymbols(List<? extends Expression> expressions) {
- List<SingleElementSymbol> result = new ArrayList<SingleElementSymbol>();
+ public static List<Expression> createExpressionSymbols(List<? extends Expression> expressions) {
+ List<Expression> result = new ArrayList<Expression>();
for (Expression expression : expressions) {
- if (expression instanceof SingleElementSymbol) {
- result.add((SingleElementSymbol)expression);
+ if (expression instanceof Symbol) {
+ result.add(expression);
continue;
}
result.add(new ExpressionSymbol("expr", expression)); //$NON-NLS-1$
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -55,26 +55,7 @@
import org.teiid.query.processor.relational.RelationalPlan;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.rewriter.QueryRewriter;
-import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.CompoundCriteria;
-import org.teiid.query.sql.lang.Criteria;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.From;
-import org.teiid.query.sql.lang.FromClause;
-import org.teiid.query.sql.lang.GroupBy;
-import org.teiid.query.sql.lang.Insert;
-import org.teiid.query.sql.lang.JoinPredicate;
-import org.teiid.query.sql.lang.JoinType;
-import org.teiid.query.sql.lang.Limit;
-import org.teiid.query.sql.lang.OrderBy;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.QueryCommand;
-import org.teiid.query.sql.lang.Select;
-import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.lang.SubqueryContainer;
-import org.teiid.query.sql.lang.SubqueryFromClause;
-import org.teiid.query.sql.lang.UnaryFromClause;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.lang.SetQuery.Operation;
import org.teiid.query.sql.navigator.DeepPostOrderNavigator;
import org.teiid.query.sql.symbol.AggregateSymbol;
@@ -84,7 +65,6 @@
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
import org.teiid.query.sql.visitor.ExpressionMappingVisitor;
@@ -169,7 +149,7 @@
return;
}
// ensure that all columns are comparable - they might not be if there is an intermediate project
- for (SingleElementSymbol ses : queryCommand.getProjectedSymbols()) {
+ for (Expression ses : queryCommand.getProjectedSymbols()) {
if (DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(ses.getType()))) {
return;
}
@@ -239,7 +219,7 @@
}
Query query = new Query();
Select select = new Select();
- List<SingleElementSymbol> columns = (List<SingleElementSymbol>)node.getProperty(NodeConstants.Info.OUTPUT_COLS);
+ List<Expression> columns = (List<Expression>)node.getProperty(NodeConstants.Info.OUTPUT_COLS);
prepareSubqueries(ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(columns));
select.addSymbols(columns);
query.setSelect(select);
@@ -498,7 +478,7 @@
OrderBy orderBy = (OrderBy)node.getProperty(NodeConstants.Info.SORT_ORDER);
query.setOrderBy(orderBy);
if (query instanceof Query) {
- List<SingleElementSymbol> cols = query.getProjectedSymbols();
+ List<Expression> cols = query.getProjectedSymbols();
for (OrderByItem item : orderBy.getOrderByItems()) {
item.setExpressionPosition(cols.indexOf(item.getSymbol()));
}
@@ -613,13 +593,8 @@
}
}
Select innerSelect = new Select();
- int index = 0;
for (Expression expr : newSelectColumns) {
- if (expr instanceof SingleElementSymbol) {
- innerSelect.addSymbol((SingleElementSymbol)expr);
- } else {
- innerSelect.addSymbol(new ExpressionSymbol("EXPR" + index++ , expr)); //$NON-NLS-1$
- }
+ innerSelect.addSymbol(expr);
}
query.setSelect(innerSelect);
Query outerQuery = null;
@@ -628,9 +603,9 @@
} catch (TeiidException err) {
throw new TeiidRuntimeException(err);
}
- Iterator<SingleElementSymbol> iter = outerQuery.getSelect().getProjectedSymbols().iterator();
- HashMap<Expression, SingleElementSymbol> expressionMap = new HashMap<Expression, SingleElementSymbol>();
- for (SingleElementSymbol symbol : query.getSelect().getProjectedSymbols()) {
+ Iterator<Expression> iter = outerQuery.getSelect().getProjectedSymbols().iterator();
+ HashMap<Expression, Expression> expressionMap = new HashMap<Expression, Expression>();
+ for (Expression symbol : query.getSelect().getProjectedSymbols()) {
expressionMap.put(SymbolMap.getExpression(symbol), iter.next());
}
ExpressionMappingVisitor.mapExpressions(groupBy, expressionMap);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleDecomposeJoin.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleDecomposeJoin.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleDecomposeJoin.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -54,7 +54,6 @@
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.util.CommandContext;
@@ -211,7 +210,7 @@
group = RulePlaceAccess.recontextSymbol(group, groups);
PlanNode projectNode = NodeEditor.findNodePreOrder(newUnion, NodeConstants.Types.PROJECT);
- List<? extends SingleElementSymbol> projectedSymbols = (List<? extends SingleElementSymbol>)projectNode.getProperty(Info.PROJECT_COLS);
+ List<? extends Expression> projectedSymbols = (List<? extends Expression>)projectNode.getProperty(Info.PROJECT_COLS);
SymbolMap newSymbolMap = RulePushAggregates.createSymbolMap(group, projectedSymbols, newUnion, metadata);
PlanNode view = RuleDecomposeJoin.createSource(group, newUnion, newSymbolMap);
@@ -324,7 +323,7 @@
PlanNode branchSource = NodeFactory.getNewNode(NodeConstants.Types.SOURCE);
branchSource.addGroup(group);
PlanNode projectNode = NodeEditor.findNodePreOrder(unionNode, NodeConstants.Types.PROJECT);
- branchSource.setProperty(Info.SYMBOL_MAP, SymbolMap.createSymbolMap(symbolMap.getKeys(), (List<? extends SingleElementSymbol>)projectNode.getProperty(Info.PROJECT_COLS)));
+ branchSource.setProperty(Info.SYMBOL_MAP, SymbolMap.createSymbolMap(symbolMap.getKeys(), (List<? extends Expression>)projectNode.getProperty(Info.PROJECT_COLS)));
unionNode.addAsParent(branchSource);
return branchSource;
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -50,8 +50,8 @@
import org.teiid.query.sql.lang.JoinType;
import org.teiid.query.sql.lang.OrderBy;
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.GroupsUsedByElementsVisitor;
import org.teiid.query.util.CommandContext;
@@ -115,8 +115,8 @@
}
}
- List<SingleElementSymbol> leftExpressions = (List<SingleElementSymbol>) joinNode.getProperty(NodeConstants.Info.LEFT_EXPRESSIONS);
- List<SingleElementSymbol> rightExpressions = (List<SingleElementSymbol>) joinNode.getProperty(NodeConstants.Info.RIGHT_EXPRESSIONS);
+ List<Expression> leftExpressions = (List<Expression>) joinNode.getProperty(NodeConstants.Info.LEFT_EXPRESSIONS);
+ List<Expression> rightExpressions = (List<Expression>) joinNode.getProperty(NodeConstants.Info.RIGHT_EXPRESSIONS);
int origExpressionCount = leftExpressions.size();
//check index information on each side
@@ -136,9 +136,9 @@
List<Object> keyCols = metadata.getElementIDsInKey(key);
int[] reorder = new int[keyCols.size()];
List<Integer> toCriteria = new ArrayList<Integer>(rightExpressions.size() - keyCols.size());
- List<SingleElementSymbol> keyExpressions = right?rightExpressions:leftExpressions;
+ List<Expression> keyExpressions = right?rightExpressions:leftExpressions;
for (int j = 0; j < keyExpressions.size(); j++) {
- SingleElementSymbol ses = keyExpressions.get(j);
+ Expression ses = keyExpressions.get(j);
if (!(ses instanceof ElementSymbol)) {
continue;
}
@@ -156,8 +156,8 @@
}
List<Criteria> joinCriteria = (List<Criteria>) joinNode.getProperty(Info.NON_EQUI_JOIN_CRITERIA);
for (int index : toCriteria) {
- SingleElementSymbol lses = leftExpressions.get(index);
- SingleElementSymbol rses = rightExpressions.get(index);
+ Expression lses = leftExpressions.get(index);
+ Expression rses = rightExpressions.get(index);
CompareCriteria cc = new CompareCriteria(lses, CompareCriteria.EQ, rses);
if (joinCriteria == null || joinCriteria.isEmpty()) {
joinCriteria = new ArrayList<Criteria>();
@@ -178,7 +178,7 @@
&& joinNode.getProperty(NodeConstants.Info.JOIN_TYPE) == JoinType.JOIN_INNER
&& joinNode.getProperty(NodeConstants.Info.DEPENDENT_VALUE_SOURCE) != null
&& !joinNode.hasCollectionProperty(Info.NON_EQUI_JOIN_CRITERIA)) {
- Collection<SingleElementSymbol> output = (Collection<SingleElementSymbol>) joinNode.getProperty(NodeConstants.Info.OUTPUT_COLS);
+ Collection<Expression> output = (Collection<Expression>) joinNode.getProperty(NodeConstants.Info.OUTPUT_COLS);
Collection<GroupSymbol> groups = GroupsUsedByElementsVisitor.getGroups(output);
if (Collections.disjoint(groups, FrameUtil.findJoinSourceNode(joinNode.getFirstChild()).getGroups())) {
pushRight = false;
@@ -205,14 +205,14 @@
* @throws TeiidComponentException
* @throws QueryMetadataException
*/
- static boolean insertSort(PlanNode childNode, List<SingleElementSymbol> expressions, PlanNode jnode, QueryMetadataInterface metadata, CapabilitiesFinder capFinder,
+ static boolean insertSort(PlanNode childNode, List<Expression> expressions, PlanNode jnode, QueryMetadataInterface metadata, CapabilitiesFinder capFinder,
boolean attemptPush) throws QueryMetadataException, TeiidComponentException {
- Set<SingleElementSymbol> orderSymbols = new LinkedHashSet<SingleElementSymbol>(expressions);
+ Set<Expression> orderSymbols = new LinkedHashSet<Expression>(expressions);
PlanNode sourceNode = FrameUtil.findJoinSourceNode(childNode);
PlanNode joinNode = childNode.getParent();
- Set<SingleElementSymbol> outputSymbols = new LinkedHashSet<SingleElementSymbol>((List<SingleElementSymbol>)childNode.getProperty(NodeConstants.Info.OUTPUT_COLS));
+ Set<Expression> outputSymbols = new LinkedHashSet<Expression>((List<Expression>)childNode.getProperty(NodeConstants.Info.OUTPUT_COLS));
int oldSize = outputSymbols.size();
@@ -220,7 +220,7 @@
boolean needsCorrection = outputSymbols.size() > oldSize;
- PlanNode sortNode = createSortNode(new ArrayList<SingleElementSymbol>(orderSymbols), outputSymbols);
+ PlanNode sortNode = createSortNode(new ArrayList<Expression>(orderSymbols), outputSymbols);
boolean distinct = false;
if (sourceNode.getFirstChild() != null && sourceNode.getType() == NodeConstants.Types.SOURCE && outputSymbols.size() == expressions.size() && outputSymbols.containsAll(expressions)) {
@@ -270,7 +270,7 @@
return false;
}
- private static PlanNode createSortNode(List<SingleElementSymbol> orderSymbols,
+ private static PlanNode createSortNode(List<Expression> orderSymbols,
Collection outputElements) {
PlanNode sortNode = NodeFactory.getNewNode(NodeConstants.Types.SORT);
sortNode.setProperty(NodeConstants.Info.SORT_ORDER, new OrderBy(orderSymbols));
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeCriteria.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeCriteria.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeCriteria.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -54,18 +54,7 @@
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.rewriter.QueryRewriter;
import org.teiid.query.sql.LanguageObject;
-import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.CompoundCriteria;
-import org.teiid.query.sql.lang.Criteria;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.FromClause;
-import org.teiid.query.sql.lang.GroupBy;
-import org.teiid.query.sql.lang.JoinType;
-import org.teiid.query.sql.lang.OrderBy;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.navigator.DeepPostOrderNavigator;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.Constant;
@@ -75,7 +64,6 @@
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.symbol.AggregateSymbol.Type;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
@@ -296,7 +284,7 @@
try {
//clone the symbols as they may change during planning
- List<SingleElementSymbol> projectedSymbols = LanguageObject.Util.deepClone(plannedResult.query.getProjectedSymbols(), SingleElementSymbol.class);
+ List<Expression> projectedSymbols = LanguageObject.Util.deepClone(plannedResult.query.getProjectedSymbols(), Expression.class);
//NOTE: we could tap into the relationalplanner at a lower level to get this in a plan node form,
//the major benefit would be to reuse the dependent join planning logic if possible.
if (analysisRecord != null && analysisRecord.recordDebug()) {
@@ -345,7 +333,7 @@
semiJoin.addLastChild(node);
PlanNode result = current.getParent();
NodeEditor.removeChildNode(result, current);
- RuleImplementJoinStrategy.insertSort(semiJoin.getFirstChild(), (List<SingleElementSymbol>) plannedResult.leftExpressions, semiJoin, metadata, capFinder, true);
+ RuleImplementJoinStrategy.insertSort(semiJoin.getFirstChild(), (List<Expression>) plannedResult.leftExpressions, semiJoin, metadata, capFinder, true);
return result;
} catch (QueryPlannerException e) {
//can't be done - probably access patterns - what about dependent
@@ -535,21 +523,21 @@
}
}
HashSet<Expression> projectedSymbols = new HashSet<Expression>();
- for (SingleElementSymbol ses : plannedResult.query.getProjectedSymbols()) {
+ for (Expression ses : plannedResult.query.getProjectedSymbols()) {
projectedSymbols.add(SymbolMap.getExpression(ses));
}
for (Expression ses : requiredExpressions) {
if (projectedSymbols.add(ses)) {
- if (ses instanceof SingleElementSymbol) {
- plannedResult.query.getSelect().addSymbol((SingleElementSymbol)ses);
+ if (ses instanceof Expression) {
+ plannedResult.query.getSelect().addSymbol((Expression)ses);
} else {
plannedResult.query.getSelect().addSymbol(new ExpressionSymbol("expr", (Expression) ses.clone())); //$NON-NLS-1$
}
}
}
- for (SingleElementSymbol ses : (List<SingleElementSymbol>)plannedResult.rightExpressions) {
+ for (Expression ses : (List<Expression>)plannedResult.rightExpressions) {
if (projectedSymbols.add(SymbolMap.getExpression(ses))) {
- plannedResult.query.getSelect().addSymbol((SingleElementSymbol)ses.clone());
+ plannedResult.query.getSelect().addSymbol((Expression)ses.clone());
}
}
return true;
@@ -585,7 +573,7 @@
RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, plannedResult.leftExpressions, plannedResult.rightExpressions, crits, plannedResult.nonEquiJoinCriteria);
}
- public static boolean isDistinct(Query query, List<SingleElementSymbol> expressions, QueryMetadataInterface metadata)
+ public static boolean isDistinct(Query query, List<Expression> expressions, QueryMetadataInterface metadata)
throws QueryMetadataException, TeiidComponentException {
boolean distinct = false;
if (query.getGroupBy() != null) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -48,7 +48,6 @@
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.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.FunctionCollectorVisitor;
@@ -227,12 +226,12 @@
return root;
}
- List<? extends SingleElementSymbol> requiredElements = RuleAssignOutputElements.determineSourceOutput(frame, new ArrayList<SingleElementSymbol>(), metadata, null);
- List<SingleElementSymbol> selectSymbols = (List<SingleElementSymbol>)parentProject.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<? extends Expression> requiredElements = RuleAssignOutputElements.determineSourceOutput(frame, new ArrayList<Expression>(), metadata, null);
+ List<Expression> selectSymbols = (List<Expression>)parentProject.getProperty(NodeConstants.Info.PROJECT_COLS);
// check that it only performs simple projection and that all required symbols are projected
LinkedHashSet<ElementSymbol> symbols = new LinkedHashSet<ElementSymbol>(); //ensuring there are no duplicates prevents problems with subqueries
- for (SingleElementSymbol symbol : selectSymbols) {
+ for (Expression symbol : selectSymbols) {
Expression expr = SymbolMap.getExpression(symbol);
if (!(expr instanceof ElementSymbol)) {
return root;
@@ -247,7 +246,7 @@
}
// re-order the lower projects
- RuleAssignOutputElements.filterVirtualElements(frame, new ArrayList<SingleElementSymbol>(symbols), metadata);
+ RuleAssignOutputElements.filterVirtualElements(frame, new ArrayList<Expression>(symbols), metadata);
// remove phantom select nodes
nodeToCheck = parentProject.getFirstChild();
@@ -302,10 +301,10 @@
}
private static void correctOrderBy(PlanNode frame,
- List<SingleElementSymbol> selectSymbols, PlanNode startNode) {
+ List<Expression> selectSymbols, PlanNode startNode) {
PlanNode sort = NodeEditor.findParent(startNode, NodeConstants.Types.SORT, NodeConstants.Types.SOURCE | NodeConstants.Types.SET_OP);
if (sort != null) { //special handling is needed since we are retaining the child aliases
- List<SingleElementSymbol> childProject = (List<SingleElementSymbol>)NodeEditor.findNodePreOrder(frame, NodeConstants.Types.PROJECT).getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> childProject = (List<Expression>)NodeEditor.findNodePreOrder(frame, NodeConstants.Types.PROJECT).getProperty(NodeConstants.Info.PROJECT_COLS);
OrderBy elements = (OrderBy)sort.getProperty(NodeConstants.Info.SORT_ORDER);
for (OrderByItem item : elements.getOrderByItems()) {
item.setSymbol(childProject.get(selectSymbols.indexOf(item.getSymbol())));
@@ -326,7 +325,7 @@
return false;
}
- List<SingleElementSymbol> selectSymbols = (List<SingleElementSymbol>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> selectSymbols = (List<Expression>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
HashSet<GroupSymbol> groups = new HashSet<GroupSymbol>();
for (PlanNode sourceNode : NodeEditor.findAllNodes(projectNode, NodeConstants.Types.SOURCE, NodeConstants.Types.SOURCE)) {
@@ -352,7 +351,7 @@
}
for (int i = 0; i < selectSymbols.size(); i++) {
- SingleElementSymbol symbol = selectSymbols.get(i);
+ Expression symbol = selectSymbols.get(i);
Collection scalarSubqueries = ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(symbol);
if (!scalarSubqueries.isEmpty()) {
return false;
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -47,7 +47,6 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.util.CommandContext;
@@ -90,13 +89,13 @@
root = checkForProjectOptimization(node, root, metadata, capFinder, record);
}
OrderBy orderBy = (OrderBy)node.getProperty(NodeConstants.Info.SORT_ORDER);
- List<SingleElementSymbol> orderColumns = orderBy.getSortKeys();
+ List<Expression> orderColumns = orderBy.getSortKeys();
List<Expression> sortExpressions = new ArrayList<Expression>(orderColumns.size());
PlanNode possibleSort = NodeEditor.findNodePreOrder(node, NodeConstants.Types.GROUP, NodeConstants.Types.SOURCE | NodeConstants.Types.ACCESS);
if (possibleSort != null) {
boolean otherExpression = false;
SymbolMap groupMap = (SymbolMap)possibleSort.getProperty(Info.SYMBOL_MAP);
- for (SingleElementSymbol singleElementSymbol : orderColumns) {
+ for (Expression singleElementSymbol : orderColumns) {
Expression ex = SymbolMap.getExpression(singleElementSymbol);
if (ex instanceof ElementSymbol) {
sortExpressions.add(groupMap.getMappedExpression((ElementSymbol) ex));
@@ -154,7 +153,7 @@
node.setProperty(NodeConstants.Info.IS_DUP_REMOVAL, true);
if (cardinalityDependent) {
PlanNode source = NodeEditor.findNodePreOrder(node, NodeConstants.Types.SOURCE);
- List<SingleElementSymbol> sourceOutput = (List<SingleElementSymbol>)source.getProperty(Info.OUTPUT_COLS);
+ List<Expression> sourceOutput = (List<Expression>)source.getProperty(Info.OUTPUT_COLS);
PlanNode child = node.getFirstChild();
while (child != source) {
child.setProperty(Info.OUTPUT_COLS, sourceOutput);
@@ -231,14 +230,14 @@
} else {
return root;
}
- List<SingleElementSymbol> childOutputCols = (List<SingleElementSymbol>) projectNode.getFirstChild().getProperty(Info.OUTPUT_COLS);
+ List<Expression> childOutputCols = (List<Expression>) projectNode.getFirstChild().getProperty(Info.OUTPUT_COLS);
OrderBy orderBy = (OrderBy) node.getProperty(Info.SORT_ORDER);
- List<SingleElementSymbol> orderByKeys = orderBy.getSortKeys();
- for (SingleElementSymbol ss : orderByKeys) {
+ List<Expression> orderByKeys = orderBy.getSortKeys();
+ for (Expression ss : orderByKeys) {
if(ss instanceof AliasSymbol) {
ss = ((AliasSymbol)ss).getSymbol();
}
- if (ss instanceof ExpressionSymbol && !(ss instanceof AggregateSymbol)) {
+ if (ss instanceof ExpressionSymbol) {
return root; //TODO: insert a new project node to handle this case
}
if (!childOutputCols.contains(ss)) {
@@ -261,7 +260,7 @@
projectNode.addFirstChild(node);
}
}
- List<SingleElementSymbol> orderByOutputSymbols = (List<SingleElementSymbol>) node.getProperty(Info.OUTPUT_COLS);
+ List<Expression> orderByOutputSymbols = (List<Expression>) node.getProperty(Info.OUTPUT_COLS);
boolean unrelated = false;
if (node.hasBooleanProperty(Info.UNRELATED_SORT)) {
node.setProperty(Info.UNRELATED_SORT, false);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,19 +22,7 @@
package org.teiid.query.optimizer.relational.rules;
-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.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryPlannerException;
@@ -69,16 +57,7 @@
import org.teiid.query.sql.lang.OrderBy;
import org.teiid.query.sql.lang.Select;
import org.teiid.query.sql.lang.SetQuery.Operation;
-import org.teiid.query.sql.symbol.AggregateSymbol;
-import org.teiid.query.sql.symbol.AliasSymbol;
-import org.teiid.query.sql.symbol.Constant;
-import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.Function;
-import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SearchedCaseExpression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.*;
import org.teiid.query.sql.symbol.AggregateSymbol.Type;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
@@ -219,7 +198,7 @@
return;
}
- List<SingleElementSymbol> copy = new ArrayList<SingleElementSymbol>(aggregates);
+ List<AggregateSymbol> copy = new ArrayList<AggregateSymbol>(aggregates);
aggregates.clear();
Map<AggregateSymbol, Expression> aggMap = buildAggregateMap(copy, metadata, aggregates);
@@ -247,7 +226,7 @@
updateParentAggs(groupNode, context, aggMap, metadata);
- List<SingleElementSymbol> symbols = (List<SingleElementSymbol>) NodeEditor.findNodePreOrder(unionSourceParent, NodeConstants.Types.PROJECT).getProperty(Info.PROJECT_COLS);
+ List<Expression> symbols = (List<Expression>) NodeEditor.findNodePreOrder(unionSourceParent, NodeConstants.Types.PROJECT).getProperty(Info.PROJECT_COLS);
GroupSymbol modifiedGroup = group.clone();
SymbolMap symbolMap = createSymbolMap(modifiedGroup, symbols, unionSourceParent, metadata);
unionSourceParent.setProperty(Info.SYMBOL_MAP, symbolMap);
@@ -290,11 +269,11 @@
SymbolMap oldGroupingMap = (SymbolMap) groupNode.getProperty(Info.SYMBOL_MAP);
GroupSymbol oldGroup = oldGroupingMap.asMap().keySet().iterator().next().getGroupSymbol();
SymbolMap groupingMap = RelationalPlanner.buildGroupingNode(compositeAggs, (List<? extends Expression>) groupNode.getProperty(Info.GROUP_COLS), groupNode, context, idGenerator);
- ArrayList<SingleElementSymbol> projectCols = new ArrayList<SingleElementSymbol>(oldGroupingMap.asMap().size());
+ ArrayList<Expression> projectCols = new ArrayList<Expression>(oldGroupingMap.asMap().size());
SymbolMap correctedMap = new SymbolMap();
Map<Expression, ElementSymbol> inverseMap = groupingMap.inserseMapping();
for (Map.Entry<ElementSymbol, Expression> entry : oldGroupingMap.asMap().entrySet()) {
- SingleElementSymbol ses = null;
+ Expression ses = null;
if (entry.getValue() instanceof AggregateSymbol) {
Expression ex = aggMap.get(entry.getValue());
if (ex instanceof AggregateSymbol) {
@@ -306,8 +285,8 @@
} else {
ses = inverseMap.get(entry.getValue());
}
- ses = (SingleElementSymbol) ses.clone();
- projectCols.add(new AliasSymbol(entry.getKey().getShortCanonicalName(), ses));
+ ses = (Expression) ses.clone();
+ projectCols.add(new AliasSymbol(Symbol.getShortName(entry.getKey()), ses));
correctedMap.addMapping(entry.getKey(), SymbolMap.getExpression(ses));
}
PlanNode projectNode = groupNode.getParent();
@@ -350,7 +329,7 @@
planNode, false);
first = false;
}
- List<SingleElementSymbol> symbols = (List<SingleElementSymbol>) NodeEditor.findNodePreOrder(sourceNode, NodeConstants.Types.PROJECT).getProperty(Info.PROJECT_COLS);
+ List<Expression> symbols = (List<Expression>) NodeEditor.findNodePreOrder(sourceNode, NodeConstants.Types.PROJECT).getProperty(Info.PROJECT_COLS);
GroupSymbol modifiedGroup = group.clone();
SymbolMap symbolMap = createSymbolMap(modifiedGroup, symbols, sourceNode, metadata);
sourceNode.setProperty(Info.SYMBOL_MAP, symbolMap);
@@ -383,18 +362,18 @@
//branches other than the first need to have their projected column names updated
if (!first) {
PlanNode sortNode = NodeEditor.findNodePreOrder(planNode, NodeConstants.Types.SORT, NodeConstants.Types.SOURCE);
- List<SingleElementSymbol> sortOrder = null;
+ List<Expression> sortOrder = null;
OrderBy orderBy = null;
if (sortNode != null) {
orderBy = (OrderBy)sortNode.getProperty(Info.SORT_ORDER);
sortOrder = orderBy.getSortKeys();
}
- List<SingleElementSymbol> projectCols = FrameUtil.findTopCols(planNode);
+ List<Expression> projectCols = FrameUtil.findTopCols(planNode);
List<ElementSymbol> virtualElements = parentMap.getKeys();
for (int i = 0; i < virtualElements.size(); i++) {
ElementSymbol virtualElem = virtualElements.get(i);
- SingleElementSymbol projectedSymbol = projectCols.get(i);
- if (!projectedSymbol.getShortCanonicalName().equals(virtualElem.getShortCanonicalName())) {
+ Expression projectedSymbol = projectCols.get(i);
+ if (!Symbol.getShortName(projectedSymbol).equals(Symbol.getShortName(virtualElem))) {
if (sortOrder != null) {
int sortIndex = sortOrder.indexOf(projectedSymbol);
if (sortIndex > -1) {
@@ -456,12 +435,12 @@
}
}
- private void updateSymbolName(List<SingleElementSymbol> projectCols, int i,
- ElementSymbol virtualElem, SingleElementSymbol projectedSymbol) {
+ private void updateSymbolName(List<Expression> projectCols, int i,
+ ElementSymbol virtualElem, Expression projectedSymbol) {
if (projectedSymbol instanceof AliasSymbol) {
- ((AliasSymbol)projectedSymbol).setShortName(virtualElem.getShortCanonicalName());
+ ((AliasSymbol)projectedSymbol).setShortName(Symbol.getShortName(virtualElem));
} else {
- projectCols.set(i, new AliasSymbol(virtualElem.getShortCanonicalName(), projectedSymbol));
+ projectCols.set(i, new AliasSymbol(Symbol.getShortName(virtualElem), projectedSymbol));
}
}
@@ -524,7 +503,7 @@
}
static SymbolMap createSymbolMap(GroupSymbol group,
- List<? extends SingleElementSymbol> virtualElements,
+ List<? extends Expression> virtualElements,
PlanNode child, QueryMetadataInterface metadata)
throws TeiidComponentException, QueryMetadataException {
TempMetadataStore store = new TempMetadataStore();
@@ -555,8 +534,8 @@
while (currentNode != null) {
if (currentNode.getType() == NodeConstants.Types.PROJECT) {
- List<SingleElementSymbol> projectedSymbols = (List<SingleElementSymbol>)currentNode.getProperty(NodeConstants.Info.PROJECT_COLS);
- for (SingleElementSymbol symbol : projectedSymbols) {
+ List<Expression> projectedSymbols = (List<Expression>)currentNode.getProperty(NodeConstants.Info.PROJECT_COLS);
+ for (Expression symbol : projectedSymbols) {
mapAggregates(ElementCollectorVisitor.getAggregates(symbol, true), symbolMap, aggregates);
}
break;
@@ -764,11 +743,11 @@
if (planNode == parentJoin.getFirstChild()) {
if (parentJoin.hasCollectionProperty(NodeConstants.Info.LEFT_EXPRESSIONS)) {
- filterJoinColumns(stagedGroupingSymbols, groups, (List<SingleElementSymbol>)parentJoin.getProperty(NodeConstants.Info.LEFT_EXPRESSIONS));
+ filterJoinColumns(stagedGroupingSymbols, groups, (List<Expression>)parentJoin.getProperty(NodeConstants.Info.LEFT_EXPRESSIONS));
}
} else {
if (parentJoin.hasCollectionProperty(NodeConstants.Info.RIGHT_EXPRESSIONS)) {
- filterJoinColumns(stagedGroupingSymbols, groups, (List<SingleElementSymbol>)parentJoin.getProperty(NodeConstants.Info.RIGHT_EXPRESSIONS));
+ filterJoinColumns(stagedGroupingSymbols, groups, (List<Expression>)parentJoin.getProperty(NodeConstants.Info.RIGHT_EXPRESSIONS));
}
}
@@ -850,12 +829,11 @@
return result;
}
- private static Map<AggregateSymbol, Expression> buildAggregateMap(Collection<? extends SingleElementSymbol> aggregateExpressions,
+ private static Map<AggregateSymbol, Expression> buildAggregateMap(Collection<? extends AggregateSymbol> aggregateExpressions,
QueryMetadataInterface metadata, Set<AggregateSymbol> nestedAggregates) throws QueryResolverException,
TeiidComponentException {
Map<AggregateSymbol, Expression> aggMap = new LinkedHashMap<AggregateSymbol, Expression>();
- for (SingleElementSymbol symbol : aggregateExpressions) {
- AggregateSymbol partitionAgg = (AggregateSymbol)symbol;
+ for (AggregateSymbol partitionAgg : aggregateExpressions) {
Expression newExpression = null;
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -54,7 +54,6 @@
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.util.CommandContext;
import org.teiid.translator.ExecutionFactory.SupportedJoinCriteria;
@@ -117,7 +116,7 @@
List projectCols = (List) parentNode.getProperty(NodeConstants.Info.PROJECT_COLS);
for (int i = 0; i < projectCols.size(); i++) {
- SingleElementSymbol symbol = (SingleElementSymbol)projectCols.get(i);
+ Expression symbol = (Expression)projectCols.get(i);
if(! canPushSymbol(symbol, true, modelID, metadata, capFinder, record)) {
return null;
}
@@ -301,7 +300,7 @@
static boolean canRaiseOverGroupBy(PlanNode groupNode,
PlanNode accessNode,
- Collection<? extends SingleElementSymbol> aggregates,
+ Collection<? extends AggregateSymbol> aggregates,
QueryMetadataInterface metadata,
CapabilitiesFinder capFinder, AnalysisRecord record) throws QueryMetadataException,
TeiidComponentException {
@@ -322,7 +321,7 @@
}
}
if (aggregates != null) {
- for (SingleElementSymbol aggregateSymbol : aggregates) {
+ for (AggregateSymbol aggregateSymbol : aggregates) {
if(! CriteriaCapabilityValidatorVisitor.canPushLanguageObject(aggregateSymbol, modelID, metadata, capFinder, record)) {
return false;
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseNull.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseNull.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseNull.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -46,9 +46,8 @@
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.util.CommandContext;
@@ -147,17 +146,17 @@
return raiseNullNode(rootNode, parentNode, nullNode, nodes);
}
- List<SingleElementSymbol> newProjectSymbols = (List<SingleElementSymbol>)firstProject.getProperty(NodeConstants.Info.PROJECT_COLS);
- List<SingleElementSymbol> oldProjectSymbols = (List<SingleElementSymbol>)nullNode.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> newProjectSymbols = (List<Expression>)firstProject.getProperty(NodeConstants.Info.PROJECT_COLS);
+ List<Expression> oldProjectSymbols = (List<Expression>)nullNode.getProperty(NodeConstants.Info.PROJECT_COLS);
for (int i = 0; i < newProjectSymbols.size(); i++) {
- SingleElementSymbol newSes = newProjectSymbols.get(i);
- SingleElementSymbol oldSes = oldProjectSymbols.get(i);
- if (newSes instanceof ExpressionSymbol || !newSes.getShortCanonicalName().equals(oldSes.getShortCanonicalName())) {
+ Expression newSes = newProjectSymbols.get(i);
+ Expression oldSes = oldProjectSymbols.get(i);
+ if (!(newSes instanceof Symbol) || !Symbol.getShortName(newSes).equals(Symbol.getShortName(oldSes))) {
if (newSes instanceof AliasSymbol) {
newSes = ((AliasSymbol)newSes).getSymbol();
}
- newProjectSymbols.set(i, new AliasSymbol(oldSes.getShortName(), newSes));
+ newProjectSymbols.set(i, new AliasSymbol(Symbol.getShortName(oldSes), newSes));
}
}
@@ -166,7 +165,7 @@
if (sort != null) { //correct the sort to the new columns as well
OrderBy sortOrder = (OrderBy)sort.getProperty(NodeConstants.Info.SORT_ORDER);
for (OrderByItem item : sortOrder.getOrderByItems()) {
- SingleElementSymbol sortElement = item.getSymbol();
+ Expression sortElement = item.getSymbol();
sortElement = newProjectSymbols.get(oldProjectSymbols.indexOf(sortElement));
item.setSymbol(sortElement);
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/CriteriaPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/CriteriaPlanner.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/CriteriaPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -44,6 +44,7 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Function;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.GroupsUsedByElementsVisitor;
@@ -131,11 +132,11 @@
Collection<ElementSymbol> elements = ElementCollectorVisitor.getElements(conjunct, true);
Set<MappingSourceNode> resultSets = new HashSet<MappingSourceNode>();
- String contextFullName = context.getFullyQualifiedName().toUpperCase();
+ String contextFullName = context.getFullyQualifiedName();
//validate that each element's group is under the current context or is in the direct parentage
for (ElementSymbol elementSymbol : elements) {
- String elementFullName = elementSymbol.getCanonicalName();
+ String elementFullName = elementSymbol.getName();
MappingNode node = MappingNode.findNode(mappingDoc, elementFullName);
@@ -144,17 +145,17 @@
throw new QueryPlannerException(QueryPlugin.Util.getString("CriteriaPlanner.invalid_element", elementSymbol)); //$NON-NLS-1$
}
- String elementRsFullName = elementRsNode.getFullyQualifiedName().toUpperCase();
+ String elementRsFullName = elementRsNode.getFullyQualifiedName();
//check for a match at or below the context
if (contextFullName.equals(elementRsFullName) ||
- elementRsFullName.startsWith(contextFullName + ElementSymbol.SEPARATOR)) {
+ elementRsFullName.startsWith(contextFullName + Symbol.SEPARATOR)) {
resultSets.add(elementRsNode);
continue;
}
//check for match above the context
- if (contextFullName.startsWith(elementRsFullName + ElementSymbol.SEPARATOR)) {
+ if (contextFullName.startsWith(elementRsFullName + Symbol.SEPARATOR)) {
continue;
}
@@ -256,7 +257,7 @@
String fullyQualifiedNodeName = planEnv.getGlobalMetadata().getFullName(((ElementSymbol)rowLimitFunction.getArg(0)).getMetadataID());
- MappingNode node = MappingNode.findNode(planEnv.mappingDoc, fullyQualifiedNodeName.toUpperCase());
+ MappingNode node = MappingNode.findNode(planEnv.mappingDoc, fullyQualifiedNodeName);
MappingSourceNode sourceNode = node.getSourceNode();
if (sourceNode == null) {
String msg = QueryPlugin.Util.getString("XMLPlanner.The_rowlimit_parameter_{0}_is_not_in_the_scope_of_any_mapping_class", fullyQualifiedNodeName); //$NON-NLS-1$
@@ -333,7 +334,7 @@
ElementSymbol targetContext = (ElementSymbol)contextFunction.getArg(0);
- MappingNode contextNode = MappingNode.findNode(planEnv.mappingDoc, targetContext.getCanonicalName());
+ MappingNode contextNode = MappingNode.findNode(planEnv.mappingDoc, targetContext.getName());
if (contextNode == null){
throw new QueryPlannerException("ERR.015.004.0037", QueryPlugin.Util.getString("ERR.015.004.0037", targetContext)); //$NON-NLS-1$ //$NON-NLS-2$
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/MarkExcludeVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/MarkExcludeVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/MarkExcludeVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -26,17 +26,7 @@
import java.util.Iterator;
import java.util.List;
-import org.teiid.query.mapping.xml.MappingAllNode;
-import org.teiid.query.mapping.xml.MappingAttribute;
-import org.teiid.query.mapping.xml.MappingBaseNode;
-import org.teiid.query.mapping.xml.MappingChoiceNode;
-import org.teiid.query.mapping.xml.MappingDocument;
-import org.teiid.query.mapping.xml.MappingElement;
-import org.teiid.query.mapping.xml.MappingRecursiveElement;
-import org.teiid.query.mapping.xml.MappingSequenceNode;
-import org.teiid.query.mapping.xml.MappingSourceNode;
-import org.teiid.query.mapping.xml.MappingVisitor;
-import org.teiid.query.mapping.xml.Navigator;
+import org.teiid.query.mapping.xml.*;
/**
@@ -46,8 +36,8 @@
public class MarkExcludeVisitor extends MappingVisitor{
HashSet<String> keepNodes;
- public MarkExcludeVisitor(HashSet<String> keppNodes) {
- this.keepNodes = keppNodes;
+ public MarkExcludeVisitor(HashSet<String> keepNodes) {
+ this.keepNodes = keepNodes;
}
// User non-selectable node; just exclude
@@ -74,7 +64,7 @@
}
public void visit(MappingAttribute attribute) {
- String name = attribute.getCanonicalName();
+ String name = attribute.getFullyQualifiedName();
if (keepNodes.contains(name)) {
// we need to keep this; if not already excluded
if (!attribute.isExcluded()) {
@@ -90,7 +80,7 @@
}
public void visit(MappingElement element) {
- String name = element.getCanonicalName();
+ String name = element.getFullyQualifiedName();
if (keepNodes.contains(name)) {
// we need to keep this; if not already excluded
if (!element.isExcluded()) {
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -56,6 +56,7 @@
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.MultipleElementSymbol;
import org.teiid.query.sql.symbol.Reference;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.ReferenceCollectorVisitor;
import org.teiid.query.util.CommandContext;
@@ -208,7 +209,7 @@
for (Iterator i = projectedElements.iterator(); i.hasNext();) {
ElementSymbol element = (ElementSymbol)i.next();
- symbolMap.put(element, new ElementSymbol(newGroup + ElementSymbol.SEPARATOR + element.getShortName()));
+ symbolMap.put(element, new ElementSymbol(newGroup + Symbol.SEPARATOR + element.getShortName()));
}
return symbolMap;
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/SourceNodePlannerVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/SourceNodePlannerVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/SourceNodePlannerVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -51,8 +51,9 @@
import org.teiid.query.sql.lang.UnaryFromClause;
import org.teiid.query.sql.symbol.AliasSymbol;
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.symbol.Symbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.ExpressionMappingVisitor;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -112,7 +113,7 @@
baseQuery.getSelect().clearSymbols();
for (Iterator<ElementSymbol> i = ResolverUtil.resolveElementsInGroup(groupSymbol, planEnv.getGlobalMetadata()).iterator(); i.hasNext();) {
ElementSymbol ses = i.next();
- baseQuery.getSelect().addSymbol(new ElementSymbol(newGroup + SingleElementSymbol.SEPARATOR + ses.getShortName()));
+ baseQuery.getSelect().addSymbol(new ElementSymbol(newGroup + Symbol.SEPARATOR + ses.getShortName()));
}
rsInfo.setCommand(baseQuery);
@@ -193,18 +194,18 @@
private boolean areBindingsOnlyToNode(QueryNode modifiedNode, MappingSourceNode sourceNode)
throws TeiidComponentException {
- List<SingleElementSymbol> bindings = QueryResolver.parseBindings(modifiedNode);
+ List<Expression> bindings = QueryResolver.parseBindings(modifiedNode);
- String nodeStr = (sourceNode.getActualResultSetName() + ElementSymbol.SEPARATOR).toUpperCase();
+ String nodeStr = sourceNode.getActualResultSetName() + Symbol.SEPARATOR;
- for (Iterator<SingleElementSymbol> i = bindings.iterator(); i.hasNext();) {
- SingleElementSymbol ses = i.next();
+ for (Iterator<Expression> i = bindings.iterator(); i.hasNext();) {
+ Expression ses = i.next();
if (ses instanceof AliasSymbol) {
ses = ((AliasSymbol)ses).getSymbol();
}
ElementSymbol binding = (ElementSymbol)ses;
- if (!binding.getCanonicalName().startsWith(nodeStr)) {
+ if (!binding.getName().startsWith(nodeStr)) {
return false;
}
}
@@ -266,9 +267,9 @@
QueryNode modifiedNode) throws TeiidComponentException {
if (oldQueryNode.getBindings() != null) {
List<String> bindings = new ArrayList<String>();
- for (Iterator<SingleElementSymbol> i = QueryResolver.parseBindings(oldQueryNode).iterator(); i.hasNext();) {
- SingleElementSymbol ses = i.next();
- String name = ses.getName();
+ for (Iterator<Expression> i = QueryResolver.parseBindings(oldQueryNode).iterator(); i.hasNext();) {
+ Expression ses = i.next();
+ String name = Symbol.getName(ses);
boolean useName = false;
if (ses instanceof AliasSymbol) {
ses = ((AliasSymbol)ses).getSymbol();
@@ -322,7 +323,7 @@
Collection<ElementSymbol> elementsInCriteria = ElementCollectorVisitor.getElements(criteria, true);
Map<ElementSymbol, ElementSymbol> mappedElements = new HashMap<ElementSymbol, ElementSymbol>();
- List<SingleElementSymbol> projectedSymbols = transformationQuery.getProjectedSymbols();
+ List<Expression> projectedSymbols = transformationQuery.getProjectedSymbols();
boolean addedProjectedSymbol = false;
@@ -335,12 +336,12 @@
}
if (projectedSymbols.contains(symbol)) {
- mappedElements.put(symbol, new ElementSymbol(groupName + ElementSymbol.SEPARATOR + symbol.getShortName()));
+ mappedElements.put(symbol, new ElementSymbol(groupName + Symbol.SEPARATOR + symbol.getShortName()));
continue;
}
AliasSymbol alias = getMachingAlias(projectedSymbols, symbol);
if (alias != null) {
- mappedElements.put(symbol, new ElementSymbol(groupName + ElementSymbol.SEPARATOR + alias.getShortName()));
+ mappedElements.put(symbol, new ElementSymbol(groupName + Symbol.SEPARATOR + alias.getShortName()));
continue;
}
// this means that the criteria symbol, is not projected, so add the element symbol
@@ -356,7 +357,7 @@
// also add to the projected elements on the temp group.
metadata.getMetadataStore().addElementSymbolToTempGroup(newGroupSymbol.getName(), selectSymbol);
- ElementSymbol upperSymbol = new ElementSymbol(groupName + ElementSymbol.SEPARATOR + selectSymbol.getShortName());
+ ElementSymbol upperSymbol = new ElementSymbol(groupName + Symbol.SEPARATOR + selectSymbol.getShortName());
mappedElements.put(symbol, upperSymbol);
//add to the symbol map. the base symbol is not to the original group, since it doesn't really project this element
@@ -376,7 +377,7 @@
String newSymbolName = elementSymbol.getShortName();
- while (symbolMap.values().contains(new ElementSymbol(newGroupName + ElementSymbol.SEPARATOR + newSymbolName))) {
+ while (symbolMap.values().contains(new ElementSymbol(newGroupName + Symbol.SEPARATOR + newSymbolName))) {
newSymbolName = elementSymbol.getShortName() + "_" + index++; //$NON-NLS-1$
}
@@ -387,8 +388,8 @@
* If the element has alias wrapping, then return the matching alias element.
* @return matched alias symbol; null otherwise.
*/
- private AliasSymbol getMachingAlias(List<SingleElementSymbol> elementsInGroup, ElementSymbol symbol) {
- for (SingleElementSymbol element : elementsInGroup) {
+ private AliasSymbol getMachingAlias(List<Expression> elementsInGroup, ElementSymbol symbol) {
+ for (Expression element : elementsInGroup) {
if (element instanceof AliasSymbol) {
AliasSymbol alias = (AliasSymbol)element;
if (alias.getSymbol().equals(symbol)) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLNodeMappingVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLNodeMappingVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLNodeMappingVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -86,7 +86,7 @@
if (!xml) {
return symbol;
}
- String path = metadata.getFullName(metadataId).toUpperCase();
+ String path = metadata.getFullName(metadataId);
// Find mapping node for specified path
MappingNode node = MappingNode.findNode(rootNode, path);
@@ -134,7 +134,7 @@
try {
PreOrPostOrderNavigator.doVisit(object, mappingVisitor, PreOrPostOrderNavigator.POST_ORDER, deep);
} catch (TeiidRuntimeException e) {
- Throwable child = e.getChild();
+ Throwable child = e.getCause();
if (child instanceof TeiidComponentException) {
throw (TeiidComponentException)child;
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanToProcessVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanToProcessVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanToProcessVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -28,38 +28,8 @@
import java.util.Map;
import java.util.Stack;
-import org.teiid.query.mapping.xml.InterceptingVisitor;
-import org.teiid.query.mapping.xml.MappingAllNode;
-import org.teiid.query.mapping.xml.MappingAttribute;
-import org.teiid.query.mapping.xml.MappingBaseNode;
-import org.teiid.query.mapping.xml.MappingChoiceNode;
-import org.teiid.query.mapping.xml.MappingCommentNode;
-import org.teiid.query.mapping.xml.MappingCriteriaNode;
-import org.teiid.query.mapping.xml.MappingDocument;
-import org.teiid.query.mapping.xml.MappingElement;
-import org.teiid.query.mapping.xml.MappingInterceptor;
-import org.teiid.query.mapping.xml.MappingRecursiveElement;
-import org.teiid.query.mapping.xml.MappingSequenceNode;
-import org.teiid.query.mapping.xml.MappingSourceNode;
-import org.teiid.query.mapping.xml.ResultSetInfo;
-import org.teiid.query.processor.xml.AbortProcessingInstruction;
-import org.teiid.query.processor.xml.AddNodeInstruction;
-import org.teiid.query.processor.xml.BlockInstruction;
-import org.teiid.query.processor.xml.Condition;
-import org.teiid.query.processor.xml.CriteriaCondition;
-import org.teiid.query.processor.xml.DefaultCondition;
-import org.teiid.query.processor.xml.EndBlockInstruction;
-import org.teiid.query.processor.xml.EndDocumentInstruction;
-import org.teiid.query.processor.xml.ExecSqlInstruction;
-import org.teiid.query.processor.xml.ExecStagingTableInstruction;
-import org.teiid.query.processor.xml.IfInstruction;
-import org.teiid.query.processor.xml.InitializeDocumentInstruction;
-import org.teiid.query.processor.xml.MoveCursorInstruction;
-import org.teiid.query.processor.xml.MoveDocInstruction;
-import org.teiid.query.processor.xml.ProcessorInstruction;
-import org.teiid.query.processor.xml.Program;
-import org.teiid.query.processor.xml.RecurseProgramCondition;
-import org.teiid.query.processor.xml.WhileInstruction;
+import org.teiid.query.mapping.xml.*;
+import org.teiid.query.processor.xml.*;
@@ -379,7 +349,7 @@
// this is set by root recursive node. Note that the MappingClass on recursive
// node is same as the source on the root recursive node.
- Program recursiveProgram = (Program)context.get(element.getMappingClass().toUpperCase());
+ Program recursiveProgram = (Program)context.get(element.getMappingClass());
IfInstruction ifInst = new IfInstruction();
RecurseProgramCondition recurseCondition = buildRecurseCondition(element, recursiveProgram);
ifInst.addCondition(recurseCondition);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanner.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -54,10 +54,9 @@
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.lang.Select;
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.MultipleElementSymbol;
-import org.teiid.query.sql.symbol.SelectSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.util.CommandContext;
@@ -244,7 +243,7 @@
*/
static MappingDocument preMarkExcluded(Query xmlCommand, MappingDocument doc) {
Select select = xmlCommand.getSelect();
- SelectSymbol firstSymbol = select.getSymbol(0);
+ Expression firstSymbol = select.getSymbol(0);
// 0. mark the nodes to be excluded
if(firstSymbol instanceof MultipleElementSymbol && ((MultipleElementSymbol)firstSymbol).getGroup() == null) {
@@ -255,10 +254,10 @@
Collection<ElementSymbol> validElements = ElementCollectorVisitor.getElements(select, true);
HashSet<String> elements = new HashSet<String>(validElements.size());
for (ElementSymbol element : validElements) {
- elements.add(element.getCanonicalName());
+ elements.add(element.getName());
}
- // keep the nodes given mark the rest of the nodes to be elementated
+ // keep the nodes given mark the rest of the nodes to be eliminated
return MarkExcludeVisitor.markExcludedNodes(doc, elements);
}
@@ -281,13 +280,13 @@
return;
}
- List<SingleElementSymbol> elements = orderBy.getSortKeys();
+ List<Expression> elements = orderBy.getSortKeys();
List<Boolean> types = orderBy.getTypes();
for (int i = 0; i< elements.size(); i++) {
ElementSymbol elemSymbol = (ElementSymbol) elements.get(i);
- String nodeName = planEnv.getGlobalMetadata().getFullName(elemSymbol.getMetadataID()).toUpperCase();
+ String nodeName = planEnv.getGlobalMetadata().getFullName(elemSymbol.getMetadataID());
MappingNode elementNode = MappingNode.findNode(planEnv.mappingDoc, nodeName);
// make sure that the name in source is defined for this node, so that it can be used
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlannerEnvironment.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlannerEnvironment.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLPlannerEnvironment.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -32,13 +32,14 @@
import org.teiid.query.mapping.xml.ResultSetInfo;
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.optimizer.capabilities.CapabilitiesFinder;
import org.teiid.query.processor.xml.Program;
import org.teiid.query.processor.xml.XMLProcessorEnvironment;
import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.util.CommandContext;
@@ -97,7 +98,7 @@
* be defined here so that they are known to all for resolution. This map should be
* used with a TempMetadataStore and a TempMetadataAdapter.
*/
- private Map globalTempMetadata = new HashMap();
+ private TempMetadataStore globalTempMetadata = new TempMetadataStore();
private Map stagingTableMap = new HashMap();
@@ -118,7 +119,7 @@
TempMetadataAdapter getGlobalMetadata() {
- return new TempMetadataAdapter(metadata, new TempMetadataStore(this.globalTempMetadata), this.stagingTableMap, this.queryNodeMap);
+ return new TempMetadataAdapter(metadata, this.globalTempMetadata, this.stagingTableMap, this.queryNodeMap);
}
public ResultSetInfo getStagingTableResultsInfo(String groupName) {
@@ -143,8 +144,8 @@
return this.stagingTableMap.containsKey(groupId);
}
- public void addToGlobalMetadata(Map data) {
- this.globalTempMetadata.putAll(data);
+ public void addToGlobalMetadata(Map<String, TempMetadataID> data) {
+ this.globalTempMetadata.getData().putAll(data);
}
public void addQueryNodeToMetadata(Object metadataId, QueryNode node) {
@@ -160,7 +161,7 @@
}
public String getAliasName(final String rsName) {
- String inlineViewName = rsName.replace(ElementSymbol.SEPARATOR.charAt(0), '_');
+ String inlineViewName = rsName.replace(Symbol.SEPARATOR.charAt(0), '_');
return inlineViewName;
}
}
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLProjectionMinimizer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLProjectionMinimizer.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLProjectionMinimizer.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -50,7 +50,7 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SelectSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.ExpressionMappingVisitor;
@@ -168,7 +168,7 @@
Map reverseMap = QueryUtil.createSymbolMap(new GroupSymbol(element.getAliasResultName()),
rsInfo.getResultSetName(),
ResolverUtil.resolveElementsInGroup(QueryUtil.createResolvedGroup(element.getAliasResultName(), planEnv.getGlobalMetadata()), planEnv.getGlobalMetadata()));
- Select select = new Select(new ArrayList<SelectSymbol>(elements));
+ Select select = new Select(new ArrayList<Expression>(elements));
ExpressionMappingVisitor.mapExpressions(select, reverseMap);
rsQuery.setSelect(select);
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLQueryPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLQueryPlanner.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLQueryPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -48,6 +48,7 @@
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.optimizer.QueryOptimizer;
import org.teiid.query.optimizer.relational.rules.NewCalculateCostUtil;
import org.teiid.query.processor.ProcessorPlan;
@@ -55,21 +56,7 @@
import org.teiid.query.processor.relational.RelationalPlan;
import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.resolver.util.ResolverUtil;
-import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.Criteria;
-import org.teiid.query.sql.lang.Drop;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.FromClause;
-import org.teiid.query.sql.lang.GroupContext;
-import org.teiid.query.sql.lang.Into;
-import org.teiid.query.sql.lang.JoinPredicate;
-import org.teiid.query.sql.lang.JoinType;
-import org.teiid.query.sql.lang.Limit;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.QueryCommand;
-import org.teiid.query.sql.lang.SubqueryContainer;
-import org.teiid.query.sql.lang.SubqueryFromClause;
-import org.teiid.query.sql.lang.UnaryFromClause;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
@@ -393,7 +380,7 @@
LinkedHashSet<GroupSymbol> allGroups = new LinkedHashSet<GroupSymbol>();
allGroups.add(gs);
//TODO: this group should have been marked as xml, or could attempt this step prior to place user criteria
- if (planEnv.getGlobalMetadata().getMetadataStore().getTempGroupID(gs.getNonCorrelationName().toUpperCase()) == null) {
+ if (planEnv.getGlobalMetadata().getMetadataStore().getTempGroupID(gs.getNonCorrelationName()) == null) {
return;
}
MappingSourceNode parentMsn = findMappingSourceNode(planEnv, gs);
@@ -474,7 +461,7 @@
planStagaingQuery(false, groupName, groupName, query, planEnv);
}
/**
- * This method takes given query and adds the "into" symbol to query and resoves it
+ * This method takes given query and adds the "into" symbol to query and resolves it
* and registers it with planner env as the staging table. Also, builds a unload query
* to unload the staging table.
* @throws QueryResolverException
@@ -540,9 +527,9 @@
// since this was staging table; this adds some temp metadata to the query node; extract
// that metadata and inject into global metadata store for rest of the queries to use.
- Map tempMetadata = query.getTemporaryMetadata();
- if (tempMetadata != null && !tempMetadata.isEmpty()) {
- planEnv.addToGlobalMetadata(tempMetadata);
+ TempMetadataStore tempMetadata = query.getTemporaryMetadata();
+ if (tempMetadata != null && !tempMetadata.getData().isEmpty()) {
+ planEnv.addToGlobalMetadata(tempMetadata.getData());
}
ResultSetInfo rsInfo = planEnv.getStagingTableResultsInfo(stageGroupName);
@@ -554,7 +541,6 @@
intoGroupID.setCardinality(cardinality);
// add the materialization hook for the staged table to original one.
- //GroupSymbol groupSymbol = (GroupSymbol)query.getFrom().getGroups().get(0);
planEnv.addStagingTable(srcGroup.getMetadataID(), intoGroupID);
// plan the unload of the staging table
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLStagaingQueryPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLStagaingQueryPlanner.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/XMLStagaingQueryPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -68,7 +68,7 @@
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.ExpressionMappingVisitor;
import org.teiid.query.sql.visitor.GroupCollectorVisitor;
@@ -220,10 +220,10 @@
if (parentRsInfo.getTempTable() == null) {
//create a temp table to represent the resultset
- List<SingleElementSymbol> projectedSymbols = parentRsInfo.getCommand().getProjectedSymbols();
- ArrayList<SingleElementSymbol> elements = new ArrayList<SingleElementSymbol>(projectedSymbols.size());
- for (SingleElementSymbol singleElementSymbol : projectedSymbols) {
- singleElementSymbol = (SingleElementSymbol) singleElementSymbol.clone();
+ List<Expression> projectedSymbols = parentRsInfo.getCommand().getProjectedSymbols();
+ ArrayList<Expression> elements = new ArrayList<Expression>(projectedSymbols.size());
+ for (Expression singleElementSymbol : projectedSymbols) {
+ singleElementSymbol = (Expression) singleElementSymbol.clone();
ResolverVisitor.resolveLanguageObject(singleElementSymbol, planEnv.getGlobalMetadata());
elements.add(singleElementSymbol);
}
Modified: trunk/engine/src/main/java/org/teiid/query/parser/ParseInfo.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/ParseInfo.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/parser/ParseInfo.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,7 +23,6 @@
package org.teiid.query.parser;
import java.io.Serializable;
-import java.util.Map;
import org.teiid.core.util.PropertiesUtils;
@@ -33,8 +32,6 @@
private static final long serialVersionUID = -7323683731955992888L;
private static final boolean ANSI_QUOTED_DEFAULT = PropertiesUtils.getBooleanProperty(System.getProperties(), "org.teiid.ansiQuotedIdentifiers", true); //$NON-NLS-1$
- public Map<String, Integer> nameCounts = null;
-
public int referenceCount = 0;
// treat a double quoted variable as variable instead of string
Modified: trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,7 +35,6 @@
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
/**
* <p>Converts a SQL-string to an object version of a query. This
@@ -297,14 +296,14 @@
return result;
}
- public SingleElementSymbol parseSelectExpression(String sql) throws QueryParserException {
+ public Expression parseSelectExpression(String sql) throws QueryParserException {
if(sql == null) {
throw new IllegalArgumentException(QueryPlugin.Util.getString("QueryParser.nullSqlExpr")); //$NON-NLS-1$
}
ParseInfo dummyInfo = new ParseInfo();
- SingleElementSymbol result = null;
+ Expression result = null;
try{
result = getSqlParser(sql).selectExpression(dummyInfo);
Modified: trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,7 +22,6 @@
package org.teiid.query.parser;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -316,29 +315,6 @@
}
}
- /**
- * Generate an expression name based on the function type and previous names.
- * @param info Parse info, including counts for each function type
- * @param functionType Null for expression, the function name for aggregates
- * @return New unique function name
- */
- String generateFunctionName(ParseInfo info, String functionType) {
- if (functionType == null) {
- functionType = "expr"; //$NON-NLS-1$
- } else {
- functionType = functionType.toLowerCase();
- }
- if (info.nameCounts == null) {
- info.nameCounts = new HashMap<String, Integer>();
- }
- Integer num = info.nameCounts.get(functionType);
- if (num == null) {
- num = 0;
- }
- info.nameCounts.put(functionType, num + 1);
- return functionType + (num == 0 ? "" : ""+num); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
int getOperator(String opString) {
if (opString.equals("=")) { //$NON-NLS-1$
return CompareCriteria.EQ;
Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -65,7 +65,6 @@
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.VariableContext;
import org.teiid.query.util.CommandContext;
import org.teiid.query.validator.ValidationVisitor;
@@ -141,19 +140,18 @@
Command command = QueryParser.getQueryParser().parseCommand(value.toString());
command.setExternalGroupContexts(dynamicCommand.getExternalGroupContexts());
- command.setTemporaryMetadata(dynamicCommand.getTemporaryMetadata());
+ command.setTemporaryMetadata(dynamicCommand.getTemporaryMetadata().clone());
updateContextWithUsingValues(procEnv, localContext);
- Map tempMetadata = command.getTemporaryMetadata();
- final TempMetadataStore metadataStore = new TempMetadataStore(tempMetadata);
+ TempMetadataStore metadataStore = command.getTemporaryMetadata();
if (dynamicCommand.getUsing() != null
&& !dynamicCommand.getUsing().isEmpty()) {
- metadataStore.addTempGroup(Reserved.USING, new LinkedList(dynamicCommand.getUsing().getClauseMap().keySet()));
+ metadataStore.addTempGroup(Reserved.USING, new LinkedList<ElementSymbol>(dynamicCommand.getUsing().getClauseMap().keySet()));
GroupSymbol using = new GroupSymbol(Reserved.USING);
using.setMetadataID(metadataStore.getTempGroupID(Reserved.USING));
command.addExternalGroupToContext(using);
- metadataStore.addTempGroup(ProcedureReservedWords.DVARS, new LinkedList(dynamicCommand.getUsing().getClauseMap().keySet()));
+ metadataStore.addTempGroup(ProcedureReservedWords.DVARS, new LinkedList<ElementSymbol>(dynamicCommand.getUsing().getClauseMap().keySet()));
using = new GroupSymbol(ProcedureReservedWords.DVARS);
using.setMetadataID(metadataStore.getTempGroupID(ProcedureReservedWords.DVARS));
command.addExternalGroupToContext(using);
@@ -200,7 +198,7 @@
dynamicProgram.addInstruction(inst);
if (dynamicCommand.getIntoGroup() != null) {
- String groupName = dynamicCommand.getIntoGroup().getCanonicalName();
+ String groupName = dynamicCommand.getIntoGroup().getName();
if (!procEnv.getTempTableStore().getAllTempTables().contains(groupName)) {
//create the temp table in the parent scope
Create create = new Create();
@@ -272,7 +270,7 @@
QueryProcessingException {
// validate project symbols
List dynamicExpectedColumns = dynamicCommand.getAsColumns();
- List<SingleElementSymbol> sourceProjectedSymbolList = command.getProjectedSymbols();
+ List<Expression> sourceProjectedSymbolList = command.getProjectedSymbols();
if (dynamicExpectedColumns != null && !dynamicExpectedColumns.isEmpty()) {
if (dynamicExpectedColumns.size() != sourceProjectedSymbolList.size()) {
@@ -282,14 +280,15 @@
// If there is only one project symbol, we won't validate the name.
Iterator dynamicIter = dynamicExpectedColumns.iterator();
- Iterator<SingleElementSymbol> sourceIter = sourceProjectedSymbolList.iterator();
+ Iterator<Expression> sourceIter = sourceProjectedSymbolList.iterator();
// Check for proper element name and datatype definition in the
// dynamic SQL
// If the projected symbol list equal to 1, we won't bother checking
// the name.
while (dynamicIter.hasNext()) {
- SingleElementSymbol dynamicSymbol = (SingleElementSymbol) dynamicIter.next();
- Class<?> sourceSymbolDatatype = sourceIter.next().getType();
+ Expression dynamicSymbol = (Expression) dynamicIter.next();
+ Expression sourceExpr = sourceIter.next();
+ Class<?> sourceSymbolDatatype = sourceExpr.getType();
// Check if the the dynamic sql element types are equal or
// implicitly convertible to the source types
@@ -302,13 +301,9 @@
&& // If the types aren't the same, and...
!DataTypeManager.isImplicitConversion(sourceTypeName,
dynamicTypeName)) { // if there's no implicit
- // conversion between the
- // two
- Object[] params = new Object[] { sourceTypeName,
- dynamicSymbol.getShortName(),
- dynamicTypeName };
+ // conversion between the two
throw new QueryProcessingException(QueryPlugin.Util
- .getString("ExecDynamicSqlInstruction.6", params)); //$NON-NLS-1$
+ .getString("ExecDynamicSqlInstruction.6", sourceTypeName, sourceExpr, dynamicTypeName)); //$NON-NLS-1$
}
}
}
@@ -316,7 +311,7 @@
// do a recursion check
// Add group to recursion stack
CommandContext context = procEnv.getContext();
- context.pushCall(parentProcCommand.getVirtualGroup().getCanonicalName());
+ context.pushCall(parentProcCommand.getVirtualGroup().getName());
}
/**
Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -39,7 +39,6 @@
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.util.CommandContext;
public class ForEachRowPlan extends ProcessorPlan {
@@ -79,7 +78,7 @@
}
@Override
- public List<SingleElementSymbol> getOutputElements() {
+ public List<Expression> getOutputElements() {
return Command.getUpdateCommandSymbol();
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/LoopInstruction.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/LoopInstruction.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/LoopInstruction.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -34,7 +34,8 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.util.VariableContext;
@@ -44,7 +45,7 @@
// the loop block
private Program loopProgram;
- private List elements;
+ private List<ElementSymbol> elements;
private String label;
public LoopInstruction(Program loopProgram, String rsName, ProcessorPlan plan, String label) {
@@ -64,20 +65,19 @@
}
public void process(ProcedurePlan procEnv) throws TeiidComponentException {
- List currentRow = procEnv.getCurrentRow(rsName);
+ List<?> currentRow = procEnv.getCurrentRow(rsName);
VariableContext varContext = procEnv.getCurrentVariableContext();
//set results to the variable context(the cursor.element is treated as variable)
if(this.elements == null){
List schema = procEnv.getSchema(rsName);
- elements = new ArrayList(schema.size());
+ elements = new ArrayList<ElementSymbol>(schema.size());
for(int i=0; i< schema.size(); i++){
- // defect 13432 - schema may contain AliasSymbols. Cast to SingleElementSymbol instead of ElementSymbol
- SingleElementSymbol element = (SingleElementSymbol)schema.get(i);
- elements.add(new ElementSymbol(rsName + "." + element.getShortName())); //$NON-NLS-1$
+ Expression element = (Expression)schema.get(i);
+ elements.add(new ElementSymbol(rsName + "." + Symbol.getShortName(element))); //$NON-NLS-1$
}
}
for(int i=0; i< elements.size(); i++){
- varContext.setValue((ElementSymbol)elements.get(i), currentRow.get(i));
+ varContext.setValue(elements.get(i), currentRow.get(i));
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -50,8 +50,6 @@
import org.teiid.query.sql.lang.Select;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SelectSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.util.CommandContext;
@@ -74,7 +72,7 @@
private int schemaSize;
private Object[] projection;
- private List<SelectSymbol> originalSelect;
+ private List<Expression> originalSelect;
private Object modelId;
protected AccessNode() {
@@ -169,18 +167,18 @@
}
Query query = (Query)atomicCommand;
Select select = query.getSelect();
- List<SelectSymbol> symbols = select.getSymbols();
+ List<Expression> symbols = select.getSymbols();
if (symbols.size() == 1) {
return;
}
boolean shouldProject = false;
LinkedHashMap<Expression, Integer> uniqueSymbols = new LinkedHashMap<Expression, Integer>();
projection = new Object[symbols.size()];
- this.originalSelect = new ArrayList<SelectSymbol>(query.getSelect().getSymbols());
+ this.originalSelect = new ArrayList<Expression>(query.getSelect().getSymbols());
int i = 0;
int j = 0;
- for (Iterator<SelectSymbol> iter = symbols.iterator(); iter.hasNext(); ) {
- SingleElementSymbol ss = (SingleElementSymbol) iter.next();
+ for (Iterator<Expression> iter = symbols.iterator(); iter.hasNext(); ) {
+ Expression ss = (Expression) iter.next();
Expression ex = SymbolMap.getExpression(ss);
if (ex instanceof Constant) {
projection[i] = ex;
@@ -210,13 +208,13 @@
Integer index = uniqueSymbols.get(SymbolMap.getExpression(item.getSymbol()));
if (index != null) {
item.setExpressionPosition(index);
- item.setSymbol((SingleElementSymbol) select.getSymbols().get(index));
+ item.setSymbol((Expression) select.getSymbols().get(index));
}
}
}
}
- public List<SelectSymbol> getOriginalSelect() {
+ public List<Expression> getOriginalSelect() {
return originalSelect;
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,17 +22,7 @@
package org.teiid.query.processor.relational;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import org.teiid.api.exception.query.ExpressionEvaluationException;
import org.teiid.common.buffer.BlockedException;
@@ -54,7 +44,6 @@
import org.teiid.query.sql.lang.SetCriteria;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.ValueIterator;
@@ -94,11 +83,11 @@
DependentValueSource originalVs = (DependentValueSource)dependentNode.getContext().getVariableContext().getGlobalValue(valueSource);
if (!originalVs.isDistinct()) {
if (sortUtility == null) {
- List<SingleElementSymbol> sortSymbols = new ArrayList<SingleElementSymbol>(dependentSetStates.size());
+ List<Expression> sortSymbols = new ArrayList<Expression>(dependentSetStates.size());
List<Boolean> sortDirection = new ArrayList<Boolean>(sortSymbols.size());
for (int i = 0; i < dependentSetStates.size(); i++) {
sortDirection.add(Boolean.valueOf(OrderBy.ASC));
- sortSymbols.add((SingleElementSymbol)dependentSetStates.get(i).valueExpression);
+ sortSymbols.add(dependentSetStates.get(i).valueExpression);
}
this.sortUtility = new SortUtility(originalVs.getTupleBuffer().createIndexedTupleSource(), sortSymbols, sortDirection, Mode.DUP_REMOVE, dependentNode.getBufferManager(), dependentNode.getConnectionID(), originalVs.getTupleBuffer().getSchema());
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,7 +35,6 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.Assertion;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.ValueIterator;
import org.teiid.query.sql.util.ValueIteratorSource;
@@ -88,7 +87,7 @@
index = buffer.getSchema().indexOf(valueExpression);
}
Assertion.assertTrue(index != -1);
- if (((SingleElementSymbol)buffer.getSchema().get(index)).getType() == DataTypeManager.DefaultDataClasses.BIG_DECIMAL) {
+ if (((Expression)buffer.getSchema().get(index)).getType() == DataTypeManager.DefaultDataClasses.BIG_DECIMAL) {
result = new TreeSet<Object>();
} else {
result = new HashSet<Object>();
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -41,7 +41,7 @@
import org.teiid.query.processor.CollectionTupleSource;
import org.teiid.query.sql.lang.OrderBy;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
/**
@@ -122,10 +122,10 @@
reorderedSortIndex[j++] = i;
}
}
- List<SingleElementSymbol> reordered = RelationalNode.projectTuple(reorderedSortIndex, elements);
+ List<Expression> reordered = RelationalNode.projectTuple(reorderedSortIndex, elements);
if (!state.isDistinct()) {
//need to add a rowid, just in case
- reordered = new ArrayList<SingleElementSymbol>(reordered);
+ reordered = new ArrayList<Expression>(reordered);
ElementSymbol id = new ElementSymbol("rowId"); //$NON-NLS-1$
id.setType(DataTypeManager.DefaultDataClasses.INTEGER);
reordered.add(keyLength, id);
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -41,17 +41,7 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.query.eval.Evaluator;
-import org.teiid.query.function.aggregate.AggregateFunction;
-import org.teiid.query.function.aggregate.ArrayAgg;
-import org.teiid.query.function.aggregate.Avg;
-import org.teiid.query.function.aggregate.ConstantFunction;
-import org.teiid.query.function.aggregate.Count;
-import org.teiid.query.function.aggregate.Max;
-import org.teiid.query.function.aggregate.Min;
-import org.teiid.query.function.aggregate.StatsFunction;
-import org.teiid.query.function.aggregate.Sum;
-import org.teiid.query.function.aggregate.TextAgg;
-import org.teiid.query.function.aggregate.XMLAgg;
+import org.teiid.query.function.aggregate.*;
import org.teiid.query.processor.BatchCollector;
import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.processor.BatchCollector.BatchProducer;
@@ -61,7 +51,6 @@
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.symbol.TextLine;
import org.teiid.query.sql.symbol.AggregateSymbol.Type;
import org.teiid.query.sql.util.SymbolMap;
@@ -167,7 +156,7 @@
}
// Incoming elements and lookup map for evaluating expressions
- List<? extends SingleElementSymbol> sourceElements = this.getChildren()[0].getElements();
+ List<? extends Expression> sourceElements = this.getChildren()[0].getElements();
this.elementMap = createLookupMap(sourceElements);
// List should contain all grouping columns / expressions as we need those for sorting
@@ -178,7 +167,7 @@
this.collectedExpressions.add(ex);
}
if (removeDuplicates) {
- for (SingleElementSymbol ses : sourceElements) {
+ for (Expression ses : sourceElements) {
collectExpression(SymbolMap.getExpression(ses));
}
distinctCols = collectedExpressions.size();
@@ -190,7 +179,7 @@
// Construct aggregate function state accumulators
functions = new AggregateFunction[getElements().size()];
for(int i=0; i<getElements().size(); i++) {
- Expression symbol = (Expression) getElements().get(i);
+ Expression symbol = getElements().get(i);
if (this.outputMapping != null) {
symbol = outputMapping.getMappedExpression((ElementSymbol)symbol);
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/NestedTableJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/NestedTableJoinStrategy.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/NestedTableJoinStrategy.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -33,7 +33,6 @@
import org.teiid.query.sql.lang.JoinType;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
/**
@@ -164,9 +163,9 @@
}
private void updateContext(List<?> tuple,
- List<? extends SingleElementSymbol> elements) {
+ List<? extends Expression> elements) {
for (int i = 0; i < elements.size(); i++) {
- SingleElementSymbol element = elements.get(i);
+ Expression element = elements.get(i);
if (element instanceof ElementSymbol) {
if (tuple == null) {
joinNode.getContext().getVariableContext().remove((ElementSymbol)element);
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/ProjectNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/ProjectNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/ProjectNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -41,14 +41,13 @@
import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.util.CommandContext;
public class ProjectNode extends SubqueryAwareRelationalNode {
- private List<? extends SingleElementSymbol> selectSymbols;
+ private List<? extends Expression> selectSymbols;
// Derived element lookup map
private Map elementMap;
@@ -79,11 +78,11 @@
* return List of select symbols
* @return List of select symbols
*/
- public List<? extends SingleElementSymbol> getSelectSymbols() {
+ public List<? extends Expression> getSelectSymbols() {
return this.selectSymbols;
}
- public void setSelectSymbols(List<? extends SingleElementSymbol> symbols) {
+ public void setSelectSymbols(List<? extends Expression> symbols) {
this.selectSymbols = symbols;
}
@@ -100,7 +99,7 @@
Arrays.fill(this.projectionIndexes, -1);
this.expressions = new ArrayList<Expression>(this.selectSymbols.size());
- for (SingleElementSymbol ses : this.selectSymbols) {
+ for (Expression ses : this.selectSymbols) {
this.expressions.add(SymbolMap.getExpression(ses));
}
//in the case of select with no from, there is no child node
@@ -120,7 +119,7 @@
// 3. order of input values == order of output values
needsProject = childElements.size() != getElements().size();
for(int i=0; i<selectSymbols.size(); i++) {
- SingleElementSymbol symbol = selectSymbols.get(i);
+ Expression symbol = selectSymbols.get(i);
if(symbol instanceof AliasSymbol) {
Integer index = (Integer) elementMap.get(symbol);
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -46,7 +46,6 @@
import org.teiid.query.processor.BatchCollector.BatchProducer;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.util.CommandContext;
@@ -54,7 +53,7 @@
static class NodeData {
int nodeID;
- List<? extends SingleElementSymbol> elements;
+ List<? extends Expression> elements;
Number estimateNodeCardinality;
Number setSizeEstimate;
Number depAccessEstimate;
@@ -166,16 +165,16 @@
}
}
- public void setElements(List<? extends SingleElementSymbol> elements) {
+ public void setElements(List<? extends Expression> elements) {
this.data.elements = elements;
}
@Override
- public List<? extends SingleElementSymbol> getOutputElements() {
+ public List<? extends Expression> getOutputElements() {
return getElements();
}
- public List<? extends SingleElementSymbol> getElements() {
+ public List<? extends Expression> getElements() {
return this.data.elements;
}
@@ -403,9 +402,9 @@
Map lookupMap = new HashMap();
for(int i=0; i<elements.size(); i++) {
Object element = elements.get(i);
- lookupMap.put(element, new Integer(i));
+ lookupMap.put(element, i);
if (element instanceof AliasSymbol) {
- lookupMap.put(((AliasSymbol)element).getSymbol(), new Integer(i));
+ lookupMap.put(((AliasSymbol)element).getSymbol(), i);
}
}
return lookupMap;
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -159,7 +159,7 @@
break;
}
}
- this.tempTableStore.setUpdatable(withCommand.getGroupSymbol().getCanonicalName(), false);
+ this.tempTableStore.setUpdatable(withCommand.getGroupSymbol().getName(), false);
withToProcess.remove(0);
withProcessor = null;
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -45,7 +45,6 @@
import org.teiid.query.sql.lang.OrderBy;
import org.teiid.query.sql.lang.OrderByItem;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
/**
@@ -172,7 +171,7 @@
this.comparator.setNullOrdering(nullOrderings);
}
- public SortUtility(TupleSource ts, List<? extends SingleElementSymbol> expressions, List<Boolean> types,
+ public SortUtility(TupleSource ts, List<? extends Expression> expressions, List<Boolean> types,
Mode mode, BufferManager bufferManager, String connectionID, List schema) {
this(ts, new OrderBy(expressions, types).getOrderByItems(), mode, bufferManager, connectionID, schema);
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/xml/ExecSqlInstruction.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/xml/ExecSqlInstruction.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/xml/ExecSqlInstruction.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -75,7 +75,7 @@
XMLContext context) throws TeiidComponentException {
PlanExecutor executor = context.getResultExecutor(resultSetName);
if (executor == null) {
- executor = env.createResultExecutor(resultSetName, info);
+ executor = env.createResultExecutor(info);
context.setResultExecutor(resultSetName, executor);
}
return executor;
Modified: trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLContext.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLContext.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLContext.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -30,6 +30,7 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.util.VariableContext;
@@ -192,7 +193,7 @@
continue;
}
ElementSymbol symbol = (ElementSymbol)elements.get(index);
- variableContext.setValue(new ElementSymbol(resultSetName + ElementSymbol.SEPARATOR + symbol.getShortName()), row.get(index));
+ variableContext.setValue(new ElementSymbol(resultSetName + Symbol.SEPARATOR + symbol.getShortName()), row.get(index));
}
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLProcessorEnvironment.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLProcessorEnvironment.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLProcessorEnvironment.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -112,11 +112,11 @@
* program stack
*/
public boolean isRecursiveProgramInStack() {
- Iterator stackedPrograms = this.programStack.iterator();
+ Iterator<ProgramState> stackedPrograms = this.programStack.iterator();
// Always at least one program in the stack
- ProgramState programState = (ProgramState)stackedPrograms.next();
+ ProgramState programState = stackedPrograms.next();
while (programState.recursionCount == ProgramState.NOT_RECURSIVE && stackedPrograms.hasNext()) {
- programState = (ProgramState) stackedPrograms.next();
+ programState = stackedPrograms.next();
}
return (programState.recursionCount > ProgramState.NOT_RECURSIVE);
}
@@ -225,7 +225,7 @@
return result;
}
- public PlanExecutor createResultExecutor(String resultSetName, ResultSetInfo info)
+ public PlanExecutor createResultExecutor(ResultSetInfo info)
throws TeiidComponentException{
// cloning the plan inside the resultset is not possible
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -52,8 +52,8 @@
import org.teiid.query.sql.proc.CreateProcedureCommand;
import org.teiid.query.sql.proc.TriggerAction;
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.validator.UpdateValidator.UpdateInfo;
@@ -206,11 +206,11 @@
procCommand.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(group, metadata, procCommand.getType()));
}
- public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<? extends SingleElementSymbol> symbols) {
+ public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<? extends Expression> symbols) {
return addScalarGroup(name, metadata, externalGroups, symbols, true);
}
- public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<? extends SingleElementSymbol> symbols, boolean updatable) {
+ public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<? extends Expression> symbols, boolean updatable) {
boolean[] updateArray = new boolean[symbols.size()];
if (updatable) {
Arrays.fill(updateArray, true);
@@ -218,7 +218,7 @@
return addScalarGroup(name, metadata, externalGroups, symbols, updateArray);
}
- public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<? extends SingleElementSymbol> symbols, boolean[] updatable) {
+ public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<? extends Expression> symbols, boolean[] updatable) {
GroupSymbol variables = new GroupSymbol(name);
externalGroups.addGroup(variables);
TempMetadataID tid = metadata.addTempGroup(name, symbols);
@@ -260,7 +260,7 @@
cupc.setVirtualGroup(container);
if (type == Command.TYPE_STORED_PROCEDURE) {
- StoredProcedureInfo info = metadata.getStoredProcedureInfoForProcedure(container.getCanonicalName());
+ StoredProcedureInfo info = metadata.getStoredProcedureInfoForProcedure(container.getName());
// Create temporary metadata that defines a group based on either the stored proc
// name or the stored query name - this will be used later during planning
String procName = info.getProcedureCallableName();
@@ -281,7 +281,7 @@
}
}
- QueryResolver.setChildMetadata(currentCommand, childMetadata.getData(), externalGroups);
+ QueryResolver.setChildMetadata(currentCommand, childMetadata, externalGroups);
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -67,7 +67,7 @@
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.ExpressionMappingVisitor;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
import org.teiid.query.validator.UpdateValidator;
@@ -172,8 +172,8 @@
// Create ElementSymbols for each InputParameter
final List<ElementSymbol> elements = new ArrayList<ElementSymbol>(queryNode.getBindings().size());
boolean positional = true;
- for (SingleElementSymbol ses : parseBindings(queryNode)) {
- String name = ses.getName();
+ for (Expression ses : parseBindings(queryNode)) {
+ String name = Symbol.getShortName(ses);
if (ses instanceof AliasSymbol) {
ses = ((AliasSymbol)ses).getSymbol();
positional = false;
@@ -182,7 +182,7 @@
ResolverVisitor.resolveLanguageObject(elementSymbol, metadata);
elementSymbol.setIsExternalReference(true);
if (!positional) {
- symbolMap.put(new ElementSymbol(BINDING_GROUP + ElementSymbol.SEPARATOR + name), elementSymbol.clone());
+ symbolMap.put(new ElementSymbol(BINDING_GROUP + Symbol.SEPARATOR + name), elementSymbol.clone());
elementSymbol.setShortName(name);
}
elements.add(elementSymbol);
@@ -209,7 +209,7 @@
ProcedureContainerResolver.addScalarGroup("INPUT", rootExternalStore, externalGroups, elements); //$NON-NLS-1$
ProcedureContainerResolver.addScalarGroup(BINDING_GROUP, rootExternalStore, externalGroups, elements);
- QueryResolver.setChildMetadata(currentCommand, rootExternalStore.getData(), externalGroups);
+ QueryResolver.setChildMetadata(currentCommand, rootExternalStore, externalGroups);
}
}
TempMetadataStore result = resolveCommand(currentCommand, metadata, false);
@@ -228,16 +228,16 @@
* @return
* @throws TeiidComponentException
*/
- public static List<SingleElementSymbol> parseBindings(QueryNode planNode) throws TeiidComponentException {
+ public static List<Expression> parseBindings(QueryNode planNode) throws TeiidComponentException {
Collection<String> bindingsCol = planNode.getBindings();
if (bindingsCol == null) {
return Collections.emptyList();
}
- List<SingleElementSymbol> parsedBindings = new ArrayList<SingleElementSymbol>(bindingsCol.size());
+ List<Expression> parsedBindings = new ArrayList<Expression>(bindingsCol.size());
for (Iterator<String> bindings=bindingsCol.iterator(); bindings.hasNext();) {
try {
- SingleElementSymbol binding = QueryParser.getQueryParser().parseSelectExpression(bindings.next());
+ Expression binding = QueryParser.getQueryParser().parseSelectExpression(bindings.next());
parsedBindings.add(binding);
} catch (QueryParserException err) {
throw new TeiidComponentException(err);
@@ -253,13 +253,12 @@
TempMetadataAdapter resolverMetadata = null;
try {
- Map tempMetadata = currentCommand.getTemporaryMetadata();
- if(tempMetadata == null) {
- currentCommand.setTemporaryMetadata(new HashMap());
+ TempMetadataStore discoveredMetadata = currentCommand.getTemporaryMetadata();
+ if(discoveredMetadata == null) {
+ discoveredMetadata = new TempMetadataStore();
+ currentCommand.setTemporaryMetadata(discoveredMetadata);
}
- TempMetadataStore discoveredMetadata = new TempMetadataStore(currentCommand.getTemporaryMetadata());
-
resolverMetadata = new TempMetadataAdapter(metadata, discoveredMetadata);
// Resolve external groups for command
@@ -378,18 +377,18 @@
}
public static void setChildMetadata(Command subCommand, Command parent) {
- Map childMetadataMap = parent.getTemporaryMetadata();
+ TempMetadataStore childMetadata = parent.getTemporaryMetadata();
GroupContext parentContext = parent.getExternalGroupContexts();
- setChildMetadata(subCommand, childMetadataMap, parentContext);
+ setChildMetadata(subCommand, childMetadata, parentContext);
}
- public static void setChildMetadata(Command subCommand, Map parentTempMetadata, GroupContext parentContext) {
- Map tempMetadata = subCommand.getTemporaryMetadata();
+ public static void setChildMetadata(Command subCommand, TempMetadataStore parentTempMetadata, GroupContext parentContext) {
+ TempMetadataStore tempMetadata = subCommand.getTemporaryMetadata();
if(tempMetadata == null) {
- subCommand.setTemporaryMetadata(new HashMap(parentTempMetadata));
+ subCommand.setTemporaryMetadata(parentTempMetadata.clone());
} else {
- tempMetadata.putAll(parentTempMetadata);
+ tempMetadata.getData().putAll(parentTempMetadata.getData());
}
subCommand.setExternalGroupContexts(parentContext);
@@ -469,19 +468,19 @@
throws QueryMetadataException, TeiidComponentException, QueryValidatorException {
//ensure that null types match the view
List<ElementSymbol> symbols = ResolverUtil.resolveElementsInGroup(virtualGroup, qmi);
- List<SingleElementSymbol> projectedSymbols = result.getProjectedSymbols();
+ List<Expression> projectedSymbols = result.getProjectedSymbols();
validateProjectedSymbols(virtualGroup, symbols, projectedSymbols);
}
public static void validateProjectedSymbols(GroupSymbol virtualGroup,
List<ElementSymbol> symbols,
- List<SingleElementSymbol> projectedSymbols)
+ List<Expression> projectedSymbols)
throws QueryValidatorException {
if (symbols.size() != projectedSymbols.size()) {
throw new QueryValidatorException(QueryPlugin.Util.getString("QueryResolver.wrong_view_symbols", virtualGroup, symbols.size(), projectedSymbols.size())); //$NON-NLS-1$
}
for (int i = 0; i < projectedSymbols.size(); i++) {
- SingleElementSymbol projectedSymbol = projectedSymbols.get(i);
+ Expression projectedSymbol = projectedSymbols.get(i);
ResolverUtil.setTypeIfNull(projectedSymbol, symbols.get(i).getType());
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -63,12 +63,12 @@
if (dynamicCmd.getIntoGroup() == null) {
while (columns.hasNext()) {
ElementSymbol column = (ElementSymbol)columns.next();
- column.setMetadataID(new TempMetadataID(column.getShortCanonicalName(), column.getType()));
+ column.setMetadataID(new TempMetadataID(column.getShortName(), column.getType()));
}
} else if (dynamicCmd.getIntoGroup().isTempGroupSymbol()) {
while (columns.hasNext()) {
ElementSymbol column = (ElementSymbol)columns.next();
- column.setGroupSymbol(new GroupSymbol(dynamicCmd.getIntoGroup().getCanonicalName()));
+ column.setGroupSymbol(new GroupSymbol(dynamicCmd.getIntoGroup().getName()));
}
}
@@ -86,7 +86,7 @@
ElementSymbol id = clause.getSymbol();
id.setGroupSymbol(new GroupSymbol(ProcedureReservedWords.DVARS));
id.setType(clause.getValue().getType());
- id.setMetadataID(new TempMetadataID(id.getCanonicalName(), id.getType()));
+ id.setMetadataID(new TempMetadataID(id.getName(), id.getType()));
}
}
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -27,6 +27,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
@@ -109,7 +110,8 @@
// the procedure was parsed with named or unnamed parameters, the keys
// for this map will either be the String names of the parameters or
// the Integer indices, as entered in the user query
- Map<Object, Expression> inputExpressions = new HashMap<Object, Expression>();
+ Map<Integer, Expression> postionalExpressions = new HashMap<Integer, Expression>();
+ Map<String, Expression> namedExpressions = new TreeMap<String, Expression>(String.CASE_INSENSITIVE_ORDER);
int adjustIndex = 0;
for (SPParameter param : oldParams) {
if(param.getExpression() == null) {
@@ -119,16 +121,16 @@
continue;
}
if (namedParameters && param.getParameterType() != SPParameter.RETURN_VALUE) {
- if (inputExpressions.put(param.getName().toUpperCase(), param.getExpression()) != null) {
+ if (namedExpressions.put(param.getName(), param.getExpression()) != null) {
throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.duplicate_named_params", param.getName().toUpperCase())); //$NON-NLS-1$
}
} else {
- inputExpressions.put(param.getIndex() + adjustIndex, param.getExpression());
+ postionalExpressions.put(param.getIndex() + adjustIndex, param.getExpression());
}
}
storedProcedureCommand.clearParameters();
- int origInputs = inputExpressions.size();
+ int origInputs = postionalExpressions.size() + namedExpressions.size();
/*
* Take the values set from the stored procedure implementation, and match up with the
* types of parameter it is from the metadata and then reset the newly joined parameters
@@ -159,7 +161,7 @@
throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.return_expected", storedProcedureCommand.getGroup())); //$NON-NLS-1$
}
- if(!namedParameters && (inputParams > inputExpressions.size())) {
+ if(!namedParameters && (inputParams > postionalExpressions.size())) {
throw new QueryResolverException("ERR.015.008.0007", QueryPlugin.Util.getString("ERR.015.008.0007", inputParams, origInputs, storedProcedureCommand.getGroup())); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -170,7 +172,7 @@
if (storedProcedureCommand.isCalledWithReturn() && hasReturnValue) {
for (SPParameter param : clonedMetadataParams) {
if (param.getParameterType() == SPParameter.RETURN_VALUE) {
- Expression expr = inputExpressions.remove(exprIndex++);
+ Expression expr = postionalExpressions.remove(exprIndex++);
param.setExpression(expr);
}
}
@@ -180,8 +182,8 @@
continue;
}
if (namedParameters) {
- String nameKey = param.getParameterSymbol().getShortCanonicalName();
- Expression expr = inputExpressions.remove(nameKey);
+ String nameKey = param.getParameterSymbol().getShortName();
+ Expression expr = namedExpressions.remove(nameKey);
// With named parameters, have to check on optional params and default values
if (expr == null && param.getParameterType() != ParameterInfo.OUT) {
expr = ResolverUtil.getDefault(param.getParameterSymbol(), metadata);
@@ -193,16 +195,16 @@
if(param.getParameterType() == SPParameter.OUT) {
continue;
}
- Expression expr = inputExpressions.remove(exprIndex++);
+ Expression expr = postionalExpressions.remove(exprIndex++);
param.setExpression(expr);
}
}
// Check for leftovers, i.e. params entered by user w/ wrong/unknown names
- if (!inputExpressions.isEmpty()) {
- if (namedParameters) {
- throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.invalid_named_params", inputExpressions.keySet(), expected)); //$NON-NLS-1$
- }
+ if (!namedExpressions.isEmpty()) {
+ throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.invalid_named_params", namedExpressions.keySet(), expected)); //$NON-NLS-1$
+ }
+ if (!postionalExpressions.isEmpty()) {
throw new QueryResolverException("ERR.015.008.0007", QueryPlugin.Util.getString("ERR.015.008.0007", inputParams, origInputs, storedProcedureCommand.getGroup().toString())); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -286,7 +288,7 @@
protected String getPlan(QueryMetadataInterface metadata,
GroupSymbol group) throws TeiidComponentException,
QueryMetadataException, QueryResolverException {
- StoredProcedureInfo storedProcedureInfo = metadata.getStoredProcedureInfoForProcedure(group.getCanonicalName());
+ StoredProcedureInfo storedProcedureInfo = metadata.getStoredProcedureInfoForProcedure(group.getName());
//if there is a query plan associated with the procedure, get it.
QueryNode plan = storedProcedureInfo.getQueryPlan();
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -55,7 +55,7 @@
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
/**
@@ -105,8 +105,8 @@
} else {
for (int i = 0; i < values.size(); i++) {
if (usingQuery) {
- SingleElementSymbol ses = (SingleElementSymbol)values.get(i);
- ElementSymbol es = new ElementSymbol(ses.getShortName());
+ Expression ses = (Expression)values.get(i);
+ ElementSymbol es = new ElementSymbol(Symbol.getShortName(ses));
es.setType(ses.getType());
insert.addVariable(es);
} else {
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,7 +23,6 @@
package org.teiid.query.resolver.command;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import org.teiid.api.exception.query.QueryMetadataException;
@@ -41,7 +40,7 @@
import org.teiid.query.sql.lang.OrderByItem;
import org.teiid.query.sql.lang.QueryCommand;
import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
public class SetQueryResolver implements CommandResolver {
@@ -61,9 +60,9 @@
QueryResolver.setChildMetadata(firstCommand, setQuery);
QueryResolver.resolveCommand(firstCommand, metadata.getMetadata(), false);
- List<SingleElementSymbol> firstProject = firstCommand.getProjectedSymbols();
+ List<Expression> firstProject = firstCommand.getProjectedSymbols();
List<Class<?>> firstProjectTypes = new ArrayList<Class<?>>();
- for (SingleElementSymbol symbol : firstProject) {
+ for (Expression symbol : firstProject) {
firstProjectTypes.add(symbol.getType());
}
@@ -101,7 +100,7 @@
ResolverUtil.resolveLimit(setQuery.getLimit());
}
- setQuery.setTemporaryMetadata(new HashMap(firstCommand.getTemporaryMetadata()));
+ setQuery.setTemporaryMetadata(firstCommand.getTemporaryMetadata().clone());
}
private void setProjectedTypes(SetQuery setQuery,
@@ -114,7 +113,7 @@
List projectedSymbols = child.getProjectedSymbols();
if (child.getOrderBy() != null) {
for (int j = 0; j < projectedSymbols.size(); j++) {
- SingleElementSymbol ses = (SingleElementSymbol)projectedSymbols.get(j);
+ Expression ses = (Expression)projectedSymbols.get(j);
Class<?> targetType = firstProjectTypes.get(j);
if (ses.getType() != targetType && orderByContainsVariable(child.getOrderBy(), ses, j)) {
String sourceTypeName = DataTypeManager.getDataTypeName(ses.getType());
@@ -134,7 +133,7 @@
* @param position 0-based index of the variable
* @return True if the ORDER BY contains the element
*/
- public static boolean orderByContainsVariable(OrderBy orderBy, SingleElementSymbol ses, int position) {
+ public static boolean orderByContainsVariable(OrderBy orderBy, Expression ses, int position) {
for (OrderByItem item : orderBy.getOrderByItems()) {
if (item.getExpressionPosition() == position) {
return true;
@@ -146,7 +145,7 @@
static void checkSymbolTypes(List firstProjectTypes, List projSymbols) {
for(int j=0; j<projSymbols.size(); j++){
Class firstProjType = (Class)firstProjectTypes.get(j);
- SingleElementSymbol projSymbol = (SingleElementSymbol)projSymbols.get(j);
+ Expression projSymbol = (Expression)projSymbols.get(j);
Class projType = projSymbol.getType();
if(firstProjType.equals(projType)){
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,16 +22,7 @@
package org.teiid.query.resolver.command;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
@@ -52,28 +43,7 @@
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.resolver.util.ResolverVisitor;
import org.teiid.query.sql.LanguageObject;
-import org.teiid.query.sql.lang.ArrayTable;
-import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.From;
-import org.teiid.query.sql.lang.FromClause;
-import org.teiid.query.sql.lang.Into;
-import org.teiid.query.sql.lang.JoinPredicate;
-import org.teiid.query.sql.lang.JoinType;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.QueryCommand;
-import org.teiid.query.sql.lang.SPParameter;
-import org.teiid.query.sql.lang.Select;
-import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubqueryContainer;
-import org.teiid.query.sql.lang.SubqueryFromClause;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.lang.TableFunctionReference;
-import org.teiid.query.sql.lang.TextTable;
-import org.teiid.query.sql.lang.UnaryFromClause;
-import org.teiid.query.sql.lang.WithQueryCommand;
-import org.teiid.query.sql.lang.XMLTable;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.navigator.PostOrderNavigator;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
@@ -83,7 +53,7 @@
import org.teiid.query.sql.symbol.MultipleElementSymbol;
import org.teiid.query.sql.symbol.Reference;
import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
public class SimpleQueryResolver implements CommandResolver {
@@ -124,7 +94,7 @@
ResolverUtil.resolveOrderBy(query.getOrderBy(), query, metadata);
}
- List<SingleElementSymbol> symbols = query.getSelect().getProjectedSymbols();
+ List<Expression> symbols = query.getSelect().getProjectedSymbols();
if (query.getInto() != null) {
GroupSymbol symbol = query.getInto().getGroup();
@@ -150,13 +120,13 @@
if (!discoveredGroups.add(obj.getGroupSymbol())) {
throw new QueryResolverException(QueryPlugin.Util.getString("SimpleQueryResolver.duplicate_with", obj.getGroupSymbol())); //$NON-NLS-1$
}
- List<? extends SingleElementSymbol> projectedSymbols = obj.getCommand().getProjectedSymbols();
+ List<? extends Expression> projectedSymbols = obj.getCommand().getProjectedSymbols();
if (obj.getColumns() != null && !obj.getColumns().isEmpty()) {
if (obj.getColumns().size() != projectedSymbols.size()) {
throw new QueryResolverException(QueryPlugin.Util.getString("SimpleQueryResolver.mismatched_with_columns", obj.getGroupSymbol())); //$NON-NLS-1$
}
Iterator<ElementSymbol> iter = obj.getColumns().iterator();
- for (SingleElementSymbol singleElementSymbol : projectedSymbols) {
+ for (Expression singleElementSymbol : projectedSymbols) {
ElementSymbol es = iter.next();
es.setType(singleElementSymbol.getType());
}
@@ -167,7 +137,7 @@
obj.getGroupSymbol().setIsTempTable(true);
List<GroupSymbol> groups = Collections.singletonList(obj.getGroupSymbol());
if (obj.getColumns() != null && !obj.getColumns().isEmpty()) {
- for (SingleElementSymbol singleElementSymbol : projectedSymbols) {
+ for (Expression singleElementSymbol : projectedSymbols) {
ResolverVisitor.resolveLanguageObject(singleElementSymbol, groups, metadata);
}
}
@@ -183,7 +153,7 @@
}
private static GroupSymbol resolveAllInGroup(MultipleElementSymbol allInGroupSymbol, Set<GroupSymbol> groups, QueryMetadataInterface metadata) throws QueryResolverException, QueryMetadataException, TeiidComponentException {
- String groupAlias = allInGroupSymbol.getGroup().getCanonicalName();
+ String groupAlias = allInGroupSymbol.getGroup().getName();
List<GroupSymbol> groupSymbols = ResolverUtil.findMatchingGroups(groupAlias, groups, metadata);
if(groupSymbols.isEmpty() || groupSymbols.size() > 1) {
String msg = QueryPlugin.Util.getString(groupSymbols.isEmpty()?"ERR.015.008.0047":"SimpleQueryResolver.ambiguous_all_in_group", allInGroupSymbol); //$NON-NLS-1$ //$NON-NLS-2$
@@ -483,21 +453,21 @@
aliasName += "_IN"; //$NON-NLS-1$
}
- SingleElementSymbol newSymbol = new AliasSymbol(aliasName, new ExpressionSymbol(paramSymbol.getShortName(), ref));
+ Expression newSymbol = new AliasSymbol(aliasName, new ExpressionSymbol(paramSymbol.getShortName(), ref));
select.addSymbol(newSymbol);
- accessPatternElementNames.add(queryName + ElementSymbol.SEPARATOR + aliasName);
+ accessPatternElementNames.add(queryName + Symbol.SEPARATOR + aliasName);
}
}
QueryResolver.resolveCommand(procQuery, metadata.getMetadata());
- List<SingleElementSymbol> projectedSymbols = procQuery.getProjectedSymbols();
+ List<Expression> projectedSymbols = procQuery.getProjectedSymbols();
- HashSet<String> foundNames = new HashSet<String>();
+ Set<String> foundNames = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
- for (SingleElementSymbol ses : projectedSymbols) {
- if (!foundNames.add(ses.getShortCanonicalName())) {
+ for (Expression ses : projectedSymbols) {
+ if (!foundNames.add(Symbol.getShortName(ses))) {
throw new QueryResolverException(QueryPlugin.Util.getString("SimpleQueryResolver.Proc_Relational_Name_conflict", fullName)); //$NON-NLS-1$
}
}
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -43,6 +43,7 @@
import org.teiid.query.sql.lang.Drop;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.Symbol;
@@ -62,7 +63,7 @@
GroupSymbol group = create.getTable();
//assuming that all temp table creates are local, the user must use a local name
- if (group.getName().indexOf(ElementSymbol.SEPARATOR) != -1) {
+ if (group.getName().indexOf(Symbol.SEPARATOR) != -1) {
throw new QueryResolverException(QueryPlugin.Util.getString("TempTableResolver.unqualified_name_required", group.getName())); //$NON-NLS-1$
}
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,7 +24,6 @@
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -57,7 +56,7 @@
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.symbol.Symbol;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
@@ -84,7 +83,7 @@
List<ElementSymbol> symbols = new LinkedList<ElementSymbol>();
- String countVar = ProcedureReservedWords.VARIABLES + ElementSymbol.SEPARATOR + ProcedureReservedWords.ROWCOUNT;
+ String countVar = ProcedureReservedWords.VARIABLES + Symbol.SEPARATOR + ProcedureReservedWords.ROWCOUNT;
ElementSymbol updateCount = new ElementSymbol(countVar);
updateCount.setType(DataTypeManager.DefaultDataClasses.INTEGER);
symbols.add(updateCount);
@@ -99,12 +98,12 @@
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving block", block}); //$NON-NLS-1$
//create a new variable and metadata context for this block so that discovered metadata is not visible else where
- TempMetadataStore store = new TempMetadataStore(new HashMap(metadata.getMetadataStore().getData()));
+ TempMetadataStore store = metadata.getMetadataStore().clone();
metadata = new TempMetadataAdapter(metadata.getMetadata(), store);
externalGroups = new GroupContext(externalGroups, null);
//create a new variables group for this block
- GroupSymbol variables = ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, store, externalGroups, new LinkedList<SingleElementSymbol>());
+ GroupSymbol variables = ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, store, externalGroups, new LinkedList<Expression>());
for (Statement statement : block.getStatements()) {
resolveStatement(command, statement, externalGroups, variables, metadata);
@@ -245,10 +244,10 @@
}
Command cmd = loopStmt.getCommand();
resolveEmbeddedCommand(metadata, externalGroups, cmd);
- List<SingleElementSymbol> symbols = cmd.getProjectedSymbols();
+ List<Expression> symbols = cmd.getProjectedSymbols();
//add the loop cursor group into its own context
- TempMetadataStore store = new TempMetadataStore(new HashMap(metadata.getMetadataStore().getData()));
+ TempMetadataStore store = metadata.getMetadataStore().clone();
metadata = new TempMetadataAdapter(metadata.getMetadata(), store);
externalGroups = new GroupContext(externalGroups, null);
@@ -272,7 +271,7 @@
private TempMetadataStore resolveEmbeddedCommand(TempMetadataAdapter metadata, GroupContext groupContext,
Command cmd) throws TeiidComponentException,
QueryResolverException {
- QueryResolver.setChildMetadata(cmd, metadata.getMetadataStore().getData(), groupContext);
+ QueryResolver.setChildMetadata(cmd, metadata.getMetadataStore(), groupContext);
return QueryResolver.resolveCommand(cmd, metadata.getMetadata());
}
@@ -286,7 +285,7 @@
variable.setGroupSymbol(new GroupSymbol(ProcedureReservedWords.VARIABLES));
variable.setOutputName(outputName);
} else {
- if (gs.getSchema() != null || !gs.getShortCanonicalName().equals(ProcedureReservedWords.VARIABLES)) {
+ if (gs.getSchema() != null || !gs.getShortName().equalsIgnoreCase(ProcedureReservedWords.VARIABLES)) {
handleUnresolvableDeclaration(variable, QueryPlugin.Util.getString("ERR.015.010.0031", new Object[]{ProcedureReservedWords.VARIABLES, variable})); //$NON-NLS-1$
}
}
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -59,10 +59,11 @@
import org.teiid.query.sql.lang.SubqueryContainer;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.MultipleElementSymbol;
-import org.teiid.query.sql.symbol.SelectSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.GroupCollectorVisitor;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
@@ -282,7 +283,7 @@
*/
MappingDocument doc = (MappingDocument) metadata.getMappingNode(docGroup.getMetadataID());
- final String prefix = group.getNonCorrelationName() + ElementSymbol.SEPARATOR;
+ final String prefix = group.getNonCorrelationName() + Symbol.SEPARATOR;
doc.acceptVisitor(new Navigator(true, new MappingVisitor() {
@Override
@@ -323,7 +324,7 @@
List elements = select.getSymbols();
for (int i = 0; i < elements.size(); i++) {
- SelectSymbol ss = (SelectSymbol) elements.get(i);
+ Expression ss = (Expression) elements.get(i);
if (ss instanceof ElementSymbol) {
// Here we make an assumption that: all elements named with "xml" must use qualified name
@@ -502,7 +503,6 @@
String name = elem.getOutputName();
// Resolve based on exact match
elem.setShortName(exactMatch.getShortName());
- elem.setShortCanonicalName(exactMatch.getShortCanonicalName());
elem.setMetadataID(exactMatch.getMetadataID());
elem.setType(exactMatch.getType());
elem.setGroupSymbol(exactMatch.getGroupSymbol());
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -303,7 +303,7 @@
public static void resolveOrderBy(OrderBy orderBy, QueryCommand command, QueryMetadataInterface metadata)
throws QueryResolverException, QueryMetadataException, TeiidComponentException {
- List<SingleElementSymbol> knownElements = command.getProjectedQuery().getSelect().getProjectedSymbols();
+ List<Expression> knownElements = command.getProjectedQuery().getSelect().getProjectedSymbols();
boolean isSimpleQuery = false;
List<GroupSymbol> fromClauseGroups = Collections.emptyList();
@@ -321,19 +321,17 @@
List<Expression> expressions = new ArrayList<Expression>(knownElements.size());
for(int i=0; i<knownElements.size(); i++) {
- SingleElementSymbol knownSymbol = knownElements.get(i);
+ Expression knownSymbol = knownElements.get(i);
expressions.add(SymbolMap.getExpression(knownSymbol));
- if (knownSymbol instanceof ExpressionSymbol) {
- continue;
+ if (knownSymbol instanceof ElementSymbol || knownSymbol instanceof AliasSymbol) {
+ String name = ((Symbol)knownSymbol).getShortName();
+
+ knownShortNames[i] = name;
}
-
- String name = knownSymbol.getShortName();
-
- knownShortNames[i] = name;
}
for (int i = 0; i < orderBy.getVariableCount(); i++) {
- SingleElementSymbol sortKey = orderBy.getVariable(i);
+ Expression sortKey = orderBy.getVariable(i);
if (sortKey instanceof ElementSymbol) {
ElementSymbol symbol = (ElementSymbol)sortKey;
String groupPart = null;
@@ -344,7 +342,7 @@
String shortName = symbol.getShortName();
if (groupPart == null) {
int position = -1;
- SingleElementSymbol matchedSymbol = null;
+ Expression matchedSymbol = null;
// walk the SELECT col short names, looking for a match on the current ORDER BY 'short name'
for(int j=0; j<knownShortNames.length; j++) {
if( !shortName.equalsIgnoreCase( knownShortNames[j] )) {
@@ -370,19 +368,16 @@
continue;
}
}
- } else if (sortKey instanceof ExpressionSymbol) {
+ } else if (sortKey instanceof Constant) {
// check for legacy positional
- ExpressionSymbol es = (ExpressionSymbol)sortKey;
- if (es.getExpression() instanceof Constant) {
- Constant c = (Constant)es.getExpression();
- int elementOrder = Integer.valueOf(c.getValue().toString()).intValue();
- // adjust for the 1 based index.
- if (elementOrder > knownElements.size() || elementOrder < 1) {
- throw new QueryResolverException(QueryPlugin.Util.getString("SQLParser.non_position_constant", c)); //$NON-NLS-1$
- }
- orderBy.setExpressionPosition(i, elementOrder - 1);
- continue;
- }
+ Constant c = (Constant)sortKey;
+ int elementOrder = Integer.valueOf(c.getValue().toString()).intValue();
+ // adjust for the 1 based index.
+ if (elementOrder > knownElements.size() || elementOrder < 1) {
+ throw new QueryResolverException(QueryPlugin.Util.getString("SQLParser.non_position_constant", c)); //$NON-NLS-1$
+ }
+ orderBy.setExpressionPosition(i, elementOrder - 1);
+ continue;
}
//handle order by expressions
if (command instanceof SetQuery) {
@@ -469,7 +464,7 @@
static GroupInfo getGroupInfo(GroupSymbol group,
QueryMetadataInterface metadata)
throws TeiidComponentException, QueryMetadataException {
- String key = GroupInfo.CACHE_PREFIX + group.getCanonicalName();
+ String key = GroupInfo.CACHE_PREFIX + group.getName();
GroupInfo groupInfo = (GroupInfo)metadata.getFromMetadataCache(group.getMetadataID(), key);
if (groupInfo == null) {
@@ -482,7 +477,7 @@
for (Object elementID : elementIDs) {
String elementName = metadata.getName(elementID);
// Form an element symbol from the ID
- ElementSymbol element = new ElementSymbol(elementName, DataTypeManager.getCanonicalString(StringUtil.toUpperCase(elementName)), group);
+ ElementSymbol element = new ElementSymbol(elementName, group);
element.setMetadataID(elementID);
element.setType( DataTypeManager.getDataTypeClass(metadata.getElementType(element.getMetadataID())) );
@@ -552,7 +547,7 @@
throws TeiidComponentException, QueryResolverException {
if (symbol.isImplicitTempGroupSymbol()) {
- if (metadata.getMetadataStore().getTempElementElementIDs(symbol.getCanonicalName())==null) {
+ if (metadata.getMetadataStore().getTempElementElementIDs(symbol.getName())==null) {
addTempGroup(metadata, symbol, symbols, true);
}
ResolverUtil.resolveGroup(symbol, metadata);
@@ -561,11 +556,11 @@
public static TempMetadataID addTempGroup(TempMetadataAdapter metadata,
GroupSymbol symbol,
- List<? extends SingleElementSymbol> symbols, boolean tempTable) throws QueryResolverException {
- HashSet<String> names = new HashSet<String>();
- for (SingleElementSymbol ses : symbols) {
- if (!names.add(ses.getShortCanonicalName())) {
- throw new QueryResolverException(QueryPlugin.Util.getString("ResolverUtil.duplicateName", symbol, ses.getShortName())); //$NON-NLS-1$
+ List<? extends Expression> symbols, boolean tempTable) throws QueryResolverException {
+ Set<String> names = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
+ for (Expression ses : symbols) {
+ if (!names.add(Symbol.getShortName(ses))) {
+ throw new QueryResolverException(QueryPlugin.Util.getString("ResolverUtil.duplicateName", symbol, Symbol.getShortName(ses))); //$NON-NLS-1$
}
}
@@ -578,7 +573,7 @@
public static TempMetadataID addTempTable(TempMetadataAdapter metadata,
GroupSymbol symbol,
- List<? extends SingleElementSymbol> symbols) throws QueryResolverException {
+ List<? extends Expression> symbols) throws QueryResolverException {
return addTempGroup(metadata, symbol, symbols, true);
}
@@ -592,47 +587,34 @@
*/
public static void resolveNullLiterals(List symbols) {
for (int i = 0; i < symbols.size(); i++) {
- SelectSymbol selectSymbol = (SelectSymbol) symbols.get(i);
+ Expression selectSymbol = (Expression) symbols.get(i);
- if (!(selectSymbol instanceof SingleElementSymbol)) {
- continue;
- }
-
- SingleElementSymbol symbol = (SingleElementSymbol)selectSymbol;
-
- setTypeIfNull(symbol, DataTypeManager.DefaultDataClasses.STRING);
+ setTypeIfNull(selectSymbol, DataTypeManager.DefaultDataClasses.STRING);
}
}
- public static void setTypeIfNull(SingleElementSymbol symbol,
+ public static void setTypeIfNull(Expression symbol,
Class<?> replacement) {
if(!DataTypeManager.DefaultDataClasses.NULL.equals(symbol.getType()) && symbol.getType() != null) {
return;
}
- if(symbol instanceof AliasSymbol) {
- symbol = ((AliasSymbol)symbol).getSymbol();
- }
- if(symbol instanceof ExpressionSymbol && !(symbol instanceof AggregateSymbol)) {
- ExpressionSymbol exprSymbol = (ExpressionSymbol) symbol;
- Expression expr = exprSymbol.getExpression();
-
- if(expr instanceof Constant) {
- exprSymbol.setExpression(new Constant(null, replacement));
- } else if (expr instanceof AbstractCaseExpression) {
- ((AbstractCaseExpression)expr).setType(replacement);
- } else if (expr instanceof ScalarSubquery) {
- ((ScalarSubquery)expr).setType(replacement);
- } else {
- try {
- ResolverUtil.setDesiredType(expr, replacement, symbol);
- } catch (QueryResolverException e) {
- //cannot happen
- }
- }
- } else if(symbol instanceof ElementSymbol) {
+ symbol = SymbolMap.getExpression(symbol);
+ if(symbol instanceof Constant) {
+ ((Constant)symbol).setType(replacement);
+ } else if (symbol instanceof AbstractCaseExpression) {
+ ((AbstractCaseExpression)symbol).setType(replacement);
+ } else if (symbol instanceof ScalarSubquery) {
+ ((ScalarSubquery)symbol).setType(replacement);
+ } else if(symbol instanceof ElementSymbol) {
ElementSymbol elementSymbol = (ElementSymbol)symbol;
elementSymbol.setType(replacement);
- }
+ } else {
+ try {
+ ResolverUtil.setDesiredType(symbol, replacement, symbol);
+ } catch (QueryResolverException e) {
+ //cannot happen
+ }
+ }
}
/**
@@ -659,7 +641,7 @@
matchedGroups.addAll(groups);
} else {
for (GroupSymbol group : groups) {
- String fullName = group.getCanonicalName();
+ String fullName = group.getName();
if (nameMatchesGroup(groupContext, matchedGroups, group, fullName)) {
if (groupContext.length() == fullName.length()) {
return matchedGroups;
@@ -675,7 +657,7 @@
String actualVdbName = metadata.getVirtualDatabaseName();
if (actualVdbName != null) {
- fullName = actualVdbName.toUpperCase() + ElementSymbol.SEPARATOR + fullName;
+ fullName = actualVdbName + Symbol.SEPARATOR + fullName;
if (nameMatchesGroup(groupContext, matchedGroups, group, fullName)
&& groupContext.length() == fullName.length()) {
return matchedGroups;
@@ -691,7 +673,7 @@
public static boolean nameMatchesGroup(String groupContext,
String fullName) {
//if there is a name match, make sure that it is the full name or a proper qualifier
- if (fullName.endsWith(groupContext)) {
+ if (StringUtil.endsWithIgnoreCase(fullName, groupContext)) {
int matchIndex = fullName.length() - groupContext.length();
if (matchIndex == 0 || fullName.charAt(matchIndex - 1) == '.') {
return true;
@@ -735,7 +717,7 @@
}
String exprTypeName = DataTypeManager.getDataTypeName(exprType);
- Collection<SingleElementSymbol> projectedSymbols = crit.getCommand().getProjectedSymbols();
+ Collection<Expression> projectedSymbols = crit.getCommand().getProjectedSymbols();
if (projectedSymbols.size() != 1){
throw new QueryResolverException("ERR.015.008.0032", QueryPlugin.Util.getString("ERR.015.008.0032", crit.getCommand())); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -821,7 +803,6 @@
}
// If that didn't work, try to strip a vdb name from potentialID
- String vdbName = null;
if(groupID == null) {
String[] parts = potentialID.split("\\.", 2); //$NON-NLS-1$
if (parts.length > 1 && parts[0].equalsIgnoreCase(metadata.getVirtualDatabaseName())) {
@@ -832,7 +813,6 @@
}
if(groupID != null) {
potentialID = parts[1];
- vdbName = parts[0];
}
}
}
@@ -854,12 +834,6 @@
try {
// get valid GroupID for possibleID - this may throw exceptions if group is invalid
groupID = metadata.getGroupID(potentialID);
- //set group full name
- if(symbol.getDefinition() != null){
- symbol.setDefinition(potentialID);
- }else{
- symbol.setName(potentialID);
- }
} catch(QueryMetadataException e) {
// didn't find this group ID
}
@@ -885,14 +859,12 @@
}
// set real metadata ID in the symbol
symbol.setMetadataID(groupID);
- if(vdbName != null) {
- // reset name or definition to strip vdb name
- if(symbol.getDefinition() == null) {
- symbol.setName(potentialID);
- } else {
- symbol.setDefinition(potentialID);
- }
- }
+ potentialID = metadata.getFullName(groupID);
+ if(symbol.getDefinition() == null) {
+ symbol.setName(potentialID);
+ } else {
+ symbol.setDefinition(potentialID);
+ }
try {
if (!symbol.isProcedure()) {
symbol.setIsTempTable(metadata.isTemporaryTable(groupID));
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -134,9 +134,9 @@
if (elementSymbol.getGroupSymbol() != null) {
groupContext = elementSymbol.getGroupSymbol().getName();
}
- String elementShortName = elementSymbol.getShortCanonicalName();
+ String elementShortName = elementSymbol.getShortName();
if (groupContext != null) {
- groupContext = elementSymbol.getGroupSymbol().getCanonicalName();
+ groupContext = elementSymbol.getGroupSymbol().getName();
try {
if (findShortName && internalResolveElementSymbol(elementSymbol, null, elementShortName, groupContext)) {
elementSymbol.setDisplayMode(DisplayMode.SHORT_OUTPUT_NAME);
@@ -220,7 +220,7 @@
ElementSymbol resolvedSymbol = match.element;
GroupSymbol resolvedGroup = match.group;
String oldName = elementSymbol.getOutputName();
- if (expectedGroupContext != null && !ResolverUtil.nameMatchesGroup(expectedGroupContext, resolvedGroup.getCanonicalName())) {
+ if (expectedGroupContext != null && !ResolverUtil.nameMatchesGroup(expectedGroupContext, resolvedGroup.getName())) {
return false;
}
elementSymbol.setIsExternalReference(isExternal);
@@ -228,7 +228,6 @@
elementSymbol.setMetadataID(resolvedSymbol.getMetadataID());
elementSymbol.setGroupSymbol(resolvedGroup);
elementSymbol.setShortName(resolvedSymbol.getShortName());
- elementSymbol.setShortCanonicalName(resolvedSymbol.getShortCanonicalName());
elementSymbol.setOutputName(oldName);
return true;
}
@@ -728,10 +727,10 @@
String exprTypeName = DataTypeManager.getDataTypeName(exprType);
boolean changed = false;
- List newVals = new ArrayList();
+ List<Expression> newVals = new ArrayList<Expression>();
boolean convertLeft = false;
- Class setType = null;
+ Class<?> setType = null;
Iterator valIter = scrit.getValues().iterator();
while(valIter.hasNext()) {
@@ -791,8 +790,8 @@
final int whenCount = obj.getWhenCount();
Expression expr = obj.getExpression();
- Class whenType = null;
- Class thenType = null;
+ Class<?> whenType = null;
+ Class<?> thenType = null;
// Get the WHEN and THEN types, and get a candidate type for each (for the next step)
for (int i = 0; i < whenCount; i++) {
if (whenType == null) {
@@ -897,7 +896,7 @@
final int whenCount = obj.getWhenCount();
// 1. Call recursively to resolve any contained CASE expressions
- Class thenType = null;
+ Class<?> thenType = null;
// Get the WHEN and THEN types, and get a candidate type for each (for the next step)
for (int i = 0; i < whenCount; i++) {
if (thenType == null) {
Modified: trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -158,9 +158,9 @@
boolean oldRewriteAggs = rewriteAggs;
QueryMetadataInterface oldMetadata = metadata;
- Map tempMetadata = command.getTemporaryMetadata();
+ TempMetadataStore tempMetadata = command.getTemporaryMetadata();
if(tempMetadata != null) {
- metadata = new TempMetadataAdapter(metadata, new TempMetadataStore(tempMetadata));
+ metadata = new TempMetadataAdapter(metadata, tempMetadata);
}
switch(command.getType()) {
@@ -421,7 +421,7 @@
List<GroupSymbol> groups = query.getFrom().getGroups();
HashSet<String> names = new HashSet<String>();
for (GroupSymbol gs : groups) {
- names.add(gs.getCanonicalName());
+ names.add(gs.getName());
}
for (Iterator<Criteria> crits = current.iterator(); crits.hasNext();) {
PlannedResult plannedResult = rmc.findSubquery(crits.next());
@@ -449,13 +449,13 @@
crits.remove();
GroupSymbol viewName = RulePlaceAccess.recontextSymbol(new GroupSymbol("X"), names); //$NON-NLS-1$
- viewName.setName(viewName.getCanonicalName());
+ viewName.setName(viewName.getName());
viewName.setDefinition(null);
Query q = createInlineViewQuery(viewName, plannedResult.query, metadata, plannedResult.query.getSelect().getProjectedSymbols());
- Iterator<SingleElementSymbol> iter = q.getSelect().getProjectedSymbols().iterator();
+ Iterator<Expression> iter = q.getSelect().getProjectedSymbols().iterator();
HashMap<Expression, Expression> expressionMap = new HashMap<Expression, Expression>();
- for (SingleElementSymbol symbol : plannedResult.query.getSelect().getProjectedSymbols()) {
+ for (Expression symbol : plannedResult.query.getSelect().getProjectedSymbols()) {
expressionMap.put(SymbolMap.getExpression(symbol), SymbolMap.getExpression(iter.next()));
}
for (int i = 0; i < plannedResult.leftExpressions.size(); i++) {
@@ -469,7 +469,7 @@
clause.setMakeInd(true);
}
query.getFrom().addClause(clause);
- query.getTemporaryMetadata().putAll(q.getTemporaryMetadata());
+ query.getTemporaryMetadata().getData().putAll(q.getTemporaryMetadata().getData());
//transform the query into an inner join
}
query.setCriteria(Criteria.combineCriteria(query.getCriteria(), Criteria.combineCriteria(current)));
@@ -484,7 +484,7 @@
return false;
}
} else if (query.getSelect().isDistinct()) {
- for (SingleElementSymbol projectSymbol : query.getSelect().getProjectedSymbols()) {
+ for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
Expression ex = SymbolMap.getExpression(projectSymbol);
if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
return true;
@@ -516,7 +516,7 @@
return false;
}
HashSet<Expression> selectExpressions = new HashSet<Expression>();
- for (SingleElementSymbol selectExpr : query.getSelect().getProjectedSymbols()) {
+ for (Expression selectExpr : query.getSelect().getProjectedSymbols()) {
selectExpressions.add(SymbolMap.getExpression(selectExpr));
}
for (Expression groupByExpr : groupBy.getSymbols()) {
@@ -570,7 +570,7 @@
return queryCommand;
}
Select select = queryCommand.getProjectedQuery().getSelect();
- final List<SingleElementSymbol> projectedSymbols = select.getProjectedSymbols();
+ final List<Expression> projectedSymbols = select.getProjectedSymbols();
LinkedList<OrderByItem> unrelatedItems = new LinkedList<OrderByItem>();
@@ -584,20 +584,20 @@
LinkedList<OrderByItem> unrelatedItems) {
HashSet<Expression> previousExpressions = new HashSet<Expression>();
for (int i = 0; i < orderBy.getVariableCount(); i++) {
- SingleElementSymbol querySymbol = orderBy.getVariable(i);
+ Expression querySymbol = orderBy.getVariable(i);
int index = orderBy.getExpressionPosition(i);
boolean isUnrelated = false;
if (index == -1) {
unrelatedItems.add(orderBy.getOrderByItems().get(i));
isUnrelated = (querySymbol instanceof ExpressionSymbol);
} else {
- querySymbol = (SingleElementSymbol)projectedSymbols.get(index);
+ querySymbol = (Expression)projectedSymbols.get(index);
}
Expression expr = SymbolMap.getExpression(querySymbol);
if (!previousExpressions.add(expr) || (queryCommand instanceof Query && EvaluatableVisitor.willBecomeConstant(expr))) {
orderBy.removeOrderByItem(i--);
} else if (!isUnrelated) {
- orderBy.getOrderByItems().get(i).setSymbol((SingleElementSymbol)querySymbol.clone());
+ orderBy.getOrderByItems().get(i).setSymbol((Expression)querySymbol.clone());
}
}
if (orderBy.getVariableCount() == 0) {
@@ -632,7 +632,7 @@
private Insert correctDatatypes(Insert insert) {
boolean needsView = false;
for (int i = 0; !needsView && i < insert.getVariables().size(); i++) {
- SingleElementSymbol ses = insert.getVariables().get(i);
+ Expression ses = insert.getVariables().get(i);
if (ses.getType() != insert.getQueryExpression().getProjectedSymbols().get(i).getType()) {
needsView = true;
}
@@ -1216,14 +1216,14 @@
CompareCriteria cc = new CompareCriteria();
cc.setLeftExpression(criteria.getLeftExpression());
Query q = createInlineViewQuery(new GroupSymbol("X"), criteria.getCommand(), metadata, criteria.getCommand().getProjectedSymbols()); //$NON-NLS-1$
- SingleElementSymbol ses = q.getProjectedSymbols().get(0);
+ Expression ses = q.getProjectedSymbols().get(0);
Expression expr = SymbolMap.getExpression(ses);
q.getSelect().clearSymbols();
AggregateSymbol.Type type = Type.MAX;
if (criteria.getOperator() == CompareCriteria.GT || criteria.getOperator() == CompareCriteria.GE) {
type = Type.MIN;
}
- q.getSelect().addSymbol(new AggregateSymbol(ses.getName(), type.name(), false, expr));
+ q.getSelect().addSymbol(new AggregateSymbol(type.name(), type.name(), false, expr));
cc.setRightExpression(new ScalarSubquery(q));
cc.setOperator(criteria.getOperator());
return rewriteCriteria(cc);
@@ -1251,7 +1251,7 @@
return criteria;
}
- private Criteria simplifyWithInverse(CompareCriteria criteria) throws TeiidComponentException, TeiidProcessingException{
+ private Criteria simplifyWithInverse(CompareCriteria criteria) throws TeiidProcessingException{
Expression leftExpr = criteria.getLeftExpression();
Function leftFunction = (Function) leftExpr;
@@ -1293,7 +1293,7 @@
* @return CompareCriteria
*/
private CompareCriteria simplifyMathematicalCriteria(CompareCriteria criteria)
- throws TeiidComponentException, TeiidProcessingException{
+ throws TeiidProcessingException{
Expression leftExpr = criteria.getLeftExpression();
Expression rightExpr = criteria.getRightExpression();
@@ -1872,7 +1872,7 @@
return criteria;
}
- public static Expression rewriteExpression(Expression expression, CreateProcedureCommand procCommand, CommandContext context, QueryMetadataInterface metadata) throws TeiidComponentException, TeiidProcessingException{
+ public static Expression rewriteExpression(Expression expression, CommandContext context, QueryMetadataInterface metadata) throws TeiidComponentException, TeiidProcessingException{
return new QueryRewriter(metadata, context).rewriteExpressionDirect(expression);
}
@@ -1891,7 +1891,7 @@
if (value == null) {
if (es.getGroupSymbol().getSchema() == null) {
- String grpName = es.getGroupSymbol().getCanonicalName();
+ String grpName = es.getGroupSymbol().getName();
if (grpName.equals(ProcedureReservedWords.CHANGING)) {
Assertion.failed("Changing value should not be null"); //$NON-NLS-1$
}
@@ -1911,7 +1911,9 @@
return expression;
}
boolean isBindEligible = true;
- if(expression instanceof Function) {
+ if (expression instanceof AggregateSymbol) {
+ expression = rewriteExpression((AggregateSymbol)expression);
+ } else if(expression instanceof Function) {
isBindEligible = !isConstantConvert(expression);
expression = rewriteFunction((Function) expression);
} else if (expression instanceof CaseExpression) {
@@ -1932,11 +1934,7 @@
}
return expression;
} else if (expression instanceof ExpressionSymbol) {
- if (expression instanceof AggregateSymbol) {
- expression = rewriteExpression((AggregateSymbol)expression);
- } else {
- expression = rewriteExpressionDirect(((ExpressionSymbol)expression).getExpression());
- }
+ expression = rewriteExpressionDirect(((ExpressionSymbol)expression).getExpression());
} else if (expression instanceof Criteria) {
expression = rewriteCriteria((Criteria)expression);
} else {
@@ -2005,7 +2003,7 @@
SearchedCaseExpression sce = new SearchedCaseExpression(Arrays.asList(cond), Arrays.asList(ex));
sce.setType(ex.getType());
expression.setCondition(null);
- expression.setExpression(sce);
+ expression.setArgs(new Expression[] {sce});
}
return expression;
}
@@ -2193,6 +2191,10 @@
return newArgs[0]; //unnecessary conversion
}
+ if (function.isImplicit()) {
+ function.setImplicit(false);
+ }
+
if (!(newArgs[0] instanceof Function) || tgtType == DataTypeManager.DefaultDataClasses.OBJECT) {
return function;
}
@@ -2448,7 +2450,7 @@
public static Query createInlineViewQuery(GroupSymbol inlineGroup,
Command nested,
QueryMetadataInterface metadata,
- List<? extends SingleElementSymbol> actualSymbols) throws QueryMetadataException,
+ List<? extends Expression> actualSymbols) throws QueryMetadataException,
QueryResolverException,
TeiidComponentException {
Query query = new Query();
@@ -2466,19 +2468,19 @@
inlineGroup.setMetadataID(gid);
List<Class<?>> actualTypes = new ArrayList<Class<?>>(nested.getProjectedSymbols().size());
- for (SingleElementSymbol ses : actualSymbols) {
+ for (Expression ses : actualSymbols) {
actualTypes.add(ses.getType());
}
- List<SingleElementSymbol> selectSymbols = SetQuery.getTypedProjectedSymbols(ResolverUtil.resolveElementsInGroup(inlineGroup, tma), actualTypes, tma);
- Iterator<? extends SingleElementSymbol> iter = actualSymbols.iterator();
- for (SingleElementSymbol ses : selectSymbols) {
- ses = (SingleElementSymbol)ses.clone();
- SingleElementSymbol actual = iter.next();
- if (!ses.getShortCanonicalName().equals(actual.getShortCanonicalName())) {
+ List<Expression> selectSymbols = SetQuery.getTypedProjectedSymbols(ResolverUtil.resolveElementsInGroup(inlineGroup, tma), actualTypes, tma);
+ Iterator<? extends Expression> iter = actualSymbols.iterator();
+ for (Expression ses : selectSymbols) {
+ ses = (Expression)ses.clone();
+ Expression actual = iter.next();
+ if (!Symbol.getShortName(ses).equals(Symbol.getShortName(actual))) {
if (ses instanceof AliasSymbol) {
- ((AliasSymbol)ses).setShortName(actual.getShortName());
+ ((AliasSymbol)ses).setShortName(Symbol.getShortName(actual));
} else {
- ses = new AliasSymbol(actual.getShortName(), ses);
+ ses = new AliasSymbol(Symbol.getShortName(actual), ses);
}
}
select.addSymbol(ses);
@@ -2492,7 +2494,7 @@
sqfc.getGroupSymbol().setMetadataID(inlineGroup.getMetadataID());
from.addClause(sqfc);
//copy the metadata onto the new query so that temp metadata adapters will be used in later calls
- query.getTemporaryMetadata().putAll(store.getData());
+ query.getTemporaryMetadata().getData().putAll(store.getData());
return query;
}
@@ -2500,15 +2502,15 @@
select.setSymbols(select.getProjectedSymbols());
- List symbols = select.getSymbols();
+ List<Expression> symbols = select.getSymbols();
HashSet<String> uniqueNames = new HashSet<String>();
for(int i = 0; i < symbols.size(); i++) {
- SingleElementSymbol symbol = (SingleElementSymbol)symbols.get(i);
+ Expression symbol = symbols.get(i);
- String baseName = symbol.getShortCanonicalName();
+ String baseName = Symbol.getShortName(symbol);
String name = baseName;
int exprID = 0;
@@ -2591,7 +2593,7 @@
query.setOrderBy(null);
SymbolMap expressionMapping = SymbolMap.createSymbolMap(update.getGroup(), query.getProjectedSymbols(), metadata);
- ArrayList<SingleElementSymbol> selectSymbols = mapChangeList(update, symbolMap);
+ ArrayList<Expression> selectSymbols = mapChangeList(update, symbolMap);
query.setSelect(new Select(selectSymbols));
ExpressionMappingVisitor emv = new ExpressionMappingVisitor(expressionMapping.asMap(), true);
PostOrderNavigator.doVisit(query.getSelect(), emv);
@@ -2607,18 +2609,18 @@
return createUpdateProcedure(update, query, group, correlationName);
}
- private ArrayList<SingleElementSymbol> mapChangeList(Update update,
+ private ArrayList<Expression> mapChangeList(Update update,
Map<ElementSymbol, ElementSymbol> symbolMap) {
- ArrayList<SingleElementSymbol> selectSymbols = new ArrayList<SingleElementSymbol>(update.getChangeList().getClauses().size());
+ ArrayList<Expression> selectSymbols = new ArrayList<Expression>(update.getChangeList().getClauses().size());
int i = 0;
for (SetClause clause : update.getChangeList().getClauses()) {
Expression ex = clause.getValue();
- SingleElementSymbol selectSymbol = null;
+ Expression selectSymbol = null;
if (!EvaluatableVisitor.willBecomeConstant(ex)) {
- if (!(ex instanceof SingleElementSymbol)) {
+ if (!(ex instanceof Expression)) {
selectSymbol = new ExpressionSymbol("expr", ex); //$NON-NLS-1$
} else {
- selectSymbol = (SingleElementSymbol)ex;
+ selectSymbol = (Expression)ex;
}
selectSymbols.add(new AliasSymbol("s_" +i, selectSymbol)); //$NON-NLS-1$
ex = new ElementSymbol("s_" +i); //$NON-NLS-1$
@@ -2654,7 +2656,7 @@
CreateProcedureCommand cupc = new CreateProcedureCommand();
Block parent = new Block();
parent.setAtomic(true);
- ElementSymbol rowsUpdated = new ElementSymbol(ProcedureReservedWords.VARIABLES+ElementSymbol.SEPARATOR+"ROWS_UPDATED"); //$NON-NLS-1$
+ ElementSymbol rowsUpdated = new ElementSymbol(ProcedureReservedWords.VARIABLES+Symbol.SEPARATOR+"ROWS_UPDATED"); //$NON-NLS-1$
DeclareStatement ds = new DeclareStatement(rowsUpdated, DataTypeManager.DefaultDataTypes.INTEGER, new Constant(0));
parent.addStatement(ds);
LoopStatement ls = new LoopStatement(b, query, "X"); //$NON-NLS-1$
@@ -2682,9 +2684,9 @@
List<Object> ids = metadata.getElementIDsInKey(pk);
List<Criteria> pkCriteria = new ArrayList<Criteria>(ids.size());
for (Object object : ids) {
- ElementSymbol es = new ElementSymbol(correlationName + ElementSymbol.SEPARATOR + metadata.getName(object));
+ ElementSymbol es = new ElementSymbol(correlationName + Symbol.SEPARATOR + metadata.getName(object));
query.getSelect().addSymbol(new AliasSymbol("s_" +i, es)); //$NON-NLS-1$
- es = new ElementSymbol(group.getName() + ElementSymbol.SEPARATOR + metadata.getName(object));
+ es = new ElementSymbol(group.getName() + Symbol.SEPARATOR + metadata.getName(object));
pkCriteria.add(new CompareCriteria(es, CompareCriteria.EQ, new ElementSymbol("X.s_" + i))); //$NON-NLS-1$
i++;
}
@@ -2755,7 +2757,7 @@
public static Command createUpdateProcedure(Update update, QueryMetadataInterface metadata, CommandContext context) throws QueryResolverException, QueryMetadataException, TeiidComponentException, TeiidProcessingException {
QueryRewriter rewriter = new QueryRewriter(metadata, context);
Criteria crit = update.getCriteria();
- ArrayList<SingleElementSymbol> selectSymbols = rewriter.mapChangeList(update, null);
+ ArrayList<Expression> selectSymbols = rewriter.mapChangeList(update, null);
Query query = new Query(new Select(selectSymbols), new From(Arrays.asList(new UnaryFromClause(update.getGroup()))), crit, null, null);
return rewriter.createUpdateProcedure(update, query, update.getGroup(), update.getGroup().getName());
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -26,8 +26,8 @@
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
public abstract class Alter<T extends Command> extends Command {
@@ -56,7 +56,7 @@
}
@Override
- public List<SingleElementSymbol> getProjectedSymbols() {
+ public List<Expression> getProjectedSymbols() {
return Command.getUpdateCommandSymbol();
}
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,18 +25,17 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.EquivalenceUtil;
+import org.teiid.query.metadata.TempMetadataStore;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.sql.LanguageObject;
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.CommandCollectorVisitor;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -109,14 +108,14 @@
public static final int TYPE_ALTER_TRIGGER = 16;
- private static List<SingleElementSymbol> updateCommandSymbol;
+ private static List<Expression> updateCommandSymbol;
/**
* All temporary group IDs discovered while resolving this
* command. The key is a TempMetadataID and the value is an
* ordered List of TempMetadataID representing the elements.
*/
- protected Map tempGroupIDs;
+ protected TempMetadataStore tempGroupIDs;
private transient GroupContext externalGroups;
@@ -150,11 +149,11 @@
this.correlatedReferences = correlatedReferences;
}
- public void setTemporaryMetadata(Map metadata) {
+ public void setTemporaryMetadata(TempMetadataStore metadata) {
this.tempGroupIDs = metadata;
}
- public Map getTemporaryMetadata() {
+ public TempMetadataStore getTemporaryMetadata() {
return this.tempGroupIDs;
}
@@ -220,7 +219,7 @@
copy.externalGroups = (GroupContext)this.externalGroups.clone();
}
if(this.tempGroupIDs != null) {
- copy.setTemporaryMetadata(new HashMap(this.tempGroupIDs));
+ copy.setTemporaryMetadata(this.tempGroupIDs.clone());
}
copy.setIsResolved(this.isResolved());
@@ -293,7 +292,7 @@
* single column.
* @return Ordered list of SingleElementSymbol
*/
- public abstract List<SingleElementSymbol> getProjectedSymbols();
+ public abstract List<Expression> getProjectedSymbols();
/**
* Whether the results are cachable.
@@ -301,11 +300,11 @@
*/
public abstract boolean areResultsCachable();
- public static List<SingleElementSymbol> getUpdateCommandSymbol() {
+ public static List<Expression> getUpdateCommandSymbol() {
if (updateCommandSymbol == null ) {
ElementSymbol symbol = new ElementSymbol("Count"); //$NON-NLS-1$
symbol.setType(DataTypeManager.DefaultDataClasses.INTEGER);
- updateCommandSymbol = Arrays.asList((SingleElementSymbol)symbol);
+ updateCommandSymbol = Arrays.asList((Expression)symbol);
}
return updateCommandSymbol;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Criteria.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Criteria.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Criteria.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -178,9 +178,4 @@
return DataTypeManager.DefaultDataClasses.BOOLEAN;
}
- @Override
- public boolean isResolved() {
- return true;
- }
-
} // END CLASS
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Insert.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Insert.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Insert.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,7 +35,6 @@
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;
/**
@@ -257,7 +256,7 @@
* single column.
* @return Ordered list of SingleElementSymbol
*/
- public List<SingleElementSymbol> getProjectedSymbols(){
+ public List<Expression> getProjectedSymbols(){
return Command.getUpdateCommandSymbol();
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -30,7 +30,7 @@
import org.teiid.core.util.HashCodeUtil;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -61,8 +61,8 @@
* Constructs an instance of this class from an ordered list of elements.
* @param parameters The ordered list of SingleElementSymbol
*/
- public OrderBy( List<? extends SingleElementSymbol> parameters ) {
- for (SingleElementSymbol singleElementSymbol : parameters) {
+ public OrderBy( List<? extends Expression> parameters ) {
+ for (Expression singleElementSymbol : parameters) {
orderByItems.add(new OrderByItem(singleElementSymbol, ASC));
}
}
@@ -72,9 +72,9 @@
* @param parameters The ordered list of SingleElementSymbol
* @param types The list of directions by which the results are ordered (Boolean, true=ascending)
*/
- public OrderBy( List<? extends SingleElementSymbol> parameters, List<Boolean> types ) {
+ public OrderBy( List<? extends Expression> parameters, List<Boolean> types ) {
Iterator<Boolean> typeIter = types.iterator();
- for (SingleElementSymbol singleElementSymbol : parameters) {
+ for (Expression singleElementSymbol : parameters) {
orderByItems.add(new OrderByItem(singleElementSymbol, typeIter.next()));
}
}
@@ -99,7 +99,7 @@
* @param index Index to get
* @return The element at the index
*/
- public SingleElementSymbol getVariable( int index ) {
+ public Expression getVariable( int index ) {
return orderByItems.get(index).getSymbol();
}
@@ -116,7 +116,7 @@
* Adds a new variable to the list of order by elements.
* @param element Element to add
*/
- public void addVariable( SingleElementSymbol element ) {
+ public void addVariable( Expression element ) {
addVariable(element, ASC);
}
@@ -126,7 +126,7 @@
* @param element Element to add
* @param type True for ascending, false for descending
*/
- public void addVariable( SingleElementSymbol element, boolean type ) {
+ public void addVariable( Expression element, boolean type ) {
if(element != null) {
orderByItems.add(new OrderByItem(element, type));
}
@@ -208,8 +208,8 @@
* Get the list or sort key symbols. Modifications to this list will not add or remove {@link OrderByItem}s.
* @return
*/
- public List<SingleElementSymbol> getSortKeys() {
- ArrayList<SingleElementSymbol> result = new ArrayList<SingleElementSymbol>(orderByItems.size());
+ public List<Expression> getSortKeys() {
+ ArrayList<Expression> result = new ArrayList<Expression>(orderByItems.size());
for (OrderByItem item : orderByItems) {
result.add(item.getSymbol());
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,7 +25,7 @@
import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.SQLStringVisitor;
public class OrderByItem implements LanguageObject {
@@ -34,10 +34,10 @@
private Integer expressionPosition; //set during resolving to the select clause position
private boolean ascending = true;
- private SingleElementSymbol symbol;
+ private Expression symbol;
private NullOrdering nullOrdering;
- public OrderByItem(SingleElementSymbol symbol, boolean ascending) {
+ public OrderByItem(Expression symbol, boolean ascending) {
this.symbol = symbol;
this.ascending = ascending;
}
@@ -58,11 +58,11 @@
this.ascending = ascending;
}
- public SingleElementSymbol getSymbol() {
+ public Expression getSymbol() {
return symbol;
}
- public void setSymbol(SingleElementSymbol symbol) {
+ public void setSymbol(Expression symbol) {
this.symbol = symbol;
}
@@ -89,7 +89,7 @@
@Override
public OrderByItem clone() {
- OrderByItem clone = new OrderByItem((SingleElementSymbol)this.symbol.clone(), ascending);
+ OrderByItem clone = new OrderByItem((Expression)this.symbol.clone(), ascending);
clone.expressionPosition = this.expressionPosition;
clone.nullOrdering = this.nullOrdering;
return clone;
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Query.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Query.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Query.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -33,7 +33,7 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
/**
@@ -76,7 +76,7 @@
private Into into;
/** xml projected symbols */
- private List<SingleElementSymbol> selectList;
+ private List<Expression> selectList;
// =========================================================================
// C O N S T R U C T O R S
@@ -292,7 +292,7 @@
* single column.
* @return Ordered list of SingleElementSymbol
*/
- public List<SingleElementSymbol> getProjectedSymbols() {
+ public List<Expression> getProjectedSymbols() {
if (!getIsXML()) {
if(getSelect() != null) {
if(getInto() != null){
@@ -304,7 +304,7 @@
return Collections.emptyList();
}
if(selectList == null){
- selectList = new ArrayList<SingleElementSymbol>(1);
+ selectList = new ArrayList<Expression>(1);
ElementSymbol xmlElement = new ElementSymbol("xml"); //$NON-NLS-1$
xmlElement.setType(DataTypeManager.DefaultDataClasses.XML);
selectList.add(xmlElement);
@@ -357,7 +357,7 @@
copy.setIsXML(getIsXML());
if(selectList != null){
- copy.selectList = LanguageObject.Util.deepClone(selectList, SingleElementSymbol.class);
+ copy.selectList = LanguageObject.Util.deepClone(selectList, Expression.class);
}
if (into != null) {
@@ -429,8 +429,8 @@
return areResultsCachable(projectedSymbols);
}
- public static boolean areResultsCachable(Collection<? extends SingleElementSymbol> projectedSymbols) {
- for (SingleElementSymbol projectedSymbol : projectedSymbols) {
+ public static boolean areResultsCachable(Collection<? extends Expression> projectedSymbols) {
+ for (Expression projectedSymbol : projectedSymbols) {
if(projectedSymbol.getType() == DataTypeManager.DefaultDataClasses.OBJECT) {
return false;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Select.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Select.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Select.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -31,9 +31,10 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
+import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.MultipleElementSymbol;
-import org.teiid.query.sql.symbol.SelectSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -44,7 +45,7 @@
public class Select implements LanguageObject {
/** The set of symbols for the data elements to be selected. */
- private List<SelectSymbol> symbols;
+ private List<Expression> symbols = new ArrayList<Expression>();
/** Flag for whether duplicate removal should be performed on the results */
private boolean distinct;
@@ -57,15 +58,15 @@
* Constructs a default instance of this class.
*/
public Select() {
- symbols = new ArrayList<SelectSymbol>();
+
}
/**
* Constructs an instance of this class from an ordered set of symbols.
* @param symbols The ordered list of symbols
*/
- public Select( List<? extends SelectSymbol> symbols ) {
- this.symbols = new ArrayList<SelectSymbol>( symbols );
+ public Select( List<? extends Expression> symbols ) {
+ this.addSymbols(symbols);
}
// =========================================================================
@@ -91,7 +92,7 @@
* Returns an ordered list of the symbols in the select.
* @param Get list of SelectSymbol in SELECT
*/
- public List<SelectSymbol> getSymbols() {
+ public List<Expression> getSymbols() {
return symbols;
}
@@ -99,8 +100,8 @@
* Sets an ordered list of the symbols in the select.
* @param symbols list of SelectSymbol in SELECT
*/
- public void setSymbols(List<? extends SelectSymbol> symbols) {
- this.symbols = new ArrayList<SelectSymbol>(symbols);
+ public void setSymbols(List<? extends Expression> symbols) {
+ this.symbols = new ArrayList<Expression>(symbols);
}
/**
@@ -108,28 +109,26 @@
* @param index Index to get
* @return The variable identifier at the index
*/
- public SelectSymbol getSymbol( int index ) {
+ public Expression getSymbol( int index ) {
return symbols.get(index);
}
/**
- * Adds a new symbol to the list of symbols.
* @param symbol New symbol
*/
- public void addSymbol( SelectSymbol symbol ) {
- if(symbol != null) {
- symbols.add(symbol);
- }
+ public void addSymbol( Expression symbol ) {
+ if (!(symbol instanceof Symbol) && !(symbol instanceof MultipleElementSymbol)) {
+ symbol = new ExpressionSymbol("expr" + (this.symbols.size() + 1), symbol); //$NON-NLS-1$
+ }
+ this.symbols.add(symbol);
}
-
- /**
- * Adds a new collection of symbols to the list of symbols.
- * @param symbols Collection of SelectSymbols
- */
- public void addSymbols( Collection<? extends SelectSymbol> toAdd) {
- if(symbols != null) {
- this.symbols.addAll(toAdd);
- }
+
+ public void addSymbols( Collection<? extends Expression> toAdd) {
+ if (toAdd != null) {
+ for (Expression expression : toAdd) {
+ this.addSymbol(expression);
+ }
+ }
}
/**
@@ -144,7 +143,7 @@
* @param symbol Symbol to check for
* @return True if the Select contains the symbol
*/
- public boolean containsSymbol( SelectSymbol symbol ) {
+ public boolean containsSymbol( Expression symbol ) {
return symbols.contains(symbol);
}
@@ -174,17 +173,17 @@
* single column.
* @return Ordered list of SingleElementSymbol
*/
- public List<SingleElementSymbol> getProjectedSymbols() {
- ArrayList<SingleElementSymbol> projectedSymbols = new ArrayList<SingleElementSymbol>();
- for (SelectSymbol symbol : symbols) {
- if(symbol instanceof SingleElementSymbol) {
- projectedSymbols.add((SingleElementSymbol)symbol);
- } else {
+ public List<Expression> getProjectedSymbols() {
+ ArrayList<Expression> projectedSymbols = new ArrayList<Expression>();
+ for (Expression symbol : symbols) {
+ if(symbol instanceof MultipleElementSymbol) {
List<ElementSymbol> multiSymbols = ((MultipleElementSymbol)symbol).getElementSymbols();
if(multiSymbols != null) {
projectedSymbols.addAll(multiSymbols);
}
- }
+ } else {
+ projectedSymbols.add(symbol);
+ }
}
return projectedSymbols;
}
@@ -198,7 +197,7 @@
* @return Deep clone
*/
public Object clone() {
- Select copy = new Select(LanguageObject.Util.deepClone(this.symbols, SelectSymbol.class));
+ Select copy = new Select(LanguageObject.Util.deepClone(this.symbols, Expression.class));
copy.setDistinct( isDistinct() );
return copy;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/SetQuery.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/SetQuery.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/SetQuery.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -38,8 +38,8 @@
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
+import org.teiid.query.sql.util.SymbolMap;
/**
@@ -130,30 +130,22 @@
return projectedSymbols;
}
- public static List getTypedProjectedSymbols(List acutal, List projectedTypes, QueryMetadataInterface metadata) {
- List newProject = new ArrayList();
+ public static List<Expression> getTypedProjectedSymbols(List<? extends Expression> acutal, List<Class<?>> projectedTypes, QueryMetadataInterface metadata) {
+ List<Expression> newProject = new ArrayList<Expression>();
for (int i = 0; i < acutal.size(); i++) {
- SingleElementSymbol originalSymbol = (SingleElementSymbol)acutal.get(i);
- SingleElementSymbol symbol = originalSymbol;
- Class type = (Class)projectedTypes.get(i);
+ Expression originalSymbol = acutal.get(i);
+ Expression symbol = originalSymbol;
+ Class<?> type = projectedTypes.get(i);
if (symbol.getType() != type) {
- if (symbol instanceof AliasSymbol) {
- symbol = ((AliasSymbol)symbol).getSymbol();
- }
-
- Expression expr = symbol;
- if (symbol instanceof ExpressionSymbol) {
- expr = ((ExpressionSymbol)symbol).getExpression();
- }
-
+ symbol = SymbolMap.getExpression(originalSymbol);
try {
- symbol = new ExpressionSymbol(originalSymbol.getShortName(), ResolverUtil.convertExpression(expr, DataTypeManager.getDataTypeName(type), metadata));
+ symbol = ResolverUtil.convertExpression(symbol, DataTypeManager.getDataTypeName(type), metadata);
} catch (QueryResolverException err) {
throw new TeiidRuntimeException(err);
}
- if (!(originalSymbol instanceof ExpressionSymbol)) {
- symbol = new AliasSymbol(originalSymbol.getShortName(), symbol);
+ if (originalSymbol instanceof Symbol) {
+ symbol = new AliasSymbol(Symbol.getShortName(originalSymbol), symbol);
}
}
newProject.add(symbol);
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,7 +24,6 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@@ -213,9 +212,6 @@
copy.setProcedureCallableName(getProcedureCallableName());
copy.setProcedureID(getProcedureID());
copy.setGroup(getGroup().clone());
- if (getTemporaryMetadata() != null){
- copy.setTemporaryMetadata(new HashMap(getTemporaryMetadata()));
- }
copy.callableName = callableName;
copy.calledWithReturn = calledWithReturn;
List<SPParameter> params = getParameters();
Modified: trunk/engine/src/main/java/org/teiid/query/sql/proc/Block.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/proc/Block.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/proc/Block.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -32,6 +32,7 @@
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.proc.Statement.Labeled;
import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -98,11 +99,11 @@
statements.add(new CommandStatement(cmd));
stmt.setCommand(null);
stmt.setExpression(null);
- String fullName = ProcedureReservedWords.VARIABLES+ElementSymbol.SEPARATOR+ProcedureReservedWords.ROWCOUNT;
if (stmt.getVariable().getShortName().equalsIgnoreCase(ProcedureReservedWords.ROWCOUNT)
- && stmt.getVariable().getCanonicalName().equals(fullName)) {
+ && stmt.getVariable().getGroupSymbol() != null && stmt.getVariable().getGroupSymbol().getName().equalsIgnoreCase(ProcedureReservedWords.VARIABLES)) {
return;
}
+ String fullName = ProcedureReservedWords.VARIABLES+Symbol.SEPARATOR+ProcedureReservedWords.ROWCOUNT;
stmt.setExpression(new ElementSymbol(fullName));
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/proc/CreateProcedureCommand.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/proc/CreateProcedureCommand.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/proc/CreateProcedureCommand.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -33,7 +33,7 @@
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.lang.StoredProcedure;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -203,7 +203,7 @@
//user may have not entered any query yet
return Collections.EMPTY_LIST;
}
- List<? extends SingleElementSymbol> symbols = this.resultsCommand.getProjectedSymbols();
+ List<? extends Expression> symbols = this.resultsCommand.getProjectedSymbols();
if (this.resultsCommand instanceof StoredProcedure) {
StoredProcedure sp = (StoredProcedure)this.resultsCommand;
if (sp.isCallableStatement()) {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/proc/TriggerAction.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/proc/TriggerAction.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/proc/TriggerAction.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -27,7 +27,7 @@
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.SQLStringVisitor;
public class TriggerAction extends Command {
@@ -98,7 +98,7 @@
}
@Override
- public List<SingleElementSymbol> getProjectedSymbols() {
+ public List<Expression> getProjectedSymbols() {
return Command.getUpdateCommandSymbol();
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -46,7 +46,7 @@
* floating point expressions not of type bigdecimal return type double and bigdecimal maps to
* bigdecimal.</p>
*/
-public class AggregateSymbol extends ExpressionSymbol {
+public class AggregateSymbol extends Function implements DerivedExpression {
public enum Type {
COUNT,
@@ -107,8 +107,8 @@
* @param canonicalName
* @since 4.3
*/
- protected AggregateSymbol(String name, String canonicalName, Type aggregateFunction, boolean isDistinct, Expression expression) {
- super(name, canonicalName, expression);
+ protected AggregateSymbol(String name, Type aggregateFunction, boolean isDistinct, Expression expression) {
+ super(name, expression == null?new Expression[0]:new Expression[] {expression});
this.aggregate = aggregateFunction;
this.distinct = isDistinct;
}
@@ -121,7 +121,7 @@
* @param expression Contained expression
*/
public AggregateSymbol(String name, String aggregateFunction, boolean isDistinct, Expression expression) {
- super(name, expression);
+ super(name, expression == null?new Expression[0]:new Expression[] {expression});
this.aggregate = Type.valueOf(aggregateFunction);
this.distinct = isDistinct;
}
@@ -235,9 +235,9 @@
public Object clone() {
AggregateSymbol copy = null;
if(getExpression() != null) {
- copy = new AggregateSymbol(getName(), getCanonical(), getAggregateFunction(), isDistinct(), (Expression) getExpression().clone());
+ copy = new AggregateSymbol(getName(), getAggregateFunction(), isDistinct(), (Expression) getExpression().clone());
} else {
- copy = new AggregateSymbol(getName(), getCanonical(), getAggregateFunction(), isDistinct(), null);
+ copy = new AggregateSymbol(getName(), getAggregateFunction(), isDistinct(), null);
}
if (orderBy != null) {
copy.setOrderBy(orderBy.clone());
@@ -334,5 +334,15 @@
public void setWindowed(boolean isWindowed) {
this.isWindowed = isWindowed;
}
+
+ public Expression getExpression() {
+ if (this.getArgs().length == 0) {
+ return null;
+ }
+ if (this.getArgs().length > 1) {
+ throw new AssertionError("getExpression should not be used with a non-unary aggregate");
+ }
+ return this.getArg(0);
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/AliasSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/AliasSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/AliasSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -34,9 +34,9 @@
* the type of it's underlying SingleElementSymbol. AliasSymbols are typically
* applied to ElementSymbol, ExpressionSymbol, and AggregateSymbol.
*/
-public class AliasSymbol extends SingleElementSymbol {
+public class AliasSymbol extends Symbol implements DerivedExpression {
- private SingleElementSymbol symbol;
+ private Expression symbol;
/**
* Constructor used for cloning
@@ -44,8 +44,8 @@
* @param canonicalName
* @since 4.3
*/
- private AliasSymbol(String name, String canonicalName, SingleElementSymbol symbol) {
- super(name, canonicalName);
+ private AliasSymbol(String name, String canonicalName, Expression symbol) {
+ super(name);
setSymbol(symbol);
}
@@ -54,16 +54,16 @@
* @param name Name of the alias
* @param symbol Underlying symbol
*/
- public AliasSymbol(String name, SingleElementSymbol symbol) {
+ public AliasSymbol(String name, Expression symbol) {
super(name);
- setSymbol(symbol);
+ setSymbol(symbol);
}
/**
* Get the underlying symbol
* @return Underlying symbol
*/
- public SingleElementSymbol getSymbol() {
+ public Expression getSymbol() {
return this.symbol;
}
@@ -71,7 +71,7 @@
* Set the underlying symbol
* @param symbol New symbol
*/
- public void setSymbol(SingleElementSymbol symbol) {
+ public void setSymbol(Expression symbol) {
if(symbol instanceof AliasSymbol || symbol == null){
Assertion.failed(QueryPlugin.Util.getString("ERR.015.010.0029")); //$NON-NLS-1$
}
@@ -86,19 +86,6 @@
return this.symbol.getType();
}
- /**
- * Returns true if this symbol has been completely resolved with respect
- * to actual runtime metadata. A resolved symbol has been validated that
- * it refers to actual metadata and will have references to the real metadata
- * IDs if necessary. Different types of symbols determine their resolution
- * in different ways, so this method is abstract and must be implemented
- * by subclasses.
- * @return True if resolved with runtime metadata
- */
- public boolean isResolved() {
- return this.symbol.isResolved();
- }
-
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@@ -107,8 +94,8 @@
* Return a copy of this object.
*/
public Object clone() {
- SingleElementSymbol symbolCopy = (SingleElementSymbol) this.symbol.clone();
- AliasSymbol result = new AliasSymbol(getName(), getCanonical(), symbolCopy);
+ Expression symbolCopy = (Expression) this.symbol.clone();
+ AliasSymbol result = new AliasSymbol(getName(), getShortName(), symbolCopy);
result.setOutputName(this.getOutputName());
return result;
}
@@ -125,7 +112,7 @@
return false;
}
AliasSymbol other = (AliasSymbol)obj;
- return this.getCanonicalName().equals(other.getCanonicalName()) && this.symbol.equals(other.symbol);
+ return this.getName().equals(other.getName()) && this.symbol.equals(other.symbol);
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/CaseExpression.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/CaseExpression.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/CaseExpression.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -125,19 +125,6 @@
setThen(then);
}
- /**
- * @see org.teiid.query.sql.symbol.Expression#isResolved()
- */
- public boolean isResolved() {
- if (!expression.isResolved()) return false;
- for (int i = 0; i < getWhenCount(); i++) {
- if (when.get(i) != null && !((Expression)when.get(i)).isResolved()) return false;
- if (getThen().get(i) != null && !((Expression)getThen().get(i)).isResolved()) return false;
- }
- if (getElseExpression() != null && !getElseExpression().isResolved()) return false;
- return getType() != null;
- }
-
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -91,6 +91,14 @@
public Class<?> getType() {
return this.type;
}
+
+ /**
+ * TODO: remove me when a null type is supported
+ * @param type
+ */
+ public void setType(Class<?> type) {
+ this.type = type;
+ }
/**
* Get value of constant
@@ -108,15 +116,6 @@
return value==null;
}
- /**
- * Return true if expression has been fully resolved. Typically the QueryResolver component
- * will handle resolution of an expression.
- * @return True if resolved
- */
- public boolean isResolved() {
- return true;
- }
-
public void setMultiValued(List<?> value) {
this.multiValued = true;
this.value = value;
Added: trunk/engine/src/main/java/org/teiid/query/sql/symbol/DerivedExpression.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/DerivedExpression.java (rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/DerivedExpression.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -0,0 +1,27 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.sql.symbol;
+
+public interface DerivedExpression extends Expression {
+
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/sql/symbol/DerivedExpression.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/ElementSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/ElementSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/ElementSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -36,7 +36,7 @@
* is set to false. Common uses when this is set to true are for variables used
* within a command, correlated elements within a command, etc. </p>
*/
-public class ElementSymbol extends SingleElementSymbol {
+public class ElementSymbol extends Symbol implements DerivedExpression {
public enum DisplayMode {
FULLY_QUALIFIED, // symbol name
@@ -52,16 +52,6 @@
private DisplayMode displayMode = DisplayMode.OUTPUT_NAME;
/**
- * Constructor used for cloning
- * @param name
- * @param canonicalName
- * @since 4.3
- */
- protected ElementSymbol(String name, String canonicalName) {
- super(name, canonicalName);
- }
-
- /**
* Simple constructor taking just a name. By default will display fully qualified name
* @param name Name of the symbol, may or may not be fully qualified
*/
@@ -69,8 +59,8 @@
super(name);
}
- public ElementSymbol(String shortName, String shortCanonical, GroupSymbol group) {
- super(shortName, shortCanonical);
+ public ElementSymbol(String shortName, GroupSymbol group) {
+ this.setShortName(shortName);
this.groupSymbol = group;
}
@@ -87,20 +77,12 @@
@Override
public String getName() {
if (this.groupSymbol != null) {
- return this.groupSymbol.getName() + SingleElementSymbol.SEPARATOR + this.getShortName();
+ return this.groupSymbol.getName() + Symbol.SEPARATOR + this.getShortName();
}
return super.getName();
}
@Override
- public String getCanonicalName() {
- if (this.groupSymbol != null) {
- return this.groupSymbol.getCanonicalName() + SingleElementSymbol.SEPARATOR + this.getShortCanonicalName();
- }
- return super.getCanonicalName();
- }
-
- @Override
public boolean equals(Object obj) {
if (this.groupSymbol == null) {
return super.equals(obj);
@@ -115,13 +97,13 @@
if (other.groupSymbol == null) {
return super.equals(obj);
}
- return this.groupSymbol.equals(other.groupSymbol) && this.getShortCanonicalName().equals(other.getShortCanonicalName());
+ return this.groupSymbol.equals(other.groupSymbol) && this.getShortName().equals(other.getShortName());
}
@Override
public int hashCode() {
if (this.groupSymbol != null) {
- return HashCodeUtil.hashCode(this.groupSymbol.hashCode(), this.getShortCanonicalName().hashCode());
+ return HashCodeUtil.hashCode(this.groupSymbol.hashCode(), this.getShortName().hashCode());
}
return super.hashCode();
}
@@ -240,21 +222,12 @@
visitor.visit(this);
}
- /**
- * If metadataID is not null and type is not null return true,
- * else return false
- * @return boolean if metadataID is null or not
- */
- public boolean isResolved() {
- return(this.metadataID != null && this.type != null);
- }
-
/**
* Return a deep copy of this object.
* @return Deep copy of this object
*/
public ElementSymbol clone() {
- ElementSymbol copy = new ElementSymbol(getShortName(), getCanonical());
+ ElementSymbol copy = new ElementSymbol(getShortName(), null);
if(getGroupSymbol() != null) {
copy.setGroupSymbol(getGroupSymbol().clone());
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Expression.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Expression.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Expression.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -32,17 +32,9 @@
public interface Expression extends LanguageObject {
/**
- * Return true if expression has been fully resolved. Typically the QueryResolver component
- * will handle resolution of an expression.
- * @return True if resolved
+ * Get the return type of this expression.
+ * @return Java class may be null prior to being resolved
*/
- boolean isResolved();
-
- /**
- * Get the return type of this expression. This method will not necessarily work right
- * before resolution ({@link #isResolved()} returns true).
- * @return Java class name
- */
- Class getType();
+ Class<?> getType();
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/ExpressionSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/ExpressionSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/ExpressionSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,31 +22,12 @@
package org.teiid.query.sql.symbol;
-import org.teiid.query.sql.*;
+import org.teiid.query.sql.LanguageVisitor;
-/**
- * <p>This is a subclass of Symbol representing an expression in the SELECT clause. The
- * expression may be a constant, function, or scalar subquery. The name of this symbol is always generated
- * and typically should not be displayed. If necessary, the ExpressionSymbol may be
- * wrapped by an AliasSymbol to register the name in a query. The definition of the
- * symbol is the functional expression. Resolution will produce a list of groups and
- * elements used by the expression.</p>
- */
-public class ExpressionSymbol extends SingleElementSymbol {
+public class ExpressionSymbol extends Symbol implements DerivedExpression {
private Expression expression;
/**
- * Constructor used for cloning
- * @param name
- * @param canonicalName
- * @since 4.3
- */
- protected ExpressionSymbol(String name, String canonicalName, Expression expression) {
- super(name, canonicalName);
- this.expression = expression;
- }
-
- /**
* Construct an ExpressionSymbol with name and expression.
*/
public ExpressionSymbol(String name, Expression expression) {
@@ -82,14 +63,6 @@
visitor.visit(this);
}
- /**
- * If elementSymbols is not null return true, else return false
- * @return boolean True if expression symbol has been resolved to element symbols
- */
- public boolean isResolved() {
- return true;
- }
-
/**
* Return a deep copy of this object
* @return Deep copy of this object
@@ -99,7 +72,7 @@
if(getExpression() != null) {
clonedExpr = (Expression) getExpression().clone();
}
- ExpressionSymbol copy = new ExpressionSymbol(getName(), getCanonical(), clonedExpr);
+ ExpressionSymbol copy = new ExpressionSymbol(getName(), clonedExpr);
return copy;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Function.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Function.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Function.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -40,7 +40,7 @@
private String name;
private Expression[] args;
- private Class type;
+ private Class<?> type;
private FunctionDescriptor descriptor;
private boolean implicit = false;
@@ -107,6 +107,10 @@
return this.implicit;
}
+ public void setImplicit(boolean implicit) {
+ this.implicit = implicit;
+ }
+
/**
* Insert a conversion function at specified index. This is a convenience
* method to insert a conversion into the function tree.
@@ -115,8 +119,8 @@
*/
public void insertConversion(int index, FunctionDescriptor functionDescriptor) {
// Get target type for conversion
- Class type = functionDescriptor.getReturnType();
- String typeName = DataTypeManager.getDataTypeName(type);
+ Class<?> t = functionDescriptor.getReturnType();
+ String typeName = DataTypeManager.getDataTypeName(t);
// Pull old expression at index
Expression newArg[] = new Expression[] { args[index], new Constant(typeName) };
@@ -127,7 +131,7 @@
// Set function descriptor and type of new function
func.setFunctionDescriptor(functionDescriptor);
- func.setType(type);
+ func.setType(t);
func.makeImplicit();
}
@@ -135,7 +139,7 @@
* Get type of function, if known
* @return Java class name of type, or null if not yet resolved
*/
- public Class getType() {
+ public Class<?> getType() {
return this.type;
}
@@ -143,7 +147,7 @@
* Set type of function
* @param type New type
*/
- public void setType(Class type) {
+ public void setType(Class<?> type) {
this.type = type;
}
@@ -163,21 +167,6 @@
this.descriptor = fd;
}
- /**
- * Return true if expression has been fully resolved. Typically the QueryResolver component
- * will handle resolution of an expression.
- * @return True if resolved
- */
- public boolean isResolved() {
- boolean resolved = true;
- for(int i=0; i<args.length; i++) {
- if(! args[i].isResolved()) {
- resolved = false;
- }
- }
- return resolved;
- }
-
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@@ -235,7 +224,6 @@
* @return Deep copy of the object
*/
public Object clone() {
- Expression[] args = getArgs();
Expression[] copyArgs = new Expression[args.length];
for(int i=0; i<args.length; i++) {
if(args[i] != null) {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/GroupSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/GroupSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/GroupSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,10 +22,8 @@
package org.teiid.query.sql.symbol;
-import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
-import org.teiid.core.util.StringUtil;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.LanguageVisitor;
@@ -59,20 +57,7 @@
private String outputDefinition;
private String schema;
- private String canonicalSchema;
- /**
- * Cloning constructor
- * @param name
- * @param canonicalName
- * @param definition
- * @since 4.3
- */
- protected GroupSymbol(String name, String canonicalName, String definition) {
- super(name, canonicalName);
- setDefinition(definition);
- }
-
/**
* Construct a symbol with a name.
* @param name Name of the symbol
@@ -93,6 +78,12 @@
setDefinition(definition);
}
+ private GroupSymbol(String schmea, String shortName, String definition) {
+ this.schema = schmea;
+ this.setShortName(shortName);
+ this.setDefinition(definition);
+ }
+
public Object getModelMetadataId() {
return modelMetadataId;
}
@@ -186,7 +177,7 @@
* @return -1, 0, or 1 depending on how this compares to group
*/
public int compareTo(GroupSymbol o) {
- return getCanonicalName().compareTo(o.getCanonicalName());
+ return getName().compareTo(o.getName());
}
/**
@@ -194,9 +185,7 @@
* @return Deep copy of the object
*/
public GroupSymbol clone() {
- GroupSymbol copy = new GroupSymbol(getShortName(), getCanonical(), getDefinition());
- copy.schema = this.schema;
- copy.canonicalSchema = this.canonicalSchema;
+ GroupSymbol copy = new GroupSymbol(schema, getShortName(), getDefinition());
if(getMetadataID() != null) {
copy.setMetadataID(getMetadataID());
}
@@ -225,9 +214,9 @@
GroupSymbol other = (GroupSymbol) obj;
if (this.schema == null || other.schema == null) {
- return this.getCanonicalName().equals(other.getCanonicalName());
+ return this.getName().equals(other.getName());
}
- return EquivalenceUtil.areEqual(this.getCanonicalSchema(), other.getCanonicalSchema()) && this.getShortCanonicalName().equals(other.getShortCanonicalName());
+ return EquivalenceUtil.areEqual(this.schema, other.schema) && this.getShortName().equals(other.getShortName());
}
public boolean hasAlias() {
@@ -280,23 +269,15 @@
@Override
public String getName() {
if (this.schema != null) {
- return this.schema + SingleElementSymbol.SEPARATOR + this.getShortName();
+ return this.schema + Symbol.SEPARATOR + this.getShortName();
}
return super.getName();
}
@Override
- public String getCanonicalName() {
- if (this.schema != null) {
- return this.getCanonicalSchema() + SingleElementSymbol.SEPARATOR + this.getShortCanonicalName();
- }
- return super.getCanonicalName();
- }
-
- @Override
public int hashCode() {
if (this.schema != null) {
- return HashCodeUtil.hashCode(this.getCanonicalSchema().hashCode(), this.getShortCanonicalName().hashCode());
+ return HashCodeUtil.hashCode(this.schema.hashCode(), this.getShortName().hashCode());
}
return super.hashCode();
}
@@ -309,17 +290,9 @@
} else {
this.schema = null;
}
- this.canonicalSchema = null;
super.setShortName(name);
}
- private String getCanonicalSchema() {
- if (this.canonicalSchema == null && this.schema != null) {
- this.canonicalSchema = DataTypeManager.getCanonicalString(StringUtil.toUpperCase(this.schema));
- }
- return canonicalSchema;
- }
-
public String getSchema() {
return schema;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/MultipleElementSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/MultipleElementSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/MultipleElementSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -34,7 +34,7 @@
/**
* <p>This is a subclass of Symbol representing multiple output columns.</p>
*/
-public class MultipleElementSymbol implements SelectSymbol {
+public class MultipleElementSymbol implements Expression {
private List<ElementSymbol> elementSymbols;
private GroupSymbol group;
@@ -48,6 +48,11 @@
public MultipleElementSymbol(String name){
this.group = new GroupSymbol(name);
}
+
+ @Override
+ public Class<?> getType() {
+ return null;
+ }
/**
* Set the {@link ElementSymbol}s that this symbol refers to
@@ -76,15 +81,6 @@
getElementSymbols().add(symbol);
}
- /**
- * True if multiple element symbol has been resolved by having all referring element
- * symbols set.
- * @return True if symbol has been resolved
- */
- public boolean isResolved() {
- return(elementSymbols != null);
- }
-
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/QueryString.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/QueryString.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/QueryString.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -92,14 +92,4 @@
return DefaultDataClasses.STRING;
}
- @Override
- public boolean isResolved() {
- for (DerivedColumn col : args) {
- if (!col.getExpression().isResolved()) {
- return false;
- }
- }
- return true;
- }
-
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -78,15 +78,11 @@
this.positional = ref.positional;
this.type = ref.type;
if (ref.expression != null) {
- this.expression = (ElementSymbol)ref.expression.clone();
+ this.expression = ref.expression.clone();
}
this.constraint = ref.constraint;
}
- public boolean isResolved() {
- return (expression != null || this.type != null);
- }
-
public int getIndex() {
return this.refIndex;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -78,13 +78,6 @@
}
/**
- * @see org.teiid.query.sql.symbol.Expression#isResolved()
- */
- public boolean isResolved() {
- return (this.getType() != null);
- }
-
- /**
* @see org.teiid.query.sql.symbol.Expression#getType()
*/
public Class<?> getType() {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/SearchedCaseExpression.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/SearchedCaseExpression.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/SearchedCaseExpression.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -100,17 +100,6 @@
setThen(then);
}
- /**
- * @see org.teiid.query.sql.symbol.Expression#isResolved()
- */
- public boolean isResolved() {
- for (int i = 0; i < getWhenCount(); i++) {
- if (getThen().get(i) != null && !((Expression)getThen().get(i)).isResolved()) return false;
- }
- if (getElseExpression() != null && !getElseExpression().isResolved()) return false;
- return getType() != null;
- }
-
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Deleted: trunk/engine/src/main/java/org/teiid/query/sql/symbol/SelectSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/SelectSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/SelectSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1,35 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.query.sql.symbol;
-
-import org.teiid.query.sql.LanguageObject;
-
-/**
- * This is the server's representation of a metadata symbol that can be used
- * in a SELECT statement. It exists as a typing mechanism and to provide a single
- * additional method to get an ordered list of elements from each symbol.
- */
-public interface SelectSymbol extends LanguageObject {
-
-
-}
Deleted: trunk/engine/src/main/java/org/teiid/query/sql/symbol/SingleElementSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/SingleElementSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/SingleElementSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1,64 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.query.sql.symbol;
-
-
-
-/**
- * <p>This is a subclass of Symbol representing a single output column.</p>
- */
-public abstract class SingleElementSymbol extends Symbol implements Expression, SelectSymbol {
-
- /**
- * Character used to delimit name components in a symbol
- */
- public static final String SEPARATOR = "."; //$NON-NLS-1$
-
- /**
- * Passthrough constructor used for cloning
- * @param name
- * @param canonicalName
- * @param hashcode
- * @since 4.3
- */
- protected SingleElementSymbol(String name, String canonicalName) {
- super(name, canonicalName);
- }
-
- /**
- * Construct a symbol with a name
- * @param name Name of symbol
- */
- public SingleElementSymbol(String name){
- super(name);
- }
-
- public static String getShortName(String name) {
- int index = name.lastIndexOf(SEPARATOR);
- if(index >= 0) {
- return name.substring(index+1);
- }
- return name;
- }
-
-}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Symbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Symbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Symbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,7 +23,6 @@
package org.teiid.query.sql.symbol;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.core.util.StringUtil;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -48,11 +47,6 @@
*/
private String shortName;
- /**
- * upper case of name
- */
- private String canonicalShortName;
-
/**
* Prior to resolving null, after resolving it is the exact string
* entered in the query.
@@ -60,21 +54,13 @@
* The AliasGenerator can also set this value as necessary for the data tier.
*/
protected String outputName;
-
- /**
- * Constructor to be used for cloning instances. Calls to String.toUpperCase() to generate the canonical names
- * were the big performance hit during cloning, so this method allows subclasses to simply pass in the canonical name
- * to avoid toUpperCase().
- * @param name
- * @param canonicalName
- * @since 4.3
- */
- protected Symbol(String name, String canonicalName) {
- this.shortName = name;
- this.canonicalShortName = canonicalName;
- }
/**
+ * Character used to delimit name components in a symbol
+ */
+ public static final String SEPARATOR = "."; //$NON-NLS-1$
+
+ /**
* Construct a symbol with a name.
* @param name Name of the symbol
* @throws IllegalArgumentException If name is null
@@ -83,6 +69,10 @@
this.setName(name);
}
+ public Symbol() {
+
+ }
+
protected void setName(String name) {
setShortName(name);
}
@@ -99,8 +89,6 @@
}
this.shortName = DataTypeManager.getCanonicalString(name);
this.outputName = null;
- // Canonical name is lazily created
- this.canonicalShortName = null;
}
/**
@@ -112,29 +100,6 @@
}
/**
- * Get canonical name for comparisons
- * @return Canonical name for comparisons
- */
- public String getCanonicalName() {
- return getShortCanonicalName();
- }
-
- public void setShortCanonicalName(String shortCanonicalName) {
- this.canonicalShortName = shortCanonicalName;
- }
-
- /**
- * Returns true if this symbol has been completely resolved with respect
- * to actual runtime metadata. A resolved symbol has been validated that
- * it refers to actual metadata and will have references to the real metadata
- * IDs if necessary. Different types of symbols determine their resolution
- * in different ways, so this method is abstract and must be implemented
- * by subclasses.
- * @return True if resolved with runtime metadata
- */
- public abstract boolean isResolved();
-
- /**
* Returns string representation of this symbol.
* @return String representing the symbol
*/
@@ -147,7 +112,7 @@
* @return Hash code
*/
public int hashCode() {
- return this.getCanonicalName().hashCode();
+ return this.shortName.hashCode();
}
/**
@@ -166,8 +131,8 @@
if(!(obj instanceof Symbol)) {
return false;
}
- String otherFqn = ((Symbol)obj).getCanonicalName();
- String thisFqn = getCanonicalName();
+ String otherFqn = ((Symbol)obj).getName();
+ String thisFqn = getName();
return thisFqn.equals(otherFqn);
}
@@ -176,10 +141,6 @@
*/
public abstract Object clone();
- protected final String getCanonical() {
- return canonicalShortName;
- }
-
public String getOutputName() {
return this.outputName == null ? getName() : this.outputName;
}
@@ -196,16 +157,33 @@
return shortName;
}
- /**
- * Get the short name of the element
- * @return Short name of the symbol (un-dotted)
- */
- public final String getShortCanonicalName() {
- if (canonicalShortName == null) {
- canonicalShortName = DataTypeManager.getCanonicalString(StringUtil.toUpperCase(shortName));
- }
- return this.canonicalShortName;
- }
+ public static String getShortName(Expression ex) {
+ if (ex instanceof Symbol) {
+ return ((Symbol)ex).getShortName();
+ }
+ return "expr"; //$NON-NLS-1$
+ }
+
+ public static String getName(Expression ex) {
+ if (ex instanceof Symbol) {
+ return ((Symbol)ex).getName();
+ }
+ return "expr"; //$NON-NLS-1$
+ }
+
+ public static String getOutputName(Expression ex) {
+ if (ex instanceof Symbol) {
+ return ((Symbol)ex).getOutputName();
+ }
+ return "expr"; //$NON-NLS-1$
+ }
+ public static String getShortName(String name) {
+ int index = name.lastIndexOf(Symbol.SEPARATOR);
+ if(index >= 0) {
+ return name.substring(index+1);
+ }
+ return name;
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/TextLine.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/TextLine.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/TextLine.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -92,16 +92,6 @@
}
@Override
- public boolean isResolved() {
- for (DerivedColumn arg : this.expressions) {
- if (!arg.getExpression().isResolved()) {
- return false;
- }
- }
- return true;
- }
-
- @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/WindowFunction.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/WindowFunction.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/WindowFunction.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,22 +24,15 @@
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
+import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.visitor.SQLStringVisitor;
-public class WindowFunction extends SingleElementSymbol {
+public class WindowFunction implements LanguageObject, DerivedExpression {
private AggregateSymbol function;
private WindowSpecification windowSpecification;
- public WindowFunction(String name) {
- super(name);
- }
-
- protected WindowFunction(String name, String canonical) {
- super(name, canonical);
- }
-
public AggregateSymbol getFunction() {
return function;
}
@@ -63,11 +56,6 @@
}
@Override
- public boolean isResolved() {
- return function.isResolved();
- }
-
- @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@@ -92,7 +80,7 @@
@Override
public WindowFunction clone() {
- WindowFunction clone = new WindowFunction(this.getName(), this.getCanonical());
+ WindowFunction clone = new WindowFunction();
clone.setFunction((AggregateSymbol) this.function.clone());
clone.setWindowSpecification(this.windowSpecification.clone());
return clone;
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLElement.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLElement.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLElement.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -86,16 +86,6 @@
}
@Override
- public boolean isResolved() {
- for (Expression arg : content) {
- if (!arg.isResolved()) {
- return false;
- }
- }
- return true;
- }
-
- @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLForest.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLForest.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLForest.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -59,16 +59,6 @@
}
@Override
- public boolean isResolved() {
- for (DerivedColumn arg : args) {
- if (!arg.getExpression().isResolved()) {
- return false;
- }
- }
- return true;
- }
-
- @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLParse.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLParse.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLParse.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -64,11 +64,6 @@
}
@Override
- public boolean isResolved() {
- return expression.isResolved();
- }
-
- @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -33,11 +33,6 @@
this.emptyOnEmpty = emptyOnEmpty;
}
- @Override
- public boolean isResolved() {
- return xqueryExpression != null;
- }
-
public List<DerivedColumn> getPassing() {
return passing;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLSerialize.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLSerialize.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLSerialize.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -72,11 +72,6 @@
}
@Override
- public boolean isResolved() {
- return expression.isResolved();
- }
-
- @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/util/SymbolMap.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/util/SymbolMap.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/util/SymbolMap.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,13 +35,11 @@
import org.teiid.core.util.Assertion;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.resolver.util.ResolverUtil;
-import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
public class SymbolMap {
@@ -55,7 +53,7 @@
public SymbolMap clone() {
SymbolMap clonedMap = new SymbolMap();
for (Map.Entry<ElementSymbol, Expression> entry : map.entrySet()) {
- clonedMap.addMapping((ElementSymbol)entry.getKey().clone(), (Expression)entry.getValue().clone());
+ clonedMap.addMapping(entry.getKey().clone(), (Expression)entry.getValue().clone());
}
return clonedMap;
}
@@ -77,14 +75,11 @@
}
public static final Expression getExpression(Expression symbol) {
- if (!(symbol instanceof SingleElementSymbol)) {
- return symbol;
- }
if (symbol instanceof AliasSymbol) {
symbol = ((AliasSymbol)symbol).getSymbol();
}
- if (symbol instanceof ExpressionSymbol && !(symbol instanceof AggregateSymbol)) {
+ if (symbol instanceof ExpressionSymbol) {
ExpressionSymbol exprSymbol = (ExpressionSymbol)symbol;
return exprSymbol.getExpression();
}
@@ -113,7 +108,7 @@
}
public static final SymbolMap createSymbolMap(GroupSymbol virtualGroup,
- List<? extends SingleElementSymbol> projectCols, QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException {
+ List<? extends Expression> projectCols, QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException {
return createSymbolMap(ResolverUtil.resolveElementsInGroup(virtualGroup, metadata), projectCols);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -42,6 +42,7 @@
import org.teiid.query.sql.navigator.DeepPreOrderNavigator;
import org.teiid.query.sql.navigator.PreOrderNavigator;
import org.teiid.query.sql.symbol.AggregateSymbol;
+import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.ExpressionSymbol;
@@ -116,6 +117,10 @@
evaluationNotPossible(EvaluationLevel.PUSH_DOWN);
}
+ public void visit(AliasSymbol obj) {
+ evaluationNotPossible(EvaluationLevel.PUSH_DOWN);
+ }
+
public void visit(AggregateSymbol obj) {
evaluationNotPossible(EvaluationLevel.PUSH_DOWN);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/ExpressionMappingVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/ExpressionMappingVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/ExpressionMappingVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -33,44 +33,12 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
-import org.teiid.query.sql.lang.BetweenCriteria;
-import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.DependentSetCriteria;
-import org.teiid.query.sql.lang.DynamicCommand;
-import org.teiid.query.sql.lang.ExpressionCriteria;
-import org.teiid.query.sql.lang.GroupBy;
-import org.teiid.query.sql.lang.Insert;
-import org.teiid.query.sql.lang.IsNullCriteria;
-import org.teiid.query.sql.lang.Limit;
-import org.teiid.query.sql.lang.MatchCriteria;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.SPParameter;
-import org.teiid.query.sql.lang.Select;
-import org.teiid.query.sql.lang.SetClause;
-import org.teiid.query.sql.lang.SetCriteria;
-import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.lang.XMLTable;
+import org.teiid.query.sql.lang.*;
import org.teiid.query.sql.lang.XMLTable.XMLColumn;
import org.teiid.query.sql.navigator.PreOrPostOrderNavigator;
import org.teiid.query.sql.navigator.PreOrderNavigator;
import org.teiid.query.sql.proc.AssignmentStatement;
-import org.teiid.query.sql.symbol.AggregateSymbol;
-import org.teiid.query.sql.symbol.AliasSymbol;
-import org.teiid.query.sql.symbol.CaseExpression;
-import org.teiid.query.sql.symbol.DerivedColumn;
-import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.Function;
-import org.teiid.query.sql.symbol.QueryString;
-import org.teiid.query.sql.symbol.SearchedCaseExpression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
-import org.teiid.query.sql.symbol.WindowSpecification;
-import org.teiid.query.sql.symbol.XMLElement;
-import org.teiid.query.sql.symbol.XMLParse;
-import org.teiid.query.sql.symbol.XMLSerialize;
+import org.teiid.query.sql.symbol.*;
/**
@@ -101,7 +69,18 @@
}
public void visit(Select obj) {
- replaceSymbols(obj.getSymbols(), true);
+ List<Expression> symbols = obj.getSymbols();
+ for (int i = 0; i < symbols.size(); i++) {
+ Expression symbol = symbols.get(i);
+
+ if (symbol instanceof MultipleElementSymbol) {
+ continue;
+ }
+
+ Expression replacmentSymbol = replaceSymbol(symbol, true);
+
+ symbols.set(i, replacmentSymbol);
+ }
}
public boolean isClone() {
@@ -141,39 +120,21 @@
obj.setExpression(replaceExpression(obj.getExpression()));
}
- private void replaceSymbols(List symbols, boolean alias) {
- for (int i = 0; i < symbols.size(); i++) {
- Object symbol = symbols.get(i);
-
- if (symbol instanceof SingleElementSymbol) {
- SingleElementSymbol ses = (SingleElementSymbol)symbol;
- SingleElementSymbol replacmentSymbol = replaceSymbol(ses, alias);
-
- symbols.set(i, replacmentSymbol);
- }
- }
- }
-
- private SingleElementSymbol replaceSymbol(SingleElementSymbol ses,
+ private Expression replaceSymbol(Expression ses,
boolean alias) {
- SingleElementSymbol replacmentSymbol = null;
-
Expression expr = ses;
- if (ses instanceof ExpressionSymbol && !(ses instanceof AggregateSymbol)) {
+ String name = Symbol.getShortName(ses);
+ if (ses instanceof ExpressionSymbol) {
expr = ((ExpressionSymbol)ses).getExpression();
}
- Expression replacement = replaceExpression(expr);
+ Expression replacmentSymbol = replaceExpression(expr);
- if (replacement instanceof SingleElementSymbol) {
- replacmentSymbol = (SingleElementSymbol)replacement;
- } else {
- replacmentSymbol = new ExpressionSymbol(ses.getShortName(), replacement);
+ if (!(replacmentSymbol instanceof Symbol)) {
+ replacmentSymbol = new ExpressionSymbol(name, replacmentSymbol);
+ } else if (alias && createAliases() && !Symbol.getShortName(replacmentSymbol).equals(name)) {
+ replacmentSymbol = new AliasSymbol(name, replacmentSymbol);
}
-
- if (alias && createAliases() && !replacmentSymbol.getShortCanonicalName().equals(ses.getShortCanonicalName())) {
- replacmentSymbol = new AliasSymbol(ses.getShortName(), replacmentSymbol);
- }
return replacmentSymbol;
}
@@ -182,12 +143,7 @@
*/
public void visit(AliasSymbol obj) {
Expression replacement = replaceExpression(obj.getSymbol());
-
- if (replacement instanceof SingleElementSymbol) {
- obj.setSymbol((SingleElementSymbol)replacement);
- } else {
- obj.setSymbol(new ExpressionSymbol(obj.getName(), replacement));
- }
+ obj.setSymbol(replacement);
}
public void visit(ExpressionSymbol expr) {
@@ -325,9 +281,7 @@
}
public void visit(AggregateSymbol obj) {
- if (obj.getExpression() != null) {
- obj.setExpression(replaceExpression(obj.getExpression()));
- }
+ visit((Function)obj);
if (obj.getCondition() != null) {
obj.setCondition(replaceExpression(obj.getCondition()));
}
@@ -347,7 +301,7 @@
@Override
public void visit(OrderByItem obj) {
- obj.setSymbol(replaceSymbol(obj.getSymbol(), true));
+ obj.setSymbol(replaceSymbol(obj.getSymbol(), obj.getExpressionPosition() != -1));
}
public void visit(Limit obj) {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -588,7 +588,7 @@
@Override
public void visit( OrderByItem obj ) {
- SingleElementSymbol ses = obj.getSymbol();
+ Expression ses = obj.getSymbol();
if (ses instanceof AliasSymbol) {
AliasSymbol as = (AliasSymbol)ses;
outputDisplayName(as.getOutputName());
@@ -810,9 +810,9 @@
}
beginClause(2);
- Iterator<SelectSymbol> iter = obj.getSymbols().iterator();
+ Iterator<Expression> iter = obj.getSymbols().iterator();
while (iter.hasNext()) {
- SelectSymbol symbol = iter.next();
+ Expression symbol = iter.next();
visitNode(symbol);
if (iter.hasNext()) {
append(", "); //$NON-NLS-1$
@@ -940,7 +940,7 @@
append(", "); //$NON-NLS-1$
}
if (obj.displayNamedParameters()) {
- append(escapeSinglePart(ElementSymbol.getShortName(param.getParameterSymbol().getOutputName())));
+ append(escapeSinglePart(Symbol.getShortName(param.getParameterSymbol().getOutputName())));
append(" => "); //$NON-NLS-1$
}
@@ -1189,14 +1189,14 @@
}
private void outputShortName( ElementSymbol obj ) {
- outputDisplayName(SingleElementSymbol.getShortName(obj.getOutputName()));
+ outputDisplayName(Symbol.getShortName(obj.getOutputName()));
}
private void outputDisplayName( String name ) {
String[] pathParts = name.split("\\."); //$NON-NLS-1$
for (int i = 0; i < pathParts.length; i++) {
if (i > 0) {
- append(ElementSymbol.SEPARATOR);
+ append(Symbol.SEPARATOR);
}
append(escapeSinglePart(pathParts[i]));
}
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/AlterTempTable.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/AlterTempTable.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/AlterTempTable.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -27,7 +27,7 @@
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
public class AlterTempTable extends Command {
@@ -61,7 +61,7 @@
}
@Override
- public List<SingleElementSymbol> getProjectedSymbols() {
+ public List<Expression> getProjectedSymbols() {
return Command.getUpdateCommandSymbol();
}
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -48,7 +48,7 @@
import org.teiid.query.sql.lang.SetCriteria;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
/**
@@ -66,7 +66,7 @@
List<Criteria> nonCoveredCriteria = new LinkedList<Criteria>();
List<Criteria> coveredCriteria = new LinkedList<Criteria>();
- public IndexInfo(TempTable table, final List<? extends SingleElementSymbol> projectedCols, final Criteria condition, OrderBy orderBy, boolean primary) {
+ public IndexInfo(TempTable table, final List<? extends Expression> projectedCols, final Criteria condition, OrderBy orderBy, boolean primary) {
this.table = table;
if (primary || this.table.getColumnMap().keySet().containsAll(projectedCols)) {
covering = true;
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,16 +25,7 @@
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -70,7 +61,7 @@
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.ExpressionSymbol;
/**
* A Teiid Temp Table
@@ -154,7 +145,7 @@
private TupleBrowser browser;
private QueryTupleSource(TupleBrowser browser, Map map,
- List<? extends SingleElementSymbol> projectedCols, Criteria condition) {
+ List<? extends Expression> projectedCols, Criteria condition) {
this.browser = browser;
this.indexes = RelationalNode.getProjectionIndexes(map, projectedCols);
this.eval = new Evaluator(map, null, null);
@@ -423,11 +414,11 @@
return bm.reserveBuffers(leafBatchSize + (tree.getHeight() - 1)*keyBatchSize, BufferReserveMode.FORCE);
}
- public TupleSource createTupleSource(final List<? extends SingleElementSymbol> projectedCols, final Criteria condition, OrderBy orderBy) throws TeiidComponentException, TeiidProcessingException {
+ public TupleSource createTupleSource(final List<? extends Expression> projectedCols, final Criteria condition, OrderBy orderBy) throws TeiidComponentException, TeiidProcessingException {
//special handling for count(*)
boolean agg = false;
- for (SingleElementSymbol singleElementSymbol : projectedCols) {
- if (singleElementSymbol instanceof AggregateSymbol) {
+ for (Expression singleElementSymbol : projectedCols) {
+ if (singleElementSymbol instanceof ExpressionSymbol && ((ExpressionSymbol)singleElementSymbol).getExpression() instanceof AggregateSymbol) {
agg = true;
break;
}
@@ -478,7 +469,7 @@
}
private TupleSource createTupleSource(
- final List<? extends SingleElementSymbol> projectedCols,
+ final List<? extends Expression> projectedCols,
final Criteria condition, OrderBy orderBy, IndexInfo ii, boolean agg)
throws TeiidComponentException, TeiidProcessingException {
TupleBrowser browser = ii.createTupleBrowser();
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -151,7 +151,7 @@
if (!group.isTempGroupSymbol()) {
return null;
}
- final String groupKey = group.getNonCorrelationName().toUpperCase();
+ final String groupKey = group.getNonCorrelationName();
final TempTable table = contextStore.getOrCreateTempTable(groupKey, command, bufferManager, true, true, context);
if (command instanceof Insert) {
Insert insert = (Insert)command;
@@ -183,7 +183,7 @@
}
if (command instanceof Create) {
Create create = (Create)command;
- String tempTableName = create.getTable().getCanonicalName();
+ String tempTableName = create.getTable().getName();
if (contextStore.hasTempTable(tempTableName)) {
throw new QueryProcessingException(QueryPlugin.Util.getString("TempTableStore.table_exist_error", tempTableName));//$NON-NLS-1$
}
@@ -191,13 +191,13 @@
return CollectionTupleSource.createUpdateCountTupleSource(0);
}
if (command instanceof Drop) {
- String tempTableName = ((Drop)command).getTable().getCanonicalName();
+ String tempTableName = ((Drop)command).getTable().getName();
contextStore.removeTempTableByName(tempTableName, context);
return CollectionTupleSource.createUpdateCountTupleSource(0);
}
if (command instanceof AlterTempTable) {
AlterTempTable att = (AlterTempTable)command;
- TempTable tt = contextStore.getTempTable(att.getTempTable().toUpperCase());
+ TempTable tt = contextStore.getTempTable(att.getTempTable());
Assertion.isNotNull(tt, "Table doesn't exist"); //$NON-NLS-1$
tt.setUpdatable(false);
if (att.getIndexColumns() != null && tt.getRowCount() > 2*tt.getTree().getPageSize(true)) {
@@ -349,7 +349,7 @@
if (!group.isTempGroupSymbol()) {
return null;
}
- final String tableName = group.getNonCorrelationName().toUpperCase();
+ final String tableName = group.getNonCorrelationName();
boolean remapColumns = !tableName.equalsIgnoreCase(group.getName());
TempTable table = null;
if (group.isGlobalTable()) {
@@ -475,14 +475,18 @@
String returnElementName, String keyElementName, Object keyValue)
throws BlockedException, TeiidComponentException,
TeiidProcessingException {
- String matTableName = CODE_PREFIX + (codeTableName + ElementSymbol.SEPARATOR + keyElementName + ElementSymbol.SEPARATOR + returnElementName).toUpperCase();
+ //we are not using a resolved form of a lookup, so we canonicallize with upper case
+ codeTableName = codeTableName.toUpperCase();
+ keyElementName = keyElementName.toUpperCase();
+ returnElementName = returnElementName.toUpperCase();
+ String matTableName = CODE_PREFIX + codeTableName + ElementSymbol.SEPARATOR + keyElementName + ElementSymbol.SEPARATOR + returnElementName;
QueryMetadataInterface metadata = context.getMetadata();
TempMetadataID id = context.getGlobalTableStore().getCodeTableMetadataId(codeTableName,
returnElementName, keyElementName, matTableName);
- ElementSymbol keyElement = new ElementSymbol(matTableName + ElementSymbol.SEPARATOR + keyElementName);
- ElementSymbol returnElement = new ElementSymbol(matTableName + ElementSymbol.SEPARATOR + returnElementName);
+ ElementSymbol keyElement = new ElementSymbol(keyElementName, new GroupSymbol(matTableName));
+ ElementSymbol returnElement = new ElementSymbol(returnElementName, new GroupSymbol(matTableName));
keyElement.setType(DataTypeManager.getDataTypeClass(metadata.getElementType(metadata.getElementID(codeTableName + ElementSymbol.SEPARATOR + keyElementName))));
returnElement.setType(DataTypeManager.getDataTypeClass(metadata.getElementType(metadata.getElementID(codeTableName + ElementSymbol.SEPARATOR + returnElementName))));
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -30,6 +30,7 @@
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import javax.transaction.RollbackException;
import javax.transaction.Status;
@@ -175,8 +176,8 @@
private Map<String, TempTableSynchronization> synchronizations = new ConcurrentHashMap<String, TempTableSynchronization>();
private TransactionMode transactionMode = TransactionMode.NONE;
- private TempMetadataStore tempMetadataStore = new TempMetadataStore(new ConcurrentHashMap<String, TempMetadataID>());
- private Map<String, TempTable> tempTables = new ConcurrentHashMap<String, TempTable>();
+ private TempMetadataStore tempMetadataStore = new TempMetadataStore(new ConcurrentSkipListMap<String, TempMetadataID>(String.CASE_INSENSITIVE_ORDER));
+ private Map<String, TempTable> tempTables = new ConcurrentSkipListMap<String, TempTable>(String.CASE_INSENSITIVE_ORDER);
private String sessionID;
private TempTableStore parentTempTableStore;
Modified: trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -48,7 +48,6 @@
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;
/**
@@ -390,10 +389,10 @@
updateInfo.view = query;
- List<SingleElementSymbol> projectedSymbols = query.getSelect().getProjectedSymbols();
+ List<Expression> projectedSymbols = query.getSelect().getProjectedSymbols();
for (int i = 0; i < projectedSymbols.size(); i++) {
- SingleElementSymbol symbol = projectedSymbols.get(i);
+ Expression symbol = projectedSymbols.get(i);
Expression ex = SymbolMap.getExpression(symbol);
if (!metadata.elementSupports(viewSymbols.get(i).getMetadataID(), SupportConstants.Element.UPDATE)) {
@@ -401,7 +400,7 @@
}
if (ex instanceof ElementSymbol) {
ElementSymbol es = (ElementSymbol)ex;
- String groupName = es.getGroupSymbol().getCanonicalName();
+ String groupName = es.getGroupSymbol().getName();
UpdateMapping info = updateInfo.updatableGroups.get(groupName);
if (es.getGroupSymbol().getDefinition() != null) {
ElementSymbol clone = es.clone();
@@ -447,7 +446,7 @@
}
} else {
for (GroupSymbol groupSymbol : allGroups) {
- UpdateMapping info = updateInfo.updatableGroups.get(groupSymbol.getCanonicalName());
+ UpdateMapping info = updateInfo.updatableGroups.get(groupSymbol.getName());
if (info == null) {
continue; // not projected
}
@@ -486,7 +485,7 @@
}
private void setUpdateFlags(GroupSymbol groupSymbol) throws QueryMetadataException, TeiidComponentException {
- UpdateMapping info = updateInfo.updatableGroups.get(groupSymbol.getCanonicalName());
+ UpdateMapping info = updateInfo.updatableGroups.get(groupSymbol.getName());
if (info == null) {
return; // not projected
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -227,7 +227,7 @@
}
this.validateRowLimitFunctionNotInInvalidCriteria(obj);
- Collection<SingleElementSymbol> projSymbols = obj.getCommand().getProjectedSymbols();
+ Collection<Expression> projSymbols = obj.getCommand().getProjectedSymbols();
//Subcommand should have one projected symbol (query with one expression
//in SELECT or stored procedure execution that returns a single value).
@@ -358,7 +358,7 @@
@Override
public void visit(ScalarSubquery obj) {
validateSubquery(obj);
- Collection<SingleElementSymbol> projSymbols = obj.getCommand().getProjectedSymbols();
+ Collection<Expression> projSymbols = obj.getCommand().getProjectedSymbols();
//Scalar subquery should have one projected symbol (query with one expression
//in SELECT or stored procedure execution that returns a single value).
@@ -552,7 +552,7 @@
AggregateSymbolCollectorVisitor.getAggregates(having, aggs, invalid, null, invalidWindowFunctions, groupSymbols);
hasAgg = true;
}
- for (SingleElementSymbol symbol : select.getProjectedSymbols()) {
+ for (Expression symbol : select.getProjectedSymbols()) {
AggregateSymbolCollectorVisitor.getAggregates(symbol, aggs, invalid, null, null, groupSymbols);
}
if ((!aggs.isEmpty() || hasAgg) && !invalid.isEmpty()) {
@@ -708,13 +708,13 @@
* @since 4.2
*/
protected void validateSelectInto(Query query) {
- List<SingleElementSymbol> symbols = query.getSelect().getProjectedSymbols();
+ List<Expression> symbols = query.getSelect().getProjectedSymbols();
GroupSymbol intoGroup = query.getInto().getGroup();
validateInto(query, symbols, intoGroup);
}
private void validateInto(LanguageObject query,
- List<SingleElementSymbol> symbols,
+ List<Expression> symbols,
GroupSymbol intoGroup) {
try {
List elementIDs = getMetadata().getElementIDsInGroupID(intoGroup.getMetadataID());
@@ -726,7 +726,7 @@
}
for (int symbolNum = 0; symbolNum < symbols.size(); symbolNum++) {
- SingleElementSymbol symbol = symbols.get(symbolNum);
+ Expression symbol = symbols.get(symbolNum);
Object elementID = elementIDs.get(symbolNum);
// Check if supports updates
if (!getMetadata().elementSupports(elementID, SupportConstants.Element.UPDATE)) {
Modified: trunk/engine/src/main/java/org/teiid/query/validator/Validator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/Validator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/java/org/teiid/query/validator/Validator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,7 +23,6 @@
package org.teiid.query.validator;
import java.util.Iterator;
-import java.util.Map;
import org.teiid.core.TeiidComponentException;
import org.teiid.query.metadata.QueryMetadataInterface;
@@ -107,9 +106,9 @@
if (obj instanceof Command) {
Command command = (Command)obj;
visitor.currentCommand = command;
- Map tempMetadata = command.getTemporaryMetadata();
- if(tempMetadata != null && !tempMetadata.isEmpty()) {
- visitor.setMetadata(new TempMetadataAdapter(metadata, new TempMetadataStore(tempMetadata)));
+ TempMetadataStore tempMetadata = command.getTemporaryMetadata();
+ if(tempMetadata != null && !tempMetadata.getData().isEmpty()) {
+ visitor.setMetadata(new TempMetadataAdapter(metadata, tempMetadata));
}
}
}
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1713,7 +1713,7 @@
Select select(ParseInfo info) :
{
boolean isDistinct = false; // unless DISTINCT keyword in SELECT
- SelectSymbol symbol = null;
+ Expression symbol = null;
Select select = new Select();
}
{
@@ -1736,9 +1736,9 @@
}
}
-SelectSymbol selectSymbol(ParseInfo info) :
+Expression selectSymbol(ParseInfo info) :
{
- SelectSymbol symbol = null;
+ Expression symbol = null;
}
{
(
@@ -1751,7 +1751,7 @@
}
}
-SingleElementSymbol selectExpression(ParseInfo info) :
+Expression selectExpression(ParseInfo info) :
{
Expression expression = null;
String alias = null;
@@ -1763,18 +1763,11 @@
[[<AS>] alias=id() ]
)
{
- SingleElementSymbol es = null;
- if(!(expression instanceof SingleElementSymbol)) {
- String functionName = generateFunctionName(info, null);
- es = new ExpressionSymbol(functionName, expression);
- } else {
- es = (SingleElementSymbol)expression;
- }
if(alias != null) {
alias = validateAlias(alias);
- return new AliasSymbol(alias, es);
+ return new AliasSymbol(alias, expression);
}
- return es;
+ return expression;
}
}
@@ -1825,8 +1818,7 @@
condition = filterClause(info)
{
String aggName = t.image.toUpperCase();
- String name = generateFunctionName(info, aggName);
- AggregateSymbol agg = new AggregateSymbol(name, aggName, false, expression);
+ AggregateSymbol agg = new AggregateSymbol(aggName, aggName, false, expression);
agg.setOrderBy(orderBy);
agg.setCondition(condition);
return agg;
@@ -1884,8 +1876,7 @@
tf.setIncludeHeader(header);
tf.setExpressions(expressions);
tf.setEncoding(encoding);
- String name = generateFunctionName(info, "TEXTAGG");
- AggregateSymbol agg = new AggregateSymbol(name, "TEXTAGG", false, tf);
+ AggregateSymbol agg = new AggregateSymbol("TEXTAGG", "TEXTAGG", false, tf);
agg.setOrderBy(orderBy);
agg.setCondition(condition);
return agg;
@@ -1927,13 +1918,12 @@
)
{
func = func.toUpperCase();
- String name = generateFunctionName(info, func);
if(starToken == null) {
// Aggregate
- agg = new AggregateSymbol(name, func, isDistinct, expression);
+ agg = new AggregateSymbol(func, func, isDistinct, expression);
} else {
// COUNT(*)
- agg = new AggregateSymbol(name, func, false, null);
+ agg = new AggregateSymbol(func, func, false, null);
}
agg.setCondition(condition);
return agg;
@@ -2976,7 +2966,7 @@
OrderByItem sortSpecification(ParseInfo info) :
{
- SingleElementSymbol ex = null;
+ Expression ex = null;
boolean ascending = true;
String nullOrdering = null;
}
@@ -2993,7 +2983,7 @@
}
}
-SingleElementSymbol sortKey(ParseInfo info) :
+Expression sortKey(ParseInfo info) :
{
Expression ex = null;
}
@@ -3012,11 +3002,7 @@
throw new ParseException(QueryPlugin.Util.getString("SQLParser.non_position_constant", ex)); //$NON-NLS-1$
}
}
- if(ex instanceof ElementSymbol) {
- return (ElementSymbol)ex;
- }
- String exprName = generateFunctionName(info, null);
- return new ExpressionSymbol(exprName, ex);
+ return ex;
}
}
@@ -3380,10 +3366,7 @@
[orderBy = orderby(info)]
<RPAREN>
{
- String aggName = "win_" + ((AggregateSymbol)agg).getName();
- String name = generateFunctionName(info, aggName);
-
- WindowFunction result = new WindowFunction(aggName);
+ WindowFunction result = new WindowFunction();
WindowSpecification ws = new WindowSpecification();
result.setFunction((AggregateSymbol)agg);
ws.setPartition(partitionList);
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/TestScalarSubqueryImpl.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/TestScalarSubqueryImpl.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/TestScalarSubqueryImpl.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -27,7 +27,7 @@
import org.teiid.language.ScalarSubquery;
import org.teiid.language.Select;
import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
/**
@@ -45,7 +45,7 @@
public static org.teiid.query.sql.symbol.ScalarSubquery helpExample() {
Query query = TestQueryImpl.helpExample(true);
org.teiid.query.sql.symbol.ScalarSubquery ss = new org.teiid.query.sql.symbol.ScalarSubquery(query);
- ss.setType(((SingleElementSymbol)query.getProjectedSymbols().get(0)).getType());
+ ss.setType(((Expression)query.getProjectedSymbols().get(0)).getType());
return ss;
}
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-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -51,9 +51,6 @@
import org.teiid.query.sql.lang.Command;
import org.teiid.query.unittest.RealMetadataFactory;
-
-/**
- */
@SuppressWarnings({"nls", "unchecked"})
public class TestMetaDataProcessor {
@@ -89,7 +86,7 @@
}
@Test public void testSimpleQuery() throws Exception {
- Map[] metadata = helpGetMetadata("SELECT e1 FROM pm1.g1", RealMetadataFactory.example1Cached(), RealMetadataFactory.example1VDB()); //$NON-NLS-1$
+ Map[] metadata = helpGetMetadata("SELECT pm1.g1.e1 FROM pm1.g1", RealMetadataFactory.example1Cached(), RealMetadataFactory.example1VDB()); //$NON-NLS-1$
assertNotNull(metadata);
assertEquals(1, metadata.length);
assertEquals("e1", metadata[0].get(ResultsMetadataConstants.ELEMENT_NAME)); //$NON-NLS-1$
@@ -185,7 +182,7 @@
MetadataResult response = helpTestQuery(metadata, sql, TestMetaDataProcessor.examplePrivatePhysicalModelVDB());
helpCheckNumericAttributes(response, 0, 21, 19, 4);
assertEquals("e1", response.getColumnMetadata()[0].get(ResultsMetadataConstants.ELEMENT_NAME)); //$NON-NLS-1$
- assertEquals("win_min", response.getColumnMetadata()[0].get(ResultsMetadataConstants.ELEMENT_LABEL)); //$NON-NLS-1$
+ assertEquals("expr1", response.getColumnMetadata()[0].get(ResultsMetadataConstants.ELEMENT_LABEL)); //$NON-NLS-1$
}
@Test public void testMetadataGenerationForAllTypes() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceMetadataWrapper.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceMetadataWrapper.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceMetadataWrapper.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -29,7 +29,7 @@
import junit.framework.TestCase;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.unittest.RealMetadataFactory;
@@ -69,7 +69,7 @@
assertEquals(0, wrapper.getPrecision(instanceElementID));
assertEquals(0, wrapper.getScale(instanceElementID));
assertEquals(0, wrapper.getRadix(instanceElementID));
- assertEquals(MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME, SingleElementSymbol.getShortName(fullName));
- assertEquals(fullName, wrapper.getFullName(groupID) + SingleElementSymbol.SEPARATOR + MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME);
+ assertEquals(MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME, Symbol.getShortName(fullName));
+ assertEquals(fullName, wrapper.getFullName(groupID) + Symbol.SEPARATOR + MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME);
}
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -27,7 +27,6 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-import java.util.Properties;
import java.util.Set;
import org.junit.Test;
@@ -84,7 +83,7 @@
private static final boolean DEBUG = false;
- public void helpTestMultiSourcePlan(QueryMetadataInterface metadata, String userSql, String multiModel, int sourceCount, ProcessorDataManager dataMgr, List[] expectedResults, VDBMetaData vdb) throws Exception {
+ public void helpTestMultiSourcePlan(QueryMetadataInterface metadata, String userSql, String multiModel, int sourceCount, ProcessorDataManager dataMgr, List<?>[] expectedResults, VDBMetaData vdb) throws Exception {
DQPWorkContext dqpContext = RealMetadataFactory.buildWorkContext(metadata, vdb);
@@ -113,7 +112,6 @@
IDGenerator idGenerator = new IDGenerator();
- Properties props = new Properties();
CommandContext context = new CommandContext("0", "test", "user", null, vdb.getName(), vdb.getVersion(), false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
context.setPlanToProcessConverter(new MultiSourcePlanToProcessConverter(metadata, idGenerator, analysis, finder, multiSourceModels, dqpContext, context));
@@ -132,7 +130,7 @@
final String userSql = "SELECT * FROM MultiModel.Phys WHERE SOURCE_NAME = 'bogus'"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 2;
- final List[] expected =
+ final List<?>[] expected =
new List[0];
final ProcessorDataManager dataMgr = new MultiSourceDataManager();
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
@@ -143,8 +141,8 @@
final String userSql = "SELECT * FROM MultiModel.Phys WHERE SOURCE_NAME = 'a'"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 2;
- final List[] expected =
- new List[] { Arrays.asList(new Object[] { null, null, null}) };
+ final List<?>[] expected =
+ new List<?>[] { Arrays.asList(new Object[] { null, null, null}) };
final HardcodedDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(false);
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
@@ -155,8 +153,8 @@
final String userSql = "SELECT * FROM MultiModel.Phys"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected =
- new List[] { Arrays.asList(new Object[] { null, null, null}),
+ final List<?>[] expected =
+ new List<?>[] { Arrays.asList(new Object[] { null, null, null}),
Arrays.asList(new Object[] { null, null, null}),
Arrays.asList(new Object[] { null, null, null})};
final ProcessorDataManager dataMgr = new MultiSourceDataManager();
@@ -169,7 +167,7 @@
final String userSql = "SELECT * FROM MultiModel.Phys order by a"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 2;
- final List[] expected = new List[] {
+ final List<?>[] expected = new List<?>[] {
Arrays.asList("e", "z", "b"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Arrays.asList("f", "z", "b"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Arrays.asList("x", "z", "a"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -177,11 +175,11 @@
};
final HardcodedDataManager dataMgr = new HardcodedDataManager();
dataMgr.addData("SELECT g_0.a, g_0.b, 'a' FROM MultiModel.Phys AS g_0", //$NON-NLS-1$
- new List[] {
+ new List<?>[] {
Arrays.asList("y", "z", "a"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Arrays.asList("x", "z", "a")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
dataMgr.addData("SELECT g_0.a, g_0.b, 'b' FROM MultiModel.Phys AS g_0", //$NON-NLS-1$
- new List[] {
+ new List<?>[] {
Arrays.asList("e", "z", "b"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Arrays.asList("f", "z", "b")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
@@ -192,16 +190,16 @@
final String userSql = "SELECT distinct * FROM MultiModel.Phys order by a limit 1"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 2;
- final List[] expected = new List[] {
+ final List<?>[] expected = new List<?>[] {
Arrays.asList("e", "z", "b"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
};
final HardcodedDataManager dataMgr = new HardcodedDataManager();
dataMgr.addData("SELECT g_0.a, g_0.b, 'a' FROM MultiModel.Phys AS g_0", //$NON-NLS-1$
- new List[] {
+ new List<?>[] {
Arrays.asList("y", "z", "a"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Arrays.asList("x", "z", "a")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
dataMgr.addData("SELECT g_0.a, g_0.b, 'b' FROM MultiModel.Phys AS g_0", //$NON-NLS-1$
- new List[] {
+ new List<?>[] {
Arrays.asList("e", "z", "b"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Arrays.asList("f", "z", "b")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
@@ -213,8 +211,8 @@
final String userSql = "SELECT a.a FROM MultiModel.Phys a inner join MultiModel.Phys b makedep on (a.a = b.a) order by a"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 2;
- final List[] expected =
- new List[] { Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$
+ final List<?>[] expected =
+ new List<?>[] { Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$
Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$
Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$
Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$
@@ -225,10 +223,10 @@
final HardcodedDataManager dataMgr = new HardcodedDataManager();
dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0", //$NON-NLS-1$
- new List[] { Arrays.asList(new Object[] { "x" }), //$NON-NLS-1$
+ new List<?>[] { Arrays.asList(new Object[] { "x" }), //$NON-NLS-1$
Arrays.asList(new Object[] { "y" })}); //$NON-NLS-1$
dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0 WHERE g_0.a IN ('x', 'y')", //$NON-NLS-1$
- new List[] { Arrays.asList(new Object[] { "x" }), //$NON-NLS-1$
+ new List<?>[] { Arrays.asList(new Object[] { "x" }), //$NON-NLS-1$
Arrays.asList(new Object[] { "y" })}); //$NON-NLS-1$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -238,7 +236,7 @@
final String userSql = "exec Virt.sq1('a')"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(new Object[] { null, null}), };
+ final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { null, null}), };
final ProcessorDataManager dataMgr = new MultiSourceDataManager();
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -248,7 +246,7 @@
final String userSql = "exec Virt.sq1(null)"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[0];
+ final List<?>[] expected = new List[0];
final ProcessorDataManager dataMgr = new MultiSourceDataManager();
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -258,10 +256,10 @@
final String userSql = "update MultiModel.Phys set a = '1' where b = 'z'"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(3)};
+ final List<?>[] expected = new List<?>[] { Arrays.asList(3)};
final MultiSourceDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(true);
- dataMgr.addData("UPDATE MultiModel.Phys SET a = '1' WHERE b = 'z'", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
+ dataMgr.addData("UPDATE MultiModel.Phys SET a = '1' WHERE b = 'z'", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -270,10 +268,10 @@
final String userSql = "INSERT INTO MultiModel.Phys(a, SOURCE_NAME) VALUES ('a', 'a')"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(1)};
+ final List<?>[] expected = new List<?>[] { Arrays.asList(1)};
final MultiSourceDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(true);
- dataMgr.addData("INSERT INTO MultiModel.Phys (a) VALUES ('a')", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
+ dataMgr.addData("INSERT INTO MultiModel.Phys (a) VALUES ('a')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -282,7 +280,7 @@
final String userSql = "INSERT INTO MultiModel.Phys(a, SOURCE_NAME) VALUES ('a', 'x')"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(0)};
+ final List<?>[] expected = new List<?>[] { Arrays.asList(0)};
final MultiSourceDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(true);
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
@@ -293,10 +291,10 @@
final String userSql = "INSERT INTO MultiModel.Phys(a) VALUES ('a')"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(3)};
+ final List<?>[] expected = new List<?>[] { Arrays.asList(3)};
final MultiSourceDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(true);
- dataMgr.addData("INSERT INTO MultiModel.Phys (a) VALUES ('a')", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
+ dataMgr.addData("INSERT INTO MultiModel.Phys (a) VALUES ('a')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -305,10 +303,10 @@
final String userSql = "exec MultiModel.proc('b', 'a')"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(1)};
+ final List<?>[] expected = new List<?>[] { Arrays.asList(1)};
final MultiSourceDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(true);
- dataMgr.addData("EXEC MultiModel.proc('b')", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
+ dataMgr.addData("EXEC MultiModel.proc('b')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
@@ -317,10 +315,10 @@
final String userSql = "exec MultiModel.proc(\"in\"=>'b')"; //$NON-NLS-1$
final String multiModel = "MultiModel"; //$NON-NLS-1$
final int sources = 3;
- final List[] expected = new List[] { Arrays.asList(1), Arrays.asList(1), Arrays.asList(1)};
+ final List<?>[] expected = new List<?>[] { Arrays.asList(1), Arrays.asList(1), Arrays.asList(1)};
final MultiSourceDataManager dataMgr = new MultiSourceDataManager();
dataMgr.setMustRegisterCommands(true);
- dataMgr.addData("EXEC MultiModel.proc('b')", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
+ dataMgr.addData("EXEC MultiModel.proc('b')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$
helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB());
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -41,7 +41,7 @@
import org.teiid.query.optimizer.TestOptimizer;
import org.teiid.query.optimizer.capabilities.SourceCapabilities;
import org.teiid.query.processor.relational.RelationalNodeUtil;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.translator.DataNotAvailableException;
import org.teiid.translator.TranslatorException;
@@ -180,7 +180,7 @@
List row = new ArrayList();
Iterator iter = symbols.iterator();
while(iter.hasNext()) {
- SingleElementSymbol symbol = (SingleElementSymbol) iter.next();
+ Expression symbol = (Expression) iter.next();
Class type = symbol.getType();
row.add( getValue(type, i) );
}
Modified: trunk/engine/src/test/java/org/teiid/query/metadata/TestTransformationMetadata.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/metadata/TestTransformationMetadata.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/metadata/TestTransformationMetadata.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,15 +22,16 @@
package org.teiid.query.metadata;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
import org.jboss.vfs.VFS;
-import org.jboss.vfs.VirtualFile;
import org.junit.Test;
-import org.mockito.Mockito;
import org.teiid.adminapi.Model;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestAggregatePushdown.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestAggregatePushdown.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestAggregatePushdown.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -105,7 +105,7 @@
String sql = "SELECT a12.intkey, MAX(a12.stringkey), MIN(a11.intnum+a12.intnum) FROM bqt1.smalla AS a11 INNER JOIN bqt2.smalla AS a12 ON a11.stringkey = a12.stringkey GROUP BY a12.intkey"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_0.stringkey, g_0.intkey, g_0.intnum FROM bqt2.smalla AS g_0 GROUP BY g_0.stringkey, g_0.intkey, g_0.intnum", "SELECT g_0.stringkey, g_0.intnum FROM bqt1.smalla AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.stringkey, g_0.intkey, g_0.intnum FROM BQT2.SmallA AS g_0 GROUP BY g_0.stringkey, g_0.intkey, g_0.intnum", "SELECT g_0.stringkey, g_0.intnum FROM BQT1.SmallA AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -136,7 +136,7 @@
String sql = "SELECT a12.intkey, MAX(a12.stringkey), SUM(a11.intnum+a12.intnum) FROM bqt1.smalla AS a11 INNER JOIN bqt2.smalla AS a12 ON a11.stringkey = a12.stringkey GROUP BY a12.intkey"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_0.stringkey, g_0.intkey, g_0.intnum FROM bqt2.smalla AS g_0", "SELECT g_0.stringkey, g_0.intnum FROM bqt1.smalla AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.stringkey, g_0.intkey, g_0.intnum FROM BQT2.SmallA AS g_0", "SELECT g_0.stringkey, g_0.intnum FROM BQT1.SmallA AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -203,7 +203,7 @@
String sql = "select sum(a11.intnum) Profit, (sum(a11.intnum) / sum(a11.floatnum)) WJXBFS2 from bqt1.smalla a11 join bqt2.smallb a12 on a11.intkey=a12.intkey group by a12.intkey"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_0.intkey, SUM(g_0.intnum), SUM(g_0.floatnum) FROM bqt1.smalla AS g_0 GROUP BY g_0.intkey", "SELECT g_0.intkey FROM bqt2.smallb AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.intkey, SUM(g_0.intnum), SUM(g_0.floatnum) FROM BQT1.SmallA AS g_0 GROUP BY g_0.intkey", "SELECT g_0.intkey FROM BQT2.SmallB AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -520,7 +520,7 @@
String sql = "select a11.intkey ITEM_ID, sum(a11.intnum) WJXBFS1 from bqt1.smalla a11 join bqt2.smalla a12 on (a11.stringkey = a12.stringkey) join bqt2.smallb a13 on (a11.intkey = a13.intkey) where a13.intnum in (10) group by a11.intkey"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_0.stringkey FROM bqt2.smalla AS g_0", "SELECT g_0.stringkey, g_0.intkey, SUM(g_0.intnum) FROM bqt1.smalla AS g_0 GROUP BY g_0.stringkey, g_0.intkey", "SELECT g_0.intkey FROM bqt2.smallb AS g_0 WHERE g_0.intnum = 10"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ new String[] {"SELECT g_0.stringkey, g_0.intkey, SUM(g_0.intnum) FROM BQT1.SmallA AS g_0 GROUP BY g_0.stringkey, g_0.intkey", "SELECT g_0.stringkey FROM BQT2.SmallA AS g_0", "SELECT g_0.intkey FROM BQT2.SmallB AS g_0 WHERE g_0.intnum = 10"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
TestOptimizer.checkNodeTypes(plan, new int[] {
3, // Access
@@ -573,7 +573,7 @@
"select stringkey, max(intkey) from bqt1.smalla group by stringkey having count(intkey) = 1", //$NON-NLS-1$
metadata, null, capFinder,
new String[] {
- "SELECT COUNT(g_0.intkey), g_0.stringkey, MAX(g_0.intkey) FROM bqt1.smalla AS g_0 GROUP BY g_0.stringkey"}, //$NON-NLS-1$
+ "SELECT COUNT(g_0.intkey), g_0.stringkey, MAX(g_0.intkey) FROM BQT1.SmallA AS g_0 GROUP BY g_0.stringkey"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING);
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -692,9 +692,9 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.CITY AS c_0, g_0.REGION AS c_1 FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA') ORDER BY c_0"}, //$NON-NLS-1$
+ new String[] {"SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msmodel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0",
+ "SELECT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0",
+ "SELECT g_0.CITY AS c_0, g_0.REGION AS c_1 FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA') ORDER BY c_0"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, new int[] {
@@ -740,9 +740,9 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.CITY AS c_0, g_0.REGION AS c_1 FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA') ORDER BY c_0"}, //$NON-NLS-1$
+ new String[] {"SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msmodel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0",
+ "SELECT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0",
+ "SELECT g_0.CITY AS c_0, g_0.REGION AS c_1 FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA') ORDER BY c_0"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, new int[] {
@@ -788,8 +788,8 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.\"MONTH\" AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.\"MONTH\" IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_1.REGION ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0"}, //$NON-NLS-1$
+ new String[] {"SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msmodel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0",
+ "SELECT g_0.\"MONTH\" AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.\"MONTH\" IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_1.REGION ORDER BY c_0"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, new int[] {
@@ -1056,7 +1056,7 @@
capFinder.addCapabilities("pm2", getAggregateCapabilities()); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("select max(e2), case when e1 is null then 0 else 1 end from (select e1, e2 from pm1.g1 union all select e1, e2 from pm2.g2) z group by case when e1 is null then 0 else 1 end", RealMetadataFactory.example1Cached(), null, capFinder, //$NON-NLS-1$
- new String[]{"SELECT v_1.c_1, MAX(v_1.c_0) FROM (SELECT v_0.c_1 AS c_0, CASE WHEN v_0.c_0 IS NULL THEN 0 ELSE 1 END AS c_1 FROM (SELECT g_0.e1 AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0) AS v_0) AS v_1 GROUP BY v_1.c_1", //$NON-NLS-1$
+ new String[]{"SELECT v_1.c_0, MAX(v_1.c_1) FROM (SELECT CASE WHEN v_0.c_0 IS NULL THEN 0 ELSE 1 END AS c_0, v_0.c_1 FROM (SELECT g_0.e1 AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0) AS v_0) AS v_1 GROUP BY v_1.c_0", //$NON-NLS-1$
"SELECT g_0.e1, g_0.e2 FROM pm2.g2 AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -1083,8 +1083,8 @@
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("select max(e2), case when e1 is null then 0 else 1 end from (select e1, e2, 1 as part from pm1.g1 union all select e1, e2, 2 as part from pm1.g2) z group by case when e1 is null then 0 else 1 end, part", RealMetadataFactory.example1Cached(), null, capFinder, //$NON-NLS-1$
- new String[]{"SELECT MAX(v_1.c_0), v_1.c_1 FROM (SELECT v_0.c_2 AS c_0, CASE WHEN v_0.c_0 IS NULL THEN 0 ELSE 1 END AS c_1, v_0.c_1 AS c_2 FROM (SELECT g_0.e1 AS c_0, 1 AS c_1, g_0.e2 AS c_2 FROM pm1.g1 AS g_0) AS v_0) AS v_1 GROUP BY v_1.c_1, v_1.c_2",
- "SELECT MAX(v_1.c_0), v_1.c_1 FROM (SELECT v_0.c_2 AS c_0, CASE WHEN v_0.c_0 IS NULL THEN 0 ELSE 1 END AS c_1, v_0.c_1 AS c_2 FROM (SELECT g_0.e1 AS c_0, 2 AS c_1, g_0.e2 AS c_2 FROM pm1.g2 AS g_0) AS v_0) AS v_1 GROUP BY v_1.c_1, v_1.c_2"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[]{"SELECT MAX(v_1.c_2), v_1.c_0 FROM (SELECT CASE WHEN v_0.c_0 IS NULL THEN 0 ELSE 1 END AS c_0, v_0.c_1, v_0.c_2 FROM (SELECT g_0.e1 AS c_0, 2 AS c_1, g_0.e2 AS c_2 FROM pm1.g2 AS g_0) AS v_0) AS v_1 GROUP BY v_1.c_0, v_1.c_1",
+ "SELECT MAX(v_1.c_2), v_1.c_0 FROM (SELECT CASE WHEN v_0.c_0 IS NULL THEN 0 ELSE 1 END AS c_0, v_0.c_1, v_0.c_2 FROM (SELECT g_0.e1 AS c_0, 1 AS c_1, g_0.e2 AS c_2 FROM pm1.g1 AS g_0) AS v_0) AS v_1 GROUP BY v_1.c_0, v_1.c_1"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
0, // DependentAccess
@@ -1114,7 +1114,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan(sql,
RealMetadataFactory.exampleBQTCached(),
null, getAggregatesFinder(),
- new String[] {"SELECT g_0.DateValue FROM bqt1.smallb AS g_0"},
+ new String[] {"SELECT g_0.DateValue FROM BQT1.SmallB AS g_0"},
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING );
TestOptimizer.checkNodeTypes(plan, new int[] {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -802,7 +802,7 @@
"SELECT max(a.stringkey) from bqt1.smalla a, bqt2.smalla a2, bqt1.smalla a1 where a.intnum = a2.intnum and a1.stringnum = a2.stringnum and a.floatnum = a1.floatnum", //$NON-NLS-1$
metadata,
null, capFinder,
- new String[] {"SELECT g_1.stringnum AS c_0, g_0.intnum AS c_1, MAX(g_0.stringkey) AS c_2 FROM bqt1.smalla AS g_0, bqt1.smalla AS g_1 WHERE g_0.floatnum = g_1.floatnum GROUP BY g_1.stringnum, g_0.intnum ORDER BY c_0, c_1", "SELECT DISTINCT g_0.stringnum AS c_0, g_0.intnum AS c_1 FROM bqt2.smalla AS g_0 WHERE (g_0.stringnum IN (<dependent values>)) AND (g_0.intnum IN (<dependent values>)) ORDER BY c_0, c_1"},
+ new String[] {"SELECT g_1.stringnum AS c_0, g_0.intnum AS c_1, MAX(g_0.stringkey) AS c_2 FROM BQT1.SmallA AS g_0, BQT1.SmallA AS g_1 WHERE g_0.floatnum = g_1.floatnum GROUP BY g_1.stringnum, g_0.intnum ORDER BY c_0, c_1", "SELECT DISTINCT g_0.stringnum AS c_0, g_0.intnum AS c_1 FROM BQT2.SmallA AS g_0 WHERE (g_0.stringnum IN (<dependent values>)) AND (g_0.intnum IN (<dependent values>)) ORDER BY c_0, c_1"},
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING );
TestOptimizer.checkNodeTypes(plan, new int[] {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestInlineView.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestInlineView.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestInlineView.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -39,7 +39,7 @@
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.unittest.RealMetadataFactory;
-
+@SuppressWarnings("nls")
public class TestInlineView {
public static FakeCapabilitiesFinder getInliveViewCapabilitiesFinder() {
@@ -93,7 +93,7 @@
public static InlineViewCase createANSIJoinInlineView() throws Exception {
String userQuery = "select q1.a from (select count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey) q1 left outer join bqt1.smallb on q1.a = bqt1.smallb.intkey where q1.intkey = 1"; //$NON-NLS-1$
- String optimizedQuery = "SELECT v_0.c_0 FROM (SELECT COUNT(g_0.intkey) AS c_0 FROM bqt1.smalla AS g_0 WHERE g_0.intkey = 1 GROUP BY g_0.intkey) AS v_0 LEFT OUTER JOIN bqt1.smallb AS g_1 ON v_0.c_0 = g_1.intkey"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT v_0.c_0 FROM (SELECT COUNT(g_0.intkey) AS c_0 FROM BQT1.SmallA AS g_0 WHERE g_0.intkey = 1 GROUP BY g_0.intkey) AS v_0 LEFT OUTER JOIN BQT1.SmallB AS g_1 ON v_0.c_0 = g_1.intkey"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
expectedResults.add(Arrays.asList(1));
@@ -113,7 +113,7 @@
public static InlineViewCase createInlineView() throws Exception {
String userQuery = "select bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa from (select count(bqt1.smalla.intkey) as aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey) bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, bqt1.smallb " + //$NON-NLS-1$
"where bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.intkey = 1 and bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = bqt1.smallb.intkey"; //$NON-NLS-1$
- String optimizedQuery = "SELECT v_0.c_0 FROM (SELECT COUNT(g_0.intkey) AS c_0 FROM bqt1.smalla AS g_0 WHERE g_0.intkey = 1 GROUP BY g_0.intkey) AS v_0, bqt1.smallb AS g_1 WHERE v_0.c_0 = g_1.intkey"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT v_0.c_0 FROM (SELECT COUNT(g_0.intkey) AS c_0 FROM BQT1.SmallA AS g_0 WHERE g_0.intkey = 1 GROUP BY g_0.intkey) AS v_0, BQT1.SmallB AS g_1 WHERE v_0.c_0 = g_1.intkey"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
expectedResults.add(Arrays.asList(1));
@@ -131,7 +131,7 @@
public static InlineViewCase createInlineViewWithDistinctAndOrderBy() throws Exception {
String userQuery = "select Q1.a from (select distinct count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey order by bqt1.smalla.intkey) q1 inner join bqt1.smallb as q2 on q1.intkey = q2.intkey where q1.a = 1 and q1.a + q1.intkey = 2"; //$NON-NLS-1$
- String optimizedQuery = "SELECT v_0.c_1 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM bqt1.smalla AS g_0 GROUP BY g_0.intkey HAVING (COUNT(g_0.intkey) = 1) AND ((COUNT(g_0.intkey) + g_0.intkey) = 2)) AS v_0, bqt1.smallb AS g_1 WHERE v_0.c_0 = g_1.intkey"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT v_0.c_1 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.intkey HAVING (COUNT(g_0.intkey) = 1) AND ((COUNT(g_0.intkey) + g_0.intkey) = 2)) AS v_0, BQT1.SmallB AS g_1 WHERE v_0.c_0 = g_1.intkey"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
expectedResults.add(Arrays.asList(1));
@@ -150,7 +150,7 @@
public static InlineViewCase createInlineViewOfVirtual() throws Exception{
String userQuery = "select q1.A from (select count(intkey) as a, intkey, stringkey from vqt.smalla group by intkey, stringkey) q1 inner join vqt.smallb as q2 on q1.intkey = q2.a12345 where q1.a = 2"; //$NON-NLS-1$
- String optimizedQuery = "SELECT v_0.c_1 FROM (SELECT g_0.IntKey AS c_0, COUNT(g_0.IntKey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.IntKey, g_0.StringKey HAVING COUNT(g_0.IntKey) = 2) AS v_0, BQT1.SmallA AS g_1 WHERE v_0.c_0 = Concat(g_1.StringKey, g_1.StringNum)"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT v_0.c_1 FROM (SELECT g_0.IntKey AS c_0, COUNT(g_0.IntKey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.IntKey, g_0.StringKey HAVING COUNT(g_0.IntKey) = 2) AS v_0, BQT1.SmallA AS g_1 WHERE convert(v_0.c_0, string) = Concat(g_1.StringKey, g_1.StringNum)"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
@@ -167,7 +167,7 @@
public static InlineViewCase createInlineViewWithOuterOrderAndGroup() throws Exception {
String userQuery = "select count(Q1.a) b from (select distinct count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey order by bqt1.smalla.intkey) q1 inner join bqt1.smallb as q2 on q1.intkey = q2.intkey where q1.a = 1 and q1.a + q1.intkey = 2 group by Q1.a order by b"; //$NON-NLS-1$
- String optimizedQuery = "SELECT COUNT(v_0.c_1) AS c_0 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM bqt1.smalla AS g_0 GROUP BY g_0.intkey HAVING (COUNT(g_0.intkey) = 1) AND ((COUNT(g_0.intkey) + g_0.intkey) = 2)) AS v_0, bqt1.smallb AS g_1 WHERE v_0.c_0 = g_1.intkey GROUP BY v_0.c_1 ORDER BY c_0"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT COUNT(v_0.c_1) AS c_0 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.intkey HAVING (COUNT(g_0.intkey) = 1) AND ((COUNT(g_0.intkey) + g_0.intkey) = 2)) AS v_0, BQT1.SmallB AS g_1 WHERE v_0.c_0 = g_1.intkey GROUP BY v_0.c_1 ORDER BY c_0"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
expectedResults.add(Arrays.asList(1));
@@ -185,7 +185,7 @@
public static InlineViewCase crateInlineViewsInUnions() throws Exception {
String userQuery = "select q1.a from (select count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey) q1 left outer join bqt1.smallb on q1.a = bqt1.smallb.intkey where q1.intkey = 1 union all (select count(Q1.a) b from (select distinct count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey order by bqt1.smalla.intkey) q1 inner join bqt1.smallb as q2 on q1.intkey = q2.intkey where q1.a = 1 and q1.a + q1.intkey = 2 group by Q1.a order by b)"; //$NON-NLS-1$
- String optimizedQuery = "SELECT v_1.c_0 FROM (SELECT COUNT(g_2.intkey) AS c_0 FROM bqt1.smalla AS g_2 WHERE g_2.intkey = 1 GROUP BY g_2.intkey) AS v_1 LEFT OUTER JOIN bqt1.smallb AS g_3 ON v_1.c_0 = g_3.intkey UNION ALL SELECT COUNT(v_0.c_1) AS c_0 FROM (SELECT g_0.IntKey AS c_0, COUNT(g_0.IntKey) AS c_1 FROM bqt1.smalla AS g_0 GROUP BY g_0.IntKey HAVING (COUNT(g_0.IntKey) = 1) AND ((COUNT(g_0.IntKey) + g_0.IntKey) = 2)) AS v_0, bqt1.smallb AS g_1 WHERE v_0.c_0 = g_1.intkey GROUP BY v_0.c_1"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT v_1.c_0 FROM (SELECT COUNT(g_2.intkey) AS c_0 FROM BQT1.SmallA AS g_2 WHERE g_2.intkey = 1 GROUP BY g_2.intkey) AS v_1 LEFT OUTER JOIN BQT1.SmallB AS g_3 ON v_1.c_0 = g_3.intkey UNION ALL SELECT COUNT(v_0.c_1) AS c_0 FROM (SELECT g_0.IntKey AS c_0, COUNT(g_0.IntKey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.IntKey HAVING (COUNT(g_0.IntKey) = 1) AND ((COUNT(g_0.IntKey) + g_0.IntKey) = 2)) AS v_0, BQT1.SmallB AS g_1 WHERE v_0.c_0 = g_1.intkey GROUP BY v_0.c_1"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
expectedResults.add(Arrays.asList(1));
@@ -206,7 +206,7 @@
public static InlineViewCase createUnionInInlineView() throws Exception{
String userQuery = "select t1.intkey from (select case when q1.a=1 then 2 else 1 end as a from (select count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey) q1 left outer join bqt1.smallb on q1.a = bqt1.smallb.intkey where q1.intkey = 1 union all (select count(Q1.a) b from (select distinct count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey order by bqt1.smalla.intkey) q1 inner join bqt1.smallb as q2 on q1.intkey = q2.intkey where q1.a = 1 and q1.a + q1.intkey = 2 group by Q1.a order by b)) as q3, bqt1.smallb as t1 where q3.a = t1.intkey order by t1.intkey"; //$NON-NLS-1$
- String optimizedQuery = "SELECT g_4.intkey AS c_0 FROM (SELECT CASE WHEN v_1.c_0 = 1 THEN 2 ELSE 1 END AS c_0 FROM (SELECT COUNT(g_2.intkey) AS c_0 FROM bqt1.smalla AS g_2 WHERE g_2.intkey = 1 GROUP BY g_2.intkey) AS v_1 LEFT OUTER JOIN bqt1.smallb AS g_3 ON v_1.c_0 = g_3.intkey UNION ALL SELECT COUNT(v_0.c_1) AS c_0 FROM (SELECT g_0.IntKey AS c_0, COUNT(g_0.IntKey) AS c_1 FROM bqt1.smalla AS g_0 GROUP BY g_0.IntKey HAVING (COUNT(g_0.IntKey) = 1) AND ((COUNT(g_0.IntKey) + g_0.IntKey) = 2)) AS v_0, bqt1.smallb AS g_1 WHERE v_0.c_0 = g_1.intkey GROUP BY v_0.c_1) AS v_2, bqt1.smallb AS g_4 WHERE v_2.c_0 = g_4.intkey ORDER BY c_0"; //$NON-NLS-1$
+ String optimizedQuery = "SELECT g_4.intkey AS c_0 FROM (SELECT CASE WHEN v_1.c_0 = 1 THEN 2 ELSE 1 END AS c_0 FROM (SELECT COUNT(g_2.intkey) AS c_0 FROM BQT1.SmallA AS g_2 WHERE g_2.intkey = 1 GROUP BY g_2.intkey) AS v_1 LEFT OUTER JOIN BQT1.SmallB AS g_3 ON v_1.c_0 = g_3.intkey UNION ALL SELECT COUNT(v_0.c_1) AS c_0 FROM (SELECT g_0.IntKey AS c_0, COUNT(g_0.IntKey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.IntKey HAVING (COUNT(g_0.IntKey) = 1) AND ((COUNT(g_0.IntKey) + g_0.IntKey) = 2)) AS v_0, BQT1.SmallB AS g_1 WHERE v_0.c_0 = g_1.intkey GROUP BY v_0.c_1) AS v_2, BQT1.SmallB AS g_4 WHERE v_2.c_0 = g_4.intkey ORDER BY c_0"; //$NON-NLS-1$
List<List<?>> expectedResults = new ArrayList<List<?>>();
expectedResults.add(Arrays.asList(1));
@@ -264,8 +264,8 @@
QueryMetadataInterface metadata = RealMetadataFactory.exampleBQTCached();
ProcessorPlan plan = helpPlan("select * from (select count(bqt1.smalla.intkey) as a, bqt1.smalla.intkey from bqt1.smalla group by bqt1.smalla.intkey) q1 inner join (select count(bqt2.smallb.intkey) as a, bqt2.smallb.intkey from bqt2.smallb group by bqt2.smallb.intkey) as q2 on q1.intkey = q2.intkey where q1.a = 1", //$NON-NLS-1$
- metadata, null, capFinder, new String[] {"SELECT v_0.c_0, v_0.c_1 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM bqt2.smallb AS g_0 GROUP BY g_0.intkey) AS v_0 ORDER BY c_0", //$NON-NLS-1$
- "SELECT v_0.c_0, v_0.c_1 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM bqt1.smalla AS g_0 GROUP BY g_0.intkey HAVING COUNT(g_0.intkey) = 1) AS v_0 ORDER BY c_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ metadata, null, capFinder, new String[] {"SELECT v_0.c_0, v_0.c_1 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM BQT1.SmallA AS g_0 GROUP BY g_0.intkey HAVING COUNT(g_0.intkey) = 1) AS v_0 ORDER BY c_0",
+ "SELECT v_0.c_0, v_0.c_1 FROM (SELECT g_0.intkey AS c_0, COUNT(g_0.intkey) AS c_1 FROM BQT2.SmallB AS g_0 GROUP BY g_0.intkey) AS v_0 ORDER BY c_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, new int[] {
2, // Access
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinOptimization.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinOptimization.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinOptimization.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -295,7 +295,7 @@
String sql = "select bqt1.smalla.intkey from bqt1.smalla left outer join (select bqt3.smalla.intkey from bqt3.smalla where bqt3.smalla.intkey = 1) foo on bqt1.smalla.intkey = foo.intkey"; //$NON-NLS-1$
// Plan query
- ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), new String[] {"SELECT 1 FROM bqt3.smalla AS g_0 WHERE g_0.intkey = 1", "SELECT g_0.intkey FROM bqt1.smalla AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), new String[] {"SELECT 1 FROM BQT3.SmallA AS g_0 WHERE g_0.intkey = 1", "SELECT g_0.intkey FROM BQT1.SmallA AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -426,7 +426,7 @@
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_3.intkey, g_0.intkey FROM ((bqt1.smallb AS g_0 CROSS JOIN bqt1.mediuma AS g_1) INNER JOIN bqt1.mediumb AS g_2 ON ((g_0.intkey + g_1.intkey) + g_2.intkey) = 1) LEFT OUTER JOIN bqt1.smalla AS g_3 ON g_3.stringkey = g_0.stringkey"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[] {"SELECT g_3.intkey, g_0.intkey FROM ((BQT1.SmallB AS g_0 CROSS JOIN BQT1.MediumA AS g_1) INNER JOIN BQT1.MediumB AS g_2 ON ((g_0.intkey + g_1.intkey) + g_2.intkey) = 1) LEFT OUTER JOIN BQT1.SmallA AS g_3 ON g_3.stringkey = g_0.stringkey"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
@@ -517,7 +517,7 @@
String sql = "select b.intkey from (select intkey from bqt1.smalla) a left outer join (select intkey from bqt1.smallb) b on (1 = 1)"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, metadata,
- new String[]{"SELECT g_1.intkey FROM bqt1.smalla AS g_0 LEFT OUTER JOIN bqt1.smallb AS g_1 ON 1 = 1"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[]{"SELECT g_1.intkey FROM BQT1.SmallA AS g_0 LEFT OUTER JOIN BQT1.SmallB AS g_1 ON 1 = 1"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
@@ -1041,9 +1041,9 @@
"SELECT BQT1.SmallA.IntKey FROM BQT1.SmallB, BQT1.Smalla, bqt2.smallb where bqt2.smallb.intkey = bqt1.smallb.intkey and bqt2.smallb.intkey = bqt1.smalla.intkey", //$NON-NLS-1$
metadata,
null, capFinder,
- new String[] {"SELECT g_0.intkey AS c_0 FROM BQT1.Smalla AS g_0 ORDER BY c_0",
+ new String[] {"SELECT g_0.intkey AS c_0 FROM BQT1.SmallA AS g_0 ORDER BY c_0",
"SELECT g_0.intkey AS c_0 FROM BQT1.SmallB AS g_0 ORDER BY c_0",
- "SELECT g_0.intkey AS c_0 FROM bqt2.smallb AS g_0 ORDER BY c_0"}, //$NON-NLS-1$ //$NON-NLS-2$
+ "SELECT g_0.intkey AS c_0 FROM BQT2.SmallB AS g_0 ORDER BY c_0"}, //$NON-NLS-1$ //$NON-NLS-2$
ComparisonMode.EXACT_COMMAND_STRING );
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinWithFunction.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinWithFunction.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestJoinWithFunction.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,6 +24,8 @@
import java.util.List;
+import junit.framework.TestCase;
+
import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.api.exception.query.QueryValidatorException;
@@ -31,13 +33,12 @@
import org.teiid.query.optimizer.TestOptimizer.ComparisonMode;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.processor.relational.RelationalPlan;
-import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.Constant;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
+import org.teiid.query.sql.util.SymbolMap;
-import junit.framework.TestCase;
-
/**
* <p><code>TestCase</code> to cover planning and optimization of JOINs which
* use a scalar function as a symbol or as part of the JOIN criteria.</p>
@@ -323,7 +324,7 @@
Constant expectedConst = new Constant(new Double(10.0));
assertEquals("Did not get expected constant value for SqrtTop in root node of plan: ", //$NON-NLS-1$
expectedConst,
- ((ExpressionSymbol) ((AliasSymbol) elem.get(8)).getSymbol()).getExpression() // should be a AliasSymbol containing an expression
+ SymbolMap.getExpression((Expression)elem.get(8)) // should be a AliasSymbol containing an expression
);
}
@@ -461,11 +462,11 @@
Constant expectedConst = new Constant(new Double(10.0));
assertEquals("Did not get expected constant value for SqrtLeft in root node of plan: ", //$NON-NLS-1$
expectedConst,
- ((ExpressionSymbol) elem.get(8)).getExpression() // should be a AliasSymbol containing an expression
+ SymbolMap.getExpression((Expression)elem.get(8)) // should be a AliasSymbol containing an expression
);
assertEquals("Did not get expected constant value for SqrtTop in root node of plan: ", //$NON-NLS-1$
expectedConst,
- ((ExpressionSymbol) ((AliasSymbol) elem.get(9)).getSymbol()).getExpression() // should be a AliasSymbol containing an expression
+ SymbolMap.getExpression((Expression)elem.get(9)) // should be a AliasSymbol containing an expression
);
}
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1014,7 +1014,7 @@
List bindings = new ArrayList();
bindings.add("pm1.g2.e1"); //$NON-NLS-1$
helpPlan("select e1 FROM pm1.g1 WHERE e1 LIKE ?", example1(), bindings, null, //$NON-NLS-1$
- new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 LIKE PM1.G2.e1" }, ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 LIKE pm1.g2.e1" }, ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$
}
@Test public void testDefect6517() {
@@ -2106,7 +2106,7 @@
"SELECT MAX(sa.datevalue) FROM bqt1.smalla AS sb " + //$NON-NLS-1$
"WHERE (sb.intkey = sa.intkey) AND (sa.stringkey = sb.stringkey) ))"; //$NON-NLS-1$
- String sqlOut = "SELECT g_0.intkey FROM bqt1.smalla AS g_0 WHERE (g_0.intkey = 46) AND (g_0.stringkey = '46') AND (g_0.datevalue = (SELECT MAX(g_0.datevalue) FROM bqt1.smalla AS g_1 WHERE (g_1.intkey = g_0.intkey) AND (g_1.stringkey = g_0.stringkey)))"; //$NON-NLS-1$
+ String sqlOut = "SELECT g_0.intkey FROM BQT1.SmallA AS g_0 WHERE (g_0.intkey = 46) AND (g_0.stringkey = '46') AND (g_0.datevalue = (SELECT MAX(g_0.datevalue) FROM BQT1.SmallA AS g_1 WHERE (g_1.intkey = g_0.intkey) AND (g_1.stringkey = g_0.stringkey)))"; //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sqlIn,
RealMetadataFactory.exampleBQTCached(),
@@ -3451,7 +3451,7 @@
}
@Test public void testBQT9500_126() throws Exception {
- String sql = "SELECT IntKey, LongNum, expr FROM (SELECT IntKey, LongNum, concat(LongNum, 'abc') FROM BQT2.SmallA ) AS x ORDER BY IntKey"; //$NON-NLS-1$
+ String sql = "SELECT IntKey, LongNum, expr FROM (SELECT IntKey, LongNum, concat(LongNum, 'abc') as expr FROM BQT2.SmallA ) AS x ORDER BY IntKey"; //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql, RealMetadataFactory.exampleBQTCached(),
new String[] {
"SELECT g_0.IntKey AS c_0, g_0.LongNum AS c_1 FROM BQT2.SmallA AS g_0 ORDER BY c_0" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
@@ -4268,7 +4268,7 @@
ProcessorPlan plan = helpPlan(sql,
RealMetadataFactory.exampleBQTCached(),
null, capFinder,
- new String[] {"SELECT g_1.longnum, g_2.datevalue, g_0.IntKEy, g_1.IntKEy, g_2.IntKey FROM bqt1.smalla AS g_0, bqt1.smallb AS g_1, bqt1.mediuma AS g_2 WHERE (g_0.StringKey = g_1.StringKey) AND (g_2.IntKey = g_0.IntKey) AND (g_0.IntNum > (SELECT SUM(g_3.IntNum) FROM bqt1.smalla AS g_3))"}, //$NON-NLS-1$
+ new String[] {"SELECT g_1.longnum, g_2.datevalue, g_0.IntKEy, g_1.IntKEy, g_2.IntKey FROM BQT1.SmallA AS g_0, BQT1.SmallB AS g_1, BQT1.MediumA AS g_2 WHERE (g_0.StringKey = g_1.StringKey) AND (g_2.IntKey = g_0.IntKey) AND (convert(g_0.IntNum, long) > (SELECT SUM(g_3.IntNum) FROM BQT1.SmallA AS g_3))"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, new int[] {
@@ -4512,7 +4512,7 @@
RelationalPlan plan = (RelationalPlan)helpPlan(sql,
RealMetadataFactory.exampleBQTCached(),
null, capFinder,
- new String[] {"SELECT bqt1.smalla.datevalue, bqt1.smalla.intkey, bqt1.smalla.stringkey, bqt1.smalla.objectvalue FROM bqt1.smalla WHERE (bqt1.smalla.intkey = 46) AND (bqt1.smalla.stringkey = '46')"}, //$NON-NLS-1$
+ new String[] {"SELECT BQT1.SmallA.datevalue, BQT1.SmallA.intkey, BQT1.SmallA.stringkey, BQT1.SmallA.objectvalue FROM BQT1.SmallA WHERE (BQT1.SmallA.intkey = 46) AND (BQT1.SmallA.stringkey = '46')"}, //$NON-NLS-1$
SHOULD_SUCCEED );
checkNodeTypes(plan, new int[] {
@@ -4538,7 +4538,7 @@
Set<String> actualQueries = getAtomicQueries(subplan);
// Compare atomic queries
- HashSet<String> expectedQueries = new HashSet<String>(Arrays.asList(new String[] { "SELECT bqt1.smalla.datevalue FROM bqt1.smalla WHERE (bqt1.smalla.intkey = bqt1.smalla.intkey) AND (bqt1.smalla.stringkey = bqt1.smalla.stringkey)"})); //$NON-NLS-1$
+ HashSet<String> expectedQueries = new HashSet<String>(Arrays.asList(new String[] { "SELECT BQT1.SmallA.datevalue FROM BQT1.SmallA WHERE (BQT1.SmallA.intkey = BQT1.SmallA.intkey) AND (BQT1.SmallA.stringkey = BQT1.SmallA.stringkey)"})); //$NON-NLS-1$
assertEquals("Did not get expected atomic queries for subplan: ", expectedQueries, actualQueries); //$NON-NLS-1$
checkNodeTypes(subplan, new int[] {
@@ -5276,7 +5276,7 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.intkey FROM bqt1.smalla AS g_0 ORDER BY g_0.intkey"}, //$NON-NLS-1$
+ new String[] {"SELECT g_0.intkey FROM BQT1.SmallA AS g_0 ORDER BY g_0.intkey"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, FULL_PUSHDOWN);
@@ -5396,7 +5396,7 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_2.intkey FROM ((bqt1.SmallA AS g_0 CROSS JOIN bqt1.smalla AS g_1) CROSS JOIN bqt1.mediuma AS g_2) LEFT OUTER JOIN bqt1.mediumb AS g_3 ON g_2.intkey = g_3.intkey"}, //$NON-NLS-1$
+ new String[] {"SELECT g_2.intkey FROM ((BQT1.SmallA AS g_0 CROSS JOIN BQT1.SmallA AS g_1) CROSS JOIN BQT1.MediumA AS g_2) LEFT OUTER JOIN BQT1.MediumB AS g_3 ON g_2.intkey = g_3.intkey"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, FULL_PUSHDOWN);
@@ -5538,7 +5538,7 @@
helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.intkey, g_1.IntKey FROM bqt2.smalla AS g_0, bqt2.smalla AS g_1 WHERE g_0.intkey = g_1.IntKey"}, //$NON-NLS-1$
+ new String[] {"SELECT g_0.intkey, g_1.IntKey FROM BQT2.SmallA AS g_0, BQT2.SmallA AS g_1 WHERE g_0.intkey = g_1.IntKey"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
}
@@ -6255,7 +6255,7 @@
String sql = "select a.e1 from (select 1 e1) a, (select e1, 1 as a, x from (select e1, CASE WHEN e1 = 'a' THEN e2 ELSE e3 END as x from pm1.g2) y group by e1, x) b where a.e1 = b.x"; //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql, metadata, null, capFinder,
- new String[] {"SELECT v_0.c_0 FROM (SELECT CASE WHEN g_0.e1 = 'a' THEN g_0.e2 ELSE g_0.e3 END AS c_0 FROM pm1.g2 AS g_0 GROUP BY g_0.e1, CASE WHEN g_0.e1 = 'a' THEN g_0.e2 ELSE g_0.e3 END) AS v_0 WHERE v_0.c_0 IN (<dependent values>) ORDER BY c_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[] {"SELECT v_0.c_0 FROM (SELECT CASE WHEN g_0.e1 = 'a' THEN g_0.e2 ELSE convert(g_0.e3, integer) END AS c_0 FROM pm1.g2 AS g_0 GROUP BY g_0.e1, CASE WHEN g_0.e1 = 'a' THEN g_0.e2 ELSE convert(g_0.e3, integer) END) AS v_0 WHERE v_0.c_0 IN (<dependent values>) ORDER BY c_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, new int[] {
0, // Access
@@ -6451,7 +6451,7 @@
* <p>
* Related Defects: JBEDSP-1137
*/
- @Test public void testAmbiguousAliasFunctionInSubQuerySource() {
+ @Test public void testAmbiguousAliasFunctionInSubQuerySource() throws Exception {
// Create query
String sql = "SELECT CONVERT(A.e2, biginteger) AS e2 FROM (" + //$NON-NLS-1$
" SELECT CONVERT(e2, long) AS e2 FROM pm1.g1 AS A" + //$NON-NLS-1$
@@ -6469,8 +6469,8 @@
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpPlan(sql, metadata, null, capFinder,
- new String[] {"SELECT CONVERT(CONVERT(e2, long), biginteger) FROM pm1.g1 AS A"}, //$NON-NLS-1$
- SHOULD_SUCCEED );
+ new String[] {"SELECT CONVERT(CONVERT(g_0.e2, long), biginteger) FROM pm1.g1 AS g_0"}, //$NON-NLS-1$
+ ComparisonMode.EXACT_COMMAND_STRING );
}
@Test public void testNestedTable() throws Exception {
@@ -6569,7 +6569,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT e1 from pm1.g1 where e1 = e2 and e1 = e3", //$NON-NLS-1$
RealMetadataFactory.example1Cached(), null, new DefaultCapabilitiesFinder(caps),
new String[] {
- "SELECT pm1.g1.e1, pm1.g1.e3 FROM pm1.g1 WHERE pm1.g1.e1 = pm1.g1.e2"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ "SELECT pm1.g1.e1, pm1.g1.e3 FROM pm1.g1 WHERE pm1.g1.e1 = convert(pm1.g1.e2, string)"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, new int[] {
1, // Access
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -352,7 +352,7 @@
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, metadata,
null, capFinder,
- new String[] { "SELECT v_0.c_0 FROM (SELECT convert(g_0.TimestampValue, date) AS c_0 FROM bqt1.smalla AS g_0, bqt1.smallb AS g_1 WHERE g_0.stringkey = g_1.stringkey) AS v_0 GROUP BY v_0.c_0" }, //$NON-NLS-1$
+ new String[] { "SELECT v_0.c_0 FROM (SELECT convert(g_0.TimestampValue, date) AS c_0 FROM BQT1.SmallA AS g_0, BQT1.SmallB AS g_1 WHERE g_0.stringkey = g_1.stringkey) AS v_0 GROUP BY v_0.c_0" }, //$NON-NLS-1$
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleRaiseNull.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleRaiseNull.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleRaiseNull.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -164,7 +164,7 @@
String sql = "select b.intkey, b.x from (select intkey, intnum as x from bqt1.smalla where 1 = 0 union all select 1 as z, intkey as b from bqt1.smallb) b inner join bqt1.smalla on b.intkey = bqt1.smalla.intkey"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(),
- new String[]{"SELECT g_0.intkey FROM bqt1.smallb AS g_0, bqt1.smalla AS g_1 WHERE g_1.IntKey = 1"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[]{"SELECT g_0.intkey FROM BQT1.SmallB AS g_0, BQT1.SmallA AS g_1 WHERE g_1.IntKey = 1"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
@@ -255,7 +255,7 @@
String sql = "select max(intkey), intnum from (select intkey, intnum from bqt2.smalla where 1 = 0 union all select intnum, intnum from bqt2.smalla union all select intkey, stringkey from bqt2.smalla) x group by intnum"; //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[]{"SELECT MAX(v_0.c_1), v_0.c_0 FROM (SELECT g_1.IntNum AS c_0, g_1.IntNum AS c_1 FROM bqt2.smalla AS g_1 UNION ALL SELECT g_0.StringKey AS c_0, g_0.IntKey AS c_1 FROM bqt2.smalla AS g_0) AS v_0 GROUP BY v_0.c_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[]{"SELECT MAX(v_0.c_1), v_0.c_0 FROM (SELECT convert(g_1.IntNum, string) AS c_0, g_1.IntNum AS c_1 FROM BQT2.SmallA AS g_1 UNION ALL SELECT g_0.StringKey AS c_0, g_0.IntKey AS c_1 FROM BQT2.SmallA AS g_0) AS v_0 GROUP BY v_0.c_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -786,11 +786,11 @@
}
@Test public void testSubqueryRewriteToJoin2() throws Exception {
- TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e1 in /*+ mj */ (select distinct pm1.g1.e1 || 1 FROM pm1.g1)", "SELECT e1 FROM pm3.g1, (SELECT DISTINCT concat(pm1.g1.e1, '1') AS EXPR FROM pm1.g1) AS X__1 WHERE pm3.g1.e1 = X__1.EXPR", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e1 in /*+ mj */ (select distinct pm1.g1.e1 || 1 FROM pm1.g1)", "SELECT e1 FROM pm3.g1, (SELECT DISTINCT concat(pm1.g1.e1, '1') AS expr1 FROM pm1.g1) AS X__1 WHERE pm3.g1.e1 = X__1.expr1", RealMetadataFactory.example4());
}
@Test public void testSubqueryRewriteToJoin2a() throws Exception {
- TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e1 in /*+ mj */ (select pm1.g1.e1 || 1 FROM pm1.g1)", "SELECT e1 FROM pm3.g1, (SELECT DISTINCT concat(pm1.g1.e1, '1') AS EXPR FROM pm1.g1) AS X__1 WHERE pm3.g1.e1 = X__1.EXPR", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e1 in /*+ mj */ (select pm1.g1.e1 || 1 FROM pm1.g1)", "SELECT e1 FROM pm3.g1, (SELECT DISTINCT concat(pm1.g1.e1, '1') AS expr1 FROM pm1.g1) AS X__1 WHERE pm3.g1.e1 = X__1.expr1", RealMetadataFactory.example4());
}
/**
@@ -811,7 +811,7 @@
@Test public void testSubqueryRewriteToJoinWithAggregate() throws Exception {
System.setProperty(RuleMergeCriteria.UNNEST_DEFAULT, Boolean.TRUE.toString());
- TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 < (select max(e2) FROM pm1.g1 where pm3.g1.e1 = e1)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS MAX, e1 FROM pm1.g1 GROUP BY e1) AS X__1 WHERE (pm3.g1.e2 < X__1.MAX) AND (pm3.g1.e1 = X__1.e1)", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 < (select max(e2) FROM pm1.g1 where pm3.g1.e1 = e1)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS expr1, e1 FROM pm1.g1 GROUP BY e1) AS X__1 WHERE (pm3.g1.e2 < X__1.expr1) AND (pm3.g1.e1 = X__1.e1)", RealMetadataFactory.example4());
}
/**
@@ -824,12 +824,12 @@
@Test public void testSubqueryRewriteToJoinWithAggregate2() throws Exception {
System.setProperty(RuleMergeCriteria.UNNEST_DEFAULT, Boolean.TRUE.toString());
- TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 < (select max(e2) FROM pm1.g1 WHERE pm3.g1.e1 = e1 HAVING min(e3) < pm3.g1.e3)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS MAX, e1, MIN(e3) AS MIN FROM pm1.g1 GROUP BY e1) AS X__1 WHERE (X__1.MIN < pm3.g1.e3) AND (pm3.g1.e2 < X__1.MAX) AND (pm3.g1.e1 = X__1.e1)", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 < (select max(e2) FROM pm1.g1 WHERE pm3.g1.e1 = e1 HAVING min(e3) < pm3.g1.e3)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS expr1, e1, MIN(e3) AS expr3 FROM pm1.g1 GROUP BY e1) AS X__1 WHERE (X__1.expr3 < pm3.g1.e3) AND (pm3.g1.e2 < X__1.expr1) AND (pm3.g1.e1 = X__1.e1)", RealMetadataFactory.example4());
}
@Test public void testSubqueryRewriteToJoinWithGroupingExpression() throws Exception {
System.setProperty(RuleMergeCriteria.UNNEST_DEFAULT, Boolean.TRUE.toString());
- TestQueryRewriter.helpTestRewriteCommand("Select distinct e1 from pm3.g1 where exists (select 1 FROM pm1.g1 group by e4 || 'x' HAVING min(e3) || (e4 || 'x') = pm3.g1.e3)", "SELECT DISTINCT e1 FROM pm3.g1, (SELECT 1 AS EXPR, MIN(e3) AS MIN, concat(e4, 'x') AS EXPR_0, concat(MIN(e3), concat(e4, 'x')) AS EXPR_1 FROM pm1.g1 GROUP BY concat(e4, 'x')) AS X__1 WHERE pm3.g1.e3 = X__1.EXPR_1", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select distinct e1 from pm3.g1 where exists (select 1 FROM pm1.g1 group by e4 || 'x' HAVING min(e3) || (e4 || 'x') = pm3.g1.e3)", "SELECT DISTINCT e1 FROM pm3.g1, (SELECT 1 AS expr1, MIN(e3) AS expr2, concat(convert(e4, string), 'x') AS expr3, concat(convert(MIN(e3), string), concat(convert(e4, string), 'x')) AS expr FROM pm1.g1 GROUP BY concat(convert(e4, string), 'x')) AS X__1 WHERE convert(pm3.g1.e3, string) = X__1.expr", RealMetadataFactory.example4());
}
/**
@@ -866,7 +866,7 @@
@Test public void testSubqueryExpressionJoin() throws Exception {
System.setProperty(RuleMergeCriteria.UNNEST_DEFAULT, Boolean.TRUE.toString());
- TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 < (Select max(e2) from pm2.g2 where e1 = pm3.g1.e1 having convert(min(e2), string) > pm3.g1.e1)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS MAX, e1, MIN(e2) AS MIN FROM pm2.g2 GROUP BY e1) AS X__1 WHERE (convert(X__1.MIN, string) > pm3.g1.e1) AND (pm3.g1.e2 < X__1.MAX) AND (pm3.g1.e1 = X__1.e1)", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 < (Select max(e2) from pm2.g2 where e1 = pm3.g1.e1 having convert(min(e2), string) > pm3.g1.e1)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS expr1, e1, MIN(e2) AS expr3 FROM pm2.g2 GROUP BY e1) AS X__1 WHERE (convert(X__1.expr3, string) > pm3.g1.e1) AND (pm3.g1.e2 < X__1.expr1) AND (pm3.g1.e1 = X__1.e1)", RealMetadataFactory.example4());
}
/**
@@ -1029,7 +1029,7 @@
}
@Test public void testInvalidGeneratedSemijoinQuery1() throws Exception {
- TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 IN /*+ mj */ (Select max(e2) from pm2.g2 where e1 = pm3.g1.e1)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS MAX, e1 FROM pm2.g2 GROUP BY e1) AS X__1 WHERE (pm3.g1.e1 = X__1.e1) AND (pm3.g1.e2 = X__1.MAX)", RealMetadataFactory.example4());
+ TestQueryRewriter.helpTestRewriteCommand("Select e1 from pm3.g1 where pm3.g1.e2 IN /*+ mj */ (Select max(e2) from pm2.g2 where e1 = pm3.g1.e1)", "SELECT e1 FROM pm3.g1, (SELECT MAX(e2) AS expr1, e1 FROM pm2.g2 GROUP BY e1) AS X__1 WHERE (pm3.g1.e1 = X__1.e1) AND (pm3.g1.e2 = X__1.expr1)", RealMetadataFactory.example4());
}
@Test public void testCompareSubquery2() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestUnionPlanning.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestUnionPlanning.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestUnionPlanning.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -235,7 +235,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan("select * from (select * from (SELECT IntKey, intnum FROM BQT1.SmallA UNION ALL SELECT intkey, intnum FROM BQT2.SmallA) A where intkey in (1, 2, 3, 4) UNION ALL select intkey, intnum from bqt2.smallb where intkey in (6)) B inner join (SELECT IntKey, intnum FROM BQT1.SmallA where intkey in (1, 2) UNION ALL SELECT intkey, intnum FROM BQT2.SmallA where intkey in (5, 6)) C on b.intkey = c.intkey", RealMetadataFactory.exampleBQTCached(), null, TestInlineView.getInliveViewCapabilitiesFinder(),//$NON-NLS-1$
new String[] { "SELECT g_0.intkey, g_0.intnum FROM BQT2.SmallA AS g_0 WHERE g_0.intkey IN (1, 2)",
"SELECT g_0.IntKey, g_0.intnum FROM BQT1.SmallA AS g_0 WHERE g_0.IntKey IN (1, 2)",
- "SELECT g_1.IntKey, g_1.IntNum, g_0.intkey, g_0.intnum FROM bqt2.smallb AS g_0, BQT2.SmallA AS g_1 WHERE (g_0.intkey = g_1.IntKey) AND (g_0.intkey = 6) AND (g_1.IntKey = 6)",
+ "SELECT g_1.IntKey, g_1.IntNum, g_0.intkey, g_0.intnum FROM BQT2.SmallB AS g_0, BQT2.SmallA AS g_1 WHERE (g_0.intkey = g_1.IntKey) AND (g_0.intkey = 6) AND (g_1.IntKey = 6)",
"SELECT g_0.IntKey AS c_0, g_0.IntNum AS c_1 FROM BQT1.SmallA AS g_0 WHERE g_0.IntKey IN (1, 2) ORDER BY c_0" }, ComparisonMode.EXACT_COMMAND_STRING);
TestOptimizer.checkNodeTypes(plan, new int[] {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -36,6 +36,7 @@
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.unittest.RealMetadataFactory;
@SuppressWarnings("nls")
@@ -65,7 +66,7 @@
@Test public void testLongOrderByAlias() throws Exception {
String sql = "select pm1.g1.e1 || pm1.g1.e2 as asfasdfadfasdfasdfadfasdfadsfasdfasdfasdfasdfasdfadfa, pm1.g1.e2 from pm1.g1 order by asfasdfadfasdfasdfadfasdfadsfasdfasdfasdfasdfasdfadfa"; //$NON-NLS-1$
- String expected = "SELECT concat(g_0.e1, g_0.e2) AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
+ String expected = "SELECT concat(g_0.e1, convert(g_0.e2, string)) AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
}
@@ -73,19 +74,19 @@
String sql = "select e1 from pm1.g1 order by e1"; //$NON-NLS-1$
String expected = "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
Query command = (Query)helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
- assertEquals(command.getOrderBy().getSortKeys().get(0).getName(), "e1"); //$NON-NLS-1$
- assertEquals(command.getProjectedSymbols().get(0).getShortName(), "e1"); //$NON-NLS-1$
+ assertEquals(((Symbol)command.getOrderBy().getSortKeys().get(0)).getName(), "e1"); //$NON-NLS-1$
+ assertEquals(((Symbol)command.getProjectedSymbols().get(0)).getShortName(), "e1"); //$NON-NLS-1$
}
@Test public void testInlineViewWithSubQuery() throws Exception {
String sql = "select intnum from (select intnum from bqt1.smallb where intnum in (select intnum a from bqt1.smalla)) b"; //$NON-NLS-1$
- String expected = "SELECT v_0.c_0 FROM (SELECT g_0.intnum AS c_0 FROM bqt1.smallb AS g_0 WHERE g_0.intnum IN (SELECT g_1.intnum FROM bqt1.smalla AS g_1)) AS v_0"; //$NON-NLS-1$
+ String expected = "SELECT v_0.c_0 FROM (SELECT g_0.intnum AS c_0 FROM BQT1.SmallB AS g_0 WHERE g_0.intnum IN (SELECT g_1.intnum FROM BQT1.SmallA AS g_1)) AS v_0"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
}
@Test public void testInlineViewOrderBy() throws Exception {
String sql = "select intnum from (select intnum from bqt1.smallb) b order by b.intnum"; //$NON-NLS-1$
- String expected = "SELECT v_0.c_0 FROM (SELECT g_0.intnum AS c_0 FROM bqt1.smallb AS g_0) AS v_0 ORDER BY c_0"; //$NON-NLS-1$
+ String expected = "SELECT v_0.c_0 FROM (SELECT g_0.intnum AS c_0 FROM BQT1.SmallB AS g_0) AS v_0 ORDER BY c_0"; //$NON-NLS-1$
Command command = helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.exampleBQTCached());
org.teiid.language.Command c = lbf.translate(command);
@@ -94,19 +95,19 @@
@Test public void testNestedInlineViewOrderBy() throws Exception {
String sql = "select x from (select intnum x from (select intnum from bqt1.smallb) b order by x) y order by x"; //$NON-NLS-1$
- String expected = "SELECT v_1.c_0 FROM (SELECT v_0.c_0 FROM (SELECT g_0.intnum AS c_0 FROM bqt1.smallb AS g_0) AS v_0) AS v_1 ORDER BY c_0"; //$NON-NLS-1$
+ String expected = "SELECT v_1.c_0 FROM (SELECT v_0.c_0 FROM (SELECT g_0.intnum AS c_0 FROM BQT1.SmallB AS g_0) AS v_0) AS v_1 ORDER BY c_0"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
}
@Test public void testInlineViewWithOnClause() throws Exception {
String sql = "select abcd.efg from (select intkey as efg from bqt1.smalla) abcd inner join (select intnum from bqt1.smallb) b on (b.intnum = abcd.efg)"; //$NON-NLS-1$
- String expected = "SELECT v_0.c_0 FROM (SELECT g_0.intkey AS c_0 FROM bqt1.smalla AS g_0) AS v_0 INNER JOIN (SELECT g_1.intnum AS c_0 FROM bqt1.smallb AS g_1) AS v_1 ON v_1.c_0 = v_0.c_0"; //$NON-NLS-1$
+ String expected = "SELECT v_0.c_0 FROM (SELECT g_0.intkey AS c_0 FROM BQT1.SmallA AS g_0) AS v_0 INNER JOIN (SELECT g_1.intnum AS c_0 FROM BQT1.SmallB AS g_1) AS v_1 ON v_1.c_0 = v_0.c_0"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
}
@Test public void testUnionOrderBy() throws Exception {
String sql = "select e1, e2 as c_0 from pm1.g1 union all select 1, e1 from pm1.g2 order by e1"; //$NON-NLS-1$
- String expected = "SELECT g_1.e1 AS c_0, g_1.e2 AS c_1 FROM pm1.g1 AS g_1 UNION ALL SELECT '1' AS c_0, g_0.e1 AS c_1 FROM pm1.g2 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
+ String expected = "SELECT g_1.e1 AS c_0, convert(g_1.e2, string) AS c_1 FROM pm1.g1 AS g_1 UNION ALL SELECT '1' AS c_0, g_0.e1 AS c_1 FROM pm1.g2 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
}
@@ -118,19 +119,19 @@
@Test public void testCorrelatedRefernce() throws Exception {
String sql = "select intnum, stringnum from (select intnum, stringnum from bqt1.smallb) b where intnum in (select b.stringnum || b.intnum from (select intnum from bqt1.smalla) b) "; //$NON-NLS-1$
- String expected = "SELECT v_0.c_0, v_0.c_1 FROM (SELECT g_0.intnum AS c_0, g_0.stringnum AS c_1 FROM bqt1.smallb AS g_0) AS v_0 WHERE v_0.c_0 IN (SELECT concat(v_0.c_1, v_1.c_0) FROM (SELECT g_1.intnum AS c_0 FROM bqt1.smalla AS g_1) AS v_1)"; //$NON-NLS-1$
+ String expected = "SELECT v_0.c_0, v_0.c_1 FROM (SELECT g_0.intnum AS c_0, g_0.stringnum AS c_1 FROM BQT1.SmallB AS g_0) AS v_0 WHERE convert(v_0.c_0, string) IN (SELECT concat(v_0.c_1, convert(v_1.c_0, string)) FROM (SELECT g_1.intnum AS c_0 FROM BQT1.SmallA AS g_1) AS v_1)"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
}
@Test public void testCorrelatedRefernce1() throws Exception {
String sql = "select intnum, stringnum from bqt1.smallb where intnum in (select stringnum || b.intnum from (select intnum from bqt1.smalla) b) "; //$NON-NLS-1$
- String expected = "SELECT g_0.intnum, g_0.stringnum FROM bqt1.smallb AS g_0 WHERE g_0.intnum IN (SELECT concat(g_0.stringnum, v_0.c_0) FROM (SELECT g_1.intnum AS c_0 FROM bqt1.smalla AS g_1) AS v_0)"; //$NON-NLS-1$
+ String expected = "SELECT g_0.intnum, g_0.stringnum FROM BQT1.SmallB AS g_0 WHERE convert(g_0.intnum, string) IN (SELECT concat(g_0.stringnum, convert(v_0.c_0, string)) FROM (SELECT g_1.intnum AS c_0 FROM BQT1.SmallA AS g_1) AS v_0)"; //$NON-NLS-1$
helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
}
@Test public void testGroupAliasNotSupported() throws Exception {
String sql = "select b.intkey from bqt1.smalla b"; //$NON-NLS-1$
- String expected = "SELECT bqt1.smalla.intkey FROM bqt1.smalla"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.SmallA.intkey FROM BQT1.SmallA"; //$NON-NLS-1$
helpTest(sql, expected, false, false, RealMetadataFactory.exampleBQTCached());
}
@@ -152,6 +153,12 @@
helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
}
+ @Test public void testUnrelatedOrderBy2() throws Exception {
+ String sql = "SELECT b.IntKey FROM (select intkey, stringkey from BQT1.SmallA) a, (select intkey, stringkey from BQT1.SmallA) b ORDER BY a.StringKey || b.intKey"; //$NON-NLS-1$
+ String expected = "SELECT v_1.c_0 FROM (SELECT g_0.intkey AS c_0, g_0.stringkey AS c_1 FROM BQT1.SmallA AS g_0) AS v_0, (SELECT g_1.intkey AS c_0, g_1.stringkey AS c_1 FROM BQT1.SmallA AS g_1) AS v_1 ORDER BY (v_0.c_1 || v_1.c_0)"; //$NON-NLS-1$
+ helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached());
+ }
+
@Test public void testStripAliases() throws Exception {
String sql = "select intkey as a, stringkey as b from BQT1.SmallA ORDER BY a, b"; //$NON-NLS-1$
String expected = "SELECT g_0.intkey, g_0.stringkey FROM BQT1.SmallA AS g_0 ORDER BY g_0.intkey, g_0.stringkey"; //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -46,7 +46,7 @@
import org.teiid.query.parser.QueryParser;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.util.CommandContext;
@@ -77,7 +77,7 @@
PlanNode child = p.generatePlan(subCommand, false);
PlanNode sourceNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.SOURCE);
sourceNode.addFirstChild(child);
- sourceNode.setProperty(NodeConstants.Info.SYMBOL_MAP, SymbolMap.createSymbolMap(sourceNode.getGroups().iterator().next(), (List<SingleElementSymbol>)child.getFirstChild().getProperty(Info.PROJECT_COLS), metadata));
+ sourceNode.setProperty(NodeConstants.Info.SYMBOL_MAP, SymbolMap.createSymbolMap(sourceNode.getGroups().iterator().next(), (List<Expression>)child.getFirstChild().getProperty(Info.PROJECT_COLS), metadata));
//add a dummy access node
PlanNode accessNode = NodeFactory.getNewNode(NodeConstants.Types.ACCESS);
accessNode.addGroups(child.getFirstChild().getGroups());
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLNodeMappingVisitor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLNodeMappingVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLNodeMappingVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -66,7 +66,7 @@
mappingDoc = SourceNodeGenaratorVisitor.extractSourceNodes(mappingDoc);
// Create criteria
- ElementSymbol es = new ElementSymbol("Catalogs.Catalog.Items.Item.Name", null, doc); //$NON-NLS-1$
+ ElementSymbol es = new ElementSymbol("Catalogs.Catalog.Items.Item.Name", doc); //$NON-NLS-1$
ResolverVisitor.resolveLanguageObject(es, metadata);
CompareCriteria crit = new CompareCriteria(es, CompareCriteria.EQ, new Constant("abc")); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLPlanner.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLPlanner.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/xml/TestXMLPlanner.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -218,192 +218,45 @@
// Create virtual documents
// DOC 1
- Table doc1 = RealMetadataFactory.createXmlDocument("doc1", vm1, doc1()); //$NON-NLS-1$
- RealMetadataFactory.createElements(
- doc1,
- new String[] {
- "a0", //$NON-NLS-1$
- "a0.a1", //$NON-NLS-1$
- "a0.a1.a1", //$NON-NLS-1$
- "a0.a1.b1", //$NON-NLS-1$
- "a0.a1.c1" }, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("doc1", vm1, doc1()); //$NON-NLS-1$
// DOC 2
- Table doc2 = RealMetadataFactory.createXmlDocument("doc2", vm1, doc2()); //$NON-NLS-1$
- RealMetadataFactory.createElements(
- doc2,
- new String[] { "a1" }, //$NON-NLS-1$
- new String[] { DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("doc2", vm1, doc2()); //$NON-NLS-1$
// DOC 3
- Table doc3 = RealMetadataFactory.createXmlDocument("doc3", vm1, doc3()); //$NON-NLS-1$
- RealMetadataFactory.createElements(
- doc3,
- new String[] {
- "root", //$NON-NLS-1$
- "root.n1", //$NON-NLS-1$
- "root.n1.m1", //$NON-NLS-1$
- "root.n1.m1.n2", //$NON-NLS-1$
- "root.n1.m1.n2.leaf1" }, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("doc3", vm1, doc3()); //$NON-NLS-1$
// DOC 4
- Table doc4 = RealMetadataFactory.createXmlDocument("doc4", vm1, doc4()); //$NON-NLS-1$
- RealMetadataFactory.createElements(
- doc4,
- new String[] {
- "root", //$NON-NLS-1$
- "root.n4a", //$NON-NLS-1$
- "root.n4a.n4b", //$NON-NLS-1$
- "root.n4a.n4c", //$NON-NLS-1$
- "root.n4a.fake", //$NON-NLS-1$
- "root.n4a.n4c.n4d", //$NON-NLS-1$
- "root.n4a.n4c.n4e", //$NON-NLS-1$
- "root.n4a.n4c.n4e.n4f" }, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("doc4", vm1, doc4()); //$NON-NLS-1$
// DOC 5
- Table doc5 = RealMetadataFactory.createXmlDocument("doc5", vm1, doc5()); //$NON-NLS-1$
- RealMetadataFactory.createElements(
- doc5,
- new String[] {
- "root", //$NON-NLS-1$
- "root.nodea", //$NON-NLS-1$
- "root.nodea.nodeb", //$NON-NLS-1$
- "root.nodea.nodec", //$NON-NLS-1$
- "root.nodea.nodec.noded", //$NON-NLS-1$
- "root.nodea.nodec.nodee", //$NON-NLS-1$
- "root.nodea.nodec.nodee.nodef", //$NON-NLS-1$
- "root.nodea.nodec.nodee.nodeg", //$NON-NLS-1$
- "root.nodea.nodec.nodee.nodeg.nodeh", //$NON-NLS-1$
- "root.nodea.nodec.nodee.nodeg.nodeI", //$NON-NLS-1$
- "root.nodea.nodec.nodee.nodeg.nodeI.nodeJ" }, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("doc5", vm1, doc5()); //$NON-NLS-1$
// DOC 6
- Table doc6 = RealMetadataFactory.createXmlDocument("doc6", vm1, doc6()); //$NON-NLS-1$
- RealMetadataFactory.createElements(
- doc6,
- new String[] { "tempGroupTest" }, //$NON-NLS-1$
- new String[] { DataTypeManager.DefaultDataTypes.STRING });
+ RealMetadataFactory.createXmlDocument("doc6", vm1, doc6()); //$NON-NLS-1$
// DOC with excluded fragment
- Table docWithExcluded = RealMetadataFactory.createXmlDocument(
+ RealMetadataFactory.createXmlDocument(
"vm1.docWithExcluded", //$NON-NLS-1$
vm1,
docWithExcluded());
- RealMetadataFactory.createElements(
- docWithExcluded,
- new String[] {
- "root", //$NON-NLS-1$
- "root.n1", //$NON-NLS-1$
- "root.n1.m1", //$NON-NLS-1$
- "root.n1.m1.n2", //$NON-NLS-1$
- "root.n1.m1.n2.leaf1" }, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
// DOC 2 with excluded fragment
- Table doc2WithExcluded = RealMetadataFactory.createXmlDocument(
+ RealMetadataFactory.createXmlDocument(
"vm1.docWithExcluded2", //$NON-NLS-1$
vm1,
docWithExcluded2());
- RealMetadataFactory.createElements(
- doc2WithExcluded,
- new String[] {
- "root", //$NON-NLS-1$
- "root.n1", //$NON-NLS-1$
- "root.n1.m1", //$NON-NLS-1$
- "root.n1.m2", //$NON-NLS-1$
- "root.n1.m3" }, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
-
// DOC with attribute
- Table docWithAttribute = RealMetadataFactory.createXmlDocument(
+ RealMetadataFactory.createXmlDocument(
"vm1.docWithAttribute", //$NON-NLS-1$
vm1,
docTestConvertCriteriaWithAttribute());
- Table docWithAttribute3 = RealMetadataFactory.createXmlDocument(
+ RealMetadataFactory.createXmlDocument(
"vm1.docWithAttribute3", //$NON-NLS-1$
vm1,
docTestCriteriaWithAttribute());
- RealMetadataFactory.createElements(
- docWithAttribute,
- new String[] {
- "root", //$NON-NLS-1$
- "root.myElement", //$NON-NLS-1$
- "root.@myAttribute"}, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
// DOC with attribute2
- Table docWithAttribute2 = RealMetadataFactory.createXmlDocument(
+ RealMetadataFactory.createXmlDocument(
"vm1.docWithAttribute2", //$NON-NLS-1$
vm1,
docTestConvertCriteriaWithAttribute2());
- RealMetadataFactory.createElements(
- docWithAttribute2,
- new String[] {
- "root", //$NON-NLS-1$
- "root.myElement", //$NON-NLS-1$
- "root.@myAttribute"}, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
- RealMetadataFactory.createElements(
- docWithAttribute3,
- new String[] {
- "root", //$NON-NLS-1$
- "root.myElement", //$NON-NLS-1$
- "root.@type"}, //$NON-NLS-1$
- new String[] {
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING });
-
// Create the facade from the store
return RealMetadataFactory.createTransformationMetadata(metadataStore, "example1");
}
Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -47,6 +47,7 @@
import org.teiid.query.sql.proc.*;
import org.teiid.query.sql.proc.BranchingStatement.BranchingMode;
import org.teiid.query.sql.symbol.*;
+import org.teiid.query.sql.util.SymbolMap;
@SuppressWarnings("nls")
public class TestParser {
@@ -506,9 +507,8 @@
from.addGroup(g);
Function f = new Function("CONVERT", new Expression[] {new ElementSymbol("a", false), new Constant("string")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f);
Query query = new Query();
query.setSelect(select);
@@ -526,9 +526,8 @@
Function f = new Function("CONVERT", new Expression[] {new ElementSymbol("a", false), new Constant("timestamp")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Function f2 = new Function("CONVERT", new Expression[] {f, new Constant("string")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -549,9 +548,8 @@
Function f = new Function("concat", new Expression[] {new ElementSymbol("a", false), new Constant("x")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Function f2 = new Function("length", new Expression[] {f}); //$NON-NLS-1$
Function f3 = new Function("+", new Expression[] {new Constant(new Integer(5)), f2}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f3); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f3);
Query query = new Query();
query.setSelect(select);
@@ -568,8 +566,7 @@
from.addGroup(g);
Function f = new Function("replace", new Expression[] {new ElementSymbol("a", false), new Constant("x"), new Constant("y")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- ExpressionSymbol es = new ExpressionSymbol("y", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("y", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("y", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -588,9 +585,8 @@
from.addGroup(g);
Function f = new Function("cast", new Expression[] {new ElementSymbol("a", false), new Constant("string")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f);
Query query = new Query();
query.setSelect(select);
@@ -608,9 +604,8 @@
Function f = new Function("cast", new Expression[] {new ElementSymbol("a", false), new Constant("timestamp")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Function f2 = new Function("cast", new Expression[] {f, new Constant("string")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -627,8 +622,7 @@
from.addGroup(g);
Function f = new Function("left", new Expression[] {new ElementSymbol("fullname", false), new Constant(new Integer(3))}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -647,8 +641,7 @@
from.addGroup(g);
Function f = new Function("right", new Expression[] {new ElementSymbol("fullname", false), new Constant(new Integer(3))}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -667,8 +660,7 @@
from.addGroup(g);
Function f = new Function("char", new Expression[] { new Constant("x")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -687,8 +679,7 @@
from.addGroup(g);
Function f = new Function("insert", new Expression[] { new Constant("x"), new Constant(new Integer(1)), new Constant("a")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -712,8 +703,7 @@
insert.setGroup(groupSymbol);
Select select = new Select();
-// select.addSymbol( new ExpressionSymbol( new Constant( new Integer(1) ) ) );
- select.addSymbol( new ExpressionSymbol( "exp", new Constant( new Integer(1) ) ) ); //$NON-NLS-1$
+ select.addSymbol( new Constant( 1 ) ); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -732,9 +722,8 @@
from.addGroup(g);
Function f = new Function("translate", new Expression[] { new Constant("x"), new Constant("x"), new Constant("y")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f);
Query query = new Query();
query.setSelect(select);
@@ -752,8 +741,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_FRAC_SECOND"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -773,8 +761,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_SECOND"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -794,8 +781,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_MINUTE"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -815,8 +801,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_HOUR"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -836,8 +821,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_DAY"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -857,8 +841,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_WEEK"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -878,8 +861,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_QUARTER"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -899,8 +881,7 @@
Function f = new Function("timestampadd", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_YEAR"), new Constant(new Integer(10)), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -920,8 +901,7 @@
Function f = new Function("timestampdiff", new Expression[] { //$NON-NLS-1$
new Constant("SQL_TSI_FRAC_SECOND"), new Constant("2003-05-01 10:20:10"), new Constant("2003-05-01 10:20:30")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- ExpressionSymbol es = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol as = new AliasSymbol("x", es); //$NON-NLS-1$
+ AliasSymbol as = new AliasSymbol("x", f); //$NON-NLS-1$
Select select = new Select();
select.addSymbol(as);
@@ -941,9 +921,8 @@
Function f = new Function("+", new Expression[] {new Constant(new Integer(5)), new Constant(new Integer(2))}); //$NON-NLS-1$
Function f2 = new Function("+", new Expression[] {f, new Constant(new Integer(3))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -961,9 +940,8 @@
Function f = new Function("+", new Expression[] {new Constant(new Integer(5)), new Constant(new Integer(2))}); //$NON-NLS-1$
Function f2 = new Function("-", new Expression[] {f, new Constant(new Integer(3))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -982,9 +960,8 @@
Function f = new Function("*", new Expression[] {new Constant(new Integer(2)), new Constant(new Integer(3))}); //$NON-NLS-1$
Function f2 = new Function("+", new Expression[] {new Constant(new Integer(5)), f}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -1002,9 +979,8 @@
Function f = new Function("*", new Expression[] {new Constant(new Integer(5)), new Constant(new Integer(2))}); //$NON-NLS-1$
Function f2 = new Function("+", new Expression[] {f, new Constant(new Integer(3))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -1022,9 +998,8 @@
Function f = new Function("*", new Expression[] {new Constant(new Integer(5)), new Constant(new Integer(2))}); //$NON-NLS-1$
Function f2 = new Function("*", new Expression[] {f, new Constant(new Integer(3))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -1044,9 +1019,8 @@
Function f2 = new Function("*", new Expression[] {new Constant(new Integer(4)), new Constant(new Integer(5))}); //$NON-NLS-1$
Function f3 = new Function("+", new Expression[] {new Constant(new Integer(1)), f}); //$NON-NLS-1$
Function f4 = new Function("+", new Expression[] {f3, f2}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f4); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f4);
Query query = new Query();
query.setSelect(select);
@@ -1066,9 +1040,8 @@
Function f2 = new Function("*", new Expression[] {new Constant(new Integer(3)), new Constant(new Integer(4))}); //$NON-NLS-1$
Function f3 = new Function("+", new Expression[] {f, f2}); //$NON-NLS-1$
Function f4 = new Function("+", new Expression[] {f3, new Constant(new Integer(5))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f4); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f4);
Query query = new Query();
query.setSelect(select);
@@ -1087,9 +1060,8 @@
Function f = new Function("-", new Expression[] {new Constant(new Integer(5)), new Constant(new Integer(4))}); //$NON-NLS-1$
Function f2 = new Function("-", new Expression[] {f, new Constant(new Integer(3))}); //$NON-NLS-1$
Function f3 = new Function("-", new Expression[] {f2, new Constant(new Integer(2))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f3); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f3);
Query query = new Query();
query.setSelect(select);
@@ -1108,9 +1080,8 @@
Function f = new Function("/", new Expression[] {new Constant(new Integer(5)), new Constant(new Integer(4))}); //$NON-NLS-1$
Function f2 = new Function("/", new Expression[] {f, new Constant(new Integer(3))}); //$NON-NLS-1$
Function f3 = new Function("/", new Expression[] {f2, new Constant(new Integer(2))}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f3); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f3);
Query query = new Query();
query.setSelect(select);
@@ -1128,9 +1099,8 @@
Function f = new Function("||", new Expression[] {new Constant("a"), new Constant("b")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Function f2 = new Function("||", new Expression[] {f, new Constant("c")}); //$NON-NLS-1$ //$NON-NLS-2$
- ExpressionSymbol es = new ExpressionSymbol("expr", f2); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f2);
Query query = new Query();
query.setSelect(select);
@@ -1150,9 +1120,8 @@
Function f2 = new Function("+", new Expression[] {new Constant(new Integer(5)), f}); //$NON-NLS-1$
Function f3 = new Function("+", new Expression[] {new Constant(new Integer(2)), new Constant(new Integer(3))}); //$NON-NLS-1$
Function f4 = new Function("||", new Expression[] {f3, f2}); //$NON-NLS-1$
- ExpressionSymbol es = new ExpressionSymbol("expr", f4); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(es);
+ select.addSymbol(f4);
Query query = new Query();
query.setSelect(select);
@@ -1337,8 +1306,7 @@
AggregateSymbol agg1 = new AggregateSymbol("count", "COUNT", false, new ElementSymbol("a", false)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
AggregateSymbol agg2 = new AggregateSymbol("sum", "SUM", false, new ElementSymbol("a", false)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Function f = new Function("*", new Expression[] { agg1, agg2 }); //$NON-NLS-1$
- ExpressionSymbol expr = new ExpressionSymbol("expr", f); //$NON-NLS-1$
- AliasSymbol alias = new AliasSymbol("c", expr); //$NON-NLS-1$
+ AliasSymbol alias = new AliasSymbol("c", f); //$NON-NLS-1$
select.addSymbol(alias);
Query query = new Query();
@@ -1357,9 +1325,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol(
- "expr", //$NON-NLS-1$
- new Function("-", new Expression[] { new Constant(new Integer(5)), new Constant(null) }) ) ); //$NON-NLS-1$
+ select.addSymbol(new Function("-", new Expression[] { new Constant(new Integer(5)), new Constant(null) }) ); //$NON-NLS-1$
select.addSymbol(new ElementSymbol("a.g1.c1")); //$NON-NLS-1$
Query query = new Query();
@@ -1378,7 +1344,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant("abc"))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1397,7 +1363,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant("O'Leary"))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant("O'Leary")); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1415,7 +1381,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant("'abc'"))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant("'abc'")); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1433,7 +1399,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant("a'b'c"))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant("a'b'c")); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1469,7 +1435,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(new Long(123456789012L)))); //$NON-NLS-1$
+ select.addSymbol(new Constant(new Long(123456789012L))); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -1487,7 +1453,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(new BigInteger("1000000000000000000000000")))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant(new BigInteger("1000000000000000000000000"))); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1505,7 +1471,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(new Double(1.3e8)))); //$NON-NLS-1$
+ select.addSymbol(new Constant(new Double(1.3e8))); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -1523,7 +1489,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(new Double(-1.3e-6)))); //$NON-NLS-1$
+ select.addSymbol(new Constant(new Double(-1.3e-6))); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -1541,7 +1507,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(new Double(-1.3e+8)))); //$NON-NLS-1$
+ select.addSymbol(new Constant(new Double(-1.3e+8))); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -1559,7 +1525,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(java.sql.Date.valueOf("2002-10-02")))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant(java.sql.Date.valueOf("2002-10-02"))); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1577,7 +1543,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(java.sql.Date.valueOf("2002-09-01")))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant(java.sql.Date.valueOf("2002-09-01"))); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1600,7 +1566,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(java.sql.Time.valueOf("11:10:00")))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant(java.sql.Time.valueOf("11:10:00"))); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1618,7 +1584,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(java.sql.Time.valueOf("5:10:00")))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant(java.sql.Time.valueOf("5:10:00"))); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1641,7 +1607,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(java.sql.Timestamp.valueOf("2002-10-02 19:00:02.50")))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant(java.sql.Timestamp.valueOf("2002-10-02 19:00:02.50"))); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -1665,7 +1631,7 @@
private void helpTestLiteral(Boolean expected, Class<?> expectedType,
String sql, String expectedSql) {
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant(expected, expectedType))); //$NON-NLS-1$
+ select.addSymbol(new Constant(expected, expectedType)); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -2103,7 +2069,7 @@
from.addGroup(g);
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", new Constant("g\".\"a"))); //$NON-NLS-1$ //$NON-NLS-2$
+ select.addSymbol(new Constant("g\".\"a")); //$NON-NLS-1$ //$NON-NLS-2$
Query query = new Query();
query.setSelect(select);
@@ -2724,9 +2690,8 @@
@Test public void testNoFromClause(){
Select select = new Select();
ElementSymbol a = new ElementSymbol("a"); //$NON-NLS-1$
- ExpressionSymbol b = new ExpressionSymbol("expr", new Constant(new Integer(5), Integer.class)); //$NON-NLS-1$
select.addSymbol(a);
- select.addSymbol(b);
+ select.addSymbol(new Constant(new Integer(5), Integer.class));
Query query = new Query();
query.setSelect(select);
helpTest("SELECT a, 5", "SELECT a, 5", query); //$NON-NLS-1$ //$NON-NLS-2$
@@ -2752,7 +2717,7 @@
/** SELECT a or b from g */
@Test public void testOrInSelect(){
Query query = new Query();
- query.setSelect(new Select(Arrays.asList(new ExpressionSymbol("foo", new CompoundCriteria(CompoundCriteria.OR, Arrays.asList(new ExpressionCriteria(new ElementSymbol("a")), new ExpressionCriteria(new ElementSymbol("b"))))))));
+ query.setSelect(new Select(Arrays.asList(new CompoundCriteria(CompoundCriteria.OR, Arrays.asList(new ExpressionCriteria(new ElementSymbol("a")), new ExpressionCriteria(new ElementSymbol("b")))))));
helpTest("select a or b", "SELECT (a) OR (b)", query);
}
@@ -2835,8 +2800,7 @@
Select select = new Select();
Reference ref0 = new Reference(0);
- ExpressionSymbol expr = new ExpressionSymbol("expr", ref0); //$NON-NLS-1$
- select.addSymbol(expr);
+ select.addSymbol(ref0);
Reference ref1 = new Reference(1);
Criteria crit = new MatchCriteria(new ElementSymbol("b"), ref1); //$NON-NLS-1$
@@ -2984,7 +2948,7 @@
from.addClause(sfc);
Select select = new Select();
- select.addSymbol(new ElementSymbol("x.a")); //$NON-NLS-1$
+ select.addSymbol(new ElementSymbol("X.A")); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -3012,7 +2976,7 @@
from.addClause(sfc);
Select select = new Select();
- select.addSymbol(new ElementSymbol("x.a")); //$NON-NLS-1$
+ select.addSymbol(new ElementSymbol("X.A")); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -3487,7 +3451,7 @@
Query query = new Query();
Select select = new Select();
Constant c = new Constant("\u05e0"); //$NON-NLS-1$
- select.addSymbol(new ExpressionSymbol("expr", c)); //$NON-NLS-1$
+ select.addSymbol(c); //$NON-NLS-1$
query.setSelect(select);
helpTest(sql, query.toString(), query);
@@ -3587,8 +3551,7 @@
Query query = new Query();
Select select = new Select();
Function func1 = new Function("yowza_yowza", new Expression[] { }); //$NON-NLS-1$
- ExpressionSymbol exprSymbol = new ExpressionSymbol("expr", func1); //$NON-NLS-1$
- select.addSymbol(exprSymbol);
+ select.addSymbol(func1);
query.setSelect(select);
From from = new From();
@@ -3911,7 +3874,7 @@
Select s2 = new Select();
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
- s2.addSymbol(new ExpressionSymbol("expr", new ScalarSubquery(q1))); //$NON-NLS-1$
+ s2.addSymbol(new ScalarSubquery(q1)); //$NON-NLS-1$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
Query q2 = new Query();
@@ -3934,7 +3897,7 @@
q1.setFrom(f1);
Select s2 = new Select();
- s2.addSymbol(new ExpressionSymbol("expr", new ScalarSubquery(q1))); //$NON-NLS-1$
+ s2.addSymbol(new ScalarSubquery(q1)); //$NON-NLS-1$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
Query q2 = new Query();
@@ -3957,7 +3920,7 @@
q1.setFrom(f1);
Select s2 = new Select();
- s2.addSymbol(new ExpressionSymbol("expr", new ScalarSubquery(q1))); //$NON-NLS-1$
+ s2.addSymbol(new ScalarSubquery(q1)); //$NON-NLS-1$
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
@@ -3982,7 +3945,7 @@
Select s2 = new Select();
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
- s2.addSymbol(new AliasSymbol("X", new ExpressionSymbol("expr", new ScalarSubquery(q1)))); //$NON-NLS-1$ //$NON-NLS-2$
+ s2.addSymbol(new AliasSymbol("X", new ScalarSubquery(q1))); //$NON-NLS-1$ //$NON-NLS-2$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
Query q2 = new Query();
@@ -3998,7 +3961,7 @@
Select s2 = new Select();
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
- s2.addSymbol(new AliasSymbol("X", new ExpressionSymbol("expr", QueryParser.getQueryParser().parseExpression("(SELECT e1 FROM m.g1) + 2")))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ s2.addSymbol(new AliasSymbol("X", QueryParser.getQueryParser().parseExpression("(SELECT e1 FROM m.g1) + 2"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
@@ -4015,7 +3978,7 @@
Select s2 = new Select();
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
- s2.addSymbol(new AliasSymbol("X", new ExpressionSymbol("expr", QueryParser.getQueryParser().parseExpression("3 + (SELECT e1 FROM m.g1)")))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ s2.addSymbol(new AliasSymbol("X", QueryParser.getQueryParser().parseExpression("3 + (SELECT e1 FROM m.g1)"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
@@ -4032,7 +3995,7 @@
Select s2 = new Select();
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
- s2.addSymbol(new AliasSymbol("X", new ExpressionSymbol("expr", QueryParser.getQueryParser().parseExpression("(SELECT e1 FROM m.g1) + (SELECT e3 FROM m.g3)")))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ s2.addSymbol(new AliasSymbol("X", QueryParser.getQueryParser().parseExpression("(SELECT e1 FROM m.g1) + (SELECT e3 FROM m.g3)"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
@@ -4049,7 +4012,7 @@
Select s2 = new Select();
s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$
- s2.addSymbol(new AliasSymbol("X", new ExpressionSymbol("expr", QueryParser.getQueryParser().getQueryParser().parseExpression("length((SELECT e1 FROM m.g1))")))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ s2.addSymbol(new AliasSymbol("X", QueryParser.getQueryParser().parseExpression("length((SELECT e1 FROM m.g1))"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
From f2 = new From();
f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$
@@ -4226,7 +4189,7 @@
select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$
select.addSymbol(new ElementSymbol("z")); //$NON-NLS-1$
// The parser hard-codes the name "expr"
- select.addSymbol(new ExpressionSymbol("expr", expr)); //$NON-NLS-1$
+ select.addSymbol(expr); //$NON-NLS-1$
From from = new From();
from.addGroup(new GroupSymbol("m.g")); //$NON-NLS-1$
Query q = new Query();
@@ -4253,7 +4216,7 @@
select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$
select.addSymbol(new ElementSymbol("z")); //$NON-NLS-1$
// The parser hard-codes the name "expr"
- select.addSymbol(new ExpressionSymbol("expr", expr)); //$NON-NLS-1$
+ select.addSymbol(expr); //$NON-NLS-1$
From from = new From();
from.addGroup(new GroupSymbol("m.g")); //$NON-NLS-1$
Query q = new Query();
@@ -4301,7 +4264,7 @@
select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$
select.addSymbol(new ElementSymbol("z")); //$NON-NLS-1$
// The parser hard-codes the name "expr"
- select.addSymbol(new ExpressionSymbol("expr", expr)); //$NON-NLS-1$
+ select.addSymbol(expr); //$NON-NLS-1$
From from = new From();
from.addGroup(new GroupSymbol("m.g")); //$NON-NLS-1$
Query q = new Query();
@@ -4327,7 +4290,7 @@
select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$
select.addSymbol(new ElementSymbol("z")); //$NON-NLS-1$
// The parser hard-codes the name "expr"
- select.addSymbol(new ExpressionSymbol("expr", expr)); //$NON-NLS-1$
+ select.addSymbol(expr); //$NON-NLS-1$
From from = new From();
from.addGroup(new GroupSymbol("m.g")); //$NON-NLS-1$
Query q = new Query();
@@ -4479,8 +4442,7 @@
@Test public void testNationCharString() throws Exception {
Query query = (Query) QueryParser.getQueryParser().parseCommand("SELECT N'blah' FROM m.g"); //$NON-NLS-1$
Select select = query.getSelect();
- ExpressionSymbol s = (ExpressionSymbol) select.getSymbol(0);
- Constant c = (Constant) s.getExpression();
+ Constant c = (Constant) SymbolMap.getExpression(select.getSymbol(0));
assertEquals(c, new Constant("blah")); //$NON-NLS-1$
}
@@ -4608,7 +4570,7 @@
Constant as = new Constant("fooString"); //$NON-NLS-1$
Select select = new Select();
- select.addSymbol(new ExpressionSymbol("expr", as)); //$NON-NLS-1$
+ select.addSymbol(as); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -4686,7 +4648,7 @@
select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$
OrderBy orderby = new OrderBy();
- orderby.addVariable(new ExpressionSymbol("expr", new Constant(1)), true); //$NON-NLS-1$
+ orderby.addVariable(new Constant(1), true); //$NON-NLS-1$
Query query = new Query();
query.setSelect(select);
@@ -4882,8 +4844,7 @@
Query query = new Query();
Select select = new Select();
Function func1 = new Function("a.x", new Expression[] { }); //$NON-NLS-1$
- ExpressionSymbol exprSymbol = new ExpressionSymbol("expr", func1); //$NON-NLS-1$
- select.addSymbol(exprSymbol);
+ select.addSymbol(func1);
query.setSelect(select);
helpTest(sql, "SELECT a.x()", query); //$NON-NLS-1$
@@ -4916,7 +4877,7 @@
String expected = "CREATE VIRTUAL PROCEDURE\nBEGIN\nIF(x > 1)\nBEGIN\nSELECT 1;\nEND\nIF(x > 1)\nBEGIN\nSELECT 1;\nEND\nELSE\nBEGIN\nSELECT 1;\nEND\nEND"; //$NON-NLS-1$
Query query = new Query();
- query.setSelect(new Select(Arrays.asList(new ExpressionSymbol("expr", new Constant(1))))); //$NON-NLS-1$
+ query.setSelect(new Select(Arrays.asList(new Constant(1)))); //$NON-NLS-1$
CommandStatement commandStmt = new CommandStatement(query);
CompareCriteria criteria = new CompareCriteria(new ElementSymbol("x"), CompareCriteria.GT, new Constant(1)); //$NON-NLS-1$
Block block = new Block();
@@ -4946,7 +4907,7 @@
Function convert = new Function("convert", new Expression[] {new Constant(null), new Constant("blob")}); //$NON-NLS-1$ //$NON-NLS-2$
Function convert1 = new Function("convert", new Expression[] {new Constant(null), new Constant("clob")}); //$NON-NLS-1$ //$NON-NLS-2$
Function convert2 = new Function("convert", new Expression[] {new Constant(null), new Constant("xml")}); //$NON-NLS-1$ //$NON-NLS-2$
- Select select = new Select(Arrays.asList(new ExpressionSymbol("expr", convert), new ExpressionSymbol("expr1", convert1), new ExpressionSymbol("expr2", convert2))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ Select select = new Select(Arrays.asList(convert, convert1, convert2)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Query query = new Query();
query.setSelect(select);
@@ -5059,9 +5020,8 @@
@Test public void testArrayAggWithIndexing() throws Exception {
String sql = "SELECT (array_agg(1))[1]"; //$NON-NLS-1$
AggregateSymbol as = new AggregateSymbol("foo", Reserved.ARRAY_AGG, false, new Constant(1));
- ExpressionSymbol expr = new ExpressionSymbol("expr", new Function("array_get", new Expression[] {as, new Constant(1)}));
Query query = new Query();
- query.setSelect(new Select(Arrays.asList(expr)));
+ query.setSelect(new Select(Arrays.asList(new Function("array_get", new Expression[] {as, new Constant(1)}))));
helpTest(sql, "SELECT array_get(ARRAY_AGG(1), 1)", query);
}
@@ -5198,7 +5158,7 @@
@Test public void testPositionalReference() throws Exception {
String sql = "select $1";
Query query = new Query();
- query.setSelect(new Select(Arrays.asList(new ExpressionSymbol("foo", new Reference(0)))));
+ query.setSelect(new Select(Arrays.asList(new Reference(0))));
helpTest(sql, "SELECT ?", query);
}
@@ -5222,7 +5182,7 @@
@Test public void testWindowFunction() throws Exception {
String sql = "select row_number() over (partition by x order by y) from g";
Query query = new Query();
- WindowFunction wf = new WindowFunction("expr");
+ WindowFunction wf = new WindowFunction();
wf.setFunction(new AggregateSymbol("expr", "ROW_NUMBER", false, null));
WindowSpecification ws = new WindowSpecification();
ws.setPartition(new ArrayList<Expression>(Arrays.asList(new ElementSymbol("x"))));
Modified: trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -41,28 +41,28 @@
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.util.ResolverUtil;
-import org.teiid.query.sql.lang.BatchedUpdateCommand;
-import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.Delete;
-import org.teiid.query.sql.lang.From;
-import org.teiid.query.sql.lang.Insert;
-import org.teiid.query.sql.lang.ProcedureContainer;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.lang.TranslatableProcedureContainer;
-import org.teiid.query.sql.lang.Update;
-import org.teiid.query.sql.symbol.AliasSymbol;
+import org.teiid.query.sql.lang.*;
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.ReferenceCollectorVisitor;
import org.teiid.query.util.CommandContext;
public class FakeDataManager implements ProcessorDataManager {
- private Map<String, Object[]> tuples = new HashMap<String, Object[]>();
+
+ static class TupleInfo {
+ List<ElementSymbol> elements;
+ List<?>[] data;
+
+ public TupleInfo(List<ElementSymbol> elements, List<?>[] data) {
+ this.elements = elements;
+ this.data = data;
+ }
+ }
+
+ private Map<String, TupleInfo> tuples = new HashMap<String, TupleInfo>();
private Map<String, List<List<?>>[]> procTuples = new HashMap<String, List<List<?>>[]>();
private static final String LOG_CONTEXT = "FAKE_DATA_MANAGER"; //$NON-NLS-1$
@@ -155,12 +155,12 @@
}
}
- Object[] tupleInfo = tuples.get(group.getNonCorrelationName().toUpperCase());
- List<SingleElementSymbol> elements = (List) tupleInfo[0];
- List[] tuples = (List[]) tupleInfo[1];
+ TupleInfo tupleInfo = tuples.get(group.getNonCorrelationName().toUpperCase());
+ List<? extends Expression> elements = tupleInfo.elements;
+ List<?>[] data = tupleInfo.data;
- List<SingleElementSymbol> projectedSymbols = command.getProjectedSymbols();
- int[] columnMap = getColumnMap(elements, projectedSymbols);
+ List<Expression> projectedSymbols = command.getProjectedSymbols();
+ int[] columnMap = getColumnMap(tupleInfo.elements, projectedSymbols);
/*
* updateCommands is used to hold a list of commands that
@@ -176,27 +176,27 @@
// Build lookupMap from BOTH all the elements and the projected symbols - both may be needed here
Map lookupMap = new HashMap();
for(int i=0; i<elements.size(); i++) {
- SingleElementSymbol element = elements.get(i);
+ Expression element = elements.get(i);
mapElementToIndex(lookupMap, element, i, group);
}
for(int i=0; i<projectedSymbols.size(); i++) {
- SingleElementSymbol element = projectedSymbols.get(i);
+ Expression element = projectedSymbols.get(i);
mapElementToIndex(lookupMap, element, columnMap[i], group);
}
List filteredTuples = new ArrayList();
- for(int i=0; i<tuples.length; i++) {
+ for(int i=0; i<data.length; i++) {
try {
- if(new Evaluator(lookupMap, null, null).evaluate(query.getCriteria(), tuples[i])) {
- filteredTuples.add(tuples[i]);
+ if(new Evaluator(lookupMap, null, null).evaluate(query.getCriteria(), data[i])) {
+ filteredTuples.add(data[i]);
}
} catch(ExpressionEvaluationException e) {
throw new TeiidComponentException(e, e.getMessage());
}
}
- tuples = new List[filteredTuples.size()];
- filteredTuples.toArray(tuples);
+ data = new List[filteredTuples.size()];
+ filteredTuples.toArray(data);
}
} else if ( command instanceof Insert || command instanceof Update || command instanceof Delete) {
// add single update command to a list to be executed
@@ -217,18 +217,18 @@
// Build lookupMap from BOTH all the elements and the projected symbols - both may be needed here
Map<Object, Integer> lookupMap = new HashMap<Object, Integer>();
for(int i=0; i<elements.size(); i++) {
- SingleElementSymbol element = elements.get(i);
+ Expression element = elements.get(i);
mapElementToIndex(lookupMap, element, new Integer(i), group);
}
for(int i=0; i<projectedSymbols.size(); i++) {
- SingleElementSymbol element = projectedSymbols.get(i);
+ Expression element = projectedSymbols.get(i);
mapElementToIndex(lookupMap, element, new Integer(columnMap[i]), group);
}
int updated = 0;
- for(int i=0; i<tuples.length; i++) {
+ for(int i=0; i<data.length; i++) {
try {
- if(new Evaluator(lookupMap, null, null).evaluate(update.getCriteria(), tuples[i])) {
+ if(new Evaluator(lookupMap, null, null).evaluate(update.getCriteria(), data[i])) {
updated++;
}
} catch(ExpressionEvaluationException e) {
@@ -243,13 +243,13 @@
filteredTuples.add(Arrays.asList(1)); //TODO: check for bulk
}
}
- tuples = new List[filteredTuples.size()];
- filteredTuples.toArray(tuples);
- elements = new ArrayList<SingleElementSymbol>(projectedSymbols);
+ data = new List[filteredTuples.size()];
+ filteredTuples.toArray(data);
+ elements = Command.getUpdateCommandSymbol();
columnMap[0] = 0;
}
- FakeTupleSource ts= new FakeTupleSource(elements, tuples, projectedSymbols, columnMap);
+ FakeTupleSource ts= new FakeTupleSource(elements, data, projectedSymbols, columnMap);
if(this.blockOnce){
ts.setBlockOnce();
}
@@ -289,10 +289,10 @@
* @param integer
* @param group
*/
- private void mapElementToIndex(Map lookupMap, SingleElementSymbol element, Integer index, GroupSymbol group) {
+ private void mapElementToIndex(Map lookupMap, Expression element, Integer index, GroupSymbol group) {
ElementSymbol elementSymbol = (ElementSymbol)SymbolMap.getExpression(element);
if (group.getDefinition() != null){
- String groupAlias = group.getCanonicalName();
+ String groupAlias = group.getName();
elementSymbol = elementSymbol.clone();
elementSymbol.getGroupSymbol().setName(groupAlias);
}
@@ -300,27 +300,24 @@
}
// columnMap[expectedElementIndex] = allElementIndex
- private int[] getColumnMap(List allElements, List expectedElements) {
+ private int[] getColumnMap(List<ElementSymbol> allElements, List<? extends Expression> expectedElements) {
int[] map = new int[expectedElements.size()];
for(int i=0; i<expectedElements.size(); i++) {
- SingleElementSymbol symbol = (SingleElementSymbol) expectedElements.get(i);
+ Expression symbol = SymbolMap.getExpression(expectedElements.get(i));
- if (symbol instanceof AliasSymbol) {
- symbol = ((AliasSymbol)symbol).getSymbol();
- }
-
- String shortName = symbol.getShortName();
-
- // Find matching short name in all elements
boolean foundMatch = false;
- for(int j=0; j<allElements.size(); j++) {
- SingleElementSymbol tupleSymbol = (SingleElementSymbol) allElements.get(j);
- if(tupleSymbol.getShortName().equalsIgnoreCase(shortName)) {
- map[i] = j;
- foundMatch = true;
- break;
- }
+
+ if (symbol instanceof ElementSymbol) {
+ // Find matching short name in all elements
+ for(int j=0; j<allElements.size(); j++) {
+ ElementSymbol es = allElements.get(j);
+ if(es.getShortName().equalsIgnoreCase(((ElementSymbol)symbol).getShortName())) {
+ map[i] = j;
+ foundMatch = true;
+ break;
+ }
+ }
}
if(! foundMatch) {
@@ -394,11 +391,11 @@
this.recordingCommands = shouldRecord;
}
- public void registerTuples(QueryMetadataInterface metadata, String groupName, List[] data) throws QueryResolverException, TeiidComponentException {
+ public void registerTuples(QueryMetadataInterface metadata, String groupName, List<?>[] data) throws QueryResolverException, TeiidComponentException {
GroupSymbol group = new GroupSymbol(groupName);
ResolverUtil.resolveGroup(group, metadata);
List<ElementSymbol> elementSymbols = ResolverUtil.resolveElementsInGroup(group, metadata);
- tuples.put(group.getName().toUpperCase(), new Object[] { elementSymbols, data });
+ tuples.put(group.getName().toUpperCase(), new TupleInfo(elementSymbols, data));
}
@Override
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestCollectionTupleSource.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestCollectionTupleSource.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestCollectionTupleSource.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -30,14 +30,14 @@
import org.junit.Test;
import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
/**
*/
public class TestCollectionTupleSource {
@Test public void testNullSource() {
- List<SingleElementSymbol> elements = new ArrayList<SingleElementSymbol>();
+ List<Expression> elements = new ArrayList<Expression>();
elements.add(new ElementSymbol("x")); //$NON-NLS-1$
elements.add(new ElementSymbol("y")); //$NON-NLS-1$
CollectionTupleSource nts = CollectionTupleSource.createNullTupleSource();
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -54,7 +54,7 @@
static ProcessorPlan helpGetPlan(String sql) {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(2));
+ caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 2);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, false); //fake data manager doesn't support order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
@@ -232,12 +232,12 @@
// Create expected results
List[] expected = new List[] {
- Arrays.asList(new Object[] { "a", new Integer(0) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "a", new Integer(0) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "a", new Integer(0) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "a", new Integer(0) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "a", new Integer(3) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "b", new Integer(2) }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "a", 0 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "a", 0 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "a", 0 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "a", 0 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "a", 3 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "b", 2 }), //$NON-NLS-1$
};
// Construct data manager with data
@@ -413,16 +413,16 @@
// Create expected results
List[] expected = new List[] {
- Arrays.asList(new Object[] { "aa ", "aa ", new Integer(0)}), //$NON-NLS-1$ //$NON-NLS-2$
- Arrays.asList(new Object[] { "bb ", "bb ", new Integer(1)}), //$NON-NLS-1$ //$NON-NLS-2$
- Arrays.asList(new Object[] { "cc ", "cc ", new Integer(2)}) //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList(new Object[] { "aa ", "aa ", 0}), //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList(new Object[] { "bb ", "bb ", 1}), //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList(new Object[] { "cc ", "cc ", 2}) //$NON-NLS-1$ //$NON-NLS-2$
};
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
+ depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 1);
depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
if(accessNodeHandlesAliases) {
depcaps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
@@ -486,26 +486,22 @@
});
HardcodedDataManager dataManager = new HardcodedDataManager();
- dataManager.addData("SELECT g_0.stringkey FROM bqt1.smallb AS g_0", //$NON-NLS-1$
+ dataManager.addData("SELECT g_0.stringkey FROM BQT1.SmallB AS g_0", //$NON-NLS-1$
new List[] { Arrays.asList(new Object[] { "1t" }), //$NON-NLS-1$
Arrays.asList(new Object[] { "2" })}); //$NON-NLS-1$
- dataManager.addData("SELECT g_0.stringkey, g_0.intkey FROM bqt1.smalla AS g_0", //$NON-NLS-1$
- new List[] { Arrays.asList(new Object[] { "1", new Integer(1) })}); //$NON-NLS-1$
+ dataManager.addData("SELECT g_0.stringkey, g_0.intkey FROM BQT1.SmallA AS g_0", //$NON-NLS-1$
+ new List[] { Arrays.asList(new Object[] { "1", 1 })}); //$NON-NLS-1$
List[] expected = new List[] {
- Arrays.asList(new Object[] { new Integer(1) }),
+ Arrays.asList(new Object[] { 1 }),
};
TestProcessor.helpProcess(plan, dataManager, expected);
-
- assertFalse(dataManager.getCommandHistory().contains("SELECT a.stringkey, a.intkey FROM bqt1.smalla AS a WHERE concat(a.stringkey, 't') IN ('1', '2')")); //$NON-NLS-1$
}
@Test public void testCase5130a() throws Exception {
- HardcodedDataManager dataManager = helpTestDependentJoin(false);
-
- assertFalse(dataManager.getCommandHistory().contains("SELECT a.stringkey, a.intkey FROM bqt2.smalla AS a WHERE (concat(a.stringkey, 't') IN ('1t', '2')) AND (a.intkey IN (1))")); //$NON-NLS-1$
+ helpTestDependentJoin(false);
}
@Test public void testUnlimitedIn() throws Exception {
@@ -527,7 +523,7 @@
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_0.stringkey, g_0.intkey FROM bqt1.smalla AS g_0 WHERE g_0.intkey IN (<dependent values>)", "SELECT g_0.stringkey, g_0.intkey FROM bqt2.smallb AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.stringkey, g_0.intkey FROM BQT1.SmallA AS g_0 WHERE g_0.intkey IN (<dependent values>)", "SELECT g_0.stringkey, g_0.intkey FROM BQT2.SmallB AS g_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
@@ -547,15 +543,15 @@
});
HardcodedDataManager dataManager = new HardcodedDataManager();
- dataManager.addData("SELECT g_0.stringkey, g_0.intkey FROM bqt2.smallb AS g_0", //$NON-NLS-1$
- new List[] { Arrays.asList(new Object[] { "1t", new Integer(1) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "2t", new Integer(2) })}); //$NON-NLS-1$
- dataManager.addData("SELECT g_0.stringkey, g_0.intkey FROM bqt1.smalla AS g_0 WHERE g_0.intkey IN (1, 2)", //$NON-NLS-1$
- new List[] { Arrays.asList(new Object[] { "1", new Integer(1) })}); //$NON-NLS-1$
+ dataManager.addData("SELECT g_0.stringkey, g_0.intkey FROM BQT2.SmallB AS g_0", //$NON-NLS-1$
+ new List[] { Arrays.asList(new Object[] { "1t", 1 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "2t", 2 })}); //$NON-NLS-1$
+ dataManager.addData("SELECT g_0.stringkey, g_0.intkey FROM BQT1.SmallA AS g_0 WHERE g_0.intkey IN (1, 2)", //$NON-NLS-1$
+ new List[] { Arrays.asList(new Object[] { "1", 1 })}); //$NON-NLS-1$
List[] expected = new List[] {
- Arrays.asList(new Object[] { new Integer(1) }),
+ Arrays.asList(new Object[] { 1 }),
};
TestProcessor.helpProcess(plan, dataManager, expected);
@@ -568,17 +564,17 @@
dataMgr.registerTuples(
metadata,
"pm1.g1", new List[] {
- Arrays.asList(new Object[] { "a", new Integer(0), Boolean.FALSE, new Double(2.0) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "b", new Integer(1), Boolean.TRUE, null }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "c", new Integer(2), Boolean.FALSE, new Double(0.0) }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "a", 0, Boolean.FALSE, new Double(2.0) }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "b", 1, Boolean.TRUE, null }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "c", 2, Boolean.FALSE, new Double(0.0) }), //$NON-NLS-1$
} );
dataMgr.registerTuples(
metadata,
"pm6.g1", new List[] {
- Arrays.asList(new Object[] { "b", new Integer(0) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "d", new Integer(3) }), //$NON-NLS-1$
- Arrays.asList(new Object[] { "e", new Integer(1) }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "b", 0 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "d", 3 }), //$NON-NLS-1$
+ Arrays.asList(new Object[] { "e", 1 }), //$NON-NLS-1$
} );
}
@@ -599,7 +595,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
- depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
+ depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 1);
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
BasicSourceCapabilities caps = new BasicSourceCapabilities();
@@ -734,18 +730,18 @@
// Create expected results
List[] expected = new List[] {
Arrays.asList(new Object[] {
- "aa ", "aa ", new Integer(0)}), //$NON-NLS-1$ //$NON-NLS-2$
+ "aa ", "aa ", 0}), //$NON-NLS-1$ //$NON-NLS-2$
Arrays.asList(new Object[] {
- "bb ", "bb ", new Integer(1)}), //$NON-NLS-1$ //$NON-NLS-2$
+ "bb ", "bb ", 1}), //$NON-NLS-1$ //$NON-NLS-2$
Arrays.asList(new Object[] {
- "cc ", "cc ", new Integer(2)}) //$NON-NLS-1$ //$NON-NLS-2$
+ "cc ", "cc ", 2}) //$NON-NLS-1$ //$NON-NLS-2$
};
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
+ depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 1);
depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
BasicSourceCapabilities caps = new BasicSourceCapabilities();
@@ -802,13 +798,13 @@
// Create expected results
List[] expected = new List[] {
- Arrays.asList(new Object[] { new Integer(0), new Integer(1) }),
- Arrays.asList(new Object[] { new Integer(0), new Integer(1) }),
- Arrays.asList(new Object[] { new Integer(0), new Integer(1) }),
- Arrays.asList(new Object[] { new Integer(0), new Integer(1) }),
- Arrays.asList(new Object[] { new Integer(1), new Integer(2) }),
- Arrays.asList(new Object[] { new Integer(1), new Integer(2) }),
- Arrays.asList(new Object[] { new Integer(2), new Integer(3) })
+ Arrays.asList(new Object[] { 0, 1 }),
+ Arrays.asList(new Object[] { 0, 1 }),
+ Arrays.asList(new Object[] { 0, 1 }),
+ Arrays.asList(new Object[] { 0, 1 }),
+ Arrays.asList(new Object[] { 1, 2 }),
+ Arrays.asList(new Object[] { 1, 2 }),
+ Arrays.asList(new Object[] { 2, 3 })
};
// Construct data manager with data
@@ -820,7 +816,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
- caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
+ caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 1000);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
@@ -847,7 +843,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
- depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
+ depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 1);
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
BasicSourceCapabilities caps = new BasicSourceCapabilities();
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestInherintlyUpdatableViews.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestInherintlyUpdatableViews.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestInherintlyUpdatableViews.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -46,7 +46,7 @@
@Test public void testUpdatePassThrough() throws Exception {
String userSql = "update vm1.gx set e1 = e2"; //$NON-NLS-1$
String viewSql = "select * from pm1.g1 where e3 < 5";
- String expectedSql = "UPDATE pm1.g1 SET e1 = pm1.g1.e2 WHERE e3 < 5";
+ String expectedSql = "UPDATE pm1.g1 SET e1 = convert(pm1.g1.e2, string) WHERE convert(e3, integer) < 5";
helpTest(userSql, viewSql, expectedSql, null);
}
@@ -71,14 +71,14 @@
@Test public void testUpdatePassThroughWithAlias() throws Exception {
String userSql = "update vm1.gx set e1 = e2"; //$NON-NLS-1$
String viewSql = "select * from pm1.g1 as x where e3 < 5";
- String expectedSql = "UPDATE pm1.g1 SET e1 = pm1.g1.e2 WHERE e3 < 5";
+ String expectedSql = "UPDATE pm1.g1 SET e1 = convert(pm1.g1.e2, string) WHERE convert(e3, integer) < 5";
helpTest(userSql, viewSql, expectedSql, null);
}
@Test public void testDeletePassThrough() throws Exception {
String userSql = "delete from vm1.gx where e1 = e2"; //$NON-NLS-1$
String viewSql = "select * from pm1.g1 where e3 < 5";
- String expectedSql = "DELETE FROM pm1.g1 WHERE (pm1.g1.e1 = pm1.g1.e2) AND (e3 < 5)";
+ String expectedSql = "DELETE FROM pm1.g1 WHERE (pm1.g1.e1 = convert(pm1.g1.e2, string)) AND (convert(e3, integer) < 5)";
helpTest(userSql, viewSql, expectedSql, null);
}
@@ -113,10 +113,10 @@
String viewSql = "select g2.* from pm1.g1 inner join pm1.g2 on g1.e1 = g2.e1";
HardcodedDataManager dm = new HardcodedDataManager();
- dm.addData("SELECT g_1.e2, g_1.e2 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_1.e3 IS NULL)", new List[] {Arrays.asList(1, 1)});
- dm.addData("UPDATE pm1.g2 SET e1 = pm1.g2.e2 WHERE pm1.g2.e2 = 1", new List[] {Arrays.asList(1)});
+ dm.addData("SELECT convert(g_1.e2, string), g_1.e2 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_1.e3 IS NULL)", new List[] {Arrays.asList("1", 1)});
+ dm.addData("UPDATE pm1.g2 SET e1 = convert(pm1.g2.e2, string) WHERE pm1.g2.e2 = 1", new List[] {Arrays.asList(1)});
- helpTest(userSql, viewSql, "CREATE VIRTUAL PROCEDURE\nBEGIN ATOMIC\nDECLARE integer VARIABLES.ROWS_UPDATED = 0;\nLOOP ON (SELECT pm1.g2.e2 AS s_0, pm1.g2.e2 AS s_1 FROM pm1.g1 INNER JOIN pm1.g2 ON g1.e1 = g2.e1 WHERE pm1.g2.e3 IS NULL) AS X\nBEGIN\nUPDATE pm1.g2 SET e1 = pm1.g2.e2 WHERE pm1.g2.e2 = X.s_1;\nVARIABLES.ROWS_UPDATED = (VARIABLES.ROWS_UPDATED + 1);\nEND\nSELECT VARIABLES.ROWS_UPDATED;\nEND",
+ helpTest(userSql, viewSql, "CREATE VIRTUAL PROCEDURE\nBEGIN ATOMIC\nDECLARE integer VARIABLES.ROWS_UPDATED = 0;\nLOOP ON (SELECT convert(pm1.g2.e2, string) AS s_0, pm1.g2.e2 AS s_1 FROM pm1.g1 INNER JOIN pm1.g2 ON g1.e1 = g2.e1 WHERE pm1.g2.e3 IS NULL) AS X\nBEGIN\nUPDATE pm1.g2 SET e1 = convert(pm1.g2.e2, string) WHERE pm1.g2.e2 = X.s_1;\nVARIABLES.ROWS_UPDATED = (VARIABLES.ROWS_UPDATED + 1);\nEND\nSELECT VARIABLES.ROWS_UPDATED;\nEND",
dm);
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -52,7 +52,7 @@
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.util.CommandContext;
-@SuppressWarnings("nls")
+@SuppressWarnings({"nls", "unchecked"})
public class TestMaterialization {
private TempMetadataAdapter metadata;
@@ -70,8 +70,8 @@
metadata = new TempMetadataAdapter(actualMetadata, tempStore.getMetadataStore());
hdm = new HardcodedDataManager();
hdm.addData("SELECT matsrc.x FROM matsrc", new List[] {Arrays.asList((String)null), Arrays.asList("one"), Arrays.asList("two"), Arrays.asList("three")});
- hdm.addData("SELECT mattable.info.e1, mattable.info.e2 FROM mattable.info", new List[] {Arrays.asList("a", 1), Arrays.asList("a", 2)});
- hdm.addData("SELECT mattable.info.e2, mattable.info.e1 FROM mattable.info", new List[] {Arrays.asList(1, "a"), Arrays.asList(2, "a")});
+ hdm.addData("SELECT MATTABLE.INFO.E1, MATTABLE.INFO.E2 FROM MATTABLE.INFO", new List[] {Arrays.asList("a", 1), Arrays.asList("a", 2)});
+ hdm.addData("SELECT MATTABLE.INFO.E2, MATTABLE.INFO.E1 FROM MATTABLE.INFO", new List[] {Arrays.asList(1, "a"), Arrays.asList(2, "a")});
SessionAwareCache<CachedResults> cache = new SessionAwareCache<CachedResults>();
cache.setTupleBufferCache(bm);
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -5803,14 +5803,14 @@
Arrays.asList(new Object[] { "2", new Integer(2), new Integer(6) }), //$NON-NLS-1$
Arrays.asList(new Object[] { "3", new Integer(3), new Integer(7) }), //$NON-NLS-1$
};
- dataManager.addData("SELECT bqt1.smalla.stringkey, bqt1.smalla.intkey, bqt1.smalla.intnum FROM bqt1.smalla", data1); //$NON-NLS-1$
+ dataManager.addData("SELECT BQT1.SmallA.stringkey, BQT1.SmallA.intkey, BQT1.SmallA.intnum FROM BQT1.SmallA", data1); //$NON-NLS-1$
List[] data2 = new List[] {
Arrays.asList(new Object[] { "1" }), //$NON-NLS-1$
Arrays.asList(new Object[] { "2" }), //$NON-NLS-1$
Arrays.asList(new Object[] { "3" }), //$NON-NLS-1$
};
- dataManager.addData("SELECT bqt2.mediumb.stringkey FROM bqt2.mediumb", data2); //$NON-NLS-1$
+ dataManager.addData("SELECT BQT2.MediumB.stringkey FROM BQT2.MediumB", data2); //$NON-NLS-1$
// Run query
List[] expectedResults = new List[] {
@@ -6195,9 +6195,9 @@
// Construct data manager with data
HardcodedDataManager dataManager = new HardcodedDataManager();
- dataManager.addData("SELECT g_0.intkey, g_0.intnum FROM bqt2.smalla AS g_0", //$NON-NLS-1$
+ dataManager.addData("SELECT g_0.intkey, g_0.intnum FROM BQT2.SmallA AS g_0", //$NON-NLS-1$
new List[] { Arrays.asList(new Object[] { new Integer(1), new Integer(1) })});
- dataManager.addData("SELECT g_1.intnum AS c_0, 1 AS c_1 FROM bqt1.smalla AS g_1 UNION ALL SELECT g_0.IntKey AS c_0, g_0.IntNum AS c_1 FROM bqt1.smalla AS g_0", //$NON-NLS-1$
+ dataManager.addData("SELECT g_1.intnum AS c_0, 1 AS c_1 FROM BQT1.SmallA AS g_1 UNION ALL SELECT g_0.IntKey AS c_0, g_0.IntNum AS c_1 FROM BQT1.SmallA AS g_0", //$NON-NLS-1$
new List[] { Arrays.asList(new Object[] { new Integer(1), new Integer(1) }),
Arrays.asList(new Object[] { new Integer(1), new Integer(1) })});
helpProcess(plan, dataManager, expected);
@@ -7279,7 +7279,7 @@
}
@Test public void testImplicitAggregateWithInlineView() {
- String sql = "SELECT * FROM (SELECT b.count, enterprise_id FROM (SELECT COUNT(*), 2 AS enterprise_id FROM (SELECT 'A Name' AS Name, 1 AS enterprise_id) c ) b ) a WHERE enterprise_id = 1"; //$NON-NLS-1$
+ String sql = "SELECT * FROM (SELECT b.count, enterprise_id FROM (SELECT COUNT(*) as count, 2 AS enterprise_id FROM (SELECT 'A Name' AS Name, 1 AS enterprise_id) c ) b ) a WHERE enterprise_id = 1"; //$NON-NLS-1$
List[] expected = new List[] {};
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -568,8 +568,8 @@
finder.addCapabilities("test", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata4(), null, finder,
- new String[] {"SELECT g_0.e2 AS c_0 FROM test.\"group\" AS g_0 WHERE (g_0.e0 = 1) AND (g_0.e1 = '2') ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.e0 AS c_0, g_0.e1 AS c_1, g_0.e0 AS c_2 FROM test.\"group\" AS g_0 WHERE (g_0.e0 IN (<dependent values>)) AND (g_0.e1 IN (<dependent values>)) ORDER BY c_2, c_1"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[] {"SELECT g_0.e0 AS c_0, g_0.e1 AS c_1, convert(g_0.e0, string) AS c_2 FROM test.\"group\" AS g_0 WHERE (convert(g_0.e0, string) IN (<dependent values>)) AND (g_0.e1 IN (<dependent values>)) ORDER BY c_2, c_1",
+ "SELECT g_0.e2 AS c_0 FROM test.\"group\" AS g_0 WHERE (g_0.e0 = 1) AND (g_0.e1 = '2') ORDER BY c_0"}, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
Modified: trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -59,7 +59,7 @@
@SuppressWarnings("nls")
public class TestExpressionEvaluator {
- public void helpTestEval(Expression expr, SingleElementSymbol[] elementList, Object[] valueList, ProcessorDataManager dataMgr, CommandContext context, Object expectedValue) {
+ public void helpTestEval(Expression expr, Expression[] elementList, Object[] valueList, ProcessorDataManager dataMgr, CommandContext context, Object expectedValue) {
try {
Object actualValue = helpEval(expr, elementList, valueList, dataMgr, context);
assertEquals("Did not get expected result", expectedValue, actualValue); //$NON-NLS-1$
@@ -68,7 +68,7 @@
}
}
- public Object helpEval(Expression expr, SingleElementSymbol[] elementList, Object[] valueList, ProcessorDataManager dataMgr, CommandContext context) throws ExpressionEvaluationException, BlockedException, TeiidComponentException {
+ public Object helpEval(Expression expr, Expression[] elementList, Object[] valueList, ProcessorDataManager dataMgr, CommandContext context) throws ExpressionEvaluationException, BlockedException, TeiidComponentException {
Map elements = new HashMap();
if (elementList != null) {
for(int i=0; i<elementList.length; i++) {
@@ -100,25 +100,25 @@
@Test public void testSearchedCaseExpression1() {
SearchedCaseExpression expr = TestSearchedCaseExpression.example(3);
helpTestEval(expr,
- new SingleElementSymbol[] {new ElementSymbol("x")}, //$NON-NLS-1$
+ new Expression[] {new ElementSymbol("x")}, //$NON-NLS-1$
new Object[] {new Integer(0)},
null,
null,
new Integer(0));
helpTestEval(expr,
- new SingleElementSymbol[] {new ElementSymbol("x")}, //$NON-NLS-1$
+ new Expression[] {new ElementSymbol("x")}, //$NON-NLS-1$
new Object[] {new Integer(1)},
null,
null,
new Integer(1));
helpTestEval(expr,
- new SingleElementSymbol[] {new ElementSymbol("x")}, //$NON-NLS-1$
+ new Expression[] {new ElementSymbol("x")}, //$NON-NLS-1$
new Object[] {new Integer(2)},
null,
null,
new Integer(2));
helpTestEval(expr,
- new SingleElementSymbol[] {new ElementSymbol("x")}, //$NON-NLS-1$
+ new Expression[] {new ElementSymbol("x")}, //$NON-NLS-1$
new Object[] {new Integer(3)},
null,
null,
@@ -126,14 +126,14 @@
}
@Test public void testConstant() {
- helpTestEval(new Constant("xyz", String.class), new SingleElementSymbol[0], new Object[0], null, null, "xyz"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestEval(new Constant("xyz", String.class), new Expression[0], new Object[0], null, null, "xyz"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testElement1() {
ElementSymbol e1 = new ElementSymbol("e1"); //$NON-NLS-1$
ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$
- SingleElementSymbol[] elements = new SingleElementSymbol[] {
+ Expression[] elements = new Expression[] {
e1, e2
};
@@ -148,7 +148,7 @@
ElementSymbol e1 = new ElementSymbol("e1"); //$NON-NLS-1$
ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$
- SingleElementSymbol[] elements = new SingleElementSymbol[] {
+ Expression[] elements = new Expression[] {
e1, e2
};
@@ -165,7 +165,7 @@
@Test public void testElement3() throws Exception {
ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$
- SingleElementSymbol[] elements = new SingleElementSymbol[] {};
+ Expression[] elements = new Expression[] {};
Object[] values = new Object[] {
"xyz", "abc" //$NON-NLS-1$ //$NON-NLS-2$
@@ -190,7 +190,7 @@
FunctionDescriptor desc = RealMetadataFactory.SFM.getSystemFunctionLibrary().findFunction("concat", new Class[] { String.class, String.class } ); //$NON-NLS-1$
func.setFunctionDescriptor(desc);
- SingleElementSymbol[] elements = new SingleElementSymbol[] {
+ Expression[] elements = new Expression[] {
e1, e2
};
@@ -212,7 +212,7 @@
FunctionDescriptor desc = RealMetadataFactory.SFM.getSystemFunctionLibrary().findFunction("concat", new Class[] { String.class, String.class } ); //$NON-NLS-1$
func.setFunctionDescriptor(desc);
- SingleElementSymbol[] elements = new SingleElementSymbol[] {
+ Expression[] elements = new Expression[] {
e1, e2
};
@@ -233,7 +233,7 @@
FunctionDescriptor desc = RealMetadataFactory.SFM.getSystemFunctionLibrary().findFunction("lookup", new Class[] { String.class, String.class, String.class, String.class } ); //$NON-NLS-1$
func.setFunctionDescriptor(desc);
- SingleElementSymbol[] elements = new SingleElementSymbol[] {
+ Expression[] elements = new Expression[] {
e1, e2
};
Modified: trunk/engine/src/test/java/org/teiid/query/processor/proc/TestProcedureProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/proc/TestProcedureProcessor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/proc/TestProcedureProcessor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -991,7 +991,7 @@
helpTestProcessFailure(plan,
dataMgr,
- "Couldn't execute the dynamic SQL command \"EXECUTE 'EXEC pm1.sq2(''First'')' AS e1 string, e2 integer\" with the SQL statement \"'EXEC pm1.sq2(''First'')'\" due to: There is a recursive invocation of group 'PM1.SQ2'. Please correct the SQL.", metadata); //$NON-NLS-1$
+ "Couldn't execute the dynamic SQL command \"EXECUTE 'EXEC pm1.sq2(''First'')' AS e1 string, e2 integer\" with the SQL statement \"'EXEC pm1.sq2(''First'')'\" due to: There is a recursive invocation of group 'pm1.sq2'. Please correct the SQL.", metadata); //$NON-NLS-1$
}
@Test public void testDynamicCommandIncorrectProjectSymbolCount() throws Exception {
@@ -1310,7 +1310,7 @@
StringBuffer procedure = new StringBuffer("CREATE VIRTUAL PROCEDURE \n"); //$NON-NLS-1$
procedure.append("BEGIN\n"); //$NON-NLS-1$
procedure.append("create local temporary table t1 (e1 integer);\n"); //$NON-NLS-1$
- procedure.append("create local temporary table t1 (e1 integer);\n"); //$NON-NLS-1$
+ procedure.append("create local temporary table T1 (e1 integer);\n"); //$NON-NLS-1$
procedure.append("SELECT e1 from t1;\n"); //$NON-NLS-1$
procedure.append("END"); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/processor/xml/FakeXMLProcessorEnvironment.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/xml/FakeXMLProcessorEnvironment.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/xml/FakeXMLProcessorEnvironment.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -30,8 +30,6 @@
import org.teiid.common.buffer.BufferManagerFactory;
import org.teiid.core.TeiidComponentException;
import org.teiid.query.mapping.xml.ResultSetInfo;
-import org.teiid.query.processor.xml.PlanExecutor;
-import org.teiid.query.processor.xml.XMLProcessorEnvironment;
/**
@@ -47,9 +45,9 @@
schemaMap.put(resultSetName, schema);
}
- public PlanExecutor createResultExecutor(final String resultSetName, ResultSetInfo info)
+ public PlanExecutor createResultExecutor(ResultSetInfo info)
throws TeiidComponentException{
- return new FakePlanExecutor(resultSetName, (List)schemaMap.get(resultSetName), (List[])dataMap.get(resultSetName));
+ return new FakePlanExecutor(info.getResultSetName(), (List)schemaMap.get(info.getResultSetName()), (List[])dataMap.get(info.getResultSetName()));
}
/**
Modified: trunk/engine/src/test/java/org/teiid/query/processor/xml/TestInstructions.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/xml/TestInstructions.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/xml/TestInstructions.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -52,6 +52,7 @@
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.lang.QueryCommand;
import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.util.CommandContext;
@@ -294,9 +295,9 @@
temp.initialize(context,null,bufferMgr);
List<ElementSymbol> schema = new ArrayList<ElementSymbol>();
- schema.add(new ElementSymbol(resultSetName + ElementSymbol.SEPARATOR + "itemNum")); //$NON-NLS-1$
- schema.add(new ElementSymbol(resultSetName + ElementSymbol.SEPARATOR + "itemName")); //$NON-NLS-1$
- schema.add(new ElementSymbol(resultSetName + ElementSymbol.SEPARATOR + "itemQuantity")); //$NON-NLS-1$
+ schema.add(new ElementSymbol(resultSetName + Symbol.SEPARATOR + "itemNum")); //$NON-NLS-1$
+ schema.add(new ElementSymbol(resultSetName + Symbol.SEPARATOR + "itemName")); //$NON-NLS-1$
+ schema.add(new ElementSymbol(resultSetName + Symbol.SEPARATOR + "itemQuantity")); //$NON-NLS-1$
env.addData(resultSetName, schema, new List[] {
Arrays.asList( new Object[] { "001", "Lamp", new Integer(5) } ), //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLPlanningEnhancements.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLPlanningEnhancements.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLPlanningEnhancements.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -67,9 +67,7 @@
new String[] { "supplierNum", "supplierName", "supplierZipCode" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- Table doc18a = RealMetadataFactory.createXmlDocument("doc18a", xmltest, TestXMLProcessor.createXMLPlanNested("xmltest.suppliersY")); //$NON-NLS-1$ //$NON-NLS-2$
- RealMetadataFactory.createElements(doc18a, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
+ RealMetadataFactory.createXmlDocument("doc18a", xmltest, TestXMLProcessor.createXMLPlanNested("xmltest.suppliersY")); //$NON-NLS-1$ //$NON-NLS-2$
return metadata;
}
@@ -78,9 +76,7 @@
Schema xmltest = metadata.getMetadataStore().getSchemas().get("XMLTEST");
- Table docJoin = RealMetadataFactory.createXmlDocument("docJoin", xmltest, createXMLPlanNestedJoin()); //$NON-NLS-1$
- RealMetadataFactory.createElements(docJoin, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name", "Catalogs.Catalog.items.item.suppliers.supplier.orders", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.@OrderID" ,"Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderDate", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderQuantity", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderStatus"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NL!
S-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$ //$NON-NLS-18$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
+ RealMetadataFactory.createXmlDocument("docJoin", xmltest, createXMLPlanNestedJoin()); //$NON-NLS-1$
QueryNode tempQueryJoin = null;
if (!simpleTempSelect) {
@@ -147,7 +143,7 @@
order.setSource("xmltest.ordersC"); //$NON-NLS-1$
order.setMaxOccurrs(-1);
order.addAttribute(new MappingAttribute("OrderID", "xmltest.ordersC.orderNum")); //$NON-NLS-1$ //$NON-NLS-2$
- order.addChildElement(new MappingElement("OrderDate", "xmltest.ordersc.orderDate")); //$NON-NLS-1$ //$NON-NLS-2$
+ order.addChildElement(new MappingElement("OrderDate", "xmltest.ordersC.orderDate")); //$NON-NLS-1$ //$NON-NLS-2$
order.addChildElement(new MappingElement("OrderQuantity", "xmltest.ordersC.orderQty")); //$NON-NLS-1$ //$NON-NLS-2$
order.addChildElement(new MappingElement("OrderStatus", "xmltest.ordersC.orderStatus")) //$NON-NLS-1$ //$NON-NLS-2$
.setMinOccurrs(0);
@@ -328,7 +324,7 @@
XMLPlan plan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.doc18a where supplierID<56", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
- Map stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
assertNull(stats.get(ExecStagingTableInstruction.class));
}
@@ -381,8 +377,8 @@
XMLPlan plan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.doc9", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
//check for staging; one for staging and for unloading
- Map stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
- assertEquals(2, ((List)stats.get(ExecStagingTableInstruction.class)).size());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
+ assertEquals(2, stats.get(ExecStagingTableInstruction.class).size());
}
/**
@@ -403,7 +399,7 @@
XMLPlan plan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.doc9", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
//check for no staging
- Map stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
assertNull(stats.get(ExecStagingTableInstruction.class));
}
@@ -417,7 +413,7 @@
XMLPlan plan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.doc9 OPTION NOCACHE", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
//check for no staging
- Map stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
assertNull(stats.get(ExecStagingTableInstruction.class));
}
@@ -431,7 +427,7 @@
XMLPlan plan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.doc9 OPTION NOCACHE XMLTEST.SUPPLIERS", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
//check for no staging by the mapping class name
- Map stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
assertNull(stats.get(ExecStagingTableInstruction.class));
plan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.doc9 OPTION NOCACHE XMLTEST.SUPPLIERS", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
@@ -449,8 +445,8 @@
String expectedDoc = TestXMLProcessor.readFile("TestXMLProcessor-FullSuppliers.xml"); //$NON-NLS-1$
XMLPlan xmlPlan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.docJoin", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
- Map stats = XMLProgramUtil.getProgramStats(xmlPlan.getOriginalProgram());
- List list = (List)stats.get(ExecSqlInstruction.class);
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(xmlPlan.getOriginalProgram());
+ List<ProcessorInstruction> list = stats.get(ExecSqlInstruction.class);
ExecSqlInstruction instr = (ExecSqlInstruction)list.get(2);
@@ -489,8 +485,8 @@
String expectedDoc = TestXMLProcessor.readFile("TestXMLProcessor-FullSuppliers.xml"); //$NON-NLS-1$
XMLPlan xmlPlan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.docJoin", metadata, dataMgr, null, TestOptimizer.getGenericFinder(false), expectedDoc); //$NON-NLS-1$
- Map stats = XMLProgramUtil.getProgramStats(xmlPlan.getOriginalProgram());
- List list = (List)stats.get(ExecSqlInstruction.class);
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(xmlPlan.getOriginalProgram());
+ List<ProcessorInstruction> list = stats.get(ExecSqlInstruction.class);
ExecSqlInstruction instr = (ExecSqlInstruction)list.get(2);
@@ -529,8 +525,8 @@
XMLPlan xmlPlan = (XMLPlan)TestXMLProcessor.helpTestProcess("SELECT * FROM xmltest.docJoin where context(Supplier, SupplierID) = 51", expectedDoc, metadata, dataMgr); //$NON-NLS-1$
//check for staging; one for staging and for unloading - only two pairs are expected
- Map stats = XMLProgramUtil.getProgramStats(xmlPlan.getOriginalProgram());
- assertEquals(4, ((List)stats.get(ExecStagingTableInstruction.class)).size());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(xmlPlan.getOriginalProgram());
+ assertEquals(4, stats.get(ExecStagingTableInstruction.class).size());
}
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -40,6 +40,7 @@
import org.teiid.core.TeiidException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.types.DataTypeManager.DefaultDataTypes;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.metadata.ColumnSet;
import org.teiid.metadata.MetadataStore;
@@ -400,73 +401,32 @@
new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
// Create virtual docs
- Table doc1 = RealMetadataFactory.createXmlDocument("doc1", xmltest, createXMLMappingNode(true)); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc1, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER });
+ RealMetadataFactory.createXmlDocument("doc1", xmltest, createXMLMappingNode(true)); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc1Unformatted", xmltest, createXMLMappingNode(false)); //$NON-NLS-1$
- Table doc1b = RealMetadataFactory.createXmlDocument("doc1b", xmltest, createXMLPlan2(false, true, 0 )); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc1b, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER });
- Table doc1c = RealMetadataFactory.createXmlDocument("doc1c", xmltest, createXMLPlan2(false, true, 1 )); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc1c, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER });
-
- Table docBounded = RealMetadataFactory.createXmlDocument("docBounded", xmltest, createXMLMappingBoundingNode()); //$NON-NLS-1$
- RealMetadataFactory.createElements(docBounded, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER });
-
- Table doc2 = RealMetadataFactory.createXmlDocument("doc2", xmltest, createXMLPlan2(1, -1, false)); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc2, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
+ RealMetadataFactory.createXmlDocument("doc1b", xmltest, createXMLPlan2(false, true, 0 )); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc1c", xmltest, createXMLPlan2(false, true, 1 )); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("docBounded", xmltest, createXMLMappingBoundingNode()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc2", xmltest, createXMLPlan2(1, -1, false)); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc2a", xmltest, createXMLPlan2(1, 1, false)); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc2b", xmltest, createXMLPlan2(1, -1, true)); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc2c", xmltest, createXMLPlan2(2, -1, false)); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc2d", xmltest, createXMLPlan2(2, 1, false)); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc2e", xmltest, createXMLPlan2(2, 3, false)); //$NON-NLS-1$
- Table doc3 = RealMetadataFactory.createXmlDocument("doc3", xmltest, createXMLPlanWithDefaults()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc3, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER });
- Table doc4 = RealMetadataFactory.createXmlDocument("doc4", xmltest, createXMLPlanAdvanced()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc4, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Fake", "Catalogs.Fake.FakeChild2", "Catalogs.Fake.FakeChild2.FakeChild2a", "Catalogs.Fake.FakeChild3", "Catalogs.Fake.FakeChild3.@FakeAtt" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
- Table doc5 = RealMetadataFactory.createXmlDocument("doc5", xmltest, createXMLPlanUltraAdvanced()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc5, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.DiscontinuedItem", "Catalogs.Catalog.items.DiscontinuedItem.@ItemID", "Catalogs.Catalog.items.DiscontinuedItem.Name", "Catalogs.Catalog.items.DiscontinuedItem.Quantity", "Catalogs.Catalog.items.StatusUnknown", "Catalogs.Catalog.items.StatusUnknown.@ItemID", "Catalogs.Catalog.items.StatusUnknown.Name", "Catalogs.Catalog.items.StatusUnknown.Quantity", "Catalogs.Catalog.items.Shouldn't see", "Catalogs.Catalog.items.Shouldn't see 2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- Table doc6 = RealMetadataFactory.createXmlDocument("doc6", xmltest, createXMLPlanUltraAdvancedExceptionOnDefault()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc6, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.DiscontinuedItem", "Catalogs.Catalog.items.DiscontinuedItem.@ItemID", "Catalogs.Catalog.items.DiscontinuedItem.Name", "Catalogs.Catalog.items.DiscontinuedItem.Quantity", "Catalogs.Catalog.items.Shouldn't see"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING });
- Table doc7 = RealMetadataFactory.createXmlDocument("doc7", xmltest, createTestAttributePlan()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc7, new String[] { "FixedValueTest", "FixedValueTest.wrapper", "FixedValueTest.wrapper.@fixed", "FixedValueTest.wrapper.@key", "FixedValueTest.wrapper.@fixedAttr"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
- Table doc8 = RealMetadataFactory.createXmlDocument("doc8", xmltest, createXMLPlanNested()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc8, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
- Table doc9 = RealMetadataFactory.createXmlDocument("doc9", xmltest, createXMLPlanNested2()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc9, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name", "Catalogs.Catalog.items.item.suppliers.supplier.orders", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.@OrderID" ,"Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderDate", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderQuantity", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderStatus"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3!
$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$ //$NON-NLS-18$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
- Table doc9a = RealMetadataFactory.createXmlDocument("doc9a", xmltest, createXMLPlanNested2a()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc9a, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name", "Catalogs.Catalog.items.item.suppliers.supplier.orders", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.@OrderID" ,"Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderDate", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderQuantity", "Catalogs.Catalog.items.item.suppliers.supplier.orders.order.OrderStatus"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-!
3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$ //$NON-NLS-18$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
+ RealMetadataFactory.createXmlDocument("doc3", xmltest, createXMLPlanWithDefaults()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc4", xmltest, createXMLPlanAdvanced()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc5", xmltest, createXMLPlanUltraAdvanced()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc6", xmltest, createXMLPlanUltraAdvancedExceptionOnDefault()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc7", xmltest, createTestAttributePlan()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc8", xmltest, createXMLPlanNested()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc9", xmltest, createXMLPlanNested2()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc9a", xmltest, createXMLPlanNested2a()); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc9b", xmltest, createXMLPlanNested2b()); //$NON-NLS-1$
- Table doc10 = RealMetadataFactory.createXmlDocument("doc10", xmltest, createXMLPlanNestedWithChoice()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc10, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order.@OrderID" ,"Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order.OrderDate", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order.OrderQuantity", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.!
order.OrderStatus", "Catalogs.Catalog.items.item.suppliers.supplier.orders.ProcessingOrders" ,"Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.otherorder.@OrderID", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.otherorder"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$ //$NON-NLS-18$ //$NON-NLS-19$ //$NON-NLS-20$ //$NON-NLS-21$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
+ RealMetadataFactory.createXmlDocument("doc10", xmltest, createXMLPlanNestedWithChoice()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc10L", xmltest, createXMLPlanNestedWithLookupChoice()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc11", xmltest, createXMLPlanMultipleDocs()); //$NON-NLS-1$
- Table doc10L = RealMetadataFactory.createXmlDocument("doc10L", xmltest, createXMLPlanNestedWithLookupChoice()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc10L, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order.@OrderID" ,"Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order.OrderDate", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.order.OrderQuantity", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders!
.order.OrderStatus", "Catalogs.Catalog.items.item.suppliers.supplier.orders.ProcessingOrders" ,"Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.otherorder.@OrderID", "Catalogs.Catalog.items.item.suppliers.supplier.ProcessingOrders.otherorder"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$ //$NON-NLS-18$ //$NON-NLS-19$ //$NON-NLS-20$ //$NON-NLS-21$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
-
- Table doc11 = RealMetadataFactory.createXmlDocument("doc11", xmltest, createXMLPlanMultipleDocs()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc11, new String[] { "Item", "Item.@ItemID", "Item.Name", "Item.Quantity", "Item.Suppliers", "Item.Suppliers.Supplier", "Item.Suppliers.Supplier.@SupplierID", "Item.Suppliers.Supplier.Name", "Item.Suppliers.Supplier.Zip"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
//variations on the same recursive doc====================
boolean useRecursiveCriteria = false;
int recursionlimit = -1;
@@ -490,50 +450,24 @@
RealMetadataFactory.createXmlDocument("doc17", xmltest, createXMLPlanWithComment()); //$NON-NLS-1$
- Table doc_5266a = RealMetadataFactory.createXmlDocument("doc_5266a", xmltest, createXMLPlanNestedWithChoiceFor5266()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc_5266a, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
-
+ RealMetadataFactory.createXmlDocument("doc_5266a", xmltest, createXMLPlanNestedWithChoiceFor5266()); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc_8917", xmltest, createXMLPlan_defect8917()); //$NON-NLS-1$
- Table doc_9446 = RealMetadataFactory.createXmlDocument("doc_9446", xmltest, createXMLPlan_defect9446()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc_9446", xmltest, createXMLPlan_defect9446()); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc_9530", xmltest, createXMLPlan_defect_9530()); //$NON-NLS-1$
-
- RealMetadataFactory.createElements(doc_9446, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.XXXXX"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER});
//Test doc w/ update mapping class transformation
RealMetadataFactory.createXmlDocument("docUpdateTest", xmltest, createUpdateTestDoc()); //$NON-NLS-1$
- Table doc_9893 = RealMetadataFactory.createXmlDocument("doc9893", xmltest, createXMLPlan_9893()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc_9893, new String[] { "Root", "Root.ItemName"}, //$NON-NLS-1$ //$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
+ RealMetadataFactory.createXmlDocument("doc9893", xmltest, createXMLPlan_9893()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc18", xmltest, createXMLPlanNested("xmltest.suppliersX")); //$NON-NLS-1$ //$NON-NLS-2$
+ RealMetadataFactory.createXmlDocument("doc12260", xmltest, createXMLPlanCorrelatedSubqueryTransform()); //$NON-NLS-1$
- Table doc18 = RealMetadataFactory.createXmlDocument("doc18", xmltest, createXMLPlanNested("xmltest.suppliersX")); //$NON-NLS-1$ //$NON-NLS-2$
- RealMetadataFactory.createElements(doc18, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
+ RealMetadataFactory.createXmlDocument("doc8373", xmltest, createXMLPlan_defect8373()); //$NON-NLS-1$
- Table doc12260 = RealMetadataFactory.createXmlDocument("doc12260", xmltest, createXMLPlanCorrelatedSubqueryTransform()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc12260, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.numSuppliers" }, //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-7$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-8$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING});
+ RealMetadataFactory.createXmlDocument("doc8373a", xmltest, createXMLPlan_defect8373a()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc8373b", xmltest, createXMLPlan_defect8373b()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc13617", xmltest, createXMLPlanDefect13617()); //$NON-NLS-1$
- Table doc8373 = RealMetadataFactory.createXmlDocument("doc8373", xmltest, createXMLPlan_defect8373()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc8373, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.numSuppliers" }, //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-7$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-8$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING});
-
- Table doc8373a = RealMetadataFactory.createXmlDocument("doc8373a", xmltest, createXMLPlan_defect8373a()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc8373a, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.numSuppliers" }, //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-7$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-8$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING});
-
- Table doc8373b = RealMetadataFactory.createXmlDocument("doc8373b", xmltest, createXMLPlan_defect8373b()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc8373b, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.numSuppliers" }, //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-7$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-8$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING});
-
- Table doc13617 = RealMetadataFactory.createXmlDocument("doc13617", xmltest, createXMLPlanDefect13617()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc13617, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity" }, //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-7$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER});
-
-
// recursive + staging ========================================================
RealMetadataFactory.createXmlDocument("doc19", xmltest, createXMLPlanRecursiveStaging(true, recursionlimit, exceptionOnLimit)); //$NON-NLS-1$
@@ -577,17 +511,9 @@
// normDoc1 - for collapse
// normDoc2 - for replace
// normDoc3 - for preserve
- Table normDoc1 = RealMetadataFactory.createXmlDocument("normDoc1", xmltest, createXMLPlanNormalization(MappingNodeConstants.NORMALIZE_TEXT_COLLAPSE)); //$NON-NLS-1$
- RealMetadataFactory.createElements(normDoc1, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.DiscontinuedItem", "Catalogs.Catalog.items.DiscontinuedItem.@ItemID", "Catalogs.Catalog.items.DiscontinuedItem.Name", "Catalogs.Catalog.items.DiscontinuedItem.Quantity", "Catalogs.Catalog.items.StatusUnknown", "Catalogs.Catalog.items.StatusUnknown.@ItemID", "Catalogs.Catalog.items.StatusUnknown.Name", "Catalogs.Catalog.items.StatusUnknown.Quantity", "Catalogs.Catalog.items.Shouldn't see", "Catalogs.Catalog.items.Shouldn't see 2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- Table normDoc2 = RealMetadataFactory.createXmlDocument("normDoc2", xmltest, createXMLPlanNormalization(MappingNodeConstants.NORMALIZE_TEXT_REPLACE)); //$NON-NLS-1$
- RealMetadataFactory.createElements(normDoc2, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.DiscontinuedItem", "Catalogs.Catalog.items.DiscontinuedItem.@ItemID", "Catalogs.Catalog.items.DiscontinuedItem.Name", "Catalogs.Catalog.items.DiscontinuedItem.Quantity", "Catalogs.Catalog.items.StatusUnknown", "Catalogs.Catalog.items.StatusUnknown.@ItemID", "Catalogs.Catalog.items.StatusUnknown.Name", "Catalogs.Catalog.items.StatusUnknown.Quantity", "Catalogs.Catalog.items.Shouldn't see", "Catalogs.Catalog.items.Shouldn't see 2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
- Table normDoc3 = RealMetadataFactory.createXmlDocument("normDoc3", xmltest, createXMLPlanNormalization(MappingNodeConstants.NORMALIZE_TEXT_PRESERVE)); //$NON-NLS-1$
- RealMetadataFactory.createElements(normDoc3, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.DiscontinuedItem", "Catalogs.Catalog.items.DiscontinuedItem.@ItemID", "Catalogs.Catalog.items.DiscontinuedItem.Name", "Catalogs.Catalog.items.DiscontinuedItem.Quantity", "Catalogs.Catalog.items.StatusUnknown", "Catalogs.Catalog.items.StatusUnknown.@ItemID", "Catalogs.Catalog.items.StatusUnknown.Name", "Catalogs.Catalog.items.StatusUnknown.Quantity", "Catalogs.Catalog.items.Shouldn't see", "Catalogs.Catalog.items.Shouldn't see 2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$ //$NON-NLS-17$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("normDoc1", xmltest, createXMLPlanNormalization(MappingNodeConstants.NORMALIZE_TEXT_COLLAPSE)); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("normDoc2", xmltest, createXMLPlanNormalization(MappingNodeConstants.NORMALIZE_TEXT_REPLACE)); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("normDoc3", xmltest, createXMLPlanNormalization(MappingNodeConstants.NORMALIZE_TEXT_PRESERVE)); //$NON-NLS-1$
QueryNode vspqn1 = new QueryNode("CREATE VIRTUAL PROCEDURE BEGIN insert into #temp select * from stock.items where itemquantity < param; SELECT * FROM xmltest.doc1 where Item.Quantity < (select avg(itemquantity) from #temp); END"); //$NON-NLS-1$ //$NON-NLS-2$
ColumnSet<Procedure> vsprs1 = RealMetadataFactory.createResultSet("pm1.vsprs1", new String[] { "xml" }, new String[] { DataTypeManager.DefaultDataTypes.XML }); //$NON-NLS-1$ //$NON-NLS-2$
ProcedureParameter vspp1 = RealMetadataFactory.createParameter("param", ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER); //$NON-NLS-1$
@@ -664,10 +590,7 @@
// =========================================================================================================
// Create virtual docs
- Table doc9c= RealMetadataFactory.createXmlDocument("doc9c", xmltest, createXMLPlanNested2c()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc9c, new String[] { "Catalogs", "Catalogs.Catalog", "Catalogs.Catalog.items", "Catalogs.Catalog.items.item", "Catalogs.Catalog.items.item.@ItemID", "Catalogs.Catalog.items.item.Name", "Catalogs.Catalog.items.item.Quantity", "Catalogs.Catalog.items.item.suppliers", "Catalogs.Catalog.items.item.suppliers.supplier", "Catalogs.Catalog.items.item.suppliers.supplier.@SupplierID", "Catalogs.Catalog.items.item.suppliers.supplier.zip", "Catalogs.Catalog.items.item.suppliers.supplier.Name", "Catalogs.Catalog.items.item.orders", "Catalogs.Catalog.items.item.orders.order", "Catalogs.Catalog.items.item.orders.order.@OrderID" ,"Catalogs.Catalog.items.item.orders.order.zip", "Catalogs.Catalog.items.item.orders.order.Name"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ //$NON-NLS-16$!
//$NON-NLS-17$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
+ RealMetadataFactory.createXmlDocument("doc9c", xmltest, createXMLPlanNested2c()); //$NON-NLS-1$
return RealMetadataFactory.createTransformationMetadata(metadataStore, "nestedWithSibling");
}
@@ -789,19 +712,10 @@
RealMetadataFactory.createXmlDocument("doc1a", xqttest, createXQTPlanRecursive1a_5988()); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc2", xqttest, createXQTPlanRecursiveSiblings()); //$NON-NLS-1$
RealMetadataFactory.createXmlDocument("doc3", xqttest, createXQTPlanRecursive3_5988()); //$NON-NLS-1$
- Table doc4 = RealMetadataFactory.createXmlDocument("doc4", xqttest, createXQTPlanChoice_6796()); //$NON-NLS-1$
- Table doc5 = RealMetadataFactory.createXmlDocument("doc5", xqttest, createChoiceDefect24651()); //$NON-NLS-1$
- Table groupDoc = RealMetadataFactory.createXmlDocument("groupDoc", xqttest, createGroupDoc()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc4", xqttest, createXQTPlanChoice_6796()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("doc5", xqttest, createChoiceDefect24651()); //$NON-NLS-1$
+ RealMetadataFactory.createXmlDocument("groupDoc", xqttest, createGroupDoc()); //$NON-NLS-1$
- RealMetadataFactory.createElements(groupDoc, new String[] { "group", "group.pseudoID" /*, etc...*/ }, //$NON-NLS-1$ //$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
- RealMetadataFactory.createElements(doc4, new String[] { "root", "root.key", "root.key.keys", "root.key.keys.nestedkey", "root.wrapper.key", "root.wrapper.key.keys", "root.wrapper.key.keys.nestedkey"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
- RealMetadataFactory.createElements(doc5, new String[] { "root", "root.wrapper.key" }, //$NON-NLS-1$ //$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING});
-
return RealMetadataFactory.createTransformationMetadata(metadataStore, "example2");
}
@@ -828,10 +742,7 @@
new String[] { "ID"}, //$NON-NLS-1$
new String[] {DataTypeManager.DefaultDataTypes.STRING});
- Table doc_SOAP = RealMetadataFactory.createXmlDocument("docSoap", xmltest, createXMLPlanSOAP()); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc_SOAP, new String[] { "TaxReports", "TaxReports.TaxReport", "TaxReports.TaxReport.ArrayOfTaxID","TaxReports.TaxReport.ArrayOfTaxID.TaxID","TaxReports.TaxReport.ArrayOfTaxID.TaxID.ID"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("docSoap", xmltest, createXMLPlanSOAP()); //$NON-NLS-1$
return RealMetadataFactory.createTransformationMetadata(metadataStore, "soap1");
}
@@ -1528,7 +1439,6 @@
return doc;
}
-
private static MappingElement createXMLPlan1Unformatted( boolean testNillable, int cardinality ) {
MappingElement root = new MappingElement("Catalogs");//$NON-NLS-1$
@@ -1542,7 +1452,7 @@
item.setMaxOccurrs(-1);
item.addAttribute(new MappingAttribute("ItemID", "xmltest.group.items.itemNum")); //$NON-NLS-1$ //$NON-NLS-2$
item.addChildElement(new MappingElement("Name", "xmltest.group.items.itemName").setNillable(true)); //$NON-NLS-1$ //$NON-NLS-2$
- item.addChildElement(new MappingElement("Quantity", "xmltest.group.items.itemQuantity")); //$NON-NLS-1$ //$NON-NLS-2$
+ item.addChildElement(new MappingElement("Quantity", "xmltest.group.items.itemQuantity").setType(DefaultDataTypes.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
return root;
}
@@ -2014,7 +1924,7 @@
item.setMaxOccurrs(-1);
item.addAttribute(new MappingAttribute("XXXXX", "xmltest.group.items.itemNum")); //$NON-NLS-1$ //$NON-NLS-2$
item.addChildElement(new MappingElement("XXXXX", "xmltest.group.items.itemName")); //$NON-NLS-1$ //$NON-NLS-2$
- item.addChildElement(new MappingElement("XXXXX", "xmltest.group.items.itemQuantity")); //$NON-NLS-1$ //$NON-NLS-2$
+ item.addChildElement(new MappingElement("XXXXX", "xmltest.group.items.itemQuantity").setType(DefaultDataTypes.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
return doc;
}
@@ -2056,7 +1966,7 @@
MappingSequenceNode sequence = root.addSequenceNode(new MappingSequenceNode());
sequence.addChildElement(new MappingElement("ID", "xqttest.group.ID")); //$NON-NLS-1$ //$NON-NLS-2$
- sequence.addChildElement(new MappingElement("code", "xqttest.group.Code")); //$NON-NLS-1$ //$NON-NLS-2$
+ sequence.addChildElement(new MappingElement("code", "xqttest.group.code")); //$NON-NLS-1$ //$NON-NLS-2$
MappingElement supervisor = sequence.addChildElement(new MappingElement("supervisor")); //$NON-NLS-1$
supervisor.setSource("xqttest.supervisor"); //$NON-NLS-1$
@@ -2065,7 +1975,7 @@
MappingSequenceNode sequence1 = supervisor.addSequenceNode(new MappingSequenceNode());
sequence1.addChildElement(new MappingElement("ID", "xqttest.supervisor.ID")); //$NON-NLS-1$ //$NON-NLS-2$
- sequence1.addChildElement(new MappingElement("code", "xqttest.supervisor.Code")); //$NON-NLS-1$ //$NON-NLS-2$
+ sequence1.addChildElement(new MappingElement("code", "xqttest.supervisor.code")); //$NON-NLS-1$ //$NON-NLS-2$
MappingRecursiveElement group1 = (MappingRecursiveElement)sequence1.addChildElement(new MappingRecursiveElement("group", "xqttest.group")); //$NON-NLS-1$ //$NON-NLS-2$
group1.setSource("xqttest.group1"); //$NON-NLS-1$
@@ -4107,8 +4017,8 @@
// check the staging base line (unknown cost)
// one for staging and for unloading
- Map stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
- assertEquals(2, ((List)stats.get(ExecStagingTableInstruction.class)).size());
+ Map<Class<?>, List<ProcessorInstruction>> stats = XMLProgramUtil.getProgramStats(plan.getOriginalProgram());
+ assertEquals(2, stats.get(ExecStagingTableInstruction.class).size());
}
/**
Modified: trunk/engine/src/test/java/org/teiid/query/processor/xml/XMLProgramUtil.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/xml/XMLProgramUtil.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/processor/xml/XMLProgramUtil.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -27,26 +27,19 @@
import java.util.List;
import java.util.Map;
-import org.teiid.query.processor.xml.Condition;
-import org.teiid.query.processor.xml.IfInstruction;
-import org.teiid.query.processor.xml.ProcessorInstruction;
-import org.teiid.query.processor.xml.Program;
-import org.teiid.query.processor.xml.RecurseProgramCondition;
-import org.teiid.query.processor.xml.WhileInstruction;
-
/**
*
*/
public class XMLProgramUtil {
- public static Map getProgramStats(Program program) {
- HashMap map = new HashMap();
+ public static Map<Class<?>, List<ProcessorInstruction>> getProgramStats(Program program) {
+ HashMap<Class<?>, List<ProcessorInstruction>> map = new HashMap<Class<?>, List<ProcessorInstruction>>();
getProgramStats(program, map);
return map;
}
- private static Map getProgramStats(Program program, Map map) {
+ private static Map<Class<?>, List<ProcessorInstruction>> getProgramStats(Program program, Map<Class<?>, List<ProcessorInstruction>> map) {
Program childProgram = null;
if (program == null) {
@@ -75,9 +68,9 @@
}
}
- List instrs = (List)map.get(inst.getClass());
+ List<ProcessorInstruction> instrs = map.get(inst.getClass());
if (instrs == null) {
- instrs = new LinkedList();
+ instrs = new LinkedList<ProcessorInstruction>();
map.put(inst.getClass(), instrs);
}
instrs.add(inst);
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/CheckSymbolsAreResolvedVisitor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/CheckSymbolsAreResolvedVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/CheckSymbolsAreResolvedVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,8 +25,15 @@
import java.util.ArrayList;
import java.util.Collection;
-import org.teiid.query.sql.*;
-import org.teiid.query.sql.symbol.*;
+import org.teiid.query.sql.LanguageObject;
+import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.symbol.CaseExpression;
+import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Function;
+import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.Reference;
+import org.teiid.query.sql.symbol.ScalarSubquery;
+import org.teiid.query.sql.symbol.SearchedCaseExpression;
/**
@@ -35,10 +42,10 @@
*/
public class CheckSymbolsAreResolvedVisitor extends LanguageVisitor {
- private Collection unresolvedSymbols;
+ private Collection<LanguageObject> unresolvedSymbols;
public CheckSymbolsAreResolvedVisitor() {
- unresolvedSymbols = new ArrayList();
+ unresolvedSymbols = new ArrayList<LanguageObject>();
}
/**
@@ -46,18 +53,18 @@
* @return Collection of any unresolved Symbols; may
* be empty but never null
*/
- public Collection getUnresolvedSymbols(){
+ public Collection<LanguageObject> getUnresolvedSymbols(){
return this.unresolvedSymbols;
}
public void visit(CaseExpression obj) {
- if (!obj.isResolved()){
+ if (obj.getType() == null){
this.unresolvedSymbols.add(obj);
}
}
public void visit(ElementSymbol obj) {
- if (!obj.isResolved()){
+ if (obj.getMetadataID() == null){
this.unresolvedSymbols.add(obj);
}
}
@@ -69,25 +76,25 @@
}
public void visit(SearchedCaseExpression obj) {
- if (!obj.isResolved()){
+ if (obj.getType() == null){
this.unresolvedSymbols.add(obj);
}
}
public void visit(ScalarSubquery obj) {
- if (!obj.isResolved()){
+ if (obj.getType() == null){
this.unresolvedSymbols.add(obj);
}
}
public void visit(Function obj) {
- if (!obj.isResolved()){
+ if (obj.getFunctionDescriptor() == null){
this.unresolvedSymbols.add(obj);
}
}
public void visit(Reference obj) {
- if (!obj.isResolved()){
+ if (obj.getType() == null){
this.unresolvedSymbols.add(obj);
}
}
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -35,7 +35,7 @@
import org.teiid.metadata.Table;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
-import org.teiid.query.metadata.TempMetadataStore;
+import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.sql.ProcedureReservedWords;
import org.teiid.query.sql.lang.Command;
@@ -91,19 +91,19 @@
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
Command command = helpResolveUpdateProcedure(proc.toString(), userUpdateStr, Table.TriggerEvent.UPDATE);
- Map tempIDs = command.getTemporaryMetadata();
+ Map<String, TempMetadataID> tempIDs = command.getTemporaryMetadata().getData();
assertNotNull(tempIDs);
assertNull(tempIDs.get("LOOPCURSOR")); //$NON-NLS-1$
assertNull(tempIDs.get("LOOPCURSOR2")); //$NON-NLS-1$
Command subCommand = CommandCollectorVisitor.getCommands(command).get(0);
- tempIDs = subCommand.getTemporaryMetadata();
+ tempIDs = subCommand.getTemporaryMetadata().getData();
assertNotNull(tempIDs);
assertNull(tempIDs.get("LOOPCURSOR")); //$NON-NLS-1$
assertNull(tempIDs.get("LOOPCURSOR2")); //$NON-NLS-1$
subCommand = CommandCollectorVisitor.getCommands(command).get(1);
- tempIDs = subCommand.getTemporaryMetadata();
+ tempIDs = subCommand.getTemporaryMetadata().getData();
assertNotNull(tempIDs);
assertNotNull(tempIDs.get("LOOPCURSOR")); //$NON-NLS-1$
assertNull(tempIDs.get("LOOPCURSOR2")); //$NON-NLS-1$
@@ -120,7 +120,7 @@
QueryMetadataException {
ProcedureContainer userCommand = (ProcedureContainer)QueryParser.getQueryParser().parseCommand(userUpdateStr);
QueryResolver.resolveCommand(userCommand, metadata);
- metadata = new TempMetadataAdapter(metadata, new TempMetadataStore(userCommand.getTemporaryMetadata()));
+ metadata = new TempMetadataAdapter(metadata, userCommand.getTemporaryMetadata());
return (CreateProcedureCommand)QueryResolver.expandCommand(userCommand, metadata, null);
}
@@ -171,8 +171,8 @@
Block block = command.getBlock();
AssignmentStatement assStmt = (AssignmentStatement)block.getStatements().get(1);
- assertEquals(ProcedureReservedWords.VARIABLES, assStmt.getVariable().getGroupSymbol().getCanonicalName());
- assertEquals(ProcedureReservedWords.VARIABLES, ((ElementSymbol)assStmt.getExpression()).getGroupSymbol().getCanonicalName());
+ assertEquals(ProcedureReservedWords.VARIABLES, assStmt.getVariable().getGroupSymbol().getName());
+ assertEquals(ProcedureReservedWords.VARIABLES, ((ElementSymbol)assStmt.getExpression()).getGroupSymbol().getName());
Block inner = ((LoopStatement)block.getStatements().get(2)).getBlock();
@@ -180,7 +180,7 @@
ElementSymbol value = ElementCollectorVisitor.getElements(assStmt.getExpression(), false).iterator().next();
- assertEquals("LOOPCURSOR", value.getGroupSymbol().getCanonicalName()); //$NON-NLS-1$
+ assertEquals("loopCursor", value.getGroupSymbol().getName()); //$NON-NLS-1$
}
// variable resolution, variable used in if statement, variable compared against
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -77,7 +77,7 @@
import org.teiid.query.sql.symbol.Function;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.symbol.Symbol;
import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.CommandCollectorVisitor;
@@ -278,12 +278,16 @@
private void helpCheckSelect(Query query, String[] elementNames) {
Select select = query.getSelect();
- List<SingleElementSymbol> elements = select.getProjectedSymbols();
+ List<Expression> elements = select.getProjectedSymbols();
assertEquals("Wrong number of select symbols: ", elementNames.length, elements.size()); //$NON-NLS-1$
for(int i=0; i<elements.size(); i++) {
- SingleElementSymbol symbol = elements.get(i);
- assertEquals("Element name does not match: ", elementNames[i].toUpperCase(), symbol.getName().toUpperCase()); //$NON-NLS-1$
+ Expression symbol = elements.get(i);
+ String name = Symbol.getShortName(symbol);
+ if (symbol instanceof ElementSymbol) {
+ name = ((ElementSymbol)symbol).getName();
+ }
+ assertEquals("Element name does not match: ", elementNames[i].toUpperCase(), name.toString().toUpperCase()); //$NON-NLS-1$
}
}
@@ -635,7 +639,7 @@
@Test public void testSelectExpressions() {
Query resolvedQuery = (Query) helpResolve("SELECT e1, concat(e1, 's'), concat(e1, 's') as c FROM pm1.g1"); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "expr", "c" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "expr2", "c" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1", "pm1.g1.e1", "pm1.g1.e1" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
new String[] { "pm1.g1.e1", "pm1.g1.e1", "pm1.g1.e1" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -644,7 +648,7 @@
@Test public void testSelectCountStar() {
Query resolvedQuery = (Query) helpResolve("SELECT count(*) FROM pm1.g1"); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "count" }); //$NON-NLS-1$
+ helpCheckSelect(resolvedQuery, new String[] { "expr1" }); //$NON-NLS-1$
helpCheckElements(resolvedQuery.getSelect(), new String[] { }, new String[] { } );
}
@@ -810,7 +814,7 @@
Query resolvedQuery = (Query) helpResolveWithBindings("SELECT pm1.g1.e1, ? FROM pm1.g1 WHERE pm1.g1.e1 = ?", metadata, bindings); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "expr" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "expr2" }); //$NON-NLS-1$ //$NON-NLS-2$
helpCheckElements(resolvedQuery.getCriteria(),
new String[] { "pm1.g1.e1", "pm1.g2.e2" }, //$NON-NLS-1$
new String[] { "pm1.g1.e1", "pm1.g2.e2" } ); //$NON-NLS-1$
@@ -1416,8 +1420,8 @@
List projSymbols = resolvedQuery.getSelect().getProjectedSymbols();
assertEquals("Wrong number of projected symbols", 2, projSymbols.size()); //$NON-NLS-1$
- assertEquals("Wrong type for first symbol", String.class, ((SingleElementSymbol)projSymbols.get(0)).getType()); //$NON-NLS-1$
- assertEquals("Wrong type for second symbol", Double.class, ((SingleElementSymbol)projSymbols.get(1)).getType()); //$NON-NLS-1$
+ assertEquals("Wrong type for first symbol", String.class, ((Expression)projSymbols.get(0)).getType()); //$NON-NLS-1$
+ assertEquals("Wrong type for second symbol", Double.class, ((Expression)projSymbols.get(1)).getType()); //$NON-NLS-1$
}
@Test public void testLookupFunctionFailBadElement() {
@@ -1985,17 +1989,17 @@
@Test public void testNestedUnionQueryWithNull() throws Exception{
SetQuery command = (SetQuery)helpResolve("SELECT e2, e3 FROM pm1.g1 UNION (SELECT null, e3 FROM pm1.g2 UNION SELECT null, e3 from pm1.g1)"); //$NON-NLS-1$
- assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((SingleElementSymbol)command.getProjectedSymbols().get(0)).getType());
+ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((Expression)command.getProjectedSymbols().get(0)).getType());
}
@Test public void testUnionQueryClone() throws Exception{
SetQuery command = (SetQuery)helpResolve("SELECT e2, e3 FROM pm1.g1 UNION SELECT e3, e2 from pm1.g1"); //$NON-NLS-1$
- assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((SingleElementSymbol)command.getProjectedSymbols().get(1)).getType());
+ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((Expression)command.getProjectedSymbols().get(1)).getType());
command = (SetQuery)command.clone();
- assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((SingleElementSymbol)command.getProjectedSymbols().get(1)).getType());
+ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((Expression)command.getProjectedSymbols().get(1)).getType());
}
@Test public void testSelectIntoNoFrom() {
@@ -2089,7 +2093,7 @@
QueryResolver.resolveCommand(query, RealMetadataFactory.exampleBQTCached());
// Check type of resolved null constant
- SingleElementSymbol symbol = (SingleElementSymbol) query.getSelect().getSymbols().get(0);
+ Expression symbol = query.getSelect().getSymbols().get(0);
assertNotNull(symbol.getType());
assertEquals(DataTypeManager.DefaultDataClasses.STRING, symbol.getType());
}
@@ -2180,7 +2184,7 @@
private void verifyProjectedTypes(Command c, Class[] types) {
List projSymbols = c.getProjectedSymbols();
for(int i=0; i<projSymbols.size(); i++) {
- assertEquals("Found type mismatch at column " + i, types[i], ((SingleElementSymbol) projSymbols.get(i)).getType()); //$NON-NLS-1$
+ assertEquals("Found type mismatch at column " + i, types[i], ((Expression) projSymbols.get(i)).getType()); //$NON-NLS-1$
}
}
@@ -2386,7 +2390,7 @@
CompareCriteria criteria = (CompareCriteria)((Query)cmdStmt.getCommand()).getCriteria();
- assertEquals(ProcedureReservedWords.VARIABLES, ((ElementSymbol)criteria.getRightExpression()).getGroupSymbol().getCanonicalName());
+ assertEquals(ProcedureReservedWords.VARIABLES, ((ElementSymbol)criteria.getRightExpression()).getGroupSymbol().getName());
}
/**
@@ -2519,7 +2523,7 @@
Query query = (Query)helpResolve(sql);
- TempMetadataStore store = new TempMetadataStore(query.getTemporaryMetadata());
+ TempMetadataStore store = query.getTemporaryMetadata();
TempMetadataID id = store.getTempElementID("#temp.x"); //$NON-NLS-1$
@@ -2531,7 +2535,7 @@
Insert insert = (Insert)helpResolve(sql);
- TempMetadataStore store = new TempMetadataStore(insert.getTemporaryMetadata());
+ TempMetadataStore store = insert.getTemporaryMetadata();
TempMetadataID id = store.getTempElementID("#temp.x"); //$NON-NLS-1$
@@ -2672,7 +2676,7 @@
String sql = "select convert(null, xml) from pm1.g1 union all select 1"; //$NON-NLS-1$
SetQuery query = (SetQuery)helpResolve(sql, RealMetadataFactory.example1Cached());
- assertEquals(DataTypeManager.DefaultDataClasses.OBJECT, ((SingleElementSymbol)query.getProjectedSymbols().get(0)).getType());
+ assertEquals(DataTypeManager.DefaultDataClasses.OBJECT, ((Expression)query.getProjectedSymbols().get(0)).getType());
}
@Test public void testUnionWithSubQuery() {
@@ -2891,7 +2895,7 @@
@Test public void testParamOrder() {
Query resolvedQuery = (Query)helpResolve("SELECT * FROM (exec pm4.spRetOut()) as a", RealMetadataFactory.exampleBQTCached()); //$NON-NLS-1$
- assertEquals("a.ret", resolvedQuery.getProjectedSymbols().get(0).getName());
+ assertEquals("a.ret", resolvedQuery.getProjectedSymbols().get(0).toString());
}
@Test public void testOrderByAggregatesError() throws Exception {
@@ -2939,7 +2943,7 @@
@Test public void testXmlQueryWithParam() {
Query q = (Query)helpResolve("select xmlquery('/a' passing ?)");
- XMLQuery ex = (XMLQuery) SymbolMap.getExpression((Expression) q.getSelect().getSymbols().get(0));
+ XMLQuery ex = (XMLQuery) SymbolMap.getExpression(q.getSelect().getSymbols().get(0));
assertEquals(DataTypeManager.DefaultDataClasses.XML, ex.getPassing().get(0).getExpression().getType());
}
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -58,7 +58,7 @@
@Test public void testXMLCriteriaShortElement() {
CompareCriteria expected = new CompareCriteria();
GroupSymbol gs = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es = new ElementSymbol("root.node1", null, gs); //$NON-NLS-1$
+ ElementSymbol es = new ElementSymbol("root.node1", gs); //$NON-NLS-1$
expected.setLeftExpression(es);
expected.setOperator(CompareCriteria.EQ);
expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
@@ -71,7 +71,7 @@
@Test public void testXMLCriteriaLongElement1() {
CompareCriteria expected = new CompareCriteria();
GroupSymbol gs = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es = new ElementSymbol("root.node1", null, gs); //$NON-NLS-1$
+ ElementSymbol es = new ElementSymbol("root.node1", gs); //$NON-NLS-1$
es.setGroupSymbol(gs);
expected.setLeftExpression(es);
expected.setOperator(CompareCriteria.EQ);
@@ -85,7 +85,7 @@
@Test public void testXMLCriteriaLongElement2() {
CompareCriteria expected1 = new CompareCriteria();
GroupSymbol gs = new GroupSymbol("xmltest.doc4"); //$NON-NLS-1$
- ElementSymbol es1 = new ElementSymbol("root.node1", null, gs); //$NON-NLS-1$
+ ElementSymbol es1 = new ElementSymbol("root.node1", gs); //$NON-NLS-1$
expected1.setLeftExpression(es1);
expected1.setOperator(CompareCriteria.EQ);
expected1.setRightExpression(new Constant("xyz")); //$NON-NLS-1$
@@ -98,7 +98,7 @@
@Test public void testXMLCriteriaLongElement3() {
GroupSymbol gs = new GroupSymbol("xmltest.doc4"); //$NON-NLS-1$
CompareCriteria expected2 = new CompareCriteria();
- ElementSymbol es2 = new ElementSymbol("root.node1.@node2", null, gs); //$NON-NLS-1$
+ ElementSymbol es2 = new ElementSymbol("root.node1.@node2", gs); //$NON-NLS-1$
es2.setGroupSymbol(gs);
expected2.setLeftExpression(es2);
expected2.setOperator(CompareCriteria.EQ);
@@ -112,7 +112,7 @@
@Test public void testXMLCriteriaLongElement4() {
GroupSymbol gs = new GroupSymbol("xmltest.doc4"); //$NON-NLS-1$
CompareCriteria expected3 = new CompareCriteria();
- ElementSymbol es3 = new ElementSymbol("root.node3", null, gs); //$NON-NLS-1$
+ ElementSymbol es3 = new ElementSymbol("root.node3", gs); //$NON-NLS-1$
expected3.setLeftExpression(es3);
expected3.setOperator(CompareCriteria.EQ);
expected3.setRightExpression(new Constant("xyz")); //$NON-NLS-1$
@@ -194,7 +194,7 @@
@Test public void testXMLCriteriaLongElementInAnonymous() {
CompareCriteria expected = new CompareCriteria();
GroupSymbol gs = new GroupSymbol("xmltest.doc2"); //$NON-NLS-1$
- ElementSymbol es = new ElementSymbol("root.node1.node3", null, gs); //$NON-NLS-1$
+ ElementSymbol es = new ElementSymbol("root.node1.node3", gs); //$NON-NLS-1$
expected.setLeftExpression(es);
expected.setOperator(CompareCriteria.EQ);
expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
@@ -205,14 +205,6 @@
}
@Test public void testXMLAmbiguousShortName() {
- CompareCriteria expected = new CompareCriteria();
- ElementSymbol es = new ElementSymbol("node2"); //$NON-NLS-1$
- GroupSymbol gs = new GroupSymbol("doc3"); //$NON-NLS-1$
- es.setGroupSymbol(gs);
- expected.setLeftExpression(es);
- expected.setOperator(CompareCriteria.EQ);
- expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
-
helpResolveException("select * from xmltest.doc3 where node2 = 'yyz'"); //$NON-NLS-1$
}
@@ -309,8 +301,8 @@
@Test public void testContext() {
GroupSymbol gs1 = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es1 = new ElementSymbol("root.node1.node2.node3", null, gs1); //$NON-NLS-1$
- ElementSymbol es2 = new ElementSymbol("root.node1", null, gs1); //$NON-NLS-1$
+ ElementSymbol es1 = new ElementSymbol("root.node1.node2.node3", gs1); //$NON-NLS-1$
+ ElementSymbol es2 = new ElementSymbol("root.node1", gs1); //$NON-NLS-1$
Expression[] exprs = new Expression[]{es1, es2};
Function context = new Function("context", exprs); //$NON-NLS-1$
@@ -327,7 +319,7 @@
@Test public void testRowLimit() {
GroupSymbol gs1 = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es1 = new ElementSymbol("root.node1.node2.node3", null, gs1); //$NON-NLS-1$
+ ElementSymbol es1 = new ElementSymbol("root.node1.node2.node3", gs1); //$NON-NLS-1$
es1.setGroupSymbol(gs1);
Expression[] exprs = new Expression[]{es1};
@@ -345,7 +337,7 @@
@Test public void testRowLimitException() {
GroupSymbol gs1 = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es1 = new ElementSymbol("root.node1.node2.node3", null, gs1); //$NON-NLS-1$
+ ElementSymbol es1 = new ElementSymbol("root.node1.node2.node3", gs1); //$NON-NLS-1$
Expression[] exprs = new Expression[]{es1};
Function context = new Function("rowlimitexception", exprs); //$NON-NLS-1$
@@ -379,7 +371,7 @@
@Test public void testConversionInXML() {
// Expected left expression
GroupSymbol gs1 = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es1 = new ElementSymbol("root.node1", null, gs1); //$NON-NLS-1$
+ ElementSymbol es1 = new ElementSymbol("root.node1", gs1); //$NON-NLS-1$
// Expected right expression
Function convert = new Function("convert", new Expression[] { new Constant(new Integer(5)), new Constant("string") }); //$NON-NLS-1$ //$NON-NLS-2$
@@ -401,7 +393,7 @@
@Test public void testXMLWithSelect1() throws Exception {
CompareCriteria expected = new CompareCriteria();
GroupSymbol gs = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es = new ElementSymbol("root.node1", null, gs); //$NON-NLS-1$
+ ElementSymbol es = new ElementSymbol("root.node1", gs); //$NON-NLS-1$
expected.setLeftExpression(es);
expected.setOperator(CompareCriteria.EQ);
expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
@@ -418,7 +410,7 @@
@Test public void testXMLWithSelect2() {
CompareCriteria expected = new CompareCriteria();
GroupSymbol gs = new GroupSymbol("xmltest.doc1"); //$NON-NLS-1$
- ElementSymbol es = new ElementSymbol("root.node1", null, gs); //$NON-NLS-1$
+ ElementSymbol es = new ElementSymbol("root.node1", gs); //$NON-NLS-1$
expected.setLeftExpression(es);
expected.setOperator(CompareCriteria.EQ);
expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -39,8 +39,8 @@
import org.teiid.query.sql.lang.OrderBy;
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.unittest.RealMetadataFactory;
@@ -62,7 +62,7 @@
String[] elementNames,
String[] elementIDs) {
List<ElementSymbol> elements = new ArrayList<ElementSymbol>();
- for (Iterator<SingleElementSymbol> i = langObj.getSortKeys().iterator(); i.hasNext();) {
+ for (Iterator<Expression> i = langObj.getSortKeys().iterator(); i.hasNext();) {
ElementCollectorVisitor.getElements(i.next(), elements);
}
@@ -81,8 +81,8 @@
private void helpCheckExpressionsSymbols(OrderBy langObj,
String[] functionsNames) {
int expCount = 0;
- for (Iterator<SingleElementSymbol> i = langObj.getSortKeys().iterator(); i.hasNext();) {
- SingleElementSymbol ses = i.next();
+ for (Iterator<Expression> i = langObj.getSortKeys().iterator(); i.hasNext();) {
+ Expression ses = i.next();
if (ses instanceof ExpressionSymbol) {
assertEquals("Expression Symbols does not match: ", functionsNames[expCount++], ses.toString()); //$NON-NLS-1$
}
@@ -117,7 +117,7 @@
new String[] { "pm1.g1.e3", "pm1.g1.e2", "pm1.g1.e1", "pm1.g1.e2" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
helpCheckExpressionsSymbols(resolvedQuery.getOrderBy(),
- new String[] {"concat(e3, 'x')", "concat(e2, '5')"}); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"concat(convert(e3, string), 'x')", "concat(convert(e2, string), '5')"}); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testNumberedOrderBy1_3() throws Exception {
@@ -127,7 +127,7 @@
new String[] { "pm1.g1.e3", "pm1.g1.e2", "pm1.g1.e1", "pm1.g1.e2" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
helpCheckExpressionsSymbols(resolvedQuery.getOrderBy(),
- new String[] {"concat(e2, '5')", "AVG(e2)"}); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"concat(convert(e2, string), '5')", "AVG(e2)"}); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testNumberedOrderBy1_4() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -58,11 +58,8 @@
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
-import org.teiid.query.sql.symbol.SearchedCaseExpression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.visitor.CorrelatedReferenceCollectorVisitor;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.util.CommandContext;
@@ -141,7 +138,7 @@
ResolverVisitor.resolveLanguageObject(actualExp, metadata);
CommandContext context = new CommandContext();
context.setBufferManager(BufferManagerFactory.getStandaloneBufferManager());
- actualExp = QueryRewriter.rewriteExpression(actualExp, null, context, metadata);
+ actualExp = QueryRewriter.rewriteExpression(actualExp, context, metadata);
if (expected != null) {
Expression expectedExp = QueryParser.getQueryParser().parseExpression(expected);
ResolverVisitor.resolveLanguageObject(expectedExp, metadata);
@@ -572,7 +569,7 @@
@Test public void testRewriteCrit_plusInvert() {
String original = "pm1.g1.e2 + 1.1 = ?"; //$NON-NLS-1$
- String expected = "pm1.g1.e2 = ? - 1.1"; //$NON-NLS-1$
+ String expected = "convert(pm1.g1.e2, bigdecimal) = ? - 1.1"; //$NON-NLS-1$
helpTestRewriteCriteria(original, expected);
}
@@ -961,7 +958,7 @@
}
@Test public void testRewriteCase1954SetC() {
- helpTestRewriteCriteria("concat(pm1.g1.e2, 'string') in ('2', '3')", "concat(pm1.g1.e2, 'string') in ('2', '3')"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestRewriteCriteria("concat(pm1.g1.e2, 'string') in ('2', '3')", "concat(convert(pm1.g1.e2, string), 'string') in ('2', '3')"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testRewriteCase1954SetD() {
@@ -1071,10 +1068,9 @@
Command cmd = helpTestRewriteCommand( sqlBefore, sqlAfter );
- ExpressionSymbol es = (ExpressionSymbol)cmd.getProjectedSymbols().get(0);
+ Expression es = cmd.getProjectedSymbols().get(0);
assertEquals( DataTypeManager.DefaultDataClasses.STRING, es.getType() );
}
-
@Test public void testRewriteExec() throws Exception {
Command command = QueryParser.getQueryParser().parseCommand("exec pm1.sq2(session_id())"); //$NON-NLS-1$
@@ -1240,7 +1236,7 @@
*/
@Test public void testRewriteSelectInto1() {
String sql = "select distinct e2, e2, e3, e4 into pm1.g1 from pm1.g2"; //$NON-NLS-1$
- String expected = "INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4) SELECT X.e2 AS e1, X.E2_0 AS e2, X.e3, X.e4 FROM (SELECT DISTINCT e2, e2 AS E2_0, e3, e4 FROM pm1.g2) AS X"; //$NON-NLS-1$
+ String expected = "INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4) SELECT convert(X.e2, string) AS e1, X.e2_0 AS e2, X.e3, X.e4 FROM (SELECT DISTINCT e2, e2 AS e2_0, e3, e4 FROM pm1.g2) AS X"; //$NON-NLS-1$
helpTestRewriteCommand(sql, expected);
}
@@ -1277,7 +1273,7 @@
union = (SetQuery)QueryRewriter.rewrite(union, RealMetadataFactory.example1Cached(), null);
for (QueryCommand query : union.getQueryCommands()) {
- List<SingleElementSymbol> projSymbols = query.getProjectedSymbols();
+ List<Expression> projSymbols = query.getProjectedSymbols();
for(int i=0; i<projSymbols.size(); i++) {
assertEquals("Found type mismatch at column " + i, types[i], projSymbols.get(i).getType()); //$NON-NLS-1$
}
@@ -1297,7 +1293,7 @@
procedure += "Select x from temp;\n"; //$NON-NLS-1$
procedure += "END\n"; //$NON-NLS-1$
- helpTestRewriteCommand(procedure, "CREATE VIRTUAL PROCEDURE\nBEGIN\nCREATE LOCAL TEMPORARY TABLE temp (x string, y integer, z integer);\nINSERT INTO temp (temp.x, temp.y, temp.z) SELECT X.e2 AS x, X.x AS y, X.X_0 AS z FROM (SELECT pm1.g1.e2, 1 AS x, 2 AS X_0 FROM pm1.g1 ORDER BY pm1.g1.e2 LIMIT 1) AS X;\nSELECT x FROM temp;\nEND"); //$NON-NLS-1$
+ helpTestRewriteCommand(procedure, "CREATE VIRTUAL PROCEDURE\nBEGIN\nCREATE LOCAL TEMPORARY TABLE temp (x string, y integer, z integer);\nINSERT INTO temp (temp.x, temp.y, temp.z) SELECT convert(X.e2, string) AS x, X.x AS y, X.x_0 AS z FROM (SELECT pm1.g1.e2, 1 AS x, 2 AS x_0 FROM pm1.g1 ORDER BY pm1.g1.e2 LIMIT 1) AS X;\nSELECT x FROM temp;\nEND"); //$NON-NLS-1$
}
@Test public void testRewriteNot() {
@@ -1363,119 +1359,25 @@
helpTestRewriteCriteria("coalesce(convert(pm1.g1.e2, double), pm1.g1.e4) = 1", "ifnull(convert(pm1.g1.e2, double), pm1.g1.e4) = 1", true); //$NON-NLS-1$ //$NON-NLS-2$
}
- /**
- * Test <code>QueryRewriter</code>'s ability to rewrite a query that
- * contains an aggregate function which uses a <code>CASE</code>
- * expression which contains <code>BETWEEN</code> criteria as its value.
- * <p>
- * An aggregate function list is defined and queries are created that
- * use each function from the list. The list includes:
- * <p>
- * "SUM", "MAX", "MIN", "AVG", "COUNT"
- * <p>
- * It is expected that the BETWEEN expression will be rewritten as
- * <code>CompoundCriteria</code>.
- * <p>
- * <table>
- * <tr><th align="left" colspan=2>For example:
- * <tr><td width="10*"><td>SELECT SUM(CASE WHEN e2 BETWEEN 3 AND 5
- * THEN e2 ELSE -1 END) FROM pm1.g1
- * <tr><th align="left" colspan=2>Is rewritten as:
- * <tr><td width="10*"><td>SELECT SUM(CASE WHEN (e2 >= 3) AND (e2 <= 5)
- * THEN e2 ELSE -1 END) FROM pm1.g1
- * </table>
- *
- * @see org.teiid.query.rewriter.QueryRewriter
- * @see org.teiid.query.sql.lang.BetweenCriteria
- * @see org.teiid.query.sql.lang.CompoundCriteria
- * @see org.teiid.query.sql.symbol.AggregateSymbol
- * @see org.teiid.query.sql.symbol.SearchedCaseExpression
- */
@Test public void testAggregateWithBetweenInCaseInSelect() {
- // Define a list of aggregates to test against
- List<String> aggregateCommands = Arrays.asList( new String[] { "SUM", "MAX", "MIN", "AVG", "COUNT" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-
- // Define a query and the expected rewritten query
- // ?AGGREGATE? represents the string substitution for an aggregate from aggregateCommands
- String sqlBefore = "SELECT ?AGGREGATE?(CASE WHEN e2 BETWEEN 3 AND 5 THEN e2 ELSE -1 END) FROM pm1.g1"; //$NON-NLS-1$
- String sqlAfter = "SELECT ?AGGREGATE?(CASE WHEN (e2 >= 3) AND (e2 <= 5) THEN e2 ELSE -1 END) FROM pm1.g1"; //$NON-NLS-1$
+ String sqlBefore = "SELECT MAX(CASE WHEN e2 BETWEEN 3 AND 5 THEN e2 ELSE -1 END) FROM pm1.g1"; //$NON-NLS-1$
+ String sqlAfter = "SELECT MAX(CASE WHEN (e2 >= 3) AND (e2 <= 5) THEN e2 ELSE -1 END) FROM pm1.g1"; //$NON-NLS-1$
- // Iterate through the aggregateCommands
- for ( String aCmd : aggregateCommands ) {
- // Replace ?AGGREGATE? with the command from aggregateCommands
- String sql = sqlBefore.replace("?AGGREGATE?", aCmd); //$NON-NLS-1$
- String exSql = sqlAfter.replace("?AGGREGATE?", aCmd); //$NON-NLS-1$
- // Test QueryRewriter
- Command cmd = helpTestRewriteCommand( sql, exSql );
- // Check the rewritten command to verify that CompundCriteria replaced BetweenCriteria
- CompoundCriteria ccrit = (CompoundCriteria) ((SearchedCaseExpression) ((ExpressionSymbol) cmd.getProjectedSymbols().get(0)).getExpression()).getWhen().get(0);
- assertEquals( "e2 >= 3", ccrit.getCriteria(0).toString() ); //$NON-NLS-1$
- assertEquals( "e2 <= 5", ccrit.getCriteria(1).toString() ); //$NON-NLS-1$
- }
+ helpTestRewriteCommand( sqlBefore, sqlAfter );
}
- /**
- * Test <code>QueryRewriter</code>'s ability to rewrite a query that
- * contains a <code>CASE</code> expression which contains
- * <code>BETWEEN</code> criteria in the queries <code>SELECT</code> clause.
- * <p>
- * It is expected that the BETWEEN expression will be rewritten as
- * <code>CompoundCriteria</code>.
- * <p>
- * <table>
- * <tr><th align="left" colspan=2>For example:
- * <tr><td width="10*"><td>SELECT CASE WHEN e2 BETWEEN 3 AND 5 THEN e2
- * ELSE -1 END FROM pm1.g1
- * <tr><th align="left" colspan=2>Is rewritten as:
- * <tr><td width="10*"><td>SELECT CASE WHEN (e2 >= 3) AND (e2 <= 5) THEN e2
- * ELSE -1 END FROM pm1.g1
- * </table>
- *
- * @see org.teiid.query.rewriter.QueryRewriter
- * @see org.teiid.query.sql.lang.BetweenCriteria
- * @see org.teiid.query.sql.lang.CompoundCriteria
- * @see org.teiid.query.sql.symbol.SearchedCaseExpression
- */
@Test public void testBetweenInCaseInSelect() {
String sqlBefore = "SELECT CASE WHEN e2 BETWEEN 3 AND 5 THEN e2 ELSE -1 END FROM pm1.g1"; //$NON-NLS-1$
String sqlAfter = "SELECT CASE WHEN (e2 >= 3) AND (e2 <= 5) THEN e2 ELSE -1 END FROM pm1.g1"; //$NON-NLS-1$
- Command cmd = helpTestRewriteCommand( sqlBefore, sqlAfter );
- CompoundCriteria ccrit = (CompoundCriteria) ((SearchedCaseExpression) ((ExpressionSymbol) cmd.getProjectedSymbols().get(0)).getExpression()).getWhen().get(0);
- assertEquals( "e2 >= 3", ccrit.getCriteria(0).toString() ); //$NON-NLS-1$
- assertEquals( "e2 <= 5", ccrit.getCriteria(1).toString() ); //$NON-NLS-1$
+ helpTestRewriteCommand( sqlBefore, sqlAfter );
}
- /**
- * Test <code>QueryRewriter</code>'s ability to rewrite a query that
- * contains a <code>CASE</code> expression which contains
- * <code>BETWEEN</code> criteria in the queries <code>WHERE</code> clause.
- * <p>
- * It is expected that the BETWEEN expression will be rewritten as
- * <code>CompoundCriteria</code>.
- * <p>
- * <table>
- * <tr><th align="left" colspan=2>For example:
- * <tr><td width="10*"><td>SELECT * FROM pm1.g1 WHERE e3 = CASE WHEN e2
- * BETWEEN 3 AND 5 THEN e2 ELSE -1 END
- * <tr><th align="left" colspan=2>Is rewritten as:
- * <tr><td width="10*"><td>SELECT * FROM pm1.g1 WHERE e3 = CASE WHEN
- * (e2 >= 3) AND (e2 <= 5) THEN e2 ELSE -1 END
- * </table>
- *
- * @see org.teiid.query.rewriter.QueryRewriter
- * @see org.teiid.query.sql.lang.BetweenCriteria
- * @see org.teiid.query.sql.lang.CompoundCriteria
- * @see org.teiid.query.sql.symbol.SearchedCaseExpression
- */
@Test public void testBetweenInCase() {
String sqlBefore = "SELECT * FROM pm1.g1 WHERE e3 = CASE WHEN e2 BETWEEN 3 AND 5 THEN e2 ELSE -1 END"; //$NON-NLS-1$
- String sqlAfter = "SELECT * FROM pm1.g1 WHERE e3 = CASE WHEN (e2 >= 3) AND (e2 <= 5) THEN e2 ELSE -1 END"; //$NON-NLS-1$
+ String sqlAfter = "SELECT * FROM pm1.g1 WHERE convert(e3, integer) = CASE WHEN (e2 >= 3) AND (e2 <= 5) THEN e2 ELSE -1 END"; //$NON-NLS-1$
- Command cmd = helpTestRewriteCommand( sqlBefore, sqlAfter );
- CompoundCriteria ccrit = (CompoundCriteria) ((SearchedCaseExpression) ((CompareCriteria) ((Query) cmd).getCriteria()).getRightExpression()).getWhen().get(0);
- assertEquals( "e2 >= 3", ccrit.getCriteria(0).toString() ); //$NON-NLS-1$
- assertEquals( "e2 <= 5", ccrit.getCriteria(1).toString() ); //$NON-NLS-1$
+ helpTestRewriteCommand( sqlBefore, sqlAfter );
}
@Test public void testRewriteNullHandling() {
@@ -1627,7 +1529,7 @@
@Test public void testRewriteXmlTable() throws Exception {
String original = "select * from xmltable('/' passing 1 + 1 as a columns x string default curdate()) as x"; //$NON-NLS-1$
QueryMetadataInterface metadata = RealMetadataFactory.exampleBQTCached();
- helpTestRewriteCommand(original, "SELECT * FROM XMLTABLE('/' PASSING 2 AS a COLUMNS x string DEFAULT curdate()) AS x", metadata);
+ helpTestRewriteCommand(original, "SELECT * FROM XMLTABLE('/' PASSING 2 AS a COLUMNS x string DEFAULT convert(curdate(), string)) AS x", metadata);
}
@Test public void testRewriteQueryString() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/sql/lang/TestAliasSymbol.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/lang/TestAliasSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/sql/lang/TestAliasSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,26 +22,27 @@
package org.teiid.query.sql.lang;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ExpressionSymbol;
-import junit.framework.TestCase;
+public class TestAliasSymbol {
-public class TestAliasSymbol extends TestCase {
-
- public void testAliasEquals() {
+ @Test public void testAliasEquals() {
AliasSymbol a1 = new AliasSymbol("X", new ExpressionSymbol("x", new Constant(1))); //$NON-NLS-1$ //$NON-NLS-2$
AliasSymbol a2 = new AliasSymbol("X", new ExpressionSymbol("x", new Constant(2))); //$NON-NLS-1$ //$NON-NLS-2$
AliasSymbol a3 = new AliasSymbol("x", new ExpressionSymbol("x", new Constant(1))); //$NON-NLS-1$ //$NON-NLS-2$
- assertEquals(a1, a3); //just a different case for the alias
+ assertFalse(a1.equals(a3)); //just a different case for the alias
assertFalse(a1.equals(a2)); //different express
}
- public void testClone() {
+ @Test public void testClone() {
AliasSymbol a1 = new AliasSymbol("X", new ExpressionSymbol("x", new Constant(1))); //$NON-NLS-1$ //$NON-NLS-2$
a1.setOutputName("foo"); //$NON-NLS-1$
AliasSymbol clone = (AliasSymbol)a1.clone();
Modified: trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestCaseExpression.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestCaseExpression.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestCaseExpression.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -25,18 +25,11 @@
import java.util.ArrayList;
import java.util.List;
+import junit.framework.TestCase;
+
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.ArgCheck;
-import org.teiid.query.sql.symbol.AbstractCaseExpression;
-import org.teiid.query.sql.symbol.CaseExpression;
-import org.teiid.query.sql.symbol.Constant;
-import org.teiid.query.sql.symbol.ElementSymbol;
-import org.teiid.query.sql.symbol.Expression;
-
-
-import junit.framework.TestCase;
-
public class TestCaseExpression extends TestCase {
/**
@@ -206,7 +199,6 @@
helpTestStrictEquivalence(expr.getElseExpression(), clone.getElseExpression());
assertEquals(expr.getType(), clone.getType());
- assertEquals(expr.isResolved(), clone.isResolved());
}
public void testGetWhenExpression() {
@@ -264,16 +256,6 @@
assertEquals(new Constant(new Integer(30000)), caseExpr.getThenExpression(1));
}
- public void testIsResolved() {
- CaseExpression expr = example(3);
- assertFalse(expr.isResolved());
- ElementSymbol x = (ElementSymbol)expr.getExpression();
- x.setType(String.class);
- x.setMetadataID("metadataID"); //$NON-NLS-1$
- expr.setType(Integer.class);
- assertTrue(expr.isResolved());
- }
-
public void testGetThenExpression() {
helpTestThenExpressions(example(3), 3);
}
Modified: trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -22,13 +22,12 @@
package org.teiid.query.sql.symbol;
+import junit.framework.TestCase;
+
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.UnitTestUtil;
-import org.teiid.query.sql.symbol.Constant;
-import junit.framework.TestCase;
-
public class TestConstant extends TestCase {
// ################################## FRAMEWORK ################################
@@ -57,7 +56,6 @@
assertEquals("Value is incorrect: ", s, c.getValue()); //$NON-NLS-1$
assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.STRING, c.getType()); //$NON-NLS-1$
assertEquals("Should be non-null: ", false, c.isNull()); //$NON-NLS-1$
- assertEquals("Is not resolved: ", true, c.isResolved()); //$NON-NLS-1$
assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$
Constant c2 = new Constant(s);
@@ -73,7 +71,6 @@
assertEquals("Value is incorrect: ", i, c.getValue()); //$NON-NLS-1$
assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.INTEGER, c.getType()); //$NON-NLS-1$
assertEquals("Should be non-null: ", false, c.isNull()); //$NON-NLS-1$
- assertEquals("Is not resolved: ", true, c.isResolved()); //$NON-NLS-1$
assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$
Constant c2 = new Constant(i);
@@ -88,7 +85,6 @@
assertEquals("Value is incorrect: ", null, c.getValue()); //$NON-NLS-1$
assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.NULL, c.getType()); //$NON-NLS-1$
assertEquals("Should be null: ", true, c.isNull()); //$NON-NLS-1$
- assertEquals("Is not resolved: ", true, c.isResolved()); //$NON-NLS-1$
assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$
Constant c2 = new Constant(null);
@@ -103,7 +99,6 @@
assertEquals("Value is incorrect: ", null, c.getValue()); //$NON-NLS-1$
assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.STRING, c.getType()); //$NON-NLS-1$
assertEquals("Should be null: ", true, c.isNull()); //$NON-NLS-1$
- assertEquals("Is not resolved: ", true, c.isResolved()); //$NON-NLS-1$
assertEquals("Object does not equal itself", c, c); //$NON-NLS-1$
Constant c2 = new Constant(null, DataTypeManager.DefaultDataClasses.STRING);
Modified: trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestElementSymbol.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestElementSymbol.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestElementSymbol.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -172,7 +172,7 @@
ElementSymbol es2 = new ElementSymbol("AbCd"); //$NON-NLS-1$
es2.setGroupSymbol(sampleGroup1());
- helpEquals(es1, es2, true);
+ helpEquals(es1, es2, false);
}
@Test public void testSelfEquivalence(){
@@ -273,4 +273,10 @@
helpEquals(e1, e2, true);
}
+ @Test public void testClone6() {
+ ElementSymbol e1 = new ElementSymbol("x.y.z", new GroupSymbol("doc"));
+ ElementSymbol copy = e1.clone();
+ helpEquals(e1, copy, true);
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestSearchedCaseExpression.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestSearchedCaseExpression.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestSearchedCaseExpression.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -147,7 +147,6 @@
TestCaseExpression.helpTestStrictEquivalence(expr.getElseExpression(), clone.getElseExpression());
assertEquals(expr.getType(), clone.getType());
- assertEquals(expr.isResolved(), clone.isResolved());
}
public void testGetWhenCriteria() {
@@ -212,17 +211,6 @@
assertEquals(new Constant(new Integer(30000)), caseExpr.getThenExpression(1));
}
- public void testIsResolved() {
- SearchedCaseExpression expr = example(3);
- assertFalse(expr.isResolved());
- CompareCriteria crit = (CompareCriteria)expr.getWhenCriteria(0);
- ElementSymbol x = (ElementSymbol)crit.getLeftExpression();
- x.setType(String.class);
- x.setMetadataID("metadataID"); //$NON-NLS-1$
- expr.setType(Integer.class);
- assertTrue(expr.isResolved());
- }
-
public void testGetThenExpression() {
TestCaseExpression.helpTestThenExpressions(example(3), 3);
}
Modified: trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -166,9 +166,6 @@
helpTest(TestSearchedCaseExpression.example(3), map, mapped);
}
- /**
- * We do not need to create an alias if the canonical short names match
- */
@Test public void testSelectAlias() {
ElementSymbol x = new ElementSymbol("y.x"); //$NON-NLS-1$
ElementSymbol y = new ElementSymbol("z.X"); //$NON-NLS-1$
@@ -180,9 +177,23 @@
ExpressionMappingVisitor.mapExpressions(toMap, map);
- assertEquals("Did not get expected mapped expression", "SELECT z.X", toMap.toString()); //$NON-NLS-1$ //$NON-NLS-2$
+ assertEquals("Did not get expected mapped expression", "SELECT z.X AS x", toMap.toString()); //$NON-NLS-1$ //$NON-NLS-2$
}
+ @Test public void testSelectAlias1() {
+ ElementSymbol x = new ElementSymbol("y.x"); //$NON-NLS-1$
+ ElementSymbol y = new ElementSymbol("z.x"); //$NON-NLS-1$
+
+ HashMap<ElementSymbol, ElementSymbol> map = new HashMap<ElementSymbol, ElementSymbol>();
+ map.put(x, y);
+
+ LanguageObject toMap = new Select(Arrays.asList(x));
+
+ ExpressionMappingVisitor.mapExpressions(toMap, map);
+
+ assertEquals("Did not get expected mapped expression", "SELECT z.x", toMap.toString()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
/**
* we are not careful about ensuring that that every symbol is
* unique in a plan, so there's a chance mapping the expression in an
Modified: trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -38,6 +38,8 @@
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.types.DataTypeManager.DefaultDataClasses;
+import org.teiid.core.types.DataTypeManager.DefaultDataTypes;
import org.teiid.dqp.internal.process.DQPWorkContext;
import org.teiid.metadata.*;
import org.teiid.metadata.BaseColumn.NullType;
@@ -51,8 +53,11 @@
import org.teiid.query.mapping.xml.MappingAttribute;
import org.teiid.query.mapping.xml.MappingDocument;
import org.teiid.query.mapping.xml.MappingElement;
+import org.teiid.query.mapping.xml.MappingNode;
import org.teiid.query.mapping.xml.MappingOutputter;
import org.teiid.query.mapping.xml.MappingSequenceNode;
+import org.teiid.query.mapping.xml.MappingVisitor;
+import org.teiid.query.mapping.xml.Navigator;
import org.teiid.query.metadata.CompositeMetadataStore;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TransformationMetadata;
@@ -567,7 +572,7 @@
createAccessPattern("pm4.g2.ap1", pm4g2, elements); //e1,e2 //$NON-NLS-1$
elements = new ArrayList<Column>(1);
elements.add(pm4g2e.get(4)); //"e5"
- KeyRecord pm4g2ap2 =createAccessPattern("pm4.g2.ap2", pm4g2, elements); //e5 //$NON-NLS-1$
+ createAccessPattern("pm4.g2.ap2", pm4g2, elements); //e5 //$NON-NLS-1$
// Create access patterns - pm5
elements = new ArrayList<Column>(1);
elements.add(pm5g1e.iterator().next());
@@ -855,28 +860,17 @@
createAccessPattern("vm1.g37.ap1", vm1g37, elements); //e1 //$NON-NLS-1$
//XML STUFF =============================================
- Table doc1 = createXmlDocument("doc1", xmltest, exampleDoc1()); //$NON-NLS-1$
- Table doc2 = createXmlDocument("doc2", xmltest, exampleDoc2()); //$NON-NLS-1$
- Table doc3 = createXmlDocument("doc3", xmltest, exampleDoc3()); //$NON-NLS-1$
- Table doc4 = createXmlDocument("doc4", xmltest, exampleDoc4()); //$NON-NLS-1$
- Table doc5 = createXmlDocument("doc5", xmltest, exampleDoc5()); //$NON-NLS-1$
- Table doc6 = createXmlDocument("doc6", xmltest, exampleDoc6()); //$NON-NLS-1$
+ createXmlDocument("doc1", xmltest, exampleDoc1()); //$NON-NLS-1$
+ createXmlDocument("doc2", xmltest, exampleDoc2()); //$NON-NLS-1$
+ createXmlDocument("doc3", xmltest, exampleDoc3()); //$NON-NLS-1$
+ createXmlDocument("doc4", xmltest, exampleDoc4()); //$NON-NLS-1$
+ createXmlDocument("doc5", xmltest, exampleDoc5()); //$NON-NLS-1$
+ createXmlDocument("doc6", xmltest, exampleDoc6()); //$NON-NLS-1$
// Defect 11479 - test ambiguous doc short names
createXmlDocument("xmltest2.docA", vm1, exampleDoc1()); //$NON-NLS-1$
createXmlDocument("xmltest3.docA", vm1, exampleDoc2()); //$NON-NLS-1$
- createElements(doc1, new String[] { "root", "root.node1", "root.node1.node2", "root.node1.node2.node3" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- createElements(doc2, new String[] { "root", "root.node1", "root.node1.node3" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- createElements(doc3, new String[] { "root", "root.node1.node2", "root.node2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- createElements(doc4, new String[] { "root", "root.@node6", "root.node1", "root.node1.@node2", "root.node3", "root.node3.@node4", "root.node3.node4", "root.node3.root.node6" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
- createElements(doc5, new String[] { "root", "root.node1", "root.node1.node2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
// Create mapping classes for xmltest.doc5
QueryNode mc1n1 = new QueryNode("SELECT e1 FROM pm1.g1 UNION ALL SELECT e1 FROM pm1.g2"); //$NON-NLS-1$ //$NON-NLS-2$
Table vm1mc1 = createVirtualGroup("mc1", xmltest, mc1n1); //$NON-NLS-1$
@@ -884,9 +878,6 @@
new String[] { "e1" }, //$NON-NLS-1$
new String[] { DataTypeManager.DefaultDataTypes.STRING });
- createElements(doc6, new String[] { "root", "root.node", "root.thenode" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
//XML STUFF =============================================
// Procedures and stored queries
@@ -996,12 +987,12 @@
), sqDefaultsNode);
sqDefaults.setResultSet(rsDefaults);
- ColumnSet<Procedure> rsBadDefault = createResultSet("pm1.rBadDefault", new String[] { "e1", "e2" }, new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ createResultSet("pm1.rBadDefault", new String[] { "e1", "e2" }, new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
ProcedureParameter paramBadDefaultIn = createParameter("in", ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER); //$NON-NLS-1$
paramBadDefaultIn.setNullType(NullType.Nullable);
paramBadDefaultIn.setDefaultValue("Clearly Not An Integer"); //$NON-NLS-1$
QueryNode sqnBadDefault = new QueryNode("CREATE VIRTUAL PROCEDURE BEGIN SELECT e1, e2 FROM pm1.g1 WHERE e2=pm1.sqBadDefault.in; END"); //$NON-NLS-1$ //$NON-NLS-2$
- Procedure sqBadDefault = createVirtualProcedure("sqBadDefault", pm1, Arrays.asList(paramBadDefaultIn), sqnBadDefault); //$NON-NLS-1$
+ createVirtualProcedure("sqBadDefault", pm1, Arrays.asList(paramBadDefaultIn), sqnBadDefault); //$NON-NLS-1$
//end case 3281
@@ -1165,7 +1156,7 @@
ProcedureParameter vspp3 = createParameter("param1", ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER); //$NON-NLS-1$
QueryNode vspqn10 = new QueryNode("CREATE VIRTUAL PROCEDURE BEGIN DECLARE integer x; LOOP ON (SELECT e2 FROM pm1.g1 WHERE e2=param1) AS mycursor BEGIN x=mycursor.e2; END END"); //$NON-NLS-1$ //$NON-NLS-2$
- Procedure vsp10 = createVirtualProcedure("vsp10", pm1, Arrays.asList( vspp3 ), vspqn10); //$NON-NLS-1$
+ createVirtualProcedure("vsp10", pm1, Arrays.asList( vspp3 ), vspqn10); //$NON-NLS-1$
//invalid
QueryNode vspqn11 = new QueryNode("CREATE VIRTUAL PROCEDURE BEGIN LOOP ON (SELECT e2 FROM pm1.g1) AS mycursor BEGIN LOOP ON (SELECT e1 FROM pm1.g1) AS mycursor BEGIN END END SELECT e1 FROM pm1.g1; END"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1319,10 +1310,9 @@
vgvp7e1.setSelectable(false);
Column vgvp7e2 = createElement("ve2", vgvp7, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
vgvp7e2.setSelectable(false);
- Column vgvp7e3 = createElement("ve3", vgvp7, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
- Column vgvp7e4 = createElement("ve4", vgvp7, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
+ createElement("ve3", vgvp7, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
+ createElement("ve4", vgvp7, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
-
//invalid
QueryNode vspqn32 = new QueryNode("CREATE VIRTUAL PROCEDURE BEGIN DECLARE integer x; LOOP ON (SELECT e2 FROM pm1.g1) AS #mycursor BEGIN IF(#mycursor.e2 > 10) BEGIN CONTINUE; END x=#mycursor.e2; END SELECT e1 FROM pm1.g1 WHERE x=e2; END"); //$NON-NLS-1$ //$NON-NLS-2$
Procedure vsp32 = createVirtualProcedure("vsp32", pm1, null, vspqn32); //$NON-NLS-1$
@@ -1342,7 +1332,7 @@
vgvp1e1.setSelectable(false);
Column vgvp1e2 = createElement("ve2", vgvp1, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
vgvp1e2.setSelectable(false);
- Column vgvp1e3 = createElement("ve3", vgvp1, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
+ createElement("ve3", vgvp1, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
QueryNode vgvpn2 = new QueryNode("SELECT P.e1 as ve3 FROM (EXEC pm1.vsp26(vm1.vgvp2.ve1, vm1.vgvp2.ve2)) as P where P.e1='a'"); //$NON-NLS-1$ //$NON-NLS-2$
Table vgvp2 = createVirtualGroup("vgvp2", vm1, vgvpn2); //$NON-NLS-1$
@@ -1350,7 +1340,7 @@
vgvp2e1.setSelectable(false);
Column vgvp2e2 = createElement("ve2", vgvp2, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
vgvp2e2.setSelectable(false);
- Column vgvp2e3 = createElement("ve3", vgvp2, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
+ createElement("ve3", vgvp2, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
QueryNode vgvpn3 = new QueryNode("SELECT P.e1 as ve3 FROM (EXEC pm1.vsp26(vm1.vgvp3.ve1, vm1.vgvp3.ve2)) as P, pm1.g2 where P.e1=g2.e1"); //$NON-NLS-1$ //$NON-NLS-2$
Table vgvp3 = createVirtualGroup("vgvp3", vm1, vgvpn3); //$NON-NLS-1$
@@ -1618,10 +1608,39 @@
String doc = docToString(plan);
Table table = createVirtualGroup(name, model, new QueryNode(doc));
table.setTableType(org.teiid.metadata.Table.Type.Document);
- table.setColumns(new ArrayList<Column>(2));
+ extractColumns(table, plan);
return table;
}
+
+ static void extractColumns(final Table table, MappingDocument plan) {
+ MappingVisitor mv = new MappingVisitor() {
+ public void visit(MappingElement element) {
+ String type = element.getType();
+ addColumn(element, type);
+ }
+ private void addColumn(MappingNode element,
+ String type) {
+ if (type != null) {
+ //TODO: choose the appropriate runtime type
+ Class<?> c = DataTypeManager.getDataTypeClass(type);
+ if (c == DefaultDataClasses.OBJECT) {
+ type = DefaultDataTypes.STRING;
+ }
+ } else {
+ type = DefaultDataTypes.STRING;
+ }
+ createElement(element.getFullyQualifiedName(), table, type);
+ }
+
+ public void visit(MappingAttribute attribute) {
+ String type = attribute.getType();
+ addColumn(attribute, type);
+ }
+ };
+ plan.acceptVisitor(new Navigator(true, mv));
+ }
+
public static String docToString(MappingDocument plan) {
MappingOutputter out = new MappingOutputter();
StringWriter stream = new StringWriter();
@@ -1796,12 +1815,12 @@
MappingDocument doc = new MappingDocument(false);
MappingElement root = doc.addChildElement(new MappingElement("root")); //$NON-NLS-1$
- MappingSequenceNode node1 = root.addSequenceNode(new MappingSequenceNode());
+ MappingElement node1 = root.addChildElement(new MappingElement("node1"));
+
node1.addChildElement(new MappingElement("node2")); //$NON-NLS-1$
root.addChildElement(new MappingElement("node2")); //$NON-NLS-1$
return doc;
}
-
// has attributes and elements
private static MappingDocument exampleDoc4() {
@@ -2446,59 +2465,7 @@
// END MAPPING DOC ======================================================================
// Create virtual docs and doc elements
- Table itemsDoc = createXmlDocument("itemsDoc", xmltest, doc); //$NON-NLS-1$
- createElements(itemsDoc,
- new String[] { "Catalogs", //$NON-NLS-1$
- "Catalogs.Catalog", //$NON-NLS-1$
- "Catalogs.Catalog.items", //$NON-NLS-1$
- "Catalogs.Catalog.items.item", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.@ItemID", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Name", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Quantity", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.@SupplierID", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Name", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Zip", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Orders", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Orders.Order", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Orders.Order.@OrderID", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Orders.Order.OrderDate", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Orders.Order.OrderQuantity", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Orders.Order.OrderStatus", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Employees", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Employees.Employee", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Employees.Employee.@EmployeeID", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Employees.Employee.FirstName", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Employees.Employee.LastName", //$NON-NLS-1$
- "Catalogs.Catalog.items.item.Suppliers.Supplier.Employees.Employee.@SupervisorID", //$NON-NLS-1$
-
- },
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.INTEGER,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- });
+ createXmlDocument("itemsDoc", xmltest, doc); //$NON-NLS-1$
// Create mapping classes - baseball players employees doc
QueryNode playersNode = new QueryNode("SELECT stock.employees.employeeNum, firstName, lastName, supervisorNum FROM stock.employees WHERE specializesInItemNum is not null"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -2555,37 +2522,7 @@
// END MAPPING DOC ======================================================================
// Create virtual docs and doc elements
- Table playersDoc = createXmlDocument("playersDoc", xmltest, doc2); //$NON-NLS-1$
- createElements(playersDoc,
- new String[] { "BaseballPlayers", //$NON-NLS-1$
- "BaseballPlayers.Player", //$NON-NLS-1$
- "BaseballPlayers.Player.@PlayerID", //$NON-NLS-1$
- "BaseballPlayers.Player.FirstName", //$NON-NLS-1$
- "BaseballPlayers.Player.LastName", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.@ManagerID", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.FirstName", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.LastName", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.Owner", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.Owner.@OwnerID", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.Owner.FirstName", //$NON-NLS-1$
- "BaseballPlayers.Player.Manager.Owner.LastName", //$NON-NLS-1$
-
- },
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- DataTypeManager.DefaultDataTypes.STRING,
- });
+ createXmlDocument("playersDoc", xmltest, doc2); //$NON-NLS-1$
return createTransformationMetadata(metadataStore, "case3225");
}
Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -48,8 +48,9 @@
import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.sql.lang.Command;
+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.symbol.Symbol;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.validator.UpdateValidator.UpdateInfo;
import org.teiid.query.validator.UpdateValidator.UpdateType;
@@ -89,12 +90,12 @@
Command command = QueryParser.getQueryParser().parseCommand(sql);
QueryResolver.resolveCommand(command, md);
- List<SingleElementSymbol> symbols = command.getProjectedSymbols();
+ List<Expression> symbols = command.getProjectedSymbols();
String[] names = new String[symbols.size()];
String[] types = new String[symbols.size()];
int i = 0;
- for (SingleElementSymbol singleElementSymbol : symbols) {
- names[i] = singleElementSymbol.getShortName();
+ for (Expression singleElementSymbol : symbols) {
+ names[i] = Symbol.getShortName(singleElementSymbol);
types[i++] = DataTypeManager.getDataTypeName(singleElementSymbol.getType());
}
Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -125,10 +125,7 @@
sourceNode.addChildElement(new MappingElement("c2", "test.group.e3")); //$NON-NLS-1$ //$NON-NLS-2$
Schema docModel = RealMetadataFactory.createVirtualModel("vm1", metadataStore); //$NON-NLS-1$
- Table doc1 = RealMetadataFactory.createXmlDocument("doc1", docModel, doc); //$NON-NLS-1$
- RealMetadataFactory.createElements(doc1, new String[] { "a0", "a0.a1", "a0.a1.a2", "a0.a1.b2", "a0.a1.c2" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- new String[] {DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
-
+ RealMetadataFactory.createXmlDocument("doc1", docModel, doc); //$NON-NLS-1$
return RealMetadataFactory.createTransformationMetadata(metadataStore, "example");
}
Modified: trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -127,7 +127,7 @@
List<?>[] sqlServerExpected =
new List<?>[] { Arrays.asList(new Object[] { new Integer(5), new Integer(12), new Long(5) } ),
Arrays.asList(new Object[] { new Integer(5), new Integer(13), new Long(5) } )};
- dataMgr.addData("SELECT g_0.O_CUSTKEY AS c_0, g_0.O_ORDERKEY AS c_1, g_0.O_CUSTKEY AS c_2 FROM TPCR_SQLS.ORDERS AS g_0 WHERE (g_0.O_ORDERDATE < {ts'1992-01-02 00:00:00.0'}) AND (g_0.O_CUSTKEY IN (5, 6)) ORDER BY c_2", //$NON-NLS-1$
+ dataMgr.addData("SELECT g_0.O_CUSTKEY AS c_0, g_0.O_ORDERKEY AS c_1, convert(g_0.O_CUSTKEY, long) AS c_2 FROM TPCR_SQLS.ORDERS AS g_0 WHERE (g_0.O_ORDERDATE < {ts'1992-01-02 00:00:00.0'}) AND (convert(g_0.O_CUSTKEY, long) IN (5, 6)) ORDER BY c_2", //$NON-NLS-1$
sqlServerExpected);
List<?>[] expected =
@@ -167,7 +167,7 @@
List<?>[] sqlServerExpected =
new List<?>[] { Arrays.asList(new Object[] { new Integer(5), new Integer(12), new Long(5) } ),
Arrays.asList(new Object[] { new Integer(5), new Integer(13), new Long(5) } )};
- dataMgr.addData("SELECT g_0.O_CUSTKEY AS c_0, g_0.O_ORDERKEY AS c_1, g_0.O_CUSTKEY AS c_2 FROM TPCR_SQLS.ORDERS AS g_0 WHERE (g_0.O_ORDERDATE < {ts'1992-01-02 00:00:00.0'}) AND (g_0.O_CUSTKEY IN (5, 6)) ORDER BY c_2", //$NON-NLS-1$
+ dataMgr.addData("SELECT g_0.O_CUSTKEY AS c_0, g_0.O_ORDERKEY AS c_1, convert(g_0.O_CUSTKEY, long) AS c_2 FROM TPCR_SQLS.ORDERS AS g_0 WHERE (g_0.O_ORDERDATE < {ts'1992-01-02 00:00:00.0'}) AND (convert(g_0.O_CUSTKEY, long) IN (5, 6)) ORDER BY c_2", //$NON-NLS-1$
sqlServerExpected);
List<?>[] expected =
Modified: trunk/test-integration/common/src/test/java/org/teiid/jdbc/TestVDBMerge.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/jdbc/TestVDBMerge.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/java/org/teiid/jdbc/TestVDBMerge.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -24,8 +24,8 @@
"PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS Table PARTS true true mmuuid:f6276601-73fe-1edc-a81c-ecf397b10590 16 null false false 1",
"PartsSupplier PartsSupplier PARTSSUPPLIER.SHIP_VIA Table SHIP_VIA true true mmuuid:0f4e9b80-73ff-1edc-a81c-ecf397b10590 4 null false false 2",
"PartsSupplier PartsSupplier PARTSSUPPLIER.STATUS Table STATUS true true mmuuid:1f297200-73ff-1edc-a81c-ecf397b10590 3 null false false 3",
- "PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 null false false 4",
- "PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 null false false 5"
+ "PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 null false false 4",
+ "PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 null false false 5"
};
executeTest("select * from tables where schemaname ='PartsSupplier'", expected); //$NON-NLS-1$
@@ -53,12 +53,12 @@
server.mergeVDBS(VDB2, VDB1);
this.internalConnection = server.createConnection("jdbc:teiid:"+VDB1);
- executeTest("select * from tables where schemaname='BQT1'", expectedAfter); //$NON-NLS-1$
+ executeTest("select * from tables where schemaname='BQT1' order by name", expectedAfter); //$NON-NLS-1$
server.undeployVDB(VDB2);
// since the connection is not closed; need to behave as if still merged
- executeTest("select * from tables where schemaname='BQT1'", expectedAfter); //$NON-NLS-1$
+ executeTest("select * from tables where schemaname='BQT1' order by name", expectedAfter); //$NON-NLS-1$
// re-connect should behave as the original
this.internalConnection.close();
Modified: trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestODBCProceduresSchema.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestODBCProceduresSchema.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestODBCProceduresSchema.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,8 +23,9 @@
import static org.junit.Assert.*;
-
+import org.junit.AfterClass;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.jdbc.AbstractMMQueryTestCase;
@@ -33,6 +34,7 @@
@SuppressWarnings("nls")
public class TestODBCProceduresSchema extends AbstractMMQueryTestCase {
private static final String VDB = "bqt"; //$NON-NLS-1$
+ private static FakeServer server;
public TestODBCProceduresSchema() {
// this is needed because the result files are generated
@@ -40,9 +42,16 @@
super.DELIMITER = "\t"; //$NON-NLS-1$
}
+ @BeforeClass public static void oneTimeSetup() throws Exception {
+ server = new FakeServer();
+ server.deployVDB(VDB, UnitTestUtil.getTestDataPath() + "/bqt.vdb");
+ }
+
+ @AfterClass public static void oneTimeTeardown() throws Exception {
+ server.stop();
+ }
+
@Before public void setUp() throws Exception {
- FakeServer server = new FakeServer();
- server.deployVDB(VDB, UnitTestUtil.getTestDataPath() + "/bqt.vdb");
this.internalConnection = server.createConnection("jdbc:teiid:" + VDB); //$NON-NLS-1$ //$NON-NLS-2$
}
Modified: trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestResultSetMetadata.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestResultSetMetadata.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestResultSetMetadata.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -68,7 +68,7 @@
@Test public void testCount() throws Exception {
String[] expected = {
"ColumnName ColumnType ColumnTypeName ColumnClassName isNullable TableName SchemaName CatalogName", //$NON-NLS-1$
- "count 4 integer java.lang.Integer 1 null null PartsSupplier" //$NON-NLS-1$
+ "expr1 4 integer java.lang.Integer 1 null null PartsSupplier" //$NON-NLS-1$
};
executeTest("select count(*) from parts where 1=0", expected); //$NON-NLS-1$
}
@@ -87,10 +87,10 @@
@Test public void testTempGroupStar() throws Exception {
String[] expected = {
"ColumnName ColumnType ColumnTypeName ColumnClassName isNullable TableName SchemaName CatalogName", //$NON-NLS-1$
- "PART_ID 12 string java.lang.String 0 FOO null PartsSupplier", //$NON-NLS-1$
- "PART_NAME 12 string java.lang.String 1 FOO null PartsSupplier", //$NON-NLS-1$
- "PART_COLOR 12 string java.lang.String 1 FOO null PartsSupplier", //$NON-NLS-1$
- "PART_WEIGHT 12 string java.lang.String 1 FOO null PartsSupplier" //$NON-NLS-1$
+ "PART_ID 12 string java.lang.String 0 foo null PartsSupplier", //$NON-NLS-1$
+ "PART_NAME 12 string java.lang.String 1 foo null PartsSupplier", //$NON-NLS-1$
+ "PART_COLOR 12 string java.lang.String 1 foo null PartsSupplier", //$NON-NLS-1$
+ "PART_WEIGHT 12 string java.lang.String 1 foo null PartsSupplier" //$NON-NLS-1$
};
executeTest("select * from (select * from parts) foo where 1=0", expected); //$NON-NLS-1$
}
@@ -98,7 +98,7 @@
@Test public void testCountAndElement() throws Exception {
String[] expected = {
"ColumnName ColumnType ColumnTypeName ColumnClassName isNullable TableName SchemaName CatalogName", //$NON-NLS-1$
- "count 4 integer java.lang.Integer 1 null null PartsSupplier", //$NON-NLS-1$
+ "expr1 4 integer java.lang.Integer 1 null null PartsSupplier", //$NON-NLS-1$
"PART_NAME 12 string java.lang.String 1 PARTSSUPPLIER.PARTS PartsSupplier PartsSupplier" //$NON-NLS-1$
};
executeTest("select count(*), part_name from parts where 1=0 group by part_name", expected); //$NON-NLS-1$
@@ -118,7 +118,7 @@
@Test public void testCount_PreparedStatement() throws Exception {
String[] expected = {
"ColumnName ColumnType ColumnTypeName ColumnClassName isNullable TableName SchemaName CatalogName", //$NON-NLS-1$
- "count 4 integer java.lang.Integer 1 null null PartsSupplier" //$NON-NLS-1$
+ "expr1 4 integer java.lang.Integer 1 null null PartsSupplier" //$NON-NLS-1$
};
executePreparedTest("select count(*) from parts where 1=0", expected); //$NON-NLS-1$
}
@@ -126,7 +126,7 @@
@Test public void testCountAndElement_PreparedStatement() throws Exception {
String[] expected = {
"ColumnName ColumnType ColumnTypeName ColumnClassName isNullable TableName SchemaName CatalogName", //$NON-NLS-1$
- "count 4 integer java.lang.Integer 1 null null PartsSupplier", //$NON-NLS-1$
+ "expr1 4 integer java.lang.Integer 1 null null PartsSupplier", //$NON-NLS-1$
"PART_NAME 12 string java.lang.String 1 PARTSSUPPLIER.PARTS PartsSupplier PartsSupplier" //$NON-NLS-1$
};
executePreparedTest("select count(*), part_name from parts where 1=0 group by part_name", expected); //$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestVirtualDocWithVirtualProc.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestVirtualDocWithVirtualProc.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestVirtualDocWithVirtualProc.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -23,7 +23,9 @@
package org.teiid.systemmodel;
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.jdbc.AbstractMMQueryTestCase;
@@ -38,6 +40,7 @@
public class TestVirtualDocWithVirtualProc extends AbstractMMQueryTestCase {
private static final String VDB = "xmlvp"; //$NON-NLS-1$
+ private static FakeServer server;
public TestVirtualDocWithVirtualProc() {
// this is needed because the result files are generated
@@ -45,9 +48,16 @@
super.DELIMITER = "\t"; //$NON-NLS-1$
}
+ @BeforeClass public static void oneTimeSetup() throws Exception {
+ server = new FakeServer();
+ server.deployVDB(VDB, UnitTestUtil.getTestDataPath() + "/xml-vp/xmlvp_1.vdb");
+ }
+
+ @AfterClass public static void oneTimeTeardown() throws Exception {
+ server.stop();
+ }
+
@Before public void setUp() throws Exception {
- FakeServer server = new FakeServer();
- server.deployVDB(VDB, UnitTestUtil.getTestDataPath() + "/xml-vp/xmlvp_1.vdb");
this.internalConnection = server.createConnection("jdbc:teiid:" + VDB); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -85,7 +95,7 @@
@Test public void testDefect15241b() throws Exception {
- String sql = "SELECT p.Name, p.Value, UID FROM SYS.Properties p"; //$NON-NLS-1$
+ String sql = "SELECT p.Name, p.Value, UID FROM SYS.Properties p order by p.Name"; //$NON-NLS-1$
String[] expected ={
"Name[string] Value[string] UID[string]", //$NON-NLS-1$
"NugentXAttribute Nuuuuuge22222 mmuuid:4789b280-841c-1f15-9526-ebd0cace03e1", //$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/resources/TestJDBCSocketTransport/testSelect.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestJDBCSocketTransport/testSelect.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestJDBCSocketTransport/testSelect.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -8,8 +8,8 @@
parts PartsSupplier PARTSSUPPLIER.PARTS Table PARTS true true mmuuid:f6276601-73fe-1edc-a81c-ecf397b10590 16 <null> false false 1
parts PartsSupplier PARTSSUPPLIER.SHIP_VIA Table SHIP_VIA true true mmuuid:0f4e9b80-73ff-1edc-a81c-ecf397b10590 4 <null> false false 2
parts PartsSupplier PARTSSUPPLIER.STATUS Table STATUS true true mmuuid:1f297200-73ff-1edc-a81c-ecf397b10590 3 <null> false false 3
-parts PartsSupplier PARTSSUPPLIER.SUPPLIER Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 <null> false false 5
-parts PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 <null> false false 4
+parts PartsSupplier PARTSSUPPLIER.SUPPLIER Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 <null> false false 4
+parts PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 <null> false false 5
parts SYS ProcedureParams Table <null> true false mmuuid:a56bd7fe-c87a-411c-8f5d-661975a25626 -1 <null> true false 12
parts SYS Procedures Table <null> true false mmuuid:0bc132a5-9f8d-4a3c-9f5d-98156a98a962 -1 <null> true false 13
parts SYS Properties Table <null> true false mmuuid:7a45e50a-d03f-4548-ba35-761651bbca85 -1 <null> true false 14
@@ -18,19 +18,19 @@
parts SYS Tables Table <null> true false mmuuid:8551b3bd-11cc-4049-9bcf-fe91a0eb7ba7 -1 <null> true false 17
parts SYSADMIN VDBResources Table <null> true false mmuuid:1785804d-beaf-4831-9531-e59164fedd49 -1 <null> true false 7
parts SYS VirtualDatabases Table <null> true false mmuuid:47297c72-d621-4f4e-af4e-74060ac5f489 -1 <null> true false 18
-parts pg_catalog matpg_datatype Table <null> false false mmuid:17448311-6679-4dfd-aeb6-4aabbd894729 -1 <null> true true 31
-parts pg_catalog matpg_relatt Table <null> false false mmuid:8c0714d6-1c72-40b4-8528-3b2c63059107 -1 <null> true true 30
-parts pg_catalog pg_am Table <null> false false mmuid:f6517a63-8c14-4b73-a18d-afaa5dfb35d9 -1 <null> true false 24
-parts pg_catalog pg_attrdef Table <null> false false mmuid:76a7dd05-9a7d-4243-b561-f3056500dcaf -1 <null> true false 27
-parts pg_catalog pg_attribute Table <null> false false mmuid:fa463d98-365f-489a-a707-025193cb51eb -1 <null> true true 21
-parts pg_catalog pg_class Table <null> false false mmuid:7e21f2e6-06e3-4bca-9b01-72ea47821560 -1 <null> true true 20
-parts pg_catalog pg_database Table <null> false false mmuid:382f9fc9-8c96-4df7-ab5d-04dfb47ee142 -1 <null> true false 28
-parts pg_catalog pg_index Table <null> false false mmuid:09daed8d-b0b8-4552-a261-2b6c775b46b0 -1 <null> true true 23
-parts pg_catalog pg_namespace Table <null> false false mmuid:6609866a-3d7b-4f4b-95fe-ebfac769d699 -1 <null> true false 19
-parts pg_catalog pg_proc Table <null> false false mmuid:f20c9489-10ca-4596-8a37-24218b67f764 -1 <null> true true 25
-parts pg_catalog pg_trigger Table <null> false false mmuid:2b75f0b1-7475-4ed5-9da3-d37a8a25f26a -1 <null> true false 26
-parts pg_catalog pg_type Table <null> false false mmuid:9462e3f8-cd3c-414f-a570-f6f33c40e36a -1 <null> true false 22
-parts pg_catalog pg_user Table <null> false false mmuid:e63613cb-01ee-4b37-8b91-99d1aac4dfcb -1 <null> true false 29
+parts pg_catalog matpg_datatype Table <null> false false mmuid:17448311-6679-4dfd-aeb6-4aabbd894729 -1 <null> true true 19
+parts pg_catalog matpg_relatt Table <null> false false mmuid:8c0714d6-1c72-40b4-8528-3b2c63059107 -1 <null> true true 20
+parts pg_catalog pg_am Table <null> false false mmuid:f6517a63-8c14-4b73-a18d-afaa5dfb35d9 -1 <null> true false 21
+parts pg_catalog pg_attrdef Table <null> false false mmuid:76a7dd05-9a7d-4243-b561-f3056500dcaf -1 <null> true false 22
+parts pg_catalog pg_attribute Table <null> false false mmuid:fa463d98-365f-489a-a707-025193cb51eb -1 <null> true true 23
+parts pg_catalog pg_class Table <null> false false mmuid:7e21f2e6-06e3-4bca-9b01-72ea47821560 -1 <null> true true 24
+parts pg_catalog pg_database Table <null> false false mmuid:382f9fc9-8c96-4df7-ab5d-04dfb47ee142 -1 <null> true false 25
+parts pg_catalog pg_index Table <null> false false mmuid:09daed8d-b0b8-4552-a261-2b6c775b46b0 -1 <null> true true 26
+parts pg_catalog pg_namespace Table <null> false false mmuid:6609866a-3d7b-4f4b-95fe-ebfac769d699 -1 <null> true false 27
+parts pg_catalog pg_proc Table <null> false false mmuid:f20c9489-10ca-4596-8a37-24218b67f764 -1 <null> true true 28
+parts pg_catalog pg_trigger Table <null> false false mmuid:2b75f0b1-7475-4ed5-9da3-d37a8a25f26a -1 <null> true false 29
+parts pg_catalog pg_type Table <null> false false mmuid:9462e3f8-cd3c-414f-a570-f6f33c40e36a -1 <null> true false 30
+parts pg_catalog pg_user Table <null> false false mmuid:e63613cb-01ee-4b37-8b91-99d1aac4dfcb -1 <null> true false 31
Row Count : 31
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 parts java.lang.String VDBName string SYS Tables 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -9,14 +9,14 @@
7 3 STATUS_ID 21 2 1 4 true false false
8 3 STATUS_NAME 1043 -1 2 34 false false false
9 4 SUPPLIER_ID 1043 -1 1 14 true false false
-10 4 PART_ID 1043 -1 2 8 true false false
-11 4 QUANTITY 21 2 3 4 false false false
-12 4 SHIPPER_ID 21 2 4 4 false false false
-13 5 SUPPLIER_ID 1043 -1 1 14 true false false
-14 5 SUPPLIER_NAME 1043 -1 2 34 false false false
-15 5 SUPPLIER_STATUS 21 2 3 4 false false false
-16 5 SUPPLIER_CITY 1043 -1 4 34 false false false
-17 5 SUPPLIER_STATE 1043 -1 5 6 false false false
+10 4 SUPPLIER_NAME 1043 -1 2 34 false false false
+11 4 SUPPLIER_STATUS 21 2 3 4 false false false
+12 4 SUPPLIER_CITY 1043 -1 4 34 false false false
+13 4 SUPPLIER_STATE 1043 -1 5 6 false false false
+14 5 SUPPLIER_ID 1043 -1 1 14 true false false
+15 5 PART_ID 1043 -1 2 8 true false false
+16 5 QUANTITY 21 2 3 4 false false false
+17 5 SHIPPER_ID 21 2 4 4 false false false
18 6 VDBName 1043 -1 1 259 true false false
19 6 SchemaName 1043 -1 2 259 true false false
20 6 Name 1043 -1 3 259 true false false
@@ -165,93 +165,93 @@
163 18 Name 1043 -1 1 259 true false false
164 18 Version 1043 -1 2 54 true false false
165 19 oid 23 4 1 4 false false false
-166 19 nspname 1043 -1 2 4 false false false
-167 20 oid 23 4 1 4 false false false
-168 20 relname 1043 -1 2 4 false false false
-169 20 relnamespace 23 4 3 4 false false false
-170 20 relkind 1042 1 4 4 false false false
-171 20 relam 23 4 5 4 false false false
-172 20 reltuples 700 4 6 4 false false false
-173 20 relpages 23 4 7 4 false false false
-174 20 relhasrules 16 1 8 4 false false false
-175 20 relhasoids 16 1 9 4 false false false
-176 21 oid 23 4 1 4 false false false
-177 21 attrelid 23 4 2 4 false false false
-178 21 attname 1043 -1 3 4 false false false
-179 21 atttypid 23 4 4 4 false false false
-180 21 attlen 21 2 5 4 false false false
-181 21 attnum 21 2 6 4 false false false
-182 21 atttypmod 23 4 7 4 false false false
-183 21 attnotnull 16 1 8 4 false false false
-184 21 attisdropped 16 1 9 4 false false false
-185 21 atthasdef 16 1 10 4 false false false
-186 22 oid 23 4 1 4 false false false
-187 22 typname 1043 -1 2 4 false false false
-188 22 typnamespace 23 4 3 4 false false false
-189 22 typlen 21 2 4 4 false false false
-190 22 typtype 1042 1 5 4 false false false
-191 22 typbasetype 23 4 6 4 false false false
-192 22 typtypmod 23 4 7 4 false false false
-193 22 typrelid 23 4 8 4 false false false
-194 22 typelem 23 4 9 4 false false false
-195 23 oid 23 4 1 4 false false false
-196 23 indexrelid 23 4 2 4 false false false
-197 23 indrelid 23 4 3 4 false false false
-198 23 indisclustered 16 1 4 4 false false false
-199 23 indisunique 16 1 5 4 false false false
-200 23 indisprimary 16 1 6 4 false false false
-201 23 indexprs 1043 -1 7 4 false false false
-202 23 indkey 1043 -1 8 4 false false false
-203 24 oid 23 4 1 4 false false false
-204 24 amname 1043 -1 2 4 false false false
-205 25 oid 23 4 1 4 false false false
-206 25 proname 1043 -1 2 4 false false false
-207 25 proretset 16 1 3 4 false false false
-208 25 prorettype 23 4 4 4 false false false
-209 25 pronargs 21 2 5 4 false false false
-210 25 proargtypes 705 -2 6 4 false false false
-211 25 proargnames 705 -2 7 4 false false false
-212 25 proargmodes 705 -2 8 4 false false false
-213 25 proallargtypes 705 -2 9 4 false false false
-214 25 pronamespace 23 4 10 4 false false false
-215 26 oid 23 4 1 4 false false false
-216 26 tgconstrrelid 23 4 2 4 false false false
-217 26 tgfoid 23 4 3 4 false false false
-218 26 tgargs 23 4 4 4 false false false
-219 26 tgnargs 23 4 5 4 false false false
-220 26 tgdeferrable 16 1 6 4 false false false
-221 26 tginitdeferred 16 1 7 4 false false false
-222 26 tgconstrname 1043 -1 8 4 false false false
-223 26 tgrelid 23 4 9 4 false false false
-224 27 adrelid 23 4 1 4 false false false
-225 27 adnum 23 4 2 4 false false false
-226 27 adbin 1043 -1 3 4 false false false
-227 27 adsrc 1043 -1 4 4 false false false
-228 28 oid 23 4 1 4 false false false
-229 28 datname 1043 -1 2 4 false false false
-230 28 encoding 23 4 3 4 false false false
-231 28 datlastsysoid 23 4 4 4 false false false
-232 28 datallowconn 1042 1 5 4 false false false
-233 28 datconfig 705 -2 6 4 false false false
-234 28 datacl 705 -2 7 4 false false false
-235 28 datdba 23 4 8 4 false false false
-236 28 dattablespace 23 4 9 4 false false false
-237 29 oid 23 4 1 4 false false false
-238 29 usename 1043 -1 2 4 false false false
-239 29 usecreatedb 16 1 3 4 false false false
-240 29 usesuper 16 1 4 4 false false false
-241 30 attrelid 23 4 1 4 false false false
-242 30 attnum 21 2 2 4 false false false
-243 30 attname 1043 -1 3 4 false false false
-244 30 relname 1043 -1 4 4 false false false
-245 30 nspname 1043 -1 5 4 false false false
-246 30 autoinc 16 1 6 4 false false false
-247 30 typoid 23 4 7 4 false false false
-248 31 oid 23 4 1 4 false false false
-249 31 typname 1043 -1 2 4 false false false
-250 31 name 1043 -1 3 4 false false false
-251 31 uid 1043 -1 4 4 false false false
-252 31 typlen 21 2 5 4 false false false
+166 19 typname 1043 -1 2 4 false false false
+167 19 name 1043 -1 3 4 false false false
+168 19 uid 1043 -1 4 4 false false false
+169 19 typlen 21 2 5 4 false false false
+170 20 attrelid 23 4 1 4 false false false
+171 20 attnum 21 2 2 4 false false false
+172 20 attname 1043 -1 3 4 false false false
+173 20 relname 1043 -1 4 4 false false false
+174 20 nspname 1043 -1 5 4 false false false
+175 20 autoinc 16 1 6 4 false false false
+176 20 typoid 23 4 7 4 false false false
+177 21 oid 23 4 1 4 false false false
+178 21 amname 1043 -1 2 4 false false false
+179 22 adrelid 23 4 1 4 false false false
+180 22 adnum 23 4 2 4 false false false
+181 22 adbin 1043 -1 3 4 false false false
+182 22 adsrc 1043 -1 4 4 false false false
+183 23 oid 23 4 1 4 false false false
+184 23 attrelid 23 4 2 4 false false false
+185 23 attname 1043 -1 3 4 false false false
+186 23 atttypid 23 4 4 4 false false false
+187 23 attlen 21 2 5 4 false false false
+188 23 attnum 21 2 6 4 false false false
+189 23 atttypmod 23 4 7 4 false false false
+190 23 attnotnull 16 1 8 4 false false false
+191 23 attisdropped 16 1 9 4 false false false
+192 23 atthasdef 16 1 10 4 false false false
+193 24 oid 23 4 1 4 false false false
+194 24 relname 1043 -1 2 4 false false false
+195 24 relnamespace 23 4 3 4 false false false
+196 24 relkind 1042 1 4 4 false false false
+197 24 relam 23 4 5 4 false false false
+198 24 reltuples 700 4 6 4 false false false
+199 24 relpages 23 4 7 4 false false false
+200 24 relhasrules 16 1 8 4 false false false
+201 24 relhasoids 16 1 9 4 false false false
+202 25 oid 23 4 1 4 false false false
+203 25 datname 1043 -1 2 4 false false false
+204 25 encoding 23 4 3 4 false false false
+205 25 datlastsysoid 23 4 4 4 false false false
+206 25 datallowconn 1042 1 5 4 false false false
+207 25 datconfig 705 -2 6 4 false false false
+208 25 datacl 705 -2 7 4 false false false
+209 25 datdba 23 4 8 4 false false false
+210 25 dattablespace 23 4 9 4 false false false
+211 26 oid 23 4 1 4 false false false
+212 26 indexrelid 23 4 2 4 false false false
+213 26 indrelid 23 4 3 4 false false false
+214 26 indisclustered 16 1 4 4 false false false
+215 26 indisunique 16 1 5 4 false false false
+216 26 indisprimary 16 1 6 4 false false false
+217 26 indexprs 1043 -1 7 4 false false false
+218 26 indkey 1043 -1 8 4 false false false
+219 27 oid 23 4 1 4 false false false
+220 27 nspname 1043 -1 2 4 false false false
+221 28 oid 23 4 1 4 false false false
+222 28 proname 1043 -1 2 4 false false false
+223 28 proretset 16 1 3 4 false false false
+224 28 prorettype 23 4 4 4 false false false
+225 28 pronargs 21 2 5 4 false false false
+226 28 proargtypes 705 -2 6 4 false false false
+227 28 proargnames 705 -2 7 4 false false false
+228 28 proargmodes 705 -2 8 4 false false false
+229 28 proallargtypes 705 -2 9 4 false false false
+230 28 pronamespace 23 4 10 4 false false false
+231 29 oid 23 4 1 4 false false false
+232 29 tgconstrrelid 23 4 2 4 false false false
+233 29 tgfoid 23 4 3 4 false false false
+234 29 tgargs 23 4 4 4 false false false
+235 29 tgnargs 23 4 5 4 false false false
+236 29 tgdeferrable 16 1 6 4 false false false
+237 29 tginitdeferred 16 1 7 4 false false false
+238 29 tgconstrname 1043 -1 8 4 false false false
+239 29 tgrelid 23 4 9 4 false false false
+240 30 oid 23 4 1 4 false false false
+241 30 typname 1043 -1 2 4 false false false
+242 30 typnamespace 23 4 3 4 false false false
+243 30 typlen 21 2 4 4 false false false
+244 30 typtype 1042 1 5 4 false false false
+245 30 typbasetype 23 4 6 4 false false false
+246 30 typtypmod 23 4 7 4 false false false
+247 30 typrelid 23 4 8 4 false false false
+248 30 typelem 23 4 9 4 false false false
+249 31 oid 23 4 1 4 false false false
+250 31 usename 1043 -1 2 4 false false false
+251 31 usecreatedb 16 1 3 4 false false false
+252 31 usesuper 16 1 4 4 false false false
Row Count : 252
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
oid 4 PartsSupplier java.lang.Integer oid integer pg_catalog pg_attribute 11 10 0 false false false false 2 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_CLASS.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_CLASS.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_CLASS.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -3,8 +3,8 @@
1 PARTSSUPPLIER.PARTS 1 r 0 0.0 0 false false
2 PARTSSUPPLIER.SHIP_VIA 1 r 0 0.0 0 false false
3 PARTSSUPPLIER.STATUS 1 r 0 0.0 0 false false
-4 PARTSSUPPLIER.SUPPLIER_PARTS 1 r 0 0.0 0 false false
-5 PARTSSUPPLIER.SUPPLIER 1 r 0 0.0 0 false false
+4 PARTSSUPPLIER.SUPPLIER 1 r 0 0.0 0 false false
+5 PARTSSUPPLIER.SUPPLIER_PARTS 1 r 0 0.0 0 false false
6 MatViews 2 r 0 0.0 0 false false
7 VDBResources 2 r 0 0.0 0 false false
8 Columns 3 r 0 0.0 0 false false
@@ -18,19 +18,19 @@
16 Schemas 3 r 0 0.0 0 false false
17 Tables 3 r 0 0.0 0 false false
18 VirtualDatabases 3 r 0 0.0 0 false false
-19 pg_namespace 4 v 0 0.0 0 false false
-20 pg_class 4 v 0 0.0 0 false false
-21 pg_attribute 4 v 0 0.0 0 false false
-22 pg_type 4 v 0 0.0 0 false false
-23 pg_index 4 v 0 0.0 0 false false
-24 pg_am 4 v 0 0.0 0 false false
-25 pg_proc 4 v 0 0.0 0 false false
-26 pg_trigger 4 v 0 0.0 0 false false
-27 pg_attrdef 4 v 0 0.0 0 false false
-28 pg_database 4 v 0 0.0 0 false false
-29 pg_user 4 v 0 0.0 0 false false
-30 matpg_relatt 4 v 0 0.0 0 false false
-31 matpg_datatype 4 v 0 0.0 0 false false
+19 matpg_datatype 4 v 0 0.0 0 false false
+20 matpg_relatt 4 v 0 0.0 0 false false
+21 pg_am 4 v 0 0.0 0 false false
+22 pg_attrdef 4 v 0 0.0 0 false false
+23 pg_attribute 4 v 0 0.0 0 false false
+24 pg_class 4 v 0 0.0 0 false false
+25 pg_database 4 v 0 0.0 0 false false
+26 pg_index 4 v 0 0.0 0 false false
+27 pg_namespace 4 v 0 0.0 0 false false
+28 pg_proc 4 v 0 0.0 0 false false
+29 pg_trigger 4 v 0 0.0 0 false false
+30 pg_type 4 v 0 0.0 0 false false
+31 pg_user 4 v 0 0.0 0 false false
Row Count : 31
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
oid 4 PartsSupplier java.lang.Integer oid integer pg_catalog pg_class 11 10 0 false false false false 2 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_INDEX.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_INDEX.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_INDEX.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -4,24 +4,24 @@
2 2 2 false false true 0
3 3 3 false false true 0
4 4 4 false false true 0
-5 5 4 false false true 0
-6 6 4 false false false 0
-7 7 4 false false false 0
-8 8 5 false false true 0
+5 5 4 false false false 0
+6 6 5 false false true 0
+7 7 5 false false true 0
+8 8 5 false false false 0
9 9 5 false false false 0
-10 10 20 false false true 0
-11 11 21 false false true 0
-12 12 23 false false true 0
-13 13 25 false false true 0
-14 14 30 false false true 0
-15 15 30 false false true 0
-16 16 30 false false true 0
-17 17 30 false false false 0
-18 18 30 false false false 0
-19 19 31 false false true 0
-20 20 31 false false true 0
-21 21 31 false false false 0
-22 22 31 false false false 0
+10 10 19 false false true 0
+11 11 19 false false true 0
+12 12 19 false false false 0
+13 13 19 false false false 0
+14 14 20 false false true 0
+15 15 20 false false true 0
+16 16 20 false false true 0
+17 17 20 false false false 0
+18 18 20 false false false 0
+19 19 23 false false true 0
+20 20 24 false false true 0
+21 21 26 false false true 0
+22 22 28 false false true 0
Row Count : 22
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
oid 4 PartsSupplier java.lang.Integer oid integer pg_catalog pg_index 11 10 0 false false false false 2 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestODBCSocketTransport/testSelect.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestODBCSocketTransport/testSelect.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestODBCSocketTransport/testSelect.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -8,8 +8,8 @@
parts PartsSupplier PARTSSUPPLIER.PARTS Table PARTS true true mmuuid:f6276601-73fe-1edc-a81c-ecf397b10590 16 <null> false false 1
parts PartsSupplier PARTSSUPPLIER.SHIP_VIA Table SHIP_VIA true true mmuuid:0f4e9b80-73ff-1edc-a81c-ecf397b10590 4 <null> false false 2
parts PartsSupplier PARTSSUPPLIER.STATUS Table STATUS true true mmuuid:1f297200-73ff-1edc-a81c-ecf397b10590 3 <null> false false 3
-parts PartsSupplier PARTSSUPPLIER.SUPPLIER Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 <null> false false 5
-parts PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 <null> false false 4
+parts PartsSupplier PARTSSUPPLIER.SUPPLIER Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 <null> false false 4
+parts PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 <null> false false 5
parts SYS ProcedureParams Table <null> true false mmuuid:a56bd7fe-c87a-411c-8f5d-661975a25626 -1 <null> true false 12
parts SYS Procedures Table <null> true false mmuuid:0bc132a5-9f8d-4a3c-9f5d-98156a98a962 -1 <null> true false 13
parts SYS Properties Table <null> true false mmuuid:7a45e50a-d03f-4548-ba35-761651bbca85 -1 <null> true false 14
@@ -18,19 +18,19 @@
parts SYS Tables Table <null> true false mmuuid:8551b3bd-11cc-4049-9bcf-fe91a0eb7ba7 -1 <null> true false 17
parts SYSADMIN VDBResources Table <null> true false mmuuid:1785804d-beaf-4831-9531-e59164fedd49 -1 <null> true false 7
parts SYS VirtualDatabases Table <null> true false mmuuid:47297c72-d621-4f4e-af4e-74060ac5f489 -1 <null> true false 18
-parts pg_catalog matpg_datatype Table <null> false false mmuid:17448311-6679-4dfd-aeb6-4aabbd894729 -1 <null> true true 31
-parts pg_catalog matpg_relatt Table <null> false false mmuid:8c0714d6-1c72-40b4-8528-3b2c63059107 -1 <null> true true 30
-parts pg_catalog pg_am Table <null> false false mmuid:f6517a63-8c14-4b73-a18d-afaa5dfb35d9 -1 <null> true false 24
-parts pg_catalog pg_attrdef Table <null> false false mmuid:76a7dd05-9a7d-4243-b561-f3056500dcaf -1 <null> true false 27
-parts pg_catalog pg_attribute Table <null> false false mmuid:fa463d98-365f-489a-a707-025193cb51eb -1 <null> true true 21
-parts pg_catalog pg_class Table <null> false false mmuid:7e21f2e6-06e3-4bca-9b01-72ea47821560 -1 <null> true true 20
-parts pg_catalog pg_database Table <null> false false mmuid:382f9fc9-8c96-4df7-ab5d-04dfb47ee142 -1 <null> true false 28
-parts pg_catalog pg_index Table <null> false false mmuid:09daed8d-b0b8-4552-a261-2b6c775b46b0 -1 <null> true true 23
-parts pg_catalog pg_namespace Table <null> false false mmuid:6609866a-3d7b-4f4b-95fe-ebfac769d699 -1 <null> true false 19
-parts pg_catalog pg_proc Table <null> false false mmuid:f20c9489-10ca-4596-8a37-24218b67f764 -1 <null> true true 25
-parts pg_catalog pg_trigger Table <null> false false mmuid:2b75f0b1-7475-4ed5-9da3-d37a8a25f26a -1 <null> true false 26
-parts pg_catalog pg_type Table <null> false false mmuid:9462e3f8-cd3c-414f-a570-f6f33c40e36a -1 <null> true false 22
-parts pg_catalog pg_user Table <null> false false mmuid:e63613cb-01ee-4b37-8b91-99d1aac4dfcb -1 <null> true false 29
+parts pg_catalog matpg_datatype Table <null> false false mmuid:17448311-6679-4dfd-aeb6-4aabbd894729 -1 <null> true true 19
+parts pg_catalog matpg_relatt Table <null> false false mmuid:8c0714d6-1c72-40b4-8528-3b2c63059107 -1 <null> true true 20
+parts pg_catalog pg_am Table <null> false false mmuid:f6517a63-8c14-4b73-a18d-afaa5dfb35d9 -1 <null> true false 21
+parts pg_catalog pg_attrdef Table <null> false false mmuid:76a7dd05-9a7d-4243-b561-f3056500dcaf -1 <null> true false 22
+parts pg_catalog pg_attribute Table <null> false false mmuid:fa463d98-365f-489a-a707-025193cb51eb -1 <null> true true 23
+parts pg_catalog pg_class Table <null> false false mmuid:7e21f2e6-06e3-4bca-9b01-72ea47821560 -1 <null> true true 24
+parts pg_catalog pg_database Table <null> false false mmuid:382f9fc9-8c96-4df7-ab5d-04dfb47ee142 -1 <null> true false 25
+parts pg_catalog pg_index Table <null> false false mmuid:09daed8d-b0b8-4552-a261-2b6c775b46b0 -1 <null> true true 26
+parts pg_catalog pg_namespace Table <null> false false mmuid:6609866a-3d7b-4f4b-95fe-ebfac769d699 -1 <null> true false 27
+parts pg_catalog pg_proc Table <null> false false mmuid:f20c9489-10ca-4596-8a37-24218b67f764 -1 <null> true true 28
+parts pg_catalog pg_trigger Table <null> false false mmuid:2b75f0b1-7475-4ed5-9da3-d37a8a25f26a -1 <null> true false 29
+parts pg_catalog pg_type Table <null> false false mmuid:9462e3f8-cd3c-414f-a570-f6f33c40e36a -1 <null> true false 30
+parts pg_catalog pg_user Table <null> false false mmuid:e63613cb-01ee-4b37-8b91-99d1aac4dfcb -1 <null> true false 31
Row Count : 31
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
vdbname 12 java.lang.String vdbname varchar 2147483647 0 0 false true false false 1 false true false true
Modified: trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testPrimaryKeys.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testPrimaryKeys.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testPrimaryKeys.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -4,16 +4,16 @@
PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID 2 PK_SUPPLIER_PARTS
PartsSupplier PartsSupplier PARTSSUPPLIER.SHIP_VIA SHIPPER_ID 1 PK_SHIP_VIA
PartsSupplier PartsSupplier PARTSSUPPLIER.STATUS STATUS_ID 1 PK_STATUS
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_ID 1 PK_SUPPLIER
PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID 1 PK_SUPPLIER_PARTS
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_ID 1 PK_SUPPLIER
PartsSupplier pg_catalog matpg_relatt attname 1 pk_matpg_relatt_names
PartsSupplier pg_catalog matpg_datatype name 2 matpg_datatype_names
PartsSupplier pg_catalog matpg_relatt nspname 3 pk_matpg_relatt_names
+PartsSupplier pg_catalog matpg_datatype oid 1 matpg_datatype_names
+PartsSupplier pg_catalog pg_attribute oid 1 pk_pg_attr
PartsSupplier pg_catalog pg_class oid 1 pk_pg_class
-PartsSupplier pg_catalog pg_attribute oid 1 pk_pg_attr
PartsSupplier pg_catalog pg_index oid 1 pk_pg_index
PartsSupplier pg_catalog pg_proc oid 1 pk_pg_proc
-PartsSupplier pg_catalog matpg_datatype oid 1 matpg_datatype_names
PartsSupplier pg_catalog matpg_relatt relname 2 pk_matpg_relatt_names
Row Count : 15
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -79,7 +79,7 @@
PartsSupplier SYS ProcedureParams Optional 8 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:4033f891-5ef5-!
4a75-8a50-bd1d021e43ad <null> 107
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_COLOR 3 PART_COLOR string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:015c0d00-73ff-!
1edc-a81c-ecf397b10590 <null> 3
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_ID 1 PART_ID string 0 4 true true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 4 10 mmuuid:fadcd7c0-73fe-!
1edc-a81c-ecf397b10590 <null> 1
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID 2 PART_ID string 0 4 true true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 4 10 mmuuid:3fc400c0-73ff-!
1edc-a81c-ecf397b10590 <null> 10
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID 2 PART_ID string 0 4 true true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 4 10 mmuuid:3fc400c0-73ff-!
1edc-a81c-ecf397b10590 <null> 15
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_NAME 2 PART_NAME string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:0067e900-73ff-!
1edc-a81c-ecf397b10590 <null> 2
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_WEIGHT 4 PART_WEIGHT string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:015c0d01-73ff-!
1edc-a81c-ecf397b10590 <null> 4
PartsSupplier SYS ReferenceKeyColumns PKCOLUMN_NAME 4 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:0125a80a-95f9-!
486f-aa90-debb21cb5f1b <null> 132
@@ -95,7 +95,7 @@
PartsSupplier SYS ProcedureParams Precision 9 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:00fe7cad-0a83-!
42f0-90f2-d6a9584916b2 <null> 108
PartsSupplier SYS Schemas PrimaryMetamodelURI 6 <null> string 0 255 false true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:eadfaba5-ce44-!
4529-816f-6af94666baec <null> 148
PartsSupplier SYS ProcedureParams ProcedureName 3 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:8081b3a6-fc79-!
42fd-b7c9-a19d682a1658 <null> 102
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS QUANTITY 3 QUANTITY short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 3 0 10 mmuuid:3fc400c1-73ff-!
1edc-a81c-ecf397b10590 <null> 11
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS QUANTITY 3 QUANTITY short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 3 0 10 mmuuid:3fc400c1-73ff-!
1edc-a81c-ecf397b10590 <null> 16
PartsSupplier SYS Columns Radix 28 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:43a6124c-972f-!
4c4c-af05-24080c2a8ad7 <null> 56
PartsSupplier SYS DataTypes Radix 13 <null> integer 0 10 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:967ab8fd-3226-!
4a78-8cf2-2eb7fbf2981a <null> 72
PartsSupplier SYS ProcedureParams Radix 12 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:8df37c99-3b12-!
4789-8128-4aa496f895c4 <null> 111
@@ -104,16 +104,16 @@
PartsSupplier SYS Procedures ReturnsResults 5 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:b01164c8-dd10-!
410d-a91b-fcb2fc0450ce <null> 120
PartsSupplier SYS DataTypes RuntimeType 16 <null> string 0 64 true true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 64 64 10 mmuuid:3c7bc9d0-b73f-!
49a0-b9ab-dc97a4d2a124 <null> 75
PartsSupplier PartsSupplier PARTSSUPPLIER.SHIP_VIA SHIPPER_ID 1 SHIPPER_ID short 0 0 true true true false true false false No Nulls <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 2 0 10 mmuuid:121bc540-73ff-!
1edc-a81c-ecf397b10590 <null> 5
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SHIPPER_ID 4 SHIPPER_ID short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 2 0 10 mmuuid:3fc400c2-73ff-!
1edc-a81c-ecf397b10590 <null> 12
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SHIPPER_ID 4 SHIPPER_ID short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 2 0 10 mmuuid:3fc400c2-73ff-!
1edc-a81c-ecf397b10590 <null> 17
PartsSupplier PartsSupplier PARTSSUPPLIER.SHIP_VIA SHIPPER_NAME 2 SHIPPER_NAME string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:130fe940-73ff-!
1edc-a81c-ecf397b10590 <null> 6
PartsSupplier PartsSupplier PARTSSUPPLIER.STATUS STATUS_ID 1 STATUS_ID short 0 0 true true true false true false false No Nulls <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 2 0 10 mmuuid:201d9600-73ff-!
1edc-a81c-ecf397b10590 <null> 7
PartsSupplier PartsSupplier PARTSSUPPLIER.STATUS STATUS_NAME 2 STATUS_NAME string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:201d9601-73ff-!
1edc-a81c-ecf397b10590 <null> 8
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_CITY 4 SUPPLIER_CITY string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:2fe92a40-73ff-!
1edc-a81c-ecf397b10590 <null> 16
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID 1 SUPPLIER_ID string 0 10 false true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 10 10 mmuuid:3ecfdcc0-73ff-!
1edc-a81c-ecf397b10590 <null> 9
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_ID 1 SUPPLIER_ID string 0 10 false true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 10 10 mmuuid:2f044880-73ff-!
1edc-a81c-ecf397b10590 <null> 13
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_NAME 2 SUPPLIER_NAME string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:2f044881-73ff-!
1edc-a81c-ecf397b10590 <null> 14
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_STATE 5 SUPPLIER_STATE string 0 2 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 2 10 mmuuid:2fe92a41-73ff-!
1edc-a81c-ecf397b10590 <null> 17
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_STATUS 3 SUPPLIER_STATUS short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 2 0 10 mmuuid:2f044882-73ff-!
1edc-a81c-ecf397b10590 <null> 15
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_CITY 4 SUPPLIER_CITY string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:2fe92a40-73ff-!
1edc-a81c-ecf397b10590 <null> 12
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_ID 1 SUPPLIER_ID string 0 10 false true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 10 10 mmuuid:2f044880-73ff-!
1edc-a81c-ecf397b10590 <null> 9
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID 1 SUPPLIER_ID string 0 10 false true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 10 10 mmuuid:3ecfdcc0-73ff-!
1edc-a81c-ecf397b10590 <null> 14
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_NAME 2 SUPPLIER_NAME string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:2f044881-73ff-!
1edc-a81c-ecf397b10590 <null> 10
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_STATE 5 SUPPLIER_STATE string 0 2 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 2 10 mmuuid:2fe92a41-73ff-!
1edc-a81c-ecf397b10590 <null> 13
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_STATUS 3 SUPPLIER_STATUS short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 2 0 10 mmuuid:2f044882-73ff-!
1edc-a81c-ecf397b10590 <null> 11
PartsSupplier SYS Columns Scale 8 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:cc6c6113-8d70-!
40c8-84c0-94e17c14e22e <null> 36
PartsSupplier SYS DataTypes Scale 6 <null> integer 0 10 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> (0) java.lang.Integer 10 10 10 mmuuid:e8655204-e97a-!
45cd-909b-1e37731e9546 <null> 65
PartsSupplier SYS ProcedureParams Scale 11 <null> integer 0 10 true true true false false false false No Nulls <null> <null> -1 -1 Searchable <null> (0) java.lang.Integer 10 10 10 mmuuid:360c8b1d-4b3d-!
42fd-952c-bf5763cad69e <null> 110
@@ -162,96 +162,96 @@
PartsSupplier SYSADMIN MatViews Valid 6 <null> boolean 0 0 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 10 mmuuid:13098912-bce2-!
4842-9ea9-b162fcd7383e <null> 23
PartsSupplier SYS Properties Value 2 <null> string 0 255 true true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:c917257d-06b7-!
41dd-a6cb-44c0ff0f897e <null> 125
PartsSupplier SYS VirtualDatabases Version 2 <null> string 0 50 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:c876d749-a512-!
4810-9910-3034ca524c45 <null> 164
-PartsSupplier pg_catalog pg_attrdef adbin 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:e22c521a-e208-4!
181-9dbd-89f5de7014b9 <null> 226
-PartsSupplier pg_catalog pg_attrdef adnum 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e9b278d4-49af-4!
42f-9a5a-b699fe3b102b <null> 225
-PartsSupplier pg_catalog pg_attrdef adrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:4589389f-4abd-4!
2a6-818f-ff1f2a085dfb <null> 224
-PartsSupplier pg_catalog pg_attrdef adsrc 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:492dd834-907f-4!
29b-aa6e-958ad65204c6 <null> 227
-PartsSupplier pg_catalog pg_am amname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:da4b747e-7d87-4!
03a-8309-2cdf1399031b <null> 204
-PartsSupplier pg_catalog pg_attribute atthasdef 10 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:5868e549-4bbe-4!
79e-bc7e-632c05cc2329 <null> 185
-PartsSupplier pg_catalog pg_attribute attisdropped 9 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:7beb42a9-dfe6-4!
3de-98b6-7e8948b1a666 <null> 184
-PartsSupplier pg_catalog pg_attribute attlen 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:d1214249-95cd-4!
26f-b8f6-4bf68c0504c7 <null> 180
-PartsSupplier pg_catalog pg_attribute attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:6064d149-4102-4!
c2d-9132-582342f25e90 <null> 178
-PartsSupplier pg_catalog matpg_relatt attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:5cfb2b62-a912-4!
bfb-bf4f-51e107fe210c <null> 243
-PartsSupplier pg_catalog pg_attribute attnotnull 8 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:91ce8bde-8570-4!
867-be17-80acfa9275a6 <null> 183
-PartsSupplier pg_catalog pg_attribute attnum 6 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:141fd911-f2dd-4!
edd-8f08-ad8a67ffd0fb <null> 181
-PartsSupplier pg_catalog matpg_relatt attnum 2 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:0b0894ba-e1ea-4!
eaf-bcd2-ea9ebd05e47d <null> 242
-PartsSupplier pg_catalog pg_attribute attrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3be6b5de-2287-4!
279-93f3-4f5064799118 <null> 177
-PartsSupplier pg_catalog matpg_relatt attrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:5c7bf056-ecc5-4!
1ea-a122-7a4b1de9908a <null> 241
-PartsSupplier pg_catalog pg_attribute atttypid 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:99782493-1cce-4!
e14-9c1b-4de7ce50e2c8 <null> 179
-PartsSupplier pg_catalog pg_attribute atttypmod 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:2e2bae3c-ab93-4!
9f5-b96c-7a7b9d66782d <null> 182
-PartsSupplier pg_catalog matpg_relatt autoinc 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:23454408-0347-4!
0d2-a3f9-3faa664fb5e9 <null> 246
+PartsSupplier pg_catalog pg_attrdef adbin 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:e22c521a-e208-4!
181-9dbd-89f5de7014b9 <null> 181
+PartsSupplier pg_catalog pg_attrdef adnum 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e9b278d4-49af-4!
42f-9a5a-b699fe3b102b <null> 180
+PartsSupplier pg_catalog pg_attrdef adrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:4589389f-4abd-4!
2a6-818f-ff1f2a085dfb <null> 179
+PartsSupplier pg_catalog pg_attrdef adsrc 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:492dd834-907f-4!
29b-aa6e-958ad65204c6 <null> 182
+PartsSupplier pg_catalog pg_am amname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:da4b747e-7d87-4!
03a-8309-2cdf1399031b <null> 178
+PartsSupplier pg_catalog pg_attribute atthasdef 10 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:5868e549-4bbe-4!
79e-bc7e-632c05cc2329 <null> 192
+PartsSupplier pg_catalog pg_attribute attisdropped 9 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:7beb42a9-dfe6-4!
3de-98b6-7e8948b1a666 <null> 191
+PartsSupplier pg_catalog pg_attribute attlen 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:d1214249-95cd-4!
26f-b8f6-4bf68c0504c7 <null> 187
+PartsSupplier pg_catalog matpg_relatt attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:5cfb2b62-a912-4!
bfb-bf4f-51e107fe210c <null> 172
+PartsSupplier pg_catalog pg_attribute attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:6064d149-4102-4!
c2d-9132-582342f25e90 <null> 185
+PartsSupplier pg_catalog pg_attribute attnotnull 8 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:91ce8bde-8570-4!
867-be17-80acfa9275a6 <null> 190
+PartsSupplier pg_catalog matpg_relatt attnum 2 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:0b0894ba-e1ea-4!
eaf-bcd2-ea9ebd05e47d <null> 171
+PartsSupplier pg_catalog pg_attribute attnum 6 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null>