persistentstorage/sqlite3api/TEST/TclScript/reindex.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 # 2004 November 5
       
     2 #
       
     3 # The author disclaims copyright to this source code.  In place of
       
     4 # a legal notice, here is a blessing:
       
     5 #
       
     6 #    May you do good and not evil.
       
     7 #    May you find forgiveness for yourself and forgive others.
       
     8 #    May you share freely, never taking more than you give.
       
     9 #
       
    10 #***********************************************************************
       
    11 # This file implements regression tests for SQLite library.
       
    12 # This file implements tests for the REINDEX command.
       
    13 #
       
    14 # $Id: reindex.test,v 1.4 2008/07/12 14:52:20 drh Exp $
       
    15 
       
    16 set testdir [file dirname $argv0]
       
    17 source $testdir/tester.tcl
       
    18 
       
    19 # There is nothing to test if REINDEX is disable for this build.
       
    20 #
       
    21 ifcapable {!reindex} {
       
    22   finish_test
       
    23   return
       
    24 }
       
    25 
       
    26 # Basic sanity checks.
       
    27 #
       
    28 do_test reindex-1.1 {
       
    29   execsql {
       
    30     CREATE TABLE t1(a,b);
       
    31     INSERT INTO t1 VALUES(1,2);
       
    32     INSERT INTO t1 VALUES(3,4);
       
    33     CREATE INDEX i1 ON t1(a);
       
    34     REINDEX;
       
    35   }
       
    36 } {}
       
    37 integrity_check reindex-1.2
       
    38 do_test reindex-1.3 {
       
    39   execsql {
       
    40     REINDEX t1;
       
    41   }
       
    42 } {}
       
    43 integrity_check reindex-1.4
       
    44 do_test reindex-1.5 {
       
    45   execsql {
       
    46     REINDEX i1;
       
    47   }
       
    48 } {}
       
    49 integrity_check reindex-1.6
       
    50 do_test reindex-1.7 {
       
    51   execsql {
       
    52     REINDEX main.t1;
       
    53   }
       
    54 } {}
       
    55 do_test reindex-1.8 {
       
    56   execsql {
       
    57     REINDEX main.i1;
       
    58   }
       
    59 } {}
       
    60 do_test reindex-1.9 {
       
    61   catchsql {
       
    62     REINDEX bogus
       
    63   }
       
    64 } {1 {unable to identify the object to be reindexed}}
       
    65 
       
    66 # Set up a table for testing that includes several different collating
       
    67 # sequences including some that we can modify.
       
    68 #
       
    69 do_test reindex-2.1 {
       
    70   proc c1 {a b} {
       
    71     return [expr {-[string compare $a $b]}]
       
    72   }
       
    73   proc c2 {a b} {
       
    74     return [expr {-[string compare [string tolower $a] [string tolower $b]]}]
       
    75   }
       
    76   db collate c1 c1
       
    77   db collate c2 c2
       
    78   execsql {
       
    79     CREATE TABLE t2(
       
    80       a TEXT PRIMARY KEY COLLATE c1,
       
    81       b TEXT UNIQUE COLLATE c2,
       
    82       c TEXT COLLATE nocase,
       
    83       d TEST COLLATE binary
       
    84     );
       
    85     INSERT INTO t2 VALUES('abc','abc','abc','abc');
       
    86     INSERT INTO t2 VALUES('ABCD','ABCD','ABCD','ABCD');
       
    87     INSERT INTO t2 VALUES('bcd','bcd','bcd','bcd');
       
    88     INSERT INTO t2 VALUES('BCDE','BCDE','BCDE','BCDE');
       
    89     SELECT a FROM t2 ORDER BY a;
       
    90   }
       
    91 } {bcd abc BCDE ABCD}
       
    92 do_test reindex-2.2 {
       
    93   execsql {
       
    94     SELECT b FROM t2 ORDER BY b;
       
    95   }
       
    96 } {BCDE bcd ABCD abc}
       
    97 do_test reindex-2.3 {
       
    98   execsql {
       
    99     SELECT c FROM t2 ORDER BY c;
       
   100   }
       
   101 } {abc ABCD bcd BCDE}
       
   102 do_test reindex-2.4 {
       
   103   execsql {
       
   104     SELECT d FROM t2 ORDER BY d;
       
   105   }
       
   106 } {ABCD BCDE abc bcd}
       
   107 
       
   108 # Change a collating sequence function.  Verify that REINDEX rebuilds
       
   109 # the index.
       
   110 #
       
   111 do_test reindex-2.5 {
       
   112   proc c1 {a b} {
       
   113     return [string compare $a $b]
       
   114   }
       
   115   execsql {
       
   116     SELECT a FROM t2 ORDER BY a;
       
   117   }
       
   118 } {bcd abc BCDE ABCD}
       
   119 ifcapable {integrityck} {
       
   120   do_test reindex-2.5.1 {
       
   121     string equal ok [execsql {PRAGMA integrity_check}]
       
   122   } {0}
       
   123 }
       
   124 do_test reindex-2.6 {
       
   125   execsql {
       
   126     REINDEX c2;
       
   127     SELECT a FROM t2 ORDER BY a;
       
   128   }
       
   129 } {bcd abc BCDE ABCD}
       
   130 do_test reindex-2.7 {
       
   131   execsql {
       
   132     REINDEX t1;
       
   133     SELECT a FROM t2 ORDER BY a;
       
   134   }
       
   135 } {bcd abc BCDE ABCD}
       
   136 do_test reindex-2.8 {
       
   137   execsql {
       
   138     REINDEX c1;
       
   139     SELECT a FROM t2 ORDER BY a;
       
   140   }
       
   141 } {ABCD BCDE abc bcd}
       
   142 integrity_check reindex-2.8.1
       
   143 
       
   144 # Try to REINDEX an index for which the collation sequence is not available.
       
   145 #
       
   146 do_test reindex-3.1 {
       
   147   sqlite3 db2 test.db
       
   148   catchsql {
       
   149     REINDEX c1;
       
   150   } db2
       
   151 } {1 {no such collation sequence: c1}}
       
   152 do_test reindex-3.2 {
       
   153   proc need_collate {collation} {
       
   154     db2 collate c1 c1
       
   155   }
       
   156   db2 collation_needed need_collate
       
   157   catchsql {
       
   158     REINDEX c1;
       
   159   } db2
       
   160 } {0 {}}
       
   161 do_test reindex-3.3 {
       
   162   catchsql {
       
   163     REINDEX;
       
   164   } db2
       
   165 } {1 {no such collation sequence: c2}}
       
   166 
       
   167 do_test reindex-3.99 {
       
   168   db2 close
       
   169 } {}
       
   170 
       
   171 finish_test