[teiid-commits] teiid SVN: r534 - in branches/symbol_refactoring_61/engine/src: main/java/com/metamatrix/query/processor and 13 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Mar 3 18:05:42 EST 2009


Author: shawkins
Date: 2009-03-03 18:05:42 -0500 (Tue, 03 Mar 2009)
New Revision: 534

Modified:
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/dqp/internal/process/RequestWorkItem.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/ProcessorPlan.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/DupRemoveNode.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/SortUtility.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/rewriter/QueryRewriter.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/Select.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/SetQuery.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Aggregate.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/visitor/EvaluatableVisitor.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/ExpressionMappingVisitor.java
   branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/UpdateValidationVisitor.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/processor/FakeDataManager.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestAliasSymbol.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestBatchedUpdateCommand.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestQuery.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/proc/TestAssignmentStatement.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestAggregateSymbolCollectorVisitor.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java
   branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestStaticSymbolMappingVisitor.java
Log:
basic rewrite tests are passing

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/dqp/internal/process/RequestWorkItem.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/dqp/internal/process/RequestWorkItem.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/dqp/internal/process/RequestWorkItem.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -81,7 +81,6 @@
 import com.metamatrix.query.sql.lang.Option;
 import com.metamatrix.query.sql.lang.SPParameter;
 import com.metamatrix.query.sql.lang.StoredProcedure;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
 import com.metamatrix.query.sql.symbol.Symbol;
 
 public class RequestWorkItem extends AbstractWorkItem {

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/ProcessorPlan.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/ProcessorPlan.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/ProcessorPlan.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -28,6 +28,7 @@
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.MetaMatrixProcessingException;
 import com.metamatrix.common.buffer.*;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
 import com.metamatrix.query.util.CommandContext;
 
 /**
@@ -75,7 +76,7 @@
      * Get list of resolved elements describing output columns for this plan.
      * @return List of SingleElementSymbol
      */
-    List getOutputElements();
+    List<DerivedColumn> getOutputElements();
     
     /**
      * Get the processor context, which can be modified.
@@ -121,5 +122,5 @@
      * @return List of ProcessorPlan 
      * @since 4.2
      */
-    Collection getChildPlans();
+    Collection<ProcessorPlan> getChildPlans();
 }

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/DupRemoveNode.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/DupRemoveNode.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/DupRemoveNode.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -36,10 +36,6 @@
 		super(nodeID);
 	}
 	
-    public void reset() {
-        super.reset();
-    }
-    
 	public void open() 
 		throws MetaMatrixComponentException, MetaMatrixProcessingException {
 

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/SortUtility.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/SortUtility.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/processor/relational/SortUtility.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -40,7 +40,6 @@
 import com.metamatrix.common.buffer.BufferManager.TupleSourceStatus;
 import com.metamatrix.common.buffer.BufferManager.TupleSourceType;
 import com.metamatrix.core.util.Assertion;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
 import com.metamatrix.query.util.TypeRetrievalUtil;
 
 /**

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 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -261,6 +261,7 @@
         // Walk through elements of order by
         for (OrderByItem orderByItem : elements) {
         	Collection<ElementSymbol> symbols = ElementCollectorVisitor.getElements(orderByItem.getSortKey(), false);
+        	//check for unsigned int
         	if (symbols.isEmpty()) {
         		if (orderByItem.getSortKey() instanceof Constant) {
         			Constant c = (Constant)orderByItem.getSortKey();
@@ -269,13 +270,15 @@
         				if (value < 1 || value > knownElements.size()) {
         					throw new QueryResolverException("Invalid order by ordinal");
         				}
-        				orderByItem.setOrdinalPosition(value);
+        				orderByItem.setOrdinalPosition(value - 1);
         				orderByItem.setType(knownElements.get(value - 1).getType());
         				continue;
         			}
         		}
         		throw new QueryResolverException("Invalid order by expression");
         	}
+        	//resolve each of the symbols present - they must come from the select clause
+        	//TODO: SQL 2008 allows for ordering outside of the select clause...
         	for (ElementSymbol elementSymbol : symbols) {
 	            DerivedColumn matchedSymbol = null;
 	            String symbolName = elementSymbol.getName();
@@ -346,7 +349,7 @@
         }
     }
 
-	private static void resolveOrderByItem(int position,
+	public static void resolveOrderByItem(int position,
 			ElementSymbol elementSymbol, DerivedColumn matchedSymbol) {
 		TempMetadataID tempMetadataID = new TempMetadataID(matchedSymbol.getName(), matchedSymbol.getType());
 		tempMetadataID.setPosition(position);

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -96,6 +96,7 @@
 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.ProcedureContainer;
 import com.metamatrix.query.sql.lang.Query;
 import com.metamatrix.query.sql.lang.QueryCommand;
@@ -134,11 +135,12 @@
 import com.metamatrix.query.sql.symbol.GroupSymbol;
 import com.metamatrix.query.sql.symbol.ScalarSubquery;
 import com.metamatrix.query.sql.symbol.SearchedCaseExpression;
-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.CorrelatedVariableSubstitutionVisitor;
 import com.metamatrix.query.sql.visitor.CriteriaTranslatorVisitor;
 import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
+import com.metamatrix.query.sql.visitor.EvaluatableVisitor;
 import com.metamatrix.query.sql.visitor.EvaluateExpressionVisitor;
 import com.metamatrix.query.sql.visitor.ExpressionMappingVisitor;
 import com.metamatrix.query.sql.visitor.PredicateCollectorVisitor;
@@ -163,12 +165,12 @@
     private static final Map<String, String> ALIASED_FUNCTIONS = new HashMap<String, String>();
     
     static {
-    	ALIASED_FUNCTIONS.put("lower", SourceSystemFunctions.LCASE);
-    	ALIASED_FUNCTIONS.put("upper", SourceSystemFunctions.UCASE);
-    	ALIASED_FUNCTIONS.put("cast", SourceSystemFunctions.CONVERT);
-    	ALIASED_FUNCTIONS.put("nvl", SourceSystemFunctions.IFNULL);
-    	ALIASED_FUNCTIONS.put("||", SourceSystemFunctions.CONCAT);
-    	ALIASED_FUNCTIONS.put("chr", SourceSystemFunctions.CHAR);
+    	ALIASED_FUNCTIONS.put("lower", SourceSystemFunctions.LCASE); //$NON-NLS-1$
+    	ALIASED_FUNCTIONS.put("upper", SourceSystemFunctions.UCASE); //$NON-NLS-1$
+    	ALIASED_FUNCTIONS.put("cast", SourceSystemFunctions.CONVERT); //$NON-NLS-1$
+    	ALIASED_FUNCTIONS.put("nvl", SourceSystemFunctions.IFNULL); //$NON-NLS-1$
+    	ALIASED_FUNCTIONS.put("||", SourceSystemFunctions.CONCAT); //$NON-NLS-1$
+    	ALIASED_FUNCTIONS.put("chr", SourceSystemFunctions.CHAR); //$NON-NLS-1$
     }
 
 	private QueryRewriter() { }
@@ -693,79 +695,7 @@
             } 
         }
 
-        if (query.getGroupBy() != null) {
-            // we check for group by expressions here to create an ANSI SQL plan
-            boolean hasExpression = false;
-            for (final Iterator iterator = query.getGroupBy().getSymbols().iterator(); !hasExpression && iterator.hasNext();) {
-                hasExpression = iterator.next() instanceof DerivedColumn;
-            } 
-            if (hasExpression) {
-                Select select = query.getSelect();
-                GroupBy groupBy = query.getGroupBy();
-                query.setGroupBy(null);
-                Criteria having = query.getHaving();
-                query.setHaving(null);
-                OrderBy orderBy = query.getOrderBy();
-                query.setOrderBy(null);
-                Limit limit = query.getLimit();
-                query.setLimit(null);
-                Into into = query.getInto();
-                query.setInto(null);
-                Set<Expression> newSelectColumns = new HashSet<Expression>();
-                for (final Iterator iterator = groupBy.getSymbols().iterator(); iterator.hasNext();) {
-                    newSelectColumns.add(SymbolMap.getExpression((SingleElementSymbol)iterator.next()));
-                }
-                Set<Aggregate> aggs = new HashSet<Aggregate>();
-                aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(select, true));
-                if (having != null) {
-                    aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(having, true));
-                }
-                for (Aggregate aggregateSymbol : aggs) {
-                    if (aggregateSymbol.getExpression() != null) {
-                        Expression expr = aggregateSymbol.getExpression();
-                        newSelectColumns.add(SymbolMap.getExpression(expr));
-                    }
-                }
-                Select innerSelect = new Select();
-                int index = 0;
-                for (Expression expr : newSelectColumns) {
-                    if (expr instanceof SingleElementSymbol) {
-                        innerSelect.addSymbol((SingleElementSymbol)expr);
-                    } else {
-                        innerSelect.addSymbol(new DerivedColumn("EXPR" + index++ , expr)); //$NON-NLS-1$
-                    }
-                }
-                query.setSelect(innerSelect);
-                Query outerQuery = null;
-                try {
-                    outerQuery = QueryRewriter.createInlineViewQuery(new GroupSymbol("X"), query, metadata, query.getSelect().getProjectedSymbols()); //$NON-NLS-1$
-                } catch (QueryMetadataException err) {
-                    throw new QueryValidatorException(err, err.getMessage());
-                } catch (QueryResolverException err) {
-                    throw new QueryValidatorException(err, err.getMessage());
-                } catch (MetaMatrixComponentException err) {
-                    throw new QueryValidatorException(err, err.getMessage());
-                }
-                Iterator iter = outerQuery.getSelect().getProjectedSymbols().iterator();
-                HashMap<Expression, SingleElementSymbol> expressionMap = new HashMap<Expression, SingleElementSymbol>();
-                for (SingleElementSymbol symbol : (List<SingleElementSymbol>)query.getSelect().getProjectedSymbols()) {
-                    expressionMap.put((Expression)SymbolMap.getExpression(symbol).clone(), (SingleElementSymbol)iter.next());
-                }
-                ExpressionMappingVisitor.mapExpressions(groupBy, expressionMap, true);
-                outerQuery.setGroupBy(groupBy);
-                ExpressionMappingVisitor.mapExpressions(having, expressionMap, true);
-                outerQuery.setHaving(having);
-                ExpressionMappingVisitor.mapExpressions(orderBy, expressionMap, true);
-                outerQuery.setOrderBy(orderBy);
-                outerQuery.setLimit(limit);
-                ExpressionMappingVisitor.mapExpressions(select, expressionMap, true);
-                outerQuery.setSelect(select);
-                outerQuery.setInto(into);
-                outerQuery.setOption(query.getOption());
-                query = outerQuery;
-                rewriteExpressions(innerSelect, procCommand, metadata, context);
-            }
-        }
+        query = rewriteGroupBy(query, procCommand, metadata, context);
 
         // Rewrite having
         Criteria having = query.getHaving();
@@ -776,7 +706,7 @@
         rewriteExpressions(query.getSelect(), procCommand, metadata, context);
 
         if (query.getOrderBy() != null && !query.getIsXML()) {
-            makeSelectUnique(query, true);
+            makeSelectUnique(query);
             rewriteOrderBy(query, procCommand, metadata, context);
         }
         
@@ -790,6 +720,87 @@
         
         return query;
     }
+
+	private static Query rewriteGroupBy(Query query, final Command procCommand,
+			final QueryMetadataInterface metadata, final CommandContext context)
+			throws QueryValidatorException {
+		if (query.getGroupBy() == null) {
+			return query;
+		}
+        GroupBy groupBy = query.getGroupBy();
+        // we check for group by expressions here to create an ANSI SQL plan
+        boolean hasExpression = false;
+        Set<Expression> newSelectColumns = new HashSet<Expression>();
+        for (Expression expression : groupBy.getSymbols()) {
+            newSelectColumns.add(expression);
+            hasExpression |= !(expression instanceof ElementSymbol);
+		}
+        if (!hasExpression) {
+        	return query;
+        }
+        //create an inline view to represent the group by expressions
+        Select select = query.getSelect();
+        query.setGroupBy(null);
+        Criteria having = query.getHaving();
+        query.setHaving(null);
+        OrderBy orderBy = query.getOrderBy();
+        query.setOrderBy(null);
+        Limit limit = query.getLimit();
+        query.setLimit(null);
+        Into into = query.getInto();
+        query.setInto(null);
+        Set<Aggregate> aggs = new HashSet<Aggregate>();
+        aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(select, true));
+        if (having != null) {
+            aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(having, true));
+        }
+        for (Aggregate aggregateSymbol : aggs) {
+            if (aggregateSymbol.getExpression() != null) {
+                newSelectColumns.add(aggregateSymbol.getExpression());
+            }
+        }
+        Select innerSelect = new Select();
+        int index = 0;
+        for (Expression expr : newSelectColumns) {
+            if (expr instanceof ElementSymbol) {
+                innerSelect.addSymbol(new DerivedColumn((ElementSymbol)expr));
+            } else {
+                innerSelect.addSymbol(new DerivedColumn("EXPR" + index++ , expr)); //$NON-NLS-1$
+            }
+        }
+        query.setSelect(innerSelect);
+        Query outerQuery = null;
+        try {
+            outerQuery = QueryRewriter.createInlineViewQuery(new GroupSymbol("X"), query, metadata, query.getSelect().getProjectedSymbols()); //$NON-NLS-1$
+        } catch (QueryMetadataException err) {
+            throw new QueryValidatorException(err, err.getMessage());
+        } catch (QueryResolverException err) {
+            throw new QueryValidatorException(err, err.getMessage());
+        } catch (MetaMatrixComponentException err) {
+            throw new QueryValidatorException(err, err.getMessage());
+        }
+        Iterator<DerivedColumn> iter = outerQuery.getSelect().getProjectedSymbols().iterator();
+        HashMap<Expression, Expression> expressionMap = new HashMap<Expression, Expression>();
+        for (DerivedColumn symbol : query.getProjectedSymbols()) {
+        	Expression expr = iter.next().getExpression();
+        	Assertion.assertTrue(expr instanceof ElementSymbol);
+            expressionMap.put((Expression)symbol.getExpression().clone(), expr);
+        }
+        ExpressionMappingVisitor.mapExpressions(groupBy, expressionMap, true);
+        outerQuery.setGroupBy(groupBy);
+        ExpressionMappingVisitor.mapExpressions(having, expressionMap, true);
+        outerQuery.setHaving(having);
+        ExpressionMappingVisitor.mapExpressions(orderBy, expressionMap, true);
+        outerQuery.setOrderBy(orderBy);
+        outerQuery.setLimit(limit);
+        ExpressionMappingVisitor.mapExpressions(select, expressionMap, true);
+        outerQuery.setSelect(select);
+        outerQuery.setInto(into);
+        outerQuery.setOption(query.getOption());
+        query = outerQuery;
+        rewriteExpressions(innerSelect, procCommand, metadata, context);
+		return query;
+	}
     
     private static void rewriteExpressions(LanguageObject obj,
                                            final Command procCommand,
@@ -832,7 +843,7 @@
         if (orderBy == null) {
             return;
         }
-        List projectedSymbols = null;
+        final List<DerivedColumn> projectedSymbols;
         if (query instanceof Query) {
             if (((Query)query).getIsXML()) {
                 return;
@@ -841,35 +852,57 @@
         } else {
             projectedSymbols = query.getProjectedSymbols();
         }
-        if (orderBy.isInPlanForm()) {
-            rewriteExpressions(orderBy, procCommand, metadata, context);
-        }
+        rewriteExpressions(orderBy, procCommand, metadata, context);
 
         OrderBy newOrderBy = new OrderBy();
         HashSet<Expression> previousExpressions = new HashSet<Expression>();
         
-        for (int i = 0; i < orderBy.getVariableCount(); i++) {
-            SingleElementSymbol querySymbol = orderBy.getVariable(i);
-            if (!orderBy.isInPlanForm()) { 
-                //get the order by item from the select clause, the variable must be an element symbol
-                int index = ((TempMetadataID)((ElementSymbol)querySymbol).getMetadataID()).getPosition();
-                querySymbol = (SingleElementSymbol)((SingleElementSymbol)projectedSymbols.get(index)).clone();
-            } 
-            Expression expr = SymbolMap.getExpression(querySymbol);
+        for (OrderByItem orderByItem : orderBy.getSortOrder()) {
+        	/*
+        	 * we are now assured that the derived column names are unique
+        	 * so we can switch to using them
+        	 */
+        	if (orderByItem.getOrdinalPosition() >= 0) {
+        		DerivedColumn column = projectedSymbols.get(orderByItem.getOrdinalPosition());
+        		ElementSymbol expression = new ElementSymbol(column.getName());
+        		ResolverUtil.resolveOrderByItem(orderByItem.getOrdinalPosition(), expression, column);
+        		orderByItem.setSortKey(expression);
+        		orderByItem.setOrdinalPosition(-1);
+        	}
+    		for (ElementSymbol symbol : ElementCollectorVisitor.getElements(orderByItem.getSortKey(), false)) {
+    			TempMetadataID tid = (TempMetadataID)symbol.getMetadataID();
+    			symbol.setName(projectedSymbols.get(tid.getPosition()).getName());
+			}
+        	
+        	Expression expr = orderByItem.getSortKey();
+
+        	//ensure we have a unique set of order by expressions
             if (!previousExpressions.add(expr)) {
                 continue;
             }
             
-            if (query instanceof Query && EvaluateExpressionVisitor.isFullyEvaluatable(expr, true)) {
-                continue;
+            //check for constant order by expressions
+            if (query instanceof Query) {
+	            EvaluatableVisitor visitor = new EvaluatableVisitor(false, false) {
+	            	@Override
+	            	public void visit(ElementSymbol obj) {
+	            		DerivedColumn dc = projectedSymbols.get(((TempMetadataID)obj.getMetadataID()).getPosition());
+	            		if (!EvaluateExpressionVisitor.willBecomeConstant(dc.getExpression())) {
+	            			evaluationNotPossible();
+	            		}
+	            	}
+	            };
+	            PreOrderNavigator.doVisit(expr, visitor);
+	            if (visitor.isEvaluationPossible()) {
+	            	continue;
+	            }
             }
-            newOrderBy.addVariable((SingleElementSymbol)querySymbol.clone(), orderBy.getOrderType(i).booleanValue());
+        	newOrderBy.addItem(orderByItem);
         }
         
         if (newOrderBy.getVariableCount() == 0) {
             query.setOrderBy(null);
         } else {
-            newOrderBy.setInPlanForm(true);
             query.setOrderBy(newOrderBy);
         }
     }
@@ -887,12 +920,12 @@
         Into into = query.getInto();
         
         try {
-            List allIntoElements = ResolverUtil.resolveElementsInGroup(into.getGroup(), metadata);
+            List<ElementSymbol> allIntoElements = ResolverUtil.resolveElementsInGroup(into.getGroup(), metadata);
             boolean needsView = false;
-            
+            List<DerivedColumn> projectedIntoSymbols = query.getSelect().getProjectedSymbols();
             for (int i = 0; !needsView && i < allIntoElements.size(); i++) {
-                SingleElementSymbol ses = (SingleElementSymbol)allIntoElements.get(i);
-                if (ses.getType() != ((SingleElementSymbol)query.getSelect().getProjectedSymbols().get(i)).getType()) {
+                ElementSymbol ses = allIntoElements.get(i);
+                if (ses.getType() != projectedIntoSymbols.get(i).getType()) {
                     needsView = true;
                 }
             }
@@ -914,16 +947,6 @@
         
     }
 
-    private static void correctProjectedTypes(List actualSymbolTypes,
-                                              Query query) throws QueryValidatorException {
-        
-        List symbols = query.getSelect().getProjectedSymbols();
-        
-        List newSymbols = SetQuery.getTypedProjectedSymbols(symbols, actualSymbolTypes);
-        
-        query.getSelect().setSymbols(newSymbols);
-    } 
-    
 	private static SetQuery rewriteSetQuery(SetQuery setQuery, Command procCommand, QueryMetadataInterface metadata, CommandContext context)
 				 throws QueryValidatorException {
         
@@ -932,7 +955,13 @@
                 if (!(command instanceof Query)) {
                     continue;
                 }
-                correctProjectedTypes(setQuery.getProjectedTypes(), (Query)command);
+                Query query = (Query)command;
+                List<DerivedColumn> symbols = query.getSelect().getProjectedSymbols();
+                
+                List<DerivedColumn> newSymbols = SetQuery.getTypedProjectedSymbols(symbols, setQuery.getProjectedTypes());
+                
+                query.getSelect().setSymbols(newSymbols);
+
             }
             setQuery.setProjectedTypes(null);
         }
@@ -941,7 +970,7 @@
         setQuery.setRightQuery((QueryCommand)rewriteCommand(setQuery.getRightQuery(), procCommand, metadata, context));
 
         if (setQuery.getOrderBy() != null) {
-            makeSelectUnique(setQuery.getProjectedQuery(), true);
+            makeSelectUnique(setQuery.getProjectedQuery());
             rewriteOrderBy(setQuery, procCommand, metadata, context);
         }
         
@@ -2013,7 +2042,7 @@
 		if (function.getName().equalsIgnoreCase(FunctionLibrary.SPACE)) {
 			//change the function into timestampadd
 			Function result = new Function(SourceSystemFunctions.REPEAT,
-					new Expression[] {new Constant(" "), function.getArg(0)});
+					new Expression[] {new Constant(" "), function.getArg(0)}); //$NON-NLS-1$
 			//resolve the function
 			FunctionDescriptor descriptor = 
 	        	FunctionLibraryManager.getFunctionLibrary().findFunction(SourceSystemFunctions.REPEAT, new Class[] { DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.INTEGER});
@@ -2381,14 +2410,14 @@
     private static Query createInlineViewQuery(GroupSymbol group,
                                           QueryCommand nested,
                                           QueryMetadataInterface metadata) throws QueryMetadataException, QueryResolverException, MetaMatrixComponentException {
-        List actualSymbols = ResolverUtil.resolveElementsInGroup(group, metadata);
+        List<ElementSymbol> actualSymbols = ResolverUtil.resolveElementsInGroup(group, metadata);
         return createInlineViewQuery(group, nested, metadata, actualSymbols);
     }
 
     public static Query createInlineViewQuery(GroupSymbol group,
                                                QueryCommand nested,
                                                QueryMetadataInterface metadata,
-                                               List actualSymbols) throws QueryMetadataException,
+                                               List<? extends TypedLanguageObject> actualSymbols) throws QueryMetadataException,
                                                                   QueryResolverException,
                                                                   MetaMatrixComponentException {
         Query query = new Query();
@@ -2400,20 +2429,19 @@
         TempMetadataStore store = new TempMetadataStore();
         TempMetadataAdapter tma = new TempMetadataAdapter(metadata, store);
         Query firstProject = nested.getProjectedQuery(); 
-        makeSelectUnique(firstProject, false);
+        makeSelectUnique(firstProject);
         
         store.addTempGroup(inlineGroup.getName(), nested.getProjectedSymbols());
         inlineGroup.setMetadataID(store.getTempGroupID(inlineGroup.getName()));
         
-        List actualTypes = new ArrayList(nested.getProjectedSymbols().size());
+        List<Class<?>> actualTypes = new ArrayList(nested.getProjectedSymbols().size());
         
-        for (Iterator i = actualSymbols.iterator(); i.hasNext();) {
-            SingleElementSymbol ses = (SingleElementSymbol)i.next();
-            actualTypes.add(ses.getType());
+        for (TypedLanguageObject tlo : actualSymbols) {
+            actualTypes.add(tlo.getType());
         }
-        List selectSymbols = SetQuery.getTypedProjectedSymbols(ResolverUtil.resolveElementsInGroup(inlineGroup, tma), actualTypes);
-        for (final Iterator iterator = selectSymbols.iterator(); iterator.hasNext();) {
-            select.addSymbol((SingleElementSymbol)((SingleElementSymbol)iterator.next()).clone());
+        List<DerivedColumn> selectSymbols = SetQuery.getTypedProjectedSymbols(ResolverUtil.convertToDerivedColumns(ResolverUtil.resolveElementsInGroup(inlineGroup, tma)), actualTypes);
+        for (DerivedColumn derivedColumn : selectSymbols) {
+            select.addSymbol((DerivedColumn)derivedColumn.clone());
         } 
         query.setFrom(from); 
         QueryResolver.resolveCommand(query, tma);
@@ -2428,18 +2456,15 @@
         return query;
     }    
     
-    public static void makeSelectUnique(Query query, boolean expressionSymbolsOnly) {
+    public static void makeSelectUnique(Query query) {
         
-        query.getSelect().setSymbols(query.getSelect().getProjectedSymbols());
+    	List<DerivedColumn> columns = query.getSelect().getProjectedSymbols();
+    	
+        query.getSelect().setSymbols(columns);
         
-        List symbols = query.getSelect().getSymbols();
-        
         HashSet<String> uniqueNames = new HashSet<String>();
         
-        for(int i = 0; i < symbols.size(); i++) {
-            
-            SingleElementSymbol symbol = (SingleElementSymbol)symbols.get(i);
-            
+        for (DerivedColumn symbol : columns) {
             String baseName = symbol.getShortCanonicalName(); 
             String name = baseName;
 
@@ -2451,20 +2476,12 @@
                 name = baseName + '_' + (exprID++);
             }
             
-            if (expressionSymbolsOnly && !(symbol instanceof DerivedColumn)) {
-                continue;
+            if (exprID == 0) {
+            	continue;
             }
             
-            boolean hasAlias = false;
-            // Strip alias if it exists
-            if(symbol instanceof AliasSymbol) {
-                symbol = ((AliasSymbol)symbol).getSymbol();
-                hasAlias = true;
-            }
-            
-            if (((symbol instanceof DerivedColumn) && !hasAlias) || !name.equalsIgnoreCase(baseName)) {
-                symbols.set(i, new AliasSymbol(name, symbol));
-            }
+            symbol.setAlias(true);
+            symbol.setName(name);
         }
     }
 

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 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/OrderByItem.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -37,7 +37,7 @@
 	private Expression sortKey;
 	private OrderSpecification orderingSpecification;
 	//set after resolving is this is a SQL-92 unsigned int
-	private int ordinalPosition;
+	private int ordinalPosition = -1;
 	//set after resolving
 	private Class<?> type;
 	

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Select.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Select.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/Select.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -100,8 +100,8 @@
      * Sets an ordered list of the symbols in the select.
      * @param symbols list of SelectSymbol in SELECT
      */
-    public void setSymbols(List<SelectSymbol> symbols) {
-        this.symbols = symbols;
+    public void setSymbols(List<? extends SelectSymbol> symbols) {
+        this.symbols = new ArrayList<SelectSymbol>(symbols);
     }    
 
     /**

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/SetQuery.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/SetQuery.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/lang/SetQuery.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -126,11 +126,11 @@
         return projectedSymbols;
     }
     
-    public static List<DerivedColumn> getTypedProjectedSymbols(List<DerivedColumn> acutal, List projectedTypes) {
+    public static List<DerivedColumn> getTypedProjectedSymbols(List<DerivedColumn> acutal, List<Class<?>> projectedTypes) {
         List<DerivedColumn> newProject = new ArrayList<DerivedColumn>();
         for (int i = 0; i < acutal.size(); i++) {
             DerivedColumn symbol = acutal.get(i);
-            Class type = (Class)projectedTypes.get(i);
+            Class<?> type = projectedTypes.get(i);
             if (symbol.getType() != type) {
                 Expression expr = symbol.getExpression();
                 

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Aggregate.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Aggregate.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/Aggregate.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -33,6 +33,7 @@
 import com.metamatrix.query.QueryPlugin;
 import com.metamatrix.query.sql.LanguageVisitor;
 import com.metamatrix.query.sql.ReservedWords;
+import com.metamatrix.query.sql.visitor.SQLStringVisitor;
 import com.metamatrix.query.util.ErrorMessageKeys;
 
 /**
@@ -213,5 +214,10 @@
                && this.distinct == other.distinct
                && EquivalenceUtil.areEqual(this.getExpression(), other.getExpression());
     }
+    
+    @Override
+    public String toString() {
+    	return SQLStringVisitor.getSQLString(this);
+    }
 
 }

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 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/symbol/DerivedColumn.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -108,6 +108,7 @@
 	    }
 	    DerivedColumn copy = new DerivedColumn(getName(), getCanonical(), clonedExpr);
 	    copy.setAlias(this.alias);
+	    copy.setOutputName(this.getOutputName());
 	    return copy;
 	}
 

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/EvaluatableVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/EvaluatableVisitor.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/EvaluatableVisitor.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -86,7 +86,7 @@
         }
     }
     
-    private boolean evaluationNotPossible() {
+    protected boolean evaluationNotPossible() {
         evaluationPossible = false;
         setAbort(true);
         return evaluationPossible;

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/ExpressionMappingVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/ExpressionMappingVisitor.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/sql/visitor/ExpressionMappingVisitor.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -72,16 +72,8 @@
         this.symbolMap = symbolMap;
     }
     
-    protected boolean createAliases() {
-    	return true;
-    }
-    
     public void visit(DerivedColumn expr) {
-    	Expression expression = expr.getExpression();
         expr.setExpression(replaceExpression(expr.getExpression()));
-        if (createAliases() && expr.getExpression() != expression) {
-        	expr.setAlias(true);
-        }
     }
     
     /**

Modified: branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/UpdateValidationVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/UpdateValidationVisitor.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/main/java/com/metamatrix/query/validator/UpdateValidationVisitor.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -31,8 +31,20 @@
 import com.metamatrix.query.metadata.QueryMetadataInterface;
 import com.metamatrix.query.metadata.SupportConstants;
 import com.metamatrix.query.metadata.TempMetadataID;
-import com.metamatrix.query.sql.lang.*;
-import com.metamatrix.query.sql.symbol.*;
+import com.metamatrix.query.sql.lang.Delete;
+import com.metamatrix.query.sql.lang.From;
+import com.metamatrix.query.sql.lang.Insert;
+import com.metamatrix.query.sql.lang.Query;
+import com.metamatrix.query.sql.lang.Select;
+import com.metamatrix.query.sql.lang.SetQuery;
+import com.metamatrix.query.sql.lang.StoredProcedure;
+import com.metamatrix.query.sql.lang.Update;
+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;
+import com.metamatrix.query.sql.symbol.Function;
+import com.metamatrix.query.sql.symbol.GroupSymbol;
 import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
 import com.metamatrix.query.util.ErrorMessageKeys;
 
@@ -136,22 +148,13 @@
      */
     public void visit(Select obj) {
 
-    	Iterator elementIter = obj.getProjectedSymbols().iterator();
-
-    	while(elementIter.hasNext()) {
-            SingleElementSymbol symbol = (SingleElementSymbol) elementIter.next();
-            if(symbol instanceof AliasSymbol) {
-                symbol = ((AliasSymbol)symbol).getSymbol();
+    	for (DerivedColumn symbol : obj.getProjectedSymbols()) {
+            Expression expr = symbol.getExpression();
+            if(expr instanceof Function) {
+                handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0008, symbol));
+            } else if (expr instanceof Aggregate) {
+            	handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0007, symbol));	
             }
-
-            if(symbol instanceof DerivedColumn) {
-                Expression expr = ((DerivedColumn)symbol).getExpression();
-                if(expr instanceof Function) {
-                    handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0008, symbol));
-                } else if (expr instanceof Aggregate) {
-                	handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0007, symbol));	
-                }
-            }
     	}
 
         elementsInSelect = ElementCollectorVisitor.getElements(obj, false);

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -26,6 +26,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import com.metamatrix.query.resolver.util.ResolverUtil;
 import com.metamatrix.query.sql.lang.AbstractCompareCriteria;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.CompareCriteria;
@@ -304,7 +305,7 @@
         From from = new From(Arrays.asList(new Object[] {predicate}));
         predicate.getLeftClause().setMakeNotDep(true);
         predicate.getRightClause().setMakeDep(true);
-        Select select = new Select(Arrays.asList(new Object[] {x, y}));
+        Select select = new Select(ResolverUtil.convertToDerivedColumns(Arrays.asList(x, y)));
         
         Query query = new Query(select, from, null, null, null, null, null);
         TestParser.helpTest("Select a.x, b.y From a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = function(b.y)",  //$NON-NLS-1$
@@ -1040,7 +1041,7 @@
         option.addDependentGroup("a"); //$NON-NLS-1$
         option.addNotDependentGroup("b"); //$NON-NLS-1$
         
-        Select select = new Select(Arrays.asList(new Object[] {x, y}));
+        Select select = new Select(ResolverUtil.convertToDerivedColumns(Arrays.asList(x, y)));
         
         Criteria criteria = new CompareCriteria(x, CompareCriteria.EQ, y);
         Query query = new Query(select, from, criteria, null, null, null, option);

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/processor/FakeDataManager.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/processor/FakeDataManager.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/processor/FakeDataManager.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -42,11 +42,9 @@
 import com.metamatrix.query.sql.lang.ProcedureContainer;
 import com.metamatrix.query.sql.lang.Query;
 import com.metamatrix.query.sql.lang.SetQuery;
-import com.metamatrix.query.sql.symbol.AliasSymbol;
+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.symbol.SingleElementSymbol;
-import com.metamatrix.query.sql.util.SymbolMap;
 import com.metamatrix.query.sql.visitor.ReferenceCollectorVisitor;
 import com.metamatrix.query.util.CommandContext;
 
@@ -84,7 +82,7 @@
         return this.queries;
     }
 	        
-	public void registerTuples(Object groupID, List elements, List[] data) {
+	public void registerTuples(Object groupID, List<ElementSymbol> elements, List[] data) {
 		tuples.put(groupID, new Object[] { elements, data });
 	}
 	
@@ -115,10 +113,10 @@
 		Object groupID = group.getMetadataID();
 		
 		Object[] tupleInfo = (Object[]) tuples.get(groupID);
-		List elements = (List) tupleInfo[0];
+		List<ElementSymbol> elements = (List<ElementSymbol>) tupleInfo[0];
 		List[] tuples = (List[]) tupleInfo[1];
 		
-		List projectedSymbols = command.getProjectedSymbols();
+		List<DerivedColumn> projectedSymbols = command.getProjectedSymbols();
 		int[] columnMap = getColumnMap(elements, projectedSymbols);
 		
 		// Apply query criteria to tuples
@@ -128,13 +126,9 @@
 			    // Build lookupMap from BOTH all the elements and the projected symbols - both may be needed here
 	            Map lookupMap = new HashMap();
 	            for(int i=0; i<elements.size(); i++) { 
-	                Object element = elements.get(i);
+	                ElementSymbol element = elements.get(i);
                     mapElementToIndex(lookupMap, element, new Integer(i), group);        
 	            }
-	            for(int i=0; i<projectedSymbols.size(); i++) { 
-	            	Object element = projectedSymbols.get(i);
-                    mapElementToIndex(lookupMap, element, new Integer(columnMap[i]), group);
-	            }
 			    
 			    List filteredTuples = new ArrayList();
 			    for(int i=0; i<tuples.length; i++) {
@@ -192,10 +186,9 @@
      * @param integer
      * @param group
      */
-    private void mapElementToIndex(Map lookupMap, Object element, Integer index, GroupSymbol group) {
+    private void mapElementToIndex(Map lookupMap, ElementSymbol elementSymbol, Integer index, GroupSymbol group) {
         if (group.getDefinition() != null){
             String groupAlias = group.getCanonicalName();
-            ElementSymbol elementSymbol = (ElementSymbol)SymbolMap.getExpression((SingleElementSymbol)element);
             String newName = groupAlias + "." + elementSymbol.getShortName(); //$NON-NLS-1$
             ElementSymbol aliasedElement = new ElementSymbol(newName, elementSymbol.getDisplayFullyQualified());
             aliasedElement.setGroupSymbol(elementSymbol.getGroupSymbol());
@@ -203,28 +196,22 @@
             aliasedElement.setType(elementSymbol.getType());
             lookupMap.put(aliasedElement, index);
         } else {
-            lookupMap.put(element, index);
+            lookupMap.put(elementSymbol, index);
         }
     }    
 	
 	//   columnMap[expectedElementIndex] = allElementIndex
-	private int[] getColumnMap(List allElements, List expectedElements) {
+	private int[] getColumnMap(List<ElementSymbol> allElements, List<DerivedColumn> expectedElements) {
 		int[] map = new int[expectedElements.size()];
 		
 		for(int i=0; i<expectedElements.size(); i++) { 
-		    SingleElementSymbol symbol = (SingleElementSymbol) expectedElements.get(i);
+		    DerivedColumn symbol = expectedElements.get(i);
 		    
-		    if (symbol instanceof AliasSymbol) {
-		        symbol = ((AliasSymbol)symbol).getSymbol();
-		    }
-		    
-		    String shortName = symbol.getShortName();
-		    
 		    // Find matching short name in all elements
 		    boolean foundMatch = false;
 		    for(int j=0; j<allElements.size(); j++) { 
-				SingleElementSymbol tupleSymbol = (SingleElementSymbol) allElements.get(j);
-				if(tupleSymbol.getShortName().equalsIgnoreCase(shortName)) {
+				ElementSymbol tupleSymbol = allElements.get(j);
+				if(tupleSymbol.equals(symbol.getExpression())) {
 				    map[i] = j;
 				    foundMatch = true;
 				    break;

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -60,11 +60,10 @@
 import com.metamatrix.query.sql.lang.StoredProcedure;
 import com.metamatrix.query.sql.lang.Update;
 import com.metamatrix.query.sql.symbol.Constant;
-import com.metamatrix.query.sql.symbol.ElementSymbol;
 import com.metamatrix.query.sql.symbol.DerivedColumn;
+import com.metamatrix.query.sql.symbol.ElementSymbol;
 import com.metamatrix.query.sql.symbol.Function;
 import com.metamatrix.query.sql.symbol.GroupSymbol;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
 import com.metamatrix.query.sql.visitor.CorrelatedReferenceCollectorVisitor;
 import com.metamatrix.query.unittest.FakeMetadataFacade;
 import com.metamatrix.query.unittest.FakeMetadataFactory;
@@ -2001,9 +2000,9 @@
         union = (SetQuery)QueryRewriter.rewrite(union, null, FakeMetadataFactory.example1Cached(), null);
         
         for (QueryCommand query : union.getQueryCommands()) {
-            List projSymbols = query.getProjectedSymbols();
-            for(int i=0; i<projSymbols.size(); i++) {
-                assertEquals("Found type mismatch at column " + i, types[i], ((SingleElementSymbol) projSymbols.get(i)).getType()); //$NON-NLS-1$
+        	int i = 0;
+        	for (DerivedColumn column : query.getProjectedSymbols()) {
+                assertEquals("Found type mismatch at column " + i, types[i++], column.getType()); //$NON-NLS-1$
             }                
         }
     }

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestAliasSymbol.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestAliasSymbol.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestAliasSymbol.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -24,16 +24,15 @@
 
 import junit.framework.TestCase;
 
-import com.metamatrix.query.sql.symbol.AliasSymbol;
 import com.metamatrix.query.sql.symbol.Constant;
 import com.metamatrix.query.sql.symbol.DerivedColumn;
 
 public class TestAliasSymbol extends TestCase {
 
     public void testAliasEquals() {
-        AliasSymbol a1 = new AliasSymbol("X", new DerivedColumn("x", new Constant(1))); //$NON-NLS-1$ //$NON-NLS-2$
-        AliasSymbol a2 = new AliasSymbol("X", new DerivedColumn("x", new Constant(2))); //$NON-NLS-1$ //$NON-NLS-2$
-        AliasSymbol a3 = new AliasSymbol("x", new DerivedColumn("x", new Constant(1))); //$NON-NLS-1$ //$NON-NLS-2$
+    	DerivedColumn a1 = new DerivedColumn("X", new Constant(1)); //$NON-NLS-1$ 
+    	DerivedColumn a2 = new DerivedColumn("X", new Constant(2)); //$NON-NLS-1$ 
+    	DerivedColumn a3 = new DerivedColumn("x", new Constant(1)); //$NON-NLS-1$ 
         
         assertEquals(a1, a3); //just a different case for the alias
         
@@ -41,9 +40,9 @@
     }
     
     public void testClone() {
-        AliasSymbol a1 = new AliasSymbol("X", new DerivedColumn("x", new Constant(1))); //$NON-NLS-1$ //$NON-NLS-2$
+    	DerivedColumn a1 = new DerivedColumn("x", new Constant(1)); //$NON-NLS-1$ 
         a1.setOutputName("foo"); //$NON-NLS-1$
-        AliasSymbol clone = (AliasSymbol)a1.clone();
+        DerivedColumn clone = (DerivedColumn)a1.clone();
         assertEquals(a1, clone);
         assertEquals(a1.getOutputName(), clone.getOutputName());
     }

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestBatchedUpdateCommand.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestBatchedUpdateCommand.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestBatchedUpdateCommand.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -28,7 +28,7 @@
 import junit.framework.TestCase;
 
 import com.metamatrix.query.metadata.BasicQueryMetadata;
-import com.metamatrix.query.sql.symbol.AliasSymbol;
+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.symbol.Reference;
@@ -84,7 +84,7 @@
         From from = new From();
         from.addGroup(g);
 
-        AliasSymbol as = new AliasSymbol("myA", new ElementSymbol("a")); //$NON-NLS-1$ //$NON-NLS-2$
+        DerivedColumn as = new DerivedColumn("myA", new ElementSymbol("a"), true); //$NON-NLS-1$ //$NON-NLS-2$
         Select select = new Select();
         select.addSymbol(as);
         select.addSymbol(new ElementSymbol("b")); //$NON-NLS-1$
@@ -103,7 +103,7 @@
         Into into = new Into();
         into.setGroup(new GroupSymbol("intoGroup"));//$NON-NLS-1$
         
-        AliasSymbol as = new AliasSymbol("myA", new ElementSymbol("a")); //$NON-NLS-1$ //$NON-NLS-2$
+        DerivedColumn as = new DerivedColumn("myA", new ElementSymbol("a"), true); //$NON-NLS-1$ //$NON-NLS-2$
         Select select = new Select();
         select.addSymbol(as);
         select.addSymbol(new ElementSymbol("b")); //$NON-NLS-1$

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestQuery.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestQuery.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/lang/TestQuery.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -30,6 +30,7 @@
 import com.metamatrix.common.types.ClobType;
 import com.metamatrix.common.types.XMLType;
 import com.metamatrix.core.util.UnitTestUtil;
+import com.metamatrix.query.sql.symbol.DerivedColumn;
 import com.metamatrix.query.sql.symbol.ElementSymbol;
 import com.metamatrix.query.sql.symbol.GroupSymbol;
 
@@ -148,8 +149,8 @@
     
     public void testClone2() {    
         Query q = sample2();
-        List projectedSymbols = q.getProjectedSymbols();
-        assertTrue(projectedSymbols == q.getProjectedSymbols());
+        List<DerivedColumn> projectedSymbols = q.getProjectedSymbols();
+        assertEquals(projectedSymbols, q.getProjectedSymbols());
         Query qclone = (Query)q.clone();
         int equals = 0;
         UnitTestUtil.helpTestEquivalence(equals, q, qclone);

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/proc/TestAssignmentStatement.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/proc/TestAssignmentStatement.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/proc/TestAssignmentStatement.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -33,6 +33,7 @@
 import com.metamatrix.query.sql.lang.Select;
 import com.metamatrix.query.sql.lang.UnaryFromClause;
 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.GroupSymbol;
 
@@ -57,7 +58,7 @@
 	
 	public static final AssignmentStatement sample2() {
     	Query query = new Query();
-    	query.setSelect(new Select(Arrays.asList(new ElementSymbol("x")))); //$NON-NLS-1$
+    	query.setSelect(new Select(Arrays.asList(new DerivedColumn(new ElementSymbol("x"))))); //$NON-NLS-1$
     	query.setFrom(new From(Arrays.asList(new UnaryFromClause(new GroupSymbol("y"))))); //$NON-NLS-1$
     	return new AssignmentStatement(new ElementSymbol("b"), query); //$NON-NLS-1$
 	}

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestAggregateSymbolCollectorVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestAggregateSymbolCollectorVisitor.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestAggregateSymbolCollectorVisitor.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -30,7 +30,7 @@
 import com.metamatrix.api.exception.query.QueryParserException;
 import com.metamatrix.query.parser.QueryParser;
 import com.metamatrix.query.sql.lang.Command;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
+import com.metamatrix.query.sql.symbol.Expression;
 
 
 public class TestAggregateSymbolCollectorVisitor extends TestCase {
@@ -44,8 +44,8 @@
         Command command = QueryParser.getQueryParser().parseCommand(sql);
         
         // Find aggregates
-        List<SingleElementSymbol> foundAggs = new ArrayList<SingleElementSymbol>();
-        List<SingleElementSymbol> foundElements = new ArrayList<SingleElementSymbol>();
+        List<Expression> foundAggs = new ArrayList<Expression>();
+        List<Expression> foundElements = new ArrayList<Expression>();
         AggregateSymbolCollectorVisitor.getAggregates(command, foundAggs, foundElements);
         
         // Compare

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -66,6 +66,7 @@
 import com.metamatrix.query.sql.lang.UnaryFromClause;
 import com.metamatrix.query.sql.lang.Update;
 import com.metamatrix.query.sql.lang.XQuery;
+import com.metamatrix.query.sql.lang.OrderByItem.OrderSpecification;
 import com.metamatrix.query.sql.lang.SetQuery.Operation;
 import com.metamatrix.query.sql.proc.AssignmentStatement;
 import com.metamatrix.query.sql.proc.Block;
@@ -598,8 +599,8 @@
 
 	public void testOrderBy3() {
 		OrderBy ob = new OrderBy();
-		ob.addVariable(new ElementSymbol("e1"), OrderBy.DESC); //$NON-NLS-1$
-		ob.addVariable(new ElementSymbol("x"), OrderBy.DESC); //$NON-NLS-1$
+		ob.addVariable(new ElementSymbol("e1"), OrderSpecification.DESC); //$NON-NLS-1$
+		ob.addVariable(new ElementSymbol("x"), OrderSpecification.DESC); //$NON-NLS-1$
 		
 		helpTest(ob, "ORDER BY e1 DESC, x DESC");     //$NON-NLS-1$
 	}

Modified: branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestStaticSymbolMappingVisitor.java
===================================================================
--- branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestStaticSymbolMappingVisitor.java	2009-03-03 19:50:13 UTC (rev 533)
+++ branches/symbol_refactoring_61/engine/src/test/java/com/metamatrix/query/sql/visitor/TestStaticSymbolMappingVisitor.java	2009-03-03 23:05:42 UTC (rev 534)
@@ -192,7 +192,7 @@
 	    OrderBy ob = new OrderBy();
 	    ob.addVariable(exampleElement(true, 0));
 	    ob.addVariable(exampleElement(true, 1));
-	    ob.addVariable(new DerivedColumn("abc", exampleElement(true, 2), true)); //$NON-NLS-1$
+	    ob.addVariable(exampleElement(true, 2));
 	    helpTest(ob, getSymbolMap());	    
 	}
 	




More information about the teiid-commits mailing list