/** * Compare two GroupBys for equality. Order is important in the comparison. * @param obj Other object * @return True if equal */ public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof GroupBy)) { return false; } GroupBy other = (GroupBy)obj; return EquivalenceUtil.areEqual(getSymbols(), other.getSymbols()) && this.rollup == other.rollup; }
public org.teiid.language.GroupBy translate(GroupBy groupBy) { if(groupBy == null){ return null; } List items = groupBy.getSymbols(); List<org.teiid.language.Expression> translatedItems = new ArrayList<org.teiid.language.Expression>(); for (Iterator i = items.iterator(); i.hasNext();) { translatedItems.add(translate((Expression)i.next())); } org.teiid.language.GroupBy result = new org.teiid.language.GroupBy(translatedItems); result.setRollup(groupBy.isRollup()); return result; }
@Test public void testGroupByRollup() { GroupSymbol g = new GroupSymbol("m.g"); //$NON-NLS-1$ From from = new From(); from.addGroup(g); Select select = new Select(); select.addSymbol(new ElementSymbol("a", false)); //$NON-NLS-1$ GroupBy groupBy = new GroupBy(); groupBy.setRollup(true); groupBy.addSymbol(new ElementSymbol("b", false)); //$NON-NLS-1$ groupBy.addSymbol(new ElementSymbol("c", false)); //$NON-NLS-1$ Query query = new Query(); query.setSelect(select); query.setFrom(from); query.setGroupBy(groupBy); helpTest("SELECT a FROM m.g GROUP BY rollup(b, c)", //$NON-NLS-1$ "SELECT a FROM m.g GROUP BY ROLLUP(b, c)", //$NON-NLS-1$ query); }
List<Expression> groupCols = (List<Expression>)node.getProperty(NodeConstants.Info.GROUP_COLS); if (groupCols != null) { GroupBy groupBy= new GroupBy(groupCols); ExpressionMappingVisitor.mapExpressions(groupBy, symbolMap); node.setProperty(NodeConstants.Info.GROUP_COLS, groupBy.getSymbols()); if (!singleMapping) { GroupsUsedByElementsVisitor.getGroups(groupBy, groups);
/** * Return a deep copy of this object * @return Deep copy of object */ public Object clone() { GroupBy clone = new GroupBy(LanguageObject.Util.deepClone(this.symbols, Expression.class)); clone.rollup = this.rollup; return clone; }
Object var = DQPWorkContext.getWorkContext().getSession().getSessionVariables().get("resolve_groupby_positional"); //$NON-NLS-1$ if (Boolean.TRUE.equals(var)) { for (int i = 0; i < groupBy.getCount(); i++) { List<Expression> select = obj.getSelect().getProjectedSymbols(); Expression ex = groupBy.getSymbols().get(i); ex = SymbolMap.getExpression(ex); if (ex instanceof Constant && ex.getType() == DataTypeManager.DefaultDataClasses.INTEGER) { Expression selectExpression = select.get(val - 1); selectExpression = SymbolMap.getExpression(selectExpression); groupBy.getSymbols().set(i, (Expression) selectExpression.clone());
copy.setGroupBy( (GroupBy) groupBy.clone());
List<Expression> groupCols = (List<Expression>)node.getProperty(NodeConstants.Info.GROUP_COLS); if (groupCols != null) { GroupBy groupBy= new GroupBy(groupCols); ExpressionMappingVisitor.mapExpressions(groupBy, symbolMap); node.setProperty(NodeConstants.Info.GROUP_COLS, groupBy.getSymbols()); if (!singleMapping) { GroupsUsedByElementsVisitor.getGroups(groupBy, groups);
/** * Return a deep copy of this object * @return Deep copy of object */ public Object clone() { GroupBy clone = new GroupBy(LanguageObject.Util.deepClone(this.symbols, Expression.class)); clone.rollup = this.rollup; return clone; }
Object var = DQPWorkContext.getWorkContext().getSession().getSessionVariables().get("resolve_groupby_positional"); //$NON-NLS-1$ if (Boolean.TRUE.equals(var)) { for (int i = 0; i < groupBy.getCount(); i++) { List<Expression> select = obj.getSelect().getProjectedSymbols(); Expression ex = groupBy.getSymbols().get(i); ex = SymbolMap.getExpression(ex); if (ex instanceof Constant && ex.getType() == DataTypeManager.DefaultDataClasses.INTEGER) { Expression selectExpression = select.get(val - 1); selectExpression = SymbolMap.getExpression(selectExpression); groupBy.getSymbols().set(i, (Expression) selectExpression.clone());
copy.setGroupBy( (GroupBy) groupBy.clone());
/** * Compare two GroupBys for equality. Order is important in the comparison. * @param obj Other object * @return True if equal */ public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof GroupBy)) { return false; } GroupBy other = (GroupBy)obj; return EquivalenceUtil.areEqual(getSymbols(), other.getSymbols()) && this.rollup == other.rollup; }
public org.teiid.language.GroupBy translate(GroupBy groupBy) { if(groupBy == null){ return null; } List items = groupBy.getSymbols(); List<org.teiid.language.Expression> translatedItems = new ArrayList<org.teiid.language.Expression>(); for (Iterator i = items.iterator(); i.hasNext();) { translatedItems.add(translate((Expression)i.next())); } org.teiid.language.GroupBy result = new org.teiid.language.GroupBy(translatedItems); result.setRollup(groupBy.isRollup()); return result; }