[teiid-commits] teiid SVN: r3314 - in trunk/engine/src: main/java/org/teiid/query/rewriter and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Jul 14 16:20:44 EDT 2011


Author: shawkins
Date: 2011-07-14 16:20:44 -0400 (Thu, 14 Jul 2011)
New Revision: 3314

Modified:
   trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java
   trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
   trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
   trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java
   trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java
Log:
TEIID-1667 preliminary change to simplify expression handling

Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java	2011-07-14 14:31:30 UTC (rev 3313)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java	2011-07-14 20:20:44 UTC (rev 3314)
@@ -126,9 +126,6 @@
         		for (ElementSymbol elementSymbol : elements) {
 					if (virtualGroup.equals(elementSymbol.getGroupSymbol())) {
 						unrelated = true;
-						if (!(symbolMap.getMappedExpression(elementSymbol) instanceof ElementSymbol)) {
-							return root;
-						}
 					}
 				}
 			}

Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java	2011-07-14 14:31:30 UTC (rev 3313)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java	2011-07-14 20:20:44 UTC (rev 3314)
@@ -344,7 +344,6 @@
         
         List<OrderByItem> sortCols = ((OrderBy)parentNode.getProperty(NodeConstants.Info.SORT_ORDER)).getOrderByItems();
         for (OrderByItem symbol : sortCols) {
-            //TODO: this check shouldn't be necessary, since the order by is not introducing new expressions
             if(! canPushSymbol(symbol.getSymbol(), true, modelID, metadata, capFinder, record)) {
                 return false;
             }

Modified: trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java	2011-07-14 14:31:30 UTC (rev 3313)
+++ trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java	2011-07-14 20:20:44 UTC (rev 3314)
@@ -903,57 +903,14 @@
         
         LinkedList<OrderByItem> unrelatedItems = new LinkedList<OrderByItem>();
         
-        boolean hasUnrelatedExpression = rewriteOrderBy(queryCommand, orderBy,
-				projectedSymbols, unrelatedItems);
+        rewriteOrderBy(queryCommand, orderBy, projectedSymbols, unrelatedItems);
         
-        if (orderBy.getVariableCount() == 0 || !hasUnrelatedExpression) {
-        	return queryCommand;
-        } 
-        
-        int originalSymbolCount = select.getProjectedSymbols().size();
-
-        //add unrelated to select
-        for (OrderByItem orderByItem : unrelatedItems) {
-            select.addSymbol(orderByItem.getSymbol());				
-		}
-        makeSelectUnique(select, false);
-        
-        Query query = queryCommand.getProjectedQuery();
-        
-        Into into = query.getInto();
-        query.setInto(null);
-        Limit limit = query.getLimit();
-        query.setLimit(null);
-        query.setOrderBy(null);
-        
-        Query top = null;
-        
-        try {
-        	top = createInlineViewQuery(new GroupSymbol("X"), query, metadata, select.getProjectedSymbols()); //$NON-NLS-1$
-			Iterator<SingleElementSymbol> iter = top.getSelect().getProjectedSymbols().iterator();
-		    HashMap<Expression, SingleElementSymbol> expressionMap = new HashMap<Expression, SingleElementSymbol>();
-		    for (SingleElementSymbol symbol : select.getProjectedSymbols()) {
-		    	SingleElementSymbol ses = iter.next();
-		        expressionMap.put(SymbolMap.getExpression(symbol), ses);
-		        expressionMap.put(new ElementSymbol(symbol.getName()), ses);
-		    }
-		    ExpressionMappingVisitor.mapExpressions(orderBy, expressionMap);
-		    //now the order by should only contain element symbols
-		} catch (TeiidException err) {
-            throw new TeiidRuntimeException(err);
-        }
-		List symbols = top.getSelect().getSymbols();
-		top.getSelect().setSymbols(symbols.subList(0, originalSymbolCount));
-		top.setInto(into);
-		top.setLimit(limit);
-		top.setOrderBy(orderBy);
-		return top;
+    	return queryCommand;
     }
 
-	public static boolean rewriteOrderBy(QueryCommand queryCommand,
+	public static void rewriteOrderBy(QueryCommand queryCommand,
 			final OrderBy orderBy, final List projectedSymbols,
 			LinkedList<OrderByItem> unrelatedItems) {
-		boolean hasUnrelatedExpression = false;
 		HashSet<Expression> previousExpressions = new HashSet<Expression>();
         for (int i = 0; i < orderBy.getVariableCount(); i++) {
         	SingleElementSymbol querySymbol = orderBy.getVariable(i);
@@ -970,14 +927,11 @@
                 orderBy.removeOrderByItem(i--);
         	} else if (!isUnrelated) {
         		orderBy.getOrderByItems().get(i).setSymbol((SingleElementSymbol)querySymbol.clone());
-        	} else {
-        		hasUnrelatedExpression = true;
         	}
         }
         if (orderBy.getVariableCount() == 0) {
         	queryCommand.setOrderBy(null);
         } 
-		return hasUnrelatedExpression;
 	}
     
     /**

Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java	2011-07-14 14:31:30 UTC (rev 3313)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Reference.java	2011-07-14 20:20:44 UTC (rev 3314)
@@ -191,12 +191,4 @@
         return this.positional;
     }
     
-    /**
-     * Should never be called - used for an xml hack
-     * @param expression
-     */
-    public void setExpression(ElementSymbol expression) {
-		this.expression = expression;
-	}
-
 }

Modified: trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java	2011-07-14 14:31:30 UTC (rev 3313)
+++ trunk/engine/src/test/java/org/teiid/query/rewriter/TestOrderByRewrite.java	2011-07-14 20:20:44 UTC (rev 3314)
@@ -305,11 +305,6 @@
             new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$ 
     } 
     
-    @Test public void testOrderByExpression() throws Exception {
-    	Query resolvedQuery = (Query) getCommand("SELECT 0 AS SOMEINT, pm1.g1.e2 as y FROM pm1.g1 ORDER BY e2 || e1, e3"); //$NON-NLS-1$
-        assertEquals("SELECT X.SOMEINT, X.y FROM (SELECT 0 AS SOMEINT, pm1.g1.e2 AS y, (e2 || e1) AS EXPR1, e3 FROM pm1.g1) AS X ORDER BY X.EXPR1, X.e3", resolvedQuery.toString()); //$NON-NLS-1$
-    }
-    
     @Test public void testRewiteOrderBy() {
         helpTestRewriteCommand("SELECT 1+1 as a FROM pm1.g1 order by a", "SELECT 2 AS a FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
     }



More information about the teiid-commits mailing list