| #!/usr/bin/env python3 |
| # Copyright (C) 2023 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License a |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| from python.generators.diff_tests.testing import Path, DataPath, Metric |
| from python.generators.diff_tests.testing import Csv, Json, TextProto |
| from python.generators.diff_tests.testing import DiffTestBlueprint |
| from python.generators.diff_tests.testing import DiffTestModule |
| |
| |
| class DiffTestModule_SpanJoin(DiffTestModule): |
| |
| def test_span_outer_join(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_outer_join_test.sql'), |
| out=Path('span_outer_join.out')) |
| |
| def test_span_outer_join_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t1(ts, dur, part) |
| VALUES (500, 100, 10); |
| |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1 PARTITIONED part, |
| t2 PARTITIONED part); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part" |
| 500,100,10 |
| """)) |
| |
| def test_span_outer_join_unpartitioned_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1, t2); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur" |
| """)) |
| |
| def test_span_outer_join_unpartitioned_left_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t2(ts, dur) |
| VALUES |
| (100, 400), |
| (500, 50), |
| (600, 100); |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1, t2); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur" |
| 100,400 |
| 500,50 |
| 600,100 |
| """)) |
| |
| def test_span_outer_join_unpartitioned_right_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t1(ts, dur) |
| VALUES |
| (100, 400), |
| (500, 50), |
| (600, 100); |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1, t2); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur" |
| 100,400 |
| 500,50 |
| 600,100 |
| """)) |
| |
| def test_span_outer_join_mixed(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_outer_join_mixed_test.sql'), |
| out=Path('span_outer_join_mixed.out')) |
| |
| def test_span_outer_join_mixed_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1 PARTITIONED part, t2); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part" |
| """)) |
| |
| def test_span_outer_join_mixed_left_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t2(ts, dur) |
| VALUES |
| (100, 400), |
| (500, 50), |
| (600, 100); |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1 PARTITIONED part, t2); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part" |
| """)) |
| |
| def test_span_outer_join_mixed_left_empty_rev(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t1(ts, dur, part) |
| VALUES |
| (100, 400, 0), |
| (100, 50, 1), |
| (600, 100, 1); |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t2, t1 PARTITIONED part); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part" |
| 100,400,0 |
| 100,50,1 |
| 600,100,1 |
| """)) |
| |
| def test_span_outer_join_mixed_right_empty(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| b BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t1(ts, dur, part) |
| VALUES |
| (100, 400, 0), |
| (100, 50, 1), |
| (600, 100, 1); |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t1 PARTITIONED part, t2); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part","b" |
| 100,400,0,"[NULL]" |
| 100,50,1,"[NULL]" |
| 600,100,1,"[NULL]" |
| """)) |
| |
| def test_span_outer_join_mixed_right_empty_rev(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| b BIGINT, |
| PRIMARY KEY (ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t2(ts, dur) |
| VALUES |
| (100, 400), |
| (500, 50), |
| (600, 100); |
| |
| CREATE VIRTUAL TABLE sp USING span_outer_join(t2, t1 PARTITIONED part); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part","b" |
| """)) |
| |
| def test_span_outer_join_mixed_2(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_outer_join_mixed_test.sql'), |
| out=Path('span_outer_join_mixed.out')) |
| |
| def test_span_left_join(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_left_join_test.sql'), |
| out=Path('span_left_join.out')) |
| |
| def test_span_left_join_unpartitioned(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_left_join_unpartitioned_test.sql'), |
| out=Path('span_left_join_unpartitioned.out')) |
| |
| def test_span_left_join_left_unpartitioned(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_left_join_left_unpartitioned_test.sql'), |
| out=Path('span_left_join_left_unpartitioned.out')) |
| |
| def test_span_left_join_left_partitioned(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=Path('span_left_join_left_partitioned_test.sql'), |
| out=Path('span_left_join_left_partitioned.out')) |
| |
| def test_span_left_join_empty_right(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t1(ts, dur, part) |
| VALUES |
| (500, 500, 100); |
| |
| CREATE VIRTUAL TABLE sp USING span_left_join(t1 PARTITIONED part, |
| t2 PARTITIONED part); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part" |
| 500,500,100 |
| """)) |
| |
| def test_span_left_join_unordered_android_sched_and_ps(self): |
| return DiffTestBlueprint( |
| trace=Path('../common/synth_1.py'), |
| query=""" |
| CREATE TABLE t1( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| CREATE TABLE t2( |
| ts BIGINT, |
| dur BIGINT, |
| part BIGINT, |
| PRIMARY KEY (part, ts) |
| ) WITHOUT ROWID; |
| |
| INSERT INTO t1(ts, dur, part) |
| VALUES (500, 100, 10); |
| |
| INSERT INTO t2(ts, dur, part) |
| VALUES (500, 100, 5); |
| |
| CREATE VIRTUAL TABLE sp USING span_left_join(t1 PARTITIONED part, |
| t2 PARTITIONED part); |
| |
| SELECT * FROM sp; |
| """, |
| out=Csv(""" |
| "ts","dur","part" |
| 500,100,10 |
| """)) |