Files
email-tracker/external/duckdb/test/optimizer/test_sum_rewrite.test
2025-10-24 19:21:19 -05:00

63 lines
1.8 KiB
SQL

# name: test/optimizer/test_sum_rewrite.test
# description: Test SUM rewrite
# group: [optimizer]
statement ok
CREATE TABLE integers AS FROM range(10000) t(i);
query IIII
SELECT SUM(i + 1), SUM(i + 2), SUM(i + 3), SUM(i + 4) FROM integers
----
50005000 50015000 50025000 50035000
query IIII
SELECT SUM(i + 1), SUM(2 + i), SUM(i + 3), SUM(4 + i) FROM integers
----
50005000 50015000 50025000 50035000
query IIIII
SELECT i//100000 grp, SUM(i + 1), SUM(2 + i), SUM(i + 3), SUM(4 + i) FROM integers GROUP BY grp
----
0 50005000 50015000 50025000 50035000
# empty result
query IIII
SELECT SUM(i + 1), SUM(2 + i), SUM(i + 3), SUM(4 + i) FROM integers WHERE i > 100000
----
NULL NULL NULL NULL
# nulls
statement ok
CREATE TABLE integer_nulls AS SELECT CASE WHEN i%2=0 THEN NULL ELSE i END i FROM range(10000) t(i);
query IIII
SELECT SUM(i + 1), SUM(i + 2), SUM(i + 3), SUM(i + 4) FROM integer_nulls;
----
25005000 25010000 25015000 25020000
# check that we did the rewrite using explain
statement ok
pragma explain_output='optimized_only'
query II
EXPLAIN SELECT SUM(i + 1), SUM(i + 2), SUM(i + 3), SUM(i + 4) FROM integers
----
logical_opt <REGEX>:.*sum_no_overflow\(i\).*
query II
EXPLAIN SELECT SUM(i + 1), SUM(2 + i), SUM(i + 3), SUM(4 + i) FROM integers
----
logical_opt <REGEX>:.*sum_no_overflow\(i\).*
# test rewrite with HUGEINT
statement ok
CREATE TABLE T(a HUGEINT);
statement ok
INSERT INTO T VALUES ('-40282366920938463463374607431768211455'::HUGEINT),('-40282366920938463463374607431768211455'::HUGEINT),('-40282366920938463463374607431768211455'::HUGEINT),('-40282366920938463463374607431768211455'::HUGEINT),('-40282366920938463463374607431768211455'::HUGEINT),('-40282366920938463463374607431768211455'::HUGEINT);
query I
SELECT sum(a + '40282366920938463463374607431768211455'::HUGEINT) FROM T;
----
0