/ Hex Artifact Content
Login

Artifact d233412f76026a3ea2244aef36e5eb1bac15f8ad:


0000: 23 20 32 30 31 36 2d 30 38 2d 31 39 0a 23 0a 23  # 2016-08-19.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 0a 23 20 54 68 69 73 20 66 69 6c  **.# .# This fil
0170: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 74  e implements a t
0180: 65 73 74 20 66 6f 72 20 56 41 43 55 55 4d 20 6f  est for VACUUM o
0190: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
01a0: 61 73 65 73 2e 0a 23 0a 0a 73 65 74 20 74 65 73  ases..#..set tes
01b0: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
01c0: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
01d0: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
01e0: 72 2e 74 63 6c 0a 0a 23 20 49 66 20 74 68 65 20  r.tcl..# If the 
01f0: 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e 74  VACUUM statement
0200: 20 69 73 20 64 69 73 61 62 6c 65 64 20 69 6e 20   is disabled in 
0210: 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c  the current buil
0220: 64 2c 20 73 6b 69 70 20 61 6c 6c 0a 23 20 74 68  d, skip all.# th
0230: 65 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20  e tests in this 
0240: 66 69 6c 65 2e 0a 23 0a 69 66 63 61 70 61 62 6c  file..#.ifcapabl
0250: 65 20 21 76 61 63 75 75 6d 20 7b 0a 20 20 66 69  e !vacuum {.  fi
0260: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
0270: 72 6e 0a 7d 0a 0a 66 6f 72 63 65 64 65 6c 65 74  rn.}..forcedelet
0280: 65 20 74 65 73 74 32 2e 64 62 20 74 65 73 74 33  e test2.db test3
0290: 2e 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .db.do_execsql_t
02a0: 65 73 74 20 76 61 63 75 75 6d 35 2d 31 2e 31 20  est vacuum5-1.1 
02b0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
02c0: 20 6d 61 69 6e 2e 74 31 28 61 2c 62 29 3b 0a 20   main.t1(a,b);. 
02d0: 20 57 49 54 48 20 52 45 43 55 52 53 49 56 45 20   WITH RECURSIVE 
02e0: 63 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28  c(x) AS (VALUES(
02f0: 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c  1) UNION ALL SEL
0300: 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 20 57  ECT x+1 FROM c W
0310: 48 45 52 45 20 78 3c 31 30 30 30 29 0a 20 20 20  HERE x<1000).   
0320: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
0330: 61 2c 62 29 20 53 45 4c 45 43 54 20 78 2c 20 72  a,b) SELECT x, r
0340: 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 30 30 29 20  andomblob(1000) 
0350: 46 52 4f 4d 20 63 3b 0a 20 20 43 52 45 41 54 45  FROM c;.  CREATE
0360: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 74 65 6d   TEMP TABLE ttem
0370: 70 28 78 2c 79 29 3b 0a 20 20 49 4e 53 45 52 54  p(x,y);.  INSERT
0380: 20 49 4e 54 4f 20 74 74 65 6d 70 20 53 45 4c 45   INTO ttemp SELE
0390: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
03a0: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
03b0: 27 20 41 53 20 78 32 3b 0a 20 20 41 54 54 41 43  ' AS x2;.  ATTAC
03c0: 48 20 27 74 65 73 74 33 2e 64 62 27 20 41 53 20  H 'test3.db' AS 
03d0: 78 33 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  x3;.  CREATE TAB
03e0: 4c 45 20 78 32 2e 74 32 28 63 2c 64 29 3b 0a 20  LE x2.t2(c,d);. 
03f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0400: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0410: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
0420: 20 78 33 2e 74 33 28 65 2c 66 29 3b 0a 20 20 49   x3.t3(e,f);.  I
0430: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45  NSERT INTO t3 SE
0440: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
0450: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
0460: 20 57 48 45 52 45 20 28 72 6f 77 69 64 25 33 29   WHERE (rowid%3)
0470: 21 3d 30 3b 0a 20 20 44 45 4c 45 54 45 20 46 52  !=0;.  DELETE FR
0480: 4f 4d 20 74 32 20 57 48 45 52 45 20 28 72 6f 77  OM t2 WHERE (row
0490: 69 64 25 34 29 21 3d 30 3b 0a 20 20 44 45 4c 45  id%4)!=0;.  DELE
04a0: 54 45 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45  TE FROM t3 WHERE
04b0: 20 28 72 6f 77 69 64 25 35 29 21 3d 30 3b 0a 20   (rowid%5)!=0;. 
04c0: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74   PRAGMA main.int
04d0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20  egrity_check;.  
04e0: 50 52 41 47 4d 41 20 78 32 2e 69 6e 74 65 67 72  PRAGMA x2.integr
04f0: 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 50 52 41  ity_check;.  PRA
0500: 47 4d 41 20 78 33 2e 69 6e 74 65 67 72 69 74 79  GMA x3.integrity
0510: 5f 63 68 65 63 6b 3b 0a 7d 20 7b 6f 6b 20 6f 6b  _check;.} {ok ok
0520: 20 6f 6b 7d 0a 73 65 74 20 73 69 7a 65 31 20 5b   ok}.set size1 [
0530: 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64  file size test.d
0540: 62 5d 0a 73 65 74 20 73 69 7a 65 32 20 5b 66 69  b].set size2 [fi
0550: 6c 65 20 73 69 7a 65 20 74 65 73 74 32 2e 64 62  le size test2.db
0560: 5d 0a 73 65 74 20 73 69 7a 65 33 20 5b 66 69 6c  ].set size3 [fil
0570: 65 20 73 69 7a 65 20 74 65 73 74 33 2e 64 62 5d  e size test3.db]
0580: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0590: 74 20 76 61 63 75 75 6d 35 2d 31 2e 32 2e 31 20  t vacuum5-1.2.1 
05a0: 7b 0a 20 20 56 41 43 55 55 4d 20 6d 61 69 6e 3b  {.  VACUUM main;
05b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 76 61  .} {}.do_test va
05c0: 63 75 75 6d 35 2d 31 2e 32 2e 32 20 7b 0a 20 20  cuum5-1.2.2 {.  
05d0: 65 78 70 72 20 7b 5b 66 69 6c 65 20 73 69 7a 65  expr {[file size
05e0: 20 74 65 73 74 2e 64 62 5d 3c 24 73 69 7a 65 31   test.db]<$size1
05f0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
0600: 76 61 63 75 75 6d 35 2d 31 2e 32 2e 33 20 7b 0a  vacuum5-1.2.3 {.
0610: 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74    file size test
0620: 32 2e 64 62 0a 7d 20 24 73 69 7a 65 32 0a 64 6f  2.db.} $size2.do
0630: 5f 74 65 73 74 20 76 61 63 75 75 6d 35 2d 31 2e  _test vacuum5-1.
0640: 32 2e 34 20 7b 0a 20 20 66 69 6c 65 20 73 69 7a  2.4 {.  file siz
0650: 65 20 74 65 73 74 33 2e 64 62 0a 7d 20 24 73 69  e test3.db.} $si
0660: 7a 65 33 0a 73 65 74 20 73 69 7a 65 31 20 5b 66  ze3.set size1 [f
0670: 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62  ile size test.db
0680: 5d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ].do_execsql_tes
0690: 74 20 76 61 63 75 75 6d 2d 31 2e 32 2e 35 20 7b  t vacuum-1.2.5 {
06a0: 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  .  DELETE FROM t
06b0: 31 3b 0a 20 20 50 52 41 47 4d 41 20 6d 61 69 6e  1;.  PRAGMA main
06c0: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
06d0: 3b 0a 7d 20 7b 6f 6b 7d 0a 0a 64 6f 5f 65 78 65  ;.} {ok}..do_exe
06e0: 63 73 71 6c 5f 74 65 73 74 20 76 61 63 75 75 6d  csql_test vacuum
06f0: 35 2d 31 2e 33 2e 31 20 7b 0a 20 20 56 41 43 55  5-1.3.1 {.  VACU
0700: 55 4d 20 78 32 3b 0a 7d 20 7b 7d 0a 64 6f 5f 74  UM x2;.} {}.do_t
0710: 65 73 74 20 76 61 63 75 75 6d 35 2d 31 2e 33 2e  est vacuum5-1.3.
0720: 32 20 7b 0a 20 20 66 69 6c 65 20 73 69 7a 65 20  2 {.  file size 
0730: 74 65 73 74 2e 64 62 0a 7d 20 24 73 69 7a 65 31  test.db.} $size1
0740: 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 35  .do_test vacuum5
0750: 2d 31 2e 33 2e 33 20 7b 0a 20 20 65 78 70 72 20  -1.3.3 {.  expr 
0760: 7b 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74  {[file size test
0770: 32 2e 64 62 5d 3c 24 73 69 7a 65 32 7d 0a 7d 20  2.db]<$size2}.} 
0780: 31 0a 64 6f 5f 74 65 73 74 20 76 61 63 75 75 6d  1.do_test vacuum
0790: 35 2d 31 2e 33 2e 34 20 7b 0a 20 20 66 69 6c 65  5-1.3.4 {.  file
07a0: 20 73 69 7a 65 20 74 65 73 74 33 2e 64 62 0a 7d   size test3.db.}
07b0: 20 24 73 69 7a 65 33 0a 73 65 74 20 73 69 7a 65   $size3.set size
07c0: 32 20 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73  2 [file size tes
07d0: 74 32 2e 64 62 5d 0a 64 6f 5f 65 78 65 63 73 71  t2.db].do_execsq
07e0: 6c 5f 74 65 73 74 20 76 61 63 75 75 6d 2d 31 2e  l_test vacuum-1.
07f0: 33 2e 35 20 7b 0a 20 20 44 45 4c 45 54 45 20 46  3.5 {.  DELETE F
0800: 52 4f 4d 20 74 32 3b 0a 20 20 50 52 41 47 4d 41  ROM t2;.  PRAGMA
0810: 20 78 32 2e 69 6e 74 65 67 72 69 74 79 5f 63 68   x2.integrity_ch
0820: 65 63 6b 3b 0a 7d 20 7b 6f 6b 7d 0a 0a 64 6f 5f  eck;.} {ok}..do_
0830: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 76 61 63  execsql_test vac
0840: 75 75 6d 35 2d 31 2e 34 2e 31 20 7b 0a 20 20 56  uum5-1.4.1 {.  V
0850: 41 43 55 55 4d 20 78 33 3b 0a 7d 20 7b 7d 0a 64  ACUUM x3;.} {}.d
0860: 6f 5f 74 65 73 74 20 76 61 63 75 75 6d 35 2d 31  o_test vacuum5-1
0870: 2e 33 2e 32 20 7b 0a 20 20 66 69 6c 65 20 73 69  .3.2 {.  file si
0880: 7a 65 20 74 65 73 74 2e 64 62 0a 7d 20 24 73 69  ze test.db.} $si
0890: 7a 65 31 0a 64 6f 5f 74 65 73 74 20 76 61 63 75  ze1.do_test vacu
08a0: 75 6d 35 2d 31 2e 33 2e 33 20 7b 0a 20 20 66 69  um5-1.3.3 {.  fi
08b0: 6c 65 20 73 69 7a 65 20 74 65 73 74 32 2e 64 62  le size test2.db
08c0: 0a 7d 20 24 73 69 7a 65 32 0a 64 6f 5f 74 65 73  .} $size2.do_tes
08d0: 74 20 76 61 63 75 75 6d 35 2d 31 2e 33 2e 34 20  t vacuum5-1.3.4 
08e0: 7b 0a 20 20 65 78 70 72 20 7b 5b 66 69 6c 65 20  {.  expr {[file 
08f0: 73 69 7a 65 20 74 65 73 74 33 2e 64 62 5d 3c 24  size test3.db]<$
0900: 73 69 7a 65 33 7d 0a 7d 20 31 0a 0a 23 20 56 41  size3}.} 1..# VA
0910: 43 55 55 4d 20 69 73 20 61 20 6e 6f 2d 6f 70 20  CUUM is a no-op 
0920: 6f 6e 20 74 68 65 20 54 45 4d 50 20 74 61 62 6c  on the TEMP tabl
0930: 65 0a 23 0a 73 65 74 20 73 69 7a 65 54 65 6d 70  e.#.set sizeTemp
0940: 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41   [db one {PRAGMA
0950: 20 74 65 6d 70 2e 70 61 67 65 5f 63 6f 75 6e 74   temp.page_count
0960: 7d 5d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }].do_execsql_te
0970: 73 74 20 76 61 63 75 75 6d 35 2d 31 2e 34 2e 31  st vacuum5-1.4.1
0980: 20 7b 0a 20 20 56 41 43 55 55 4d 20 74 65 6d 70   {.  VACUUM temp
0990: 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71  ;.} {}.do_execsq
09a0: 6c 5f 74 65 73 74 20 76 61 63 75 75 6d 35 2d 31  l_test vacuum5-1
09b0: 2e 34 2e 32 20 7b 0a 20 20 50 52 41 47 4d 41 20  .4.2 {.  PRAGMA 
09c0: 74 65 6d 70 2e 70 61 67 65 5f 63 6f 75 6e 74 3b  temp.page_count;
09d0: 0a 7d 20 24 73 69 7a 65 54 65 6d 70 0a 0a 64 6f  .} $sizeTemp..do
09e0: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 76  _catchsql_test v
09f0: 61 63 75 75 6d 35 2d 32 2e 30 20 7b 0a 20 20 56  acuum5-2.0 {.  V
0a00: 41 43 55 55 4d 20 6f 6c 61 66 3b 0a 7d 20 7b 31  ACUUM olaf;.} {1
0a10: 20 7b 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62 61   {unknown databa
0a20: 73 65 20 6f 6c 61 66 7d 7d 0a 0a 66 69 6e 69 73  se olaf}}..finis
0a30: 68 5f 74 65 73 74 0a                             h_test.