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> java.lang.Short 0 0 0 mmuid:141fd911-f2dd-4!
edd-8f08-ad8a67ffd0fb <null> 188
+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> 170
+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> 184
+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> 186
+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> 189
+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> 175
PartsSupplier SYSADMIN VDBResources contents 2 <null> blob 0 0 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> org.teiid.core.types.BlobType 0 0 10 mmuuid:f9421669-3564-!
451d-9293-96c1e5e72c4f <null> 28
-PartsSupplier pg_catalog pg_database datacl 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:8b993c11-de2b-4!
8bc-beb1-3e44c46811b4 <null> 234
-PartsSupplier pg_catalog pg_database datallowconn 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:5c9d54b2-433f-4!
43a-85ce-821f42ed109e <null> 232
-PartsSupplier pg_catalog pg_database datconfig 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:4b5beb14-03a0-4!
652-9d6f-5f8cc74d470c <null> 233
-PartsSupplier pg_catalog pg_database datdba 8 <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:36db343d-e99a-4!
27c-a4e2-763a720ce4a4 <null> 235
-PartsSupplier pg_catalog pg_database datlastsysoid 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:c2bdf40c-ec58-4!
39c-a403-7adf604ceadd <null> 231
-PartsSupplier pg_catalog pg_database datname 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:1aedd02c-5801-4!
1e7-accd-da1f257c26e8 <null> 229
-PartsSupplier pg_catalog pg_database dattablespace 9 <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:28d034eb-6f39-4!
02f-b642-9c9560e57247 <null> 236
-PartsSupplier pg_catalog pg_database encoding 3 <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:3b621b25-171c-4!
05b-8bf9-635cf93f2273 <null> 230
-PartsSupplier pg_catalog pg_index indexprs 7 <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:1e6dbecd-9a2d-4!
aef-afbe-665de7acb9d6 <null> 201
-PartsSupplier pg_catalog pg_index indexrelid 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:8709e084-48df-4!
17d-b3f8-f4e9b7d8802b <null> 196
-PartsSupplier pg_catalog pg_index indisclustered 4 <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:9f873e0f-903d-4!
c9d-8c37-1073b5ec4c67 <null> 198
-PartsSupplier pg_catalog pg_index indisprimary 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:9ea3b6d2-b27b-4!
bb1-a99d-b703c3308384 <null> 200
-PartsSupplier pg_catalog pg_index indisunique 5 <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:a52c714d-dfe9-4!
06c-906b-fadd53ac4e98 <null> 199
-PartsSupplier pg_catalog pg_index indkey 8 <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:347ec08c-6b41-4!
1d0-8475-031ce7d99ac0 <null> 202
-PartsSupplier pg_catalog pg_index indrelid 3 <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:16998907-e1dd-4!
47e-898d-780994d30619 <null> 197
-PartsSupplier pg_catalog matpg_datatype name 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:b4e04928-9a59-4!
718-a7f1-3a60bcae7449 <null> 250
-PartsSupplier pg_catalog pg_namespace nspname 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:0e513513-b35a-4!
8be-975d-5dbed6ace7e9 <null> 166
-PartsSupplier pg_catalog matpg_relatt nspname 5 <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:f1998229-2c1a-4!
7b7-8f46-9dda81446db6 <null> 245
-PartsSupplier pg_catalog pg_namespace oid 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:688e5112-4083-4!
b67-b42c-62d9a614c59a <null> 165
-PartsSupplier pg_catalog pg_class oid 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:c1e736ac-c9d4-4!
026-8904-23c90e6eb1c0 <null> 167
-PartsSupplier pg_catalog pg_attribute oid 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:f735e545-a81c-4!
ee2-84d0-3ea35d4083a2 <null> 176
-PartsSupplier pg_catalog pg_type oid 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:b6f64d16-b147-4!
59d-8e84-1bd3048fb900 <null> 186
-PartsSupplier pg_catalog pg_index oid 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:83ae2247-7eec-4!
59f-b037-ffd3cdca0627 <null> 195
-PartsSupplier pg_catalog pg_am oid 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:3c67619c-7d8f-4!
378-b7e9-84a0451ea5e5 <null> 203
-PartsSupplier pg_catalog pg_proc oid 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:bdf3ee1e-b5b7-4!
8ab-b43c-4bbb2c8ae1e2 <null> 205
-PartsSupplier pg_catalog pg_trigger oid 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:635b6634-632c-4!
3c9-8cc7-bcaa016133e8 <null> 215
-PartsSupplier pg_catalog pg_database oid 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:689cde3b-a631-4!
f25-94b4-ff2ffe022b0f <null> 228
-PartsSupplier pg_catalog pg_user oid 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:bb78401d-d10c-4!
3b1-af84-e4fa6b95db42 <null> 237
-PartsSupplier pg_catalog matpg_datatype oid 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:053375a4-3971-4!
705-9146-9ecc640022c2 <null> 248
-PartsSupplier pg_catalog pg_proc proallargtypes 9 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:a385751f-a31a-4!
d5d-9197-3fbd390b0251 <null> 213
-PartsSupplier pg_catalog pg_proc proargmodes 8 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:bcbed548-176c-4!
116-a5d6-7638cb0206e1 <null> 212
-PartsSupplier pg_catalog pg_proc proargnames 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:d9f36bdc-7b25-4!
af0-b9f5-a96aac6d3094 <null> 211
-PartsSupplier pg_catalog pg_proc proargtypes 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:ffa4ac73-b549-4!
70e-931f-dc36330cb8c4 <null> 210
-PartsSupplier pg_catalog pg_proc proname 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:b288b3aa-37f2-4!
a8e-8b1b-e932a2ce3e25 <null> 206
-PartsSupplier pg_catalog pg_proc pronamespace 10 <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:e5715456-245f-4!
846-b90b-01d06d1c3672 <null> 214
-PartsSupplier pg_catalog pg_proc pronargs 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:6796c2e7-48a4-4!
f9f-bc98-d47913e2491c <null> 209
-PartsSupplier pg_catalog pg_proc proretset 3 <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:e0244e1d-431c-4!
1fa-8194-1e357e2b688b <null> 207
-PartsSupplier pg_catalog pg_proc prorettype 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:9fb5a34a-3a7e-4!
d38-b7cd-239f28a3504e <null> 208
-PartsSupplier pg_catalog pg_class relam 5 <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:c2f92b1a-6ba0-4!
486-8936-f5185d926178 <null> 171
-PartsSupplier pg_catalog pg_class relhasoids 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:3ac5a14a-1f9e-4!
55b-8ea1-cf0878774fd7 <null> 175
-PartsSupplier pg_catalog pg_class relhasrules 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:6c26fd66-2a4a-4!
ccf-949a-a06a858db7f6 <null> 174
-PartsSupplier pg_catalog pg_class relkind 4 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:ef4359eb-6d51-4!
249-bfea-40bc0f407d10 <null> 170
-PartsSupplier pg_catalog pg_class relname 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:5f9b50fa-8188-4!
048-93c2-3ad1587915df <null> 168
-PartsSupplier pg_catalog matpg_relatt relname 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:ffbf69c1-2e34-4!
764-a9b3-9a1b61bfd4af <null> 244
-PartsSupplier pg_catalog pg_class relnamespace 3 <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:4591ef08-bff8-4!
f3b-9de7-420f9c7f9d2b <null> 169
-PartsSupplier pg_catalog pg_class relpages 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:44dee7d6-b6ae-4!
4c7-85f2-e87364d8d059 <null> 173
-PartsSupplier pg_catalog pg_class reltuples 6 <null> float 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Float 0 0 0 mmuid:b9ed4b49-5a7b-4!
ba4-863a-37fd95b2a34c <null> 172
+PartsSupplier pg_catalog pg_database datacl 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:8b993c11-de2b-4!
8bc-beb1-3e44c46811b4 <null> 208
+PartsSupplier pg_catalog pg_database datallowconn 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:5c9d54b2-433f-4!
43a-85ce-821f42ed109e <null> 206
+PartsSupplier pg_catalog pg_database datconfig 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:4b5beb14-03a0-4!
652-9d6f-5f8cc74d470c <null> 207
+PartsSupplier pg_catalog pg_database datdba 8 <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:36db343d-e99a-4!
27c-a4e2-763a720ce4a4 <null> 209
+PartsSupplier pg_catalog pg_database datlastsysoid 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:c2bdf40c-ec58-4!
39c-a403-7adf604ceadd <null> 205
+PartsSupplier pg_catalog pg_database datname 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:1aedd02c-5801-4!
1e7-accd-da1f257c26e8 <null> 203
+PartsSupplier pg_catalog pg_database dattablespace 9 <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:28d034eb-6f39-4!
02f-b642-9c9560e57247 <null> 210
+PartsSupplier pg_catalog pg_database encoding 3 <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:3b621b25-171c-4!
05b-8bf9-635cf93f2273 <null> 204
+PartsSupplier pg_catalog pg_index indexprs 7 <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:1e6dbecd-9a2d-4!
aef-afbe-665de7acb9d6 <null> 217
+PartsSupplier pg_catalog pg_index indexrelid 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:8709e084-48df-4!
17d-b3f8-f4e9b7d8802b <null> 212
+PartsSupplier pg_catalog pg_index indisclustered 4 <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:9f873e0f-903d-4!
c9d-8c37-1073b5ec4c67 <null> 214
+PartsSupplier pg_catalog pg_index indisprimary 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:9ea3b6d2-b27b-4!
bb1-a99d-b703c3308384 <null> 216
+PartsSupplier pg_catalog pg_index indisunique 5 <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:a52c714d-dfe9-4!
06c-906b-fadd53ac4e98 <null> 215
+PartsSupplier pg_catalog pg_index indkey 8 <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:347ec08c-6b41-4!
1d0-8475-031ce7d99ac0 <null> 218
+PartsSupplier pg_catalog pg_index indrelid 3 <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:16998907-e1dd-4!
47e-898d-780994d30619 <null> 213
+PartsSupplier pg_catalog matpg_datatype name 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:b4e04928-9a59-4!
718-a7f1-3a60bcae7449 <null> 167
+PartsSupplier pg_catalog matpg_relatt nspname 5 <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:f1998229-2c1a-4!
7b7-8f46-9dda81446db6 <null> 174
+PartsSupplier pg_catalog pg_namespace nspname 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:0e513513-b35a-4!
8be-975d-5dbed6ace7e9 <null> 220
+PartsSupplier pg_catalog matpg_datatype oid 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:053375a4-3971-4!
705-9146-9ecc640022c2 <null> 165
+PartsSupplier pg_catalog pg_am oid 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:3c67619c-7d8f-4!
378-b7e9-84a0451ea5e5 <null> 177
+PartsSupplier pg_catalog pg_attribute oid 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:f735e545-a81c-4!
ee2-84d0-3ea35d4083a2 <null> 183
+PartsSupplier pg_catalog pg_class oid 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:c1e736ac-c9d4-4!
026-8904-23c90e6eb1c0 <null> 193
+PartsSupplier pg_catalog pg_database oid 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:689cde3b-a631-4!
f25-94b4-ff2ffe022b0f <null> 202
+PartsSupplier pg_catalog pg_index oid 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:83ae2247-7eec-4!
59f-b037-ffd3cdca0627 <null> 211
+PartsSupplier pg_catalog pg_namespace oid 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:688e5112-4083-4!
b67-b42c-62d9a614c59a <null> 219
+PartsSupplier pg_catalog pg_proc oid 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:bdf3ee1e-b5b7-4!
8ab-b43c-4bbb2c8ae1e2 <null> 221
+PartsSupplier pg_catalog pg_trigger oid 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:635b6634-632c-4!
3c9-8cc7-bcaa016133e8 <null> 231
+PartsSupplier pg_catalog pg_type oid 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:b6f64d16-b147-4!
59d-8e84-1bd3048fb900 <null> 240
+PartsSupplier pg_catalog pg_user oid 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:bb78401d-d10c-4!
3b1-af84-e4fa6b95db42 <null> 249
+PartsSupplier pg_catalog pg_proc proallargtypes 9 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:a385751f-a31a-4!
d5d-9197-3fbd390b0251 <null> 229
+PartsSupplier pg_catalog pg_proc proargmodes 8 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:bcbed548-176c-4!
116-a5d6-7638cb0206e1 <null> 228
+PartsSupplier pg_catalog pg_proc proargnames 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:d9f36bdc-7b25-4!
af0-b9f5-a96aac6d3094 <null> 227
+PartsSupplier pg_catalog pg_proc proargtypes 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:ffa4ac73-b549-4!
70e-931f-dc36330cb8c4 <null> 226
+PartsSupplier pg_catalog pg_proc proname 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:b288b3aa-37f2-4!
a8e-8b1b-e932a2ce3e25 <null> 222
+PartsSupplier pg_catalog pg_proc pronamespace 10 <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:e5715456-245f-4!
846-b90b-01d06d1c3672 <null> 230
+PartsSupplier pg_catalog pg_proc pronargs 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:6796c2e7-48a4-4!
f9f-bc98-d47913e2491c <null> 225
+PartsSupplier pg_catalog pg_proc proretset 3 <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:e0244e1d-431c-4!
1fa-8194-1e357e2b688b <null> 223
+PartsSupplier pg_catalog pg_proc prorettype 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:9fb5a34a-3a7e-4!
d38-b7cd-239f28a3504e <null> 224
+PartsSupplier pg_catalog pg_class relam 5 <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:c2f92b1a-6ba0-4!
486-8936-f5185d926178 <null> 197
+PartsSupplier pg_catalog pg_class relhasoids 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:3ac5a14a-1f9e-4!
55b-8ea1-cf0878774fd7 <null> 201
+PartsSupplier pg_catalog pg_class relhasrules 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:6c26fd66-2a4a-4!
ccf-949a-a06a858db7f6 <null> 200
+PartsSupplier pg_catalog pg_class relkind 4 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:ef4359eb-6d51-4!
249-bfea-40bc0f407d10 <null> 196
+PartsSupplier pg_catalog matpg_relatt relname 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:ffbf69c1-2e34-4!
764-a9b3-9a1b61bfd4af <null> 173
+PartsSupplier pg_catalog pg_class relname 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:5f9b50fa-8188-4!
048-93c2-3ad1587915df <null> 194
+PartsSupplier pg_catalog pg_class relnamespace 3 <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:4591ef08-bff8-4!
f3b-9de7-420f9c7f9d2b <null> 195
+PartsSupplier pg_catalog pg_class relpages 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:44dee7d6-b6ae-4!
4c7-85f2-e87364d8d059 <null> 199
+PartsSupplier pg_catalog pg_class reltuples 6 <null> float 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Float 0 0 0 mmuid:b9ed4b49-5a7b-4!
ba4-863a-37fd95b2a34c <null> 198
PartsSupplier SYSADMIN VDBResources resourcePath 1 <null> string 0 255 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:b1bc5150-3dcc-!
452e-9e75-4a506997f612 <null> 27
-PartsSupplier pg_catalog pg_trigger tgargs 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:0c20dbe7-5d89-4!
11f-a8ab-3d77b999595b <null> 218
-PartsSupplier pg_catalog pg_trigger tgconstrname 8 <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:c010d12f-2074-4!
5db-8e18-979cee2c45da <null> 222
-PartsSupplier pg_catalog pg_trigger tgconstrrelid 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:64977f3e-f2a0-4!
66e-a5d1-80bb058cbe08 <null> 216
-PartsSupplier pg_catalog pg_trigger tgdeferrable 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:bfbff036-caf2-4!
652-80cf-398af17ed7d1 <null> 220
-PartsSupplier pg_catalog pg_trigger tgfoid 3 <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:250d7c06-728a-4!
b2a-b557-91f2a69bb184 <null> 217
-PartsSupplier pg_catalog pg_trigger tginitdeferred 7 <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:da4b59ca-ebff-4!
5a8-ad68-9777bc587813 <null> 221
-PartsSupplier pg_catalog pg_trigger tgnargs 5 <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:d70f020b-658c-4!
f58-86dc-0fbb12e2d8af <null> 219
-PartsSupplier pg_catalog pg_trigger tgrelid 9 <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:71091853-c65e-4!
6a9-9947-aa024f806e2d <null> 223
-PartsSupplier pg_catalog pg_type typbasetype 6 <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:a17d2f61-cd68-4!
c0d-8d25-132f68eb3b67 <null> 191
-PartsSupplier pg_catalog pg_type typelem 9 <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:22ac431d-e6e6-4!
eef-9d74-b31795424e97 <null> 194
-PartsSupplier pg_catalog pg_type typlen 4 <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:931c09e1-937a-4!
37e-aab2-2360f8d90e2b <null> 189
-PartsSupplier pg_catalog matpg_datatype typlen 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:0e9c4439-48d0-4!
115-a343-5baab7a236b6 <null> 252
-PartsSupplier pg_catalog pg_type typname 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:d600d818-2aad-4!
c92-9343-267d044dd97d <null> 187
-PartsSupplier pg_catalog matpg_datatype typname 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:0f312b3c-98ca-4!
a09-81fa-f1ff83f0a6c1 <null> 249
-PartsSupplier pg_catalog pg_type typnamespace 3 <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:e47217d2-2b07-4!
353-bfbd-d7c883a5e7e0 <null> 188
-PartsSupplier pg_catalog matpg_relatt typoid 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:595a823f-cec1-4!
2dc-b8b2-c95c8b4e4e66 <null> 247
-PartsSupplier pg_catalog pg_type typrelid 8 <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:bec25882-b292-4!
ed1-a610-cad5d504837d <null> 193
-PartsSupplier pg_catalog pg_type typtype 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:83199eba-7af4-4!
4a9-822f-006677b1b895 <null> 190
-PartsSupplier pg_catalog pg_type typtypmod 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:cee3559d-1ce6-4!
b17-ad57-2ecb79a9e1d2 <null> 192
-PartsSupplier pg_catalog matpg_datatype uid 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:87826ebc-98a5-4!
f19-a6d8-6b7b96cbed48 <null> 251
-PartsSupplier pg_catalog pg_user usecreatedb 3 <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:6da98878-b46e-4!
ed1-b032-1bc72da595f4 <null> 239
-PartsSupplier pg_catalog pg_user usename 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:236445e1-408c-4!
0a1-a61c-40e96fb5dc9f <null> 238
-PartsSupplier pg_catalog pg_user usesuper 4 <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:9bfddc66-af75-4!
366-8eac-b9fef3421219 <null> 240
+PartsSupplier pg_catalog pg_trigger tgargs 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:0c20dbe7-5d89-4!
11f-a8ab-3d77b999595b <null> 234
+PartsSupplier pg_catalog pg_trigger tgconstrname 8 <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:c010d12f-2074-4!
5db-8e18-979cee2c45da <null> 238
+PartsSupplier pg_catalog pg_trigger tgconstrrelid 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:64977f3e-f2a0-4!
66e-a5d1-80bb058cbe08 <null> 232
+PartsSupplier pg_catalog pg_trigger tgdeferrable 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:bfbff036-caf2-4!
652-80cf-398af17ed7d1 <null> 236
+PartsSupplier pg_catalog pg_trigger tgfoid 3 <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:250d7c06-728a-4!
b2a-b557-91f2a69bb184 <null> 233
+PartsSupplier pg_catalog pg_trigger tginitdeferred 7 <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:da4b59ca-ebff-4!
5a8-ad68-9777bc587813 <null> 237
+PartsSupplier pg_catalog pg_trigger tgnargs 5 <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:d70f020b-658c-4!
f58-86dc-0fbb12e2d8af <null> 235
+PartsSupplier pg_catalog pg_trigger tgrelid 9 <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:71091853-c65e-4!
6a9-9947-aa024f806e2d <null> 239
+PartsSupplier pg_catalog pg_type typbasetype 6 <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:a17d2f61-cd68-4!
c0d-8d25-132f68eb3b67 <null> 245
+PartsSupplier pg_catalog pg_type typelem 9 <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:22ac431d-e6e6-4!
eef-9d74-b31795424e97 <null> 248
+PartsSupplier pg_catalog matpg_datatype typlen 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:0e9c4439-48d0-4!
115-a343-5baab7a236b6 <null> 169
+PartsSupplier pg_catalog pg_type typlen 4 <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:931c09e1-937a-4!
37e-aab2-2360f8d90e2b <null> 243
+PartsSupplier pg_catalog matpg_datatype typname 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:0f312b3c-98ca-4!
a09-81fa-f1ff83f0a6c1 <null> 166
+PartsSupplier pg_catalog pg_type typname 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:d600d818-2aad-4!
c92-9343-267d044dd97d <null> 241
+PartsSupplier pg_catalog pg_type typnamespace 3 <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:e47217d2-2b07-4!
353-bfbd-d7c883a5e7e0 <null> 242
+PartsSupplier pg_catalog matpg_relatt typoid 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:595a823f-cec1-4!
2dc-b8b2-c95c8b4e4e66 <null> 176
+PartsSupplier pg_catalog pg_type typrelid 8 <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:bec25882-b292-4!
ed1-a610-cad5d504837d <null> 247
+PartsSupplier pg_catalog pg_type typtype 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:83199eba-7af4-4!
4a9-822f-006677b1b895 <null> 244
+PartsSupplier pg_catalog pg_type typtypmod 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:cee3559d-1ce6-4!
b17-ad57-2ecb79a9e1d2 <null> 246
+PartsSupplier pg_catalog matpg_datatype uid 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:87826ebc-98a5-4!
f19-a6d8-6b7b96cbed48 <null> 168
+PartsSupplier pg_catalog pg_user usecreatedb 3 <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:6da98878-b46e-4!
ed1-b032-1bc72da595f4 <null> 251
+PartsSupplier pg_catalog pg_user usename 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:236445e1-408c-4!
0a1-a61c-40e96fb5dc9f <null> 250
+PartsSupplier pg_catalog pg_user usesuper 4 <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:9bfddc66-af75-4!
366-8eac-b9fef3421219 <null> 252
Row Count : 252
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String VDBName string SYS Columns 255 255 0 false false false false 0 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeyColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeyColumns.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeyColumns.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1,27 +1,27 @@
string string string string string string string string integer integer
VDBName SchemaName TableName Name KeyName KeyType RefKeyUID UID Position OID
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID FK_SPLIER_PRTS_PRTS Foreign mmuuid:07db4240-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c0-73ff-1edc-a81c-ecf397b10590 1 6
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID FK_SPLIER_PRTS_PRTS Foreign mmuuid:07db4240-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c0-73ff-1edc-a81c-ecf397b10590 1 8
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_ID PK_PARTS Primary <null> mmuuid:07db4240-73ff-1edc-a81c-ecf397b10590 1 1
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID PK_SUPPLIER_PARTS Primary <null> mmuuid:455e5440-73ff-1edc-a81c-ecf397b10590 2 5
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID PK_SUPPLIER_PARTS Primary <null> mmuuid:455e5440-73ff-1edc-a81c-ecf397b10590 2 7
PartsSupplier PartsSupplier PARTSSUPPLIER.SHIP_VIA SHIPPER_ID PK_SHIP_VIA Primary <null> mmuuid:18aa3cc0-73ff-1edc-a81c-ecf397b10590 1 2
PartsSupplier PartsSupplier PARTSSUPPLIER.STATUS STATUS_ID PK_STATUS Primary <null> mmuuid:25a8a740-73ff-1edc-a81c-ecf397b10590 1 3
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID FK_SPLY_PRTS_SPLY Foreign mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c1-73ff-1edc-a81c-ecf397b10590 1 7
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_ID PK_SUPPLIER Primary <null> mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 1 8
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID PK_SUPPLIER_PARTS Primary <null> mmuuid:455e5440-73ff-1edc-a81c-ecf397b10590 1 4
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_STATUS FK_SPLIER_STATS Foreign mmuuid:25a8a740-73ff-1edc-a81c-ecf397b10590 mmuuid:5ac43c00-73ff-1edc-a81c-ecf397b10590 1 9
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID FK_SPLY_PRTS_SPLY Foreign mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c1-73ff-1edc-a81c-ecf397b10590 1 9
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_ID PK_SUPPLIER Primary <null> mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 1 4
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS SUPPLIER_ID PK_SUPPLIER_PARTS Primary <null> mmuuid:455e5440-73ff-1edc-a81c-ecf397b10590 1 6
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER SUPPLIER_STATUS FK_SPLIER_STATS Foreign mmuuid:25a8a740-73ff-1edc-a81c-ecf397b10590 mmuuid:5ac43c00-73ff-1edc-a81c-ecf397b10590 1 5
PartsSupplier pg_catalog matpg_relatt attname pk_matpg_relatt_names Primary <null> mmuid:559efade-b320-49bd-8524-1d325ae11c82 1 14
PartsSupplier pg_catalog matpg_relatt attnum idx_matpg_relatt_ids Index <null> mmuid:349f0c8c-7c64-4e0a-a84a-aee3deaf83af 2 18
PartsSupplier pg_catalog matpg_relatt attrelid idx_matpg_relatt_ids Index <null> mmuid:349f0c8c-7c64-4e0a-a84a-aee3deaf83af 1 17
-PartsSupplier pg_catalog matpg_datatype name matpg_datatype_names Primary <null> mmuid:eda814fb-0a5a-4fbf-87bc-b57952292038 2 20
+PartsSupplier pg_catalog matpg_datatype name matpg_datatype_names Primary <null> mmuid:eda814fb-0a5a-4fbf-87bc-b57952292038 2 11
PartsSupplier pg_catalog matpg_relatt nspname pk_matpg_relatt_names Primary <null> mmuid:559efade-b320-49bd-8524-1d325ae11c82 3 16
-PartsSupplier pg_catalog matpg_datatype oid matpg_datatype_ids Index <null> mmuid:443a2ab3-8257-4c4c-838e-9a47deaf4cf9 2 22
-PartsSupplier pg_catalog matpg_datatype oid matpg_datatype_names Primary <null> mmuid:eda814fb-0a5a-4fbf-87bc-b57952292038 1 19
-PartsSupplier pg_catalog pg_attribute oid pk_pg_attr Primary <null> mmuid:649c1635-60ad-4c28-9b20-035c562bb1be 1 11
-PartsSupplier pg_catalog pg_class oid pk_pg_class Primary <null> mmuid:59f7dc95-95fe-4d90-9813-1a097188e768 1 10
-PartsSupplier pg_catalog pg_index oid pk_pg_index Primary <null> mmuid:1462b28e-0bab-436f-9654-013821506337 1 12
-PartsSupplier pg_catalog pg_proc oid pk_pg_proc Primary <null> mmuid:9569efdb-21b2-4b4f-a2db-e7406267b8ed 1 13
+PartsSupplier pg_catalog matpg_datatype oid matpg_datatype_ids Index <null> mmuid:443a2ab3-8257-4c4c-838e-9a47deaf4cf9 2 13
+PartsSupplier pg_catalog matpg_datatype oid matpg_datatype_names Primary <null> mmuid:eda814fb-0a5a-4fbf-87bc-b57952292038 1 10
+PartsSupplier pg_catalog pg_attribute oid pk_pg_attr Primary <null> mmuid:649c1635-60ad-4c28-9b20-035c562bb1be 1 19
+PartsSupplier pg_catalog pg_class oid pk_pg_class Primary <null> mmuid:59f7dc95-95fe-4d90-9813-1a097188e768 1 20
+PartsSupplier pg_catalog pg_index oid pk_pg_index Primary <null> mmuid:1462b28e-0bab-436f-9654-013821506337 1 21
+PartsSupplier pg_catalog pg_proc oid pk_pg_proc Primary <null> mmuid:9569efdb-21b2-4b4f-a2db-e7406267b8ed 1 22
PartsSupplier pg_catalog matpg_relatt relname pk_matpg_relatt_names Primary <null> mmuid:559efade-b320-49bd-8524-1d325ae11c82 2 15
-PartsSupplier pg_catalog matpg_datatype typname matpg_datatype_ids Index <null> mmuid:443a2ab3-8257-4c4c-838e-9a47deaf4cf9 1 21
+PartsSupplier pg_catalog matpg_datatype typname matpg_datatype_ids Index <null> mmuid:443a2ab3-8257-4c4c-838e-9a47deaf4cf9 1 12
Row Count : 22
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String VDBName string SYS KeyColumns 255 255 0 false false false false 0 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeys.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeys.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testKeys.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1,21 +1,21 @@
string string string string string string string boolean string string integer
VDBName SchemaName TableName Name Description NameInSource Type IsIndexed RefKeyUID UID OID
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS FK_SPLIER_PRTS_PRTS <null> FK_SPLIER_PRTS_PRTS Foreign false mmuuid:07db4240-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c0-73ff-1edc-a81c-ecf397b10590 5
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER FK_SPLIER_STATS <null> FK_SPLIER_STATS Foreign false mmuuid:25a8a740-73ff-1edc-a81c-ecf397b10590 mmuuid:5ac43c00-73ff-1edc-a81c-ecf397b10590 8
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS FK_SPLY_PRTS_SPLY <null> FK_SPLY_PRTS_SPLY Foreign false mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c1-73ff-1edc-a81c-ecf397b10590 6
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS FK_SPLIER_PRTS_PRTS <null> FK_SPLIER_PRTS_PRTS Foreign false mmuuid:07db4240-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c0-73ff-1edc-a81c-ecf397b10590 7
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER FK_SPLIER_STATS <null> FK_SPLIER_STATS Foreign false mmuuid:25a8a740-73ff-1edc-a81c-ecf397b10590 mmuuid:5ac43c00-73ff-1edc-a81c-ecf397b10590 5
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS FK_SPLY_PRTS_SPLY <null> FK_SPLY_PRTS_SPLY Foreign false mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 mmuuid:66ddc4c1-73ff-1edc-a81c-ecf397b10590 8
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PK_PARTS <null> <null> Primary false <null> mmuuid:07db4240-73ff-1edc-a81c-ecf397b10590 1
PartsSupplier PartsSupplier PARTSSUPPLIER.SHIP_VIA PK_SHIP_VIA <null> <null> Primary false <null> mmuuid:18aa3cc0-73ff-1edc-a81c-ecf397b10590 2
PartsSupplier PartsSupplier PARTSSUPPLIER.STATUS PK_STATUS <null> <null> Primary false <null> mmuuid:25a8a740-73ff-1edc-a81c-ecf397b10590 3
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER PK_SUPPLIER <null> <null> Primary false <null> mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 7
-PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PK_SUPPLIER_PARTS <null> <null> Primary false <null> mmuuid:455e5440-73ff-1edc-a81c-ecf397b10590 4
-PartsSupplier pg_catalog matpg_relatt idx_matpg_relatt_ids <null> <null> Index false <null> mmuid:349f0c8c-7c64-4e0a-a84a-aee3deaf83af 14
-PartsSupplier pg_catalog matpg_datatype matpg_datatype_ids <null> <null> Index false <null> mmuid:443a2ab3-8257-4c4c-838e-9a47deaf4cf9 16
-PartsSupplier pg_catalog matpg_datatype matpg_datatype_names <null> <null> Primary false <null> mmuid:eda814fb-0a5a-4fbf-87bc-b57952292038 15
-PartsSupplier pg_catalog matpg_relatt pk_matpg_relatt_names <null> <null> Primary false <null> mmuid:559efade-b320-49bd-8524-1d325ae11c82 13
-PartsSupplier pg_catalog pg_attribute pk_pg_attr <null> <null> Primary false <null> mmuid:649c1635-60ad-4c28-9b20-035c562bb1be 10
-PartsSupplier pg_catalog pg_class pk_pg_class <null> <null> Primary false <null> mmuid:59f7dc95-95fe-4d90-9813-1a097188e768 9
-PartsSupplier pg_catalog pg_index pk_pg_index <null> <null> Primary false <null> mmuid:1462b28e-0bab-436f-9654-013821506337 11
-PartsSupplier pg_catalog pg_proc pk_pg_proc <null> <null> Primary false <null> mmuid:9569efdb-21b2-4b4f-a2db-e7406267b8ed 12
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER PK_SUPPLIER <null> <null> Primary false <null> mmuuid:375c8380-73ff-1edc-a81c-ecf397b10590 4
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PK_SUPPLIER_PARTS <null> <null> Primary false <null> mmuuid:455e5440-73ff-1edc-a81c-ecf397b10590 6
+PartsSupplier pg_catalog matpg_relatt idx_matpg_relatt_ids <null> <null> Index false <null> mmuid:349f0c8c-7c64-4e0a-a84a-aee3deaf83af 12
+PartsSupplier pg_catalog matpg_datatype matpg_datatype_ids <null> <null> Index false <null> mmuid:443a2ab3-8257-4c4c-838e-9a47deaf4cf9 10
+PartsSupplier pg_catalog matpg_datatype matpg_datatype_names <null> <null> Primary false <null> mmuid:eda814fb-0a5a-4fbf-87bc-b57952292038 9
+PartsSupplier pg_catalog matpg_relatt pk_matpg_relatt_names <null> <null> Primary false <null> mmuid:559efade-b320-49bd-8524-1d325ae11c82 11
+PartsSupplier pg_catalog pg_attribute pk_pg_attr <null> <null> Primary false <null> mmuid:649c1635-60ad-4c28-9b20-035c562bb1be 13
+PartsSupplier pg_catalog pg_class pk_pg_class <null> <null> Primary false <null> mmuid:59f7dc95-95fe-4d90-9813-1a097188e768 14
+PartsSupplier pg_catalog pg_index pk_pg_index <null> <null> Primary false <null> mmuid:1462b28e-0bab-436f-9654-013821506337 15
+PartsSupplier pg_catalog pg_proc pk_pg_proc <null> <null> Primary false <null> mmuid:9569efdb-21b2-4b4f-a2db-e7406267b8ed 16
Row Count : 16
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String VDBName string SYS Keys 255 255 0 false false false false 0 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -1,15 +1,15 @@
string string string string string integer string boolean integer integer integer integer string string string integer
VDBName SchemaName ProcedureName Name DataType Position Type Optional Precision TypeLength Scale Radix NullType UID Description OID
-PartsSupplier SYSADMIN refreshMatView Invalidate boolean 2 In false 0 0 0 10 No Nulls mmuuid:5736cfd3-750f-42d8-b083-102061e11c60 <null> 12
-PartsSupplier SYSADMIN refreshMatViewRow Key object 2 In false 0 0 0 10 No Nulls mmuuid:7af5a63b-1b91-4d1e-912e-846a7e84c579 <null> 9
+PartsSupplier SYSADMIN refreshMatView Invalidate boolean 2 In false 0 0 0 10 No Nulls mmuuid:5736cfd3-750f-42d8-b083-102061e11c60 <null> 9
+PartsSupplier SYSADMIN refreshMatViewRow Key object 2 In false 0 0 0 10 No Nulls mmuuid:7af5a63b-1b91-4d1e-912e-846a7e84c579 <null> 12
PartsSupplier SYSADMIN setProperty Name string 3 In false 0 0 0 10 No Nulls mmuuid:ea92812c-1516-4c75-b5d3-c531fdbd8475 <null> 22
PartsSupplier SYSADMIN setProperty OldValue clob 1 ReturnValue false 0 2097152 0 10 No Nulls mmuuid:48034d50-dd11-4653-aeae-b0d8d3d55656 <null> 20
-PartsSupplier SYSADMIN refreshMatViewRow RowsUpdated integer 3 ReturnValue false 0 0 0 10 No Nulls mmuuid:05a6a9be-c014-4d06-bcac-746cee4f118b <null> 10
-PartsSupplier SYSADMIN refreshMatView RowsUpdated integer 3 ReturnValue false 0 0 0 10 No Nulls mmuuid:d07a6a75-aa12-4dac-8eab-b2acdbaaffd8 <null> 13
+PartsSupplier SYSADMIN refreshMatView RowsUpdated integer 3 ReturnValue false 0 0 0 10 No Nulls mmuuid:d07a6a75-aa12-4dac-8eab-b2acdbaaffd8 <null> 10
+PartsSupplier SYSADMIN refreshMatViewRow RowsUpdated integer 3 ReturnValue false 0 0 0 10 No Nulls mmuuid:05a6a9be-c014-4d06-bcac-746cee4f118b <null> 13
PartsSupplier SYSADMIN setProperty UID string 2 In false 0 50 0 10 No Nulls mmuuid:d377510e-2ec5-445e-bdf0-59c7c0380962 <null> 21
PartsSupplier SYSADMIN setProperty Value clob 4 In false 0 2097152 0 10 Nullable mmuuid:ac5beeb8-2d0d-48ff-a533-4237d53b67e8 <null> 23
-PartsSupplier SYSADMIN refreshMatViewRow ViewName string 1 In false 0 0 0 10 No Nulls mmuuid:ba635c44-a052-496d-9c35-ca010c0ebebe <null> 8
-PartsSupplier SYSADMIN refreshMatView ViewName string 1 In false 0 0 0 10 No Nulls mmuuid:e0c28e00-d987-48e4-8c60-5f637f10bf33 <null> 11
+PartsSupplier SYSADMIN refreshMatView ViewName string 1 In false 0 0 0 10 No Nulls mmuuid:e0c28e00-d987-48e4-8c60-5f637f10bf33 <null> 8
+PartsSupplier SYSADMIN refreshMatViewRow ViewName string 1 In false 0 0 0 10 No Nulls mmuuid:ba635c44-a052-496d-9c35-ca010c0ebebe <null> 11
PartsSupplier SYSADMIN setTableStats cardinality integer 2 In false 0 0 0 10 No Nulls mmuuid:0aba7849-7fd3-4bc6-a3d3-dfe433bc67a4 <null> 25
PartsSupplier SYSADMIN setColumnStats columnName string 2 In false 0 0 0 10 No Nulls mmuuid:76553706-632f-4e60-8489-9d0361f58541 <null> 15
PartsSupplier SYSADMIN isLoggable context string 3 In false 0 0 0 10 No Nulls mmuuid:d62e3ceb-8e58-4c22-96b7-d76ee923e180 <null> 3
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -3,8 +3,8 @@
PartsSupplier SYS getXMLSchemas <null> true mmuuid:68497bd9-30f5-461b-bf13-6b26aeb2fc4f <null> 8
PartsSupplier SYSADMIN isLoggable <null> false mmuuid:36769e93-4cc3-417b-853e-5ee5e6653d01 <null> 1
PartsSupplier SYSADMIN logMsg <null> false mmuuid:9a754e95-853b-40b2-a085-56d57f45953d <null> 2
-PartsSupplier SYSADMIN refreshMatView <null> false mmuuid:52178344-dca8-4c76-8549-00a4515c7044 <null> 4
-PartsSupplier SYSADMIN refreshMatViewRow <null> false mmuuid:1674912b-af56-465a-a1b9-d1de8b761f10 <null> 3
+PartsSupplier SYSADMIN refreshMatView <null> false mmuuid:52178344-dca8-4c76-8549-00a4515c7044 <null> 3
+PartsSupplier SYSADMIN refreshMatViewRow <null> false mmuuid:1674912b-af56-465a-a1b9-d1de8b761f10 <null> 4
PartsSupplier SYSADMIN setColumnStats <null> false mmuuid:49c367be-918f-43be-8b9e-99e275179859 <null> 5
PartsSupplier SYSADMIN setProperty <null> false mmuuid:8db9b08e-3d6e-415a-9ceb-3fef726f424c <null> 6
PartsSupplier SYSADMIN setTableStats <null> false mmuuid:6d167c35-04d1-41f6-83ff-888c39423823 <null> 7
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testTables.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testTables.expected 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testTables.expected 2011-12-14 22:19:17 UTC (rev 3740)
@@ -8,8 +8,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 Table SUPPLIER true true mmuuid:2c371ec0-73ff-1edc-a81c-ecf397b10590 16 <null> false false 5
-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 4
+PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS Table SUPPLIER_PARTS true true mmuuid:3deafb00-73ff-1edc-a81c-ecf397b10590 227 <null> false false 5
PartsSupplier SYS ProcedureParams Table <null> true false mmuuid:a56bd7fe-c87a-411c-8f5d-661975a25626 -1 <null> true false 12
PartsSupplier SYS Procedures Table <null> true false mmuuid:0bc132a5-9f8d-4a3c-9f5d-98156a98a962 -1 <null> true false 13
PartsSupplier SYS Properties Table <null> true false mmuuid:7a45e50a-d03f-4548-ba35-761651bbca85 -1 <null> true false 14
@@ -18,19 +18,19 @@
PartsSupplier SYS Tables Table <null> true false mmuuid:8551b3bd-11cc-4049-9bcf-fe91a0eb7ba7 -1 <null> true false 17
PartsSupplier SYSADMIN VDBResources Table <null> true false mmuuid:1785804d-beaf-4831-9531-e59164fedd49 -1 <null> true false 7
PartsSupplier SYS VirtualDatabases Table <null> true false mmuuid:47297c72-d621-4f4e-af4e-74060ac5f489 -1 <null> true false 18
-PartsSupplier pg_catalog matpg_datatype Table <null> false false mmuid:17448311-6679-4dfd-aeb6-4aabbd894729 -1 <null> true true 31
-PartsSupplier pg_catalog matpg_relatt Table <null> false false mmuid:8c0714d6-1c72-40b4-8528-3b2c63059107 -1 <null> true true 30
-PartsSupplier pg_catalog pg_am Table <null> false false mmuid:f6517a63-8c14-4b73-a18d-afaa5dfb35d9 -1 <null> true false 24
-PartsSupplier pg_catalog pg_attrdef Table <null> false false mmuid:76a7dd05-9a7d-4243-b561-f3056500dcaf -1 <null> true false 27
-PartsSupplier pg_catalog pg_attribute Table <null> false false mmuid:fa463d98-365f-489a-a707-025193cb51eb -1 <null> true true 21
-PartsSupplier pg_catalog pg_class Table <null> false false mmuid:7e21f2e6-06e3-4bca-9b01-72ea47821560 -1 <null> true true 20
-PartsSupplier pg_catalog pg_database Table <null> false false mmuid:382f9fc9-8c96-4df7-ab5d-04dfb47ee142 -1 <null> true false 28
-PartsSupplier pg_catalog pg_index Table <null> false false mmuid:09daed8d-b0b8-4552-a261-2b6c775b46b0 -1 <null> true true 23
-PartsSupplier pg_catalog pg_namespace Table <null> false false mmuid:6609866a-3d7b-4f4b-95fe-ebfac769d699 -1 <null> true false 19
-PartsSupplier pg_catalog pg_proc Table <null> false false mmuid:f20c9489-10ca-4596-8a37-24218b67f764 -1 <null> true true 25
-PartsSupplier pg_catalog pg_trigger Table <null> false false mmuid:2b75f0b1-7475-4ed5-9da3-d37a8a25f26a -1 <null> true false 26
-PartsSupplier pg_catalog pg_type Table <null> false false mmuid:9462e3f8-cd3c-414f-a570-f6f33c40e36a -1 <null> true false 22
-PartsSupplier pg_catalog pg_user Table <null> false false mmuid:e63613cb-01ee-4b37-8b91-99d1aac4dfcb -1 <null> true false 29
+PartsSupplier pg_catalog matpg_datatype Table <null> false false mmuid:17448311-6679-4dfd-aeb6-4aabbd894729 -1 <null> true true 19
+PartsSupplier pg_catalog matpg_relatt Table <null> false false mmuid:8c0714d6-1c72-40b4-8528-3b2c63059107 -1 <null> true true 20
+PartsSupplier pg_catalog pg_am Table <null> false false mmuid:f6517a63-8c14-4b73-a18d-afaa5dfb35d9 -1 <null> true false 21
+PartsSupplier pg_catalog pg_attrdef Table <null> false false mmuid:76a7dd05-9a7d-4243-b561-f3056500dcaf -1 <null> true false 22
+PartsSupplier pg_catalog pg_attribute Table <null> false false mmuid:fa463d98-365f-489a-a707-025193cb51eb -1 <null> true true 23
+PartsSupplier pg_catalog pg_class Table <null> false false mmuid:7e21f2e6-06e3-4bca-9b01-72ea47821560 -1 <null> true true 24
+PartsSupplier pg_catalog pg_database Table <null> false false mmuid:382f9fc9-8c96-4df7-ab5d-04dfb47ee142 -1 <null> true false 25
+PartsSupplier pg_catalog pg_index Table <null> false false mmuid:09daed8d-b0b8-4552-a261-2b6c775b46b0 -1 <null> true true 26
+PartsSupplier pg_catalog pg_namespace Table <null> false false mmuid:6609866a-3d7b-4f4b-95fe-ebfac769d699 -1 <null> true false 27
+PartsSupplier pg_catalog pg_proc Table <null> false false mmuid:f20c9489-10ca-4596-8a37-24218b67f764 -1 <null> true true 28
+PartsSupplier pg_catalog pg_trigger Table <null> false false mmuid:2b75f0b1-7475-4ed5-9da3-d37a8a25f26a -1 <null> true false 29
+PartsSupplier pg_catalog pg_type Table <null> false false mmuid:9462e3f8-cd3c-414f-a570-f6f33c40e36a -1 <null> true false 30
+PartsSupplier 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 PartsSupplier java.lang.String VDBName string SYS Tables 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/db/src/main/java/org/teiid/test/client/ctc/QueryResults.java
===================================================================
--- trunk/test-integration/db/src/main/java/org/teiid/test/client/ctc/QueryResults.java 2011-12-14 18:56:43 UTC (rev 3739)
+++ trunk/test-integration/db/src/main/java/org/teiid/test/client/ctc/QueryResults.java 2011-12-14 22:19:17 UTC (rev 3740)
@@ -36,8 +36,9 @@
import org.teiid.core.types.DataTypeManager;
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;
@@ -482,8 +483,8 @@
List infos = new ArrayList(symbols.size());
Iterator iter = symbols.iterator();
while (iter.hasNext()) {
- SingleElementSymbol symbol = (SingleElementSymbol)iter.next();
- String name = symbol.getName();
+ Expression symbol = (Expression)iter.next();
+ String name = Symbol.getName(symbol);
if (symbol instanceof AliasSymbol) {
AliasSymbol alias = (AliasSymbol)symbol;
symbol = alias.getSymbol();
13 years
teiid SVN: r3739 - branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-12-14 13:56:43 -0500 (Wed, 14 Dec 2011)
New Revision: 3739
Modified:
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
Log:
TEIID-1871 fix for calling getObject returing bytes, rather than a string
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java 2011-12-14 18:54:24 UTC (rev 3738)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java 2011-12-14 18:56:43 UTC (rev 3739)
@@ -23,6 +23,7 @@
package org.teiid.translator.jdbc.mysql;
import java.sql.Blob;
+import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
@@ -90,4 +91,14 @@
return result;
}
+ @Override
+ public Object retrieveValue(CallableStatement results, int parameterIndex,
+ Class<?> expectedType) throws SQLException {
+ Object result = super.retrieveValue(results, parameterIndex, expectedType);
+ if (expectedType == TypeFacility.RUNTIME_TYPES.STRING && result instanceof Blob) {
+ return results.getString(parameterIndex);
+ }
+ return result;
+ }
+
}
13 years
teiid SVN: r3738 - branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-12-14 13:54:24 -0500 (Wed, 14 Dec 2011)
New Revision: 3738
Modified:
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
Log:
TEIID-1871 fix for calling getObject returing bytes, rather than a string
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java 2011-12-14 16:57:03 UTC (rev 3737)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java 2011-12-14 18:54:24 UTC (rev 3738)
@@ -22,6 +22,9 @@
package org.teiid.translator.jdbc.mysql;
+import java.sql.Blob;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -30,6 +33,7 @@
import org.teiid.translator.SourceSystemFunctions;
import org.teiid.translator.Translator;
import org.teiid.translator.TranslatorException;
+import org.teiid.translator.TypeFacility;
import org.teiid.translator.jdbc.FunctionModifier;
@Translator(name="mysql5", description="A translator for open source MySQL5 Database")
@@ -75,5 +79,15 @@
public String getLikeRegexString() {
return "REGEXP"; //$NON-NLS-1$
}
-
+
+ @Override
+ public Object retrieveValue(ResultSet results, int columnIndex,
+ Class<?> expectedType) throws SQLException {
+ Object result = super.retrieveValue(results, columnIndex, expectedType);
+ if (expectedType == TypeFacility.RUNTIME_TYPES.STRING && result instanceof Blob) {
+ return results.getString(columnIndex);
+ }
+ return result;
+ }
+
}
13 years
teiid SVN: r3737 - in branches/7.6.x: documentation/reference/src/main/docbook/en-US/content and 2 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-12-14 11:57:03 -0500 (Wed, 14 Dec 2011)
New Revision: 3737
Modified:
branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html
branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
branches/7.6.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
branches/7.6.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
Log:
TEIID-1869 fix for decodeinteger. and deprecating the decode functions
Modified: branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html 2011-12-13 19:07:25 UTC (rev 3736)
+++ branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html 2011-12-14 16:57:03 UTC (rev 3737)
@@ -53,6 +53,7 @@
<li>TRANSLATE/HAS CRITERIA has been deprecated. INSTEAD OF trigger actions should be used instead.
<li>Support for named parameter syntax using param=value has been deprecated, since it is ambiguous with a comparison predicate boolean value expression. param<b>=></b>value should be used instead.
<li>Support for using the FROM clause post item hints MAKEDEP/MAKENOTDEP has been deprecated. Use the pre item comment hint syntax instead, e.g. /*+ MAKEDEP */ tbl
+ <li>decodeinteger/decodestring have been deprecated. A CASE expression should be used instead.
</ul>
<h4>from 7.5</h4>
Modified: branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
===================================================================
--- branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml 2011-12-13 19:07:25 UTC (rev 3736)
+++ branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml 2011-12-14 16:57:03 UTC (rev 3737)
@@ -1716,24 +1716,16 @@
<tbody>
<row>
<entry>
- <para>DECODESTRING(x, y)</para>
+ <para>DECODESTRING(x, y [, z])</para>
</entry>
<entry>
<para>Decode column x using string of value pairs y
- and return the decoded column as a string</para>
- </entry>
- <entry>
- <para>all string</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>DECODESTRING(x, y, z)</para>
- </entry>
- <entry>
- <para>Decode column x using string of value pairs y
- with delimiter z and return the decoded column as a string
+ with optional delimiter z and return the decoded column as a string.
+ If a delimiter is not specified , is used.
+ y has the formate SearchDelimResultDelimSearchDelimResult[DelimDefault]
+ Returns Default if specified or x if there are no matches.
</para>
+ <warning><para>Deprecated. Use a CASE expression instead.</para></warning>
</entry>
<entry>
<para>all string</para>
@@ -1741,29 +1733,21 @@
</row>
<row>
<entry>
- <para>DECODEINTEGER(x, y)</para>
+ <para>DECODEINTEGER(x, y [, z])</para>
</entry>
<entry>
<para>Decode column x using string of value pairs y
- and return the decoded column as an integer</para>
+ with optional delimiter z and return the decoded column as an
+ integer. If a delimiter is not specified , is used.
+ y has the formate SearchDelimResultDelimSearchDelimResult[DelimDefault]
+ Returns Default if specified or x if there are no matches.
+ </para>
+ <warning><para>Deprecated. Use a CASE expression instead.</para></warning>
</entry>
<entry>
<para>all string parameters, return integer</para>
</entry>
</row>
- <row>
- <entry>
- <para>DECODEINTEGER(x,y,z)</para>
- </entry>
- <entry>
- <para>Decode column x using string of value pairs y
- with delimiter z and return the decoded column as an
- integer</para>
- </entry>
- <entry>
- <para>all string parameters, return integer</para>
- </entry>
- </row>
</tbody>
</tgroup>
</informaltable>
Modified: branches/7.6.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- branches/7.6.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-12-13 19:07:25 UTC (rev 3736)
+++ branches/7.6.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-12-14 16:57:03 UTC (rev 3737)
@@ -53,6 +53,7 @@
import org.teiid.core.TeiidRuntimeException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.types.Transform;
+import org.teiid.core.types.DataTypeManager.DefaultDataClasses;
import org.teiid.core.util.Assertion;
import org.teiid.core.util.TimestampWithTimezone;
import org.teiid.language.SQLConstants;
@@ -2533,7 +2534,10 @@
newCaseExpr.setElseExpression(exprs[0]);
}
- newCaseExpr.setType(function.getType());
+ newCaseExpr.setType(DefaultDataClasses.STRING);
+ if (function.getName().equalsIgnoreCase(FunctionLibrary.DECODEINTEGER)) {
+ return ResolverUtil.getConversion(newCaseExpr, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, false, metadata.getFunctionLibrary());
+ }
return newCaseExpr;
}
Modified: branches/7.6.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
===================================================================
--- branches/7.6.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2011-12-13 19:07:25 UTC (rev 3736)
+++ branches/7.6.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2011-12-14 16:57:03 UTC (rev 3737)
@@ -1755,23 +1755,23 @@
}
@Test public void testDefect16879_3(){
- helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b') FROM pm1.g1", "SELECT CASE WHEN e1 = 'a' THEN 'b' ELSE e1 END FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b') FROM pm1.g1", "SELECT convert(CASE WHEN e1 = 'a' THEN 'b' ELSE e1 END, integer) FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testDefect16879_4(){
- helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b, c, d') FROM pm1.g1", "SELECT CASE WHEN e1 = 'a' THEN 'b' WHEN e1 = 'c' THEN 'd' ELSE e1 END FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b, c, d') FROM pm1.g1", "SELECT convert(CASE WHEN e1 = 'a' THEN 'b' WHEN e1 = 'c' THEN 'd' ELSE e1 END, integer) FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testDefect16879_5(){
- helpTestRewriteCommand("SELECT decodeinteger(e1, 'null, b, c, d') FROM pm1.g1", "SELECT CASE WHEN e1 IS NULL THEN 'b' WHEN e1 = 'c' THEN 'd' ELSE e1 END FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestRewriteCommand("SELECT decodeinteger(e1, 'null, b, c, d') FROM pm1.g1", "SELECT convert(CASE WHEN e1 IS NULL THEN 'b' WHEN e1 = 'c' THEN 'd' ELSE e1 END, integer) FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testDefect16879_6(){
- helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b, null, d') FROM pm1.g1", "SELECT CASE WHEN e1 = 'a' THEN 'b' WHEN e1 IS NULL THEN 'd' ELSE e1 END FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b, null, d') FROM pm1.g1", "SELECT convert(CASE WHEN e1 = 'a' THEN 'b' WHEN e1 IS NULL THEN 'd' ELSE e1 END, integer) FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testDefect16879_7(){
- helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b, null, d, e') FROM pm1.g1", "SELECT CASE WHEN e1 = 'a' THEN 'b' WHEN e1 IS NULL THEN 'd' ELSE 'e' END FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestRewriteCommand("SELECT decodeinteger(e1, 'a, b, null, d, e') FROM pm1.g1", "SELECT convert(CASE WHEN e1 = 'a' THEN 'b' WHEN e1 IS NULL THEN 'd' ELSE 'e' END, integer) FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testCaseExpressionThatResolvesToNull() {
13 years
teiid SVN: r3736 - branches/7.4.x/connectors/connector-salesforce/src/main/rar/META-INF.
by teiid-commits@lists.jboss.org
Author: jolee
Date: 2011-12-13 14:07:25 -0500 (Tue, 13 Dec 2011)
New Revision: 3736
Modified:
branches/7.4.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml
Log:
TEIID-1863: updating the protocol url for SF
Modified: branches/7.4.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml
===================================================================
--- branches/7.4.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml 2011-12-13 17:08:44 UTC (rev 3735)
+++ branches/7.4.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml 2011-12-13 19:07:25 UTC (rev 3736)
@@ -56,7 +56,7 @@
<description>{$display:"Salesforce URL",$description:"URL for connecting to Salesforce",$advanced:"true"}</description>
<config-property-name>URL</config-property-name>
<config-property-type>java.lang.String</config-property-type>
- <config-property-value>https://www.salesforce.com/services/Soap/u/17.0</config-property-value>
+ <config-property-value>https://www.salesforce.com/services/Soap/u/22.0</config-property-value>
</config-property>
<config-property>
13 years
teiid SVN: r3735 - in branches/7.4.x/connectors/translator-salesforce/src: main/java/org/teiid/translator/salesforce/execution and 3 other directories.
by teiid-commits@lists.jboss.org
Author: jolee
Date: 2011-12-13 12:08:44 -0500 (Tue, 13 Dec 2011)
New Revision: 3735
Modified:
branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Util.java
branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java
branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java
branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java
branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java
branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java
Log:
TEIID-1852 fix for a host of sf issues
Modified: branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -171,5 +171,10 @@
public boolean supportsCompareCriteriaOrdered() {
return true;
}
+
+ @Override
+ public boolean supportsIsNullCriteria() {
+ return true;
+ }
}
Modified: branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Util.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Util.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/Util.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -21,8 +21,8 @@
*/
package org.teiid.translator.salesforce;
-import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.Date;
import org.teiid.translator.TranslatorException;
@@ -56,16 +56,14 @@
}
}
- public static SimpleDateFormat getSalesforceDateTimeFormat() {
- return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); //$NON-NLS-1$
- }
+ private static String timeZone;
- public static SimpleDateFormat getTimeZoneOffsetFormat() {
- return new SimpleDateFormat("Z"); //$NON-NLS-1$
+ public static String getDefaultTimeZoneString() {
+ if (timeZone == null) {
+ String s = new SimpleDateFormat("Z").format(new Date(0)); //$NON-NLS-1$
+ timeZone = s.substring(0, 3) + ':' + s.substring(3, 5);
+ }
+ return timeZone;
}
- public static DateFormat getSalesforceDateFormat() {
- return new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$
- }
-
}
Modified: branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -21,18 +21,23 @@
*/
package org.teiid.translator.salesforce.execution;
+import java.sql.Time;
import java.sql.Timestamp;
-import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.resource.ResourceException;
+import org.teiid.core.util.TimestampWithTimezone;
import org.teiid.language.AggregateFunction;
import org.teiid.language.Join;
import org.teiid.language.QueryExpression;
@@ -51,7 +56,6 @@
import org.teiid.translator.TranslatorException;
import org.teiid.translator.salesforce.SalesForcePlugin;
import org.teiid.translator.salesforce.SalesforceConnection;
-import org.teiid.translator.salesforce.Util;
import org.teiid.translator.salesforce.execution.visitors.JoinQueryVisitor;
import org.teiid.translator.salesforce.execution.visitors.SelectVisitor;
import org.w3c.dom.Element;
@@ -63,6 +67,8 @@
public class QueryExecutionImpl implements ResultSetExecution {
+ private static final Pattern dateTimePattern = Pattern.compile("^(?:(\\d{4}-\\d{2}-\\d{2})T)?(\\d{2}:\\d{2}:\\d{2}(?:.\\d+)?)(.*)"); //$NON-NLS-1$
+
private static final String SF_ID = "sf:Id"; //$NON-NLS-1$
private static final String SF_TYPE = "sf:type"; //$NON-NLS-1$
@@ -78,7 +84,6 @@
private RuntimeMetadata metadata;
private ExecutionContext context;
-
private SelectVisitor visitor;
@@ -103,6 +108,8 @@
private int topResultIndex = 0;
+ private Calendar cal;
+
public QueryExecutionImpl(QueryExpression command, SalesforceConnection connection, RuntimeMetadata metadata, ExecutionContext context) {
this.connection = connection;
this.metadata = metadata;
@@ -355,7 +362,7 @@
}
}
- private void logFields(String sObjectName, List<Object> fields) throws TranslatorException {
+ private void logFields(String sObjectName, List<Object> fields) {
if (!LogManager.isMessageToBeRecorded(LogConstants.CTX_CONNECTOR, MessageLevel.DETAIL)) {
return;
}
@@ -369,53 +376,75 @@
}
+ /**
+ * TODO: the logic here should be aware of xsi:type information and use a standard conversion
+ * library. Conversion to teiid types should then be a secondary effort - and will be automatically handled above here.
+ */
@SuppressWarnings("unchecked")
private Object getCellDatum(Column element, Element elem) throws TranslatorException {
if(!element.getNameInSource().equals(elem.getLocalName())) {
throw new TranslatorException(SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.column.mismatch1") + element.getNameInSource() + SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.column.mismatch2") + elem.getLocalName()); //$NON-NLS-1$ //$NON-NLS-2$
}
+ if (Boolean.parseBoolean(elem.getAttribute(XSI_NIL))) {
+ return null;
+ }
String value = elem.getTextContent();
- Object result = null;
+ Object result = value;
Class type = element.getJavaType();
if(type.equals(String.class)) {
result = value;
- }
- else if (type.equals(Boolean.class)) {
- result = Boolean.valueOf(value);
- } else if (type.equals(Double.class)) {
- if (null != value) {
- if(!value.isEmpty()) {
- result = Double.valueOf(value);
+ } else if (!value.isEmpty()) {
+ result = value;
+ if (type.equals(java.sql.Timestamp.class) || type.equals(java.sql.Time.class)) {
+ if (cal == null) {
+ cal = Calendar.getInstance();
}
+ result = parseDateTime(value, type, cal);
}
- } else if (type.equals(Integer.class)) {
- if (null != value) {
- if(!value.isEmpty()) {
- result = Integer.valueOf(value);
+ }
+ return result;
+ }
+
+ static Object parseDateTime(String value, Class<?> type, Calendar cal)
+ throws TranslatorException {
+ try {
+ Matcher m = dateTimePattern.matcher(value);
+ if (m.matches()) {
+ String date = m.group(1);
+ String time = m.group(2);
+ String timeZone = m.group(3);
+ Date d = null;
+ if (date == null) {
+ //sql times don't care about fractional seconds
+ int milli = time.lastIndexOf('.');
+ if (milli > 0) {
+ time = time.substring(0, milli);
+ }
+ d = Time.valueOf(time);
+ } else {
+ d = Timestamp.valueOf(date + " " + time); //$NON-NLS-1$
}
- }
- } else if (type.equals(java.sql.Date.class)) {
- if (null != value) {
- if(!value.isEmpty()) {
- result = java.sql.Date.valueOf(value);
- }
- }
- } else if (type.equals(java.sql.Timestamp.class)) {
- if (null != value) {
- if(!value.isEmpty()) {
- try {
- Date date = Util.getSalesforceDateTimeFormat().parse(value);
- result = new Timestamp(date.getTime());
- } catch (ParseException e) {
- throw new TranslatorException(e, SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.datatime.parse") + value); //$NON-NLS-1$
+ TimeZone tz = null;
+ if (timeZone != null) {
+ if (timeZone.equals("Z")) { //$NON-NLS-1$
+ tz = TimeZone.getTimeZone("GMT"); //$NON-NLS-1$
+ } else if (timeZone.contains(":")) { //$NON-NLS-1$
+ tz = TimeZone.getTimeZone("GMT" + timeZone); //$NON-NLS-1$
+ } else {
+ //this is probably an exceptional case
+ tz = TimeZone.getTimeZone(timeZone);
}
+ cal.setTimeZone(tz);
+ } else {
+ cal = null;
}
+ return TimestampWithTimezone.create(d, TimeZone.getDefault(), cal, type);
}
- } else {
- result = value;
+ throw new TranslatorException(SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.datatime.parse") + value); //$NON-NLS-1$
+ } catch (IllegalArgumentException e) {
+ throw new TranslatorException(e, SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.datatime.parse") + value); //$NON-NLS-1$
}
- return result;
}
private boolean isSObject(Element element) {
Modified: branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/CriteriaVisitor.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -24,18 +24,21 @@
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.teiid.core.util.TimestampWithTimezone;
import org.teiid.language.AndOr;
import org.teiid.language.ColumnReference;
import org.teiid.language.Comparison;
import org.teiid.language.Expression;
import org.teiid.language.Function;
import org.teiid.language.In;
+import org.teiid.language.IsNull;
import org.teiid.language.Like;
import org.teiid.language.Literal;
import org.teiid.language.NamedTable;
@@ -80,7 +83,7 @@
protected Table table;
boolean onlyIDCriteria;
protected Boolean queryAll = Boolean.FALSE;
-
+
// support for invoking a retrieve when possible.
protected In idInCriteria = null;
@@ -98,33 +101,28 @@
@Override
public void visit( Comparison criteria ) {
- super.visit(criteria);
- try {
- addCompareCriteria(criteriaList, criteria);
- boolean isAcceptableID = (Operator.EQ == criteria.getOperator() && isIdColumn(criteria.getLeftExpression()));
- setHasCriteria(true, isAcceptableID);
- if (isAcceptableID) {
- this.idInCriteria = new In(criteria.getLeftExpression(), Arrays.asList(criteria.getRightExpression()), false);
- }
- } catch (TranslatorException e) {
- exceptions.add(e);
+ addCompareCriteria(criteria);
+ boolean isAcceptableID = (Operator.EQ == criteria.getOperator() && isIdColumn(criteria.getLeftExpression()));
+ setHasCriteria(true, isAcceptableID);
+ if (isAcceptableID) {
+ this.idInCriteria = new In(criteria.getLeftExpression(), Arrays.asList(criteria.getRightExpression()), false);
}
}
-
+
+ public void visit(IsNull obj) {
+ visit(new Comparison(obj.getExpression(), new Literal(null, obj.getExpression().getType()), obj.isNegated()?Comparison.Operator.NE:Comparison.Operator.EQ));
+ }
+
@Override
public void visit( Like criteria ) {
- try {
- if (isIdColumn(criteria.getLeftExpression())) {
- TranslatorException e = new TranslatorException(SalesForcePlugin.Util.getString("CriteriaVisitor.LIKE.not.supported.on.Id")); //$NON-NLS-1$
- exceptions.add(e);
- }
- if (isMultiSelectColumn(criteria.getLeftExpression())) {
- TranslatorException e = new TranslatorException(SalesForcePlugin.Util.getString("CriteriaVisitor.LIKE.not.supported.on.multiselect")); //$NON-NLS-1$
- exceptions.add(e);
- }
- } catch (TranslatorException e) {
+ if (isIdColumn(criteria.getLeftExpression())) {
+ TranslatorException e = new TranslatorException(SalesForcePlugin.Util.getString("CriteriaVisitor.LIKE.not.supported.on.Id")); //$NON-NLS-1$
exceptions.add(e);
}
+ if (isMultiSelectColumn(criteria.getLeftExpression())) {
+ TranslatorException e = new TranslatorException(SalesForcePlugin.Util.getString("CriteriaVisitor.LIKE.not.supported.on.multiselect")); //$NON-NLS-1$
+ exceptions.add(e);
+ }
boolean negated = criteria.isNegated();
criteria.setNegated(false);
criteriaList.add(criteria.toString());
@@ -135,7 +133,7 @@
// don't check if it's ID, Id LIKE '123%' still requires a query
setHasCriteria(true, false);
}
-
+
@Override
public void visit(AndOr obj) {
List<String> savedCriteria = new LinkedList<String>();
@@ -170,23 +168,19 @@
@Override
public void visit( In criteria ) {
- try {
- Expression lExpr = criteria.getLeftExpression();
- if (lExpr instanceof ColumnReference) {
- ColumnReference cr = (ColumnReference)lExpr;
- Column column = cr.getMetadataObject();
- if (column != null && (MULTIPICKLIST.equalsIgnoreCase(column.getNativeType()) || RESTRICTEDMULTISELECTPICKLIST.equalsIgnoreCase(column.getNativeType()))) {
- appendMultiselectIn(column, criteria);
- } else {
- appendCriteria(criteria);
- }
+ Expression lExpr = criteria.getLeftExpression();
+ if (lExpr instanceof ColumnReference) {
+ ColumnReference cr = (ColumnReference)lExpr;
+ Column column = cr.getMetadataObject();
+ if (column != null && (MULTIPICKLIST.equalsIgnoreCase(column.getNativeType()) || RESTRICTEDMULTISELECTPICKLIST.equalsIgnoreCase(column.getNativeType()))) {
+ appendMultiselectIn(column, criteria);
} else {
- appendCriteria(criteria);
+ appendCriteria(criteria);
}
- setHasCriteria(true, isIdColumn(criteria.getLeftExpression()));
- } catch (TranslatorException e) {
- exceptions.add(e);
+ } else {
+ appendCriteria(criteria);
}
+ setHasCriteria(true, isIdColumn(criteria.getLeftExpression()));
}
public void parseFunction( Function func ) {
@@ -215,7 +209,7 @@
}
private void appendMultiselectIn( Column column,
- In criteria ) throws TranslatorException {
+ In criteria ) {
StringBuffer result = new StringBuffer();
result.append(column.getNameInSource()).append(SPACE);
if (criteria.isNegated()) {
@@ -270,9 +264,8 @@
}
criterion.append(CLOSE);
}
-
- protected void addCompareCriteria( List criteriaList,
- Comparison compCriteria ) throws TranslatorException {
+
+ protected void addCompareCriteria(Comparison compCriteria ) {
Expression lExpr = compCriteria.getLeftExpression();
if (lExpr instanceof Function) {
parseFunction((Function)lExpr);
@@ -280,38 +273,13 @@
ColumnReference left = (ColumnReference)lExpr;
Column column = left.getMetadataObject();
String columnName = column.getNameInSource();
- StringBuffer queryString = new StringBuffer();
- queryString.append(column.getParent().getNameInSource());
- queryString.append('.');
- queryString.append(columnName).append(SPACE);
+ StringBuilder queryString = new StringBuilder();
+ appendColumnReference(queryString, left);
+ queryString.append(SPACE);
queryString.append(comparisonOperators.get(compCriteria.getOperator()));
queryString.append(' ');
Expression rExp = compCriteria.getRightExpression();
- if(rExp instanceof Literal) {
- Literal literal = (Literal)rExp;
- if (column.getJavaType().equals(Boolean.class)) {
- queryString.append(((Boolean)literal.getValue()).toString());
- } else if (column.getJavaType().equals(java.sql.Timestamp.class)) {
- Timestamp datetime = (java.sql.Timestamp)literal.getValue();
- String value = Util.getSalesforceDateTimeFormat().format(datetime);
- String zoneValue = Util.getTimeZoneOffsetFormat().format(datetime);
- queryString.append(value).append(zoneValue.subSequence(0, 3)).append(':').append(zoneValue.subSequence(3, 5));
- } else if (column.getJavaType().equals(java.sql.Time.class)) {
- String value = Util.getSalesforceDateTimeFormat().format((java.sql.Time)literal.getValue());
- queryString.append(value);
- } else if (column.getJavaType().equals(java.sql.Date.class)) {
- String value = Util.getSalesforceDateFormat().format((java.sql.Date)literal.getValue());
- queryString.append(value);
- } else {
- queryString.append(compCriteria.getRightExpression().toString());
- }
- } else if(rExp instanceof ColumnReference) {
- ColumnReference right = (ColumnReference)lExpr;
- column = left.getMetadataObject();
- columnName = column.getNameInSource();
- queryString.append(columnName);
- }
-
+ queryString.append(getValue(rExp, false));
criteriaList.add(queryString.toString());
if (columnName.equals("IsDeleted")) { //$NON-NLS-1$
@@ -324,56 +292,86 @@
}
}
- private void appendCriteria( In criteria ) throws TranslatorException {
+ private void appendColumnReference(StringBuilder queryString,
+ ColumnReference ref) {
+ queryString.append(ref.getMetadataObject().getParent().getNameInSource());
+ queryString.append('.');
+ queryString.append(ref.getMetadataObject().getNameInSource());
+ }
+
+ private void appendCriteria( In criteria ) {
StringBuffer queryString = new StringBuffer();
Expression leftExp = criteria.getLeftExpression();
if(isIdColumn(leftExp)) {
idInCriteria = criteria;
}
- queryString.append(getValue(leftExp));
+ queryString.append(getValue(leftExp, false));
queryString.append(' ');
if (criteria.isNegated()) {
queryString.append("NOT "); //$NON-NLS-1$
}
queryString.append("IN"); //$NON-NLS-1$
queryString.append('(');
- Column column = ((ColumnReference)criteria.getLeftExpression()).getMetadataObject();
- boolean timeColumn = isTimeColumn(column);
- boolean first = true;
- Iterator iter = criteria.getRightExpressions().iterator();
+ Iterator<Expression> iter = criteria.getRightExpressions().iterator();
while (iter.hasNext()) {
- if (!first) queryString.append(',');
- if (!timeColumn) queryString.append('\'');
- queryString.append(getValue((Expression)iter.next()));
- if (!timeColumn) queryString.append('\'');
- first = false;
+ queryString.append(getValue(iter.next(), false));
+ if (iter.hasNext()) {
+ queryString.append(',');
+ }
}
queryString.append(')');
criteriaList.add(queryString.toString());
}
-
- private boolean isTimeColumn( Column column ) throws TranslatorException {
- boolean result = false;
- if (column.getJavaType().equals(java.sql.Timestamp.class) || column.getJavaType().equals(java.sql.Time.class)
- || column.getJavaType().equals(java.sql.Date.class)) {
- result = true;
- }
- return result;
- }
-
- protected String getValue( Expression expr ) throws TranslatorException {
- String result;
+
+ protected String getValue( Expression expr, boolean raw) {
+ StringBuilder result = new StringBuilder();
if (expr instanceof ColumnReference) {
- ColumnReference element = (ColumnReference)expr;
- Column element2 = element.getMetadataObject();
- result = element2.getNameInSource();
+ appendColumnReference(result, (ColumnReference)expr);
} else if (expr instanceof Literal) {
- Literal literal = (Literal)expr;
- result = literal.getValue().toString();
+ Literal literal = (Literal)expr;
+ if (literal.getValue() == null) {
+ if (raw) {
+ return null;
+ }
+ return "NULL"; //$NON-NLS-1$
+ }
+ if (raw) {
+ return literal.getValue().toString();
+ }
+ if (literal.getValue().getClass().equals(Boolean.class)) {
+ result.append(((Boolean)literal.getValue()).toString());
+ } else if (literal.getValue().getClass().equals(java.sql.Timestamp.class)) {
+ Timestamp datetime = (java.sql.Timestamp)literal.getValue();
+ String value = datetime.toString();
+ int fractionalPlace = value.lastIndexOf('.');
+ int fractionalLength = value.length() - fractionalPlace - 1;
+ if (fractionalLength > 3) {
+ value = value.substring(0, fractionalPlace + 3);
+ } else if (fractionalLength < 3) {
+ value += "00".substring(fractionalLength - 1); //$NON-NLS-1$
+ }
+ result.append(value).setCharAt(result.length()-value.length()+10, 'T');
+ Calendar c = TimestampWithTimezone.getCalendar();
+ c.setTime(datetime);
+ int minutes = (c.get(Calendar.ZONE_OFFSET) +
+ c.get(Calendar.DST_OFFSET)) / 60000;
+ int val = minutes/60;
+ result.append(String.format("%1$+03d", val)); //$NON-NLS-1$
+ result.append(':');
+ val = minutes%60;
+ result.append(val/10);
+ result.append(val%10);
+ } else if (literal.getValue().getClass().equals(java.sql.Time.class)) {
+ result.append(literal.getValue()).append(".000").append(Util.getDefaultTimeZoneString()); //$NON-NLS-1$
+ } else if (literal.getValue().getClass().equals(java.sql.Date.class)) {
+ result.append(literal.getValue());
+ } else {
+ result.append(expr.toString());
+ }
} else {
throw new RuntimeException("unknown type in SalesforceQueryExecution.getValue(): " + expr.toString()); //$NON-NLS-1$
}
- return result;
+ return result.toString();
}
protected void loadColumnMetadata( NamedTable group ) throws TranslatorException {
@@ -394,7 +392,7 @@
}
}
- protected boolean isIdColumn( Expression expression ) throws TranslatorException {
+ protected boolean isIdColumn( Expression expression ) {
boolean result = false;
if (expression instanceof ColumnReference) {
Column element = ((ColumnReference)expression).getMetadataObject();
@@ -406,7 +404,7 @@
return result;
}
- protected boolean isMultiSelectColumn( Expression expression ) throws TranslatorException {
+ protected boolean isMultiSelectColumn( Expression expression ) {
boolean result = false;
if (expression instanceof ColumnReference) {
Column element = ((ColumnReference)expression).getMetadataObject();
Modified: branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -63,39 +63,34 @@
@Override
public void visit(Comparison criteria) {
-
// Find the criteria that joins the two tables
- try {
- Expression rExp = criteria.getRightExpression();
- if (rExp instanceof ColumnReference) {
- Expression lExp = criteria.getLeftExpression();
- if (isIdColumn(rExp) || isIdColumn(lExp)) {
+ Expression rExp = criteria.getRightExpression();
+ if (rExp instanceof ColumnReference) {
+ Expression lExp = criteria.getLeftExpression();
+ if (isIdColumn(rExp) || isIdColumn(lExp)) {
- Column rColumn = ((ColumnReference) rExp).getMetadataObject();
- String rTableName = rColumn.getParent().getNameInSource();
+ Column rColumn = ((ColumnReference) rExp).getMetadataObject();
+ String rTableName = rColumn.getParent().getNameInSource();
- Column lColumn = ((ColumnReference) lExp).getMetadataObject();
- String lTableName = lColumn.getParent().getNameInSource();
+ Column lColumn = ((ColumnReference) lExp).getMetadataObject();
+ String lTableName = lColumn.getParent().getNameInSource();
- if (leftTableInJoin.getNameInSource().equals(rTableName)
- || leftTableInJoin.getNameInSource().equals(lTableName)
- && rightTableInJoin.getNameInSource().equals(rTableName)
- || rightTableInJoin.getNameInSource().equals(lTableName)
- && !rTableName.equals(lTableName)) {
- // This is the join criteria, the one that is the ID is the parent.
- Expression fKey = !isIdColumn(lExp) ? lExp : rExp;
- table = childTable = (Table)((ColumnReference) fKey).getMetadataObject().getParent();
- } else {
- // Only add the criteria to the query if it is not the join criteria.
- // The join criteria is implicit in the salesforce syntax.
- super.visit(criteria);
- }
+ if (leftTableInJoin.getNameInSource().equals(rTableName)
+ || leftTableInJoin.getNameInSource().equals(lTableName)
+ && rightTableInJoin.getNameInSource().equals(rTableName)
+ || rightTableInJoin.getNameInSource().equals(lTableName)
+ && !rTableName.equals(lTableName)) {
+ // This is the join criteria, the one that is the ID is the parent.
+ Expression fKey = !isIdColumn(lExp) ? lExp : rExp;
+ table = childTable = (Table)((ColumnReference) fKey).getMetadataObject().getParent();
+ } else {
+ // Only add the criteria to the query if it is not the join criteria.
+ // The join criteria is implicit in the salesforce syntax.
+ super.visit(criteria);
}
- } else {
- super.visit(criteria);
}
- } catch (TranslatorException e) {
- exceptions.add(e);
+ } else {
+ super.visit(criteria);
}
}
Modified: branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -61,7 +61,7 @@
public void visit(Select query) {
super.visit(query);
if (query.isDistinct()) {
- exceptions.add(new TranslatorException(SalesForcePlugin.Util.getString("SelectVisitor.distinct.not.supported")));
+ exceptions.add(new TranslatorException(SalesForcePlugin.Util.getString("SelectVisitor.distinct.not.supported"))); //$NON-NLS-1$
}
selectSymbols = query.getDerivedColumns();
selectSymbolCount = selectSymbols.size();
@@ -78,10 +78,10 @@
selectSymbolNameToIndex .put(qualifiedName, index);
String nameInSource = element.getNameInSource();
if (null == nameInSource || nameInSource.length() == 0) {
- exceptions.add(new TranslatorException("name in source is null or empty for column "+ symbol.toString()));
+ exceptions.add(new TranslatorException("name in source is null or empty for column "+ symbol.toString())); //$NON-NLS-1$
continue;
}
- if (nameInSource.equalsIgnoreCase("id")) {
+ if (nameInSource.equalsIgnoreCase("id")) { //$NON-NLS-1$
idIndex = index;
}
}
@@ -96,7 +96,7 @@
String supportsQuery = table.getProperties().get(Constants.SUPPORTS_QUERY);
objectSupportsRetrieve = Boolean.valueOf(table.getProperties().get(Constants.SUPPORTS_RETRIEVE));
if (!Boolean.valueOf(supportsQuery)) {
- throw new TranslatorException(table.getNameInSource() + " " + SalesForcePlugin.Util.getString("CriteriaVisitor.query.not.supported"));
+ throw new TranslatorException(table.getNameInSource() + " " + SalesForcePlugin.Util.getString("CriteriaVisitor.query.not.supported")); //$NON-NLS-1$ //$NON-NLS-2$
}
loadColumnMetadata(obj);
} catch (TranslatorException ce) {
@@ -118,7 +118,7 @@
public String getQuery() throws TranslatorException {
if (!exceptions.isEmpty()) {
- throw ((TranslatorException) exceptions.get(0));
+ throw exceptions.get(0);
}
StringBuffer result = new StringBuffer();
result.append(SELECT).append(SPACE);
@@ -137,9 +137,9 @@
boolean firstTime = true;
for (DerivedColumn symbol : selectSymbols) {
if (!firstTime) {
- result.append(", ");
+ result.append(", "); //$NON-NLS-1$
} else {
- firstTime = false;
+ firstTime = false;
}
Expression expression = symbol.getExpression();
if (expression instanceof ColumnReference) {
@@ -153,7 +153,7 @@
if(parent instanceof Table) {
table = (Table)parent;
} else {
- throw new TranslatorException("Could not resolve Table for column " + element.getName());
+ throw new TranslatorException("Could not resolve Table for column " + element.getName()); //$NON-NLS-1$
}
}
result.append(table.getNameInSource());
@@ -209,19 +209,19 @@
}
- public List<String> getIdInCriteria() throws TranslatorException {
+ public List<String> getIdInCriteria() {
assertRetrieveValidated();
List<Expression> expressions = this.idInCriteria.getRightExpressions();
List<String> result = new ArrayList<String>(expressions.size());
for(int i = 0; i < expressions.size(); i++) {
- result.add(getValue(expressions.get(i)));
+ result.add(getValue(expressions.get(i), true));
}
return result;
}
private void assertRetrieveValidated() throws AssertionError {
if(!hasOnlyIDCriteria()) {
- throw new AssertionError("Must call hasOnlyIdInCriteria() before this method");
+ throw new AssertionError("Must call hasOnlyIdInCriteria() before this method"); //$NON-NLS-1$
}
}
Modified: branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -24,11 +24,19 @@
import static org.junit.Assert.*;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
import org.teiid.cdk.api.TranslationUtility;
import org.teiid.language.Select;
import org.teiid.metadata.RuntimeMetadata;
+import org.teiid.query.unittest.TimestampUtil;
import org.teiid.translator.ExecutionContext;
import org.teiid.translator.salesforce.SalesforceConnection;
import org.teiid.translator.salesforce.execution.visitors.TestVisitors;
@@ -66,4 +74,20 @@
assertNull(qei.next());
}
+ @BeforeClass static public void oneTimeSetup() {
+ TimeZone.setDefault(TimeZone.getTimeZone("GMT-06:00"));
+ }
+
+ @AfterClass static public void oneTimeTearDown() {
+ TimeZone.setDefault(null);
+ }
+
+ @Test public void testValueParsing() throws Exception {
+ assertEquals(TimestampUtil.createTime(2, 0, 0), QueryExecutionImpl.parseDateTime("08:00:00.000Z", Time.class, Calendar.getInstance()));
+ }
+
+ @Test public void testValueParsing1() throws Exception {
+ assertEquals(TimestampUtil.createTimestamp(101, 0, 1, 2, 0, 0, 1000000), QueryExecutionImpl.parseDateTime("2001-01-01T08:00:00.001Z", Timestamp.class, Calendar.getInstance()));
+ }
+
}
Modified: branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java
===================================================================
--- branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java 2011-12-13 15:55:14 UTC (rev 3734)
+++ branches/7.4.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java 2011-12-13 17:08:44 UTC (rev 3735)
@@ -28,6 +28,8 @@
import java.util.List;
import java.util.TimeZone;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
import org.teiid.cdk.api.TranslationUtility;
@@ -90,16 +92,16 @@
contactTable.setProperty("Supports Query", Boolean.TRUE.toString()); //$NON-NLS-1$
// Create Contact Columns
String[] elemNames = new String[] {
- "ContactID", "Name", "AccountId", "InitialContact" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ "ContactID", "Name", "AccountId", "InitialContact", "LastTime" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
};
String[] elemTypes = new String[] {
- DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.TIMESTAMP
+ DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.TIMESTAMP, DataTypeManager.DefaultDataTypes.TIME
};
List<Column> contactCols = RealMetadataFactory.createElements(contactTable, elemNames, elemTypes);
// Set name in source on each column
String[] contactNameInSource = new String[] {
- "id", "ContactName", "accountid", "InitialContact" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ "id", "ContactName", "accountid", "InitialContact", "LastTime" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
};
for(int i=0; i<2; i++) {
Column obj = contactCols.get(i);
@@ -154,7 +156,7 @@
SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
visitor.visit(command);
assertFalse(visitor.hasOnlyIDCriteria());
- assertEquals("SELECT Account.id, Account.AccountName, Account.Stuff, Account.Industry FROM Account WHERE Industry IN('1','2','3')", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ assertEquals("SELECT Account.id, Account.AccountName, Account.Stuff, Account.Industry FROM Account WHERE Account.Industry IN('1','2','3')", visitor.getQuery().toString().trim()); //$NON-NLS-1$
}
@@ -194,9 +196,23 @@
Select command = (Select)translationUtility.parseCommand("SELECT Contacts.Name FROM Contacts WHERE Contacts.Name in ('x', 'y')"); //$NON-NLS-1$
SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
visitor.visit(command);
- assertEquals("SELECT Contact.ContactName FROM Contact WHERE ContactName IN('x','y')", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.ContactName IN('x','y')", visitor.getQuery().toString().trim()); //$NON-NLS-1$
}
+ @Test public void testEqualsElement() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("SELECT Contacts.Name FROM Contacts WHERE Contacts.Name = Contacts.AccountId"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.ContactName = Contact.AccountId", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+ @Test public void testIsNull() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("SELECT Contacts.Name FROM Contacts WHERE Contacts.Name is not null"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.ContactName != NULL", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
@Test public void testIDCriteria() throws Exception {
Select command = (Select)translationUtility.parseCommand("select id, name from Account where id = 'bar'"); //$NON-NLS-1$
SalesforceConnection sfc = Mockito.mock(SalesforceConnection.class);
@@ -205,16 +221,33 @@
Mockito.verify(sfc).retrieve("Account.id, Account.AccountName", "Account", Arrays.asList("bar"));
}
- @Test public void testDateTimeFormating() throws Exception {
+ @BeforeClass static public void oneTimeSetup() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT-06:00"));
- try {
- Select command = (Select)translationUtility.parseCommand("select name from contacts where initialcontact = {ts'2003-03-11 11:42:10.5'}"); //$NON-NLS-1$
- SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
- visitor.visit(command);
- assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.InitialContact = 2003-03-11T11:42:10.500-06:00", visitor.getQuery().toString().trim()); //$NON-NLS-1$
- } finally {
- TimeZone.setDefault(null);
- }
}
+
+ @AfterClass static public void oneTimeTearDown() {
+ TimeZone.setDefault(null);
+ }
+
+ @Test public void testDateTimeFormating() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("select name from contacts where initialcontact = {ts'2003-03-11 11:42:10.5'}"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.InitialContact = 2003-03-11T11:42:10.500-06:00", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+ @Test public void testDateTimeFormating1() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("select name from contacts where initialcontact in ({ts'2003-03-11 11:42:10.506'}, {ts'2003-03-11 11:42:10.8088'})"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.InitialContact IN(2003-03-11T11:42:10.506-06:00,2003-03-11T11:42:10.80-06:00)", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+ @Test public void testTimeFormatting() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("select name from contacts where lasttime = {t'11:42:10'}"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT Contact.ContactName FROM Contact WHERE Contact.LastTime = 11:42:10.000-06:00", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
}
13 years
teiid SVN: r3734 - in branches/7.4.x/engine/src/main: java/org/teiid/query/optimizer/relational/rules and 2 other directories.
by teiid-commits@lists.jboss.org
Author: jolee
Date: 2011-12-13 10:55:14 -0500 (Tue, 13 Dec 2011)
New Revision: 3734
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeConstants.java
branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseDependent.java
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
branches/7.4.x/engine/src/main/resources/org/teiid/query/i18n.properties
Log:
TEIID-1828 adding warning and more plan information related to dependent join backoff
Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeConstants.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeConstants.java 2011-12-12 21:37:05 UTC (rev 3733)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeConstants.java 2011-12-13 15:55:14 UTC (rev 3734)
@@ -140,7 +140,8 @@
EST_JOIN_COST, // Float value that represents the estimated cost of a merge join (the join strategy for this could be Nested Loop or Merge)
EST_CARDINALITY, // Float represents the estimated cardinality (amount of rows) produced by this node
EST_COL_STATS,
- EST_SELECTIVITY, // Float that represents the selectivity of a criteria node
+ EST_SELECTIVITY, // Float that represents the selectivity of a criteria node
+ MAX_NDV, // The max NDV before the dependent join will be aborted
// Tuple limit and offset
MAX_TUPLE_LIMIT, // Expression that evaluates to the max number of tuples generated
Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseDependent.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseDependent.java 2011-12-12 21:37:05 UTC (rev 3733)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleChooseDependent.java 2011-12-13 15:55:14 UTC (rev 3734)
@@ -326,11 +326,13 @@
Expression indepExpr = (Expression) independentExpressions.get(i);
DependentSetCriteria crit = new DependentSetCriteria(SymbolMap.getExpression(depExpr), id);
float ndv = NewCalculateCostUtil.UNKNOWN_VALUE;
+ Float maxNdv = null;
if (dca != null && dca.expectedNdv[i] != null) {
if (dca.expectedNdv[i] > 4*dca.maxNdv[i]) {
continue; //not necessary to use
}
ndv = dca.expectedNdv[i];
+ maxNdv = dca.maxNdv[i];
crit.setMaxNdv(dca.maxNdv[i]);
} else {
Collection<ElementSymbol> elems = ElementCollectorVisitor.getElements(indepExpr, true);
@@ -345,6 +347,9 @@
PlanNode selectNode = RelationalPlanner.createSelectNode(crit, false);
selectNode.setProperty(NodeConstants.Info.IS_DEPENDENT_SET, Boolean.TRUE);
+ if (maxNdv != null) {
+ selectNode.setProperty(NodeConstants.Info.MAX_NDV, maxNdv);
+ }
result.add(selectNode);
}
Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java 2011-12-12 21:37:05 UTC (rev 3733)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java 2011-12-13 15:55:14 UTC (rev 3734)
@@ -38,6 +38,9 @@
import org.teiid.common.buffer.BlockedException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
+import org.teiid.logging.LogConstants;
+import org.teiid.logging.LogManager;
+import org.teiid.query.QueryPlugin;
import org.teiid.query.optimizer.relational.rules.NewCalculateCostUtil;
import org.teiid.query.processor.relational.SortUtility.Mode;
import org.teiid.query.rewriter.QueryRewriter;
@@ -115,7 +118,8 @@
}
last = next;
}
- if (distinctCount > setState.maxNdv) {
+ if (!setState.overMax && distinctCount > setState.maxNdv) {
+ LogManager.logWarning(LogConstants.CTX_DQP, QueryPlugin.Util.getString("DependentCriteriaProcessor.dep_join_backoff", valueSource, setState.valueExpression, setState.maxNdv)); //$NON-NLS-1$
setState.overMax = true;
}
}
Modified: branches/7.4.x/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- branches/7.4.x/engine/src/main/resources/org/teiid/query/i18n.properties 2011-12-12 21:37:05 UTC (rev 3733)
+++ branches/7.4.x/engine/src/main/resources/org/teiid/query/i18n.properties 2011-12-13 15:55:14 UTC (rev 3734)
@@ -925,4 +925,12 @@
DdlPlan.event_not_exists={0} does not have an INSTEAD OF trigger defined for {1}.
DdlPlan.event_already_exists={0} already has an INSTEAD OF trigger defined for {1}.
-error_refresh=error occurred during refreshing the materialized view entries for view {0}
\ No newline at end of file
+error_refresh=error occurred during refreshing the materialized view entries for view {0}
+
+support_required=Without required support property {0}, pushdown will not be enabled for {1} on translator {2}.
+
+RuleAssignOutputElements.couldnt_push_expression=Expression(s) {0} cannot be pushed to source.
+RuleAssignOutputElements.cannot_introduce_expressions=Cannot introduce new expressions {1} in duplicate removal.
+
+DependentCriteriaProcessor.dep_join_backoff=Not performing dependent join using source {0}, since the number of distinct rows for expression {1} exceeds {2}. You should ensure that your source statistics, including column distinct value counts, accurately reflect the source or use a MAKE_DEP hint to force the join.
+
13 years
teiid SVN: r3733 - branches/7.1.x/hibernate-dialect/src/main/java/org/teiid/dialect.
by teiid-commits@lists.jboss.org
Author: jolee
Date: 2011-12-12 16:37:05 -0500 (Mon, 12 Dec 2011)
New Revision: 3733
Modified:
branches/7.1.x/hibernate-dialect/src/main/java/org/teiid/dialect/TeiidDialect.java
Log:
SOA-3434 TeiidDialect for Hibernate does not include a function to get the month value of a date object.
Modified: branches/7.1.x/hibernate-dialect/src/main/java/org/teiid/dialect/TeiidDialect.java
===================================================================
--- branches/7.1.x/hibernate-dialect/src/main/java/org/teiid/dialect/TeiidDialect.java 2011-12-12 21:29:14 UTC (rev 3732)
+++ branches/7.1.x/hibernate-dialect/src/main/java/org/teiid/dialect/TeiidDialect.java 2011-12-12 21:37:05 UTC (rev 3733)
@@ -125,6 +125,7 @@
registerFunction("formattimestamp", new StandardSQLFunction("formattimestamp", Hibernate.STRING)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("hour", new StandardSQLFunction("hour", Hibernate.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("minute", new StandardSQLFunction("minute", Hibernate.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
+ registerFunction("month", new StandardSQLFunction("month", Hibernate.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("monthname", new StandardSQLFunction("monthname", Hibernate.STRING)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("parsedate", new StandardSQLFunction("parsedate", Hibernate.DATE)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("parsetime", new StandardSQLFunction("parsetime", Hibernate.TIME)); //$NON-NLS-1$ //$NON-NLS-2$
@@ -137,6 +138,8 @@
registerFunction("year", new StandardSQLFunction("year", Hibernate.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("modifytimezone", new StandardSQLFunction("modifytimezone", Hibernate.TIMESTAMP)); //$NON-NLS-1$ //$NON-NLS-2$
+ registerFunction("array_get", new StandardSQLFunction("array_get", Hibernate.OBJECT)); //$NON-NLS-1$ //$NON-NLS-2$
+ registerFunction("array_length", new StandardSQLFunction("array_length", Hibernate.INTEGER)); //$NON-NLS-1$ //$NON-NLS-2$
registerFunction("convert", new StandardSQLFunction("convert")); //$NON-NLS-1$ //$NON-NLS-2$
}
13 years
teiid SVN: r3732 - branches/7.6.x/connectors/connector-salesforce/src/main/rar/META-INF.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2011-12-12 16:29:14 -0500 (Mon, 12 Dec 2011)
New Revision: 3732
Modified:
branches/7.6.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml
Log:
TEIID-1863: updating the protocol url for SF
Modified: branches/7.6.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml
===================================================================
--- branches/7.6.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml 2011-12-12 20:50:34 UTC (rev 3731)
+++ branches/7.6.x/connectors/connector-salesforce/src/main/rar/META-INF/ra.xml 2011-12-12 21:29:14 UTC (rev 3732)
@@ -56,7 +56,7 @@
<description>{$display:"Salesforce URL",$description:"URL for connecting to Salesforce",$advanced:"true"}</description>
<config-property-name>URL</config-property-name>
<config-property-type>java.lang.String</config-property-type>
- <config-property-value>https://www.salesforce.com/services/Soap/u/17.0</config-property-value>
+ <config-property-value>https://www.salesforce.com/services/Soap/u/22.0</config-property-value>
</config-property>
<config-property>
13 years