Annotation of embedaddon/sqlite3/test/reindex.test, revision 1.1.1.1

1.1       misho       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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>