github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/btree01.test (about)

     1  # 2014-11-27
     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  #
    12  # This file contains test cases for b-tree logic.
    13  #
    14  
    15  set testdir [file dirname $argv0]
    16  source $testdir/tester.tcl
    17  set testprefix btree01
    18  
    19  # The refactoring on the b-tree balance() routine in check-in
    20  # http://www.sqlite.org/src/info/face33bea1ba3a (2014-10-27)
    21  # caused the integrity_check on the following SQL to fail.
    22  #
    23  do_execsql_test btree01-1.1 {
    24    PRAGMA page_size=65536;
    25    CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB);
    26    WITH RECURSIVE
    27       c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
    28    INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
    29    UPDATE t1 SET b=zeroblob(3000);
    30    UPDATE t1 SET b=zeroblob(64000) WHERE a=2;
    31    PRAGMA integrity_check;
    32  } {ok}
    33  
    34  # The previous test is sufficient to prevent a regression.  But we
    35  # add a number of additional tests to stress the balancer in similar
    36  # ways, looking for related problems.
    37  #
    38  for {set i 1} {$i<=30} {incr i} {
    39    do_test btree01-1.2.$i {
    40      db eval {
    41        DELETE FROM t1;
    42        WITH RECURSIVE
    43          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
    44        INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
    45        UPDATE t1 SET b=zeroblob(3000);
    46        UPDATE t1 SET b=zeroblob(64000) WHERE a=$::i;
    47        PRAGMA integrity_check;
    48      }
    49    } {ok}
    50  }
    51  for {set i 1} {$i<=30} {incr i} {
    52    do_test btree01-1.3.$i {
    53      db eval {
    54        DELETE FROM t1;
    55        WITH RECURSIVE
    56          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
    57        INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
    58        UPDATE t1 SET b=zeroblob(2000);
    59        UPDATE t1 SET b=zeroblob(64000) WHERE a=$::i;
    60        PRAGMA integrity_check;
    61      }
    62    } {ok}
    63  }
    64  for {set i 1} {$i<=30} {incr i} {
    65    do_test btree01-1.4.$i {
    66      db eval {
    67        DELETE FROM t1;
    68        WITH RECURSIVE
    69          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
    70        INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
    71        UPDATE t1 SET b=zeroblob(6499) WHERE (a%3)==0;
    72        UPDATE t1 SET b=zeroblob(6499) WHERE (a%3)==1;
    73        UPDATE t1 SET b=zeroblob(6499) WHERE (a%3)==2;
    74        UPDATE t1 SET b=zeroblob(64000) WHERE a=$::i;
    75        PRAGMA integrity_check;
    76      }
    77    } {ok}
    78  }
    79  for {set i 1} {$i<=30} {incr i} {
    80    do_test btree01-1.5.$i {
    81      db eval {
    82        DELETE FROM t1;
    83        WITH RECURSIVE
    84          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
    85        INSERT INTO t1(a,b) SELECT i, zeroblob(6542) FROM c;
    86        UPDATE t1 SET b=zeroblob(2331);
    87        UPDATE t1 SET b=zeroblob(65496) WHERE a=$::i;
    88        PRAGMA integrity_check;
    89      }
    90    } {ok}
    91  }
    92  for {set i 1} {$i<=30} {incr i} {
    93    do_test btree01-1.6.$i {
    94      db eval {
    95        DELETE FROM t1;
    96        WITH RECURSIVE
    97          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
    98        INSERT INTO t1(a,b) SELECT i, zeroblob(6542) FROM c;
    99        UPDATE t1 SET b=zeroblob(2332);
   100        UPDATE t1 SET b=zeroblob(65496) WHERE a=$::i;
   101        PRAGMA integrity_check;
   102      }
   103    } {ok}
   104  }
   105  for {set i 1} {$i<=30} {incr i} {
   106    do_test btree01-1.7.$i {
   107      db eval {
   108        DELETE FROM t1;
   109        WITH RECURSIVE
   110          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30)
   111        INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
   112        UPDATE t1 SET b=zeroblob(1);
   113        UPDATE t1 SET b=zeroblob(65000) WHERE a=$::i;
   114        PRAGMA integrity_check;
   115      }
   116    } {ok}
   117  }
   118  for {set i 1} {$i<=31} {incr i} {
   119    do_test btree01-1.8.$i {
   120      db eval {
   121        DELETE FROM t1;
   122        WITH RECURSIVE
   123          c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<31)
   124        INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
   125        UPDATE t1 SET b=zeroblob(4000);
   126        UPDATE t1 SET b=zeroblob(65000) WHERE a=$::i;
   127        PRAGMA integrity_check;
   128      }
   129    } {ok}
   130  }
   131  
   132  finish_test