FilterJoinRule.TRUE_PREDICATE)) .addRuleInstance( new FilterJoinRule.JoinConditionPushRule( f, FilterJoinRule.TRUE_PREDICATE))
FilterJoinRule.TRUE_PREDICATE)) .addRuleInstance( new FilterJoinRule.JoinConditionPushRule( f, FilterJoinRule.TRUE_PREDICATE))
/** Test case for * <a href="https://issues.apache.org/jira/browse/CALCITE-448">[CALCITE-448] * FilterIntoJoinRule creates filters containing invalid RexInputRef</a>. */ @Test public void testPushFilterPastProject() { final HepProgram preProgram = HepProgram.builder() .addRuleInstance(ProjectMergeRule.INSTANCE) .build(); final FilterJoinRule.Predicate predicate = (join, joinType, exp) -> joinType != JoinRelType.INNER; final FilterJoinRule join = new FilterJoinRule.JoinConditionPushRule(RelBuilder.proto(), predicate); final FilterJoinRule filterOnJoin = new FilterJoinRule.FilterIntoJoinRule(true, RelBuilder.proto(), predicate); final HepProgram program = HepProgram.builder() .addGroupBegin() .addRuleInstance(FilterProjectTransposeRule.INSTANCE) .addRuleInstance(join) .addRuleInstance(filterOnJoin) .addGroupEnd() .build(); final String sql = "select a.name\n" + "from dept a\n" + "left join dept b on b.deptno > 10\n" + "right join dept c on b.deptno > 10\n"; checkPlanning(tester, preProgram, new HepPlanner(program), sql); }
/** Test case for * <a href="https://issues.apache.org/jira/browse/CALCITE-448">[CALCITE-448] * FilterIntoJoinRule creates filters containing invalid RexInputRef</a>. */ @Test public void testPushFilterPastProject() { final HepProgram preProgram = HepProgram.builder() .addRuleInstance(ProjectMergeRule.INSTANCE) .build(); final FilterJoinRule.Predicate predicate = (join, joinType, exp) -> joinType != JoinRelType.INNER; final FilterJoinRule join = new FilterJoinRule.JoinConditionPushRule(RelBuilder.proto(), predicate); final FilterJoinRule filterOnJoin = new FilterJoinRule.FilterIntoJoinRule(true, RelBuilder.proto(), predicate); final HepProgram program = HepProgram.builder() .addGroupBegin() .addRuleInstance(FilterProjectTransposeRule.INSTANCE) .addRuleInstance(join) .addRuleInstance(filterOnJoin) .addGroupEnd() .build(); final String sql = "select a.name\n" + "from dept a\n" + "left join dept b on b.deptno > 10\n" + "right join dept c on b.deptno > 10\n"; checkPlanning(tester, preProgram, new HepPlanner(program), sql); }
@Override public void onMatch(RelOptRuleCall call) { Join join = call.rel(0); perform(call, null, join); } }
@Override public void onMatch(RelOptRuleCall call) { Join join = call.rel(0); perform(call, null, join); } }