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) {