/ Hex Artifact Content
Login

Artifact a2a44544df719666efb51afbfeb6062fd59a672a:


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 35 20 32 30 30  .test,v 1.15 200
0200: 34 2f 30 32 2f 31 34 20 31 36 3a 33 31 3a 30 34  4/02/14 16:31:04
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 70 72 6f 63 20 63  ster.tcl..proc c
0260: 6b 73 75 6d 20 7b 7b 64 62 20 64 62 7d 7d 20 7b  ksum {{db db}} {
0270: 0a 20 20 73 65 74 20 74 78 74 20 5b 24 64 62 20  .  set txt [$db 
0280: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  eval {SELECT nam
0290: 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  e, type, sql FRO
02a0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
02b0: 5d 5c 6e 0a 20 20 66 6f 72 65 61 63 68 20 74 62  ]\n.  foreach tb
02c0: 6c 20 5b 24 64 62 20 65 76 61 6c 20 7b 53 45 4c  l [$db eval {SEL
02d0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
02e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
02f0: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d 5d  E type='table'}]
0300: 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 74 78   {.    append tx
0310: 74 20 5b 24 64 62 20 65 76 61 6c 20 22 53 45 4c  t [$db eval "SEL
0320: 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 22  ECT * FROM $tbl"
0330: 5d 5c 6e 0a 20 20 7d 0a 20 20 66 6f 72 65 61 63  ]\n.  }.  foreac
0340: 68 20 70 72 61 67 20 7b 64 65 66 61 75 6c 74 5f  h prag {default_
0350: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 64 65 66 61  synchronous defa
0360: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d 20  ult_cache_size} 
0370: 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 74 78 74  {.    append txt
0380: 20 24 70 72 61 67 2d 5b 24 64 62 20 65 76 61 6c   $prag-[$db eval
0390: 20 22 50 52 41 47 4d 41 20 24 70 72 61 67 22 5d   "PRAGMA $prag"]
03a0: 5c 6e 0a 20 20 7d 0a 20 20 73 65 74 20 63 6b 73  \n.  }.  set cks
03b0: 75 6d 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  um [string lengt
03c0: 68 20 24 74 78 74 5d 2d 5b 6d 64 35 20 24 74 78  h $txt]-[md5 $tx
03d0: 74 5d 0a 20 20 23 20 70 75 74 73 20 24 63 6b 73  t].  # puts $cks
03e0: 75 6d 2d 5b 66 69 6c 65 20 73 69 7a 65 20 74 65  um-[file size te
03f0: 73 74 2e 64 62 5d 0a 20 20 72 65 74 75 72 6e 20  st.db].  return 
0400: 24 63 6b 73 75 6d 0a 7d 0a 64 6f 5f 74 65 73 74  $cksum.}.do_test
0410: 20 76 61 63 75 75 6d 2d 31 2e 31 20 7b 0a 20 20   vacuum-1.1 {.  
0420: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
0430: 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  GIN;.    CREATE 
0440: 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47  TABLE t1(a INTEG
0450: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
0460: 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52  b, c);.    INSER
0470: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0480: 28 4e 55 4c 4c 2c 72 61 6e 64 73 74 72 28 31 30  (NULL,randstr(10
0490: 2c 31 30 30 29 2c 72 61 6e 64 73 74 72 28 35 2c  ,100),randstr(5,
04a0: 35 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  50));.    INSERT
04b0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
04c0: 31 32 33 34 35 36 2c 72 61 6e 64 73 74 72 28 31  123456,randstr(1
04d0: 30 2c 31 30 30 29 2c 72 61 6e 64 73 74 72 28 35  0,100),randstr(5
04e0: 2c 35 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  ,50));.    INSER
04f0: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
0500: 20 4e 55 4c 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72   NULL, b||'-'||r
0510: 6f 77 69 64 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f  owid, c||'-'||ro
0520: 77 69 64 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  wid FROM t1;.   
0530: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0540: 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c  SELECT NULL, b||
0550: 27 2d 27 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c 27  '-'||rowid, c||'
0560: 2d 27 7c 7c 72 6f 77 69 64 20 46 52 4f 4d 20 74  -'||rowid FROM t
0570: 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  1;.    INSERT IN
0580: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 4e 55 4c  TO t1 SELECT NUL
0590: 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64  L, b||'-'||rowid
05a0: 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 20  , c||'-'||rowid 
05b0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53  FROM t1;.    INS
05c0: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
05d0: 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c 27 2d 27 7c  CT NULL, b||'-'|
05e0: 7c 72 6f 77 69 64 2c 20 63 7c 7c 27 2d 27 7c 7c  |rowid, c||'-'||
05f0: 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 3b 0a 20  rowid FROM t1;. 
0600: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0610: 31 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 62  1 SELECT NULL, b
0620: 7c 7c 27 2d 27 7c 7c 72 6f 77 69 64 2c 20 63 7c  ||'-'||rowid, c|
0630: 7c 27 2d 27 7c 7c 72 6f 77 69 64 20 46 52 4f 4d  |'-'||rowid FROM
0640: 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t1;.    INSERT 
0650: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 4e  INTO t1 SELECT N
0660: 55 4c 4c 2c 20 62 7c 7c 27 2d 27 7c 7c 72 6f 77  ULL, b||'-'||row
0670: 69 64 2c 20 63 7c 7c 27 2d 27 7c 7c 72 6f 77 69  id, c||'-'||rowi
0680: 64 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49  d FROM t1;.    I
0690: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
06a0: 4c 45 43 54 20 4e 55 4c 4c 2c 20 62 7c 7c 27 2d  LECT NULL, b||'-
06b0: 27 7c 7c 72 6f 77 69 64 2c 20 63 7c 7c 27 2d 27  '||rowid, c||'-'
06c0: 7c 7c 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 3b  ||rowid FROM t1;
06d0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
06e0: 58 20 69 31 20 4f 4e 20 74 31 28 62 2c 63 29 3b  X i1 ON t1(b,c);
06f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0700: 45 20 74 32 20 41 53 20 53 45 4c 45 43 54 20 2a  E t2 AS SELECT *
0710: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 4f   FROM t1;.    CO
0720: 4d 4d 49 54 3b 0a 20 20 20 20 44 52 4f 50 20 54  MMIT;.    DROP T
0730: 41 42 4c 45 20 74 32 3b 0a 20 20 7d 0a 20 20 73  ABLE t2;.  }.  s
0740: 65 74 20 3a 3a 73 69 7a 65 31 20 5b 66 69 6c 65  et ::size1 [file
0750: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 0a 20   size test.db]. 
0760: 20 73 65 74 20 3a 3a 63 6b 73 75 6d 20 5b 63 6b   set ::cksum [ck
0770: 73 75 6d 5d 0a 20 20 65 78 70 72 20 7b 24 3a 3a  sum].  expr {$::
0780: 63 6b 73 75 6d 21 3d 22 22 7d 0a 7d 20 7b 31 7d  cksum!=""}.} {1}
0790: 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d  .do_test vacuum-
07a0: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
07b0: 7b 0a 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20  {.    VACUUM;.  
07c0: 7d 0a 20 20 63 6b 73 75 6d 0a 7d 20 24 63 6b 73  }.  cksum.} $cks
07d0: 75 6d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  um.do_test vacuu
07e0: 6d 2d 31 2e 33 20 7b 0a 20 20 65 78 70 72 20 7b  m-1.3 {.  expr {
07f0: 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e  [file size test.
0800: 64 62 5d 3c 24 3a 3a 73 69 7a 65 31 7d 0a 7d 20  db]<$::size1}.} 
0810: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75  {1}.do_test vacu
0820: 75 6d 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  um-1.4 {.  execs
0830: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
0840: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0850: 20 74 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20   t2 AS SELECT * 
0860: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45  FROM t1;.    CRE
0870: 41 54 45 20 54 41 42 4c 45 20 74 33 20 41 53 20  ATE TABLE t3 AS 
0880: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0890: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  ;.    CREATE VIE
08a0: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 62  W v1 AS SELECT b
08b0: 2c 20 63 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20  , c FROM t3;.   
08c0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
08d0: 72 31 20 41 46 54 45 52 20 44 45 4c 45 54 45 20  r1 AFTER DELETE 
08e0: 4f 4e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20  ON t2 BEGIN.    
08f0: 20 20 53 45 4c 45 43 54 20 31 3b 0a 20 20 20 20    SELECT 1;.    
0900: 45 4e 44 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  END;.    COMMIT;
0910: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
0920: 74 32 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  t2;.  }.  set ::
0930: 73 69 7a 65 31 20 5b 66 69 6c 65 20 73 69 7a 65  size1 [file size
0940: 20 74 65 73 74 2e 64 62 5d 0a 20 20 73 65 74 20   test.db].  set 
0950: 3a 3a 63 6b 73 75 6d 20 5b 63 6b 73 75 6d 5d 0a  ::cksum [cksum].
0960: 20 20 65 78 70 72 20 7b 24 3a 3a 63 6b 73 75 6d    expr {$::cksum
0970: 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  !=""}.} {1}.do_t
0980: 65 73 74 20 76 61 63 75 75 6d 2d 31 2e 35 20 7b  est vacuum-1.5 {
0990: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
09a0: 20 56 41 43 55 55 4d 3b 0a 20 20 7d 0a 20 20 63   VACUUM;.  }.  c
09b0: 6b 73 75 6d 0a 7d 20 24 63 6b 73 75 6d 0a 64 6f  ksum.} $cksum.do
09c0: 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 31 2e 36  _test vacuum-1.6
09d0: 20 7b 0a 20 20 65 78 70 72 20 7b 5b 66 69 6c 65   {.  expr {[file
09e0: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 3c 24   size test.db]<$
09f0: 3a 3a 73 69 7a 65 31 7d 0a 7d 20 7b 31 7d 0a 0a  ::size1}.} {1}..
0a00: 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 32  do_test vacuum-2
0a10: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
0a20: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
0a30: 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 43 4f 4d   VACUUM;.    COM
0a40: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63  MIT;.  }.} {1 {c
0a50: 61 6e 6e 6f 74 20 56 41 43 55 55 4d 20 66 72 6f  annot VACUUM fro
0a60: 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
0a70: 61 63 74 69 6f 6e 7d 7d 0a 63 61 74 63 68 20 7b  action}}.catch {
0a80: 64 62 20 65 76 61 6c 20 43 4f 4d 4d 49 54 7d 0a  db eval COMMIT}.
0a90: 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 32  do_test vacuum-2
0aa0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 20 64 62  .2 {.  sqlite db
0ab0: 32 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  2 test.db.  exec
0ac0: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
0ad0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0ae0: 45 20 74 34 20 41 53 20 53 45 4c 45 43 54 20 2a  E t4 AS SELECT *
0af0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52   FROM t1;.    CR
0b00: 45 41 54 45 20 54 41 42 4c 45 20 74 35 20 41 53  EATE TABLE t5 AS
0b10: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0b20: 31 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  1;.    COMMIT;. 
0b30: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 34     DROP TABLE t4
0b40: 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  ;.    DROP TABLE
0b50: 20 74 35 3b 0a 20 20 7d 20 64 62 32 0a 20 20 73   t5;.  } db2.  s
0b60: 65 74 20 3a 3a 63 6b 73 75 6d 20 5b 63 6b 73 75  et ::cksum [cksu
0b70: 6d 20 64 62 32 5d 0a 20 20 63 61 74 63 68 73 71  m db2].  catchsq
0b80: 6c 20 7b 0a 20 20 20 20 56 41 43 55 55 4d 0a 20  l {.    VACUUM. 
0b90: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
0ba0: 65 73 74 20 76 61 63 75 75 6d 2d 32 2e 33 20 7b  est vacuum-2.3 {
0bb0: 0a 20 20 63 6b 73 75 6d 0a 7d 20 24 63 6b 73 75  .  cksum.} $cksu
0bc0: 6d 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d  m.do_test vacuum
0bd0: 2d 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 20 7b  -2.4 {.  catch {
0be0: 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54  db2 eval {SELECT
0bf0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73   count(*) FROM s
0c00: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 20  qlite_master}}. 
0c10: 20 63 6b 73 75 6d 20 64 62 32 0a 7d 20 24 63 6b   cksum db2.} $ck
0c20: 73 75 6d 0a 0a 23 20 54 69 63 6b 65 74 20 23 34  sum..# Ticket #4
0c30: 32 37 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 56  27.  Make sure V
0c40: 41 43 55 55 4d 20 77 6f 72 6b 73 20 77 68 65 6e  ACUUM works when
0c50: 20 74 68 65 20 45 4d 50 54 59 5f 52 45 53 55 4c   the EMPTY_RESUL
0c60: 54 5f 43 41 4c 4c 42 41 43 4b 53 0a 23 20 70 72  T_CALLBACKS.# pr
0c70: 61 67 6d 61 20 69 73 20 74 75 72 6e 65 64 20 6f  agma is turned o
0c80: 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 76 61 63  n..#.do_test vac
0c90: 75 75 6d 2d 33 2e 31 20 7b 0a 20 20 64 62 20 63  uum-3.1 {.  db c
0ca0: 6c 6f 73 65 0a 20 20 64 62 32 20 63 6c 6f 73 65  lose.  db2 close
0cb0: 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 74  .  file delete t
0cc0: 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 20  est.db.  sqlite 
0cd0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
0ce0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
0cf0: 41 20 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63  A empty_result_c
0d00: 61 6c 6c 62 61 63 6b 73 3d 6f 6e 3b 0a 20 20 20  allbacks=on;.   
0d10: 20 56 41 43 55 55 4d 3b 0a 20 20 7d 0a 7d 20 7b   VACUUM;.  }.} {
0d20: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 34 36 34  }..# Ticket #464
0d30: 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 56 41 43  .  Make sure VAC
0d40: 55 55 4d 20 77 6f 72 6b 73 20 77 69 74 68 20 74  UUM works with t
0d50: 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  he sqlite_compil
0d60: 65 28 29 20 41 50 49 2e 0a 23 0a 64 6f 5f 74 65  e() API..#.do_te
0d70: 73 74 20 76 61 63 75 75 6d 2d 34 2e 31 20 7b 0a  st vacuum-4.1 {.
0d80: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74    db close.  set
0d90: 20 44 42 20 5b 73 71 6c 69 74 65 20 64 62 20 74   DB [sqlite db t
0da0: 65 73 74 2e 64 62 5d 0a 20 20 73 65 74 20 56 4d  est.db].  set VM
0db0: 20 5b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65   [sqlite_compile
0dc0: 20 24 44 42 20 7b 56 41 43 55 55 4d 7d 20 54 41   $DB {VACUUM} TA
0dd0: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 5f 73 74 65  IL].  sqlite_ste
0de0: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
0df0: 4f 4c 4e 41 4d 45 53 0a 7d 20 7b 53 51 4c 49 54  OLNAMES.} {SQLIT
0e00: 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20  E_DONE}.do_test 
0e10: 76 61 63 75 75 6d 2d 34 2e 32 20 7b 0a 20 20 73  vacuum-4.2 {.  s
0e20: 71 6c 69 74 65 5f 66 69 6e 61 6c 69 7a 65 20 24  qlite_finalize $
0e30: 56 4d 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63 6b 65  VM.} {}..# Ticke
0e40: 74 20 23 35 31 35 2e 20 20 56 41 43 55 55 4d 20  t #515.  VACUUM 
0e50: 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 61  after deleting a
0e60: 6e 64 20 72 65 63 72 65 61 74 69 6e 67 20 74 68  nd recreating th
0e70: 65 20 74 61 62 6c 65 20 74 68 61 74 0a 23 20 61  e table that.# a
0e80: 20 76 69 65 77 20 72 65 66 65 72 73 20 74 6f 2e   view refers to.
0e90: 0a 23 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75  .#.do_test vacuu
0ea0: 6d 2d 35 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  m-5.1 {.  db clo
0eb0: 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  se.  file delete
0ec0: 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a   -force test.db.
0ed0: 20 20 73 71 6c 69 74 65 20 64 62 20 74 65 73 74    sqlite db test
0ee0: 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  .db.  catchsql {
0ef0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0f00: 45 20 54 65 73 74 20 28 54 65 73 74 49 44 20 69  E Test (TestID i
0f10: 6e 74 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b  nt primary key);
0f20: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0f30: 20 54 65 73 74 20 56 41 4c 55 45 53 20 28 4e 55   Test VALUES (NU
0f40: 4c 4c 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  LL);.    CREATE 
0f50: 56 49 45 57 20 76 69 65 77 54 65 73 74 20 41 53  VIEW viewTest AS
0f60: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 54   SELECT * FROM T
0f70: 65 73 74 3b 0a 0a 20 20 20 20 42 45 47 49 4e 3b  est;..    BEGIN;
0f80: 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50  .    CREATE TEMP
0f90: 20 54 41 42 4c 45 20 74 65 6d 70 54 65 73 74 20   TABLE tempTest 
0fa0: 28 54 65 73 74 49 44 20 69 6e 74 20 70 72 69 6d  (TestID int prim
0fb0: 61 72 79 20 6b 65 79 2c 20 54 65 73 74 32 20 69  ary key, Test2 i
0fc0: 6e 74 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e  nt NULL);.    IN
0fd0: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 54 65  SERT INTO tempTe
0fe0: 73 74 20 53 45 4c 45 43 54 20 54 65 73 74 49 44  st SELECT TestID
0ff0: 2c 20 31 20 46 52 4f 4d 20 54 65 73 74 3b 0a 20  , 1 FROM Test;. 
1000: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 54 65     DROP TABLE Te
1010: 73 74 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  st;.    CREATE T
1020: 41 42 4c 45 20 54 65 73 74 28 54 65 73 74 49 44  ABLE Test(TestID
1030: 20 69 6e 74 20 70 72 69 6d 61 72 79 20 6b 65 79   int primary key
1040: 2c 20 54 65 73 74 32 20 69 6e 74 20 4e 55 4c 4c  , Test2 int NULL
1050: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1060: 54 4f 20 54 65 73 74 20 53 45 4c 45 43 54 20 2a  TO Test SELECT *
1070: 20 46 52 4f 4d 20 74 65 6d 70 54 65 73 74 3b 0a   FROM tempTest;.
1080: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
1090: 56 41 43 55 55 4d 3b 0a 20 20 7d 0a 7d 20 7b 30  VACUUM;.  }.} {0
10a0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 61 63   {}}.do_test vac
10b0: 75 75 6d 2d 35 2e 32 20 7b 0a 20 20 63 61 74 63  uum-5.2 {.  catc
10c0: 68 73 71 6c 20 7b 0a 20 20 20 20 56 41 43 55 55  hsql {.    VACUU
10d0: 4d 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  M;.  }.} {0 {}}.
10e0: 0a 23 20 66 69 6e 69 73 68 5f 74 65 73 74 0a     .# finish_test.