SQLite4
Hex Artifact Content
Not logged in

Artifact c5d3129918453171133a5e4182d32147191568c6:


0000: 23 20 32 30 31 32 20 4d 61 79 20 33 30 0a 23 0a  # 2012 May 30.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 20 54 68 65 20 74 65 73 74 73 20  ***.# The tests 
0170: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 66 6f 63  in this file foc
0180: 75 73 20 6f 6e 20 74 65 73 74 69 6e 67 20 74 65  us on testing te
0190: 73 74 20 74 68 61 74 20 74 68 65 20 4c 53 4d 20  st that the LSM 
01a0: 6c 6f 67 20 66 69 6c 65 20 69 73 20 0a 23 20 77  log file is .# w
01b0: 72 69 74 74 65 6e 20 61 6e 64 20 72 65 63 6f 76  ritten and recov
01c0: 65 72 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  ered correctly..
01d0: 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  #..set testdir [
01e0: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
01f0: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0200: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0210: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0220: 6c 6f 67 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 73  log_common.tcl.s
0230: 65 74 20 74 65 73 74 70 72 65 66 69 78 20 6c 6f  et testprefix lo
0240: 67 32 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  g2..#-----------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0290: 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65  .reset_db.do_exe
02a0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a  csql_test 1.0 {.
02b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
02c0: 31 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54  1(a, b);.  CREAT
02d0: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
02e0: 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54  (a, b);.  INSERT
02f0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0300: 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20  1, 2);.  INSERT 
0310: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
0320: 2c 20 34 29 3b 0a 7d 0a 64 6f 5f 72 65 63 6f 76  , 4);.}.do_recov
0330: 65 72 5f 74 65 73 74 20 31 2e 31 20 7b 20 0a 20  er_test 1.1 { . 
0340: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
0350: 79 5f 63 68 65 63 6b 3b 0a 20 20 53 45 4c 45 43  y_check;.  SELEC
0360: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b  T * FROM t1;.} {
0370: 20 6f 6b 20 31 20 32 20 33 20 34 7d 0a 0a 23 2d   ok 1 2 3 4}..#-
0380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03c0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65 73 65 74  --------.#.reset
03d0: 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  _db.do_execsql_t
03e0: 65 73 74 20 32 2e 30 20 7b 0a 20 20 43 52 45 41  est 2.0 {.  CREA
03f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
0400: 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20  IMARY KEY, b);. 
0410: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31   CREATE INDEX i1
0420: 20 4f 4e 20 74 31 28 62 2c 20 61 29 3b 0a 20 20   ON t1(b, a);.  
0430: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0440: 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 49  ALUES(1, 2);.  I
0450: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0460: 4c 55 45 53 28 33 2c 20 34 29 3b 0a 7d 0a 64 6f  LUES(3, 4);.}.do
0470: 5f 72 65 63 6f 76 65 72 5f 74 65 73 74 20 32 2e  _recover_test 2.
0480: 31 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  1 { SELECT * FRO
0490: 4d 20 74 31 20 7d 20 7b 31 20 32 20 33 20 34 7d  M t1 } {1 2 3 4}
04a0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
04b0: 20 32 2e 32 20 7b 20 0a 20 20 42 45 47 49 4e 3b   2.2 { .  BEGIN;
04c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
04d0: 20 74 31 20 56 41 4c 55 45 53 28 37 2c 20 38 29   t1 VALUES(7, 8)
04e0: 3b 0a 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ;.  ROLLBACK;.  
04f0: 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52  BEGIN;.    INSER
0500: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0510: 28 35 2c 20 36 29 3b 0a 20 20 43 4f 4d 4d 49 54  (5, 6);.  COMMIT
0520: 3b 0a 7d 0a 64 6f 5f 66 69 6c 65 73 69 7a 65 5f  ;.}.do_filesize_
0530: 74 65 73 74 20 32 2e 33 20 30 20 32 34 31 0a 64  test 2.3 0 241.d
0540: 6f 5f 72 65 63 6f 76 65 72 5f 74 65 73 74 20 20  o_recover_test  
0550: 32 2e 34 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  2.4 { SELECT * F
0560: 52 4f 4d 20 74 31 20 7d 20 7b 31 20 32 20 33 20  ROM t1 } {1 2 3 
0570: 34 20 35 20 36 7d 0a 0a 64 6f 5f 65 78 65 63 73  4 5 6}..do_execs
0580: 71 6c 5f 74 65 73 74 20 32 2e 35 20 7b 20 0a 20  ql_test 2.5 { . 
0590: 20 42 45 47 49 4e 3b 0a 20 20 20 20 53 41 56 45   BEGIN;.    SAVE
05a0: 50 4f 49 4e 54 20 6f 6e 65 3b 0a 20 20 20 20 20  POINT one;.     
05b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
05c0: 56 41 4c 55 45 53 28 39 2c 20 31 30 29 3b 0a 20  VALUES(9, 10);. 
05d0: 20 20 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 6f     ROLLBACK TO o
05e0: 6e 65 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ne;.    INSERT I
05f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 37 2c  NTO t1 VALUES(7,
0600: 20 38 29 3b 0a 20 20 43 4f 4d 4d 49 54 3b 0a 7d   8);.  COMMIT;.}
0610: 0a 64 6f 5f 66 69 6c 65 73 69 7a 65 5f 74 65 73  .do_filesize_tes
0620: 74 20 32 2e 36 20 30 20 32 37 31 0a 0a 64 6f 5f  t 2.6 0 271..do_
0630: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 32 2e  execsql_test  2.
0640: 37 2e 31 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  7.1 { SELECT * F
0650: 52 4f 4d 20 74 31 20 7d 20 7b 31 20 32 20 33 20  ROM t1 } {1 2 3 
0660: 34 20 35 20 36 20 37 20 38 7d 0a 64 6f 5f 72 65  4 5 6 7 8}.do_re
0670: 63 6f 76 65 72 5f 74 65 73 74 20 20 32 2e 37 2e  cover_test  2.7.
0680: 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  2 { SELECT * FRO
0690: 4d 20 74 31 20 7d 20 7b 31 20 32 20 33 20 34 20  M t1 } {1 2 3 4 
06a0: 35 20 36 20 37 20 38 7d 0a 20 20 20 20 0a 0a 23  5 6 7 8}.    ..#
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65 73 65  ---------.#.rese
0700: 74 5f 64 62 0a 64 6f 5f 74 65 73 74 20 20 20 20  t_db.do_test    
0710: 20 20 20 20 20 33 2e 31 20 7b 20 73 71 6c 69 74       3.1 { sqlit
0720: 65 34 5f 6c 73 6d 5f 63 6f 6e 66 69 67 20 64 62  e4_lsm_config db
0730: 20 6d 61 69 6e 20 6c 6f 67 2d 73 69 7a 65 20 38   main log-size 8
0740: 30 30 20 7d 20 38 30 30 0a 64 6f 5f 65 78 65 63  00 } 800.do_exec
0750: 73 71 6c 5f 74 65 73 74 20 33 2e 32 20 7b 0a 20  sql_test 3.2 {. 
0760: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0770: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
0780: 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  b);.  INSERT INT
0790: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
07a0: 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64  str(10,10), rand
07b0: 73 74 72 28 31 30 30 30 2c 31 30 30 30 29 29 3b  str(1000,1000));
07c0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 20 20 20 20 20  .}.do_test      
07d0: 20 20 20 33 2e 33 20 7b 20 73 71 6c 69 74 65 34     3.3 { sqlite4
07e0: 5f 6c 73 6d 5f 77 6f 72 6b 20 64 62 20 6d 61 69  _lsm_work db mai
07f0: 6e 20 2d 66 6c 75 73 68 20 7d 20 7b 30 7d 0a 64  n -flush } {0}.d
0800: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
0810: 2e 34 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .4 {.  INSERT IN
0820: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
0830: 64 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e  dstr(10,10), ran
0840: 64 73 74 72 28 31 30 30 2c 31 30 30 29 29 3b 0a  dstr(100,100));.
0850: 7d 0a 64 6f 5f 74 65 73 74 20 20 20 20 20 20 20  }.do_test       
0860: 20 20 33 2e 35 20 7b 20 73 71 6c 69 74 65 34 5f    3.5 { sqlite4_
0870: 6c 73 6d 5f 77 6f 72 6b 20 64 62 20 6d 61 69 6e  lsm_work db main
0880: 20 2d 63 68 65 63 6b 20 7d 20 7b 30 7d 0a 64 6f   -check } {0}.do
0890: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
08a0: 36 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  6 { INSERT INTO 
08b0: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74  t1 VALUES(randst
08c0: 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64 73 74  r(10,10), randst
08d0: 72 28 31 30 30 2c 31 30 30 29 29 20 7d 0a 64 6f  r(100,100)) }.do
08e0: 5f 74 65 73 74 20 20 20 20 20 20 20 20 20 33 2e  _test         3.
08f0: 37 20 7b 20 0a 20 20 73 71 6c 69 74 65 34 5f 6c  7 { .  sqlite4_l
0900: 73 6d 5f 69 6e 66 6f 20 64 62 20 6d 61 69 6e 20  sm_info db main 
0910: 6c 6f 67 2d 73 74 72 75 63 74 75 72 65 20 0a 7d  log-structure .}
0920: 20 7b 31 31 32 34 20 31 32 37 31 20 30 20 30 20   {1124 1271 0 0 
0930: 30 20 31 33 39 7d 0a 64 6f 5f 74 65 73 74 20 20  0 139}.do_test  
0940: 20 20 20 20 20 20 20 33 2e 38 20 7b 20 73 71 6c         3.8 { sql
0950: 69 74 65 34 5f 6c 73 6d 5f 77 6f 72 6b 20 64 62  ite4_lsm_work db
0960: 20 6d 61 69 6e 20 2d 66 6c 75 73 68 20 7d 20 7b   main -flush } {
0970: 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  0}.do_execsql_te
0980: 73 74 20 33 2e 39 20 7b 20 49 4e 53 45 52 54 20  st 3.9 { INSERT 
0990: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72  INTO t1 VALUES(r
09a0: 61 6e 64 73 74 72 28 31 30 2c 31 30 29 2c 20 72  andstr(10,10), r
09b0: 61 6e 64 73 74 72 28 31 30 30 2c 31 30 30 29 29  andstr(100,100))
09c0: 20 7d 0a 64 6f 5f 74 65 73 74 20 20 20 20 20 20   }.do_test      
09d0: 20 20 20 33 2e 31 30 20 7b 20 0a 20 20 65 78 65     3.10 { .  exe
09e0: 63 73 71 6c 20 42 45 47 49 4e 0a 20 20 65 78 65  csql BEGIN.  exe
09f0: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
0a00: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
0a10: 64 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e  dstr(10,10), ran
0a20: 64 73 74 72 28 31 30 30 2c 20 31 30 30 29 29 20  dstr(100, 100)) 
0a30: 7d 0a 20 20 73 71 6c 69 74 65 34 20 64 62 32 20  }.  sqlite4 db2 
0a40: 2e 2f 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  ./test.db.  sqli
0a50: 74 65 34 5f 6c 73 6d 5f 77 6f 72 6b 20 64 62 32  te4_lsm_work db2
0a60: 20 6d 61 69 6e 20 2d 63 68 65 63 6b 0a 20 20 64   main -check.  d
0a70: 62 32 20 63 6c 6f 73 65 0a 20 20 65 78 65 63 73  b2 close.  execs
0a80: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
0a90: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
0aa0: 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64 73  tr(10,10), rands
0ab0: 74 72 28 31 30 30 2c 20 31 30 30 29 29 20 7d 0a  tr(100, 100)) }.
0ac0: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
0ad0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0ae0: 53 28 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29  S(randstr(10,10)
0af0: 2c 20 72 61 6e 64 73 74 72 28 31 30 30 2c 20 31  , randstr(100, 1
0b00: 30 30 29 29 20 7d 0a 20 20 65 78 65 63 73 71 6c  00)) }.  execsql
0b10: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
0b20: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72  1 VALUES(randstr
0b30: 28 31 30 2c 31 30 29 2c 20 72 61 6e 64 73 74 72  (10,10), randstr
0b40: 28 31 30 30 2c 20 31 30 30 29 29 20 7d 0a 20 20  (100, 100)) }.  
0b50: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
0b60: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0b70: 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 2c 20  randstr(10,10), 
0b80: 72 61 6e 64 73 74 72 28 31 30 30 2c 20 31 30 30  randstr(100, 100
0b90: 29 29 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  )) }.  execsql {
0ba0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0bb0: 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28 31  VALUES(randstr(1
0bc0: 30 2c 31 30 29 2c 20 72 61 6e 64 73 74 72 28 31  0,10), randstr(1
0bd0: 30 30 2c 20 31 30 30 29 29 20 7d 0a 20 20 65 78  00, 100)) }.  ex
0be0: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
0bf0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
0c00: 6e 64 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61  ndstr(10,10), ra
0c10: 6e 64 73 74 72 28 31 30 30 2c 20 31 30 30 29 29  ndstr(100, 100))
0c20: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49   }.  execsql { I
0c30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0c40: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c  LUES(randstr(10,
0c50: 31 30 29 2c 20 72 61 6e 64 73 74 72 28 31 30 30  10), randstr(100
0c60: 2c 20 31 30 30 29 29 20 7d 0a 20 20 65 78 65 63  , 100)) }.  exec
0c70: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0c80: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
0c90: 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64  str(10,10), rand
0ca0: 73 74 72 28 31 30 30 2c 20 31 30 30 29 29 20 7d  str(100, 100)) }
0cb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
0cc0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0cd0: 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c 31 30  ES(randstr(10,10
0ce0: 29 2c 20 72 61 6e 64 73 74 72 28 31 30 30 2c 20  ), randstr(100, 
0cf0: 31 30 30 29 29 20 7d 0a 20 20 65 78 65 63 73 71  100)) }.  execsq
0d00: 6c 20 43 4f 4d 4d 49 54 0a 7d 20 7b 7d 0a 64 6f  l COMMIT.} {}.do
0d10: 5f 74 65 73 74 20 20 20 20 20 20 20 20 20 33 2e  _test         3.
0d20: 31 31 20 7b 20 0a 20 20 73 71 6c 69 74 65 34 5f  11 { .  sqlite4_
0d30: 6c 73 6d 5f 69 6e 66 6f 20 64 62 20 6d 61 69 6e  lsm_info db main
0d40: 20 6c 6f 67 2d 73 74 72 75 63 74 75 72 65 20 0a   log-structure .
0d50: 7d 20 7b 30 20 30 20 31 33 39 20 31 30 36 32 20  } {0 0 139 1062 
0d60: 31 32 37 32 20 31 38 30 39 7d 0a 64 6f 5f 72 65  1272 1809}.do_re
0d70: 63 6f 76 65 72 5f 74 65 73 74 20 33 2e 31 32 20  cover_test 3.12 
0d80: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0d90: 74 31 20 7d 20 5b 65 78 65 63 73 71 6c 20 7b 53  t1 } [execsql {S
0da0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
0db0: 5d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ]..#------------
0dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a  -------------.#.
0e00: 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63  reset_db.do_exec
0e10: 73 71 6c 5f 74 65 73 74 20 34 2e 31 20 7b 0a 20  sql_test 4.1 {. 
0e20: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0e30: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
0e40: 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  b);.  INSERT INT
0e50: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
0e60: 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64  str(10,10), rand
0e70: 73 74 72 28 31 30 30 30 2c 31 30 30 30 29 29 3b  str(1000,1000));
0e80: 0a 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e  .  BEGIN;.    IN
0e90: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
0ea0: 45 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31  ECT randstr(10,1
0eb0: 30 29 2c 20 72 61 6e 64 73 74 72 28 31 30 30 30  0), randstr(1000
0ec0: 2c 31 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20  ,1000) FROM t1; 
0ed0: 2d 2d 20 20 20 20 32 0a 20 20 20 20 49 4e 53 45  --    2.    INSE
0ee0: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
0ef0: 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29  T randstr(10,10)
0f00: 2c 20 72 61 6e 64 73 74 72 28 31 30 30 30 2c 31  , randstr(1000,1
0f10: 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20 2d 2d  000) FROM t1; --
0f20: 20 20 20 20 34 0a 20 20 20 20 49 4e 53 45 52 54      4.    INSERT
0f30: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
0f40: 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 2c 20  randstr(10,10), 
0f50: 72 61 6e 64 73 74 72 28 31 30 30 30 2c 31 30 30  randstr(1000,100
0f60: 30 29 20 46 52 4f 4d 20 74 31 3b 20 2d 2d 20 20  0) FROM t1; --  
0f70: 20 20 38 0a 20 20 20 20 49 4e 53 45 52 54 20 49    8.    INSERT I
0f80: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61  NTO t1 SELECT ra
0f90: 6e 64 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61  ndstr(10,10), ra
0fa0: 6e 64 73 74 72 28 31 30 30 30 2c 31 30 30 30 29  ndstr(1000,1000)
0fb0: 20 46 52 4f 4d 20 74 31 3b 20 2d 2d 20 20 20 31   FROM t1; --   1
0fc0: 36 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  6.    INSERT INT
0fd0: 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64  O t1 SELECT rand
0fe0: 73 74 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64  str(10,10), rand
0ff0: 73 74 72 28 31 30 30 30 2c 31 30 30 30 29 20 46  str(1000,1000) F
1000: 52 4f 4d 20 74 31 3b 20 2d 2d 20 20 20 33 32 0a  ROM t1; --   32.
1010: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1020: 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74  t1 SELECT randst
1030: 72 28 31 30 2c 31 30 29 2c 20 72 61 6e 64 73 74  r(10,10), randst
1040: 72 28 31 30 30 30 2c 31 30 30 30 29 20 46 52 4f  r(1000,1000) FRO
1050: 4d 20 74 31 3b 20 2d 2d 20 20 20 36 34 0a 20 20  M t1; --   64.  
1060: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1070: 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28   SELECT randstr(
1080: 31 30 2c 31 30 29 2c 20 72 61 6e 64 73 74 72 28  10,10), randstr(
1090: 31 30 30 30 2c 31 30 30 30 29 20 46 52 4f 4d 20  1000,1000) FROM 
10a0: 74 31 3b 20 2d 2d 20 20 31 32 38 0a 20 20 20 20  t1; --  128.    
10b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
10c0: 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28 31 30  ELECT randstr(10
10d0: 2c 31 30 29 2c 20 72 61 6e 64 73 74 72 28 31 30  ,10), randstr(10
10e0: 30 30 2c 31 30 30 30 29 20 46 52 4f 4d 20 74 31  00,1000) FROM t1
10f0: 3b 20 2d 2d 20 20 32 35 36 0a 20 20 20 20 49 4e  ; --  256.    IN
1100: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
1110: 45 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31  ECT randstr(10,1
1120: 30 29 2c 20 72 61 6e 64 73 74 72 28 31 30 30 30  0), randstr(1000
1130: 2c 31 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20  ,1000) FROM t1; 
1140: 2d 2d 20 20 35 31 32 0a 20 20 20 20 49 4e 53 45  --  512.    INSE
1150: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
1160: 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29  T randstr(10,10)
1170: 2c 20 72 61 6e 64 73 74 72 28 31 30 30 30 2c 31  , randstr(1000,1
1180: 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20 2d 2d  000) FROM t1; --
1190: 20 31 30 32 34 0a 20 20 43 4f 4d 4d 49 54 0a 7d   1024.  COMMIT.}
11a0: 0a 0a 64 6f 5f 72 65 63 6f 76 65 72 5f 74 65 73  ..do_recover_tes
11b0: 74 20 34 2e 32 20 7b 20 53 45 4c 45 43 54 20 63  t 4.2 { SELECT c
11c0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
11d0: 7d 20 31 30 32 34 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  } 1024..#-------
11e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1220: 2d 2d 0a 23 20 54 68 65 20 70 6f 69 6e 74 20 6f  --.# The point o
1230: 66 20 74 68 69 73 20 74 65 73 74 20 63 61 73 65  f this test case
1240: 20 69 73 20 74 6f 20 74 72 79 20 74 6f 20 74 72   is to try to tr
1250: 69 63 6b 20 4c 53 4d 20 69 6e 74 6f 20 6d 61 6b  ick LSM into mak
1260: 69 6e 67 20 61 20 6c 61 72 67 65 0a 23 20 61 6c  ing a large.# al
1270: 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  location interna
1280: 6c 6c 79 20 61 73 20 74 68 65 20 72 65 73 75 6c  lly as the resul
1290: 74 20 6f 66 20 61 20 63 6f 72 72 75 70 74 20 6c  t of a corrupt l
12a0: 6f 67 20 66 69 6c 65 2e 0a 23 0a 72 65 73 65 74  og file..#.reset
12b0: 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  _db.do_execsql_t
12c0: 65 73 74 20 35 2e 31 20 7b 0a 20 20 43 52 45 41  est 5.1 {.  CREA
12d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
12e0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20  IMARY KEY, b);. 
12f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1300: 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28 31  VALUES(randstr(1
1310: 30 2c 31 30 29 2c 20 72 61 6e 64 73 74 72 28 31  0,10), randstr(1
1320: 30 30 30 2c 31 30 30 30 29 29 3b 0a 7d 0a 0a 64  000,1000));.}..d
1330: 6f 5f 74 65 73 74 20 35 2e 32 20 7b 20 73 71 6c  o_test 5.2 { sql
1340: 69 74 65 34 5f 6c 73 6d 5f 69 6e 66 6f 20 64 62  ite4_lsm_info db
1350: 20 6d 61 69 6e 20 6c 6f 67 2d 73 74 72 75 63 74   main log-struct
1360: 75 72 65 20 7d 20 7b 30 20 30 20 30 20 30 20 30  ure } {0 0 0 0 0
1370: 20 31 31 32 34 7d 0a 64 6f 5f 74 65 73 74 20 35   1124}.do_test 5
1380: 2e 33 20 7b 20 0a 20 20 63 6f 70 79 5f 64 62 5f  .3 { .  copy_db_
1390: 66 69 6c 65 73 20 74 65 73 74 2e 64 62 20 74 65  files test.db te
13a0: 73 74 2e 64 62 32 0a 20 20 0a 20 20 23 20 41 20  st.db2.  .  # A 
13b0: 57 52 49 54 45 20 28 30 78 30 36 29 20 72 65 63  WRITE (0x06) rec
13c0: 6f 72 64 20 73 70 65 63 69 66 79 69 6e 67 20 61  ord specifying a
13d0: 6e 20 38 20 28 76 61 72 69 6e 74 20 30 38 29 20  n 8 (varint 08) 
13e0: 62 79 74 65 20 6b 65 79 20 61 6e 64 20 0a 20 20  byte key and .  
13f0: 23 20 32 2c 30 30 30 2c 30 30 30 2c 30 30 30 20  # 2,000,000,000 
1400: 28 76 61 72 69 6e 74 20 46 42 37 37 33 35 39 34  (varint FB773594
1410: 30 30 29 20 62 79 74 65 20 76 61 6c 75 65 2e 20  00) byte value. 
1420: 41 6e 64 20 61 20 66 65 77 20 62 79 74 65 73 20  And a few bytes 
1430: 6f 66 20 67 61 72 62 61 67 65 0a 20 20 23 20 66  of garbage.  # f
1440: 6f 6c 6c 6f 77 69 6e 67 2e 0a 20 20 68 65 78 69  ollowing..  hexi
1450: 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 32  o_write test.db2
1460: 2d 6c 6f 67 20 31 31 32 34 20 30 36 30 38 46 42  -log 1124 0608FB
1470: 37 37 33 35 39 34 30 30 0a 20 20 68 65 78 69 6f  77359400.  hexio
1480: 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 32 2d  _write test.db2-
1490: 6c 6f 67 20 31 31 33 30 20 35 35 35 35 35 35 35  log 1130 5555555
14a0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35  5555555555555555
14b0: 35 35 35 35 35 20 0a 0a 20 20 73 71 6c 69 74 65  55555 ..  sqlite
14c0: 34 20 64 62 32 20 2e 2f 74 65 73 74 2e 64 62 32  4 db2 ./test.db2
14d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
14e0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
14f0: 4d 20 74 31 20 7d 20 64 62 32 0a 7d 20 7b 31 7d  M t1 } db2.} {1}
1500: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72  ------------.#.r
1550: 65 73 65 74 5f 64 62 0a 0a 73 65 74 20 61 20 5b  eset_db..set a [
1560: 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 41 20  string repeat A 
1570: 35 30 30 30 30 5d 0a 73 65 74 20 62 20 5b 73 74  50000].set b [st
1580: 72 69 6e 67 20 72 65 70 65 61 74 20 42 20 35 30  ring repeat B 50
1590: 30 30 30 5d 0a 73 65 74 20 63 20 5b 73 74 72 69  000].set c [stri
15a0: 6e 67 20 72 65 70 65 61 74 20 43 20 35 30 30 30  ng repeat C 5000
15b0: 30 5d 0a 73 65 74 20 64 20 5b 73 74 72 69 6e 67  0].set d [string
15c0: 20 72 65 70 65 61 74 20 44 20 35 30 30 30 30 5d   repeat D 50000]
15d0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
15e0: 74 20 36 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  t 6.1 {.  CREATE
15f0: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
1600: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 2c 20 62  PRIMARY KEY(a, b
1610: 29 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ));.  INSERT INT
1620: 4f 20 74 31 20 56 41 4c 55 45 53 28 24 61 2c 20  O t1 VALUES($a, 
1630: 24 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  $b);.  INSERT IN
1640: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24 62 2c  TO t1 VALUES($b,
1650: 20 24 63 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   $c);.  INSERT I
1660: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24 63  NTO t1 VALUES($c
1670: 2c 20 24 64 29 3b 0a 20 20 49 4e 53 45 52 54 20  , $d);.  INSERT 
1680: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24  INTO t1 VALUES($
1690: 64 2c 20 24 61 29 3b 0a 7d 20 7b 7d 0a 0a 64 6f  d, $a);.} {}..do
16a0: 5f 74 65 73 74 20 36 2e 32 20 7b 0a 20 20 73 65  _test 6.2 {.  se
16b0: 74 20 63 6b 73 75 6d 20 5b 64 62 20 6f 6e 65 20  t cksum [db one 
16c0: 7b 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28  { SELECT md5sum(
16d0: 61 2c 20 62 29 20 46 52 4f 4d 20 74 31 20 7d 5d  a, b) FROM t1 }]
16e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41  .  execsql { PRA
16f0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
1700: 65 63 6b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 0a 64 6f  eck }.} {ok}..do
1710: 5f 74 65 73 74 20 36 2e 33 20 7b 20 66 69 6c 65  _test 6.3 { file
1720: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 20 7d 20   size test.db } 
1730: 30 0a 0a 64 6f 5f 72 65 63 6f 76 65 72 5f 74 65  0..do_recover_te
1740: 73 74 20 36 2e 34 20 7b 0a 20 20 53 45 4c 45 43  st 6.4 {.  SELEC
1750: 54 20 6d 64 35 73 75 6d 28 61 2c 20 62 29 20 46  T md5sum(a, b) F
1760: 52 4f 4d 20 74 31 3b 0a 7d 20 5b 6c 69 73 74 20  ROM t1;.} [list 
1770: 24 63 6b 73 75 6d 5d 0a 0a 66 69 6e 69 73 68 5f  $cksum]..finish_
1780: 74 65 73 74 0a                                   test.