/ Hex Artifact Content
Login

Artifact 5f5d843ff856b7dcfdf3f36b7e1acb04895047ce:


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 53  is testing the S
01d0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
01e0: 0a 23 0a 23 20 24 49 64 3a 20 61 75 74 6f 76 61  .#.# $Id: autova
01f0: 63 75 75 6d 2e 74 65 73 74 2c 76 20 31 2e 32 34  cuum.test,v 1.24
0200: 20 32 30 30 36 2f 30 38 2f 31 32 20 31 32 3a 33   2006/08/12 12:3
0210: 33 3a 31 35 20 64 72 68 20 45 78 70 20 24 0a 0a  3:15 drh Exp $..
0220: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0230: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0240: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0250: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20  r/tester.tcl..# 
0260: 49 66 20 74 68 69 73 20 62 75 69 6c 64 20 6f 66  If this build of
0270: 20 74 68 65 20 6c 69 62 72 61 72 79 20 64 6f 65   the library doe
0280: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 61 75  s not support au
0290: 74 6f 2d 76 61 63 75 75 6d 2c 20 6f 6d 69 74 20  to-vacuum, omit 
02a0: 74 68 69 73 0a 23 20 77 68 6f 6c 65 20 66 69 6c  this.# whole fil
02b0: 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 61  e..ifcapable {!a
02c0: 75 74 6f 76 61 63 75 75 6d 20 7c 7c 20 21 70 72  utovacuum || !pr
02d0: 61 67 6d 61 7d 20 7b 0a 20 20 66 69 6e 69 73 68  agma} {.  finish
02e0: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
02f0: 0a 0a 23 20 52 65 74 75 72 6e 20 61 20 73 74 72  ..# Return a str
0300: 69 6e 67 20 24 6c 65 6e 20 63 68 61 72 61 63 74  ing $len charact
0310: 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 72 65  ers long. The re
0320: 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20 69 73  turned string is
0330: 20 24 63 68 61 72 20 72 65 70 65 61 74 65 64 0a   $char repeated.
0340: 23 20 6f 76 65 72 20 61 6e 64 20 6f 76 65 72 2e  # over and over.
0350: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 5b 6d   For example, [m
0360: 61 6b 65 5f 73 74 72 20 61 62 63 20 38 5d 20 72  ake_str abc 8] r
0370: 65 74 75 72 6e 73 20 22 61 62 63 61 62 63 61 62  eturns "abcabcab
0380: 22 2e 0a 70 72 6f 63 20 6d 61 6b 65 5f 73 74 72  "..proc make_str
0390: 20 7b 63 68 61 72 20 6c 65 6e 7d 20 7b 0a 20 20   {char len} {.  
03a0: 73 65 74 20 73 74 72 20 5b 73 74 72 69 6e 67 20  set str [string 
03b0: 72 65 70 65 61 74 20 24 63 68 61 72 2e 20 24 6c  repeat $char. $l
03c0: 65 6e 5d 0a 20 20 72 65 74 75 72 6e 20 5b 73 74  en].  return [st
03d0: 72 69 6e 67 20 72 61 6e 67 65 20 24 73 74 72 20  ring range $str 
03e0: 30 20 5b 65 78 70 72 20 24 6c 65 6e 2d 31 5d 5d  0 [expr $len-1]]
03f0: 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65  .}..# Return the
0400: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
0410: 20 69 6e 20 74 68 65 20 66 69 6c 65 20 74 65 73   in the file tes
0420: 74 2e 64 62 20 62 79 20 6c 6f 6f 6b 69 6e 67 20  t.db by looking 
0430: 61 74 20 74 68 65 20 66 69 6c 65 20 73 79 73 74  at the file syst
0440: 65 6d 2e 0a 70 72 6f 63 20 66 69 6c 65 5f 70 61  em..proc file_pa
0450: 67 65 73 20 7b 7d 20 7b 0a 20 20 72 65 74 75 72  ges {} {.  retur
0460: 6e 20 5b 65 78 70 72 20 5b 66 69 6c 65 20 73 69  n [expr [file si
0470: 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 31 30  ze test.db] / 10
0480: 32 34 5d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  24].}..#--------
0490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04d0: 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 61  -.# Test cases a
04e0: 75 74 6f 76 61 63 75 75 6d 2d 31 2e 2a 20 77 6f  utovacuum-1.* wo
04f0: 72 6b 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23  rk as follows:.#
0500: 0a 23 20 31 2e 20 41 20 74 61 62 6c 65 20 77 69  .# 1. A table wi
0510: 74 68 20 61 20 73 69 6e 67 6c 65 20 69 6e 64 65  th a single inde
0520: 78 65 64 20 66 69 65 6c 64 20 69 73 20 63 72 65  xed field is cre
0530: 61 74 65 64 2e 0a 23 20 32 2e 20 41 70 70 72 6f  ated..# 2. Appro
0540: 78 69 6d 61 74 65 6c 79 20 32 30 20 72 6f 77 73  ximately 20 rows
0550: 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e   are inserted in
0560: 74 6f 20 74 68 65 20 74 61 62 6c 65 2e 20 45 61  to the table. Ea
0570: 63 68 20 72 6f 77 20 69 73 20 6c 6f 6e 67 20 0a  ch row is long .
0580: 23 20 20 20 20 65 6e 6f 75 67 68 20 73 75 63 68  #    enough such
0590: 20 74 68 61 74 20 69 74 20 75 73 65 73 20 61 74   that it uses at
05a0: 20 6c 65 61 73 74 20 32 20 6f 76 65 72 66 6c 6f   least 2 overflo
05b0: 77 20 70 61 67 65 73 20 66 6f 72 20 62 6f 74 68  w pages for both
05c0: 20 74 68 65 20 74 61 62 6c 65 20 0a 23 20 20 20   the table .#   
05d0: 20 61 6e 64 20 69 6e 64 65 78 20 65 6e 74 72 79   and index entry
05e0: 2e 0a 23 20 33 2e 20 54 68 65 20 72 6f 77 73 20  ..# 3. The rows 
05f0: 61 72 65 20 64 65 6c 65 74 65 64 20 69 6e 20 61  are deleted in a
0600: 20 70 73 75 65 64 6f 2d 72 61 6e 64 6f 6d 20 6f   psuedo-random o
0610: 72 64 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 20  rder. Sometimes 
0620: 6f 6e 6c 79 20 6f 6e 65 20 72 6f 77 0a 23 20 20  only one row.#  
0630: 20 20 69 73 20 64 65 6c 65 74 65 64 20 70 65 72    is deleted per
0640: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f   transaction, so
0650: 6d 65 74 69 6d 65 73 20 6d 6f 72 65 20 74 68 61  metimes more tha
0660: 6e 20 6f 6e 65 2e 0a 23 20 34 2e 20 41 66 74 65  n one..# 4. Afte
0670: 72 20 65 61 63 68 20 74 72 61 6e 73 61 63 74 69  r each transacti
0680: 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 64 61 74  on the table dat
0690: 61 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20  a is checked to 
06a0: 65 6e 73 75 72 65 20 69 74 20 69 73 20 63 6f 72  ensure it is cor
06b0: 72 65 63 74 0a 23 20 20 20 20 61 6e 64 20 61 20  rect.#    and a 
06c0: 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  "PRAGMA integrit
06d0: 79 5f 63 68 65 63 6b 22 20 69 73 20 65 78 65 63  y_check" is exec
06e0: 75 74 65 64 2e 0a 23 20 35 2e 20 4f 6e 63 65 20  uted..# 5. Once 
06f0: 61 6c 6c 20 74 68 65 20 72 6f 77 73 20 61 72 65  all the rows are
0700: 20 64 65 6c 65 74 65 64 20 74 68 65 20 66 69 6c   deleted the fil
0710: 65 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20  e is checked to 
0720: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 0a 23 20  make sure it .# 
0730: 20 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65     consists of e
0740: 78 61 63 74 6c 79 20 34 20 70 61 67 65 73 2e 0a  xactly 4 pages..
0750: 23 0a 23 20 53 74 65 70 73 20 32 2d 35 20 61 72  #.# Steps 2-5 ar
0760: 65 20 72 65 70 65 61 74 65 64 20 66 6f 72 20 61  e repeated for a
0770: 20 66 65 77 20 64 69 66 66 65 72 65 6e 74 20 70   few different p
0780: 73 75 65 64 6f 2d 72 61 6e 64 6f 6d 20 64 65 6c  suedo-random del
0790: 65 74 65 20 70 61 74 74 65 72 6e 73 20 0a 23 20  ete patterns .# 
07a0: 28 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20  (defined by the 
07b0: 24 64 65 6c 65 74 65 5f 6f 72 64 65 72 73 20 6c  $delete_orders l
07c0: 69 73 74 29 2e 0a 73 65 74 20 64 65 6c 65 74 65  ist)..set delete
07d0: 5f 6f 72 64 65 72 73 20 5b 6c 69 73 74 5d 0a 6c  _orders [list].l
07e0: 61 70 70 65 6e 64 20 64 65 6c 65 74 65 5f 6f 72  append delete_or
07f0: 64 65 72 73 20 7b 31 20 32 20 33 20 34 20 35 20  ders {1 2 3 4 5 
0800: 36 20 37 20 38 20 39 20 31 30 20 31 31 20 31 32  6 7 8 9 10 11 12
0810: 20 31 33 20 31 34 20 31 35 20 31 36 20 31 37 20   13 14 15 16 17 
0820: 31 38 20 31 39 20 32 30 7d 0a 6c 61 70 70 65 6e  18 19 20}.lappen
0830: 64 20 64 65 6c 65 74 65 5f 6f 72 64 65 72 73 20  d delete_orders 
0840: 7b 32 30 20 31 39 20 31 38 20 31 37 20 31 36 20  {20 19 18 17 16 
0850: 31 35 20 31 34 20 31 33 20 31 32 20 31 31 20 31  15 14 13 12 11 1
0860: 30 20 39 20 38 20 37 20 36 20 35 20 34 20 33 20  0 9 8 7 6 5 4 3 
0870: 32 20 31 7d 20 0a 6c 61 70 70 65 6e 64 20 64 65  2 1} .lappend de
0880: 6c 65 74 65 5f 6f 72 64 65 72 73 20 7b 38 20 31  lete_orders {8 1
0890: 38 20 32 20 34 20 31 34 20 31 31 20 31 33 20 33  8 2 4 14 11 13 3
08a0: 20 31 30 20 37 20 39 20 35 20 31 32 20 31 37 20   10 7 9 5 12 17 
08b0: 31 39 20 31 35 20 32 30 20 36 20 31 36 20 31 7d  19 15 20 6 16 1}
08c0: 0a 6c 61 70 70 65 6e 64 20 64 65 6c 65 74 65 5f  .lappend delete_
08d0: 6f 72 64 65 72 73 20 7b 31 30 20 33 20 31 31 20  orders {10 3 11 
08e0: 31 37 20 31 39 20 32 30 20 37 20 34 20 31 33 20  17 19 20 7 4 13 
08f0: 36 20 31 20 31 34 20 31 36 20 31 32 20 39 20 31  6 1 14 16 12 9 1
0900: 38 20 38 20 31 35 20 35 20 32 7d 0a 6c 61 70 70  8 8 15 5 2}.lapp
0910: 65 6e 64 20 64 65 6c 65 74 65 5f 6f 72 64 65 72  end delete_order
0920: 73 20 7b 7b 31 20 32 20 33 20 34 20 35 20 36 20  s {{1 2 3 4 5 6 
0930: 37 20 38 20 39 20 31 30 7d 20 7b 31 31 20 31 32  7 8 9 10} {11 12
0940: 20 31 33 20 31 34 20 31 35 20 31 36 20 31 37 20   13 14 15 16 17 
0950: 31 38 20 31 39 20 32 30 7d 7d 0a 6c 61 70 70 65  18 19 20}}.lappe
0960: 6e 64 20 64 65 6c 65 74 65 5f 6f 72 64 65 72 73  nd delete_orders
0970: 20 7b 7b 31 39 20 38 20 31 37 20 31 35 7d 20 7b   {{19 8 17 15} {
0980: 31 36 20 31 31 20 39 20 31 34 7d 20 7b 31 38 20  16 11 9 14} {18 
0990: 35 20 33 20 31 7d 20 7b 31 33 20 32 30 20 37 20  5 3 1} {13 20 7 
09a0: 32 7d 20 7b 36 20 31 32 7d 7d 0a 0a 23 20 54 68  2} {6 12}}..# Th
09b0: 65 20 6c 65 6e 67 74 68 20 6f 66 20 65 61 63 68  e length of each
09c0: 20 74 61 62 6c 65 20 65 6e 74 72 79 2e 20 0a 23   table entry. .#
09d0: 20 73 65 74 20 45 4e 54 52 59 5f 4c 45 4e 20 33   set ENTRY_LEN 3
09e0: 35 30 30 0a 73 65 74 20 45 4e 54 52 59 5f 4c 45  500.set ENTRY_LE
09f0: 4e 20 33 35 30 30 0a 0a 64 6f 5f 74 65 73 74 20  N 3500..do_test 
0a00: 61 75 74 6f 76 61 63 75 75 6d 2d 31 2e 31 20 7b  autovacuum-1.1 {
0a10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0a20: 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63   PRAGMA auto_vac
0a30: 75 75 6d 20 3d 20 31 3b 0a 20 20 20 20 43 52 45  uum = 1;.    CRE
0a40: 41 54 45 20 54 41 42 4c 45 20 61 76 31 28 61 29  ATE TABLE av1(a)
0a50: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
0a60: 45 58 20 61 76 31 5f 69 64 78 20 4f 4e 20 61 76  EX av1_idx ON av
0a70: 31 28 61 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  1(a);.  }.} {}..
0a80: 73 65 74 20 74 6e 20 30 0a 66 6f 72 65 61 63 68  set tn 0.foreach
0a90: 20 64 65 6c 65 74 65 5f 6f 72 64 65 72 20 24 64   delete_order $d
0aa0: 65 6c 65 74 65 5f 6f 72 64 65 72 73 20 7b 0a 20  elete_orders {. 
0ab0: 20 69 6e 63 72 20 74 6e 0a 0a 20 20 23 20 53 65   incr tn..  # Se
0ac0: 74 20 75 70 20 74 68 65 20 74 61 62 6c 65 2e 0a  t up the table..
0ad0: 20 20 73 65 74 20 3a 3a 74 62 6c 5f 64 61 74 61    set ::tbl_data
0ae0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
0af0: 68 20 69 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65  h i [lsort -inte
0b00: 67 65 72 20 5b 65 76 61 6c 20 63 6f 6e 63 61 74  ger [eval concat
0b10: 20 24 64 65 6c 65 74 65 5f 6f 72 64 65 72 5d 5d   $delete_order]]
0b20: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
0b30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 76 31 20  INSERT INTO av1 
0b40: 28 6f 69 64 2c 20 61 29 20 56 41 4c 55 45 53 28  (oid, a) VALUES(
0b50: 24 69 2c 20 27 5b 6d 61 6b 65 5f 73 74 72 20 24  $i, '[make_str $
0b60: 69 20 24 45 4e 54 52 59 5f 4c 45 4e 5d 27 29 22  i $ENTRY_LEN]')"
0b70: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74  .    lappend ::t
0b80: 62 6c 5f 64 61 74 61 20 5b 6d 61 6b 65 5f 73 74  bl_data [make_st
0b90: 72 20 24 69 20 24 45 4e 54 52 59 5f 4c 45 4e 5d  r $i $ENTRY_LEN]
0ba0: 0a 20 20 7d 0a 0a 20 20 23 20 4d 61 6b 65 20 73  .  }..  # Make s
0bb0: 75 72 65 20 74 68 65 20 69 6e 74 65 67 72 69 74  ure the integrit
0bc0: 79 20 63 68 65 63 6b 20 70 61 73 73 65 73 20 77  y check passes w
0bd0: 69 74 68 20 74 68 65 20 69 6e 69 74 69 61 6c 20  ith the initial 
0be0: 64 61 74 61 2e 0a 20 20 69 66 63 61 70 61 62 6c  data..  ifcapabl
0bf0: 65 20 7b 69 6e 74 65 67 72 69 74 79 63 6b 7d 20  e {integrityck} 
0c00: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75  {.    do_test au
0c10: 74 6f 76 61 63 75 75 6d 2d 31 2e 24 74 6e 2e 31  tovacuum-1.$tn.1
0c20: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
0c30: 20 7b 0a 20 20 20 20 20 20 20 20 70 72 61 67 6d   {.        pragm
0c40: 61 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  a integrity_chec
0c50: 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  k.      }.    } 
0c60: 7b 6f 6b 7d 0a 20 20 7d 0a 0a 20 20 66 6f 72 65  {ok}.  }..  fore
0c70: 61 63 68 20 64 65 6c 65 74 65 20 24 64 65 6c 65  ach delete $dele
0c80: 74 65 5f 6f 72 64 65 72 20 7b 0a 20 20 20 20 23  te_order {.    #
0c90: 20 44 65 6c 65 74 65 20 6f 6e 65 20 73 65 74 20   Delete one set 
0ca0: 6f 66 20 72 6f 77 73 20 66 72 6f 6d 20 74 68 65  of rows from the
0cb0: 20 74 61 62 6c 65 2e 0a 20 20 20 20 64 6f 5f 74   table..    do_t
0cc0: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 31  est autovacuum-1
0cd0: 2e 24 74 6e 2e 28 24 64 65 6c 65 74 65 29 2e 31  .$tn.($delete).1
0ce0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
0cf0: 20 22 0a 20 20 20 20 20 20 20 20 44 45 4c 45 54   ".        DELET
0d00: 45 20 46 52 4f 4d 20 61 76 31 20 57 48 45 52 45  E FROM av1 WHERE
0d10: 20 6f 69 64 20 3d 20 5b 6a 6f 69 6e 20 24 64 65   oid = [join $de
0d20: 6c 65 74 65 20 22 20 4f 52 20 6f 69 64 20 3d 20  lete " OR oid = 
0d30: 22 5d 0a 20 20 20 20 20 20 22 0a 20 20 20 20 7d  "].      ".    }
0d40: 20 7b 7d 0a 0a 20 20 20 20 23 20 44 6f 20 74 68   {}..    # Do th
0d50: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
0d60: 6b 2e 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  k..    ifcapable
0d70: 20 7b 69 6e 74 65 67 72 69 74 79 63 6b 7d 20 7b   {integrityck} {
0d80: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61  .      do_test a
0d90: 75 74 6f 76 61 63 75 75 6d 2d 31 2e 24 74 6e 2e  utovacuum-1.$tn.
0da0: 28 24 64 65 6c 65 74 65 29 2e 32 20 7b 0a 20 20  ($delete).2 {.  
0db0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
0dc0: 20 20 20 20 20 20 20 20 20 20 70 72 61 67 6d 61            pragma
0dd0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
0de0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
0df0: 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 7d 0a 20 20   } {ok}.    }.  
0e00: 20 20 23 20 45 6e 73 75 72 65 20 74 68 65 20 64    # Ensure the d
0e10: 61 74 61 20 72 65 6d 61 69 6e 69 6e 67 20 69 6e  ata remaining in
0e20: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 77 68   the table is wh
0e30: 61 74 20 77 61 73 20 65 78 70 65 63 74 65 64 2e  at was expected.
0e40: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 64 20 24  .    foreach d $
0e50: 64 65 6c 65 74 65 20 7b 0a 20 20 20 20 20 20 73  delete {.      s
0e60: 65 74 20 69 64 78 20 5b 6c 73 65 61 72 63 68 20  et idx [lsearch 
0e70: 24 3a 3a 74 62 6c 5f 64 61 74 61 20 5b 6d 61 6b  $::tbl_data [mak
0e80: 65 5f 73 74 72 20 24 64 20 24 45 4e 54 52 59 5f  e_str $d $ENTRY_
0e90: 4c 45 4e 5d 5d 0a 20 20 20 20 20 20 73 65 74 20  LEN]].      set 
0ea0: 3a 3a 74 62 6c 5f 64 61 74 61 20 5b 6c 72 65 70  ::tbl_data [lrep
0eb0: 6c 61 63 65 20 24 3a 3a 74 62 6c 5f 64 61 74 61  lace $::tbl_data
0ec0: 20 24 69 64 78 20 24 69 64 78 5d 0a 20 20 20 20   $idx $idx].    
0ed0: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75  }.    do_test au
0ee0: 74 6f 76 61 63 75 75 6d 2d 31 2e 24 74 6e 2e 28  tovacuum-1.$tn.(
0ef0: 24 64 65 6c 65 74 65 29 2e 33 20 7b 0a 20 20 20  $delete).3 {.   
0f00: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
0f10: 20 20 20 20 20 73 65 6c 65 63 74 20 61 20 66 72       select a fr
0f20: 6f 6d 20 61 76 31 0a 20 20 20 20 20 20 7d 0a 20  om av1.      }. 
0f30: 20 20 20 7d 20 24 3a 3a 74 62 6c 5f 64 61 74 61     } $::tbl_data
0f40: 0a 20 20 7d 0a 0a 20 20 23 20 41 6c 6c 20 72 6f  .  }..  # All ro
0f50: 77 73 20 68 61 76 65 20 62 65 65 6e 20 64 65 6c  ws have been del
0f60: 65 74 65 64 2e 20 45 6e 73 75 72 65 20 74 68 65  eted. Ensure the
0f70: 20 66 69 6c 65 20 68 61 73 20 73 68 72 75 6e 6b   file has shrunk
0f80: 20 74 6f 20 34 20 70 61 67 65 73 2e 0a 20 20 64   to 4 pages..  d
0f90: 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75  o_test autovacuu
0fa0: 6d 2d 31 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20  m-1.$tn.3 {.    
0fb0: 66 69 6c 65 5f 70 61 67 65 73 0a 20 20 7d 20 7b  file_pages.  } {
0fc0: 34 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  4}.}..#---------
0fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1010: 2d 2d 0a 23 20 54 65 73 74 73 20 63 61 73 65 73  --.# Tests cases
1020: 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 2a 20   autovacuum-2.* 
1030: 74 65 73 74 20 74 68 61 74 20 72 6f 6f 74 20 70  test that root p
1040: 61 67 65 73 20 61 72 65 20 61 6c 6c 6f 63 61 74  ages are allocat
1050: 65 64 20 0a 23 20 61 6e 64 20 64 65 61 6c 6c 6f  ed .# and deallo
1060: 63 61 74 65 64 20 63 6f 72 72 65 63 74 6c 79 20  cated correctly 
1070: 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  at the start of 
1080: 74 68 65 20 66 69 6c 65 2e 20 4f 70 65 72 61 74  the file. Operat
1090: 69 6f 6e 20 69 73 20 72 6f 75 67 68 6c 79 20 61  ion is roughly a
10a0: 73 0a 23 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23  s.# follows:.#.#
10b0: 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 31 2e   autovacuum-2.1.
10c0: 2a 3a 20 44 72 6f 70 20 74 68 65 20 74 61 62 6c  *: Drop the tabl
10d0: 65 73 20 74 68 61 74 20 63 75 72 72 65 6e 74 6c  es that currentl
10e0: 79 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 64  y exist in the d
10f0: 61 74 61 62 61 73 65 2e 0a 23 20 61 75 74 6f 76  atabase..# autov
1100: 61 63 75 75 6d 2d 32 2e 32 2e 2a 3a 20 43 72 65  acuum-2.2.*: Cre
1110: 61 74 65 20 73 6f 6d 65 20 74 61 62 6c 65 73 2e  ate some tables.
1120: 20 45 6e 73 75 72 65 20 74 68 61 74 20 64 61 74   Ensure that dat
1130: 61 20 70 61 67 65 73 20 63 61 6e 20 62 65 0a 23  a pages can be.#
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1150: 20 20 20 6d 6f 76 65 64 20 63 6f 72 72 65 63 74     moved correct
1160: 6c 79 20 74 6f 20 6d 61 6b 65 20 73 70 61 63 65  ly to make space
1170: 20 66 6f 72 20 6e 65 77 20 72 6f 6f 74 2d 70 61   for new root-pa
1180: 67 65 73 2e 0a 23 20 61 75 74 6f 76 61 63 75 75  ges..# autovacuu
1190: 6d 2d 32 2e 33 2e 2a 3a 20 44 72 6f 70 20 6f 6e  m-2.3.*: Drop on
11a0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 73 20  e of the tables 
11b0: 6a 75 73 74 20 63 72 65 61 74 65 64 20 28 6e 6f  just created (no
11c0: 74 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 29 2c  t the last one),
11d0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
11e0: 20 20 20 20 20 61 6e 64 20 63 68 65 63 6b 20 74       and check t
11f0: 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f  hat one of the o
1200: 74 68 65 72 20 74 61 62 6c 65 73 20 69 73 20 6d  ther tables is m
1210: 6f 76 65 64 20 74 6f 0a 23 20 20 20 20 20 20 20  oved to.#       
1220: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1230: 66 72 65 65 20 72 6f 6f 74 2d 70 61 67 65 20 6c  free root-page l
1240: 6f 63 61 74 69 6f 6e 2e 0a 23 20 61 75 74 6f 76  ocation..# autov
1250: 61 63 75 75 6d 2d 32 2e 34 2e 2a 3a 20 43 68 65  acuum-2.4.*: Che
1260: 63 6b 20 74 68 61 74 20 61 20 74 61 62 6c 65 20  ck that a table 
1270: 63 61 6e 20 62 65 20 63 72 65 61 74 65 64 20 63  can be created c
1280: 6f 72 72 65 63 74 6c 79 20 77 68 65 6e 20 74 68  orrectly when th
1290: 65 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  e.#             
12a0: 20 20 20 20 20 20 72 6f 6f 74 2d 70 61 67 65 20        root-page 
12b0: 69 74 20 72 65 71 75 69 72 65 73 20 69 73 20 6f  it requires is o
12c0: 6e 20 74 68 65 20 66 72 65 65 2d 6c 69 73 74 2e  n the free-list.
12d0: 0a 23 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e  .# autovacuum-2.
12e0: 35 2e 2a 3a 20 43 68 65 63 6b 20 74 68 61 74 20  5.*: Check that 
12f0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 69 6e 64  a table with ind
1300: 69 63 65 73 20 63 61 6e 20 62 65 20 64 72 6f 70  ices can be drop
1310: 70 65 64 2e 20 54 68 69 73 0a 23 20 20 20 20 20  ped. This.#     
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1330: 20 73 6c 69 67 68 74 6c 79 20 74 72 69 63 6b 79   slightly tricky
1340: 20 62 65 63 61 75 73 65 20 64 72 6f 70 70 69 6e   because droppin
1350: 67 20 6f 6e 65 20 6f 66 20 74 68 65 0a 23 20 20  g one of the.#  
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 20 69 6e 64 69 63 65 73 2f 74 61 62 6c 65 20 62   indices/table b
1380: 74 72 65 65 73 20 63 6f 75 6c 64 20 6d 6f 76 65  trees could move
1390: 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
13a0: 66 20 61 6e 6f 74 68 65 72 2e 0a 23 20 20 20 20  f another..#    
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
13c0: 68 65 20 63 6f 64 65 2d 67 65 6e 65 72 61 74 69  he code-generati
13d0: 6f 6e 20 6c 61 79 65 72 20 6f 66 20 53 51 4c 69  on layer of SQLi
13e0: 74 65 20 6f 76 65 72 63 6f 6d 65 73 20 74 68 69  te overcomes thi
13f0: 73 20 70 72 6f 62 6c 65 6d 0a 23 20 20 20 20 20  s problem.#     
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
1410: 20 64 72 6f 70 70 69 6e 67 20 74 68 65 20 62 74   dropping the bt
1420: 72 65 65 73 20 69 6e 20 64 65 73 63 65 6e 64 69  rees in descendi
1430: 6e 67 20 6f 72 64 65 72 20 6f 66 20 72 6f 6f 74  ng order of root
1440: 2d 70 61 67 65 73 2e 0a 23 20 20 20 20 20 20 20  -pages..#       
1450: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 69 73              This
1460: 20 74 65 73 74 20 65 6e 73 75 72 65 73 20 74 68   test ensures th
1470: 61 74 20 74 68 69 73 20 61 63 74 75 61 6c 6c 79  at this actually
1480: 20 68 61 70 70 65 6e 73 2e 0a 23 0a 64 6f 5f 74   happens..#.do_t
1490: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 32  est autovacuum-2
14a0: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
14b0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
14c0: 45 20 61 76 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  E av1;.  }.} {}.
14d0: 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75  do_test autovacu
14e0: 75 6d 2d 32 2e 31 2e 32 20 7b 0a 20 20 66 69 6c  um-2.1.2 {.  fil
14f0: 65 5f 70 61 67 65 73 0a 7d 20 7b 31 7d 0a 0a 23  e_pages.} {1}..#
1500: 20 43 72 65 61 74 65 20 61 20 74 61 62 6c 65 20   Create a table 
1510: 61 6e 64 20 70 75 74 20 73 6f 6d 65 20 64 61 74  and put some dat
1520: 61 20 69 6e 20 69 74 2e 0a 64 6f 5f 74 65 73 74  a in it..do_test
1530: 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 32 2e   autovacuum-2.2.
1540: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1550: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1560: 20 61 76 31 28 78 29 3b 0a 20 20 20 20 53 45 4c   av1(x);.    SEL
1570: 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
1580: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1590: 4f 52 44 45 52 20 42 59 20 72 6f 6f 74 70 61 67  ORDER BY rootpag
15a0: 65 3b 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64 6f 5f  e;.  }.} {3}.do_
15b0: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
15c0: 32 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  2.2.2 {.  execsq
15d0: 6c 20 22 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l ".    INSERT I
15e0: 4e 54 4f 20 61 76 31 20 56 41 4c 55 45 53 28 27  NTO av1 VALUES('
15f0: 5b 6d 61 6b 65 5f 73 74 72 20 61 62 63 20 33 30  [make_str abc 30
1600: 30 30 5d 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  00]');.    INSER
1610: 54 20 49 4e 54 4f 20 61 76 31 20 56 41 4c 55 45  T INTO av1 VALUE
1620: 53 28 27 5b 6d 61 6b 65 5f 73 74 72 20 64 65 66  S('[make_str def
1630: 20 33 30 30 30 5d 27 29 3b 0a 20 20 20 20 49 4e   3000]');.    IN
1640: 53 45 52 54 20 49 4e 54 4f 20 61 76 31 20 56 41  SERT INTO av1 VA
1650: 4c 55 45 53 28 27 5b 6d 61 6b 65 5f 73 74 72 20  LUES('[make_str 
1660: 67 68 69 20 33 30 30 30 5d 27 29 3b 0a 20 20 20  ghi 3000]');.   
1670: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 76 31   INSERT INTO av1
1680: 20 56 41 4c 55 45 53 28 27 5b 6d 61 6b 65 5f 73   VALUES('[make_s
1690: 74 72 20 6a 6b 6c 20 33 30 30 30 5d 27 29 3b 0a  tr jkl 3000]');.
16a0: 20 20 22 0a 20 20 73 65 74 20 3a 3a 61 76 31 5f    ".  set ::av1_
16b0: 64 61 74 61 20 5b 64 62 20 65 76 61 6c 20 7b 73  data [db eval {s
16c0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 61 76 31  elect * from av1
16d0: 7d 5d 0a 20 20 66 69 6c 65 5f 70 61 67 65 73 0a  }].  file_pages.
16e0: 7d 20 7b 31 35 7d 0a 0a 23 20 43 72 65 61 74 65  } {15}..# Create
16f0: 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 2e 20   another table. 
1700: 43 68 65 63 6b 20 69 74 20 69 73 20 6c 6f 63 61  Check it is loca
1710: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ted immediately 
1720: 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74 2e  after the first.
1730: 0a 23 20 54 68 69 73 20 74 65 73 74 20 63 61 73  .# This test cas
1740: 65 20 6d 6f 76 65 73 20 74 68 65 20 73 65 63 6f  e moves the seco
1750: 6e 64 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76  nd page in an ov
1760: 65 72 2d 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 64  er-flow chain..d
1770: 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75  o_test autovacuu
1780: 6d 2d 32 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63  m-2.2.3 {.  exec
1790: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
17a0: 20 54 41 42 4c 45 20 61 76 32 28 78 29 3b 0a 20   TABLE av2(x);. 
17b0: 20 20 20 53 45 4c 45 43 54 20 72 6f 6f 74 70 61     SELECT rootpa
17c0: 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ge FROM sqlite_m
17d0: 61 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 72  aster ORDER BY r
17e0: 6f 6f 74 70 61 67 65 3b 0a 20 20 7d 0a 7d 20 7b  ootpage;.  }.} {
17f0: 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  3 4}.do_test aut
1800: 6f 76 61 63 75 75 6d 2d 32 2e 32 2e 34 20 7b 0a  ovacuum-2.2.4 {.
1810: 20 20 66 69 6c 65 5f 70 61 67 65 73 0a 7d 20 7b    file_pages.} {
1820: 31 36 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 6e  16}..# Create an
1830: 6f 74 68 65 72 20 74 61 62 6c 65 2e 20 43 68 65  other table. Che
1840: 63 6b 20 69 74 20 69 73 20 6c 6f 63 61 74 65 64  ck it is located
1850: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
1860: 65 72 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 23  er the second..#
1870: 20 54 68 69 73 20 74 65 73 74 20 63 61 73 65 20   This test case 
1880: 6d 6f 76 65 73 20 74 68 65 20 66 69 72 73 74 20  moves the first 
1890: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 2d  page in an over-
18a0: 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 64 6f 5f 74  flow chain..do_t
18b0: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 32  est autovacuum-2
18c0: 2e 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.5 {.  execsql
18d0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
18e0: 42 4c 45 20 61 76 33 28 78 29 3b 0a 20 20 20 20  BLE av3(x);.    
18f0: 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20  SELECT rootpage 
1900: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1910: 65 72 20 4f 52 44 45 52 20 42 59 20 72 6f 6f 74  er ORDER BY root
1920: 70 61 67 65 3b 0a 20 20 7d 0a 7d 20 7b 33 20 34  page;.  }.} {3 4
1930: 20 35 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f   5}.do_test auto
1940: 76 61 63 75 75 6d 2d 32 2e 32 2e 36 20 7b 0a 20  vacuum-2.2.6 {. 
1950: 20 66 69 6c 65 5f 70 61 67 65 73 0a 7d 20 7b 31   file_pages.} {1
1960: 37 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 6e 6f  7}..# Create ano
1970: 74 68 65 72 20 74 61 62 6c 65 2e 20 43 68 65 63  ther table. Chec
1980: 6b 20 69 74 20 69 73 20 6c 6f 63 61 74 65 64 20  k it is located 
1990: 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
19a0: 72 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 23 20  r the second..# 
19b0: 54 68 69 73 20 74 65 73 74 20 63 61 73 65 20 6d  This test case m
19c0: 6f 76 65 73 20 61 20 62 74 72 65 65 20 6c 65 61  oves a btree lea
19d0: 66 20 70 61 67 65 2e 0a 64 6f 5f 74 65 73 74 20  f page..do_test 
19e0: 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 32 2e 37  autovacuum-2.2.7
19f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1a00: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1a10: 61 76 34 28 78 29 3b 0a 20 20 20 20 53 45 4c 45  av4(x);.    SELE
1a20: 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d  CT rootpage FROM
1a30: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f   sqlite_master O
1a40: 52 44 45 52 20 42 59 20 72 6f 6f 74 70 61 67 65  RDER BY rootpage
1a50: 3b 0a 20 20 7d 0a 7d 20 7b 33 20 34 20 35 20 36  ;.  }.} {3 4 5 6
1a60: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61  }.do_test autova
1a70: 63 75 75 6d 2d 32 2e 32 2e 38 20 7b 0a 20 20 66  cuum-2.2.8 {.  f
1a80: 69 6c 65 5f 70 61 67 65 73 0a 7d 20 7b 31 38 7d  ile_pages.} {18}
1a90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63  .do_test autovac
1aa0: 75 75 6d 2d 32 2e 32 2e 39 20 7b 0a 20 20 65 78  uum-2.2.9 {.  ex
1ab0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 73 65 6c 65  ecsql {.    sele
1ac0: 63 74 20 2a 20 66 72 6f 6d 20 61 76 31 0a 20 20  ct * from av1.  
1ad0: 7d 0a 7d 20 24 61 76 31 5f 64 61 74 61 0a 0a 64  }.} $av1_data..d
1ae0: 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75  o_test autovacuu
1af0: 6d 2d 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  m-2.3.1 {.  exec
1b00: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
1b10: 20 49 4e 54 4f 20 61 76 32 20 53 45 4c 45 43 54   INTO av2 SELECT
1b20: 20 27 61 76 31 27 20 7c 7c 20 78 20 46 52 4f 4d   'av1' || x FROM
1b30: 20 61 76 31 3b 0a 20 20 20 20 49 4e 53 45 52 54   av1;.    INSERT
1b40: 20 49 4e 54 4f 20 61 76 33 20 53 45 4c 45 43 54   INTO av3 SELECT
1b50: 20 27 61 76 32 27 20 7c 7c 20 78 20 46 52 4f 4d   'av2' || x FROM
1b60: 20 61 76 31 3b 0a 20 20 20 20 49 4e 53 45 52 54   av1;.    INSERT
1b70: 20 49 4e 54 4f 20 61 76 34 20 53 45 4c 45 43 54   INTO av4 SELECT
1b80: 20 27 61 76 33 27 20 7c 7c 20 78 20 46 52 4f 4d   'av3' || x FROM
1b90: 20 61 76 31 3b 0a 20 20 7d 0a 20 20 73 65 74 20   av1;.  }.  set 
1ba0: 3a 3a 61 76 32 5f 64 61 74 61 20 5b 65 78 65 63  ::av2_data [exec
1bb0: 73 71 6c 20 7b 73 65 6c 65 63 74 20 78 20 66 72  sql {select x fr
1bc0: 6f 6d 20 61 76 32 7d 5d 0a 20 20 73 65 74 20 3a  om av2}].  set :
1bd0: 3a 61 76 33 5f 64 61 74 61 20 5b 65 78 65 63 73  :av3_data [execs
1be0: 71 6c 20 7b 73 65 6c 65 63 74 20 78 20 66 72 6f  ql {select x fro
1bf0: 6d 20 61 76 33 7d 5d 0a 20 20 73 65 74 20 3a 3a  m av3}].  set ::
1c00: 61 76 34 5f 64 61 74 61 20 5b 65 78 65 63 73 71  av4_data [execsq
1c10: 6c 20 7b 73 65 6c 65 63 74 20 78 20 66 72 6f 6d  l {select x from
1c20: 20 61 76 34 7d 5d 0a 20 20 66 69 6c 65 5f 70 61   av4}].  file_pa
1c30: 67 65 73 0a 7d 20 7b 35 34 7d 0a 64 6f 5f 74 65  ges.} {54}.do_te
1c40: 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e  st autovacuum-2.
1c50: 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.2 {.  execsql 
1c60: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
1c70: 20 61 76 32 3b 0a 20 20 20 20 53 45 4c 45 43 54   av2;.    SELECT
1c80: 20 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73   rootpage FROM s
1c90: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52 44  qlite_master ORD
1ca0: 45 52 20 42 59 20 72 6f 6f 74 70 61 67 65 3b 0a  ER BY rootpage;.
1cb0: 20 20 7d 0a 7d 20 7b 33 20 34 20 35 7d 0a 64 6f    }.} {3 4 5}.do
1cc0: 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d  _test autovacuum
1cd0: 2d 32 2e 33 2e 33 20 7b 0a 20 20 66 69 6c 65 5f  -2.3.3 {.  file_
1ce0: 70 61 67 65 73 0a 7d 20 7b 34 31 7d 0a 64 6f 5f  pages.} {41}.do_
1cf0: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
1d00: 32 2e 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  2.3.4 {.  execsq
1d10: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  l {.    SELECT x
1d20: 20 46 52 4f 4d 20 61 76 33 3b 0a 20 20 7d 0a 7d   FROM av3;.  }.}
1d30: 20 24 3a 3a 61 76 33 5f 64 61 74 61 0a 64 6f 5f   $::av3_data.do_
1d40: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
1d50: 32 2e 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  2.3.5 {.  execsq
1d60: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  l {.    SELECT x
1d70: 20 46 52 4f 4d 20 61 76 34 3b 0a 20 20 7d 0a 7d   FROM av4;.  }.}
1d80: 20 24 3a 3a 61 76 34 5f 64 61 74 61 0a 0a 23 20   $::av4_data..# 
1d90: 44 72 6f 70 20 61 6c 6c 20 74 68 65 20 74 61 62  Drop all the tab
1da0: 6c 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 2e  les in the file.
1db0: 20 54 68 69 73 20 70 75 74 73 20 61 6c 6c 20 70   This puts all p
1dc0: 61 67 65 73 20 65 78 63 65 70 74 20 74 68 65 20  ages except the 
1dd0: 66 69 72 73 74 20 32 0a 23 20 28 74 68 65 20 73  first 2.# (the s
1de0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 72 6f 6f  qlite_master roo
1df0: 74 2d 70 61 67 65 20 61 6e 64 20 74 68 65 20 66  t-page and the f
1e00: 69 72 73 74 20 70 6f 69 6e 74 65 72 20 6d 61 70  irst pointer map
1e10: 20 70 61 67 65 29 20 6f 6e 20 74 68 65 20 0a 23   page) on the .#
1e20: 20 66 72 65 65 2d 6c 69 73 74 2e 0a 64 6f 5f 74   free-list..do_t
1e30: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 32  est autovacuum-2
1e40: 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.1 {.  execsql
1e50: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
1e60: 45 20 61 76 31 3b 0a 20 20 20 20 44 52 4f 50 20  E av1;.    DROP 
1e70: 54 41 42 4c 45 20 61 76 33 3b 0a 20 20 20 20 42  TABLE av3;.    B
1e80: 45 47 49 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54  EGIN;.    DROP T
1e90: 41 42 4c 45 20 61 76 34 3b 0a 20 20 7d 0a 20 20  ABLE av4;.  }.  
1ea0: 66 69 6c 65 5f 70 61 67 65 73 0a 7d 20 7b 31 35  file_pages.} {15
1eb0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61  }.do_test autova
1ec0: 63 75 75 6d 2d 32 2e 34 2e 32 20 7b 0a 20 20 66  cuum-2.4.2 {.  f
1ed0: 6f 72 20 7b 73 65 74 20 69 20 33 7d 20 7b 24 69  or {set i 3} {$i
1ee0: 3c 3d 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  <=10} {incr i} {
1ef0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 43 52  .    execsql "CR
1f00: 45 41 54 45 20 54 41 42 4c 45 20 61 76 24 69 20  EATE TABLE av$i 
1f10: 28 78 29 22 0a 20 20 7d 0a 20 20 66 69 6c 65 5f  (x)".  }.  file_
1f20: 70 61 67 65 73 0a 7d 20 7b 31 35 7d 0a 64 6f 5f  pages.} {15}.do_
1f30: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
1f40: 32 2e 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  2.4.3 {.  execsq
1f50: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
1f60: 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c  ootpage FROM sql
1f70: 69 74 65 5f 6d 61 73 74 65 72 20 4f 52 44 45 52  ite_master ORDER
1f80: 20 62 79 20 72 6f 6f 74 70 61 67 65 0a 20 20 7d   by rootpage.  }
1f90: 0a 7d 20 7b 33 20 34 20 35 20 36 20 37 20 38 20  .} {3 4 5 6 7 8 
1fa0: 39 20 31 30 7d 0a 0a 23 20 52 69 67 68 74 20 6e  9 10}..# Right n
1fb0: 6f 77 20 74 68 65 72 65 20 61 72 65 20 35 20 66  ow there are 5 f
1fc0: 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65  ree pages in the
1fd0: 20 64 61 74 61 62 61 73 65 2e 20 43 6f 6e 73 75   database. Consu
1fe0: 6d 65 20 61 6e 64 20 74 68 65 6e 20 66 72 65 65  me and then free
1ff0: 0a 23 20 61 20 35 32 30 20 70 61 67 65 73 2e 20  .# a 520 pages. 
2000: 54 68 65 6e 20 63 72 65 61 74 65 20 35 32 30 20  Then create 520 
2010: 74 61 62 6c 65 73 2e 20 54 68 69 73 20 65 6e 73  tables. This ens
2020: 75 72 65 73 20 74 68 61 74 20 61 74 20 6c 65 61  ures that at lea
2030: 73 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 0a 23  st some of the.#
2040: 20 64 65 73 69 72 65 64 20 72 6f 6f 74 2d 70 61   desired root-pa
2050: 67 65 73 20 72 65 73 69 64 65 20 6f 6e 20 74 68  ges reside on th
2060: 65 20 73 65 63 6f 6e 64 20 66 72 65 65 2d 6c 69  e second free-li
2070: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2c 20 61  st trunk page, a
2080: 6e 64 20 74 68 61 74 20 74 68 65 0a 23 20 74 72  nd that the.# tr
2090: 75 6e 6b 20 69 74 73 65 6c 66 20 69 73 20 72 65  unk itself is re
20a0: 71 75 69 72 65 64 20 61 74 20 73 6f 6d 65 20 70  quired at some p
20b0: 6f 69 6e 74 2e 0a 64 6f 5f 74 65 73 74 20 61 75  oint..do_test au
20c0: 74 6f 76 61 63 75 75 6d 2d 32 2e 34 2e 34 20 7b  tovacuum-2.4.4 {
20d0: 0a 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20  .  execsql ".   
20e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 76 33   INSERT INTO av3
20f0: 20 56 41 4c 55 45 53 20 28 27 5b 6d 61 6b 65 5f   VALUES ('[make_
2100: 73 74 72 20 61 62 63 64 65 20 5b 65 78 70 72 20  str abcde [expr 
2110: 31 30 32 30 2a 35 32 30 20 2b 20 35 30 30 5d 5d  1020*520 + 500]]
2120: 27 29 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  ');.    DELETE F
2130: 52 4f 4d 20 61 76 33 3b 0a 20 20 22 0a 7d 20 7b  ROM av3;.  ".} {
2140: 7d 0a 73 65 74 20 72 6f 6f 74 5f 70 61 67 65 5f  }.set root_page_
2150: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 73 65 74 20  list [list].set 
2160: 70 65 6e 64 69 6e 67 5f 62 79 74 65 5f 70 61 67  pending_byte_pag
2170: 65 20 5b 65 78 70 72 20 28 24 3a 3a 73 71 6c 69  e [expr ($::sqli
2180: 74 65 5f 70 65 6e 64 69 6e 67 5f 62 79 74 65 20  te_pending_byte 
2190: 2f 20 31 30 32 34 29 20 2b 20 31 5d 0a 66 6f 72  / 1024) + 1].for
21a0: 20 7b 73 65 74 20 69 20 33 7d 20 7b 24 69 3c 3d   {set i 3} {$i<=
21b0: 35 33 32 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  532} {incr i} {.
21c0: 20 20 23 20 32 30 37 20 61 6e 64 20 34 31 32 20    # 207 and 412 
21d0: 61 72 65 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20  are pointer-map 
21e0: 70 61 67 65 73 2e 0a 20 20 69 66 20 7b 20 24 69  pages..  if { $i
21f0: 21 3d 32 30 37 20 26 26 20 24 69 21 3d 34 31 32  !=207 && $i!=412
2200: 20 26 26 20 24 69 20 21 3d 20 24 70 65 6e 64 69   && $i != $pendi
2210: 6e 67 5f 62 79 74 65 5f 70 61 67 65 7d 20 7b 0a  ng_byte_page} {.
2220: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 6f 74      lappend root
2230: 5f 70 61 67 65 5f 6c 69 73 74 20 24 69 0a 20 20  _page_list $i.  
2240: 7d 0a 7d 0a 69 66 20 7b 24 69 20 3e 3d 20 24 70  }.}.if {$i >= $p
2250: 65 6e 64 69 6e 67 5f 62 79 74 65 5f 70 61 67 65  ending_byte_page
2260: 7d 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 72 6f  } {.  lappend ro
2270: 6f 74 5f 70 61 67 65 5f 6c 69 73 74 20 24 69 0a  ot_page_list $i.
2280: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61  }.do_test autova
2290: 63 75 75 6d 2d 32 2e 34 2e 35 20 7b 0a 20 20 66  cuum-2.4.5 {.  f
22a0: 6f 72 20 7b 73 65 74 20 69 20 31 31 7d 20 7b 24  or {set i 11} {$
22b0: 69 3c 3d 35 33 30 7d 20 7b 69 6e 63 72 20 69 7d  i<=530} {incr i}
22c0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
22d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 76 24  CREATE TABLE av$
22e0: 69 20 28 78 29 22 0a 20 20 7d 0a 20 20 65 78 65  i (x)".  }.  exe
22f0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2300: 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20  T rootpage FROM 
2310: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
2320: 44 45 52 20 62 79 20 72 6f 6f 74 70 61 67 65 0a  DER by rootpage.
2330: 20 20 7d 0a 7d 20 24 72 6f 6f 74 5f 70 61 67 65    }.} $root_page
2340: 5f 6c 69 73 74 0a 0a 23 20 4a 75 73 74 20 66 6f  _list..# Just fo
2350: 72 20 66 75 6e 2c 20 64 65 6c 65 74 65 20 61 6c  r fun, delete al
2360: 6c 20 74 68 6f 73 65 20 74 61 62 6c 65 73 20 61  l those tables a
2370: 6e 64 20 73 65 65 20 69 66 20 74 68 65 20 64 61  nd see if the da
2380: 74 61 62 61 73 65 20 69 73 20 31 20 70 61 67 65  tabase is 1 page
2390: 2e 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61  ..do_test autova
23a0: 63 75 75 6d 2d 32 2e 34 2e 36 20 7b 0a 20 20 65  cuum-2.4.6 {.  e
23b0: 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 3b 0a 20  xecsql COMMIT;. 
23c0: 20 66 69 6c 65 5f 70 61 67 65 73 0a 7d 20 5b 65   file_pages.} [e
23d0: 78 70 72 20 35 36 31 20 2b 20 28 28 24 69 20 3e  xpr 561 + (($i >
23e0: 3d 20 24 70 65 6e 64 69 6e 67 5f 62 79 74 65 5f  = $pending_byte_
23f0: 70 61 67 65 29 3f 31 3a 30 29 5d 0a 69 6e 74 65  page)?1:0)].inte
2400: 67 72 69 74 79 5f 63 68 65 63 6b 20 61 75 74 6f  grity_check auto
2410: 76 61 63 75 75 6d 2d 32 2e 34 2e 36 0a 64 6f 5f  vacuum-2.4.6.do_
2420: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
2430: 32 2e 34 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  2.4.7 {.  execsq
2440: 6c 20 42 45 47 49 4e 0a 20 20 66 6f 72 20 7b 73  l BEGIN.  for {s
2450: 65 74 20 69 20 33 7d 20 7b 24 69 3c 3d 35 33 30  et i 3} {$i<=530
2460: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
2470: 20 65 78 65 63 73 71 6c 20 22 44 52 4f 50 20 54   execsql "DROP T
2480: 41 42 4c 45 20 61 76 24 69 22 0a 20 20 7d 0a 20  ABLE av$i".  }. 
2490: 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a   execsql COMMIT.
24a0: 20 20 66 69 6c 65 5f 70 61 67 65 73 0a 7d 20 31    file_pages.} 1
24b0: 0a 0a 23 20 43 72 65 61 74 65 20 73 6f 6d 65 20  ..# Create some 
24c0: 74 61 62 6c 65 73 20 77 69 74 68 20 69 6e 64 69  tables with indi
24d0: 63 65 73 20 74 6f 20 64 72 6f 70 2e 0a 64 6f 5f  ces to drop..do_
24e0: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
24f0: 32 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.5.1 {.  execsq
2500: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2510: 41 42 4c 45 20 61 76 31 28 61 20 50 52 49 4d 41  ABLE av1(a PRIMA
2520: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20  RY KEY, b, c);. 
2530: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
2540: 76 31 20 56 41 4c 55 45 53 28 27 61 76 31 20 61  v1 VALUES('av1 a
2550: 27 2c 20 27 61 76 31 20 62 27 2c 20 27 61 76 31  ', 'av1 b', 'av1
2560: 20 63 27 29 3b 0a 0a 20 20 20 20 43 52 45 41 54   c');..    CREAT
2570: 45 20 54 41 42 4c 45 20 61 76 32 28 61 20 50 52  E TABLE av2(a PR
2580: 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 29  IMARY KEY, b, c)
2590: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
25a0: 45 58 20 61 76 32 5f 69 31 20 4f 4e 20 61 76 32  EX av2_i1 ON av2
25b0: 28 62 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (b);.    CREATE 
25c0: 49 4e 44 45 58 20 61 76 32 5f 69 32 20 4f 4e 20  INDEX av2_i2 ON 
25d0: 61 76 32 28 63 29 3b 0a 20 20 20 20 49 4e 53 45  av2(c);.    INSE
25e0: 52 54 20 49 4e 54 4f 20 61 76 32 20 56 41 4c 55  RT INTO av2 VALU
25f0: 45 53 28 27 61 76 32 20 61 27 2c 20 27 61 76 32  ES('av2 a', 'av2
2600: 20 62 27 2c 20 27 61 76 32 20 63 27 29 3b 0a 0a   b', 'av2 c');..
2610: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2620: 20 61 76 33 28 61 20 50 52 49 4d 41 52 59 20 4b   av3(a PRIMARY K
2630: 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 43  EY, b, c);.    C
2640: 52 45 41 54 45 20 49 4e 44 45 58 20 61 76 33 5f  REATE INDEX av3_
2650: 69 31 20 4f 4e 20 61 76 33 28 62 29 3b 0a 20 20  i1 ON av3(b);.  
2660: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 76    INSERT INTO av
2670: 33 20 56 41 4c 55 45 53 28 27 61 76 33 20 61 27  3 VALUES('av3 a'
2680: 2c 20 27 61 76 33 20 62 27 2c 20 27 61 76 33 20  , 'av3 b', 'av3 
2690: 63 27 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45  c');..    CREATE
26a0: 20 54 41 42 4c 45 20 61 76 34 28 61 2c 20 62 2c   TABLE av4(a, b,
26b0: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
26c0: 49 4e 44 45 58 20 61 76 34 5f 69 31 20 4f 4e 20  INDEX av4_i1 ON 
26d0: 61 76 34 28 61 29 3b 0a 20 20 20 20 43 52 45 41  av4(a);.    CREA
26e0: 54 45 20 49 4e 44 45 58 20 61 76 34 5f 69 32 20  TE INDEX av4_i2 
26f0: 4f 4e 20 61 76 34 28 62 29 3b 0a 20 20 20 20 43  ON av4(b);.    C
2700: 52 45 41 54 45 20 49 4e 44 45 58 20 61 76 34 5f  REATE INDEX av4_
2710: 69 33 20 4f 4e 20 61 76 34 28 63 29 3b 0a 20 20  i3 ON av4(c);.  
2720: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 61    CREATE INDEX a
2730: 76 34 5f 69 34 20 4f 4e 20 61 76 34 28 61 2c 20  v4_i4 ON av4(a, 
2740: 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52  b, c);.    INSER
2750: 54 20 49 4e 54 4f 20 61 76 34 20 56 41 4c 55 45  T INTO av4 VALUE
2760: 53 28 27 61 76 34 20 61 27 2c 20 27 61 76 34 20  S('av4 a', 'av4 
2770: 62 27 2c 20 27 61 76 34 20 63 27 29 3b 0a 20 20  b', 'av4 c');.  
2780: 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  }.} {}..do_test 
2790: 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e 32  autovacuum-2.5.2
27a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
27b0: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20     SELECT name, 
27c0: 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71  rootpage FROM sq
27d0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d  lite_master;.  }
27e0: 0a 7d 20 5b 6c 69 73 74 20 61 76 31 20 33 20 20  .} [list av1 3  
27f0: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
2800: 5f 61 76 31 5f 31 20 34 20 5c 0a 20 20 20 20 20  _av1_1 4 \.     
2810: 20 20 20 61 76 32 20 35 20 20 73 71 6c 69 74 65     av2 5  sqlite
2820: 5f 61 75 74 6f 69 6e 64 65 78 5f 61 76 32 5f 31  _autoindex_av2_1
2830: 20 36 20 61 76 32 5f 69 31 20 37 20 61 76 32 5f   6 av2_i1 7 av2_
2840: 69 32 20 38 20 5c 0a 20 20 20 20 20 20 20 20 61  i2 8 \.        a
2850: 76 33 20 39 20 73 71 6c 69 74 65 5f 61 75 74 6f  v3 9 sqlite_auto
2860: 69 6e 64 65 78 5f 61 76 33 5f 31 20 31 30 20 61  index_av3_1 10 a
2870: 76 33 5f 69 31 20 31 31 20 5c 0a 20 20 20 20 20  v3_i1 11 \.     
2880: 20 20 20 61 76 34 20 31 32 20 61 76 34 5f 69 31     av4 12 av4_i1
2890: 20 31 33 20 61 76 34 5f 69 32 20 31 34 20 61 76   13 av4_i2 14 av
28a0: 34 5f 69 33 20 31 35 20 61 76 34 5f 69 34 20 31  4_i3 15 av4_i4 1
28b0: 36 20 5c 0a 5d 0a 0a 23 20 54 68 65 20 66 6f 6c  6 \.]..# The fol
28c0: 6c 6f 77 69 6e 67 20 34 20 74 65 73 74 73 20 61  lowing 4 tests a
28d0: 72 65 20 53 45 4c 45 43 54 20 71 75 65 72 69 65  re SELECT querie
28e0: 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 69  s that use the i
28f0: 6e 64 69 63 65 73 20 63 72 65 61 74 65 64 2e 0a  ndices created..
2900: 23 20 49 66 20 74 68 65 20 72 6f 6f 74 2d 70 61  # If the root-pa
2910: 67 65 73 20 69 6e 20 74 68 65 20 69 6e 74 65 72  ges in the inter
2920: 6e 61 6c 20 73 63 68 65 6d 61 20 61 72 65 20 6e  nal schema are n
2930: 6f 74 20 75 70 64 61 74 65 64 20 63 6f 72 72 65  ot updated corre
2940: 63 74 6c 79 20 77 68 65 6e 0a 23 20 61 20 74 61  ctly when.# a ta
2950: 62 6c 65 20 6f 72 20 69 6e 64 69 63 65 20 69 73  ble or indice is
2960: 20 6d 6f 76 65 64 2c 20 74 68 65 73 65 20 71 75   moved, these qu
2970: 65 72 69 65 73 20 77 69 6c 6c 20 66 61 69 6c 2e  eries will fail.
2980: 20 54 68 65 79 20 61 72 65 20 72 65 70 65 61 74   They are repeat
2990: 65 64 0a 23 20 61 66 74 65 72 20 65 61 63 68 20  ed.# after each 
29a0: 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64  table is dropped
29b0: 20 28 69 2e 65 2e 20 61 73 20 74 65 73 74 20 63   (i.e. as test c
29c0: 61 73 65 73 20 32 2e 35 2e 2a 2e 5b 31 2e 2e 34  ases 2.5.*.[1..4
29d0: 5d 29 2e 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  ])..do_test auto
29e0: 76 61 63 75 75 6d 2d 32 2e 35 2e 32 2e 31 20 7b  vacuum-2.5.2.1 {
29f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2a00: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61   SELECT * FROM a
2a10: 76 31 20 57 48 45 52 45 20 61 20 3d 20 27 61 76  v1 WHERE a = 'av
2a20: 31 20 61 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 61 76  1 a';.  }.} {{av
2a30: 31 20 61 7d 20 7b 61 76 31 20 62 7d 20 7b 61 76  1 a} {av1 b} {av
2a40: 31 20 63 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  1 c}}.do_test au
2a50: 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e 32 2e 32  tovacuum-2.5.2.2
2a60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2a70: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2a80: 20 61 76 32 20 57 48 45 52 45 20 61 20 3d 20 27   av2 WHERE a = '
2a90: 61 76 32 20 61 27 20 41 4e 44 20 62 20 3d 20 27  av2 a' AND b = '
2aa0: 61 76 32 20 62 27 20 41 4e 44 20 63 20 3d 20 27  av2 b' AND c = '
2ab0: 61 76 32 20 63 27 0a 20 20 7d 0a 7d 20 7b 7b 61  av2 c'.  }.} {{a
2ac0: 76 32 20 61 7d 20 7b 61 76 32 20 62 7d 20 7b 61  v2 a} {av2 b} {a
2ad0: 76 32 20 63 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  v2 c}}.do_test a
2ae0: 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e 32 2e  utovacuum-2.5.2.
2af0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2b00: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2b10: 4d 20 61 76 33 20 57 48 45 52 45 20 61 20 3d 20  M av3 WHERE a = 
2b20: 27 61 76 33 20 61 27 20 41 4e 44 20 62 20 3d 20  'av3 a' AND b = 
2b30: 27 61 76 33 20 62 27 3b 0a 20 20 7d 0a 7d 20 7b  'av3 b';.  }.} {
2b40: 7b 61 76 33 20 61 7d 20 7b 61 76 33 20 62 7d 20  {av3 a} {av3 b} 
2b50: 7b 61 76 33 20 63 7d 7d 0a 64 6f 5f 74 65 73 74  {av3 c}}.do_test
2b60: 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e   autovacuum-2.5.
2b70: 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.4 {.  execsql 
2b80: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2b90: 52 4f 4d 20 61 76 34 20 57 48 45 52 45 20 61 20  ROM av4 WHERE a 
2ba0: 3d 20 27 61 76 34 20 61 27 20 41 4e 44 20 62 20  = 'av4 a' AND b 
2bb0: 3d 20 27 61 76 34 20 62 27 20 41 4e 44 20 63 20  = 'av4 b' AND c 
2bc0: 3d 20 27 61 76 34 20 63 27 3b 0a 20 20 7d 0a 7d  = 'av4 c';.  }.}
2bd0: 20 7b 7b 61 76 34 20 61 7d 20 7b 61 76 34 20 62   {{av4 a} {av4 b
2be0: 7d 20 7b 61 76 34 20 63 7d 7d 0a 0a 23 20 44 72  } {av4 c}}..# Dr
2bf0: 6f 70 20 74 61 62 6c 65 20 61 76 33 2e 20 49 6e  op table av3. In
2c00: 64 69 63 65 73 20 61 76 34 5f 69 32 2c 20 61 76  dices av4_i2, av
2c10: 34 5f 69 33 20 61 6e 64 20 61 76 34 5f 69 34 20  4_i3 and av4_i4 
2c20: 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 66 69 6c  are moved to fil
2c30: 6c 20 74 68 65 20 74 77 6f 0a 23 20 72 6f 6f 74  l the two.# root
2c40: 20 70 61 67 65 73 20 76 61 63 61 74 65 64 2e 20   pages vacated. 
2c50: 54 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 70 72  The operation pr
2c60: 6f 63 65 65 64 73 20 61 73 3a 0a 23 20 53 74 65  oceeds as:.# Ste
2c70: 70 20 31 3a 20 44 65 6c 65 74 65 20 61 76 33 5f  p 1: Delete av3_
2c80: 69 31 20 28 72 6f 6f 74 2d 70 61 67 65 20 31 31  i1 (root-page 11
2c90: 29 2e 20 4d 6f 76 65 20 72 6f 6f 74 2d 70 61 67  ). Move root-pag
2ca0: 65 20 6f 66 20 61 76 34 5f 69 34 20 74 6f 20 70  e of av4_i4 to p
2cb0: 61 67 65 20 31 31 2e 0a 23 20 53 74 65 70 20 32  age 11..# Step 2
2cc0: 3a 20 44 65 6c 65 74 65 20 61 76 33 20 28 72 6f  : Delete av3 (ro
2cd0: 6f 74 2d 70 61 67 65 20 31 30 29 2e 20 4d 6f 76  ot-page 10). Mov
2ce0: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 61  e root-page of a
2cf0: 76 34 5f 69 33 20 74 6f 20 70 61 67 65 20 31 30  v4_i3 to page 10
2d00: 2e 0a 23 20 53 74 65 70 20 33 3a 20 44 65 6c 65  ..# Step 3: Dele
2d10: 74 65 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  te sqlite_autoin
2d20: 64 65 78 5f 61 76 31 5f 33 20 28 72 6f 6f 74 2d  dex_av1_3 (root-
2d30: 70 61 67 65 20 39 29 2e 20 4d 6f 76 65 20 61 76  page 9). Move av
2d40: 34 5f 69 32 20 74 6f 20 70 61 67 65 20 39 2e 0a  4_i2 to page 9..
2d50: 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75  do_test autovacu
2d60: 75 6d 2d 32 2e 35 2e 33 20 7b 0a 20 20 65 78 65  um-2.5.3 {.  exe
2d70: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
2d80: 54 41 42 4c 45 20 61 76 33 3b 0a 20 20 20 20 53  TABLE av3;.    S
2d90: 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
2da0: 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  page FROM sqlite
2db0: 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20 5b  _master;.  }.} [
2dc0: 6c 69 73 74 20 61 76 31 20 33 20 20 73 71 6c 69  list av1 3  sqli
2dd0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 61 76 31  te_autoindex_av1
2de0: 5f 31 20 34 20 5c 0a 20 20 20 20 20 20 20 20 61  _1 4 \.        a
2df0: 76 32 20 35 20 20 73 71 6c 69 74 65 5f 61 75 74  v2 5  sqlite_aut
2e00: 6f 69 6e 64 65 78 5f 61 76 32 5f 31 20 36 20 61  oindex_av2_1 6 a
2e10: 76 32 5f 69 31 20 37 20 61 76 32 5f 69 32 20 38  v2_i1 7 av2_i2 8
2e20: 20 5c 0a 20 20 20 20 20 20 20 20 61 76 34 20 31   \.        av4 1
2e30: 32 20 61 76 34 5f 69 31 20 31 33 20 61 76 34 5f  2 av4_i1 13 av4_
2e40: 69 32 20 39 20 61 76 34 5f 69 33 20 31 30 20 61  i2 9 av4_i3 10 a
2e50: 76 34 5f 69 34 20 31 31 20 5c 0a 5d 0a 64 6f 5f  v4_i4 11 \.].do_
2e60: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
2e70: 32 2e 35 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  2.5.3.1 {.  exec
2e80: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2e90: 20 2a 20 46 52 4f 4d 20 61 76 31 20 57 48 45 52   * FROM av1 WHER
2ea0: 45 20 61 20 3d 20 27 61 76 31 20 61 27 3b 0a 20  E a = 'av1 a';. 
2eb0: 20 7d 0a 7d 20 7b 7b 61 76 31 20 61 7d 20 7b 61   }.} {{av1 a} {a
2ec0: 76 31 20 62 7d 20 7b 61 76 31 20 63 7d 7d 0a 64  v1 b} {av1 c}}.d
2ed0: 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75  o_test autovacuu
2ee0: 6d 2d 32 2e 35 2e 33 2e 32 20 7b 0a 20 20 65 78  m-2.5.3.2 {.  ex
2ef0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2f00: 43 54 20 2a 20 46 52 4f 4d 20 61 76 32 20 57 48  CT * FROM av2 WH
2f10: 45 52 45 20 61 20 3d 20 27 61 76 32 20 61 27 20  ERE a = 'av2 a' 
2f20: 41 4e 44 20 62 20 3d 20 27 61 76 32 20 62 27 20  AND b = 'av2 b' 
2f30: 41 4e 44 20 63 20 3d 20 27 61 76 32 20 63 27 0a  AND c = 'av2 c'.
2f40: 20 20 7d 0a 7d 20 7b 7b 61 76 32 20 61 7d 20 7b    }.} {{av2 a} {
2f50: 61 76 32 20 62 7d 20 7b 61 76 32 20 63 7d 7d 0a  av2 b} {av2 c}}.
2f60: 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75  do_test autovacu
2f70: 75 6d 2d 32 2e 35 2e 33 2e 33 20 7b 0a 20 20 65  um-2.5.3.3 {.  e
2f80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2f90: 45 43 54 20 2a 20 46 52 4f 4d 20 61 76 34 20 57  ECT * FROM av4 W
2fa0: 48 45 52 45 20 61 20 3d 20 27 61 76 34 20 61 27  HERE a = 'av4 a'
2fb0: 20 41 4e 44 20 62 20 3d 20 27 61 76 34 20 62 27   AND b = 'av4 b'
2fc0: 20 41 4e 44 20 63 20 3d 20 27 61 76 34 20 63 27   AND c = 'av4 c'
2fd0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 61 76 34 20 61 7d  ;.  }.} {{av4 a}
2fe0: 20 7b 61 76 34 20 62 7d 20 7b 61 76 34 20 63 7d   {av4 b} {av4 c}
2ff0: 7d 0a 0a 23 20 44 72 6f 70 20 74 61 62 6c 65 20  }..# Drop table 
3000: 61 76 31 3a 0a 23 20 53 74 65 70 20 31 3a 20 44  av1:.# Step 1: D
3010: 65 6c 65 74 65 20 61 76 31 20 28 72 6f 6f 74 20  elete av1 (root 
3020: 70 61 67 65 20 34 29 2e 20 52 6f 6f 74 2d 70 61  page 4). Root-pa
3030: 67 65 20 6f 66 20 61 76 34 5f 69 31 20 66 69 6c  ge of av4_i1 fil
3040: 6c 73 20 74 68 65 20 67 61 70 2e 0a 23 20 53 74  ls the gap..# St
3050: 65 70 20 32 3a 20 44 65 6c 65 74 65 20 73 71 6c  ep 2: Delete sql
3060: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 61 76  ite_autoindex_av
3070: 31 5f 31 20 28 72 6f 6f 74 20 70 61 67 65 20 33  1_1 (root page 3
3080: 29 2e 20 4d 6f 76 65 20 61 76 34 20 74 6f 20 74  ). Move av4 to t
3090: 68 65 20 67 61 70 2e 0a 64 6f 5f 74 65 73 74 20  he gap..do_test 
30a0: 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e 34  autovacuum-2.5.4
30b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
30c0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 61 76     DROP TABLE av
30d0: 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61  1;.    SELECT na
30e0: 6d 65 2c 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  me, rootpage FRO
30f0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  M sqlite_master;
3100: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 61 76 32  .  }.} [list av2
3110: 20 35 20 20 73 71 6c 69 74 65 5f 61 75 74 6f 69   5  sqlite_autoi
3120: 6e 64 65 78 5f 61 76 32 5f 31 20 36 20 61 76 32  ndex_av2_1 6 av2
3130: 5f 69 31 20 37 20 61 76 32 5f 69 32 20 38 20 5c  _i1 7 av2_i2 8 \
3140: 0a 20 20 20 20 20 20 20 20 61 76 34 20 33 20 61  .        av4 3 a
3150: 76 34 5f 69 31 20 34 20 61 76 34 5f 69 32 20 39  v4_i1 4 av4_i2 9
3160: 20 61 76 34 5f 69 33 20 31 30 20 61 76 34 5f 69   av4_i3 10 av4_i
3170: 34 20 31 31 20 5c 0a 5d 0a 64 6f 5f 74 65 73 74  4 11 \.].do_test
3180: 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e   autovacuum-2.5.
3190: 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.2 {.  execsql 
31a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
31b0: 52 4f 4d 20 61 76 32 20 57 48 45 52 45 20 61 20  ROM av2 WHERE a 
31c0: 3d 20 27 61 76 32 20 61 27 20 41 4e 44 20 62 20  = 'av2 a' AND b 
31d0: 3d 20 27 61 76 32 20 62 27 20 41 4e 44 20 63 20  = 'av2 b' AND c 
31e0: 3d 20 27 61 76 32 20 63 27 0a 20 20 7d 0a 7d 20  = 'av2 c'.  }.} 
31f0: 7b 7b 61 76 32 20 61 7d 20 7b 61 76 32 20 62 7d  {{av2 a} {av2 b}
3200: 20 7b 61 76 32 20 63 7d 7d 0a 64 6f 5f 74 65 73   {av2 c}}.do_tes
3210: 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35  t autovacuum-2.5
3220: 2e 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.4 {.  execsql
3230: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
3240: 46 52 4f 4d 20 61 76 34 20 57 48 45 52 45 20 61  FROM av4 WHERE a
3250: 20 3d 20 27 61 76 34 20 61 27 20 41 4e 44 20 62   = 'av4 a' AND b
3260: 20 3d 20 27 61 76 34 20 62 27 20 41 4e 44 20 63   = 'av4 b' AND c
3270: 20 3d 20 27 61 76 34 20 63 27 3b 0a 20 20 7d 0a   = 'av4 c';.  }.
3280: 7d 20 7b 7b 61 76 34 20 61 7d 20 7b 61 76 34 20  } {{av4 a} {av4 
3290: 62 7d 20 7b 61 76 34 20 63 7d 7d 0a 0a 23 20 44  b} {av4 c}}..# D
32a0: 72 6f 70 20 74 61 62 6c 65 20 61 76 34 3a 0a 23  rop table av4:.#
32b0: 20 53 74 65 70 20 31 3a 20 44 65 6c 65 74 65 20   Step 1: Delete 
32c0: 61 76 34 5f 69 34 2e 0a 23 20 53 74 65 70 20 32  av4_i4..# Step 2
32d0: 3a 20 44 65 6c 65 74 65 20 61 76 34 5f 69 33 2e  : Delete av4_i3.
32e0: 0a 23 20 53 74 65 70 20 33 3a 20 44 65 6c 65 74  .# Step 3: Delet
32f0: 65 20 61 76 34 5f 69 32 2e 0a 23 20 53 74 65 70  e av4_i2..# Step
3300: 20 34 3a 20 44 65 6c 65 74 65 20 61 76 34 5f 69   4: Delete av4_i
3310: 31 2e 20 61 76 32 5f 69 32 20 72 65 70 6c 61 63  1. av2_i2 replac
3320: 65 73 20 69 74 2e 0a 23 20 53 74 65 70 20 35 3a  es it..# Step 5:
3330: 20 44 65 6c 65 74 65 20 61 76 34 2e 20 61 76 32   Delete av4. av2
3340: 5f 69 31 20 72 65 70 6c 61 63 65 73 20 69 74 2e  _i1 replaces it.
3350: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63  .do_test autovac
3360: 75 75 6d 2d 32 2e 35 2e 35 20 7b 0a 20 20 65 78  uum-2.5.5 {.  ex
3370: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
3380: 20 54 41 42 4c 45 20 61 76 34 3b 0a 20 20 20 20   TABLE av4;.    
3390: 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
33a0: 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74  tpage FROM sqlit
33b0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20  e_master;.  }.} 
33c0: 5b 6c 69 73 74 20 61 76 32 20 35 20 73 71 6c 69  [list av2 5 sqli
33d0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 61 76 32  te_autoindex_av2
33e0: 5f 31 20 36 20 61 76 32 5f 69 31 20 33 20 61 76  _1 6 av2_i1 3 av
33f0: 32 5f 69 32 20 34 5d 0a 64 6f 5f 74 65 73 74 20  2_i2 4].do_test 
3400: 61 75 74 6f 76 61 63 75 75 6d 2d 32 2e 35 2e 35  autovacuum-2.5.5
3410: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
3420: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3430: 4f 4d 20 61 76 32 20 57 48 45 52 45 20 61 20 3d  OM av2 WHERE a =
3440: 20 27 61 76 32 20 61 27 20 41 4e 44 20 62 20 3d   'av2 a' AND b =
3450: 20 27 61 76 32 20 62 27 20 41 4e 44 20 63 20 3d   'av2 b' AND c =
3460: 20 27 61 76 32 20 63 27 0a 20 20 7d 0a 7d 20 7b   'av2 c'.  }.} {
3470: 7b 61 76 32 20 61 7d 20 7b 61 76 32 20 62 7d 20  {av2 a} {av2 b} 
3480: 7b 61 76 32 20 63 7d 7d 0a 0a 23 2d 2d 2d 2d 2d  {av2 c}}..#-----
3490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34d0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73  -----.# Test cas
34e0: 65 73 20 61 75 74 6f 76 61 63 75 75 6d 2d 33 2e  es autovacuum-3.
34f0: 2a 20 74 65 73 74 20 74 68 65 20 6f 70 65 72 61  * test the opera
3500: 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 50 52 41  tion of the "PRA
3510: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 22  GMA auto_vacuum"
3520: 0a 23 20 63 6f 6d 6d 61 6e 64 2e 0a 23 0a 64 6f  .# command..#.do
3530: 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d  _test autovacuum
3540: 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.1 {.  execsql
3550: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75   {.    PRAGMA au
3560: 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 7d 0a 7d  to_vacuum;.  }.}
3570: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {1}.do_test aut
3580: 6f 76 61 63 75 75 6d 2d 33 2e 32 20 7b 0a 20 20  ovacuum-3.2 {.  
3590: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
35a0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
35b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
35c0: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
35d0: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ;.  }.} {1}.do_t
35e0: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 33  est autovacuum-3
35f0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
3600: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f  .    PRAGMA auto
3610: 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20  _vacuum = 0;.   
3620: 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63   PRAGMA auto_vac
3630: 75 75 6d 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a  uum;.  }.} {1}..
3640: 64 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75  do_test autovacu
3650: 75 6d 2d 33 2e 34 20 7b 0a 20 20 64 62 20 63 6c  um-3.4 {.  db cl
3660: 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  ose.  file delet
3670: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62  e -force test.db
3680: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
3690: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
36a0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74  {.    PRAGMA aut
36b0: 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 7d 0a 7d 20  o_vacuum;.  }.} 
36c0: 24 41 55 54 4f 56 41 43 55 55 4d 0a 64 6f 5f 74  $AUTOVACUUM.do_t
36d0: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 33  est autovacuum-3
36e0: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
36f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3700: 45 20 61 76 31 28 78 29 3b 0a 20 20 20 20 50 52  E av1(x);.    PR
3710: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
3720: 3b 0a 20 20 7d 0a 7d 20 24 41 55 54 4f 56 41 43  ;.  }.} $AUTOVAC
3730: 55 55 4d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  UUM.do_test auto
3740: 76 61 63 75 75 6d 2d 33 2e 36 20 7b 0a 20 20 65  vacuum-3.6 {.  e
3750: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
3760: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  GMA auto_vacuum 
3770: 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 1;.    PRAGMA 
3780: 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 7d  auto_vacuum;.  }
3790: 0a 7d 20 24 41 55 54 4f 56 41 43 55 55 4d 0a 64  .} $AUTOVACUUM.d
37a0: 6f 5f 74 65 73 74 20 61 75 74 6f 76 61 63 75 75  o_test autovacuu
37b0: 6d 2d 33 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  m-3.7 {.  execsq
37c0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
37d0: 4c 45 20 61 76 31 3b 0a 20 20 7d 0a 20 20 66 69  LE av1;.  }.  fi
37e0: 6c 65 5f 70 61 67 65 73 0a 7d 20 5b 65 78 70 72  le_pages.} [expr
37f0: 20 24 41 55 54 4f 56 41 43 55 55 4d 3f 31 3a 32   $AUTOVACUUM?1:2
3800: 5d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ]..#------------
3810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
3850: 73 74 20 74 68 61 74 20 69 66 20 61 20 73 74 61  st that if a sta
3860: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
3870: 6f 6e 20 61 72 6f 75 6e 64 20 61 20 43 52 45 41  on around a CREA
3880: 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
3890: 6e 74 20 69 73 0a 23 20 72 6f 6c 6c 65 64 20 62  nt is.# rolled b
38a0: 61 63 6b 20 6e 6f 20 63 6f 72 72 75 70 74 69 6f  ack no corruptio
38b0: 6e 20 6f 63 63 75 72 73 2e 0a 23 0a 64 6f 5f 74  n occurs..#.do_t
38c0: 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d 34  est autovacuum-4
38d0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
38e0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
38f0: 45 20 61 76 31 28 61 2c 20 62 29 3b 0a 20 20 20  E av1(a, b);.   
3900: 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 20 20 66 6f   BEGIN;.  }.  fo
3910: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c  r {set i 0} {$i<
3920: 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  100} {incr i} {.
3930: 20 20 20 20 65 78 65 63 73 71 6c 20 22 49 4e 53      execsql "INS
3940: 45 52 54 20 49 4e 54 4f 20 61 76 31 20 56 41 4c  ERT INTO av1 VAL
3950: 55 45 53 28 24 69 2c 20 27 5b 73 74 72 69 6e 67  UES($i, '[string
3960: 20 72 65 70 65 61 74 20 58 20 32 30 30 5d 27 29   repeat X 200]')
3970: 3b 22 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  ;".  }.  execsql
3980: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 76   "INSERT INTO av
3990: 31 20 56 41 4c 55 45 53 28 39 39 2c 20 27 5b 73  1 VALUES(99, '[s
39a0: 74 72 69 6e 67 20 72 65 70 65 61 74 20 58 20 32  tring repeat X 2
39b0: 30 30 5d 27 29 3b 22 0a 20 20 65 78 65 63 73 71  00]');".  execsq
39c0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73  l {.    SELECT s
39d0: 75 6d 28 61 29 20 46 52 4f 4d 20 61 76 31 3b 0a  um(a) FROM av1;.
39e0: 20 20 7d 0a 7d 20 7b 35 30 34 39 7d 0a 64 6f 5f    }.} {5049}.do_
39f0: 74 65 73 74 20 61 75 74 6f 76 61 63 75 75 6d 2d  test autovacuum-
3a00: 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.2 {.  catchsql
3a10: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 55 4e   {.    CREATE UN
3a20: 49 51 55 45 20 49 4e 44 45 58 20 61 76 31 5f 69  IQUE INDEX av1_i
3a30: 20 4f 4e 20 61 76 31 28 61 29 3b 0a 20 20 7d 0a   ON av1(a);.  }.
3a40: 7d 20 7b 31 20 7b 69 6e 64 65 78 65 64 20 63 6f  } {1 {indexed co
3a50: 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 75 6e  lumns are not un
3a60: 69 71 75 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ique}}.do_test a
3a70: 75 74 6f 76 61 63 75 75 6d 2d 34 2e 33 20 7b 0a  utovacuum-4.3 {.
3a80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3a90: 53 45 4c 45 43 54 20 73 75 6d 28 61 29 20 46 52  SELECT sum(a) FR
3aa0: 4f 4d 20 61 76 31 3b 0a 20 20 7d 0a 7d 20 7b 35  OM av1;.  }.} {5
3ab0: 30 34 39 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  049}.do_test aut
3ac0: 6f 76 61 63 75 75 6d 2d 34 2e 34 20 7b 0a 20 20  ovacuum-4.4 {.  
3ad0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f  execsql {.    CO
3ae0: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  MMIT;.  }.} {}..
3af0: 69 66 63 61 70 61 62 6c 65 20 69 6e 74 65 67 72  ifcapable integr
3b00: 69 74 79 63 6b 20 7b 0a 0a 23 20 54 69 63 6b 65  ityck {..# Ticke
3b10: 74 20 23 31 37 32 37 0a 64 6f 5f 74 65 73 74 20  t #1727.do_test 
3b20: 61 75 74 6f 76 61 63 75 75 6d 2d 35 2e 31 20 7b  autovacuum-5.1 {
3b30: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
3b40: 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79  lite3 db :memory
3b50: 3a 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  :.  db eval {.  
3b60: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
3b70: 63 75 75 6d 3d 31 3b 0a 20 20 20 20 43 52 45 41  cuum=1;.    CREA
3b80: 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a  TE TABLE t1(a);.
3b90: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3ba0: 20 74 32 28 61 29 3b 0a 20 20 20 20 44 52 4f 50   t2(a);.    DROP
3bb0: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 50   TABLE t1;.    P
3bc0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
3bd0: 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 6f 6b 0a  check;.  }.} ok.
3be0: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 37  .}..# Ticket #17
3bf0: 32 38 2e 0a 23 0a 23 20 49 6e 20 61 75 74 6f 76  28..#.# In autov
3c00: 61 63 75 75 6d 20 6d 6f 64 65 2c 20 77 68 65 6e  acuum mode, when
3c10: 20 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 69 63   tables or indic
3c20: 65 73 20 61 72 65 20 64 65 6c 65 74 65 64 2c 20  es are deleted, 
3c30: 74 68 65 20 72 6f 6f 74 70 61 67 65 0a 23 20 76  the rootpage.# v
3c40: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 73 79 6d  alues in the sym
3c50: 62 6f 6c 20 74 61 62 6c 65 20 68 61 76 65 20 74  bol table have t
3c60: 6f 20 62 65 20 75 70 64 61 74 65 64 2e 20 20 54  o be updated.  T
3c70: 68 65 72 65 20 77 61 73 20 61 20 62 75 67 20 69  here was a bug i
3c80: 6e 20 74 68 69 73 0a 23 20 6c 6f 67 69 63 20 73  n this.# logic s
3c90: 6f 20 74 68 61 74 20 69 66 20 61 6e 20 69 6e 64  o that if an ind
3ca0: 65 78 2f 74 61 62 6c 65 20 77 61 73 20 6d 6f 76  ex/table was mov
3cb0: 65 64 20 74 77 69 63 65 2c 20 74 68 65 20 73 65  ed twice, the se
3cc0: 63 6f 6e 64 20 6d 6f 76 65 20 6d 69 67 68 74 0a  cond move might.
3cd0: 23 20 6e 6f 74 20 6f 63 63 75 72 2e 20 20 54 68  # not occur.  Th
3ce0: 69 73 20 77 6f 75 6c 64 20 6c 65 61 76 65 20 74  is would leave t
3cf0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 73 79 6d 62  he internal symb
3d00: 6f 6c 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 69  ol table in an i
3d10: 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 23 20 73 74  nconsistent.# st
3d20: 61 74 65 20 63 61 75 73 69 6e 67 20 73 75 62 73  ate causing subs
3d30: 65 71 75 65 6e 74 20 73 74 61 74 65 6d 65 6e 74  equent statement
3d40: 73 20 74 6f 20 66 61 69 6c 2e 0a 23 0a 23 20 54  s to fail..#.# T
3d50: 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 20 64 69  he problem is di
3d60: 66 66 69 63 75 6c 74 20 74 6f 20 72 65 70 72 6f  fficult to repro
3d70: 64 75 63 65 2e 20 20 54 68 65 20 73 65 71 75 65  duce.  The seque
3d80: 6e 63 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  nce of statement
3d90: 73 20 69 6e 0a 23 20 74 68 65 20 66 6f 6c 6c 6f  s in.# the follo
3da0: 77 69 6e 67 20 74 65 73 74 20 61 72 65 20 63 61  wing test are ca
3db0: 72 65 66 75 6c 6c 79 20 64 65 73 69 67 6e 65 64  refully designed
3dc0: 20 6d 61 6b 65 20 69 74 20 6f 63 63 75 72 20 61   make it occur a
3dd0: 6e 64 20 74 68 75 73 20 74 6f 0a 23 20 76 65 72  nd thus to.# ver
3de0: 69 66 79 20 74 68 61 74 20 74 68 69 73 20 76 65  ify that this ve
3df0: 72 79 20 6f 62 73 63 75 72 65 20 62 75 67 20 68  ry obscure bug h
3e00: 61 73 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  as been resolved
3e10: 2e 0a 23 20 0a 69 66 63 61 70 61 62 6c 65 20 69  ..# .ifcapable i
3e20: 6e 74 65 67 72 69 74 79 63 6b 26 26 6d 65 6d 6f  ntegrityck&&memo
3e30: 72 79 64 62 20 7b 0a 0a 64 6f 5f 74 65 73 74 20  rydb {..do_test 
3e40: 61 75 74 6f 76 61 63 75 75 6d 2d 36 2e 31 20 7b  autovacuum-6.1 {
3e50: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
3e60: 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79  lite3 db :memory
3e70: 3a 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  :.  db eval {.  
3e80: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
3e90: 63 75 75 6d 3d 31 3b 0a 20 20 20 20 43 52 45 41  cuum=1;.    CREA
3ea0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
3eb0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
3ec0: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 3b  DEX i1 ON t1(a);
3ed0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3ee0: 45 20 74 32 28 61 29 3b 0a 20 20 20 20 43 52 45  E t2(a);.    CRE
3ef0: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
3f00: 74 32 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54  t2(a);.    CREAT
3f10: 45 20 54 41 42 4c 45 20 74 33 28 61 29 3b 0a 20  E TABLE t3(a);. 
3f20: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
3f30: 69 33 20 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20  i3 ON t2(a);.   
3f40: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 78 20   CREATE INDEX x 
3f50: 4f 4e 20 74 31 28 62 29 3b 0a 20 20 20 20 44 52  ON t1(b);.    DR
3f60: 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 20  OP TABLE t3;.   
3f70: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
3f80: 79 5f 63 68 65 63 6b 3b 0a 20 20 20 20 44 52 4f  y_check;.    DRO
3f90: 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20  P TABLE t2;.    
3fa0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
3fb0: 5f 63 68 65 63 6b 3b 0a 20 20 20 20 44 52 4f 50  _check;.    DROP
3fc0: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 50   TABLE t1;.    P
3fd0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
3fe0: 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 6f 6b  check;.  }.} {ok
3ff0: 20 6f 6b 20 6f 6b 7d 0a 0a 7d 0a 0a 66 69 6e 69   ok ok}..}..fini
4000: 73 68 5f 74 65 73 74 0a                          sh_test.