public void addGroupExpr(SqlNode expr) { RexNode convExpr = bb.convertExpression(expr); final RexNode rex = lookupGroupExpr(expr); if (rex != null) { return; // don't add duplicates, in e.g. "GROUP BY x, y, x" } groupExprs.add(expr); String name = nameMap.get(expr.toString()); addExpr(convExpr, name); final RelDataType type = convExpr.getType(); inputRefs.add(rexBuilder.makeInputRef(type, inputRefs.size())); }
final SqlNode expandedGroupExpr = validator.expand(groupExpr, bb.scope); aggConverter.addGroupExpr(expandedGroupExpr); List<RexNode> preExprs = aggConverter.getPreExprs(); List<String> preNames = aggConverter.getPreNames(); bb, BitSets.range(aggConverter.groupExprs.size()), aggConverter.getAggCalls()), false);
RexNode rex = agg.lookupGroupExpr(expandedGroupExpr); if (rex != null) { return rex; rex = agg.lookupAggregates((SqlCall) expr); if (rex != null) { return rex;
final SqlNode expandedGroupExpr = validator.expand(groupExpr, bb.scope); aggConverter.addGroupExpr(expandedGroupExpr); List<RexNode> preExprs = aggConverter.getPreExprs(); List<String> preNames = aggConverter.getPreNames(); bb, Util.bitSetBetween(0, aggConverter.groupExprs.size()), aggConverter.getAggCalls()), false);
final SqlNode expandedGroupExpr = validator.expand(groupExpr, bb.scope); aggConverter.addGroupExpr(expandedGroupExpr); List<RexNode> preExprs = aggConverter.getPreExprs(); List<String> preNames = aggConverter.getPreNames(); bb, BitSets.range(aggConverter.groupExprs.size()), aggConverter.getAggCalls()), false);
RexNode rex = agg.lookupGroupExpr(expandedGroupExpr); if (rex != null) { return rex; rex = agg.lookupAggregates((SqlCall) expr); if (rex != null) { return rex;
RexNode rex = agg.lookupGroupExpr(expandedGroupExpr); if (rex != null) { return rex; rex = agg.lookupAggregates((SqlCall) expr); if (rex != null) { return rex;
argTypes.add(convertedExpr.getType()); args.add(lookupOrCreateGroupExpr(convertedExpr));
args.add(lookupOrCreateGroupExpr(convertedExpr));
/** * Converts the SELECT, GROUP BY and HAVING clauses of an aggregate query. * * <p>This method extracts SELECT, GROUP BY and HAVING clauses, and creates * an {@link AggConverter}, then delegates to {@link #createAggImpl}. * Derived class may override this method to change any of those clauses or * specify a different {@link AggConverter}. * * @param bb Scope within which to resolve identifiers * @param select Query * @param orderExprList Additional expressions needed to implement ORDER BY */ protected void convertAgg( Blackboard bb, SqlSelect select, List<SqlNode> orderExprList) { assert bb.root != null : "precondition: child != null"; SqlNodeList groupList = select.getGroup(); SqlNodeList selectList = select.getSelectList(); SqlNode having = select.getHaving(); final AggConverter aggConverter = new AggConverter(bb, select); createAggImpl( bb, aggConverter, selectList, groupList, having, orderExprList); }
/** * Converts the SELECT, GROUP BY and HAVING clauses of an aggregate query. * * <p>This method extracts SELECT, GROUP BY and HAVING clauses, and creates * an {@link AggConverter}, then delegates to {@link #createAggImpl}. * Derived class may override this method to change any of those clauses or * specify a different {@link AggConverter}. * * @param bb Scope within which to resolve identifiers * @param select Query * @param orderExprList Additional expressions needed to implement ORDER BY */ protected void convertAgg( Blackboard bb, SqlSelect select, List<SqlNode> orderExprList) { assert bb.root != null : "precondition: child != null"; SqlNodeList groupList = select.getGroup(); SqlNodeList selectList = select.getSelectList(); SqlNode having = select.getHaving(); final AggConverter aggConverter = new AggConverter(bb, select); createAggImpl( bb, aggConverter, selectList, groupList, having, orderExprList); }
private int lookupOrCreateGroupExpr(RexNode expr) { for (int i = 0; i < convertedInputExprs.size(); i++) { RexNode convertedInputExpr = convertedInputExprs.get(i); if (expr.toString().equals(convertedInputExpr.toString())) { return i; } } // not found -- add it int index = convertedInputExprs.size(); addExpr(expr, null); return index; }
public void addGroupExpr(SqlNode expr) { RexNode convExpr = bb.convertExpression(expr); final RexNode rex = lookupGroupExpr(expr); if (rex != null) { return; // don't add duplicates, in e.g. "GROUP BY x, y, x" } groupExprs.add(expr); String name = nameMap.get(expr.toString()); addExpr(convExpr, name); final RelDataType type = convExpr.getType(); inputRefs.add(rexBuilder.makeInputRef(type, inputRefs.size())); }
public RexNode visit(SqlCall call) { if (agg != null) { final SqlOperator op = call.getOperator(); if (op.isAggregator()) { return agg.lookupAggregates(call); } } return exprConverter.convertCall(this, call); }
private int lookupOrCreateGroupExpr(RexNode expr) { for (int i = 0; i < convertedInputExprs.size(); i++) { RexNode convertedInputExpr = convertedInputExprs.get(i); if (expr.toString().equals(convertedInputExpr.toString())) { return i; } } // not found -- add it int index = convertedInputExprs.size(); addExpr(expr, null); return index; }
public RexNode visit(SqlCall call) { if (agg != null) { final SqlOperator op = call.getOperator(); if (op.isAggregator()) { return agg.lookupAggregates(call); } } return exprConverter.convertCall(this, call); }
public void addGroupExpr(SqlNode expr) { RexNode convExpr = bb.convertExpression(expr); final RexNode rex = lookupGroupExpr(expr); if (rex != null) { return; // don't add duplicates, in e.g. "GROUP BY x, y, x" } groupExprs.add(expr); String name = nameMap.get(expr.toString()); addExpr(convExpr, name); final RelDataType type = convExpr.getType(); inputRefs.add(rexBuilder.makeInputRef(type, inputRefs.size())); }
if (id.isStar() || isSimpleCount(call)) { // OVERRIDE POINT, was just `id.isStar()` assert call.operandCount() == 1; assert args.isEmpty(); argTypes.add(convertedExpr.getType()); args.add(lookupOrCreateGroupExpr(convertedExpr));
/** * Converts the SELECT, GROUP BY and HAVING clauses of an aggregate query. * * <p>This method extracts SELECT, GROUP BY and HAVING clauses, and creates * an {@link AggConverter}, then delegates to {@link #createAggImpl}. * Derived class may override this method to change any of those clauses or * specify a different {@link AggConverter}. * * @param bb Scope within which to resolve identifiers * @param select Query * @param orderExprList Additional expressions needed to implement ORDER BY */ protected void convertAgg( Blackboard bb, SqlSelect select, List<SqlNode> orderExprList) { assert bb.root != null : "precondition: child != null"; SqlNodeList groupList = select.getGroup(); SqlNodeList selectList = select.getSelectList(); SqlNode having = select.getHaving(); final AggConverter aggConverter = new AggConverter(bb, select); createAggImpl( bb, aggConverter, selectList, groupList, having, orderExprList); }
public RexNode visit(SqlCall call) { if (agg != null) { final SqlOperator op = call.getOperator(); if (op.isAggregator()) { return agg.lookupAggregates(call); } } return exprConverter.convertCall(this, call); }