[ 
https://issues.apache.org/jira/browse/CALCITE-4055?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ruben Q L updated CALCITE-4055:
-------------------------------
    Description: 
The trimmed plan generated by RelFieldTrimmer can lose the hints that might be 
present in the input plan.
The issue can be reproduced with the following test (to be added to 
RelFieldTrimmerTest):
{code:java}
  @Test void testJoinWithHints() {
    final RelHint noHashJoinHint = 
RelHint.builder("NO_HASH_JOIN").inheritPath(0).build();
    final RelBuilder builder = RelBuilder.create(config().build());
    final RelNode original =
        builder.scan("EMP")
            .scan("DEPT")
            .join(JoinRelType.INNER,
                builder.equals(
                    builder.field(2, 0, "DEPTNO"),
                    builder.field(2, 1, "DEPTNO")))
            .hints(noHashJoinHint)
            .project(
                builder.field("ENAME"),
                builder.field("DNAME"))
            .build();

    final RelFieldTrimmer fieldTrimmer = new RelFieldTrimmer(null, builder);
    final RelNode trimmed = fieldTrimmer.trim(original);

    final String expected = ""
        + "LogicalProject(ENAME=[$1], DNAME=[$4])\n"
        + "  LogicalJoin(condition=[=($2, $3)], joinType=[inner])\n"
        + "    LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n"
        + "      LogicalTableScan(table=[[scott, EMP]])\n"
        + "    LogicalProject(DEPTNO=[$0], DNAME=[$1])\n"
        + "      LogicalTableScan(table=[[scott, DEPT]])\n";
    assertThat(trimmed, hasTree(expected));

    assertTrue(original.getInput(0) instanceof Join);
    final Join originalJoin = (Join) original.getInput(0);
    assertTrue(originalJoin.getHints().contains(noHashJoinHint));

    assertTrue(trimmed.getInput(0) instanceof Join);
    final Join join = (Join) trimmed.getInput(0);
    assertTrue(join.getHints().contains(noHashJoinHint));
  }
{code}

which fails in the last line: 
{{assertTrue(join.getHints().contains(noHashJoinHint));}}

  was:
The trimmed plan generated by RelFieldTrimmer can lose the hints that might be 
present in the input plan.
The issue can be reproduced with the following test (to be added to 
RelFieldTrimmerTest):
{code:java}
  @Test void testJoinWithHints() {
    final RelHint noHashJoinHint = 
RelHint.builder("NO_HASH_JOIN").inheritPath(0).build();
    final RelBuilder builder = RelBuilder.create(config().build());
    final RelNode original =
        builder.scan("EMP")
            .scan("DEPT")
            .join(JoinRelType.INNER,
                builder.equals(
                    builder.field(2, 0, "DEPTNO"),
                    builder.field(2, 1, "DEPTNO")))
            .hints(noHashJoinHint)
            .project(
                builder.field("ENAME"),
                builder.field("DNAME"))
            .build();

    final RelFieldTrimmer fieldTrimmer = new RelFieldTrimmer(null, builder);
    final RelNode trimmed = fieldTrimmer.trim(original);

    final String expected = ""
        + "LogicalProject(ENAME=[$1], DNAME=[$4])\n"
        + "  LogicalJoin(condition=[=($2, $3)], joinType=[inner])\n"
        + "    LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n"
        + "      LogicalTableScan(table=[[scott, EMP]])\n"
        + "    LogicalProject(DEPTNO=[$0], DNAME=[$1])\n"
        + "      LogicalTableScan(table=[[scott, DEPT]])\n";
    assertThat(trimmed, hasTree(expected));

    assertTrue(original.getInput(0) instanceof Join);
    final Join originalJoin  = (Join) original.getInput(0);
    assertTrue(originalJoin.getHints().contains(noHashJoinHint));

    assertTrue(trimmed.getInput(0) instanceof Join);
    final Join join  = (Join) trimmed.getInput(0);
    assertTrue(join.getHints().contains(noHashJoinHint));
  }
{code}

which fails in the last line: 
{{assertTrue(join.getHints().contains(noHashJoinHint));}}


> RelFieldTrimmer loses hints
> ---------------------------
>
>                 Key: CALCITE-4055
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4055
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.23.0
>            Reporter: Ruben Q L
>            Priority: Major
>
> The trimmed plan generated by RelFieldTrimmer can lose the hints that might 
> be present in the input plan.
> The issue can be reproduced with the following test (to be added to 
> RelFieldTrimmerTest):
> {code:java}
>   @Test void testJoinWithHints() {
>     final RelHint noHashJoinHint = 
> RelHint.builder("NO_HASH_JOIN").inheritPath(0).build();
>     final RelBuilder builder = RelBuilder.create(config().build());
>     final RelNode original =
>         builder.scan("EMP")
>             .scan("DEPT")
>             .join(JoinRelType.INNER,
>                 builder.equals(
>                     builder.field(2, 0, "DEPTNO"),
>                     builder.field(2, 1, "DEPTNO")))
>             .hints(noHashJoinHint)
>             .project(
>                 builder.field("ENAME"),
>                 builder.field("DNAME"))
>             .build();
>     final RelFieldTrimmer fieldTrimmer = new RelFieldTrimmer(null, builder);
>     final RelNode trimmed = fieldTrimmer.trim(original);
>     final String expected = ""
>         + "LogicalProject(ENAME=[$1], DNAME=[$4])\n"
>         + "  LogicalJoin(condition=[=($2, $3)], joinType=[inner])\n"
>         + "    LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n"
>         + "      LogicalTableScan(table=[[scott, EMP]])\n"
>         + "    LogicalProject(DEPTNO=[$0], DNAME=[$1])\n"
>         + "      LogicalTableScan(table=[[scott, DEPT]])\n";
>     assertThat(trimmed, hasTree(expected));
>     assertTrue(original.getInput(0) instanceof Join);
>     final Join originalJoin = (Join) original.getInput(0);
>     assertTrue(originalJoin.getHints().contains(noHashJoinHint));
>     assertTrue(trimmed.getInput(0) instanceof Join);
>     final Join join = (Join) trimmed.getInput(0);
>     assertTrue(join.getHints().contains(noHashJoinHint));
>   }
> {code}
> which fails in the last line: 
> {{assertTrue(join.getHints().contains(noHashJoinHint));}}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to