-
Notifications
You must be signed in to change notification settings - Fork 92
py: add tests for AS OF joins with different ON clauses #5335
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR adds comprehensive test coverage for AS OF joins with various ON clause configurations, addressing issue #4901. The tests validate different scenarios including multiple joins, complex conditions, aggregations, and error handling.
Key Changes:
- Added new test file with 7 test classes covering different AS OF join ON clause patterns
- Added validation for illegal ON clause usage (non-equality comparisons)
- Integrated new tests into the test suite via main.py import
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| python/tests/runtime_aggtest/asof_tests/test_asof_multi_on.py | New test file containing 7 test classes for AS OF joins with various ON clause scenarios including multi-joins, complex types, aggregations, and computed values |
| python/tests/runtime_aggtest/asof_tests/test_asof_illarg.py | Added test case for illegal ON clause condition (inequality comparison) to validate error handling |
| python/tests/runtime_aggtest/asof_tests/main.py | Imported new test module to include it in test execution |
| from tests.runtime_aggtest.aggtst_base import TstView | ||
|
|
||
|
|
||
| class asof_multi_asof(TstView): |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Class name 'asof_multi_asof' contains redundant 'asof' repetition. Consider renaming to 'asof_multi_join' or 'multi_asof_join' for clarity.
| class asof_multi_asof(TstView): | |
| class asof_multi_join(TstView): |
| {"id": 4, "t1_intt": 25, "t2_intt": None}, | ||
| {"id": 5, "t1_intt": None, "t2_intt": None}, | ||
| ] | ||
| self.sql = """CREATE MATERIALIZED VIEW asof_multiasof AS SELECT |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
View name 'asof_multiasof' should match the class name pattern or use underscores consistently. Consider 'asof_multi_asof' to match the class naming convention.
| self.sql = """CREATE MATERIALIZED VIEW asof_multiasof AS SELECT | |
| self.sql = """CREATE MATERIALIZED VIEW asof_multi_asof AS SELECT |
| {"id": 1, "t1_intt": 10, "intervall": 20}, | ||
| {"id": 2, "t1_intt": 15, "intervall": 2}, | ||
| {"id": 3, "t1_intt": 20, "intervall": -1}, | ||
| {"id": 4, "t1_intt": 25, "intervall": -1}, | ||
| {"id": 5, "t1_intt": None, "intervall": None}, | ||
| ] | ||
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | ||
| WITH joined AS ( | ||
| SELECT t1.id, | ||
| t1.intt AS t1_intt, | ||
| t2.intt AS t2_intt, | ||
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS intervall | ||
| FROM asof_tbl1 t1 | ||
| JOIN asof_tbl2 t2 | ||
| ON t1.id = t2.id | ||
| ) | ||
| SELECT j.id, j.t1_intt, intervall | ||
| FROM joined j | ||
| LEFT ASOF JOIN asof_tbl3 t3 | ||
| MATCH_CONDITION (j.intervall >= t3.intt) |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Corrected spelling of 'intervall' to 'interval'.
| {"id": 1, "t1_intt": 10, "intervall": 20}, | |
| {"id": 2, "t1_intt": 15, "intervall": 2}, | |
| {"id": 3, "t1_intt": 20, "intervall": -1}, | |
| {"id": 4, "t1_intt": 25, "intervall": -1}, | |
| {"id": 5, "t1_intt": None, "intervall": None}, | |
| ] | |
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | |
| WITH joined AS ( | |
| SELECT t1.id, | |
| t1.intt AS t1_intt, | |
| t2.intt AS t2_intt, | |
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS intervall | |
| FROM asof_tbl1 t1 | |
| JOIN asof_tbl2 t2 | |
| ON t1.id = t2.id | |
| ) | |
| SELECT j.id, j.t1_intt, intervall | |
| FROM joined j | |
| LEFT ASOF JOIN asof_tbl3 t3 | |
| MATCH_CONDITION (j.intervall >= t3.intt) | |
| {"id": 1, "t1_intt": 10, "interval": 20}, | |
| {"id": 2, "t1_intt": 15, "interval": 2}, | |
| {"id": 3, "t1_intt": 20, "interval": -1}, | |
| {"id": 4, "t1_intt": 25, "interval": -1}, | |
| {"id": 5, "t1_intt": None, "interval": None}, | |
| ] | |
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | |
| WITH joined AS ( | |
| SELECT t1.id, | |
| t1.intt AS t1_intt, | |
| t2.intt AS t2_intt, | |
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS interval | |
| FROM asof_tbl1 t1 | |
| JOIN asof_tbl2 t2 | |
| ON t1.id = t2.id | |
| ) | |
| SELECT j.id, j.t1_intt, interval | |
| FROM joined j | |
| LEFT ASOF JOIN asof_tbl3 t3 | |
| MATCH_CONDITION (j.interval >= t3.intt) |
| {"id": 1, "t1_intt": 10, "intervall": 20}, | ||
| {"id": 2, "t1_intt": 15, "intervall": 2}, | ||
| {"id": 3, "t1_intt": 20, "intervall": -1}, | ||
| {"id": 4, "t1_intt": 25, "intervall": -1}, | ||
| {"id": 5, "t1_intt": None, "intervall": None}, | ||
| ] | ||
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | ||
| WITH joined AS ( | ||
| SELECT t1.id, | ||
| t1.intt AS t1_intt, | ||
| t2.intt AS t2_intt, | ||
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS intervall | ||
| FROM asof_tbl1 t1 | ||
| JOIN asof_tbl2 t2 | ||
| ON t1.id = t2.id | ||
| ) | ||
| SELECT j.id, j.t1_intt, intervall | ||
| FROM joined j | ||
| LEFT ASOF JOIN asof_tbl3 t3 | ||
| MATCH_CONDITION (j.intervall >= t3.intt) |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Field name 'intervall' is misspelled. Should be 'interval' to match standard SQL terminology.
| {"id": 1, "t1_intt": 10, "intervall": 20}, | |
| {"id": 2, "t1_intt": 15, "intervall": 2}, | |
| {"id": 3, "t1_intt": 20, "intervall": -1}, | |
| {"id": 4, "t1_intt": 25, "intervall": -1}, | |
| {"id": 5, "t1_intt": None, "intervall": None}, | |
| ] | |
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | |
| WITH joined AS ( | |
| SELECT t1.id, | |
| t1.intt AS t1_intt, | |
| t2.intt AS t2_intt, | |
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS intervall | |
| FROM asof_tbl1 t1 | |
| JOIN asof_tbl2 t2 | |
| ON t1.id = t2.id | |
| ) | |
| SELECT j.id, j.t1_intt, intervall | |
| FROM joined j | |
| LEFT ASOF JOIN asof_tbl3 t3 | |
| MATCH_CONDITION (j.intervall >= t3.intt) | |
| {"id": 1, "t1_intt": 10, "interval": 20}, | |
| {"id": 2, "t1_intt": 15, "interval": 2}, | |
| {"id": 3, "t1_intt": 20, "interval": -1}, | |
| {"id": 4, "t1_intt": 25, "interval": -1}, | |
| {"id": 5, "t1_intt": None, "interval": None}, | |
| ] | |
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | |
| WITH joined AS ( | |
| SELECT t1.id, | |
| t1.intt AS t1_intt, | |
| t2.intt AS t2_intt, | |
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS interval | |
| FROM asof_tbl1 t1 | |
| JOIN asof_tbl2 t2 | |
| ON t1.id = t2.id | |
| ) | |
| SELECT j.id, j.t1_intt, interval | |
| FROM joined j | |
| LEFT ASOF JOIN asof_tbl3 t3 | |
| MATCH_CONDITION (j.interval >= t3.intt) |
| {"id": 1, "t1_intt": 10, "intervall": 20}, | ||
| {"id": 2, "t1_intt": 15, "intervall": 2}, | ||
| {"id": 3, "t1_intt": 20, "intervall": -1}, | ||
| {"id": 4, "t1_intt": 25, "intervall": -1}, | ||
| {"id": 5, "t1_intt": None, "intervall": None}, | ||
| ] | ||
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | ||
| WITH joined AS ( | ||
| SELECT t1.id, | ||
| t1.intt AS t1_intt, | ||
| t2.intt AS t2_intt, | ||
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS intervall | ||
| FROM asof_tbl1 t1 | ||
| JOIN asof_tbl2 t2 | ||
| ON t1.id = t2.id | ||
| ) | ||
| SELECT j.id, j.t1_intt, intervall | ||
| FROM joined j | ||
| LEFT ASOF JOIN asof_tbl3 t3 | ||
| MATCH_CONDITION (j.intervall >= t3.intt) |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Column reference 'intervall' should be 'interval' to match corrected naming.
| {"id": 1, "t1_intt": 10, "intervall": 20}, | |
| {"id": 2, "t1_intt": 15, "intervall": 2}, | |
| {"id": 3, "t1_intt": 20, "intervall": -1}, | |
| {"id": 4, "t1_intt": 25, "intervall": -1}, | |
| {"id": 5, "t1_intt": None, "intervall": None}, | |
| ] | |
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | |
| WITH joined AS ( | |
| SELECT t1.id, | |
| t1.intt AS t1_intt, | |
| t2.intt AS t2_intt, | |
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS intervall | |
| FROM asof_tbl1 t1 | |
| JOIN asof_tbl2 t2 | |
| ON t1.id = t2.id | |
| ) | |
| SELECT j.id, j.t1_intt, intervall | |
| FROM joined j | |
| LEFT ASOF JOIN asof_tbl3 t3 | |
| MATCH_CONDITION (j.intervall >= t3.intt) | |
| {"id": 1, "t1_intt": 10, "interval": 20}, | |
| {"id": 2, "t1_intt": 15, "interval": 2}, | |
| {"id": 3, "t1_intt": 20, "interval": -1}, | |
| {"id": 4, "t1_intt": 25, "interval": -1}, | |
| {"id": 5, "t1_intt": None, "interval": None}, | |
| ] | |
| self.sql = """CREATE MATERIALIZED VIEW asof_computed_int_on AS | |
| WITH joined AS ( | |
| SELECT t1.id, | |
| t1.intt AS t1_intt, | |
| t2.intt AS t2_intt, | |
| TIMESTAMPDIFF(YEAR, t1.tmestmp, t2.tmestmp) AS interval | |
| FROM asof_tbl1 t1 | |
| JOIN asof_tbl2 t2 | |
| ON t1.id = t2.id | |
| ) | |
| SELECT j.id, j.t1_intt, interval | |
| FROM joined j | |
| LEFT ASOF JOIN asof_tbl3 t3 | |
| MATCH_CONDITION (j.interval >= t3.intt) |
Signed-off-by: rivudhk <[email protected]>
Fixes: #4901