mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-04 18:18:03 +00:00
disable more tests without index
This commit is contained in:
parent
4b88d47aba
commit
032337745b
7 changed files with 215 additions and 172 deletions
|
@ -3,14 +3,16 @@
|
|||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
|
||||
do_execsql_test_in_memory_any_error create_table_one_unique_set {
|
||||
CREATE TABLE t4(a, unique(b));
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
do_execsql_test_in_memory_any_error create_table_one_unique_set {
|
||||
CREATE TABLE t4(a, unique(b));
|
||||
}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} create_table_same_uniques_and_primary_keys {
|
||||
CREATE TABLE t2(a,b, unique(a,b), primary key(a,b));
|
||||
} {}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} create_table_unique_contained_in_primary_keys {
|
||||
CREATE TABLE t4(a,b, primary key(a,b), unique(a));
|
||||
} {}
|
||||
}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} create_table_same_uniques_and_primary_keys {
|
||||
CREATE TABLE t2(a,b, unique(a,b), primary key(a,b));
|
||||
} {}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} create_table_unique_contained_in_primary_keys {
|
||||
CREATE TABLE t4(a,b, primary key(a,b), unique(a));
|
||||
} {}
|
||||
|
|
|
@ -3,44 +3,46 @@
|
|||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
|
||||
# Basic DROP INDEX functionality
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-basic-1 {
|
||||
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||
CREATE INDEX t_idx on t1 (x);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
DROP INDEX t_idx;
|
||||
SELECT count(*) FROM sqlite_schema WHERE type='index' AND name='t_idx';
|
||||
} {0}
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
# Basic DROP INDEX functionality
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-basic-1 {
|
||||
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||
CREATE INDEX t_idx on t1 (x);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
DROP INDEX t_idx;
|
||||
SELECT count(*) FROM sqlite_schema WHERE type='index' AND name='t_idx';
|
||||
} {0}
|
||||
|
||||
# Test DROP INDEX IF EXISTS on existing index
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-if-exists-1 {
|
||||
CREATE TABLE t2(x INTEGER PRIMARY KEY);
|
||||
CREATE INDEX t_idx2 on t2 (x);
|
||||
DROP INDEX IF EXISTS t_idx2;
|
||||
SELECT count(*) FROM sqlite_schema WHERE type='index' AND name='t_idx2';
|
||||
} {0}
|
||||
# Test DROP INDEX IF EXISTS on existing index
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-if-exists-1 {
|
||||
CREATE TABLE t2(x INTEGER PRIMARY KEY);
|
||||
CREATE INDEX t_idx2 on t2 (x);
|
||||
DROP INDEX IF EXISTS t_idx2;
|
||||
SELECT count(*) FROM sqlite_schema WHERE type='index' AND name='t_idx2';
|
||||
} {0}
|
||||
|
||||
# Test DROP INDEX IF EXISTS on non-existent index
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-if-exists-2 {
|
||||
DROP TABLE IF EXISTS nonexistent_index;
|
||||
SELECT 'success';
|
||||
} {success}
|
||||
# Test DROP INDEX IF EXISTS on non-existent index
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-if-exists-2 {
|
||||
DROP TABLE IF EXISTS nonexistent_index;
|
||||
SELECT 'success';
|
||||
} {success}
|
||||
|
||||
# Test dropping non-existant index produces an error
|
||||
do_execsql_test_error_content drop-index-no-index {
|
||||
DROP INDEX t_idx;
|
||||
} {"No such index: t_idx"}
|
||||
# Test dropping non-existant index produces an error
|
||||
do_execsql_test_error_content drop-index-no-index {
|
||||
DROP INDEX t_idx;
|
||||
} {"No such index: t_idx"}
|
||||
|
||||
|
||||
# Test dropping index after multiple inserts and deletes
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-after-ops-1 {
|
||||
CREATE TABLE t6(x INTEGER PRIMARY KEY);
|
||||
CREATE INDEX t_idx6 on t6 (x);
|
||||
INSERT INTO t6 VALUES (1);
|
||||
INSERT INTO t6 VALUES (2);
|
||||
DELETE FROM t6 WHERE x = 1;
|
||||
INSERT INTO t6 VALUES (3);
|
||||
DROP INDEX t_idx6;
|
||||
SELECT count(*) FROM sqlite_schema WHERE type='index' AND name='t_idx6';
|
||||
} {0}
|
||||
# Test dropping index after multiple inserts and deletes
|
||||
do_execsql_test_on_specific_db {:memory:} drop-index-after-ops-1 {
|
||||
CREATE TABLE t6(x INTEGER PRIMARY KEY);
|
||||
CREATE INDEX t_idx6 on t6 (x);
|
||||
INSERT INTO t6 VALUES (1);
|
||||
INSERT INTO t6 VALUES (2);
|
||||
DELETE FROM t6 WHERE x = 1;
|
||||
INSERT INTO t6 VALUES (3);
|
||||
DROP INDEX t_idx6;
|
||||
SELECT count(*) FROM sqlite_schema WHERE type='index' AND name='t_idx6';
|
||||
} {0}
|
||||
}
|
||||
|
|
|
@ -25,24 +25,26 @@ do_execsql_test_on_specific_db {:memory:} drop-table-if-exists-2 {
|
|||
SELECT 'success';
|
||||
} {success}
|
||||
|
||||
# Test dropping table with index
|
||||
do_execsql_test_on_specific_db {:memory:} drop-table-with-index-1 {
|
||||
CREATE TABLE t3(x INTEGER PRIMARY KEY, y TEXT);
|
||||
CREATE INDEX idx_t3_y ON t3(y);
|
||||
INSERT INTO t3 VALUES(1, 'one');
|
||||
DROP TABLE t3;
|
||||
SELECT count(*) FROM sqlite_schema WHERE tbl_name='t3';
|
||||
} {0}
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
# Test dropping table with index
|
||||
do_execsql_test_on_specific_db {:memory:} drop-table-with-index-1 {
|
||||
CREATE TABLE t3(x INTEGER PRIMARY KEY, y TEXT);
|
||||
CREATE INDEX idx_t3_y ON t3(y);
|
||||
INSERT INTO t3 VALUES(1, 'one');
|
||||
DROP TABLE t3;
|
||||
SELECT count(*) FROM sqlite_schema WHERE tbl_name='t3';
|
||||
} {0}
|
||||
# Test dropping table cleans up related schema entries
|
||||
do_execsql_test_on_specific_db {:memory:} drop-table-schema-cleanup-1 {
|
||||
CREATE TABLE t4(x INTEGER PRIMARY KEY, y TEXT);
|
||||
CREATE INDEX idx1_t4 ON t4(x);
|
||||
CREATE INDEX idx2_t4 ON t4(y);
|
||||
INSERT INTO t4 VALUES(1, 'one');
|
||||
DROP TABLE t4;
|
||||
SELECT count(*) FROM sqlite_schema WHERE tbl_name='t4';
|
||||
} {0}
|
||||
}
|
||||
|
||||
# Test dropping table cleans up related schema entries
|
||||
do_execsql_test_on_specific_db {:memory:} drop-table-schema-cleanup-1 {
|
||||
CREATE TABLE t4(x INTEGER PRIMARY KEY, y TEXT);
|
||||
CREATE INDEX idx1_t4 ON t4(x);
|
||||
CREATE INDEX idx2_t4 ON t4(y);
|
||||
INSERT INTO t4 VALUES(1, 'one');
|
||||
DROP TABLE t4;
|
||||
SELECT count(*) FROM sqlite_schema WHERE tbl_name='t4';
|
||||
} {0}
|
||||
|
||||
# Test dropping table after multiple inserts and deletes
|
||||
do_execsql_test_on_specific_db {:memory:} drop-table-after-ops-1 {
|
||||
|
|
|
@ -285,76 +285,79 @@ do_execsql_test_on_specific_db {:memory:} select-union-all-with-filters {
|
|||
6
|
||||
10}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-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'),('y','y');
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-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'),('y','y');
|
||||
|
||||
select * from t UNION select * from u;
|
||||
} {x|x
|
||||
y|y}
|
||||
select * from t UNION select * from u;
|
||||
} {x|x
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t UNION select * from u UNION ALL select * from v;
|
||||
} {x|x
|
||||
y|y
|
||||
x|x
|
||||
y|y}
|
||||
select * from t UNION select * from u UNION ALL select * from v;
|
||||
} {x|x
|
||||
y|y
|
||||
x|x
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-union-2 {
|
||||
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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-union-2 {
|
||||
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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t UNION ALL select * from u UNION select * from v;
|
||||
} {x|x
|
||||
y|y}
|
||||
select * from t UNION ALL select * from u UNION select * from v;
|
||||
} {x|x
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t UNION select * from u UNION select * from v;
|
||||
} {x|x
|
||||
y|y}
|
||||
select * from t UNION select * from u UNION select * from v;
|
||||
} {x|x
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-4 {
|
||||
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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-4 {
|
||||
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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t UNION select * from u UNION select * from v UNION select * from t;
|
||||
} {x|x
|
||||
y|y}
|
||||
select * from t UNION select * from u UNION select * from v UNION select * from t;
|
||||
} {x|x
|
||||
y|y}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-union-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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
do_execsql_test_on_specific_db {:memory:} select-union-all-union-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'),('y','y');
|
||||
INSERT INTO v VALUES('x','x'),('y','y');
|
||||
|
||||
select * from t UNION select * from u UNION select * from v UNION ALL select * from t;
|
||||
} {x|x
|
||||
y|y
|
||||
x|x
|
||||
y|y}
|
||||
}
|
||||
|
||||
select * from t UNION select * from u UNION select * from v UNION ALL select * from t;
|
||||
} {x|x
|
||||
y|y
|
||||
x|x
|
||||
y|y}
|
||||
|
|
|
@ -412,19 +412,21 @@ do_execsql_test subquery-ignore-unused-cte {
|
|||
select * from sub;
|
||||
} {Jamie}
|
||||
|
||||
# Test verifying that select distinct works (distinct ages are 1-100)
|
||||
do_execsql_test subquery-count-distinct-age {
|
||||
select count(1) from (select distinct age from users);
|
||||
} {100}
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
# Test verifying that select distinct works (distinct ages are 1-100)
|
||||
do_execsql_test subquery-count-distinct-age {
|
||||
select count(1) from (select distinct age from users);
|
||||
} {100}
|
||||
|
||||
# Test verifying that select distinct works for multiple columns, and across joins
|
||||
do_execsql_test subquery-count-distinct {
|
||||
select count(1) from (
|
||||
select distinct first_name, name
|
||||
from users u join products p
|
||||
where u.id < 100
|
||||
);
|
||||
} {902}
|
||||
# Test verifying that select distinct works for multiple columns, and across joins
|
||||
do_execsql_test subquery-count-distinct {
|
||||
select count(1) from (
|
||||
select distinct first_name, name
|
||||
from users u join products p
|
||||
where u.id < 100
|
||||
);
|
||||
} {902}
|
||||
}
|
||||
|
||||
do_execsql_test subquery-count-all {
|
||||
select count(1) from (
|
||||
|
|
|
@ -190,20 +190,22 @@ do_execsql_test_on_specific_db {:memory:} update_cache_full_regression_test_#162
|
|||
SELECT count(*) FROM t;
|
||||
} {1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} update_index_regression_test {
|
||||
CREATE TABLE t(x, y);
|
||||
CREATE INDEX tx ON t (x);
|
||||
CREATE UNIQUE INDEX tyu ON t (y);
|
||||
INSERT INTO t VALUES (1, 1);
|
||||
SELECT x FROM t; -- uses tx index
|
||||
SELECT y FROM t; -- uses ty index
|
||||
UPDATE t SET x=2, y=2;
|
||||
SELECT x FROM t; -- uses tx index
|
||||
SELECT y FROM t; -- uses ty index
|
||||
} {1
|
||||
1
|
||||
2
|
||||
2}
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
do_execsql_test_on_specific_db {:memory:} update_index_regression_test {
|
||||
CREATE TABLE t(x, y);
|
||||
CREATE INDEX tx ON t (x);
|
||||
CREATE UNIQUE INDEX tyu ON t (y);
|
||||
INSERT INTO t VALUES (1, 1);
|
||||
SELECT x FROM t; -- uses tx index
|
||||
SELECT y FROM t; -- uses ty index
|
||||
UPDATE t SET x=2, y=2;
|
||||
SELECT x FROM t; -- uses tx index
|
||||
SELECT y FROM t; -- uses ty index
|
||||
} {1
|
||||
1
|
||||
2
|
||||
2}
|
||||
}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} update_where_or_regression_test {
|
||||
CREATE TABLE t (a INTEGER);
|
||||
|
|
|
@ -155,26 +155,49 @@ do_execsql_test where-clause-no-table-constant-condition-false-7 {
|
|||
select 1 where 'hamburger';
|
||||
} {}
|
||||
|
||||
# this test functions as an assertion that the index on users.age is being used, since the results are ordered by age without an order by.
|
||||
do_execsql_test select-where-and {
|
||||
select first_name, age from users where first_name = 'Jamie' and age > 80
|
||||
} {Jamie|87
|
||||
Jamie|88
|
||||
Jamie|88
|
||||
Jamie|92
|
||||
Jamie|94
|
||||
Jamie|99
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
# this test functions as an assertion that the index on users.age is being used, since the results are ordered by age without an order by.
|
||||
do_execsql_test select-where-and {
|
||||
select first_name, age from users where first_name = 'Jamie' and age > 80
|
||||
} {Jamie|87
|
||||
Jamie|88
|
||||
Jamie|88
|
||||
Jamie|92
|
||||
Jamie|94
|
||||
Jamie|99
|
||||
}
|
||||
do_execsql_test select-where-or {
|
||||
select first_name, age from users where first_name = 'Jamie' and age > 80
|
||||
} {Jamie|87
|
||||
Jamie|88
|
||||
Jamie|88
|
||||
Jamie|92
|
||||
Jamie|94
|
||||
Jamie|99
|
||||
}
|
||||
} else {
|
||||
# this test functions as an assertion that the index on users.age is being used, since the results are ordered by age without an order by.
|
||||
do_execsql_test select-where-and {
|
||||
select first_name, age from users where first_name = 'Jamie' and age > 80
|
||||
} {Jamie|94
|
||||
Jamie|88
|
||||
Jamie|99
|
||||
Jamie|92
|
||||
Jamie|87
|
||||
Jamie|88
|
||||
}
|
||||
do_execsql_test select-where-or {
|
||||
select first_name, age from users where first_name = 'Jamie' and age > 80
|
||||
} {Jamie|94
|
||||
Jamie|88
|
||||
Jamie|99
|
||||
Jamie|92
|
||||
Jamie|87
|
||||
Jamie|88
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
do_execsql_test select-where-or {
|
||||
select first_name, age from users where first_name = 'Jamie' and age > 80
|
||||
} {Jamie|87
|
||||
Jamie|88
|
||||
Jamie|88
|
||||
Jamie|92
|
||||
Jamie|94
|
||||
Jamie|99
|
||||
}
|
||||
|
||||
do_execsql_test select-where-and-or {
|
||||
select first_name, age from users where first_name = 'Jamie' or age = 1 and age = 2
|
||||
|
@ -383,9 +406,16 @@ do_execsql_test where-age-index-seek-regression-test-2 {
|
|||
select count(1) from users where age > 0;
|
||||
} {10000}
|
||||
|
||||
do_execsql_test where-age-index-seek-regression-test-3 {
|
||||
select age from users where age > 90 limit 1;
|
||||
} {91}
|
||||
if {[info exists ::env(SQLITE_EXEC)] && $::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental"} {
|
||||
do_execsql_test where-age-index-seek-regression-test-3 {
|
||||
select age from users where age > 90 limit 1;
|
||||
} {91}
|
||||
} else {
|
||||
do_execsql_test where-age-index-seek-regression-test-3 {
|
||||
select age from users where age > 90 limit 1;
|
||||
} {94}
|
||||
|
||||
}
|
||||
|
||||
do_execsql_test where-simple-between {
|
||||
SELECT * FROM products WHERE price BETWEEN 70 AND 100;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue