mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-11 19:24:21 +01:00
add tests for except operator
This commit is contained in:
@@ -360,6 +360,17 @@ if {[info exists ::env(SQLITE_EXEC)] && ($::env(SQLITE_EXEC) eq "scripts/limbo-s
|
||||
INSERT INTO t SELECT * FROM t1 INTERSECT SELECT * FROM t2 INTERSECT SELECT * FROM t3;
|
||||
SELECT * FROM t;
|
||||
} {2|200}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} insert_from_select_except {
|
||||
CREATE TABLE t(a, b);
|
||||
CREATE TABLE t1(a, b);
|
||||
CREATE TABLE t2(a, b);
|
||||
|
||||
INSERT INTO t1 VALUES (1, 100), (2, 200);
|
||||
INSERT INTO t2 VALUES (2, 200), (3, 300);
|
||||
INSERT INTO t SELECT * FROM t1 EXCEPT SELECT * FROM t2;
|
||||
SELECT * FROM t;
|
||||
} {1|100}
|
||||
}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} negative-primary-integer-key {
|
||||
|
||||
@@ -449,4 +449,113 @@ if {[info exists ::env(SQLITE_EXEC)] && ($::env(SQLITE_EXEC) eq "scripts/limbo-s
|
||||
} {a|a
|
||||
b|b
|
||||
z|z}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-1 {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
|
||||
select * from t EXCEPT select * from u;
|
||||
} {y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-2 {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t EXCEPT select * from u;
|
||||
} {}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-3 {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('a','y');
|
||||
INSERT INTO v VALUES('a','x'),('b','y');
|
||||
|
||||
select * from t EXCEPT select * from u EXCEPT select * from v;
|
||||
} {y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-limit {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('a', 'a'),('x','x'),('y','y'),('z','z');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
|
||||
select * from t EXCEPT select * from u limit 2;
|
||||
} {a|a
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-union-all {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t EXCEPT select * from u UNION ALL select * from v;
|
||||
} {y|y
|
||||
x|x
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-except {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t UNION ALL select * from u EXCEPT select * from v;
|
||||
} {z|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-union {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
INSERT INTO v VALUES('x','x'),('z','z');
|
||||
|
||||
select * from t EXCEPT select * from u UNION select * from v;
|
||||
} {x|x
|
||||
z|z}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-except {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
INSERT INTO v VALUES('x','x'),('z','z');
|
||||
|
||||
select * from t UNION select * from u EXCEPT select * from v;
|
||||
} {y|y
|
||||
z|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-except-intersect {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
INSERT INTO v VALUES('y','y'),('z','z');
|
||||
|
||||
select * from t EXCEPT select * from u INTERSECT select * from v;
|
||||
} {y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-intersect-except {
|
||||
CREATE TABLE t(x TEXT, y TEXT);
|
||||
CREATE TABLE u(x TEXT, y TEXT);
|
||||
CREATE TABLE v(x TEXT, y TEXT);
|
||||
INSERT INTO t VALUES('x','x'),('y','y');
|
||||
INSERT INTO u VALUES('x','x'),('z','y');
|
||||
INSERT INTO v VALUES('x','x'),('z','z');
|
||||
|
||||
select * from t INTERSECT select * from u EXCEPT select * from v;
|
||||
} {}
|
||||
}
|
||||
|
||||
@@ -584,7 +584,7 @@ mod tests {
|
||||
));
|
||||
}
|
||||
|
||||
const COMPOUND_OPERATORS: [&str; 3] = [" UNION ALL ", " UNION ", " INTERSECT "];
|
||||
const COMPOUND_OPERATORS: [&str; 3] = [" UNION ALL ", " UNION ", " INTERSECT ", " EXCEPT "];
|
||||
|
||||
let mut query = String::new();
|
||||
for (i, select_statement) in select_statements.iter().enumerate() {
|
||||
|
||||
Reference in New Issue
Block a user