mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 00:24:21 +01:00
228 lines
6.8 KiB
Tcl
Executable File
228 lines
6.8 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_on_specific_db {:memory:} group-concat-null-values-test {
|
|
CREATE TABLE t (a);
|
|
INSERT INTO t VALUES ('a'), (''), ('b'), (NULL), ('c');
|
|
SELECT group_concat(a) FROM t;
|
|
} {a,,b,c}
|
|
|
|
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-delimiter-expression {
|
|
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-group-concat-with-column-delimiter-group-by {
|
|
SELECT group_concat(name, id) FROM products GROUP BY '1';
|
|
} {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-delimiter-expression {
|
|
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-string-agg-with-column-delimiter-group-by {
|
|
SELECT string_agg(name, id) FROM products GROUP BY '1';
|
|
} {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"}
|
|
|
|
# https://github.com/tursodatabase/turso/issues/3308
|
|
do_execsql_test printf-19029102 {
|
|
select printf('%d', 3.9);
|
|
} {3}
|