mihaibudiu commented on code in PR #4109:
URL: https://github.com/apache/calcite/pull/4109#discussion_r1904566924
##########
core/src/test/java/org/apache/calcite/test/RelMetadataTest.java:
##########
@@ -458,6 +460,56 @@ void testColumnOriginsUnion() {
equalTo("SAL"));
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6744">[CALCITE-6744]
+ * Support getColumnOrigins for correlate in RelMdColumnOrigins</a>. */
+ @Test void testColumnOriginsForCorrelate() {
+ final String sql = "select (select max(dept.name || '_' || emp.ename)"
+ + "from dept where emp.deptno = dept.deptno) from emp";
+ final RelMetadataFixture fixture = sql(sql);
+
+ final HepProgramBuilder programBuilder = HepProgram.builder();
+ programBuilder.addRuleInstance(CoreRules.PROJECT_SUB_QUERY_TO_CORRELATE);
+ final HepPlanner planner = new HepPlanner(programBuilder.build());
+ planner.setRoot(fixture.toRel());
+ final RelNode relNode = planner.findBestExp();
+
+ String expect = "LogicalProject(EXPR$0=[$9])\n"
+ + " LogicalCorrelate(correlation=[$cor1], joinType=[left],
requiredColumns=[{1, 7}])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n"
+ + " LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n"
+ + " LogicalProject($f0=[||(||($1, '_'), $cor1.ENAME)])\n"
+ + " LogicalFilter(condition=[=($cor1.DEPTNO, $0)])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n";
+ assertThat(relNode, hasTree(expect));
+
+ fixture.withRelTransform(a -> relNode)
+ .assertColumnOriginDouble("EMP", "ENAME",
+ "DEPT", "NAME", true);
+
+ // check correlate input column origins
+ final RelMetadataFixture.MetadataConfig metadataConfig =
+ fixture.metadataConfig;
+ final RelMetadataQuery mq =
+ new RelMetadataQuery(metadataConfig.getDefaultHandlerProvider());
+ Set<RelColumnOrigin> origins =
+ mq.getColumnOrigins(relNode.getInput(0).getInput(1), 0);
+
+ assertThat(origins, hasSize(2));
+ for (RelColumnOrigin origin : origins) {
+ if (origin.isCorVar()) {
+ CorrelationId correlationId = origin.getCorrelationId();
+ assertThat(correlationId, notNullValue());
+ assertThat(correlationId.getName(), equalTo("$cor1"));
+ assertThat(origin.getOriginColumnOrdinal(), equalTo(1));
+ continue;
Review Comment:
in this case I think that an `else` is more appropriate.
##########
core/src/test/java/org/apache/calcite/test/RelMetadataTest.java:
##########
@@ -458,6 +460,56 @@ void testColumnOriginsUnion() {
equalTo("SAL"));
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6744">[CALCITE-6744]
+ * Support getColumnOrigins for correlate in RelMdColumnOrigins</a>. */
+ @Test void testColumnOriginsForCorrelate() {
+ final String sql = "select (select max(dept.name || '_' || emp.ename)"
+ + "from dept where emp.deptno = dept.deptno) from emp";
+ final RelMetadataFixture fixture = sql(sql);
+
+ final HepProgramBuilder programBuilder = HepProgram.builder();
+ programBuilder.addRuleInstance(CoreRules.PROJECT_SUB_QUERY_TO_CORRELATE);
+ final HepPlanner planner = new HepPlanner(programBuilder.build());
+ planner.setRoot(fixture.toRel());
+ final RelNode relNode = planner.findBestExp();
+
+ String expect = "LogicalProject(EXPR$0=[$9])\n"
+ + " LogicalCorrelate(correlation=[$cor1], joinType=[left],
requiredColumns=[{1, 7}])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n"
+ + " LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n"
+ + " LogicalProject($f0=[||(||($1, '_'), $cor1.ENAME)])\n"
+ + " LogicalFilter(condition=[=($cor1.DEPTNO, $0)])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n";
+ assertThat(relNode, hasTree(expect));
+
+ fixture.withRelTransform(a -> relNode)
+ .assertColumnOriginDouble("EMP", "ENAME",
+ "DEPT", "NAME", true);
+
+ // check correlate input column origins
+ final RelMetadataFixture.MetadataConfig metadataConfig =
+ fixture.metadataConfig;
+ final RelMetadataQuery mq =
+ new RelMetadataQuery(metadataConfig.getDefaultHandlerProvider());
+ Set<RelColumnOrigin> origins =
+ mq.getColumnOrigins(relNode.getInput(0).getInput(1), 0);
+
+ assertThat(origins, hasSize(2));
+ for (RelColumnOrigin origin : origins) {
+ if (origin.isCorVar()) {
+ CorrelationId correlationId = origin.getCorrelationId();
+ assertThat(correlationId, notNullValue());
+ assertThat(correlationId.getName(), equalTo("$cor1"));
+ assertThat(origin.getOriginColumnOrdinal(), equalTo(1));
+ continue;
+ }
+ assertThat(origin.getOriginTable(), notNullValue());
+ assertThat(origin.getOriginTable().getQualifiedName().get(2),
equalTo("DEPT"));
+ assertThat(origin.getOriginColumnOrdinal(), equalTo(1));
Review Comment:
is this `dept.name`?
##########
core/src/test/java/org/apache/calcite/test/RelMetadataTest.java:
##########
@@ -458,6 +460,56 @@ void testColumnOriginsUnion() {
equalTo("SAL"));
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6744">[CALCITE-6744]
+ * Support getColumnOrigins for correlate in RelMdColumnOrigins</a>. */
+ @Test void testColumnOriginsForCorrelate() {
+ final String sql = "select (select max(dept.name || '_' || emp.ename)"
+ + "from dept where emp.deptno = dept.deptno) from emp";
+ final RelMetadataFixture fixture = sql(sql);
+
+ final HepProgramBuilder programBuilder = HepProgram.builder();
+ programBuilder.addRuleInstance(CoreRules.PROJECT_SUB_QUERY_TO_CORRELATE);
+ final HepPlanner planner = new HepPlanner(programBuilder.build());
+ planner.setRoot(fixture.toRel());
+ final RelNode relNode = planner.findBestExp();
+
+ String expect = "LogicalProject(EXPR$0=[$9])\n"
+ + " LogicalCorrelate(correlation=[$cor1], joinType=[left],
requiredColumns=[{1, 7}])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n"
+ + " LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n"
+ + " LogicalProject($f0=[||(||($1, '_'), $cor1.ENAME)])\n"
+ + " LogicalFilter(condition=[=($cor1.DEPTNO, $0)])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n";
+ assertThat(relNode, hasTree(expect));
+
+ fixture.withRelTransform(a -> relNode)
+ .assertColumnOriginDouble("EMP", "ENAME",
+ "DEPT", "NAME", true);
+
+ // check correlate input column origins
+ final RelMetadataFixture.MetadataConfig metadataConfig =
+ fixture.metadataConfig;
+ final RelMetadataQuery mq =
+ new RelMetadataQuery(metadataConfig.getDefaultHandlerProvider());
+ Set<RelColumnOrigin> origins =
+ mq.getColumnOrigins(relNode.getInput(0).getInput(1), 0);
Review Comment:
is this LogicalAggregate? Maybe you can say this in a comment.
##########
core/src/test/java/org/apache/calcite/test/RelMetadataTest.java:
##########
@@ -458,6 +460,56 @@ void testColumnOriginsUnion() {
equalTo("SAL"));
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6744">[CALCITE-6744]
+ * Support getColumnOrigins for correlate in RelMdColumnOrigins</a>. */
+ @Test void testColumnOriginsForCorrelate() {
+ final String sql = "select (select max(dept.name || '_' || emp.ename)"
+ + "from dept where emp.deptno = dept.deptno) from emp";
+ final RelMetadataFixture fixture = sql(sql);
+
+ final HepProgramBuilder programBuilder = HepProgram.builder();
+ programBuilder.addRuleInstance(CoreRules.PROJECT_SUB_QUERY_TO_CORRELATE);
+ final HepPlanner planner = new HepPlanner(programBuilder.build());
+ planner.setRoot(fixture.toRel());
+ final RelNode relNode = planner.findBestExp();
+
+ String expect = "LogicalProject(EXPR$0=[$9])\n"
+ + " LogicalCorrelate(correlation=[$cor1], joinType=[left],
requiredColumns=[{1, 7}])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n"
+ + " LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n"
+ + " LogicalProject($f0=[||(||($1, '_'), $cor1.ENAME)])\n"
+ + " LogicalFilter(condition=[=($cor1.DEPTNO, $0)])\n"
+ + " LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n";
+ assertThat(relNode, hasTree(expect));
+
+ fixture.withRelTransform(a -> relNode)
+ .assertColumnOriginDouble("EMP", "ENAME",
+ "DEPT", "NAME", true);
+
+ // check correlate input column origins
+ final RelMetadataFixture.MetadataConfig metadataConfig =
+ fixture.metadataConfig;
+ final RelMetadataQuery mq =
+ new RelMetadataQuery(metadataConfig.getDefaultHandlerProvider());
+ Set<RelColumnOrigin> origins =
+ mq.getColumnOrigins(relNode.getInput(0).getInput(1), 0);
+
+ assertThat(origins, hasSize(2));
+ for (RelColumnOrigin origin : origins) {
+ if (origin.isCorVar()) {
+ CorrelationId correlationId = origin.getCorrelationId();
+ assertThat(correlationId, notNullValue());
+ assertThat(correlationId.getName(), equalTo("$cor1"));
+ assertThat(origin.getOriginColumnOrdinal(), equalTo(1));
Review Comment:
want to check that originTable is null too?
Is this `ENAME`?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]