mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 08:34:19 +01:00
Closes #3892 Closes #3888 Stuff like: ```sql turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select case (select y, z from t2) when 1 then 'one' else 'other' end from t1; × Parse error: base expression in CASE must return 1 value turso> create table t(x, y); insert into t values (1, 2); select (select x, y from t) as result; × Parse error: result column must return 1 value, got 2 turso> create table t1(x,y); create table t2(y); insert into t1 values (1,1); insert into t2 values (1); select * from t2 where y = (select x,y from t1); × Parse error: all arguments to binary operator = must return the same number of │ values. Got: (1) = (2) turso> create table orders(customer_id, amount); create table thresholds(min_amount, max_amount); insert into orders values (100, 50), (100, 150); insert into thresholds values (100, 200); select customer_id, sum(amount) as total from orders group by customer_id having total > (select min_amount, max_amount from thresholds); × Parse error: all arguments to binary operator > must return the same number of │ values. Got: (1) > (2) turso> create table items(id); create table config(max_results, other_col); insert into items values (1), (2), (3); insert into config values (2, 3); select * from items limit (select max_results, other_col from config); × Parse error: limit expression must return 1 value, got 2 turso> create table items(id); create table config(skip_count, other_col); insert into items values (1), (2), (3); insert into config values (1, 2); select * from items limit 1 offset (select skip_count, other_col from config); × Parse error: offset expression must return 1 value, got 2 turso> create table items(id, name); create table sort_order(priority, other_col); insert into items values (1, 'a'), (2, 'b'); insert into sort_order values (1, 2); select * from items order by (select priority, other_col from sort_order); × Parse error: order by expression must return 1 value, got 2 turso> create table sales(product_id, amount); create table grouping(category, other_col); insert into sales values (1, 100), (2, 200); insert into grouping values (1, 2); select sum(amount) from sales group by (select category, other_col from grouping); × Parse error: group by expression must return 1 value, got 2 turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select case when (select y, z from t2) then 'yes' else 'no' end from t1; × Parse error: when expression in CASE must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select case when x = 1 then (select y, z from t2) else 0 end from t1; × Parse error: then expression in CASE must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select case when x = 2 then 0 else (select y, z from t2) end from t1; × Parse error: else expression in CASE must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select max((select y, z from t2)) from t1; × Parse error: argument 0 to function call max must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select x + (select y, z from t2) from t1; × Parse error: all arguments to binary operator + must return the same number of │ values. Got: (1) + (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (5); insert into t2 values (1, 2); select * from t1 where x between (select y, z from t2) and 10; × Parse error: all arguments to binary operator <= must return the same number of │ values. Got: (2) <= (1) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select cast((select y, z from t2) as integer) from t1; × Parse error: argument to CAST must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values ('a', 'b'); select (select y, z from t2) collate nocase from t1; × Parse error: argument to COLLATE must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select * from t1 where (select y, z from t2) is null; × Parse error: all arguments to binary operator IS must return the same number of │ values. Got: (2) IS (1) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select * from t1 where (select y, z from t2) not null; × Parse error: argument to NOT NULL must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values ('a', 'b'); select * from t1 where (select y, z from t2) like 'a%'; × Parse error: left operand of LIKE must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select -(select y, z from t2) from t1; × Parse error: argument to unary operator - must return 1 value. Got: (2) turso> create table t1(x); create table t2(y, z); insert into t1 values (1); insert into t2 values (1, 2); select abs((select y, z from t2)) from t1; × Parse error: argument 0 to function call abs must return 1 value. Got: (2) ``` Closes #3906
Turso Testing
Testing Extensions
When adding tests for extensions, please follow these guidelines:
- Tests that verify the internal logic or behavior of a particular extension should go into
cli_tests/extensions.py. - Tests that verify how extensions interact with the database engine, such as virtual table handling, should be written
in TCL (see
vtab.testas an example).
To check which extensions are available in TCL, or to add a new one, refer to the tester.tcl file and look at the extension_map.