private RelNode createFirstGB(RelNode input, boolean left, RelOptCluster cluster, RexBuilder rexBuilder) throws CalciteSemanticException { final List<RexNode> gbChildProjLst = Lists.newArrayList(); final List<Integer> groupSetPositions = Lists.newArrayList(); for (int cInd = 0; cInd < input.getRowType().getFieldList().size(); cInd++) { gbChildProjLst.add(rexBuilder.makeInputRef(input, cInd)); groupSetPositions.add(cInd); } if (left) { gbChildProjLst.add(rexBuilder.makeBigintLiteral(new BigDecimal(2))); } else { gbChildProjLst.add(rexBuilder.makeBigintLiteral(new BigDecimal(1))); } // also add the last VCol groupSetPositions.add(input.getRowType().getFieldList().size()); // create the project before GB RelNode gbInputRel = HiveProject.create(input, gbChildProjLst, null); // groupSetPosition includes all the positions final ImmutableBitSet groupSet = ImmutableBitSet.of(groupSetPositions); List<AggregateCall> aggregateCalls = Lists.newArrayList(); RelDataType aggFnRetType = TypeConverter.convert(TypeInfoFactory.longTypeInfo, cluster.getTypeFactory()); AggregateCall aggregateCall = HiveCalciteUtil.createSingleArgAggCall("count", cluster, TypeInfoFactory.longTypeInfo, input.getRowType().getFieldList().size(), aggFnRetType); aggregateCalls.add(aggregateCall); return new HiveAggregate(cluster, cluster.traitSetOf(HiveRelNode.CONVENTION), gbInputRel, groupSet, null, aggregateCalls); }
cluster.getTypeFactory())); RexInputRef a = rexBuilder.makeInputRef(input, columnSize - 2); RexLiteral three = rexBuilder.makeBigintLiteral(new BigDecimal(3)); childRexNodeLst.add(three); childRexNodeLst.add(a); childRexNodeLst); RexLiteral two = rexBuilder.makeBigintLiteral(new BigDecimal(2)); RexInputRef b = rexBuilder.makeInputRef(input, columnSize - 1);
List<RexNode> childRexNodeLst = new ArrayList<RexNode>(); RexInputRef a = rexBuilder.makeInputRef(input, columnSize - 2); RexLiteral zero = rexBuilder.makeBigintLiteral(new BigDecimal(0)); childRexNodeLst.add(a); childRexNodeLst.add(zero); childRexNodeLst); childRexNodeLst = new ArrayList<RexNode>(); RexLiteral two = rexBuilder.makeBigintLiteral(new BigDecimal(2)); childRexNodeLst.add(a); childRexNodeLst.add(two);
private RelNode createFirstGB(RelNode input, boolean left, RelOptCluster cluster, RexBuilder rexBuilder) throws CalciteSemanticException { final List<RexNode> gbChildProjLst = Lists.newArrayList(); final List<Integer> groupSetPositions = Lists.newArrayList(); for (int cInd = 0; cInd < input.getRowType().getFieldList().size(); cInd++) { gbChildProjLst.add(rexBuilder.makeInputRef(input, cInd)); groupSetPositions.add(cInd); } if (left) { gbChildProjLst.add(rexBuilder.makeBigintLiteral(new BigDecimal(2))); } else { gbChildProjLst.add(rexBuilder.makeBigintLiteral(new BigDecimal(1))); } // also add the last VCol groupSetPositions.add(input.getRowType().getFieldList().size()); // create the project before GB RelNode gbInputRel = HiveProject.create(input, gbChildProjLst, null); // groupSetPosition includes all the positions final ImmutableBitSet groupSet = ImmutableBitSet.of(groupSetPositions); List<AggregateCall> aggregateCalls = Lists.newArrayList(); RelDataType aggFnRetType = TypeConverter.convert(TypeInfoFactory.longTypeInfo, cluster.getTypeFactory()); AggregateCall aggregateCall = HiveCalciteUtil.createSingleArgAggCall("count", cluster, TypeInfoFactory.longTypeInfo, input.getRowType().getFieldList().size(), aggFnRetType); aggregateCalls.add(aggregateCall); return new HiveAggregate(cluster, cluster.traitSetOf(HiveRelNode.CONVENTION), gbInputRel, false, groupSet, null, aggregateCalls); }
cluster.getTypeFactory())); RexInputRef a = rexBuilder.makeInputRef(input, columnSize - 2); RexLiteral three = rexBuilder.makeBigintLiteral(new BigDecimal(3)); childRexNodeLst.add(three); childRexNodeLst.add(a); childRexNodeLst); RexLiteral two = rexBuilder.makeBigintLiteral(new BigDecimal(2)); RexInputRef b = rexBuilder.makeInputRef(input, columnSize - 1);
groupSetPositions.add(cInd); gbChildProjLst.add(rexBuilder.makeBigintLiteral(new BigDecimal(1))); List<RexNode> childRexNodeLst = new ArrayList<RexNode>(); RexInputRef ref = rexBuilder.makeInputRef(aggregateRel, countInd); RexLiteral literal = rexBuilder.makeBigintLiteral(new BigDecimal(numOfBranch)); childRexNodeLst.add(ref); childRexNodeLst.add(literal);
List<RexNode> childRexNodeLst = new ArrayList<RexNode>(); RexInputRef a = rexBuilder.makeInputRef(input, columnSize - 2); RexLiteral zero = rexBuilder.makeBigintLiteral(new BigDecimal(0)); childRexNodeLst.add(a); childRexNodeLst.add(zero); childRexNodeLst); childRexNodeLst = new ArrayList<RexNode>(); RexLiteral two = rexBuilder.makeBigintLiteral(new BigDecimal(2)); childRexNodeLst.add(a); childRexNodeLst.add(two);
groupSetPositions.add(cInd); gbChildProjLst.add(rexBuilder.makeBigintLiteral(new BigDecimal(1))); List<RexNode> childRexNodeLst = new ArrayList<RexNode>(); RexInputRef ref = rexBuilder.makeInputRef(aggregateRel, countInd); RexLiteral literal = rexBuilder.makeBigintLiteral(new BigDecimal(numOfBranch)); childRexNodeLst.add(ref); childRexNodeLst.add(literal);
break; case LONG: calciteLiteral = rexBuilder.makeBigintLiteral(new BigDecimal((Long) value)); break;
break; case LONG: calciteLiteral = rexBuilder.makeBigintLiteral(new BigDecimal((Long) value)); break;
literal = e.rel.getCluster().getRexBuilder().makeBigintLiteral(new BigDecimal(0)); } else { literal = e.rel.getCluster().getRexBuilder().makeNullLiteral(getAggTypeForScalarSub(e));
public static Prel addLimitPrel(Prel input, long fetchSize) { RexBuilder builder = input.getCluster().getRexBuilder(); return new LimitPrel( input.getCluster(), input.getTraitSet(), input, builder.makeBigintLiteral(BigDecimal.ZERO), builder.makeBigintLiteral(BigDecimal.valueOf(fetchSize))); }
private Prel newLimit(int offset, int fetch, Prel child) { return new LimitPrel(cluster, traits, child, rexBuilder.makeBigintLiteral(new BigDecimal(offset)), rexBuilder.makeBigintLiteral(new BigDecimal(fetch)) ); }
@Override public void onMatch(RelOptRuleCall call) { final SamplePrel sample = (SamplePrel) call.rel(0); final RelNode input = sample.getInput(); final RelNode convertedInput = convert(input, input.getTraitSet().plus(Prel.PHYSICAL)); final RexBuilder rexBuilder = input.getCluster().getRexBuilder(); final PlannerSettings plannerSettings = PrelUtil.getPlannerSettings(call.getPlanner()); final RexNode offset = rexBuilder.makeBigintLiteral(BigDecimal.ZERO); final RexNode limit = rexBuilder.makeBigintLiteral(BigDecimal.valueOf(SampleCrel.getSampleSizeAndSetMinSampleSize(plannerSettings, 1))); final LimitPrel sampleAsLimit = new LimitPrel(sample.getCluster(), sample.getTraitSet().plus(Prel.PHYSICAL), convertedInput, offset, limit); call.transformTo(sampleAsLimit); } }
@Test public void castANY(){ final RexNode node = builder.makeCast( factory.createSqlType(SqlTypeName.ANY), builder.makeBigintLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(0, conditions.size()); assertEquals(builder.makeBigintLiteral(BigDecimal.ONE), holder.getNode()); }
@Test public void typeMismatchFailure(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeInputRef(factory.createSqlType(SqlTypeName.INTEGER), 0), builder.makeBigintLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder, true); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(0, conditions.size()); assertTrue(holder.hasRemainingExpression()); }
@Test public void simpleLiteralEquality(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeBigintLiteral(BigDecimal.ONE), builder.makeInputRef(factory.createSqlType(SqlTypeName.BIGINT), 0) ); FindSimpleFilters finder = new FindSimpleFilters(builder); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(1, conditions.size()); assertFalse(holder.hasRemainingExpression()); }
@Test public void simpleLiteralReverseEquality(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeInputRef(factory.createSqlType(SqlTypeName.BIGINT), 0), builder.makeBigintLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(1, conditions.size()); assertFalse(holder.hasRemainingExpression()); }
@Test public void typeMismatchSuccess(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeInputRef(factory.createSqlType(SqlTypeName.INTEGER), 0), builder.makeBigintLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder, false); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(1, conditions.size()); assertFalse(holder.hasRemainingExpression()); }
@Test public void noOnOr(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.OR, builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeInputRef(factory.createSqlType(SqlTypeName.BIGINT), 0), builder.makeBigintLiteral(BigDecimal.ONE) ), builder.makeApproxLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(0, conditions.size()); assertTrue(holder.hasRemainingExpression()); }