mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-10-29 07:06:20 +00:00
test(sqlness): cover query options in merge-scan regressions (#9956)
* test(sqlness): cover query options on persistent SQL sessions Signed-off-by: Byte-Naut <Byte-Naut@proton.me> * test(query): cover merge-scan joins with query option controls Signed-off-by: Byte-Naut <Byte-Naut@proton.me> --------- Signed-off-by: Byte-Naut <Byte-Naut@proton.me>
This commit is contained in:
@@ -98,6 +98,337 @@ GROUP BY key_id ORDER BY key_id;
|
||||
| 33 | 2026-10-09T00:00:00 |
|
||||
+--------+---------------------+
|
||||
|
||||
-- Reproduce issue 9492 at parallelism 2 with remote dynamic filters enabled.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 2;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 2 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| true |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| plan_type | plan |
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| logical_plan | Sort: merge_semi_data.key_id ASC NULLS LAST |
|
||||
| | Projection: merge_semi_data.key_id, min(merge_semi_data.ts) AS first_ts |
|
||||
| | Aggregate: groupBy=[[merge_semi_data.key_id]], aggr=[[min(merge_semi_data.ts)]] |
|
||||
| | LeftSemi Join: merge_semi_data.key_id = __correlated_sq_1.key_id |
|
||||
| | Projection: merge_semi_data.ts, merge_semi_data.key_id |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | Filter: merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | SubqueryAlias: __correlated_sq_1 |
|
||||
| | Projection: merge_semi_data.key_id |
|
||||
| | Filter: merge_semi_data.is_match AND merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.is_match, merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| physical_plan | SortPreservingMergeExec: [key_id@0 ASC NULLS LAST] |
|
||||
| | ProjectionExec: expr=[key_id@0 as key_id, min(merge_semi_data.ts)@1 as first_ts] |
|
||||
| | SortExec: expr=[key_id@0 ASC NULLS LAST], preserve_partitioning=[true] |
|
||||
| | AggregateExec: mode=SinglePartitioned, gby=[key_id@1 as key_id], aggr=[min(merge_semi_data.ts)] |
|
||||
| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(key_id@1, key_id@0)] |
|
||||
| | RepartitionExec: partitioning=Hash([key_id@1], 2), input_partitions=2 |
|
||||
| | ProjectionExec: expr=[ts@0 as ts, key_id@1 as key_id] |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | RepartitionExec: partitioning=Hash([key_id@0], 2), input_partitions=2 |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | |
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+--------+---------------------+
|
||||
| key_id | first_ts |
|
||||
+--------+---------------------+
|
||||
| 1 | 2026-10-09 00:00:00 |
|
||||
| 2 | 2026-10-09 00:00:00 |
|
||||
| 3 | 2026-10-09 00:00:00 |
|
||||
| 11 | 2026-10-09 00:00:00 |
|
||||
| 12 | 2026-10-09 00:00:00 |
|
||||
| 13 | 2026-10-09 00:00:00 |
|
||||
| 21 | 2026-10-09 00:00:00 |
|
||||
| 22 | 2026-10-09 00:00:00 |
|
||||
| 23 | 2026-10-09 00:00:00 |
|
||||
| 31 | 2026-10-09 00:00:00 |
|
||||
| 32 | 2026-10-09 00:00:00 |
|
||||
| 33 | 2026-10-09 00:00:00 |
|
||||
+--------+---------------------+
|
||||
|
||||
-- Use one partition as the result control.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 1;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 1 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| true |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| plan_type | plan |
|
||||
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| logical_plan | Sort: merge_semi_data.key_id ASC NULLS LAST |
|
||||
| | Projection: merge_semi_data.key_id, min(merge_semi_data.ts) AS first_ts |
|
||||
| | Aggregate: groupBy=[[merge_semi_data.key_id]], aggr=[[min(merge_semi_data.ts)]] |
|
||||
| | LeftSemi Join: merge_semi_data.key_id = __correlated_sq_1.key_id |
|
||||
| | Projection: merge_semi_data.ts, merge_semi_data.key_id |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | Filter: merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | SubqueryAlias: __correlated_sq_1 |
|
||||
| | Projection: merge_semi_data.key_id |
|
||||
| | Filter: merge_semi_data.is_match AND merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.is_match, merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| physical_plan | ProjectionExec: expr=[key_id@0 as key_id, min(merge_semi_data.ts)@1 as first_ts] |
|
||||
| | SortExec: expr=[key_id@0 ASC NULLS LAST], preserve_partitioning=[false] |
|
||||
| | AggregateExec: mode=Single, gby=[key_id@1 as key_id], aggr=[min(merge_semi_data.ts)] |
|
||||
| | HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(key_id@1, key_id@0)] |
|
||||
| | ProjectionExec: expr=[ts@0 as ts, key_id@1 as key_id] |
|
||||
| | CooperativeExec |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | CooperativeExec |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | |
|
||||
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+--------+---------------------+
|
||||
| key_id | first_ts |
|
||||
+--------+---------------------+
|
||||
| 1 | 2026-10-09 00:00:00 |
|
||||
| 2 | 2026-10-09 00:00:00 |
|
||||
| 3 | 2026-10-09 00:00:00 |
|
||||
| 11 | 2026-10-09 00:00:00 |
|
||||
| 12 | 2026-10-09 00:00:00 |
|
||||
| 13 | 2026-10-09 00:00:00 |
|
||||
| 21 | 2026-10-09 00:00:00 |
|
||||
| 22 | 2026-10-09 00:00:00 |
|
||||
| 23 | 2026-10-09 00:00:00 |
|
||||
| 31 | 2026-10-09 00:00:00 |
|
||||
| 32 | 2026-10-09 00:00:00 |
|
||||
| 33 | 2026-10-09 00:00:00 |
|
||||
+--------+---------------------+
|
||||
|
||||
-- Keep two partitions and disable remote dynamic filters as the second control.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 2;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = false;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 2 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| false |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| plan_type | plan |
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| logical_plan | Sort: merge_semi_data.key_id ASC NULLS LAST |
|
||||
| | Projection: merge_semi_data.key_id, min(merge_semi_data.ts) AS first_ts |
|
||||
| | Aggregate: groupBy=[[merge_semi_data.key_id]], aggr=[[min(merge_semi_data.ts)]] |
|
||||
| | LeftSemi Join: merge_semi_data.key_id = __correlated_sq_1.key_id |
|
||||
| | Projection: merge_semi_data.ts, merge_semi_data.key_id |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | Filter: merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | SubqueryAlias: __correlated_sq_1 |
|
||||
| | Projection: merge_semi_data.key_id |
|
||||
| | Filter: merge_semi_data.is_match AND merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.is_match, merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| physical_plan | SortPreservingMergeExec: [key_id@0 ASC NULLS LAST] |
|
||||
| | ProjectionExec: expr=[key_id@0 as key_id, min(merge_semi_data.ts)@1 as first_ts] |
|
||||
| | SortExec: expr=[key_id@0 ASC NULLS LAST], preserve_partitioning=[true] |
|
||||
| | AggregateExec: mode=SinglePartitioned, gby=[key_id@1 as key_id], aggr=[min(merge_semi_data.ts)] |
|
||||
| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(key_id@1, key_id@0)] |
|
||||
| | RepartitionExec: partitioning=Hash([key_id@1], 2), input_partitions=2 |
|
||||
| | ProjectionExec: expr=[ts@0 as ts, key_id@1 as key_id] |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | RepartitionExec: partitioning=Hash([key_id@0], 2), input_partitions=2 |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | |
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+--------+---------------------+
|
||||
| key_id | first_ts |
|
||||
+--------+---------------------+
|
||||
| 1 | 2026-10-09 00:00:00 |
|
||||
| 2 | 2026-10-09 00:00:00 |
|
||||
| 3 | 2026-10-09 00:00:00 |
|
||||
| 11 | 2026-10-09 00:00:00 |
|
||||
| 12 | 2026-10-09 00:00:00 |
|
||||
| 13 | 2026-10-09 00:00:00 |
|
||||
| 21 | 2026-10-09 00:00:00 |
|
||||
| 22 | 2026-10-09 00:00:00 |
|
||||
| 23 | 2026-10-09 00:00:00 |
|
||||
| 31 | 2026-10-09 00:00:00 |
|
||||
| 32 | 2026-10-09 00:00:00 |
|
||||
| 33 | 2026-10-09 00:00:00 |
|
||||
+--------+---------------------+
|
||||
|
||||
-- Restore SQLness defaults on the shared session and check its next plan.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 4;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = true;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| true |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| plan_type | plan |
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| logical_plan | Sort: merge_semi_data.key_id ASC NULLS LAST |
|
||||
| | Projection: merge_semi_data.key_id, min(merge_semi_data.ts) AS first_ts |
|
||||
| | Aggregate: groupBy=[[merge_semi_data.key_id]], aggr=[[min(merge_semi_data.ts)]] |
|
||||
| | LeftSemi Join: merge_semi_data.key_id = __correlated_sq_1.key_id |
|
||||
| | Projection: merge_semi_data.ts, merge_semi_data.key_id |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | Filter: merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| | MergeScan [is_placeholder=false, remote_input=[ |
|
||||
| | SubqueryAlias: __correlated_sq_1 |
|
||||
| | Projection: merge_semi_data.key_id |
|
||||
| | Filter: merge_semi_data.is_match AND merge_semi_data.key_id IS NOT NULL |
|
||||
| | TableScan: merge_semi_data, partial_filters=[merge_semi_data.is_match, merge_semi_data.key_id IS NOT NULL] |
|
||||
| | ]] |
|
||||
| physical_plan | SortPreservingMergeExec: [key_id@0 ASC NULLS LAST] |
|
||||
| | ProjectionExec: expr=[key_id@0 as key_id, min(merge_semi_data.ts)@1 as first_ts] |
|
||||
| | SortExec: expr=[key_id@0 ASC NULLS LAST], preserve_partitioning=[true] |
|
||||
| | AggregateExec: mode=SinglePartitioned, gby=[key_id@1 as key_id], aggr=[min(merge_semi_data.ts)] |
|
||||
| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(key_id@1, key_id@0)] |
|
||||
| | RepartitionExec: partitioning=Hash([key_id@1], 4), input_partitions=4 |
|
||||
| | ProjectionExec: expr=[ts@0 as ts, key_id@1 as key_id] |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | RepartitionExec: partitioning=Hash([key_id@0], 4), input_partitions=4 |
|
||||
| | MergeScanExec: peers=REDACTED
|
||||
| | |
|
||||
+---------------+---------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
DROP TABLE merge_semi_data;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
@@ -46,4 +46,107 @@ WHERE key_id IN (
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- Reproduce issue 9492 at parallelism 2 with remote dynamic filters enabled.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 2;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- Use one partition as the result control.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 1;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- Keep two partitions and disable remote dynamic filters as the second control.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 2;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = false;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
-- Restore SQLness defaults on the shared session and check its next plan.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 4;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = true;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- SQLNESS REPLACE (peers.*) peers=REDACTED
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
EXPLAIN SELECT key_id, MIN(ts) AS first_ts
|
||||
FROM merge_semi_data
|
||||
WHERE key_id IN (
|
||||
SELECT key_id FROM merge_semi_data WHERE is_match = true
|
||||
)
|
||||
GROUP BY key_id ORDER BY key_id;
|
||||
|
||||
DROP TABLE merge_semi_data;
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
-- Query options persist on each protocol's connection. SQLness pins N=4.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 4 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query_parallelism = 2;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 2 |
|
||||
+-------------------+
|
||||
|
||||
-- Invalid SET preserves the preceding value.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 0;
|
||||
|
||||
Failed to execute query, err: MySqlError { ERROR 1210 (HY000): (InvalidArguments): Invalid value for parameter "query.parallelism": 0
|
||||
Hint: query.parallelism must be between 1 and 1024 }
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 2 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = false;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| false |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- Restore the shared MySQL connection before another case uses it.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 4;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = true;
|
||||
|
||||
affected_rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 4 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| true |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- PostgreSQL owns a separate session and accepts the same query options.
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 4 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.parallelism TO 2;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 2 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.parallelism = 0;
|
||||
|
||||
Failed to execute query, encountered: Error { kind: Db, cause: Some(DbError { severity: "ERROR", parsed_severity: None, code: SqlState(E22023), message: "Invalid value for parameter \"query.parallelism\": 0\nHint: query.parallelism must be between 1 and 1024", detail: None, hint: None, position: None, where_: None, schema: None, table: None, column: None, datatype: None, constraint: None, file: None, line: None, routine: None }) }
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 2 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.enable_remote_dynamic_filter_pushdown = false;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| false |
|
||||
+---------------------------------------------+
|
||||
|
||||
-- Restore the shared PostgreSQL connection as well.
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.parallelism = 4;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.enable_remote_dynamic_filter_pushdown = true;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
+-------------------+
|
||||
| query.parallelism |
|
||||
+-------------------+
|
||||
| 4 |
|
||||
+-------------------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
+---------------------------------------------+
|
||||
| query.enable_remote_dynamic_filter_pushdown |
|
||||
+---------------------------------------------+
|
||||
| true |
|
||||
+---------------------------------------------+
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
-- Query options persist on each protocol's connection. SQLness pins N=4.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query_parallelism = 2;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- Invalid SET preserves the preceding value.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 0;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = false;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- Restore the shared MySQL connection before another case uses it.
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.parallelism = 4;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SET query.enable_remote_dynamic_filter_pushdown = true;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL MYSQL
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- PostgreSQL owns a separate session and accepts the same query options.
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.parallelism TO 2;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.parallelism = 0;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.enable_remote_dynamic_filter_pushdown = false;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
|
||||
-- Restore the shared PostgreSQL connection as well.
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.parallelism = 4;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SET query.enable_remote_dynamic_filter_pushdown = true;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.parallelism;
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
SHOW VARIABLES query.enable_remote_dynamic_filter_pushdown;
|
||||
Reference in New Issue
Block a user