mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-25 12:04:21 +01:00
Aggregate functions cannot be nested, and this is validated during the translation of aggregate function arguments. Therefore, traversing their child expressions is unnecessary.
202 lines
5.7 KiB
Tcl
Executable File
202 lines
5.7 KiB
Tcl
Executable File
#!/usr/bin/env tclsh
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
|
|
do_execsql_test select-avg {
|
|
SELECT avg(age) FROM users;
|
|
} {50.396}
|
|
|
|
do_execsql_test select-avg-text {
|
|
SELECT avg(first_name) FROM users;
|
|
} {0.0}
|
|
|
|
do_execsql_test select-sum {
|
|
SELECT sum(age) FROM users;
|
|
} {503960}
|
|
|
|
do_execsql_test select-sum-text {
|
|
SELECT sum(first_name) FROM users;
|
|
} {0.0}
|
|
|
|
do_execsql_test select-total {
|
|
SELECT total(age) FROM users;
|
|
} {503960.0}
|
|
|
|
do_execsql_test select-total-text {
|
|
SELECT total(first_name) FROM users WHERE id < 3;
|
|
} {0.0}
|
|
|
|
do_execsql_test select-limit {
|
|
SELECT typeof(id) FROM users LIMIT 1;
|
|
} {integer}
|
|
|
|
do_execsql_test select-count {
|
|
SELECT count(id) FROM users;
|
|
} {10000}
|
|
|
|
do_execsql_test select-count {
|
|
SELECT count(*) FROM users;
|
|
} {10000}
|
|
|
|
do_execsql_test select-count-constant-true {
|
|
SELECT count(*) FROM users WHERE true;
|
|
} {10000}
|
|
|
|
do_execsql_test select-count-constant-false {
|
|
SELECT count(*) FROM users WHERE false;
|
|
} {0}
|
|
|
|
do_execsql_test select-max {
|
|
SELECT max(age) FROM users;
|
|
} {100}
|
|
|
|
do_execsql_test select-min {
|
|
SELECT min(age) FROM users;
|
|
} {1}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} min-null-regression-test {
|
|
CREATE TABLE t (a);
|
|
INSERT INTO t VALUES ('abc'), (NULL);
|
|
SELECT min(a) FROM t;
|
|
} {abc}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} max-null-regression-test {
|
|
CREATE TABLE t (a);
|
|
INSERT INTO t VALUES ('abc'), (NULL);
|
|
SELECT max(a) FROM t;
|
|
} {abc}
|
|
|
|
|
|
do_execsql_test select-max-text {
|
|
SELECT max(first_name) FROM users;
|
|
} {Zoe}
|
|
|
|
do_execsql_test select-min-text {
|
|
SELECT min(first_name) FROM users;
|
|
} {Aaron}
|
|
|
|
do_execsql_test select-group-concat {
|
|
SELECT group_concat(name) FROM products;
|
|
} {hat,cap,shirt,sweater,sweatshirt,shorts,jeans,sneakers,boots,coat,accessories}
|
|
|
|
do_execsql_test select-group-concat-with-delimiter {
|
|
SELECT group_concat(name, ';') FROM products;
|
|
} {hat;cap;shirt;sweater;sweatshirt;shorts;jeans;sneakers;boots;coat;accessories}
|
|
|
|
do_execsql_test select-group-concat-with-column-delimiter {
|
|
SELECT group_concat(name, id) FROM products;
|
|
} {hat2cap3shirt4sweater5sweatshirt6shorts7jeans8sneakers9boots10coat11accessories}
|
|
|
|
do_execsql_test select-string-agg-with-delimiter {
|
|
SELECT string_agg(name, ',') FROM products;
|
|
} {hat,cap,shirt,sweater,sweatshirt,shorts,jeans,sneakers,boots,coat,accessories}
|
|
|
|
do_execsql_test select-string-agg-with-column-delimiter {
|
|
SELECT string_agg(name, id) FROM products;
|
|
} {hat2cap3shirt4sweater5sweatshirt6shorts7jeans8sneakers9boots10coat11accessories}
|
|
|
|
do_execsql_test select-agg-unary-negative {
|
|
SELECT -max(age) FROM users;
|
|
} {-100}
|
|
|
|
do_execsql_test select-agg-unary-positive {
|
|
SELECT +max(age) FROM users;
|
|
} {100}
|
|
|
|
do_execsql_test select-agg-binary-unary-negative {
|
|
SELECT min(age) + -max(age) FROM users;
|
|
} {-99}
|
|
|
|
do_execsql_test select-agg-binary-unary-positive {
|
|
SELECT min(age) + +max(age) FROM users;
|
|
} {101}
|
|
|
|
do_execsql_test select-non-agg-cols-should-be-not-null {
|
|
SELECT id, first_name, sum(age) FROM users LIMIT 1;
|
|
} {1|Jamie|503960}
|
|
|
|
do_execsql_test select-with-group-by-and-agg-1 {
|
|
SELECT id, first_name, avg(age) FROM users group by last_name limit 1;
|
|
} {274|Debra|66.25}
|
|
|
|
do_execsql_test select-with-group-by-and-agg-2 {
|
|
select first_name, last_name from users where state = 'AL' group by last_name limit 10;
|
|
} {Jay|Acosta
|
|
Daniel|Adams
|
|
Aaron|Baker
|
|
Sharon|Becker
|
|
Kim|Berg
|
|
Donald|Bishop
|
|
Brian|Bradford
|
|
Jesus|Bradley
|
|
John|Brown
|
|
Hunter|Burke}
|
|
|
|
do_execsql_test select-agg-json-array {
|
|
SELECT json_group_array(name) FROM products;
|
|
} {["hat","cap","shirt","sweater","sweatshirt","shorts","jeans","sneakers","boots","coat","accessories"]}
|
|
|
|
do_execsql_test select-agg-json-array-object {
|
|
SELECT json_group_array(json_object('name', name)) FROM products;
|
|
} {[{"name":"hat"},{"name":"cap"},{"name":"shirt"},{"name":"sweater"},{"name":"sweatshirt"},{"name":"shorts"},{"name":"jeans"},{"name":"sneakers"},{"name":"boots"},{"name":"coat"},{"name":"accessories"}]}
|
|
|
|
do_execsql_test select-distinct-agg-functions {
|
|
SELECT sum(distinct age), count(distinct age), avg(distinct age) FROM users;
|
|
} {5050|100|50.5}
|
|
|
|
do_execsql_test select-json-group-object {
|
|
select price,
|
|
json_group_object(cast (id as text), name)
|
|
from products
|
|
group by price
|
|
order by price;
|
|
} {1.0|{"9":"boots"}
|
|
18.0|{"3":"shirt"}
|
|
25.0|{"4":"sweater"}
|
|
33.0|{"10":"coat"}
|
|
70.0|{"6":"shorts"}
|
|
74.0|{"5":"sweatshirt"}
|
|
78.0|{"7":"jeans"}
|
|
79.0|{"1":"hat"}
|
|
81.0|{"11":"accessories"}
|
|
82.0|{"2":"cap","8":"sneakers"}}
|
|
|
|
do_execsql_test select-json-group-object-no-sorting-required {
|
|
select age,
|
|
json_group_object(cast (id as text), first_name)
|
|
from users
|
|
where first_name like 'Am%'
|
|
group by age
|
|
order by age
|
|
limit 5;
|
|
} {1|{"6737":"Amy"}
|
|
2|{"2297":"Amy","3580":"Amanda"}
|
|
3|{"3437":"Amanda"}
|
|
5|{"2378":"Amy","3227":"Amy","5605":"Amanda"}
|
|
7|{"2454":"Amber"}}
|
|
|
|
do_execsql_test_error_content select-max-star {
|
|
SELECT max(*) FROM users;
|
|
} {"wrong number of arguments to function"}
|
|
|
|
do_execsql_test_error_content select-max-star-in-expression {
|
|
SELECT CASE WHEN max(*) > 0 THEN 1 ELSE 0 END FROM users;
|
|
} {"wrong number of arguments to function"}
|
|
|
|
do_execsql_test_error select-scalar-func-star {
|
|
SELECT abs(*) FROM users;
|
|
} {.*(Invalid aggregate function|wrong number of arguments to function).*}
|
|
|
|
do_execsql_test_error select-scalar-func-star-in-expression {
|
|
SELECT CASE WHEN abs(*) > 0 THEN 1 ELSE 0 END FROM users;
|
|
} {.*(Invalid aggregate function|wrong number of arguments to function).*}
|
|
|
|
do_execsql_test_error_content select-nested-agg-func {
|
|
SELECT max(abs(sum(age))), sum(age) FROM users;
|
|
} {"misuse of aggregate function"}
|
|
|
|
do_execsql_test_error_content select-nested-agg-func-in-expression {
|
|
SELECT CASE WHEN max(abs(sum(age))) > 0 THEN 1 ELSE 0 END, sum(age) FROM users;
|
|
} {"misuse of aggregate function"}
|