You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by as...@apache.org on 2022/11/22 13:55:42 UTC

[calcite] branch main updated: [CALCITE-5392] Support Snapshot in RelMdExpressionLineage

This is an automated email from the ASF dual-hosted git repository.

asolimando pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new e37ecb63e0 [CALCITE-5392] Support Snapshot in RelMdExpressionLineage
e37ecb63e0 is described below

commit e37ecb63e0c59aec7a4ba79b4d3473dd1cd2cfed
Author: xiejiajun <ji...@foxmail.com>
AuthorDate: Sat Nov 19 19:54:38 2022 +0800

    [CALCITE-5392] Support Snapshot in RelMdExpressionLineage
    
    Co-authored-by: Alessandro Solimando <al...@gmail.com>
---
 .../apache/calcite/rel/metadata/RelMdExpressionLineage.java | 13 +++++++++++++
 .../test/java/org/apache/calcite/test/RelMetadataTest.java  | 11 +++++++++++
 .../janino/GeneratedMetadata_ExpressionLineageHandler.java  |  2 ++
 3 files changed, 26 insertions(+)

diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java
index 05fc3e0fe4..fe9ef70b90 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java
@@ -26,6 +26,7 @@ import org.apache.calcite.rel.core.Filter;
 import org.apache.calcite.rel.core.Join;
 import org.apache.calcite.rel.core.JoinRelType;
 import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.Snapshot;
 import org.apache.calcite.rel.core.Sort;
 import org.apache.calcite.rel.core.TableModify;
 import org.apache.calcite.rel.core.TableScan;
@@ -391,6 +392,18 @@ public class RelMdExpressionLineage
     return mq.getExpressionLineage(rel.getInput(), outputExpression);
   }
 
+  /**
+   * Expression lineage from Snapshot.
+   * @param rel Snapshot relational expression
+   * @param mq metadata query
+   * @param outputExpression expression which needs to be inferred
+   * @return the inferred lineage, possibly null.
+   */
+  public @Nullable Set<RexNode> getExpressionLineage(Snapshot rel,
+      RelMetadataQuery mq, RexNode outputExpression) {
+    return mq.getExpressionLineage(rel.getInput(), outputExpression);
+  }
+
   /**
    * Expression lineage from Sort.
    */
diff --git a/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java b/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
index 5f0c8a87f9..ff03ca091a 100644
--- a/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
@@ -2258,6 +2258,17 @@ public class RelMetadataTest {
         String.valueOf(r), is(expected));
   }
 
+
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-5392">[CALCITE-5392]
+   * Support Snapshot in RelMdExpressionLineage</a>. */
+  @Test void testExpressionLineageSnapshot() {
+    String expected = "[[CATALOG, SALES, PRODUCTS_TEMPORAL].#0.$0]";
+    String comment = "'productid' is column 0 in 'catalog.sales.products_temporal'";
+    assertExpressionLineage("select productid from products_temporal\n"
+        + "for system_time as of TIMESTAMP '2011-01-02 00:00:00'", 0, expected, comment);
+  }
+
   @Test void testExpressionLineageStar() {
     // All columns in output
     final RelNode tableRel = sql("select * from emp").toRel();
diff --git a/core/src/test/resources/org/apache/calcite/rel/metadata/janino/GeneratedMetadata_ExpressionLineageHandler.java b/core/src/test/resources/org/apache/calcite/rel/metadata/janino/GeneratedMetadata_ExpressionLineageHandler.java
index 090bcffe97..ad340108b6 100644
--- a/core/src/test/resources/org/apache/calcite/rel/metadata/janino/GeneratedMetadata_ExpressionLineageHandler.java
+++ b/core/src/test/resources/org/apache/calcite/rel/metadata/janino/GeneratedMetadata_ExpressionLineageHandler.java
@@ -76,6 +76,8 @@ public final class GeneratedMetadata_ExpressionLineageHandler
       return provider0.getExpressionLineage((org.apache.calcite.rel.core.Join) r, mq, a2);
     } else if (r instanceof org.apache.calcite.rel.core.Project) {
       return provider0.getExpressionLineage((org.apache.calcite.rel.core.Project) r, mq, a2);
+    } else if (r instanceof org.apache.calcite.rel.core.Snapshot) {
+      return provider0.getExpressionLineage((org.apache.calcite.rel.core.Snapshot) r, mq, a2);
     } else if (r instanceof org.apache.calcite.rel.core.Sort) {
       return provider0.getExpressionLineage((org.apache.calcite.rel.core.Sort) r, mq, a2);
     } else if (r instanceof org.apache.calcite.rel.core.TableModify) {