/ Hex Artifact Content
Login

Artifact 81417656043f2402ec4a7dd8255f88bb4d1b73af:


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 31 37 20 32 30 30  .test,v 1.17 200
0200: 34 2f 30 35 2f 32 31 20 31 30 3a 30 38 3a 35 35  4/05/21 10:08:55
0210: 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70   danielk1977 Exp
0220: 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20   $..set testdir 
0230: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0240: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0250: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0260: 0a 0a 70 72 6f 63 20 63 6b 73 75 6d 20 7b 7b 64  ..proc cksum {{d
0270: 62 20 64 62 7d 7d 20 7b 0a 20 20 73 65 74 20 74  b db}} {.  set t
0280: 78 74 20 5b 24 64 62 20 65 76 61 6c 20 7b 53 45  xt [$db eval {SE
0290: 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c  LECT name, type,
02a0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
02b0: 5f 6d 61 73 74 65 72 7d 5d 5c 6e 0a 20 20 66 6f  _master}]\n.  fo
02c0: 72 65 61 63 68 20 74 62 6c 20 5b 24 64 62 20 65  reach tbl [$db e
02d0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  val {SELECT name
02e0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
02f0: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
0300: 74 61 62 6c 65 27 7d 5d 20 7b 0a 20 20 20 20 61  table'}] {.    a
0310: 70 70 65 6e 64 20 74 78 74 20 5b 24 64 62 20 65  ppend txt [$db e
0320: 76 61 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52  val "SELECT * FR
0330: 4f 4d 20 24 74 62 6c 22 5d 5c 6e 0a 20 20 7d 0a  OM $tbl"]\n.  }.
0340: 20 20 66 6f 72 65 61 63 68 20 70 72 61 67 20 7b    foreach prag {
0350: 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e  default_synchron
0360: 6f 75 73 20 64 65 66 61 75 6c 74 5f 63 61 63 68  ous default_cach
0370: 65 5f 73 69 7a 65 7d 20 7b 0a 20 20 20 20 61 70  e_size} {.    ap
0380: 70 65 6e 64 20 74 78 74 20 24 70 72 61 67 2d 5b  pend txt $prag-[
0390: 24 64 62 20 65 76 61 6c 20 22 50 52 41 47 4d 41  $db eval "PRAGMA
03a0: 20 24 70 72 61 67 22 5d 5c 6e 0a 20 20 7d 0a 20   $prag"]\n.  }. 
03b0: 20 73 65 74 20 63 6b 73 75 6d 20 5b 73 74 72 69   set cksum [stri
03c0: 6e 67 20 6c 65 6e 67 74 68 20 24 74 78 74 5d 2d  ng length $txt]-
03d0: 5b 6d 64 35 20 24 74 78 74 5d 0a 20 20 23 20 70  [md5 $txt].  # p
03e0: 75 74 73 20 24 63 6b 73 75 6d 2d 5b 66 69 6c 65  uts $cksum-[file
03f0: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 0a 20   size test.db]. 
0400: 20 72 65 74 75 72 6e 20 24 63 6b 73 75 6d 0a 7d   return $cksum.}
0410: 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d  .do_test vacuum-
0420: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
0430: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
0440: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0450: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
0460: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20  RY KEY, b, c);. 
0470: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0480: 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 72 61  1 VALUES(NULL,ra
0490: 6e 64 73 74 72 28 31 30 2c 31 30 30 29 2c 72 61  ndstr(10,100),ra
04a0: 6e 64 73 74 72 28 35 2c 35 30 29 29 3b 0a 20 20  ndstr(5,50));.  
04b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
04c0: 20 56 41 4c 55 45 53 28 31 32 33 34 35 36 2c 72   VALUES(123456,r
04d0: 61 6e 64 73 74 72 28 31 30 2c 31 30 30 29 2c 72  andstr(10,100),r
04e0: 61 6e 64 73 74 72 28 35 2c 35 30 29 29 3b 0a 20  andstr(5,50));. 
04f0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0500: 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 62  1 SELECT NULL, b
0510: 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 2c 20 63 7c  ||'-'||rowid, c|
0520: 7c 27 2d 27 7c 7c 72 6f 77 69 64 20 46 52 4f 4d  |'-'||rowid FROM
0530: 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t1;.    INSERT 
0540: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 4e  INTO t1 SELECT N
0550: 55 4c 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77  ULL, b||'-'||row
0560: 69 64 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69  id, c||'-'||rowi
0570: 64 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49  d FROM t1;.    I
0580: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
0590: 4c 45 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c 27 2d  LECT NULL, b||'-
05a0: 27 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c 27 2d 27  '||rowid, c||'-'
05b0: 7c 7c 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 3b  ||rowid FROM t1;
05c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
05d0: 20 74 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c   t1 SELECT NULL,
05e0: 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 2c 20   b||'-'||rowid, 
05f0: 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 20 46 52  c||'-'||rowid FR
0600: 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52  OM t1;.    INSER
0610: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
0620: 20 4e 55 4c 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72   NULL, b||'-'||r
0630: 6f 77 69 64 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f  owid, c||'-'||ro
0640: 77 69 64 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  wid FROM t1;.   
0650: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0660: 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c  SELECT NULL, b||
0670: 27 2d 27 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c 27  '-'||rowid, c||'
0680: 2d 27 7c 7c 72 6f 77 69 64 20 46 52 4f 4d 20 74  -'||rowid FROM t
0690: 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  1;.    INSERT IN
06a0: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 4e 55 4c  TO t1 SELECT NUL
06b0: 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64  L, b||'-'||rowid
06c0: 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 20  , c||'-'||rowid 
06d0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45  FROM t1;.    CRE
06e0: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
06f0: 74 31 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45  t1(b,c);.    CRE
0700: 41 54 45 20 54 41 42 4c 45 20 74 32 20 41 53 20  ATE TABLE t2 AS 
0710: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0720: 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  ;.    COMMIT;.  
0730: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b    DROP TABLE t2;
0740: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 73 69 7a  .  }.  set ::siz
0750: 65 31 20 5b 66 69 6c 65 20 73 69 7a 65 20 74 65  e1 [file size te
0760: 73 74 2e 64 62 5d 0a 20 20 73 65 74 20 3a 3a 63  st.db].  set ::c
0770: 6b 73 75 6d 20 5b 63 6b 73 75 6d 5d 0a 20 20 65  ksum [cksum].  e
0780: 78 70 72 20 7b 24 3a 3a 63 6b 73 75 6d 21 3d 22  xpr {$::cksum!="
0790: 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  "}.} {1}.do_test
07a0: 20 76 61 63 75 75 6d 2d 31 2e 32 20 7b 0a 20 20   vacuum-1.2 {.  
07b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 56 41  execsql {.    VA
07c0: 43 55 55 4d 3b 0a 20 20 7d 0a 20 20 63 6b 73 75  CUUM;.  }.  cksu
07d0: 6d 0a 7d 20 24 63 6b 73 75 6d 0a 64 6f 5f 74 65  m.} $cksum.do_te
07e0: 73 74 20 76 61 63 75 75 6d 2d 31 2e 33 20 7b 0a  st vacuum-1.3 {.
07f0: 20 20 65 78 70 72 20 7b 5b 66 69 6c 65 20 73 69    expr {[file si
0800: 7a 65 20 74 65 73 74 2e 64 62 5d 3c 24 3a 3a 73  ze test.db]<$::s
0810: 69 7a 65 31 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ize1}.} {1}.do_t
0820: 65 73 74 20 76 61 63 75 75 6d 2d 31 2e 34 20 7b  est vacuum-1.4 {
0830: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0840: 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41   BEGIN;.    CREA
0850: 54 45 20 54 41 42 4c 45 20 74 32 20 41 53 20 53  TE TABLE t2 AS S
0860: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
0870: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0880: 45 20 74 33 20 41 53 20 53 45 4c 45 43 54 20 2a  E t3 AS SELECT *
0890: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52   FROM t1;.    CR
08a0: 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20  EATE VIEW v1 AS 
08b0: 53 45 4c 45 43 54 20 62 2c 20 63 20 46 52 4f 4d  SELECT b, c FROM
08c0: 20 74 33 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t3;.    CREATE 
08d0: 54 52 49 47 47 45 52 20 72 31 20 41 46 54 45 52  TRIGGER r1 AFTER
08e0: 20 44 45 4c 45 54 45 20 4f 4e 20 74 32 20 42 45   DELETE ON t2 BE
08f0: 47 49 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54  GIN.      SELECT
0900: 20 31 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20   1;.    END;.   
0910: 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 44 52 4f   COMMIT;.    DRO
0920: 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 7d 0a  P TABLE t2;.  }.
0930: 20 20 73 65 74 20 3a 3a 73 69 7a 65 31 20 5b 66    set ::size1 [f
0940: 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62  ile size test.db
0950: 5d 0a 20 20 73 65 74 20 3a 3a 63 6b 73 75 6d 20  ].  set ::cksum 
0960: 5b 63 6b 73 75 6d 5d 0a 20 20 65 78 70 72 20 7b  [cksum].  expr {
0970: 24 3a 3a 63 6b 73 75 6d 21 3d 22 22 7d 0a 7d 20  $::cksum!=""}.} 
0980: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75  {1}.do_test vacu
0990: 75 6d 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73  um-1.5 {.  execs
09a0: 71 6c 20 7b 0a 20 20 20 20 56 41 43 55 55 4d 3b  ql {.    VACUUM;
09b0: 0a 20 20 7d 0a 20 20 63 6b 73 75 6d 0a 7d 20 24  .  }.  cksum.} $
09c0: 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74 20 76 61  cksum.do_test va
09d0: 63 75 75 6d 2d 31 2e 36 20 7b 0a 20 20 65 78 70  cuum-1.6 {.  exp
09e0: 72 20 7b 5b 66 69 6c 65 20 73 69 7a 65 20 74 65  r {[file size te
09f0: 73 74 2e 64 62 5d 3c 24 3a 3a 73 69 7a 65 31 7d  st.db]<$::size1}
0a00: 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f 74 65 73 74 20  .} {1}..do_test 
0a10: 76 61 63 75 75 6d 2d 32 2e 31 20 7b 0a 20 20 63  vacuum-2.1 {.  c
0a20: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45  atchsql {.    BE
0a30: 47 49 4e 3b 0a 20 20 20 20 56 41 43 55 55 4d 3b  GIN;.    VACUUM;
0a40: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
0a50: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 56 41  .} {1 {cannot VA
0a60: 43 55 55 4d 20 66 72 6f 6d 20 77 69 74 68 69 6e  CUUM from within
0a70: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d   a transaction}}
0a80: 0a 63 61 74 63 68 20 7b 64 62 20 65 76 61 6c 20  .catch {db eval 
0a90: 43 4f 4d 4d 49 54 7d 0a 64 6f 5f 74 65 73 74 20  COMMIT}.do_test 
0aa0: 76 61 63 75 75 6d 2d 32 2e 32 20 7b 0a 20 20 73  vacuum-2.2 {.  s
0ab0: 71 6c 69 74 65 20 64 62 32 20 74 65 73 74 2e 64  qlite db2 test.d
0ac0: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
0ad0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
0ae0: 41 54 45 20 54 41 42 4c 45 20 74 34 20 41 53 20  ATE TABLE t4 AS 
0af0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0b00: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
0b10: 4c 45 20 74 35 20 41 53 20 53 45 4c 45 43 54 20  LE t5 AS SELECT 
0b20: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43  * FROM t1;.    C
0b30: 4f 4d 4d 49 54 3b 0a 20 20 20 20 44 52 4f 50 20  OMMIT;.    DROP 
0b40: 54 41 42 4c 45 20 74 34 3b 0a 20 20 20 20 44 52  TABLE t4;.    DR
0b50: 4f 50 20 54 41 42 4c 45 20 74 35 3b 0a 20 20 7d  OP TABLE t5;.  }
0b60: 20 64 62 32 0a 20 20 73 65 74 20 3a 3a 63 6b 73   db2.  set ::cks
0b70: 75 6d 20 5b 63 6b 73 75 6d 20 64 62 32 5d 0a 20  um [cksum db2]. 
0b80: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0b90: 56 41 43 55 55 4d 0a 20 20 7d 0a 7d 20 7b 30 20  VACUUM.  }.} {0 
0ba0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75  {}}.do_test vacu
0bb0: 75 6d 2d 32 2e 33 20 7b 0a 20 20 63 6b 73 75 6d  um-2.3 {.  cksum
0bc0: 0a 7d 20 24 63 6b 73 75 6d 0a 64 6f 5f 74 65 73  .} $cksum.do_tes
0bd0: 74 20 76 61 63 75 75 6d 2d 32 2e 34 20 7b 0a 20  t vacuum-2.4 {. 
0be0: 20 63 61 74 63 68 20 7b 64 62 32 20 65 76 61 6c   catch {db2 eval
0bf0: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0c00: 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  ) FROM sqlite_ma
0c10: 73 74 65 72 7d 7d 0a 20 20 63 6b 73 75 6d 20 64  ster}}.  cksum d
0c20: 62 32 0a 7d 20 24 63 6b 73 75 6d 0a 0a 23 20 54  b2.} $cksum..# T
0c30: 69 63 6b 65 74 20 23 34 32 37 2e 20 20 4d 61 6b  icket #427.  Mak
0c40: 65 20 73 75 72 65 20 56 41 43 55 55 4d 20 77 6f  e sure VACUUM wo
0c50: 72 6b 73 20 77 68 65 6e 20 74 68 65 20 45 4d 50  rks when the EMP
0c60: 54 59 5f 52 45 53 55 4c 54 5f 43 41 4c 4c 42 41  TY_RESULT_CALLBA
0c70: 43 4b 53 0a 23 20 70 72 61 67 6d 61 20 69 73 20  CKS.# pragma is 
0c80: 74 75 72 6e 65 64 20 6f 6e 2e 0a 23 0a 64 6f 5f  turned on..#.do_
0c90: 74 65 73 74 20 76 61 63 75 75 6d 2d 33 2e 31 20  test vacuum-3.1 
0ca0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64  {.  db close.  d
0cb0: 62 32 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20  b2 close.  file 
0cc0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
0cd0: 20 73 71 6c 69 74 65 20 64 62 20 74 65 73 74 2e   sqlite db test.
0ce0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
0cf0: 20 20 20 50 52 41 47 4d 41 20 65 6d 70 74 79 5f     PRAGMA empty_
0d00: 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73  result_callbacks
0d10: 3d 6f 6e 3b 0a 20 20 20 20 56 41 43 55 55 4d 3b  =on;.    VACUUM;
0d20: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63  .  }.} {}..# Tic
0d30: 6b 65 74 20 23 34 36 34 2e 20 20 4d 61 6b 65 20  ket #464.  Make 
0d40: 73 75 72 65 20 56 41 43 55 55 4d 20 77 6f 72 6b  sure VACUUM work
0d50: 73 20 77 69 74 68 20 74 68 65 20 73 71 6c 69 74  s with the sqlit
0d60: 65 33 5f 70 72 65 70 61 72 65 28 29 20 41 50 49  e3_prepare() API
0d70: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 76 61 63 75  ..#.do_test vacu
0d80: 75 6d 2d 34 2e 31 20 7b 0a 20 20 64 62 20 63 6c  um-4.1 {.  db cl
0d90: 6f 73 65 0a 20 20 73 65 74 20 44 42 20 5b 73 71  ose.  set DB [sq
0da0: 6c 69 74 65 20 64 62 20 74 65 73 74 2e 64 62 5d  lite db test.db]
0db0: 0a 20 20 73 65 74 20 56 4d 20 5b 73 71 6c 69 74  .  set VM [sqlit
0dc0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
0dd0: 56 41 43 55 55 4d 7d 20 2d 31 20 54 41 49 4c 5d  VACUUM} -1 TAIL]
0de0: 0a 20 20 73 71 6c 69 74 65 5f 73 74 65 70 20 24  .  sqlite_step $
0df0: 56 4d 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e  VM N VALUES COLN
0e00: 41 4d 45 53 0a 7d 20 7b 53 51 4c 49 54 45 5f 44  AMES.} {SQLITE_D
0e10: 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63  ONE}.do_test vac
0e20: 75 75 6d 2d 34 2e 32 20 7b 0a 20 20 73 71 6c 69  uum-4.2 {.  sqli
0e30: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d  te3_finalize $VM
0e40: 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20  .} {}..# Ticket 
0e50: 23 35 31 35 2e 20 20 56 41 43 55 55 4d 20 61 66  #515.  VACUUM af
0e60: 74 65 72 20 64 65 6c 65 74 69 6e 67 20 61 6e 64  ter deleting and
0e70: 20 72 65 63 72 65 61 74 69 6e 67 20 74 68 65 20   recreating the 
0e80: 74 61 62 6c 65 20 74 68 61 74 0a 23 20 61 20 76  table that.# a v
0e90: 69 65 77 20 72 65 66 65 72 73 20 74 6f 2e 0a 23  iew refers to..#
0ea0: 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d  .do_test vacuum-
0eb0: 35 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  5.1 {.  db close
0ec0: 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  .  file delete -
0ed0: 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 20 20  force test.db.  
0ee0: 73 71 6c 69 74 65 20 64 62 20 74 65 73 74 2e 64  sqlite db test.d
0ef0: 62 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  b.  catchsql {. 
0f00: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0f10: 54 65 73 74 20 28 54 65 73 74 49 44 20 69 6e 74  Test (TestID int
0f20: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20   primary key);. 
0f30: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 54     INSERT INTO T
0f40: 65 73 74 20 56 41 4c 55 45 53 20 28 4e 55 4c 4c  est VALUES (NULL
0f50: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  );.    CREATE VI
0f60: 45 57 20 76 69 65 77 54 65 73 74 20 41 53 20 53  EW viewTest AS S
0f70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 54 65 73  ELECT * FROM Tes
0f80: 74 3b 0a 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  t;..    BEGIN;. 
0f90: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
0fa0: 41 42 4c 45 20 74 65 6d 70 54 65 73 74 20 28 54  ABLE tempTest (T
0fb0: 65 73 74 49 44 20 69 6e 74 20 70 72 69 6d 61 72  estID int primar
0fc0: 79 20 6b 65 79 2c 20 54 65 73 74 32 20 69 6e 74  y key, Test2 int
0fd0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45   NULL);.    INSE
0fe0: 52 54 20 49 4e 54 4f 20 74 65 6d 70 54 65 73 74  RT INTO tempTest
0ff0: 20 53 45 4c 45 43 54 20 54 65 73 74 49 44 2c 20   SELECT TestID, 
1000: 31 20 46 52 4f 4d 20 54 65 73 74 3b 0a 20 20 20  1 FROM Test;.   
1010: 20 44 52 4f 50 20 54 41 42 4c 45 20 54 65 73 74   DROP TABLE Test
1020: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
1030: 4c 45 20 54 65 73 74 28 54 65 73 74 49 44 20 69  LE Test(TestID i
1040: 6e 74 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 20  nt primary key, 
1050: 54 65 73 74 32 20 69 6e 74 20 4e 55 4c 4c 29 3b  Test2 int NULL);
1060: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1070: 20 54 65 73 74 20 53 45 4c 45 43 54 20 2a 20 46   Test SELECT * F
1080: 52 4f 4d 20 74 65 6d 70 54 65 73 74 3b 0a 20 20  ROM tempTest;.  
1090: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 56 41    COMMIT;.    VA
10a0: 43 55 55 4d 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  CUUM;.  }.} {0 {
10b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  }}.do_test vacuu
10c0: 6d 2d 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  m-5.2 {.  catchs
10d0: 71 6c 20 7b 0a 20 20 20 20 56 41 43 55 55 4d 3b  ql {.    VACUUM;
10e0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23  .  }.} {0 {}}..#
10f0: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a            finish_test.