Files
turso/testing/select.test
2025-02-17 13:09:33 +02:00

168 lines
4.6 KiB
Tcl
Executable File

#!/usr/bin/env tclsh
set testdir [file dirname $argv0]
source $testdir/tester.tcl
do_execsql_test select-const-1 {
SELECT 1
} {1}
do_execsql_test select-const-2 {
SELECT 2
} {2}
do_execsql_test select-true {
SELECT true
} {1}
do_execsql_test select-false {
SELECT false
} {0}
do_execsql_test select-text-escape-1 {
SELECT '''a'
} {'a}
do_execsql_test select-blob-empty {
SELECT x'';
} {}
do_execsql_test select-blob-ascii {
SELECT x'6C696D626f';
} {limbo}
do_execsql_test select-blob-emoji {
SELECT x'F09FA680';
} {🦀}
do_execsql_test select-limit-0 {
SELECT id FROM users LIMIT 0;
} {}
# ORDER BY id here because sqlite uses age_idx here and we (yet) don't so force it to evaluate in ID order
do_execsql_test select-limit-true {
SELECT id FROM users ORDER BY id LIMIT true;
} {1}
do_execsql_test select-limit-false {
SELECT id FROM users ORDER BY id LIMIT false;
} {}
do_execsql_test realify {
select price from products limit 1;
} {79.0}
do_execsql_test select-add {
select u.age + 1 from users u where u.age = 91 limit 1;
} {92}
do_execsql_test select-subtract {
select u.age - 1 from users u where u.age = 91 limit 1;
} {90}
do_execsql_test case-insensitive-columns {
select u.aGe + 1 from USERS u where U.AGe = 91 limit 1;
} {92}
do_execsql_test table-star {
select p.*, p.name from products p limit 1;
} {1|hat|79.0|hat}
do_execsql_test table-star-2 {
select p.*, u.first_name from users u join products p on u.id = p.id limit 1;
} {1|hat|79.0|Jamie}
do_execsql_test select_with_quoting {
select `users`.id from [users] where users.[id] = 5;
} {5}
do_execsql_test select_with_quoting_2 {
select "users".`id` from users where `users`.[id] = 5;
} {5}
do_execsql_test select-rowid {
select rowid, first_name from users u where rowid = 5;
} {5|Edward}
do_execsql_test select-rowid-2 {
select u.rowid, first_name from users u where rowid = 5;
} {5|Edward}
do_execsql_test seekrowid {
select * from users u where u.id = 5;
} {"5|Edward|Miller|christiankramer@example.com|725-281-1033|08522 English Plain|Lake Keith|ID|23283|15"}
do_execsql_test select_parenthesized {
select (price + 100) from products limit 1;
} {179.0}
do_execsql_test select_case_base_else {
select case when 0 then 'false' when 1 then 'true' else 'null' end;
} {true}
do_execsql_test select_case_noelse_null {
select case when 0 then 0 end;
} {}
do_execsql_test select_base_case_else {
select case 1 when 0 then 'zero' when 1 then 'one' else 'two' end;
} {one}
do_execsql_test select_base_case_null_result {
select case NULL when 0 then 'first' else 'second' end;
select case NULL when NULL then 'first' else 'second' end;
select case 0 when 0 then 'first' else 'second' end;
} {second
second
first}
do_execsql_test select_base_case_noelse_null {
select case 'null else' when 0 then 0 when 1 then 1 end;
} {}
do_execsql_test select-is-null {
select null is null, (1 / 0) is null, null is (1 / 0), (1 / 0) is (1 / 0);
select 4 is null, '4' is null, 0 is null, (1 / 2) is null;
} {1|1|1|1
0|0|0|0}
do_execsql_test select-is-not-null {
select null is not null, (1 / 0) is not null, null is not (1 / 0), (1 / 0) is not (1 / 0);
select 4 is not null, '4' is not null, 0 is not null, (1 / 2) is not null;
} {0|0|0|0
1|1|1|1}
do_execsql_test select_bin_shr {
select 997623670 >> 0, 997623670 >> 1, 997623670 >> 10, 997623670 >> 30;
select -997623670 >> 0, -997623670 >> 1, -997623670 >> 10, -997623670 >> 30;
select 997623670 << 0, 997623670 << -1, 997623670 << -10, 997623670 << -30;
select -997623670 << 0, -997623670 << -1, -997623670 << -10, -997623670 << -30;
} {997623670|498811835|974241|0
-997623670|-498811835|-974242|-1
997623670|498811835|974241|0
-997623670|-498811835|-974242|-1}
do_execsql_test select_bin_shl {
select 997623670 << 0, 997623670 << 1, 997623670 << 10, 997623670 << 30;
select -997623670 << 0, -997623670 << 1, -997623670 << 10, -997623670 << 30;
select 997623670 >> 0, 997623670 >> -1, 997623670 >> -10, 997623670 >> -30;
select -997623670 >> 0, -997623670 >> -1, -997623670 >> -10, -997623670 >> -30;
} {997623670|1995247340|1021566638080|1071190259091374080
-997623670|-1995247340|-1021566638080|-1071190259091374080
997623670|1995247340|1021566638080|1071190259091374080
-997623670|-1995247340|-1021566638080|-1071190259091374080}
# Test LIKE in SELECT position
do_execsql_test select-like-expression {
select 'bar' like 'bar%'
} {1}
do_execsql_test select-not-like-expression {
select 'bar' not like 'bar%'
} {0}
# regression test for float divisor being cast to zero int and panicking
do_execsql_test select-like-expression {
select 2 % 0.5
} {}