CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
reindex.test206 linesDownload Raw Back to test
1# 2004 November 52#3# The author disclaims copyright to this source code.  In place of4# 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 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18set testprefix reindex19 20# There is nothing to test if REINDEX is disable for this build.21#22ifcapable {!reindex} {23  finish_test24  return25}26 27# Basic sanity checks.28#29do_test reindex-1.1 {30  execsql {31    CREATE TABLE t1(a,b);32    INSERT INTO t1 VALUES(1,2);33    INSERT INTO t1 VALUES(3,4);34    CREATE INDEX i1 ON t1(a);35    REINDEX;36  }37} {}38integrity_check reindex-1.239do_test reindex-1.3 {40  execsql {41    REINDEX t1;42  }43} {}44integrity_check reindex-1.445do_test reindex-1.5 {46  execsql {47    REINDEX i1;48  }49} {}50integrity_check reindex-1.651do_test reindex-1.7 {52  execsql {53    REINDEX main.t1;54  }55} {}56do_test reindex-1.8 {57  execsql {58    REINDEX main.i1;59  }60} {}61do_test reindex-1.9 {62  catchsql {63    REINDEX bogus64  }65} {1 {unable to identify the object to be reindexed}}66 67# Set up a table for testing that includes several different collating68# sequences including some that we can modify.69#70do_test reindex-2.1 {71  proc c1 {a b} {72    return [expr {-[string compare $a $b]}]73  }74  proc c2 {a b} {75    return [expr {-[string compare [string tolower $a] [string tolower $b]]}]76  }77  db collate c1 c178  db collate c2 c279  execsql {80    CREATE TABLE t2(81      a TEXT PRIMARY KEY COLLATE c1,82      b TEXT UNIQUE COLLATE c2,83      c TEXT COLLATE nocase,84      d TEST COLLATE binary85    );86    INSERT INTO t2 VALUES('abc','abc','abc','abc');87    INSERT INTO t2 VALUES('ABCD','ABCD','ABCD','ABCD');88    INSERT INTO t2 VALUES('bcd','bcd','bcd','bcd');89    INSERT INTO t2 VALUES('BCDE','BCDE','BCDE','BCDE');90    SELECT a FROM t2 ORDER BY a;91  }92} {bcd abc BCDE ABCD}93do_test reindex-2.2 {94  execsql {95    SELECT b FROM t2 ORDER BY b;96  }97} {BCDE bcd ABCD abc}98do_test reindex-2.3 {99  execsql {100    SELECT c FROM t2 ORDER BY c;101  }102} {abc ABCD bcd BCDE}103do_test reindex-2.4 {104  execsql {105    SELECT d FROM t2 ORDER BY d;106  }107} {ABCD BCDE abc bcd}108 109# Change a collating sequence function.  Verify that REINDEX rebuilds110# the index.111#112do_test reindex-2.5 {113  proc c1 {a b} {114    return [string compare $a $b]115  }116  execsql {117    SELECT a FROM t2 ORDER BY a;118  }119} {bcd abc BCDE ABCD}120ifcapable {integrityck} {121  do_test reindex-2.5.1 {122    string equal ok [execsql {PRAGMA integrity_check}]123  } {0}124}125do_test reindex-2.6 {126  execsql {127    REINDEX c2;128    SELECT a FROM t2 ORDER BY a;129  }130} {bcd abc BCDE ABCD}131do_test reindex-2.7 {132  execsql {133    REINDEX t1;134    SELECT a FROM t2 ORDER BY a;135  }136} {bcd abc BCDE ABCD}137do_test reindex-2.8 {138  execsql {139    REINDEX c1;140    SELECT a FROM t2 ORDER BY a;141  }142} {ABCD BCDE abc bcd}143integrity_check reindex-2.8.1144 145# Try to REINDEX an index for which the collation sequence is not available.146#147do_test reindex-3.1 {148  sqlite3 db2 test.db149  catchsql {150    REINDEX c1;151  } db2152} {1 {no such collation sequence: c1}}153do_test reindex-3.2 {154  proc need_collate {collation} {155    db2 collate c1 c1156  }157  db2 collation_needed need_collate158  catchsql {159    REINDEX c1;160  } db2161} {0 {}}162do_test reindex-3.3 {163  catchsql {164    REINDEX;165  } db2166} {1 {no such collation sequence: c2}}167 168do_test reindex-3.99 {169  db2 close170} {}171 172#-------------------------------------------------------------------------173foreach {tn wo} {1 "" 2 "WITHOUT ROWID"} {174  reset_db175  eval [string map [list %without_rowid% $wo] {176    do_execsql_test 4.$tn.0 {177      CREATE TABLE t0 (178        c0 INTEGER PRIMARY KEY DESC, 179        c1 UNIQUE DEFAULT NULL180      ) %without_rowid% ;181      INSERT INTO t0(c0) VALUES (1), (2), (3), (4), (5);182      SELECT c0 FROM t0 WHERE c1 IS NULL ORDER BY 1;183    } {1 2 3 4 5}184    185    do_execsql_test 4.$tn.1 {186      REINDEX;187    }188    189    do_execsql_test 4.$tn.2 {190      SELECT c0 FROM t0 WHERE c1 IS NULL ORDER BY 1;191    } {1 2 3 4 5}192 193    do_execsql_test 4.$tn.3 {194      SELECT c0 FROM t0 WHERE c1 IS NULL AND c0 IN (1,2,3,4,5);195    } {1 2 3 4 5}196 197    do_execsql_test 4.$tn.4 {198      PRAGMA integrity_check;199    } {ok}200  }]201}202 203 204 205finish_test206