@Override public LogicalCorrelate copy(RelTraitSet traitSet, RelNode left, RelNode right, CorrelationId correlationId, ImmutableBitSet requiredColumns, SemiJoinType joinType) { assert traitSet.containsIfApplicable(Convention.NONE); return new LogicalCorrelate(getCluster(), traitSet, left, right, correlationId, requiredColumns, joinType); }
/** Creates a LogicalCorrelate. */ public static LogicalCorrelate create(RelNode left, RelNode right, CorrelationId correlationId, ImmutableBitSet requiredColumns, SemiJoinType joinType) { final RelOptCluster cluster = left.getCluster(); final RelTraitSet traitSet = cluster.traitSetOf(Convention.NONE); return new LogicalCorrelate(cluster, traitSet, left, right, correlationId, requiredColumns, joinType); }
@Override public LogicalCorrelate copy(RelTraitSet traitSet, RelNode left, RelNode right, CorrelationId correlationId, ImmutableBitSet requiredColumns, SemiJoinType joinType) { assert traitSet.containsIfApplicable(Convention.NONE); return new LogicalCorrelate(getCluster(), traitSet, left, right, correlationId, requiredColumns, joinType); }
/** Creates a LogicalCorrelate. */ public static LogicalCorrelate create(RelNode left, RelNode right, CorrelationId correlationId, ImmutableBitSet requiredColumns, SemiJoinType joinType) { final RelOptCluster cluster = left.getCluster(); final RelTraitSet traitSet = cluster.traitSetOf(Convention.NONE); return new LogicalCorrelate(cluster, traitSet, left, right, correlationId, requiredColumns, joinType); }
@Override public RelNode visit(LogicalCorrelate correlate) { final RelNode left = correlate.getLeft().accept(this); final RelNode right = correlate.getRight().accept(this); return new LogicalCorrelate( cluster, copyOf(correlate.getTraitSet()), left, right, correlate.getCorrelationId(), correlate.getRequiredColumns(), correlate.getJoinType() ); }
@Test public void testProjectCorrelateTransposeRuleAntiCorrelate() { RelBuilder relBuilder = RelBuilder.create(RelBuilderTest.config().build()); RelNode left = relBuilder .values(new String[]{"f", "f2"}, "1", "2").build(); CorrelationId correlationId = new CorrelationId(0); RexNode rexCorrel = relBuilder.getRexBuilder().makeCorrel( left.getRowType(), correlationId); RelNode right = relBuilder .values(new String[]{"f3", "f4"}, "1", "2") .project(relBuilder.field(0), relBuilder.getRexBuilder().makeFieldAccess(rexCorrel, 0)).build(); LogicalCorrelate correlate = new LogicalCorrelate(left.getCluster(), left.getTraitSet(), left, right, correlationId, ImmutableBitSet.of(0), SemiJoinType.ANTI); relBuilder.push(correlate); RelNode relNode = relBuilder.project(relBuilder.field(0)) .build(); HepProgram program = new HepProgramBuilder() .addRuleInstance(ProjectCorrelateTransposeRule.INSTANCE) .build(); HepPlanner hepPlanner = new HepPlanner(program); hepPlanner.setRoot(relNode); RelNode output = hepPlanner.findBestExp(); final String planAfter = NL + RelOptUtil.toString(output); final DiffRepository diffRepos = getDiffRepos(); diffRepos.assertEquals("planAfter", "${planAfter}", planAfter); SqlToRelTestBase.assertValid(output); }
@Test public void testProjectCorrelateTransposeRuleAntiCorrelate() { RelBuilder relBuilder = RelBuilder.create(RelBuilderTest.config().build()); RelNode left = relBuilder .values(new String[]{"f", "f2"}, "1", "2").build(); CorrelationId correlationId = new CorrelationId(0); RexNode rexCorrel = relBuilder.getRexBuilder().makeCorrel( left.getRowType(), correlationId); RelNode right = relBuilder .values(new String[]{"f3", "f4"}, "1", "2") .project(relBuilder.field(0), relBuilder.getRexBuilder().makeFieldAccess(rexCorrel, 0)).build(); LogicalCorrelate correlate = new LogicalCorrelate(left.getCluster(), left.getTraitSet(), left, right, correlationId, ImmutableBitSet.of(0), SemiJoinType.ANTI); relBuilder.push(correlate); RelNode relNode = relBuilder.project(relBuilder.field(0)) .build(); HepProgram program = new HepProgramBuilder() .addRuleInstance(ProjectCorrelateTransposeRule.INSTANCE) .build(); HepPlanner hepPlanner = new HepPlanner(program); hepPlanner.setRoot(relNode); RelNode output = hepPlanner.findBestExp(); final String planAfter = NL + RelOptUtil.toString(output); final DiffRepository diffRepos = getDiffRepos(); diffRepos.assertEquals("planAfter", "${planAfter}", planAfter); SqlToRelTestBase.assertValid(output); }
.makeFieldAccess(rexCorrel, 0)) .build(); LogicalCorrelate correlate = new LogicalCorrelate(left.getCluster(), left.getTraitSet(), left, right, correlationId, ImmutableBitSet.of(0), SemiJoinType.SEMI);
.makeFieldAccess(rexCorrel, 0)) .build(); LogicalCorrelate correlate = new LogicalCorrelate(left.getCluster(), left.getTraitSet(), left, right, correlationId, ImmutableBitSet.of(0), SemiJoinType.SEMI);