/ Hex Artifact Content
Login

Artifact 7493b09398d576b69a8b2f55bac92d50a9b8e796:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 56  is testing the V
01d0: 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e  ACUUM statement.
01e0: 0a 23 0a 23 20 24 49 64 3a 20 76 61 63 75 75 6d  .#.# $Id: vacuum
01f0: 2e 74 65 73 74 2c 76 20 31 2e 33 39 20 32 30 30  .test,v 1.39 200
0200: 38 2f 30 31 2f 31 36 20 31 37 3a 34 36 3a 33 38  8/01/16 17:46:38
0210: 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20   drh Exp $..set 
0220: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0230: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0240: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0250: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49 66 20 74  ster.tcl..# If t
0260: 68 65 20 56 41 43 55 55 4d 20 73 74 61 74 65 6d  he VACUUM statem
0270: 65 6e 74 20 69 73 20 64 69 73 61 62 6c 65 64 20  ent is disabled 
0280: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 62  in the current b
0290: 75 69 6c 64 2c 20 73 6b 69 70 20 61 6c 6c 0a 23  uild, skip all.#
02a0: 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68   the tests in th
02b0: 69 73 20 66 69 6c 65 2e 0a 23 0a 69 66 63 61 70  is file..#.ifcap
02c0: 61 62 6c 65 20 7b 21 76 61 63 75 75 6d 7d 20 7b  able {!vacuum} {
02d0: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
02e0: 20 72 65 74 75 72 6e 0a 7d 0a 69 66 20 24 41 55   return.}.if $AU
02f0: 54 4f 56 41 43 55 55 4d 20 7b 0a 20 20 66 69 6e  TOVACUUM {.  fin
0300: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
0310: 6e 0a 7d 0a 0a 73 65 74 20 66 63 6e 74 20 31 0a  n.}..set fcnt 1.
0320: 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 31  do_test vacuum-1
0330: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0340: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
0350: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0360: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
0370: 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20  Y KEY, b, c);.  
0380: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0390: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 72 61 6e   VALUES(NULL,ran
03a0: 64 73 74 72 28 31 30 2c 31 30 30 29 2c 72 61 6e  dstr(10,100),ran
03b0: 64 73 74 72 28 35 2c 35 30 29 29 3b 0a 20 20 20  dstr(5,50));.   
03c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
03d0: 56 41 4c 55 45 53 28 31 32 33 34 35 36 2c 72 61  VALUES(123456,ra
03e0: 6e 64 73 74 72 28 31 30 2c 31 30 30 29 2c 72 61  ndstr(10,100),ra
03f0: 6e 64 73 74 72 28 35 2c 35 30 29 29 3b 0a 20 20  ndstr(5,50));.  
0400: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0410: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 62 7c   SELECT NULL, b|
0420: 7c 27 2d 27 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c  |'-'||rowid, c||
0430: 27 2d 27 7c 7c 72 6f 77 69 64 20 46 52 4f 4d 20  '-'||rowid FROM 
0440: 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t1;.    INSERT I
0450: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 4e 55  NTO t1 SELECT NU
0460: 4c 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77 69  LL, b||'-'||rowi
0470: 64 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64  d, c||'-'||rowid
0480: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e   FROM t1;.    IN
0490: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
04a0: 45 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c 27 2d 27  ECT NULL, b||'-'
04b0: 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c 27 2d 27 7c  ||rowid, c||'-'|
04c0: 7c 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 3b 0a  |rowid FROM t1;.
04d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
04e0: 74 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20  t1 SELECT NULL, 
04f0: 62 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 2c 20 63  b||'-'||rowid, c
0500: 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 20 46 52 4f  ||'-'||rowid FRO
0510: 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t1;.    INSERT
0520: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
0530: 4e 55 4c 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f  NULL, b||'-'||ro
0540: 77 69 64 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77  wid, c||'-'||row
0550: 69 64 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  id FROM t1;.    
0560: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
0570: 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c 27  ELECT NULL, b||'
0580: 2d 27 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c 27 2d  -'||rowid, c||'-
0590: 27 7c 7c 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  '||rowid FROM t1
05a0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
05b0: 4f 20 74 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c  O t1 SELECT NULL
05c0: 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 2c  , b||'-'||rowid,
05d0: 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 20 46   c||'-'||rowid F
05e0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41  ROM t1;.    CREA
05f0: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
0600: 31 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  1(b,c);.    CREA
0610: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
0620: 69 32 20 4f 4e 20 74 31 28 63 2c 61 29 3b 0a 20  i2 ON t1(c,a);. 
0630: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0640: 74 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  t2 AS SELECT * F
0650: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 4f 4d 4d  ROM t1;.    COMM
0660: 49 54 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  IT;.    DROP TAB
0670: 4c 45 20 74 32 3b 0a 20 20 7d 0a 20 20 73 65 74  LE t2;.  }.  set
0680: 20 3a 3a 73 69 7a 65 31 20 5b 66 69 6c 65 20 73   ::size1 [file s
0690: 69 7a 65 20 74 65 73 74 2e 64 62 5d 0a 20 20 73  ize test.db].  s
06a0: 65 74 20 3a 3a 63 6b 73 75 6d 20 5b 61 6c 6c 63  et ::cksum [allc
06b0: 6b 73 75 6d 5d 0a 20 20 65 78 70 72 20 7b 24 3a  ksum].  expr {$:
06c0: 3a 63 6b 73 75 6d 21 3d 22 22 7d 0a 7d 20 7b 31  :cksum!=""}.} {1
06d0: 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d  }.do_test vacuum
06e0: 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.2 {.  execsql
06f0: 20 7b 0a 20 20 20 20 56 41 43 55 55 4d 3b 0a 20   {.    VACUUM;. 
0700: 20 7d 0a 20 20 61 6c 6c 63 6b 73 75 6d 0a 7d 20   }.  allcksum.} 
0710: 24 63 6b 73 75 6d 0a 69 66 63 61 70 61 62 6c 65  $cksum.ifcapable
0720: 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74   vacuum {.  do_t
0730: 65 73 74 20 76 61 63 75 75 6d 2d 31 2e 33 20 7b  est vacuum-1.3 {
0740: 0a 20 20 20 20 65 78 70 72 20 7b 5b 66 69 6c 65  .    expr {[file
0750: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 3c 24   size test.db]<$
0760: 3a 3a 73 69 7a 65 31 7d 0a 20 20 7d 20 7b 31 7d  ::size1}.  } {1}
0770: 0a 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  .}.do_test vacuu
0780: 6d 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20 73 71  m-1.4 {.  set sq
0790: 6c 5f 73 63 72 69 70 74 20 7b 0a 20 20 20 20 42  l_script {.    B
07a0: 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  EGIN;.    CREATE
07b0: 20 54 41 42 4c 45 20 74 32 20 41 53 20 53 45 4c   TABLE t2 AS SEL
07c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
07d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
07e0: 74 33 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  t3 AS SELECT * F
07f0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41  ROM t1;.    CREA
0800: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
0810: 4c 45 43 54 20 62 2c 20 63 20 46 52 4f 4d 20 74  LECT b, c FROM t
0820: 33 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  3;.    CREATE TR
0830: 49 47 47 45 52 20 72 31 20 41 46 54 45 52 20 44  IGGER r1 AFTER D
0840: 45 4c 45 54 45 20 4f 4e 20 74 32 20 42 45 47 49  ELETE ON t2 BEGI
0850: 4e 20 53 45 4c 45 43 54 20 31 3b 20 45 4e 44 3b  N SELECT 1; END;
0860: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20  .    COMMIT;.   
0870: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a   DROP TABLE t2;.
0880: 20 20 7d 0a 20 20 23 20 49 66 20 74 68 65 20 6c    }.  # If the l
0890: 69 62 72 61 72 79 20 77 61 73 20 63 6f 6d 70 69  ibrary was compi
08a0: 6c 65 64 20 74 6f 20 6f 6d 69 74 20 76 69 65 77  led to omit view
08b0: 20 73 75 70 70 6f 72 74 2c 20 63 6f 6d 6d 65 6e   support, commen
08c0: 74 20 6f 75 74 20 74 68 65 0a 20 20 23 20 63 72  t out the.  # cr
08d0: 65 61 74 65 20 76 69 65 77 20 69 6e 20 74 68 65  eate view in the
08e0: 20 73 63 72 69 70 74 20 24 73 71 6c 5f 73 63 72   script $sql_scr
08f0: 69 70 74 20 62 65 66 6f 72 65 20 65 78 65 63 75  ipt before execu
0900: 74 69 6e 67 20 69 74 2e 20 53 69 6d 69 6c 61 72  ting it. Similar
0910: 6c 79 2c 0a 20 20 23 20 69 66 20 74 72 69 67 67  ly,.  # if trigg
0920: 65 72 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ers are not supp
0930: 6f 72 74 65 64 2c 20 63 6f 6d 6d 65 6e 74 20 6f  orted, comment o
0940: 75 74 20 74 68 65 20 74 72 69 67 67 65 72 20 64  ut the trigger d
0950: 65 66 69 6e 69 74 69 6f 6e 2e 0a 20 20 69 66 63  efinition..  ifc
0960: 61 70 61 62 6c 65 20 21 76 69 65 77 20 7b 0a 20  apable !view {. 
0970: 20 20 20 72 65 67 73 75 62 20 7b 43 52 45 41 54     regsub {CREAT
0980: 45 20 56 49 45 57 7d 20 24 73 71 6c 5f 73 63 72  E VIEW} $sql_scr
0990: 69 70 74 20 7b 2d 2d 20 43 52 45 41 54 45 20 56  ipt {-- CREATE V
09a0: 49 45 57 7d 20 73 71 6c 5f 73 63 72 69 70 74 0a  IEW} sql_script.
09b0: 20 20 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20    }.  ifcapable 
09c0: 21 74 72 69 67 67 65 72 20 7b 0a 20 20 20 20 72  !trigger {.    r
09d0: 65 67 73 75 62 20 7b 43 52 45 41 54 45 20 54 52  egsub {CREATE TR
09e0: 49 47 47 45 52 7d 20 24 73 71 6c 5f 73 63 72 69  IGGER} $sql_scri
09f0: 70 74 20 7b 2d 2d 20 43 52 45 41 54 45 20 54 52  pt {-- CREATE TR
0a00: 49 47 47 45 52 7d 20 73 71 6c 5f 73 63 72 69 70  IGGER} sql_scrip
0a10: 74 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  t.  }.  execsql 
0a20: 24 73 71 6c 5f 73 63 72 69 70 74 0a 20 20 73 65  $sql_script.  se
0a30: 74 20 3a 3a 73 69 7a 65 31 20 5b 66 69 6c 65 20  t ::size1 [file 
0a40: 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 0a 20 20  size test.db].  
0a50: 73 65 74 20 3a 3a 63 6b 73 75 6d 20 5b 61 6c 6c  set ::cksum [all
0a60: 63 6b 73 75 6d 5d 0a 20 20 65 78 70 72 20 7b 24  cksum].  expr {$
0a70: 3a 3a 63 6b 73 75 6d 21 3d 22 22 7d 0a 7d 20 7b  ::cksum!=""}.} {
0a80: 31 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  1}.do_test vacuu
0a90: 6d 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  m-1.5 {.  execsq
0aa0: 6c 20 7b 0a 20 20 20 20 56 41 43 55 55 4d 3b 0a  l {.    VACUUM;.
0ab0: 20 20 7d 0a 20 20 61 6c 6c 63 6b 73 75 6d 0a 7d    }.  allcksum.}
0ac0: 20 24 63 6b 73 75 6d 0a 0a 69 66 63 61 70 61 62   $cksum..ifcapab
0ad0: 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f  le vacuum {.  do
0ae0: 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 31 2e 36  _test vacuum-1.6
0af0: 20 7b 0a 20 20 20 20 65 78 70 72 20 7b 5b 66 69   {.    expr {[fi
0b00: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d  le size test.db]
0b10: 3c 24 3a 3a 73 69 7a 65 31 7d 0a 20 20 7d 20 7b  <$::size1}.  } {
0b20: 31 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 76  1}.}.ifcapable v
0b30: 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73  acuum {.  do_tes
0b40: 74 20 76 61 63 75 75 6d 2d 32 2e 31 20 7b 0a 20  t vacuum-2.1 {. 
0b50: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
0b60: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
0b70: 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 43   VACUUM;.      C
0b80: 4f 4d 4d 49 54 3b 0a 20 20 20 20 7d 0a 20 20 7d  OMMIT;.    }.  }
0b90: 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 56 41 43 55   {1 {cannot VACU
0ba0: 55 4d 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  UM from within a
0bb0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 20   transaction}}. 
0bc0: 20 63 61 74 63 68 20 7b 64 62 20 65 76 61 6c 20   catch {db eval 
0bd0: 43 4f 4d 4d 49 54 7d 0a 7d 0a 64 6f 5f 74 65 73  COMMIT}.}.do_tes
0be0: 74 20 76 61 63 75 75 6d 2d 32 2e 32 20 7b 0a 20  t vacuum-2.2 {. 
0bf0: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
0c00: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0c10: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
0c20: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 20  CREATE TABLE t4 
0c30: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
0c40: 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t1;.    CREATE 
0c50: 54 41 42 4c 45 20 74 35 20 41 53 20 53 45 4c 45  TABLE t5 AS SELE
0c60: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
0c70: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 44 52    COMMIT;.    DR
0c80: 4f 50 20 54 41 42 4c 45 20 74 34 3b 0a 20 20 20  OP TABLE t4;.   
0c90: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 35 3b 0a   DROP TABLE t5;.
0ca0: 20 20 7d 20 64 62 32 0a 20 20 73 65 74 20 3a 3a    } db2.  set ::
0cb0: 63 6b 73 75 6d 20 5b 61 6c 6c 63 6b 73 75 6d 20  cksum [allcksum 
0cc0: 64 62 32 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  db2].  catchsql 
0cd0: 7b 0a 20 20 20 20 56 41 43 55 55 4d 0a 20 20 7d  {.    VACUUM.  }
0ce0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0cf0: 74 20 76 61 63 75 75 6d 2d 32 2e 33 20 7b 0a 20  t vacuum-2.3 {. 
0d00: 20 61 6c 6c 63 6b 73 75 6d 0a 7d 20 24 63 6b 73   allcksum.} $cks
0d10: 75 6d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  um.do_test vacuu
0d20: 6d 2d 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 20  m-2.4 {.  catch 
0d30: 7b 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43  {db2 eval {SELEC
0d40: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0d50: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a  sqlite_master}}.
0d60: 20 20 61 6c 6c 63 6b 73 75 6d 20 64 62 32 0a 7d    allcksum db2.}
0d70: 20 24 63 6b 73 75 6d 0a 0a 23 20 4d 61 6b 65 20   $cksum..# Make 
0d80: 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 20  sure the schema 
0d90: 63 6f 6f 6b 69 65 20 69 73 20 69 6e 63 72 65 6d  cookie is increm
0da0: 65 6e 74 65 64 20 62 79 20 76 61 63 75 75 6d 2e  ented by vacuum.
0db0: 0a 23 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  .#.do_test vacuu
0dc0: 6d 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  m-2.5 {.  execsq
0dd0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
0de0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0df0: 74 36 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  t6 AS SELECT * F
0e00: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41  ROM t1;.    CREA
0e10: 54 45 20 54 41 42 4c 45 20 74 37 20 41 53 20 53  TE TABLE t7 AS S
0e20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
0e30: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
0e40: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 33 20 74  .  sqlite3 db3 t
0e50: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
0e60: 20 7b 0a 20 20 20 20 2d 2d 20 54 68 65 20 22 53   {.    -- The "S
0e70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
0e80: 69 74 65 5f 6d 61 73 74 65 72 22 20 73 74 61 74  ite_master" stat
0e90: 65 6d 65 6e 74 20 65 6e 73 75 72 65 73 20 74 68  ement ensures th
0ea0: 61 74 20 74 68 69 73 20 74 65 73 74 0a 20 20 20  at this test.   
0eb0: 20 2d 2d 20 77 6f 72 6b 73 20 77 68 65 6e 20 73   -- works when s
0ec0: 68 61 72 65 64 2d 63 61 63 68 65 20 69 73 20 65  hared-cache is e
0ed0: 6e 61 62 6c 65 64 2e 20 49 66 20 73 68 61 72 65  nabled. If share
0ee0: 64 2d 63 61 63 68 65 20 69 73 20 65 6e 61 62 6c  d-cache is enabl
0ef0: 65 64 2c 20 74 68 65 6e 0a 20 20 20 20 2d 2d 20  ed, then.    -- 
0f00: 64 62 33 20 73 68 61 72 65 73 20 61 20 63 61 63  db3 shares a cac
0f10: 68 65 20 77 69 74 68 20 64 62 32 20 28 62 75 74  he with db2 (but
0f20: 20 6e 6f 74 20 64 62 20 2d 20 69 74 20 77 61 73   not db - it was
0f30: 20 6f 70 65 6e 65 64 20 61 73 20 0a 20 20 20 20   opened as .    
0f40: 2d 2d 20 22 2e 2f 74 65 73 74 2e 64 62 22 29 2e  -- "./test.db").
0f50: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0f60: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0f70: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0f80: 52 4f 4d 20 74 37 20 4c 49 4d 49 54 20 31 0a 20  ROM t7 LIMIT 1. 
0f90: 20 7d 20 64 62 33 0a 20 20 65 78 65 63 73 71 6c   } db3.  execsql
0fa0: 20 7b 0a 20 20 20 20 56 41 43 55 55 4d 3b 0a 20   {.    VACUUM;. 
0fb0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
0fc0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0fd0: 37 20 56 41 4c 55 45 53 28 31 32 33 34 35 36 37  7 VALUES(1234567
0fe0: 38 39 30 2c 27 68 65 6c 6c 6f 27 2c 27 77 6f 72  890,'hello','wor
0ff0: 6c 64 27 29 3b 0a 20 20 7d 20 64 62 33 0a 20 20  ld');.  } db3.  
1000: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1010: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 57  LECT * FROM t7 W
1020: 48 45 52 45 20 61 3d 31 32 33 34 35 36 37 38 39  HERE a=123456789
1030: 30 0a 20 20 7d 0a 7d 20 7b 31 32 33 34 35 36 37  0.  }.} {1234567
1040: 38 39 30 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d  890 hello world}
1050: 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
1060: 20 76 61 63 75 75 6d 2d 32 2e 36 0a 64 6f 5f 74   vacuum-2.6.do_t
1070: 65 73 74 20 76 61 63 75 75 6d 2d 32 2e 37 20 7b  est vacuum-2.7 {
1080: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1090: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
10a0: 37 20 57 48 45 52 45 20 61 3d 31 32 33 34 35 36  7 WHERE a=123456
10b0: 37 38 39 30 0a 20 20 7d 20 64 62 33 0a 7d 20 7b  7890.  } db3.} {
10c0: 31 32 33 34 35 36 37 38 39 30 20 68 65 6c 6c 6f  1234567890 hello
10d0: 20 77 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20   world}.do_test 
10e0: 76 61 63 75 75 6d 2d 32 2e 38 20 7b 0a 20 20 65  vacuum-2.8 {.  e
10f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
1100: 45 52 54 20 49 4e 54 4f 20 74 37 20 53 45 4c 45  ERT INTO t7 SELE
1110: 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20  CT * FROM t6;.  
1120: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
1130: 29 20 46 52 4f 4d 20 74 37 3b 0a 20 20 7d 0a 7d  ) FROM t7;.  }.}
1140: 20 35 31 33 0a 69 6e 74 65 67 72 69 74 79 5f 63   513.integrity_c
1150: 68 65 63 6b 20 76 61 63 75 75 6d 2d 32 2e 39 0a  heck vacuum-2.9.
1160: 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 32  do_test vacuum-2
1170: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
1180: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
1190: 4d 20 74 37 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t7;.    SELECT
11a0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
11b0: 37 3b 0a 20 20 7d 20 64 62 33 0a 7d 20 30 0a 69  7;.  } db3.} 0.i
11c0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 76  ntegrity_check v
11d0: 61 63 75 75 6d 2d 32 2e 31 31 0a 64 62 33 20 63  acuum-2.11.db3 c
11e0: 6c 6f 73 65 0a 20 0a 0a 23 20 54 69 63 6b 65 74  lose. ..# Ticket
11f0: 20 23 34 32 37 2e 20 20 4d 61 6b 65 20 73 75 72   #427.  Make sur
1200: 65 20 56 41 43 55 55 4d 20 77 6f 72 6b 73 20 77  e VACUUM works w
1210: 68 65 6e 20 74 68 65 20 45 4d 50 54 59 5f 52 45  hen the EMPTY_RE
1220: 53 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 0a 23  SULT_CALLBACKS.#
1230: 20 70 72 61 67 6d 61 20 69 73 20 74 75 72 6e 65   pragma is turne
1240: 64 20 6f 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  d on..#.do_test 
1250: 76 61 63 75 75 6d 2d 33 2e 31 20 7b 0a 20 20 64  vacuum-3.1 {.  d
1260: 62 20 63 6c 6f 73 65 0a 20 20 64 62 32 20 63 6c  b close.  db2 cl
1270: 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  ose.  file delet
1280: 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  e test.db.  sqli
1290: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
12a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
12b0: 52 41 47 4d 41 20 65 6d 70 74 79 5f 72 65 73 75  RAGMA empty_resu
12c0: 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 3d 6f 6e 3b  lt_callbacks=on;
12d0: 0a 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 7d  .    VACUUM;.  }
12e0: 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20  .} {}..# Ticket 
12f0: 23 34 36 34 2e 20 20 4d 61 6b 65 20 73 75 72 65  #464.  Make sure
1300: 20 56 41 43 55 55 4d 20 77 6f 72 6b 73 20 77 69   VACUUM works wi
1310: 74 68 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70  th the sqlite3_p
1320: 72 65 70 61 72 65 28 29 20 41 50 49 2e 0a 23 0a  repare() API..#.
1330: 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 34  do_test vacuum-4
1340: 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .1 {.  db close.
1350: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
1360: 74 2e 64 62 3b 20 73 65 74 20 44 42 20 5b 73 71  t.db; set DB [sq
1370: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
1380: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 73  _pointer db].  s
1390: 65 74 20 56 4d 20 5b 73 71 6c 69 74 65 33 5f 70  et VM [sqlite3_p
13a0: 72 65 70 61 72 65 20 24 44 42 20 7b 56 41 43 55  repare $DB {VACU
13b0: 55 4d 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  UM} -1 TAIL].  s
13c0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 56 4d 0a  qlite3_step $VM.
13d0: 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a  } {SQLITE_DONE}.
13e0: 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 34  do_test vacuum-4
13f0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .2 {.  sqlite3_f
1400: 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d 20 53 51  inalize $VM.} SQ
1410: 4c 49 54 45 5f 4f 4b 0a 0a 23 20 54 69 63 6b 65  LITE_OK..# Ticke
1420: 74 20 23 35 31 35 2e 20 20 56 41 43 55 55 4d 20  t #515.  VACUUM 
1430: 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 61  after deleting a
1440: 6e 64 20 72 65 63 72 65 61 74 69 6e 67 20 74 68  nd recreating th
1450: 65 20 74 61 62 6c 65 20 74 68 61 74 0a 23 20 61  e table that.# a
1460: 20 76 69 65 77 20 72 65 66 65 72 73 20 74 6f 2e   view refers to.
1470: 20 4f 6d 69 74 20 74 68 69 73 20 74 65 73 74 20   Omit this test 
1480: 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  if the library i
1490: 73 20 6e 6f 74 20 76 69 65 77 2d 65 6e 61 62 6c  s not view-enabl
14a0: 65 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  ed..#.ifcapable 
14b0: 76 69 65 77 20 7b 0a 64 6f 5f 74 65 73 74 20 76  view {.do_test v
14c0: 61 63 75 75 6d 2d 35 2e 31 20 7b 0a 20 20 64 62  acuum-5.1 {.  db
14d0: 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65   close.  file de
14e0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
14f0: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
1500: 20 74 65 73 74 2e 64 62 0a 20 20 63 61 74 63 68   test.db.  catch
1510: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1520: 20 54 41 42 4c 45 20 54 65 73 74 20 28 54 65 73   TABLE Test (Tes
1530: 74 49 44 20 69 6e 74 20 70 72 69 6d 61 72 79 20  tID int primary 
1540: 6b 65 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  key);.    INSERT
1550: 20 49 4e 54 4f 20 54 65 73 74 20 56 41 4c 55 45   INTO Test VALUE
1560: 53 20 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 43 52  S (NULL);.    CR
1570: 45 41 54 45 20 56 49 45 57 20 76 69 65 77 54 65  EATE VIEW viewTe
1580: 73 74 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  st AS SELECT * F
1590: 52 4f 4d 20 54 65 73 74 3b 0a 0a 20 20 20 20 42  ROM Test;..    B
15a0: 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  EGIN;.    CREATE
15b0: 20 54 41 42 4c 45 20 74 65 6d 70 54 65 73 74 20   TABLE tempTest 
15c0: 28 54 65 73 74 49 44 20 69 6e 74 20 70 72 69 6d  (TestID int prim
15d0: 61 72 79 20 6b 65 79 2c 20 54 65 73 74 32 20 69  ary key, Test2 i
15e0: 6e 74 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e  nt NULL);.    IN
15f0: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 54 65  SERT INTO tempTe
1600: 73 74 20 53 45 4c 45 43 54 20 54 65 73 74 49 44  st SELECT TestID
1610: 2c 20 31 20 46 52 4f 4d 20 54 65 73 74 3b 0a 20  , 1 FROM Test;. 
1620: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 54 65     DROP TABLE Te
1630: 73 74 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  st;.    CREATE T
1640: 41 42 4c 45 20 54 65 73 74 28 54 65 73 74 49 44  ABLE Test(TestID
1650: 20 69 6e 74 20 70 72 69 6d 61 72 79 20 6b 65 79   int primary key
1660: 2c 20 54 65 73 74 32 20 69 6e 74 20 4e 55 4c 4c  , Test2 int NULL
1670: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1680: 54 4f 20 54 65 73 74 20 53 45 4c 45 43 54 20 2a  TO Test SELECT *
1690: 20 46 52 4f 4d 20 74 65 6d 70 54 65 73 74 3b 0a   FROM tempTest;.
16a0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
16b0: 65 6d 70 54 65 73 74 3b 0a 20 20 20 20 43 4f 4d  empTest;.    COM
16c0: 4d 49 54 3b 0a 20 20 20 20 56 41 43 55 55 4d 3b  MIT;.    VACUUM;
16d0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
16e0: 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 35 2e 32  _test vacuum-5.2
16f0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1700: 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 7d 0a      VACUUM;.  }.
1710: 7d 20 7b 30 20 7b 7d 7d 0a 7d 20 3b 23 20 69 66  } {0 {}}.} ;# if
1720: 63 61 70 61 62 6c 65 20 76 69 65 77 0a 0a 23 20  capable view..# 
1730: 45 6e 73 75 72 65 20 76 61 63 75 75 6d 20 77 6f  Ensure vacuum wo
1740: 72 6b 73 20 77 69 74 68 20 63 6f 6d 70 6c 69 63  rks with complic
1750: 61 74 65 64 20 74 61 62 6c 65 73 20 6e 61 6d 65  ated tables name
1760: 73 2e 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  s..do_test vacuu
1770: 6d 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  m-6.1 {.  execsq
1780: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1790: 41 42 4c 45 20 22 61 62 63 20 61 62 63 22 28 61  ABLE "abc abc"(a
17a0: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53  , b, c);.    INS
17b0: 45 52 54 20 49 4e 54 4f 20 22 61 62 63 20 61 62  ERT INTO "abc ab
17c0: 63 22 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  c" VALUES(1, 2, 
17d0: 33 29 3b 0a 20 20 20 20 56 41 43 55 55 4d 3b 0a  3);.    VACUUM;.
17e0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
17f0: 20 76 61 63 75 75 6d 2d 36 2e 32 20 7b 0a 20 20   vacuum-6.2 {.  
1800: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 73 65  execsql {.    se
1810: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 22 61 62 63  lect * from "abc
1820: 20 61 62 63 22 3b 0a 20 20 7d 0a 7d 20 7b 31 20   abc";.  }.} {1 
1830: 32 20 33 7d 0a 0a 23 20 41 6c 73 6f 20 65 6e 73  2 3}..# Also ens
1840: 75 72 65 20 74 68 61 74 20 62 6c 6f 62 73 20 73  ure that blobs s
1850: 75 72 76 69 76 65 20 61 20 76 61 63 75 75 6d 2e  urvive a vacuum.
1860: 0a 69 66 63 61 70 61 62 6c 65 20 7b 62 6c 6f 62  .ifcapable {blob
1870: 6c 69 74 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  lit} {.  do_test
1880: 20 76 61 63 75 75 6d 2d 36 2e 33 20 7b 0a 20 20   vacuum-6.3 {.  
1890: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
18a0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 22 61    DELETE FROM "a
18b0: 62 63 20 61 62 63 22 3b 0a 20 20 20 20 20 20 49  bc abc";.      I
18c0: 4e 53 45 52 54 20 49 4e 54 4f 20 22 61 62 63 20  NSERT INTO "abc 
18d0: 61 62 63 22 20 56 41 4c 55 45 53 28 58 27 30 30  abc" VALUES(X'00
18e0: 31 31 32 32 33 33 27 2c 20 4e 55 4c 4c 2c 20 4e  112233', NULL, N
18f0: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 56 41 43 55  ULL);.      VACU
1900: 55 4d 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  UM;.    }.  } {}
1910: 0a 20 20 64 6f 5f 74 65 73 74 20 76 61 63 75 75  .  do_test vacuu
1920: 6d 2d 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63  m-6.4 {.    exec
1930: 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65  sql {.      sele
1940: 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d  ct count(*) from
1950: 20 22 61 62 63 20 61 62 63 22 20 57 48 45 52 45   "abc abc" WHERE
1960: 20 61 20 3d 20 58 27 30 30 31 31 32 32 33 33 27   a = X'00112233'
1970: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 7d 0a  ;.    }.  } {1}.
1980: 7d 0a 0a 23 20 43 68 65 63 6b 20 77 68 61 74 20  }..# Check what 
1990: 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20  happens when an 
19a0: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
19b0: 73 65 20 69 73 20 76 61 63 75 75 6d 65 64 2e 20  se is vacuumed. 
19c0: 54 68 65 0a 23 20 5b 66 69 6c 65 20 64 65 6c 65  The.# [file dele
19d0: 74 65 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 76 65  te] command cove
19e0: 72 73 20 75 73 20 69 6e 20 63 61 73 65 20 74 68  rs us in case th
19f0: 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63 6f  e library was co
1a00: 6d 70 69 6c 65 64 0a 23 20 77 69 74 68 6f 75 74  mpiled.# without
1a10: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
1a20: 61 73 65 20 73 75 70 70 6f 72 74 2e 0a 23 0a 66  ase support..#.f
1a30: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
1a40: 65 20 3a 6d 65 6d 6f 72 79 3a 0a 64 6f 5f 74 65  e :memory:.do_te
1a50: 73 74 20 76 61 63 75 75 6d 2d 37 2e 30 20 7b 0a  st vacuum-7.0 {.
1a60: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 3a 6d    sqlite3 db2 :m
1a70: 65 6d 6f 72 79 3a 0a 20 20 65 78 65 63 73 71 6c  emory:.  execsql
1a80: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
1a90: 42 4c 45 20 74 31 28 74 29 3b 0a 20 20 20 20 56  BLE t1(t);.    V
1aa0: 41 43 55 55 4d 3b 0a 20 20 7d 20 64 62 32 0a 7d  ACUUM;.  } db2.}
1ab0: 20 7b 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a 23   {}.db2 close..#
1ac0: 20 54 69 63 6b 65 74 20 23 38 37 33 2e 20 20 56   Ticket #873.  V
1ad0: 41 43 55 55 4d 20 61 20 64 61 74 61 62 61 73 65  ACUUM a database
1ae0: 20 74 68 61 74 20 68 61 73 20 27 20 69 6e 20 69   that has ' in i
1af0: 74 73 20 6e 61 6d 65 2e 0a 23 0a 64 6f 5f 74 65  ts name..#.do_te
1b00: 73 74 20 76 61 63 75 75 6d 2d 38 2e 31 20 7b 0a  st vacuum-8.1 {.
1b10: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
1b20: 6f 72 63 65 20 61 27 7a 2e 64 62 0a 20 20 66 69  orce a'z.db.  fi
1b30: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
1b40: 20 61 27 7a 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a   a'z.db-journal.
1b50: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 61 27    sqlite3 db2 a'
1b60: 7a 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  z.db.  execsql {
1b70: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1b80: 45 20 74 31 28 74 29 3b 0a 20 20 20 20 56 41 43  E t1(t);.    VAC
1b90: 55 55 4d 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b  UUM;.  } db2.} {
1ba0: 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a 23 20 54  }.db2 close..# T
1bb0: 69 63 6b 65 74 20 23 31 30 39 35 3a 20 20 56 61  icket #1095:  Va
1bc0: 63 75 75 6d 20 61 20 74 61 62 6c 65 20 74 68 61  cuum a table tha
1bd0: 74 20 75 73 65 73 20 41 55 54 4f 49 4e 43 52 45  t uses AUTOINCRE
1be0: 4d 45 4e 54 0a 23 0a 69 66 63 61 70 61 62 6c 65  MENT.#.ifcapable
1bf0: 20 7b 61 75 74 6f 69 6e 63 7d 20 7b 0a 20 20 64   {autoinc} {.  d
1c00: 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 39 2e  o_test vacuum-9.
1c10: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
1c20: 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42  {.      DROP TAB
1c30: 4c 45 20 27 61 62 63 20 61 62 63 27 3b 0a 20 20  LE 'abc abc';.  
1c40: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1c50: 20 61 75 74 6f 69 6e 63 28 61 20 49 4e 54 45 47   autoinc(a INTEG
1c60: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
1c70: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 62 29  UTOINCREMENT, b)
1c80: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
1c90: 4e 54 4f 20 61 75 74 6f 69 6e 63 28 62 29 20 56  NTO autoinc(b) V
1ca0: 41 4c 55 45 53 28 27 68 69 27 29 3b 0a 20 20 20  ALUES('hi');.   
1cb0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
1cc0: 75 74 6f 69 6e 63 28 62 29 20 56 41 4c 55 45 53  utoinc(b) VALUES
1cd0: 28 27 74 68 65 72 65 27 29 3b 0a 20 20 20 20 20  ('there');.     
1ce0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 61 75 74   DELETE FROM aut
1cf0: 6f 69 6e 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20  oinc;.    }.    
1d00: 73 65 74 20 3a 3a 63 6b 73 75 6d 20 5b 61 6c 6c  set ::cksum [all
1d10: 63 6b 73 75 6d 5d 0a 20 20 20 20 65 78 70 72 20  cksum].    expr 
1d20: 7b 24 3a 3a 63 6b 73 75 6d 21 3d 22 22 7d 0a 20  {$::cksum!=""}. 
1d30: 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74   } {1}.  do_test
1d40: 20 76 61 63 75 75 6d 2d 39 2e 32 20 7b 0a 20 20   vacuum-9.2 {.  
1d50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1d60: 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 7d 0a    VACUUM;.    }.
1d70: 20 20 20 20 61 6c 6c 63 6b 73 75 6d 0a 20 20 7d      allcksum.  }
1d80: 20 24 3a 3a 63 6b 73 75 6d 0a 20 20 64 6f 5f 74   $::cksum.  do_t
1d90: 65 73 74 20 76 61 63 75 75 6d 2d 39 2e 33 20 7b  est vacuum-9.3 {
1da0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1db0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1dc0: 20 61 75 74 6f 69 6e 63 28 62 29 20 56 41 4c 55   autoinc(b) VALU
1dd0: 45 53 28 27 6f 6e 65 27 29 3b 0a 20 20 20 20 20  ES('one');.     
1de0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 74   INSERT INTO aut
1df0: 6f 69 6e 63 28 62 29 20 56 41 4c 55 45 53 28 27  oinc(b) VALUES('
1e00: 74 77 6f 27 29 3b 0a 20 20 20 20 7d 0a 20 20 20  two');.    }.   
1e10: 20 73 65 74 20 3a 3a 63 6b 73 75 6d 20 5b 61 6c   set ::cksum [al
1e20: 6c 63 6b 73 75 6d 5d 0a 20 20 20 20 65 78 70 72  lcksum].    expr
1e30: 20 7b 24 3a 3a 63 6b 73 75 6d 21 3d 22 22 7d 0a   {$::cksum!=""}.
1e40: 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73    } {1}.  do_tes
1e50: 74 20 76 61 63 75 75 6d 2d 39 2e 34 20 7b 0a 20  t vacuum-9.4 {. 
1e60: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1e70: 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 7d     VACUUM;.    }
1e80: 0a 20 20 20 20 61 6c 6c 63 6b 73 75 6d 0a 20 20  .    allcksum.  
1e90: 7d 20 24 3a 3a 63 6b 73 75 6d 0a 7d 0a 0a 66 69  } $::cksum.}..fi
1ea0: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
1eb0: 20 7b 61 27 7a 2e 64 62 7d 0a 0a 66 69 6e 69 73   {a'z.db}..finis
1ec0: 68 5f 74 65 73 74 0a                             h_test.