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 <jiajunbernou...@foxmail.com> AuthorDate: Sat Nov 19 19:54:38 2022 +0800 [CALCITE-5392] Support Snapshot in RelMdExpressionLineage Co-authored-by: Alessandro Solimando <alessandro.solima...@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) {