ClickHouse/tests/queries/0_stateless/01883_grouping_sets_crash.sql
Azat Khuzhin 8a224239c1 Prohibit optimize_aggregation_in_order with GROUPING SETS
AggregatingStep ignores it anyway, and it leads to the following error
in getSortDescriptionFromGroupBy(), like in [1]:

    2022.05.24 04:29:29.279431 [ 3395 ] {26543564-8bc8-4a3a-b984-70a2adf0245d} <Fatal> : Logical error: 'Trying to get name of not a column: ExpressionList'.

  [1]: https://s3.amazonaws.com/clickhouse-test-reports/36914/67d3ac72d26ab74d69f03c03422349d4faae9e19/stateless_tests__ubsan__actions_.html

v2: revert change to getSortDescriptionFromGroupBy() after
    GroupingSetsRewriterVisitor had been introduced
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-05-27 17:44:57 +03:00

128 lines
2.9 KiB
SQL

DROP TABLE IF EXISTS grouping_sets;
CREATE TABLE grouping_sets(fact_1_id Int32, fact_2_id Int32, fact_3_id Int32, fact_4_id Int32, sales_value Int32) ENGINE = Memory;
INSERT INTO grouping_sets
SELECT
number % 2 + 1 AS fact_1_id,
number % 5 + 1 AS fact_2_id,
number % 10 + 1 AS fact_3_id,
number % 10 + 1 AS fact_4_id,
number % 100 AS sales_value
FROM system.numbers limit 1000;
-- { echoOn }
SELECT
fact_3_id,
fact_4_id
FROM grouping_sets
GROUP BY
GROUPING SETS (
('wo\0ldworldwo\0ldworld'),
(fact_3_id, fact_4_id))
ORDER BY
fact_3_id, fact_4_id;
SELECT 'SECOND QUERY:';
SELECT
fact_3_id,
fact_4_id
FROM grouping_sets
GROUP BY
GROUPING SETS (
(fact_1_id, fact_2_id),
((-9223372036854775808, NULL, (tuple(1.), (tuple(1.), 1048576), 65535))),
((tuple(3.4028234663852886e38), (tuple(1024), -2147483647), NULL)),
(fact_3_id, fact_4_id))
ORDER BY
(NULL, ('256', (tuple(NULL), NULL), NULL, NULL), NULL) ASC,
fact_1_id DESC NULLS FIRST,
fact_2_id DESC NULLS FIRST,
fact_4_id ASC;
SELECT 'THIRD QUERY:';
SELECT
extractAllGroups(NULL, 'worldworldworldwo\0ldworldworldworldwo\0ld'),
fact_2_id,
fact_3_id,
fact_4_id
FROM grouping_sets
GROUP BY
GROUPING SETS (
(sales_value),
(fact_1_id, fact_2_id),
('wo\0ldworldwo\0ldworld'),
(fact_3_id, fact_4_id))
ORDER BY
fact_1_id DESC NULLS LAST,
fact_1_id DESC NULLS FIRST,
fact_2_id ASC,
fact_3_id DESC NULLS FIRST,
fact_4_id ASC;
SELECT fact_3_id
FROM grouping_sets
GROUP BY
GROUPING SETS ((fact_3_id, fact_4_id))
ORDER BY fact_3_id ASC;
-- Following two queries were fuzzed
SELECT 'w\0\0ldworldwo\0l\0world'
FROM grouping_sets
GROUP BY
GROUPING SETS (
( fact_4_id),
( NULL),
( fact_3_id, fact_4_id))
ORDER BY
NULL ASC,
NULL DESC NULLS FIRST,
fact_3_id ASC,
fact_3_id ASC NULLS LAST,
'wo\0ldworldwo\0ldworld' ASC NULLS LAST,
'w\0\0ldworldwo\0l\0world' DESC NULLS FIRST,
'wo\0ldworldwo\0ldworld' ASC,
NULL ASC NULLS FIRST,
fact_4_id DESC NULLS LAST;
SELECT fact_3_id
FROM grouping_sets
GROUP BY
GROUPING SETS (
( 'wo\0ldworldwo\0ldworldwo\0ldworldwo\0ldworldwo\0ldworldwo\0ldworldwo\0ldworldwo\0ldworld'),
( NULL),
( fact_4_id),
( fact_3_id, fact_4_id))
ORDER BY fact_3_id ASC NULLS FIRST;
SELECT fact_3_id, fact_4_id, count()
FROM grouping_sets
GROUP BY
GROUPING SETS (
( fact_3_id, fact_4_id))
ORDER BY fact_3_id, fact_4_id
SETTINGS optimize_aggregation_in_order=1;
SELECT fact_3_id, fact_4_id, count()
FROM grouping_sets
GROUP BY
GROUPING SETS (
fact_3_id,
fact_4_id)
ORDER BY fact_3_id, fact_4_id
SETTINGS optimize_aggregation_in_order=1;
SELECT fact_3_id, fact_4_id, count()
FROM grouping_sets
GROUP BY
GROUPING SETS (
( fact_3_id ),
( fact_3_id, fact_4_id))
ORDER BY fact_3_id, fact_4_id
SETTINGS optimize_aggregation_in_order=1;
-- { echoOff }
DROP TABLE IF EXISTS grouping_sets;