mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-25 20:14:21 +01:00
This bug occurred when arguments were read for the GROUP BY sorter — all arguments were incorrectly resolved to the first column. Added tests confirm that aggregates now work correctly both with and without the sorter.
178 lines
4.7 KiB
Tcl
Executable File
178 lines
4.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"}}
|