11fe0537eSdrh# 2013-07-31 21fe0537eSdrh# 31fe0537eSdrh# The author disclaims copyright to this source code. In place of 41fe0537eSdrh# a legal notice, here is a blessing: 51fe0537eSdrh# 61fe0537eSdrh# May you do good and not evil. 71fe0537eSdrh# May you find forgiveness for yourself and forgive others. 81fe0537eSdrh# May you share freely, never taking more than you give. 91fe0537eSdrh# 101fe0537eSdrh#*********************************************************************** 111fe0537eSdrh# 121fe0537eSdrh# Test cases for partial indices 131fe0537eSdrh# 141fe0537eSdrh 151fe0537eSdrh 161fe0537eSdrhset testdir [file dirname $argv0] 171fe0537eSdrhsource $testdir/tester.tcl 181fe0537eSdrh 191fe0537eSdrhload_static_extension db wholenumber; 201fe0537eSdrhdo_test index6-1.1 { 211fe0537eSdrh execsql { 22*721dfcf5Sdrh CREATE TABLE t1(a,b,c); 231fe0537eSdrh CREATE INDEX t1a ON t1(a) WHERE a IS NOT NULL; 241fe0537eSdrh CREATE INDEX t1b ON t1(b) WHERE b>10; 251fe0537eSdrh CREATE VIRTUAL TABLE nums USING wholenumber; 26*721dfcf5Sdrh INSERT INTO t1(a,b,c) 27*721dfcf5Sdrh SELECT CASE WHEN value%3!=0 THEN value END, value, value 281fe0537eSdrh FROM nums WHERE value<=20; 291fe0537eSdrh SELECT count(a), count(b) FROM t1; 301fe0537eSdrh } 311fe0537eSdrh} {14 20} 321fe0537eSdrh 333780be11Sdrhdo_test index6-1.2 { 343780be11Sdrh catchsql { 35*721dfcf5Sdrh CREATE INDEX bad1 ON t1(a,b) WHERE x IS NOT NULL; 363780be11Sdrh } 37*721dfcf5Sdrh} {1 {no such column: x}} 383780be11Sdrhdo_test index6-1.3 { 393780be11Sdrh catchsql { 403780be11Sdrh CREATE INDEX bad1 ON t1(a,b) WHERE EXISTS(SELECT * FROM t1); 413780be11Sdrh } 423780be11Sdrh} {1 {subqueries prohibited in partial index WHERE clauses}} 433780be11Sdrhdo_test index6-1.4 { 443780be11Sdrh catchsql { 453780be11Sdrh CREATE INDEX bad1 ON t1(a,b) WHERE a!=?1; 463780be11Sdrh } 473780be11Sdrh} {1 {parameters prohibited in partial index WHERE clauses}} 483780be11Sdrhdo_test index6-1.5 { 493780be11Sdrh catchsql { 503780be11Sdrh CREATE INDEX bad1 ON t1(a,b) WHERE a!=random(); 513780be11Sdrh } 523780be11Sdrh} {1 {functions prohibited in partial index WHERE clauses}} 533780be11Sdrhdo_test index6-1.6 { 543780be11Sdrh catchsql { 553780be11Sdrh CREATE INDEX bad1 ON t1(a,b) WHERE a NOT LIKE 'abc%'; 563780be11Sdrh } 573780be11Sdrh} {1 {functions prohibited in partial index WHERE clauses}} 583780be11Sdrh 598a9789b6Sdrhdo_test index6-1.10 { 608a9789b6Sdrh execsql { 618a9789b6Sdrh ANALYZE; 628a9789b6Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 638a9789b6Sdrh PRAGMA integrity_check; 648a9789b6Sdrh } 65*721dfcf5Sdrh} {{} 20 t1a {14 1} t1b {10 1} ok} 668a9789b6Sdrh 678a9789b6Sdrhdo_test index6-1.11 { 688a9789b6Sdrh execsql { 698a9789b6Sdrh UPDATE t1 SET a=b; 708a9789b6Sdrh ANALYZE; 718a9789b6Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 728a9789b6Sdrh PRAGMA integrity_check; 738a9789b6Sdrh } 74*721dfcf5Sdrh} {{} 20 t1a {20 1} t1b {10 1} ok} 758a9789b6Sdrh 768a9789b6Sdrhdo_test index6-1.11 { 778a9789b6Sdrh execsql { 788a9789b6Sdrh UPDATE t1 SET a=NULL WHERE b%3!=0; 798a9789b6Sdrh UPDATE t1 SET b=b+100; 808a9789b6Sdrh ANALYZE; 818a9789b6Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 828a9789b6Sdrh PRAGMA integrity_check; 838a9789b6Sdrh } 84*721dfcf5Sdrh} {{} 20 t1a {6 1} t1b {20 1} ok} 858a9789b6Sdrh 868a9789b6Sdrhdo_test index6-1.12 { 878a9789b6Sdrh execsql { 888a9789b6Sdrh UPDATE t1 SET a=CASE WHEN b%3!=0 THEN b END; 898a9789b6Sdrh UPDATE t1 SET b=b-100; 908a9789b6Sdrh ANALYZE; 918a9789b6Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 928a9789b6Sdrh PRAGMA integrity_check; 938a9789b6Sdrh } 94*721dfcf5Sdrh} {{} 20 t1a {13 1} t1b {10 1} ok} 958a9789b6Sdrh 968a9789b6Sdrhdo_test index6-1.13 { 978a9789b6Sdrh execsql { 988a9789b6Sdrh DELETE FROM t1 WHERE b BETWEEN 8 AND 12; 998a9789b6Sdrh ANALYZE; 1008a9789b6Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 1018a9789b6Sdrh PRAGMA integrity_check; 1028a9789b6Sdrh } 103*721dfcf5Sdrh} {{} 15 t1a {10 1} t1b {8 1} ok} 1048a9789b6Sdrh 1058a9789b6Sdrhdo_test index6-1.14 { 1068a9789b6Sdrh execsql { 1078a9789b6Sdrh REINDEX; 1088a9789b6Sdrh ANALYZE; 1098a9789b6Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 1108a9789b6Sdrh PRAGMA integrity_check; 1118a9789b6Sdrh } 112*721dfcf5Sdrh} {{} 15 t1a {10 1} t1b {8 1} ok} 113*721dfcf5Sdrh 114*721dfcf5Sdrhdo_test index6-1.15 { 115*721dfcf5Sdrh execsql { 116*721dfcf5Sdrh CREATE INDEX t1c ON t1(c); 117*721dfcf5Sdrh ANALYZE; 118*721dfcf5Sdrh SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; 119*721dfcf5Sdrh PRAGMA integrity_check; 120*721dfcf5Sdrh } 121*721dfcf5Sdrh} {t1a {10 1} t1b {8 1} t1c {15 1} ok} 1223780be11Sdrh 1231fe0537eSdrhfinish_test 124