xref: /sqlite-3.40.0/test/index6.test (revision 721dfcf5)
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