[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