[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