[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