You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2026/09/19 17:42:39 UTC
[XL] Change in asterixdb[master]: [ASTERIXDB-3815][COMP] Expressions in time travel
From Hussain Towaileb <hu...@gmail.com>:
Attention is currently required from: Hussain Towaileb.
Hello Jenkins,
I'd like you to reexamine a change. Please visit
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21606?usp=email
to look at the new patch set (#5).
The following approvals got outdated and were removed:
Integration-Tests+1 by Jenkins, Verified-1 by Jenkins
Change subject: [ASTERIXDB-3815][COMP] Expressions in time travel
......................................................................
[ASTERIXDB-3815][COMP] Expressions in time travel
AT SNAPSHOT and AT TIMESTAMP accepted only a string literal, so a
snapshot could never be derived -- every value had to be computed
outside the query and pasted in as text. The value is now an ordinary
expression: it goes through the language rewrites like any other,
reaches the plan as an expression reference, and is reduced to a
constant before the scan that consumes it is built. A value that does
not reduce to a usable constant is reported rather than ignored.
A time travel value is consumed while the plan is built, before any row
or job exists, so a function there can only mean its value now. That
makes it safe to evaluate every function in that one position, including
the clock functions that constant folding otherwise leaves alone,
without changing what any function means elsewhere. A function that
reads the job start time is reported with the wall clock variant to use
instead, taken from a registry an extension can add its own functions
to.
Also fixes two defects that silently dropped a JOIN's time travel, so
the latest snapshot was read instead of the one asked for: one when the
clause was cloned, and one when a JOIN preceding a RIGHT OUTER JOIN was
rebuilt by that rewrite.
Added test cases covering the accepted forms, clock-derived and
stringified values against a three-snapshot table, joins, subqueries,
function inlining and the right-join rewrite, the errors for a value
that is not constant, not usable or job-dependent, and the grammar.
Also resolves ASTERIXDB-3819.
Ext-ref: MB-73487
Ext-ref: MB-73488
Co-Authored-By: Claude Opus 5 <no...@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <no...@anthropic.com>
Change-Id: Ibe50c85b5defd86bed540d4c8fd14320f17cdad9
---
M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveTimeTravelValueRule.java
A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/TimeTravelUtil.java
M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
A asterixdb/asterix-app/src/test/java/org/apache/asterix/optimizer/rules/util/TimeTravelUtilTest.java
A asterixdb/asterix-app/src/test/resources/optimizerts/queries/time-travel/time-travel-clock-value.sqlpp
A asterixdb/asterix-app/src/test/resources/optimizerts/queries/time-travel/time-travel-expression.sqlpp
A asterixdb/asterix-app/src/test/resources/optimizerts/results/time-travel/time-travel-clock-value.plan
A asterixdb/asterix-app/src/test/resources/optimizerts/results/time-travel/time-travel-expression.plan
A asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/time-travel/time-travel-clock-value.plan
A asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/time-travel/time-travel-expression.plan
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/negative/bad-snapshot-format/test.090.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/negative/bad-snapshot-format/test.100.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/negative/bad-snapshot-format/test.110.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.085.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.090.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.100.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.110.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.120.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.140.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.150.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.160.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.170.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.180.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.190.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.200.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.210.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.220.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.230.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.240.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.250.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.260.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.270.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.280.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.290.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.300.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.310.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.320.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.330.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.340.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.360.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.370.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.380.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.390.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.400.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.410.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.420.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/iceberg/snapshots/test.430.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.1.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.10.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.11.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.12.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.13.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.14.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.15.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.16.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.2.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.3.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.4.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.5.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.6.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.7.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.8.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/time-travel-negative/time-travel-negative.9.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.085.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.090.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.100.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.110.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.120.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.140.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.150.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.160.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.170.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.180.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.190.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.200.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.220.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.240.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.260.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.290.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.310.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.320.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.330.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.340.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.360.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.370.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.380.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.390.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.400.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.410.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.420.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/iceberg/snapshots/result.430.adm
M asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_iceberg.xml
M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
M asterixdb/asterix-doc/src/main/markdown/builtins/7_temporal.md
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/JoinClauseRightInput.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/AbstractBinaryCorrelateClause.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/AbstractBinaryCorrelateWithConditionClause.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromTerm.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/JoinClause.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGatherFunctionCallsVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppRightJoinRewriteVisitor.java
A asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/struct/TimeTravelSpec.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppFormatPrintVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppContainsExpressionVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
A asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/TimeTravelParserTest.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
M asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractCurrentTemporalValueEval.java
M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractUnnestNonMapOperator.java
M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/TimeTravel.java
M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/LogicalOperatorDotVisitor.java
126 files changed, 3,124 insertions(+), 130 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/06/21606/5
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21606?usp=email
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newpatchset
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ibe50c85b5defd86bed540d4c8fd14320f17cdad9
Gerrit-Change-Number: 21606
Gerrit-PatchSet: 5
Gerrit-Owner: Hussain Towaileb <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Attention: Hussain Towaileb <hu...@gmail.com>