Annotation of embedaddon/sqlite3/test/reindex.test, revision 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>