[teiid-commits] teiid SVN: r533 - in branches/symbol_refactoring_61/engine/src: main/java/com/metamatrix/query/metadata and 11 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Tue Mar 3 14:50:14 EST 2009
Author: shawkins
Date: 2009-03-03 14:50:13 -0500 (Tue, 03 Mar 2009)
New Revision: 533
Added:
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/TypedLanguageObject.java
Modified:
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/optimizer/xml/SourceNodePlannerVisitor.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/QueryResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/TempTableResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitorUtil.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Create.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/DynamicCommand.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/OrderByItem.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/StoredProcedure.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/DerivedColumn.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Expression.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/ScalarSubquery.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/AggregateSymbolCollectorVisitor.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
branches/symbol_refactoring_61/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj
branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java
branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
Log:
basic validation tests are now passing
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -58,7 +58,7 @@
import com.metamatrix.query.sql.symbol.Aggregate;
import com.metamatrix.query.sql.symbol.CaseExpression;
import com.metamatrix.query.sql.symbol.Constant;
-import com.metamatrix.query.sql.symbol.DerivedColumn;
+import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.Function;
import com.metamatrix.query.sql.symbol.Reference;
@@ -480,7 +480,7 @@
private Object internalEvaluate(Expression expression, List tuple)
throws ExpressionEvaluationException, BlockedException, MetaMatrixComponentException {
- if(expression instanceof SingleElementSymbol) {
+ if(expression instanceof Aggregate || expression instanceof ElementSymbol) {
// Case 5155: elements must be non-null
Assertion.isNotNull( elements );
@@ -489,12 +489,6 @@
if(index != null) {
return tuple.get(index.intValue());
}
- // Otherwise this should be an ExpressionSymbol and we just need to dive in and evaluate the expression itself
- if (expression instanceof DerivedColumn && !(expression instanceof Aggregate)) {
- DerivedColumn exprSyb = (DerivedColumn) expression;
- Expression expr = exprSyb.getExpression();
- return internalEvaluate(expr, tuple);
- }
// instead of assuming null, throw an exception. a problem in planning has occurred
throw new MetaMatrixComponentException(ErrorMessageKeys.PROCESSOR_0033, QueryPlugin.Util.getString(ErrorMessageKeys.PROCESSOR_0033, expression, "No value was available")); //$NON-NLS-1$
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -76,7 +76,7 @@
* @param tempGroup Name of temp group
* @param tempSymbols List of ElementSymbol in position order
*/
- public TempMetadataID addTempGroup(String tempGroup, List tempSymbols) {
+ public TempMetadataID addTempGroup(String tempGroup, List<DerivedColumn> tempSymbols) {
return addTempGroup(tempGroup, tempSymbols, true);
}
@@ -86,7 +86,7 @@
* @param tempSymbols List of ElementSymbol in position order
* @param isVirtual whether or not the group is a virtual group
*/
- public TempMetadataID addTempGroup(String tempGroup, List tempSymbols, boolean isVirtual) {
+ public TempMetadataID addTempGroup(String tempGroup, List<DerivedColumn> tempSymbols, boolean isVirtual) {
return addTempGroup(tempGroup, tempSymbols, isVirtual, false);
}
@@ -103,12 +103,10 @@
// Add the temporary group
String tempName = tempGroup.toUpperCase();
- List elementIDs = new ArrayList(tempSymbols.size());
+ List<TempMetadataID> elementIDs = new ArrayList<TempMetadataID>(tempSymbols.size());
for (DerivedColumn symbol : tempSymbols) {
- TempMetadataID elementID = createElementSymbol(tempName, symbol, isTempTable);
-
- elementIDs.add(elementID);
+ elementIDs.add(createElementSymbol(tempName, symbol, isTempTable));
}
// Create group ID
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/optimizer/xml/SourceNodePlannerVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/optimizer/xml/SourceNodePlannerVisitor.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/optimizer/xml/SourceNodePlannerVisitor.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -230,14 +230,14 @@
throws QueryMetadataException, MetaMatrixComponentException, QueryResolverException, QueryPlannerException {
// get elements in the old group
- List elements = ResolverUtil.resolveElementsInGroup(oldSymbol, planEnv.getGlobalMetadata());
+ List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(oldSymbol, planEnv.getGlobalMetadata());
TempMetadataStore store = planEnv.getGlobalMetadata().getMetadataStore();
// create a new group name and to the temp store
String newGroup = getNewName(oldSymbol.getName(), store);
GroupSymbol newGroupSymbol = new GroupSymbol(newGroup);
- newGroupSymbol.setMetadataID(store.addTempGroup(newGroup, elements));
+ newGroupSymbol.setMetadataID(store.addTempGroup(newGroup, ResolverUtil.convertToDerivedColumns(elements)));
// create a symbol map; so that all the others who refer by the old name can use this map
// to convert to new group.
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -45,6 +45,7 @@
import com.metamatrix.query.sql.lang.GroupContext;
import com.metamatrix.query.sql.lang.ProcedureContainer;
import com.metamatrix.query.sql.proc.CreateUpdateProcedureCommand;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.util.ErrorMessageKeys;
@@ -141,25 +142,25 @@
procCmd.setUserCommand(container);
//Look up elements for the virtual group
- List elements = ResolverUtil.resolveElementsInGroup(group, metadata);
+ List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(group, metadata);
// Create the INPUT variables
- List inputElments = new ArrayList(elements.size());
+ List<DerivedColumn> inputElments = new ArrayList<DerivedColumn>(elements.size());
for(int i=0; i<elements.size(); i++) {
- ElementSymbol virtualElmnt = (ElementSymbol)elements.get(i);
+ ElementSymbol virtualElmnt = elements.get(i);
ElementSymbol inputElement = (ElementSymbol)virtualElmnt.clone();
- inputElments.add(inputElement);
+ inputElments.add(new DerivedColumn(inputElement));
}
addScalarGroup(ProcedureReservedWords.INPUT, discoveredMetadata, externalGroups, inputElments);
// Switch type to be boolean for all CHANGING variables
- List changingElements = new ArrayList(elements.size());
+ List<DerivedColumn> changingElements = new ArrayList<DerivedColumn>(elements.size());
for(int i=0; i<elements.size(); i++) {
- ElementSymbol virtualElmnt = (ElementSymbol)elements.get(i);
+ ElementSymbol virtualElmnt = elements.get(i);
ElementSymbol changeElement = (ElementSymbol)virtualElmnt.clone();
changeElement.setType(DataTypeManager.DefaultDataClasses.BOOLEAN);
- changingElements.add(changeElement);
+ changingElements.add(new DerivedColumn(changeElement));
}
addScalarGroup(ProcedureReservedWords.CHANGING, discoveredMetadata, externalGroups, changingElements);
@@ -222,7 +223,7 @@
ResolverVisitorUtil.resolveGroup(group, metadata);
}
- public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List symbols) {
+ public static GroupSymbol addScalarGroup(String name, TempMetadataStore metadata, GroupContext externalGroups, List<DerivedColumn> symbols) {
GroupSymbol variables = new GroupSymbol(name);
externalGroups.addGroup(variables);
TempMetadataID tid = metadata.addTempGroup(name, symbols);
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/QueryResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/QueryResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/QueryResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -51,6 +51,7 @@
import com.metamatrix.query.resolver.command.UpdateResolver;
import com.metamatrix.query.resolver.command.XMLQueryResolver;
import com.metamatrix.query.resolver.command.XQueryResolver;
+import com.metamatrix.query.resolver.util.ResolverUtil;
import com.metamatrix.query.resolver.util.ResolverVisitor;
import com.metamatrix.query.resolver.util.ResolverVisitorUtil;
import com.metamatrix.query.sql.lang.Command;
@@ -60,6 +61,7 @@
import com.metamatrix.query.sql.lang.GroupContext;
import com.metamatrix.query.sql.lang.Query;
import com.metamatrix.query.sql.lang.UnaryFromClause;
+import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.util.ErrorMessageKeys;
import com.metamatrix.query.util.LogConstants;
@@ -139,8 +141,8 @@
for(Iterator iter = externalMetadata.entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry)iter.next();
GroupSymbol group = (GroupSymbol) entry.getKey();
- List elements = (List) entry.getValue();
- rootExternalStore.addTempGroup(group.getName(), elements);
+ List<ElementSymbol> elements = (List<ElementSymbol>) entry.getValue();
+ rootExternalStore.addTempGroup(group.getName(), ResolverUtil.convertToDerivedColumns(elements));
currentCommand.addExternalGroupToContext(group);
}
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -98,8 +98,8 @@
if (!intoSymbol.isImplicitTempGroupSymbol()) {
ResolverVisitorUtil.resolveGroup(intoSymbol, metadata);
} else {
- List symbols = dynamicCmd.getAsColumns();
- ResolverUtil.resolveImplicitTempGroup(metadata, intoSymbol, symbols);
+ List<ElementSymbol> symbols = dynamicCmd.getAsColumns();
+ ResolverUtil.resolveImplicitTempGroup(metadata, intoSymbol, ResolverUtil.convertToDerivedColumns(symbols));
}
}
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -54,6 +54,7 @@
import com.metamatrix.query.sql.lang.StoredProcedure;
import com.metamatrix.query.sql.proc.CreateUpdateProcedureCommand;
import com.metamatrix.query.sql.symbol.Constant;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -218,7 +219,7 @@
// 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 = storedProcedureCommand.getProcedureName();
- List tempElements = storedProcedureCommand.getProjectedSymbols();
+ List<DerivedColumn> tempElements = storedProcedureCommand.getProjectedSymbols();
boolean isVirtual = storedProcedureInfo.getQueryPlan() != null;
discoveredMetadata.addTempGroup(procName, tempElements, isVirtual);
@@ -247,13 +248,13 @@
GroupContext context = new GroupContext();
// Look through parameters to find input elements - these become child metadata
- List tempElements = new ArrayList();
+ List<DerivedColumn> tempElements = new ArrayList<DerivedColumn>();
Iterator iter = storedProcedureCommand.getParameters().iterator();
while(iter.hasNext()) {
SPParameter param = (SPParameter) iter.next();
if(param.getParameterType() == ParameterInfo.IN || param.getParameterType() == ParameterInfo.INOUT) {
ElementSymbol symbol = param.getParameterSymbol();
- tempElements.add(symbol);
+ tempElements.add(new DerivedColumn(symbol));
}
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -52,6 +52,7 @@
import com.metamatrix.query.sql.lang.Insert;
import com.metamatrix.query.sql.lang.ProcedureContainer;
import com.metamatrix.query.sql.symbol.Constant;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -108,7 +109,7 @@
if(insert.getQueryExpression() != null) {
ResolverUtil.resolveImplicitTempGroup(metadata, insert.getGroup(), insert.getQueryExpression().getProjectedSymbols());
}else {
- ResolverUtil.resolveImplicitTempGroup(metadata, insert.getGroup(), insert.getVariables());
+ ResolverUtil.resolveImplicitTempGroup(metadata, insert.getGroup(), ResolverUtil.convertToDerivedColumns(insert.getVariables()));
}
resolveVariables(metadata, insert, groups);
@@ -145,15 +146,29 @@
boolean usingQuery = insert.getQueryExpression() != null;
- // resolve any functions in the values
- List values = insert.getValues();
-
if (usingQuery) {
- values = insert.getQueryExpression().getProjectedSymbols();
+ List<DerivedColumn> columns = insert.getQueryExpression().getProjectedSymbols();
+ // check that # of variables == # of values
+ if(columns.size() != insert.getVariables().size()) {
+ throw new QueryResolverException(ErrorMessageKeys.RESOLVER_0010, QueryPlugin.Util.getString(ErrorMessageKeys.RESOLVER_0010, new Object[] {new Integer(insert.getVariables().size()), new Integer(insert.getValues().size())}));
+ }
+ Iterator<ElementSymbol> iterator = insert.getVariables().iterator();
+ for (DerivedColumn column : columns) {
+ ElementSymbol element = iterator.next();
+ if (element.getType() != column.getType()
+ && !DataTypeManager.isImplicitConversion(DataTypeManager.getDataTypeName(column.getType()),
+ DataTypeManager.getDataTypeName(element.getType()))) {
+ //TODO: a special case here is a projected literal
+ throw new QueryResolverException(QueryPlugin.Util.getString("InsertResolver.cant_convert_query_type", new Object[] {column, column.getType().getName(), element, element.getType().getName()})); //$NON-NLS-1$
+ }
+ }
+ return;
}
+
+ // resolve any functions in the values
+ List<Expression> values = insert.getValues();
+ List<Expression> newValues = new ArrayList<Expression>(values.size());
- List newValues = new ArrayList(values.size());
-
// check that # of variables == # of values
if(values.size() != insert.getVariables().size()) {
throw new QueryResolverException(ErrorMessageKeys.RESOLVER_0010, QueryPlugin.Util.getString(ErrorMessageKeys.RESOLVER_0010, new Object[] {new Integer(insert.getVariables().size()), new Integer(insert.getValues().size())}));
@@ -168,20 +183,13 @@
if(element.getType() != null && expression.getType() != null) {
String elementTypeName = DataTypeManager.getDataTypeName(element.getType());
- if (!usingQuery) {
- newValues.add(ResolverUtil.convertExpression(expression, elementTypeName));
- } else if (element.getType() != expression.getType()
- && !DataTypeManager.isImplicitConversion(DataTypeManager.getDataTypeName(expression.getType()),
- DataTypeManager.getDataTypeName(element.getType()))) {
- //TODO: a special case here is a projected literal
- throw new QueryResolverException(QueryPlugin.Util.getString("InsertResolver.cant_convert_query_type", new Object[] {expression, expression.getType().getName(), element, element.getType().getName()})); //$NON-NLS-1$
- }
+ newValues.add(ResolverUtil.convertExpression(expression, elementTypeName));
} else if(element.getType() != null && expression.getType() == null && expression instanceof Reference){
Reference ref = (Reference)expression;
//set the type of reference to be the same as variable
ref.setExpression(new Constant(null, element.getType()));
newValues.add(ref);
- } else if (element.getType() == null && expression.getType() != null && !usingQuery) {
+ } else if (element.getType() == null && expression.getType() != null) {
element.setType(expression.getType());
newValues.add(expression);
} else {
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/TempTableResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/TempTableResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/TempTableResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -77,7 +77,7 @@
//if we get here then either the group does not exist or has already been defined as a temp table
//if it has been defined as a temp table, that's ok we'll use this as the new definition and throw an
//exception at runtime if the user has not dropped the previous table yet
- ResolverUtil.addTempTable(metadata, group, create.getColumns());
+ ResolverUtil.addTempTable(metadata, group, ResolverUtil.convertToDerivedColumns(create.getColumns()));
ResolverVisitorUtil.resolveGroup(((Create)command).getTable(), metadata);
Set groups = new HashSet();
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -66,6 +66,7 @@
import com.metamatrix.query.sql.proc.LoopStatement;
import com.metamatrix.query.sql.proc.Statement;
import com.metamatrix.query.sql.proc.WhileStatement;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -151,7 +152,7 @@
//by creating a new group context here it means that variables will resolve with a higher precedence than input/changing
GroupContext externalGroups = command.getExternalGroupContexts();
- List symbols = new LinkedList();
+ List<DerivedColumn> symbols = new LinkedList<DerivedColumn>();
// virtual group elements in HAS and TRANSLATE criteria have to be resolved
if(procCommand.isUpdateProcedure()){
@@ -161,7 +162,7 @@
String countVar = ProcedureReservedWords.VARIABLES + ElementSymbol.SEPARATOR + ProcedureReservedWords.ROWS_UPDATED;
ElementSymbol updateCount = new ElementSymbol(countVar);
updateCount.setType(DataTypeManager.DefaultDataClasses.INTEGER);
- symbols.add(updateCount);
+ symbols.add(new DerivedColumn(updateCount));
ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, metadata.getMetadataStore(), externalGroups, symbols);
}
@@ -300,7 +301,7 @@
}
Command cmd = loopStmt.getCommand();
resolveEmbeddedCommand(metadata, externalGroups, cmd, expandCommand, analysis);
- List symbols = cmd.getProjectedSymbols();
+ List<DerivedColumn> symbols = cmd.getProjectedSymbols();
//add the loop cursor group into its own context
TempMetadataStore store = new TempMetadataStore(new HashMap(metadata.getMetadataStore().getData()));
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -266,12 +266,11 @@
Constant c = (Constant)orderByItem.getSortKey();
if (DataTypeManager.DefaultDataClasses.INTEGER == c.getType()) {
int value = (Integer)c.getValue();
- if (value < 0 || value > knownElements.size() -1) {
+ if (value < 1 || value > knownElements.size()) {
throw new QueryResolverException("Invalid order by ordinal");
}
- DerivedColumn matchedSymbol = knownElements.get(value);
- ElementSymbol symbol = new ElementSymbol(matchedSymbol.getName());
- resolveOrderByItem(value, symbol, matchedSymbol);
+ orderByItem.setOrdinalPosition(value);
+ orderByItem.setType(knownElements.get(value - 1).getType());
continue;
}
}
@@ -299,7 +298,7 @@
Expression expr = knownSymbol.getExpression();
//special check for uuid element symbols
- if (expr instanceof ElementSymbol && knownSymbol.getShortName().equalsIgnoreCase(knownSymbol.getName())) {
+ if (!knownSymbol.isAlias() && expr instanceof ElementSymbol && knownSymbol.getShortName().equalsIgnoreCase(knownSymbol.getName())) {
name = metadata.getShortElementName(metadata.getFullName((((ElementSymbol)expr).getMetadataID())));
}
@@ -446,9 +445,9 @@
* The resolved elements may not contain non-selectable columns depending on the metadata first used for resolving.
*
*/
- public static List resolveElementsInGroup(GroupSymbol group, QueryMetadataInterface metadata)
+ public static List<ElementSymbol> resolveElementsInGroup(GroupSymbol group, QueryMetadataInterface metadata)
throws QueryMetadataException, MetaMatrixComponentException {
- return new ArrayList(getGroupInfo(group, metadata).getSymbolList());
+ return new ArrayList<ElementSymbol>(getGroupInfo(group, metadata).getSymbolList());
}
static GroupInfo getGroupInfo(GroupSymbol group,
@@ -549,7 +548,7 @@
setTypeIfReference(limit.getRowLimit(), DataTypeManager.DefaultDataClasses.INTEGER, limit);
}
- public static void resolveImplicitTempGroup(TempMetadataAdapter metadata, GroupSymbol symbol, List symbols)
+ public static void resolveImplicitTempGroup(TempMetadataAdapter metadata, GroupSymbol symbol, List<DerivedColumn> symbols)
throws MetaMatrixComponentException, QueryResolverException {
if (symbol.isImplicitTempGroupSymbol()) {
@@ -563,11 +562,10 @@
public static void addTempGroup(TempMetadataAdapter metadata,
GroupSymbol symbol,
List<DerivedColumn> symbols, boolean tempTable) throws QueryResolverException {
- HashSet names = new HashSet();
- for (Iterator i = symbols.iterator(); i.hasNext();) {
- DerivedColumn ses = (DerivedColumn)i.next();
- if (!names.add(ses.getShortCanonicalName())) {
- throw new QueryResolverException(QueryPlugin.Util.getString("ResolverUtil.duplicateName", symbol, ses.getShortName())); //$NON-NLS-1$
+ HashSet<String> names = new HashSet<String>();
+ for (DerivedColumn derivedColumn : symbols) {
+ if (!names.add(derivedColumn.getShortCanonicalName())) {
+ throw new QueryResolverException(QueryPlugin.Util.getString("ResolverUtil.duplicateName", symbol, derivedColumn.getShortName())); //$NON-NLS-1$
}
}
@@ -580,7 +578,7 @@
public static void addTempTable(TempMetadataAdapter metadata,
GroupSymbol symbol,
- List symbols) throws QueryResolverException {
+ List<DerivedColumn> symbols) throws QueryResolverException {
addTempGroup(metadata, symbol, symbols, true);
}
@@ -718,4 +716,13 @@
//return false;
}
+ public static List<DerivedColumn> convertToDerivedColumns(List<ElementSymbol> symbols) {
+ List<DerivedColumn> result = new ArrayList<DerivedColumn>();
+ //add result set columns
+ for (ElementSymbol elementSymbol : symbols) {
+ result.add(new DerivedColumn(elementSymbol));
+ }
+ return result;
+ }
+
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitorUtil.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitorUtil.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitorUtil.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -55,6 +55,7 @@
import com.metamatrix.query.sql.symbol.Aggregate;
import com.metamatrix.query.sql.symbol.CaseExpression;
import com.metamatrix.query.sql.symbol.Constant;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.Function;
@@ -375,11 +376,11 @@
}
String exprTypeName = DataTypeManager.getDataTypeName(exprType);
- Collection projectedSymbols = crit.getCommand().getProjectedSymbols();
+ List<DerivedColumn> projectedSymbols = crit.getCommand().getProjectedSymbols();
if (projectedSymbols.size() != 1){
throw new QueryResolverException(ErrorMessageKeys.RESOLVER_0032, QueryPlugin.Util.getString(ErrorMessageKeys.RESOLVER_0032, crit.getCommand()));
}
- Class subqueryType = ((Expression)projectedSymbols.iterator().next()).getType();
+ Class subqueryType = projectedSymbols.get(0).getType();
String subqueryTypeName = DataTypeManager.getDataTypeName(subqueryType);
Expression result = null;
try {
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Create.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Create.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Create.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -30,6 +30,8 @@
import com.metamatrix.core.util.HashCodeUtil;
import com.metamatrix.query.metadata.QueryMetadataInterface;
import com.metamatrix.query.sql.LanguageVisitor;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
+import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.sql.visitor.SQLStringVisitor;
@@ -40,7 +42,7 @@
/** Identifies the table to be created. */
private GroupSymbol table;
- private List columns = new ArrayList();
+ private List<ElementSymbol> columns = new ArrayList<ElementSymbol>();
public GroupSymbol getTable() {
return table;
@@ -50,7 +52,7 @@
this.table = table;
}
- public List getColumns() {
+ public List<ElementSymbol> getColumns() {
return columns;
}
@@ -79,7 +81,7 @@
* @see com.metamatrix.query.sql.lang.Command#getProjectedSymbols()
* @since 5.5
*/
- public List getProjectedSymbols() {
+ public List<DerivedColumn> getProjectedSymbols() {
return Command.getUpdateCommandSymbol();
}
@@ -107,7 +109,7 @@
visitor.visit(this);
}
- public void setColumns(List columns) {
+ public void setColumns(List<ElementSymbol> columns) {
this.columns = columns;
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/DynamicCommand.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/DynamicCommand.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/DynamicCommand.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -41,7 +41,7 @@
private Expression sql;
- private List asColumns;
+ private List<ElementSymbol> asColumns;
private GroupSymbol intoGroup;
@@ -55,7 +55,7 @@
super();
}
- public DynamicCommand(Expression sql, List columns, GroupSymbol intoGroup, SetClauseList using) {
+ public DynamicCommand(Expression sql, List<ElementSymbol> columns, GroupSymbol intoGroup, SetClauseList using) {
super();
this.sql = sql;
this.asColumns = columns;
@@ -156,9 +156,9 @@
/**
* @return Returns the columns.
*/
- public List getAsColumns() {
+ public List<ElementSymbol> getAsColumns() {
if (this.asColumns == null) {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
return this.asColumns;
}
@@ -166,7 +166,7 @@
/**
* @param columns The columns to set.
*/
- public void setAsColumns(List columns) {
+ public void setAsColumns(List<ElementSymbol> columns) {
this.asColumns = columns;
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -48,10 +48,10 @@
private GroupSymbol group;
/** list of column variables, null = all columns */
- private List variables = new LinkedList();
+ private List<ElementSymbol> variables = new LinkedList<ElementSymbol>();
/** List of Expressions, required */
- private List values = new LinkedList();
+ private List<Expression> values = new LinkedList<Expression>();
private QueryCommand queryExpression;
@@ -109,7 +109,7 @@
* Return an ordered List of variables, may be null if no columns were specified
* @return List of {@link com.metamatrix.query.sql.symbol.ElementSymbol}
*/
- public List getVariables() {
+ public List<ElementSymbol> getVariables() {
return variables;
}
@@ -134,7 +134,7 @@
* to be inserted.
* @return List of {@link com.metamatrix.query.sql.symbol.Expression}s
*/
- public List getValues() {
+ public List<Expression> getValues() {
return this.values;
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/OrderByItem.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/OrderByItem.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/OrderByItem.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -1,11 +1,33 @@
package com.metamatrix.query.sql.lang;
-import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.LanguageVisitor;
import com.metamatrix.query.sql.symbol.Expression;
+import com.metamatrix.query.sql.symbol.TypedLanguageObject;
import com.metamatrix.query.sql.visitor.SQLStringVisitor;
-public class OrderByItem implements LanguageObject {
+/*
+ * 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.
+ */
+
+public class OrderByItem implements TypedLanguageObject {
public enum OrderSpecification {
ASC,
@@ -14,6 +36,10 @@
private Expression sortKey;
private OrderSpecification orderingSpecification;
+ //set after resolving is this is a SQL-92 unsigned int
+ private int ordinalPosition;
+ //set after resolving
+ private Class<?> type;
public OrderByItem(Expression sortKey, OrderSpecification orderingSpecification) {
this.orderingSpecification = orderingSpecification;
@@ -40,14 +66,37 @@
this.orderingSpecification = orderingSpecification;
}
+ public int getOrdinalPosition() {
+ return ordinalPosition;
+ }
+
+ public void setOrdinalPosition(int ordinalPosition) {
+ this.ordinalPosition = ordinalPosition;
+ }
+
@Override
+ public Class<?> getType() {
+ if (type == null) {
+ type = this.sortKey.getType();
+ }
+ return type;
+ }
+
+ public void setType(Class<?> type) {
+ this.type = type;
+ }
+
+ @Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@Override
public Object clone() {
- return new OrderByItem((Expression)sortKey.clone(), orderingSpecification);
+ OrderByItem clone = new OrderByItem((Expression)sortKey.clone(), orderingSpecification);
+ clone.ordinalPosition = this.ordinalPosition;
+ clone.type = this.type;
+ return clone;
}
@Override
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/StoredProcedure.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/StoredProcedure.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/StoredProcedure.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -33,7 +33,9 @@
import com.metamatrix.dqp.message.ParameterInfo;
import com.metamatrix.query.QueryPlugin;
+import com.metamatrix.query.resolver.util.ResolverUtil;
import com.metamatrix.query.sql.LanguageVisitor;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -188,10 +190,10 @@
return null;
}
- public List getResultSetColumns(){
+ public List<ElementSymbol> getResultSetColumns(){
SPParameter resultSetParameter = getResultSetParameter();
if(resultSetParameter != null){
- List result = new LinkedList();
+ List<ElementSymbol> result = new LinkedList<ElementSymbol>();
for (Iterator i = resultSetParameter.getResultSetColumns().iterator(); i.hasNext();) {
ElementSymbol symbol = (ElementSymbol)((ElementSymbol)i.next()).clone();
symbol.setGroupSymbol(getGroup());
@@ -199,7 +201,7 @@
}
return result;
}
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
public void acceptVisitor(LanguageVisitor visitor) {
@@ -253,11 +255,8 @@
* single column.
* @return Ordered list of SingleElementSymbol
*/
- public List getProjectedSymbols(){
- List result = new ArrayList();
- //add result set columns
- List rsColumns = getResultSetColumns();
- result.addAll(rsColumns);
+ public List<DerivedColumn> getProjectedSymbols(){
+ List<DerivedColumn> result = ResolverUtil.convertToDerivedColumns(getResultSetColumns());
if (!returnParameters()) {
return result;
}
@@ -268,7 +267,7 @@
if(parameter.getParameterType() == ParameterInfo.INOUT || parameter.getParameterType() == ParameterInfo.OUT){
ElementSymbol symbol = parameter.getParameterSymbol();
symbol.setGroupSymbol(getGroup());
- result.add(symbol);
+ result.add(new DerivedColumn(symbol));
}
}
//add return parameter
@@ -278,7 +277,7 @@
if(parameter.getParameterType() == ParameterInfo.RETURN_VALUE){
ElementSymbol symbol = parameter.getParameterSymbol();
symbol.setGroupSymbol(getGroup());
- result.add(symbol);
+ result.add(new DerivedColumn(symbol));
break;
}
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/DerivedColumn.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/DerivedColumn.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/DerivedColumn.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -28,7 +28,7 @@
* <p>This is a subclass of Symbol representing an expression in the SELECT clause. The
* expression may be a constant, function, or scalar subquery.</p>
*/
-public class DerivedColumn extends SelectSymbol {
+public class DerivedColumn extends SelectSymbol implements TypedLanguageObject {
private Expression expression;
private boolean alias;
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Expression.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Expression.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Expression.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -22,14 +22,13 @@
package com.metamatrix.query.sql.symbol;
-import com.metamatrix.query.sql.LanguageObject;
/**
* This is the interface for an expression in a SQL string. Expressions can be of several
* types (see subclasses), but all expressions have a type. These types are used for
* type checking.
*/
-public interface Expression extends LanguageObject {
+public interface Expression extends TypedLanguageObject {
/**
* Return true if expression has been fully resolved. Typically the QueryResolver component
@@ -37,12 +36,5 @@
* @return True if 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();
-
+
}
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/ScalarSubquery.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/ScalarSubquery.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/ScalarSubquery.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -102,8 +102,7 @@
*/
public Class getType() {
if (this.type == null){
- Expression symbol = (Expression)this.command.getProjectedSymbols().iterator().next();
- this.type = symbol.getType();
+ this.type = this.command.getProjectedSymbols().get(0).getType();
}
//may still be null if this.command wasn't resolved
return this.type;
Added: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/TypedLanguageObject.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/TypedLanguageObject.java (rev 0)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/TypedLanguageObject.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -0,0 +1,9 @@
+package com.metamatrix.query.sql.symbol;
+
+import com.metamatrix.query.sql.LanguageObject;
+
+public interface TypedLanguageObject extends LanguageObject {
+
+ Class<?> getType();
+
+}
Property changes on: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/TypedLanguageObject.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/AggregateSymbolCollectorVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/AggregateSymbolCollectorVisitor.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/AggregateSymbolCollectorVisitor.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -30,7 +30,6 @@
import com.metamatrix.query.sql.LanguageVisitor;
import com.metamatrix.query.sql.navigator.PreOrPostOrderNavigator;
import com.metamatrix.query.sql.symbol.Aggregate;
-import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
@@ -47,20 +46,6 @@
preVisitVisitor(obj);
postVisitVisitor(obj);
}
-
- /**
- * @see com.metamatrix.query.sql.navigator.PreOrPostOrderNavigator#visit(com.metamatrix.query.sql.symbol.DerivedColumn)
- */
- @Override
- public void visit(DerivedColumn obj) {
- if (obj.isDerivedExpression()) {
- preVisitVisitor(obj);
- postVisitVisitor(obj);
- } else {
- super.visit(obj);
- }
- }
-
}
private Collection<Aggregate> aggregates;
@@ -77,12 +62,6 @@
}
}
- public void visit(DerivedColumn obj) {
- if (this.groupingSymbols != null && obj.isDerivedExpression()) {
- this.groupingSymbols.add(obj.getExpression());
- }
- }
-
public void visit(ElementSymbol obj) {
if (this.groupingSymbols != null) {
this.groupingSymbols.add(obj);
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -84,7 +84,7 @@
}
public void visit(DerivedColumn obj) {
- validateExpression(obj);
+ validateExpression(obj.getExpression());
}
public void visit(CaseExpression obj) {
Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -63,7 +63,7 @@
import com.metamatrix.query.sql.lang.MatchCriteria;
import com.metamatrix.query.sql.lang.NotCriteria;
import com.metamatrix.query.sql.lang.Option;
-import com.metamatrix.query.sql.lang.OrderBy;
+import com.metamatrix.query.sql.lang.OrderByItem;
import com.metamatrix.query.sql.lang.Query;
import com.metamatrix.query.sql.lang.QueryCommand;
import com.metamatrix.query.sql.lang.Select;
@@ -88,14 +88,13 @@
import com.metamatrix.query.sql.symbol.AbstractCaseExpression;
import com.metamatrix.query.sql.symbol.Aggregate;
import com.metamatrix.query.sql.symbol.Constant;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
-import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.Function;
import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.sql.symbol.Reference;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
-import com.metamatrix.query.sql.util.SymbolMap;
+import com.metamatrix.query.sql.symbol.TypedLanguageObject;
import com.metamatrix.query.sql.visitor.AggregateSymbolCollectorVisitor;
import com.metamatrix.query.sql.visitor.CommandCollectorVisitor;
import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
@@ -158,18 +157,12 @@
public void visit(GroupBy obj) {
// Get list of all group by IDs
- List groupBySymbols = obj.getSymbols();
+ List<Expression> groupBySymbols = obj.getSymbols();
validateSortable(groupBySymbols);
- Iterator symbolIter = groupBySymbols.iterator();
- while(symbolIter.hasNext()) {
- SingleElementSymbol symbol = (SingleElementSymbol)symbolIter.next();
- if(symbol instanceof DerivedColumn) {
- DerivedColumn exprSymbol = (DerivedColumn) symbol;
- Expression expr = exprSymbol.getExpression();
- if(! (expr instanceof Function || expr instanceof AbstractCaseExpression)) {
- handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.Expr_in_GROUP_BY_must_be_elem_func_case", expr), expr); //$NON-NLS-1$
- }
- }
+ for (Expression expr : groupBySymbols) {
+ if(! (expr instanceof ElementSymbol || expr instanceof Function || expr instanceof AbstractCaseExpression)) {
+ handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.Expr_in_GROUP_BY_must_be_elem_func_case", expr), expr); //$NON-NLS-1$
+ }
}
}
@@ -193,8 +186,9 @@
validateInsert(obj);
}
- public void visit(OrderBy obj) {
- validateSortable(obj.getVariables());
+ @Override
+ public void visit(OrderByItem obj) {
+ validateSortable(obj.getSortKey());
}
public void visit(Query obj) {
@@ -339,14 +333,14 @@
// set state command on this may contain translate criteria
this.transCommand = obj.getCommand();
- Collection projSymbols = transCommand.getProjectedSymbols();
+ List<DerivedColumn> projSymbols = transCommand.getProjectedSymbols();
//The command execution should result is a value that is assigned to the variable
// there cannot be more than one column in its results
if(projSymbols.size() != 1) {
handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0013), obj);
} else {
- SingleElementSymbol value = (SingleElementSymbol) projSymbols.iterator().next();
+ DerivedColumn value = projSymbols.get(0);
Class valueType = value.getType();
Class varType = variable.getType();
if(!varType.equals(valueType)) {
@@ -617,17 +611,19 @@
* and ORDER BY.
* @param symbols List of SingleElementSymbol
*/
- protected void validateSortable(List symbols) {
- Iterator iter = symbols.iterator();
- while(iter.hasNext()) {
- SingleElementSymbol symbol = (SingleElementSymbol) iter.next();
- if (isNonComparable(symbol)) {
- handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0026, symbol), symbol);
- }
+ protected void validateSortable(List<? extends TypedLanguageObject> symbols) {
+ for (TypedLanguageObject typedLanguageObject : symbols) {
+ validateSortable(typedLanguageObject);
}
}
- public static boolean isNonComparable(Expression symbol) {
+ private void validateSortable(TypedLanguageObject symbol) {
+ if (isNonComparable(symbol)) {
+ handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0026, symbol), symbol);
+ }
+ }
+
+ public static boolean isNonComparable(TypedLanguageObject symbol) {
return DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(symbol.getType()));
}
@@ -704,10 +700,9 @@
Set<Expression> groupSymbols = null;
if(groupBy != null) {
groupSymbols = new HashSet<Expression>();
- for (final Iterator iterator = groupBy.getSymbols().iterator(); iterator.hasNext();) {
- final SingleElementSymbol element = (SingleElementSymbol)iterator.next();
- groupSymbols.add(SymbolMap.getExpression(element));
- }
+ for (Expression expression : groupBy.getSymbols()) {
+ groupSymbols.add(expression);
+ }
}
// Validate HAVING, if it exists
@@ -717,11 +712,8 @@
}
// Validate SELECT
- List projectedSymbols = select.getProjectedSymbols();
- Iterator symbolIter = projectedSymbols.iterator();
- while(symbolIter.hasNext()) {
- SingleElementSymbol symbol = (SingleElementSymbol) symbolIter.next();
- AggregateValidationVisitor.validate(symbol, visitor);
+ for (DerivedColumn column : select.getProjectedSymbols()) {
+ AggregateValidationVisitor.validate(column, visitor);
}
// Move items to this report
@@ -874,13 +866,13 @@
* @since 4.2
*/
protected void validateSelectInto(Query query) {
- List symbols = query.getSelect().getProjectedSymbols();
+ List<DerivedColumn> symbols = query.getSelect().getProjectedSymbols();
GroupSymbol intoGroup = query.getInto().getGroup();
validateInto(query, symbols, intoGroup);
}
private void validateInto(LanguageObject query,
- List symbols,
+ List<DerivedColumn> symbols,
GroupSymbol intoGroup) {
try {
List elementIDs = getMetadata().getElementIDsInGroupID(intoGroup.getMetadataID());
@@ -892,7 +884,7 @@
}
for (int symbolNum = 0; symbolNum < symbols.size(); symbolNum++) {
- SingleElementSymbol symbol = (SingleElementSymbol)symbols.get(symbolNum);
+ DerivedColumn symbol = symbols.get(symbolNum);
Object elementID = elementIDs.get(symbolNum);
// Check if supports updates
if (!getMetadata().elementSupports(elementID, SupportConstants.Element.UPDATE)) {
@@ -1037,7 +1029,7 @@
*/
public void visit(DynamicCommand obj) {
if (obj.getIntoGroup() != null) {
- validateInto(obj, obj.getAsColumns(), obj.getIntoGroup());
+ validateInto(obj, ResolverUtil.convertToDerivedColumns(obj.getAsColumns()), obj.getIntoGroup());
}
if (!CommandCollectorVisitor.getCommands(obj).isEmpty()) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.assignment_subquery"), obj); //$NON-NLS-1$
Modified: branches/symbol_refactoring_61/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj 2009-03-03 19:50:13 UTC (rev 533)
@@ -1485,9 +1485,14 @@
String name = null;
if (aliasToken == null) {
if(expression instanceof ElementSymbol) {
- name = ((ElementSymbol)expression).getShortName();
+ name = ((ElementSymbol)expression).getName();
} else {
- name = generateFunctionName(info, null);
+ String aggName = null;
+ if (expression instanceof Aggregate) {
+ Aggregate agg = (Aggregate)expression;
+ aggName = agg.getAggregateFunction();
+ }
+ name = generateFunctionName(info, aggName);
}
} else {
name = validateAlias(aliasToken.image);
@@ -2224,42 +2229,32 @@
*/
OrderBy orderby(ParseInfo info) :
{
- Token id = null;
+ Expression id = null;
Token type = null;
OrderBy orderby = new OrderBy();
boolean ascending = true;
}
{
<ORDER> <BY>
- (id=<VARIABLE> | id=<STRINGVAL> | id=<INTEGERVAL>) [<ASC> | type=<DESC>]
+ id=expression(info) [<ASC> | type=<DESC>]
{
ascending = true;
if(type != null) {
ascending = false;
type=null;
}
- if (StringUtil.isDigits(id.image)){
- orderby.addVariable(new ElementSymbol(id.image), ascending);
- }
- else{
- orderby.addVariable(new ElementSymbol(validateMetadataID(id.image)), ascending);
- }
+ orderby.addVariable(id, ascending);
}
(<COMMA>
- (id=<VARIABLE> | id=<STRINGVAL> | id=<INTEGERVAL>) [<ASC> | type=<DESC>]
+ id=expression(info) [<ASC> | type=<DESC>]
{
- ascending = true;
- if(type != null) {
- ascending = false;
- type=null;
- }
- if (StringUtil.isDigits(id.image)){
- orderby.addVariable(new ElementSymbol(id.image), ascending);
- }
- else{
- orderby.addVariable(new ElementSymbol(validateMetadataID(id.image)), ascending);
- }
- }
+ ascending = true;
+ if(type != null) {
+ ascending = false;
+ type=null;
+ }
+ orderby.addVariable(id, ascending);
+ }
)*
{
return orderby;
Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -454,7 +454,7 @@
String sql = "SELECT pm1.g1.e1, e2, pm1.g1.e3 AS a, e4 AS b FROM pm1.g1"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "pm1.g1.e2", "a", "b" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "e2", "a", "b" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
@@ -465,7 +465,7 @@
String sql = "SELECT x.e1, e2, x.e3 AS a, e4 AS b FROM pm1.g1 AS x"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "x.e1", "x.e2", "a", "b" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ helpCheckSelect(resolvedQuery, new String[] { "x.e1", "e2", "a", "b" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "x.e1", "x.e2", "x.e3", "x.e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
@@ -553,7 +553,8 @@
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat2.cat3.g1.e1 FROM cat2.cat3.g1"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(resolvedQuery, new String[] { "cat2.cat3.g1.e1" }); //$NON-NLS-1$
+ helpCheckElements(resolvedQuery.getSelect(), new String[] {"pm1.cat1.cat2.cat3.g1.e1"}, new String[] {"pm1.cat1.cat2.cat3.g1.e1"}); //$NON-NLS-1$ //$NON-NLS-2$
}
/** defect 12536 */
@@ -561,7 +562,7 @@
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat3.g1.e1 FROM cat2.cat3.g1"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(resolvedQuery, new String[] { "cat3.g1.e1" }); //$NON-NLS-1$
}
/** defect 12536 */
@@ -569,7 +570,7 @@
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat3.g1.e1 FROM cat2.cat3.g1, cat1.g2"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(resolvedQuery, new String[] { "cat3.g1.e1" }); //$NON-NLS-1$
}
/** defect 12536 */
@@ -577,14 +578,14 @@
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat3.g1.e1, cat1.g2.e1 FROM cat2.cat3.g1, cat1.g2"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1", "pm1.cat1.g2.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "cat3.g1.e1", "cat1.g2.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testPartiallyQualifiedElement5() {
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat3.g1.e1, cat1.g2.e1 FROM myvdb.pm1.cat1.cat2.cat3.g1, pm1.cat1.g2"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1", "pm1.cat1.g2.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "cat3.g1.e1", "cat1.g2.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
}
/** defect 12536 */
@@ -592,14 +593,16 @@
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat3.g1.e1, e2 FROM cat2.cat3.g1"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1", "pm1.cat1.cat2.cat3.g1.e2" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "cat3.g1.e1", "e2" }); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testPartiallyQualifiedElement7() {
metadata = FakeMetadataFactory.example3();
String sql = "SELECT cat3.g1.e1, cat2.cat3.g1.e2, g1.e3 FROM pm1.cat1.cat2.cat3.g1"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.cat1.cat2.cat3.g1.e1", "pm1.cat1.cat2.cat3.g1.e2", "pm1.cat1.cat2.cat3.g1.e3" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpCheckSelect(resolvedQuery, new String[] { "cat3.g1.e1", "cat2.cat3.g1.e2", "g1.e3" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpCheckElements(resolvedQuery.getSelect(), new String[] { "pm1.cat1.cat2.cat3.g1.e1", "pm1.cat1.cat2.cat3.g1.e2", "pm1.cat1.cat2.cat3.g1.e3" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ new String[] { "pm1.cat1.cat2.cat3.g1.e1", "pm1.cat1.cat2.cat3.g1.e2", "pm1.cat1.cat2.cat3.g1.e3" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testFailPartiallyQualifiedGroup1() {
@@ -655,7 +658,7 @@
public void testElementWithVDB() {
String sql = "SELECT myvdb.pm1.g1.e1 FROM pm1.g1"; //$NON-NLS-1$
Query resolvedQuery = (Query) helpResolve(sql);
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(resolvedQuery, new String[] { "myvdb.pm1.g1.e1" }); //$NON-NLS-1$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1" }, //$NON-NLS-1$
new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$
@@ -736,7 +739,7 @@
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[] { "e1", "expr", "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$
@@ -752,7 +755,7 @@
public void testMultipleIdenticalElements() {
Query resolvedQuery = (Query) helpResolve("SELECT e1, e1 FROM pm1.g1"); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "e1", "e1" }); //$NON-NLS-1$ //$NON-NLS-2$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1", "pm1.g1.e1" }, //$NON-NLS-1$ //$NON-NLS-2$
new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
@@ -761,7 +764,7 @@
public void testMultipleIdenticalElements2() {
Query resolvedQuery = (Query) helpResolve("SELECT e1, pm1.g1.e1 FROM pm1.g1"); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1", "pm1.g1.e1" }, //$NON-NLS-1$ //$NON-NLS-2$
new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
@@ -770,7 +773,7 @@
public void testMultipleIdenticalElements3() {
Query resolvedQuery = (Query) helpResolve("SELECT e1, e1 as x FROM pm1.g1"); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "x" }); //$NON-NLS-1$ //$NON-NLS-2$
+ helpCheckSelect(resolvedQuery, new String[] { "e1", "x" }); //$NON-NLS-1$ //$NON-NLS-2$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1", "pm1.g1.e1" }, //$NON-NLS-1$ //$NON-NLS-2$
new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$
@@ -957,7 +960,7 @@
public void testSubquery1() {
Query resolvedQuery = (Query) helpResolve("SELECT e1 FROM pm1.g1, (SELECT pm1.g2.e1 AS x FROM pm1.g2) AS y WHERE e1 = x"); //$NON-NLS-1$
helpCheckFrom(resolvedQuery, new String[] { "pm1.g1", "y" }); //$NON-NLS-1$ //$NON-NLS-2$
- helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(resolvedQuery, new String[] { "e1" }); //$NON-NLS-1$
helpCheckElements(resolvedQuery.getSelect(),
new String[] { "pm1.g1.e1" }, //$NON-NLS-1$
new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$
@@ -1287,8 +1290,8 @@
helpCheckFrom(outerQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
helpCheckFrom(innerQuery, new String[] { "pm4.g1" }); //$NON-NLS-1$
- helpCheckSelect(outerQuery, new String[] { "pm1.g1.e1" }); //$NON-NLS-1$
- helpCheckSelect(innerQuery, new String[] { "pm4.g1.e2" }); //$NON-NLS-1$
+ helpCheckSelect(outerQuery, new String[] { "e1" }); //$NON-NLS-1$
+ helpCheckSelect(innerQuery, new String[] { "e2" }); //$NON-NLS-1$
helpCheckElements(outerQuery.getSelect(),
new String[] { "pm1.g1.e1" }, //$NON-NLS-1$
new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$
@@ -1338,8 +1341,8 @@
helpCheckFrom(outerQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
helpCheckFrom(innerQuery, new String[] { "pm4.g1" }); //$NON-NLS-1$
- helpCheckSelect(outerQuery, new String[] { "pm1.g1.e1" }); //$NON-NLS-1$
- helpCheckSelect(innerQuery, new String[] { "pm4.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(outerQuery, new String[] { "e1" }); //$NON-NLS-1$
+ helpCheckSelect(innerQuery, new String[] { "e1" }); //$NON-NLS-1$
helpCheckElements(outerQuery.getSelect(),
new String[] { "pm1.g1.e1" }, //$NON-NLS-1$
new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$
@@ -2713,7 +2716,7 @@
Query outerQuery = (Query) this.helpResolveSubquery(sql, new String[0]);
helpCheckFrom(outerQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$
- helpCheckSelect(outerQuery, new String[] { "pm1.g1.e1" }); //$NON-NLS-1$
+ helpCheckSelect(outerQuery, new String[] { "e1" }); //$NON-NLS-1$
helpCheckElements(outerQuery.getSelect(),
new String[] { "pm1.g1.e1" }, //$NON-NLS-1$
new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$
@@ -3737,20 +3740,18 @@
public void testDefect18832() {
String sql = "SELECT * from (SELECT null as a, e1 FROM pm1.g1) b"; //$NON-NLS-1$
Command c = helpResolve(sql);
- List projectedSymbols = c.getProjectedSymbols();
+ List<DerivedColumn> projectedSymbols = c.getProjectedSymbols();
for(int i=0; i< projectedSymbols.size(); i++) {
- ElementSymbol symbol = (ElementSymbol)projectedSymbols.get(i);
- assertTrue(!symbol.getType().equals(DataTypeManager.DefaultDataClasses.NULL));
+ assertTrue(!projectedSymbols.get(i).getType().equals(DataTypeManager.DefaultDataClasses.NULL));
}
}
public void testDefect18832_2() {
String sql = "SELECT a.*, b.* from (SELECT null as a, e1 FROM pm1.g1) a, (SELECT e1 FROM pm1.g1) b"; //$NON-NLS-1$
Command c = helpResolve(sql);
- List projectedSymbols = c.getProjectedSymbols();
+ List<DerivedColumn> projectedSymbols = c.getProjectedSymbols();
for(int i=0; i< projectedSymbols.size(); i++) {
- ElementSymbol symbol = (ElementSymbol)projectedSymbols.get(i);
- assertTrue(!symbol.getType().equals(DataTypeManager.DefaultDataClasses.NULL));
+ assertTrue(!projectedSymbols.get(i).getType().equals(DataTypeManager.DefaultDataClasses.NULL));
}
}
@@ -4362,12 +4363,12 @@
StoredProcedure proc = (StoredProcedure)helpResolve(query);
- List projected = proc.getProjectedSymbols();
+ List<DerivedColumn> projected = proc.getProjectedSymbols();
assertEquals(2, projected.size());
- for (Iterator i = projected.iterator(); i.hasNext();) {
- ElementSymbol symbol = (ElementSymbol)i.next();
+ for (DerivedColumn derivedColumn : projected) {
+ ElementSymbol symbol = (ElementSymbol)derivedColumn.getExpression();
assertNotNull(symbol.getGroupSymbol());
}
}
@@ -4648,7 +4649,7 @@
private void helpTestOrderBy(OrderBy orderBy, int[] expectedPositions) {
assertEquals(expectedPositions.length, orderBy.getVariableCount());
for (int i = 0; i < expectedPositions.length; i++) {
- ElementSymbol symbol = (ElementSymbol)orderBy.getSortOrder().get(0).getSortKey();
+ ElementSymbol symbol = (ElementSymbol)orderBy.getSortOrder().get(i).getSortKey();
TempMetadataID tid = (TempMetadataID)symbol.getMetadataID();
assertEquals(expectedPositions[i], tid.getPosition());
}
Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java 2009-03-03 17:26:43 UTC (rev 532)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java 2009-03-03 19:50:13 UTC (rev 533)
@@ -55,6 +55,7 @@
import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.SPParameter;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.sql.visitor.SQLStringVisitor;
@@ -1952,7 +1953,7 @@
ElementSymbol e1 = new ElementSymbol("#temp.e1");//$NON-NLS-1$
e1.setType(DataTypeManager.DefaultDataClasses.INTEGER);
- store.addTempGroup("#temp", Arrays.asList(e1), false, true); //$NON-NLS-1$
+ store.addTempGroup("#temp", Arrays.asList(new DerivedColumn(e1)), false, true); //$NON-NLS-1$
QueryMetadataInterface metadata = new TempMetadataAdapter(fakeMetadata, store);
More information about the teiid-commits
mailing list