From 032337745bf290dc38f68bcf138cbb4265ae0158 Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Tue, 17 Jun 2025 12:35:04 +0200 Subject: [PATCH] disable more tests without index --- testing/create_table.test | 22 ++++--- testing/drop_index.test | 74 +++++++++++----------- testing/drop_table.test | 36 ++++++----- testing/select.test | 127 +++++++++++++++++++------------------- testing/subquery.test | 26 ++++---- testing/update.test | 30 ++++----- testing/where.test | 72 ++++++++++++++------- 7 files changed, 215 insertions(+), 172 deletions(-) diff --git a/testing/create_table.test b/testing/create_table.test index 858914f38..5ba4f3839 100755 --- a/testing/create_table.test +++ b/testing/create_table.test @@ -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)); -} {} diff --git a/testing/drop_index.test b/testing/drop_index.test index 63c457bec..63ab7b84d 100755 --- a/testing/drop_index.test +++ b/testing/drop_index.test @@ -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} +} diff --git a/testing/drop_table.test b/testing/drop_table.test index e1c48ec0c..00da47f1a 100755 --- a/testing/drop_table.test +++ b/testing/drop_table.test @@ -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 { diff --git a/testing/select.test b/testing/select.test index 3162e0904..96b977c59 100755 --- a/testing/select.test +++ b/testing/select.test @@ -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} diff --git a/testing/subquery.test b/testing/subquery.test index 98ecec001..ce9d40914 100644 --- a/testing/subquery.test +++ b/testing/subquery.test @@ -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 ( diff --git a/testing/update.test b/testing/update.test index 7c793932d..96cf27d0a 100755 --- a/testing/update.test +++ b/testing/update.test @@ -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); diff --git a/testing/where.test b/testing/where.test index 958d7825f..8331289f6 100755 --- a/testing/where.test +++ b/testing/where.test @@ -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;