SQLite4
Hex Artifact Content
Not logged in

Artifact 776b9cb0383175b2af9157aca2f2988c4703705c:


0000: 23 20 32 30 31 30 20 53 65 70 74 65 6d 62 65 72  # 2010 September
0010: 20 31 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f   1.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 2a 2a 2a 2a 2a 0a 23 0a 0a 73 65 74 20  ********.#..set 
0170: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0180: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0190: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
01a0: 73 74 65 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20  ster.tcl.source 
01b0: 24 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f  $testdir/malloc_
01c0: 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 75 6e 73 65  common.tcl..unse
01d0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 65  t -nocomplain de
01e0: 66 61 75 6c 74 56 66 73 0a 73 65 74 20 64 65 66  faultVfs.set def
01f0: 61 75 6c 74 56 66 73 20 5b 66 69 6c 65 5f 63 6f  aultVfs [file_co
0200: 6e 74 72 6f 6c 5f 76 66 73 6e 61 6d 65 20 64 62  ntrol_vfsname db
0210: 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f 74  ].db close..do_t
0220: 65 73 74 20 71 75 6f 74 61 2d 31 2e 31 20 7b 20  est quota-1.1 { 
0230: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 69 6e  sqlite4_quota_in
0240: 69 74 69 61 6c 69 7a 65 20 6e 6f 73 75 63 68 76  itialize nosuchv
0250: 66 73 20 31 20 7d 20 7b 53 51 4c 49 54 45 34 5f  fs 1 } {SQLITE4_
0260: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 71  ERROR}.do_test q
0270: 75 6f 74 61 2d 31 2e 32 20 7b 20 73 71 6c 69 74  uota-1.2 { sqlit
0280: 65 34 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c  e4_quota_initial
0290: 69 7a 65 20 22 22 20 31 20 7d 20 20 20 20 20 20  ize "" 1 }      
02a0: 20 20 7b 53 51 4c 49 54 45 34 5f 4f 4b 7d 0a 64    {SQLITE4_OK}.d
02b0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 31 2e 33  o_test quota-1.3
02c0: 20 7b 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61   { sqlite4_quota
02d0: 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31  _initialize "" 1
02e0: 20 7d 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54   }        {SQLIT
02f0: 45 34 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65  E4_MISUSE}.do_te
0300: 73 74 20 71 75 6f 74 61 2d 31 2e 34 20 7b 20 73  st quota-1.4 { s
0310: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 68 75  qlite4_quota_shu
0320: 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20  tdown }         
0330: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 34 5f 4f        {SQLITE4_O
0340: 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  K}..do_test quot
0350: 61 2d 31 2e 35 20 7b 20 73 71 6c 69 74 65 34 5f  a-1.5 { sqlite4_
0360: 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65  quota_initialize
0370: 20 22 22 20 30 20 7d 20 20 20 20 20 20 20 20 7b   "" 0 }        {
0380: 53 51 4c 49 54 45 34 5f 4f 4b 7d 0a 64 6f 5f 74  SQLITE4_OK}.do_t
0390: 65 73 74 20 71 75 6f 74 61 2d 31 2e 36 20 7b 20  est quota-1.6 { 
03a0: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 68  sqlite4_quota_sh
03b0: 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20  utdown }        
03c0: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 34 5f         {SQLITE4_
03d0: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  OK}.do_test quot
03e0: 61 2d 31 2e 37 20 7b 20 73 71 6c 69 74 65 34 5f  a-1.7 { sqlite4_
03f0: 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65  quota_initialize
0400: 20 22 22 20 31 20 7d 20 20 20 20 20 20 20 20 7b   "" 1 }        {
0410: 53 51 4c 49 54 45 34 5f 4f 4b 7d 0a 64 6f 5f 74  SQLITE4_OK}.do_t
0420: 65 73 74 20 71 75 6f 74 61 2d 31 2e 38 20 7b 20  est quota-1.8 { 
0430: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 68  sqlite4_quota_sh
0440: 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20  utdown }        
0450: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 34 5f         {SQLITE4_
0460: 4f 4b 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  OK}...#---------
0470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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: 0a 23 20 53 6f 6d 65 20 73 69 6d 70 6c 65 20 77  .# Some simple w
04c0: 61 72 6d 2d 62 6f 64 79 20 74 65 73 74 73 20 77  arm-body tests w
04d0: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 61 74  ith a single dat
04e0: 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 72 6f  abase file in ro
04f0: 6c 6c 62 61 63 6b 20 0a 23 20 6d 6f 64 65 3a 0a  llback .# mode:.
0500: 23 0a 23 20 20 20 71 75 6f 74 61 2d 32 2e 31 2e  #.#   quota-2.1.
0510: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 53 51 4c  *: Test that SQL
0520: 49 54 45 34 5f 46 55 4c 4c 20 69 73 20 72 65 74  ITE4_FULL is ret
0530: 75 72 6e 65 64 20 69 66 20 74 68 65 20 64 61 74  urned if the dat
0540: 61 62 61 73 65 20 77 6f 75 6c 64 0a 23 20 20 20  abase would.#   
0550: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 63               exc
0560: 65 65 64 20 74 68 65 20 63 6f 6e 66 69 67 75 72  eed the configur
0570: 65 64 20 71 75 6f 74 61 2e 0a 23 0a 23 20 20 20  ed quota..#.#   
0580: 71 75 6f 74 61 2d 32 2e 32 2e 2a 3a 20 54 65 73  quota-2.2.*: Tes
0590: 74 20 74 68 61 74 20 53 51 4c 49 54 45 34 5f 46  t that SQLITE4_F
05a0: 55 4c 4c 20 69 73 20 6e 6f 74 20 72 65 74 75 72  ULL is not retur
05b0: 6e 65 64 20 61 6e 64 20 74 68 65 20 64 61 74 61  ned and the data
05c0: 62 61 73 65 0a 23 20 20 20 20 20 20 20 20 20 20  base.#          
05d0: 20 20 20 20 20 20 67 72 6f 77 73 20 69 66 20 74        grows if t
05e0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 78 74 65  he callback exte
05f0: 6e 64 73 20 74 68 65 20 71 75 6f 74 61 20 77 68  nds the quota wh
0600: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
0610: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
0620: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 67 72 6f   attempts to gro
0630: 77 20 62 65 79 6f 6e 64 20 74 68 65 20 63 6f 6e  w beyond the con
0640: 66 69 67 75 72 65 64 20 71 75 6f 74 61 2e 0a 23  figured quota..#
0650: 0a 23 20 20 20 71 75 6f 74 61 2d 32 2e 33 2e 2a  .#   quota-2.3.*
0660: 3a 20 4f 70 65 6e 20 61 6e 64 20 63 6c 6f 73 65  : Open and close
0670: 20 61 20 64 62 20 74 68 61 74 20 69 73 20 6e 6f   a db that is no
0680: 74 20 70 61 72 74 20 6f 66 20 61 6e 79 20 71 75  t part of any qu
0690: 6f 74 61 20 67 72 6f 75 70 2e 20 41 74 0a 23 20  ota group. At.# 
06a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
06b0: 6e 65 20 70 6f 69 6e 74 20 74 68 69 73 20 77 61  ne point this wa
06c0: 73 20 63 61 75 73 69 6e 67 20 6d 75 74 65 78 20  s causing mutex 
06d0: 72 65 66 73 20 74 6f 20 62 65 20 6c 65 61 6b 65  refs to be leake
06e0: 64 2e 0a 23 0a 23 20 20 20 71 75 6f 74 61 2d 32  d..#.#   quota-2
06f0: 2e 34 2e 2a 3a 20 54 72 79 20 74 6f 20 73 68 75  .4.*: Try to shu
0700: 74 64 6f 77 6e 20 74 68 65 20 71 75 6f 74 61 20  tdown the quota 
0710: 73 79 73 74 65 6d 20 62 65 66 6f 72 65 20 63 6c  system before cl
0720: 6f 73 69 6e 67 20 74 68 65 20 64 62 0a 23 20 20  osing the db.#  
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
0740: 6c 65 2e 20 43 68 65 63 6b 20 74 68 61 74 20 74  le. Check that t
0750: 68 69 73 20 66 61 69 6c 73 20 61 6e 64 20 74 68  his fails and th
0760: 65 20 71 75 6f 74 61 20 73 79 73 74 65 6d 20 73  e quota system s
0770: 74 69 6c 6c 20 77 6f 72 6b 73 0a 23 20 20 20 20  till works.#    
0780: 20 20 20 20 20 20 20 20 20 20 20 20 61 66 74 65              afte
0790: 72 77 61 72 64 73 2e 20 54 68 65 6e 20 63 6c 6f  rwards. Then clo
07a0: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  se the database 
07b0: 61 6e 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79  and successfully
07c0: 20 73 68 75 74 0a 23 20 20 20 20 20 20 20 20 20   shut.#         
07d0: 20 20 20 20 20 20 20 64 6f 77 6e 20 74 68 65 20         down the 
07e0: 71 75 6f 74 61 20 73 79 73 74 65 6d 2e 0a 23 20  quota system..# 
07f0: 20 20 0a 73 71 6c 69 74 65 34 5f 71 75 6f 74 61    .sqlite4_quota
0800: 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31  _initialize "" 1
0810: 0a 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  ..unset -nocompl
0820: 61 69 6e 20 71 75 6f 74 61 5f 72 65 71 75 65 73  ain quota_reques
0830: 74 5f 6f 6b 0a 70 72 6f 63 20 71 75 6f 74 61 5f  t_ok.proc quota_
0840: 63 68 65 63 6b 20 7b 66 69 6c 65 6e 61 6d 65 20  check {filename 
0850: 6c 69 6d 69 74 76 61 72 20 73 69 7a 65 7d 20 7b  limitvar size} {
0860: 0a 20 20 75 70 76 61 72 20 24 6c 69 6d 69 74 76  .  upvar $limitv
0870: 61 72 20 6c 69 6d 69 74 0a 0a 20 20 6c 61 70 70  ar limit..  lapp
0880: 65 6e 64 20 3a 3a 71 75 6f 74 61 20 5b 73 65 74  end ::quota [set
0890: 20 6c 69 6d 69 74 5d 20 24 73 69 7a 65 0a 20 20   limit] $size.  
08a0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
08b0: 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65 73 74   ::quota_request
08c0: 5f 6f 6b 5d 7d 20 7b 20 73 65 74 20 6c 69 6d 69  _ok]} { set limi
08d0: 74 20 24 73 69 7a 65 20 7d 0a 7d 0a 0a 64 6f 5f  t $size }.}..do_
08e0: 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 31 2e 31  test quota-2.1.1
08f0: 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f   {.  sqlite4_quo
0900: 74 61 5f 73 65 74 20 2a 74 65 73 74 2e 64 62 20  ta_set *test.db 
0910: 34 30 39 36 20 71 75 6f 74 61 5f 63 68 65 63 6b  4096 quota_check
0920: 0a 7d 20 7b 53 51 4c 49 54 45 34 5f 4f 4b 7d 0a  .} {SQLITE4_OK}.
0930: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 32 2e  do_test quota-2.
0940: 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 34 20  1.2 {.  sqlite4 
0950: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
0960: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
0970: 41 20 70 61 67 65 5f 73 69 7a 65 3d 31 30 32 34  A page_size=1024
0980: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74  ;.    PRAGMA aut
0990: 6f 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20  o_vacuum=OFF;.  
09a0: 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c    PRAGMA journal
09b0: 5f 6d 6f 64 65 3d 44 45 4c 45 54 45 3b 0a 20 20  _mode=DELETE;.  
09c0: 7d 0a 20 20 73 65 74 20 3a 3a 71 75 6f 74 61 20  }.  set ::quota 
09d0: 5b 6c 69 73 74 5d 0a 20 20 65 78 65 63 73 71 6c  [list].  execsql
09e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
09f0: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20  BLE t1(a, b);.  
0a00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0a10: 20 56 41 4c 55 45 53 28 31 2c 20 72 61 6e 64 6f   VALUES(1, rando
0a20: 6d 62 6c 6f 62 28 31 31 30 30 29 29 3b 0a 20 20  mblob(1100));.  
0a30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0a40: 20 56 41 4c 55 45 53 28 32 2c 20 72 61 6e 64 6f   VALUES(2, rando
0a50: 6d 62 6c 6f 62 28 31 31 30 30 29 29 3b 0a 20 20  mblob(1100));.  
0a60: 7d 0a 20 20 73 65 74 20 3a 3a 71 75 6f 74 61 0a  }.  set ::quota.
0a70: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  } {}.do_test quo
0a80: 74 61 2d 32 2e 31 2e 32 2e 31 20 7b 0a 20 20 66  ta-2.1.2.1 {.  f
0a90: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 76 66 73 6e  ile_control_vfsn
0aa0: 61 6d 65 20 64 62 0a 7d 20 71 75 6f 74 61 2f 24  ame db.} quota/$
0ab0: 64 65 66 61 75 6c 74 56 66 73 0a 64 6f 5f 74 65  defaultVfs.do_te
0ac0: 73 74 20 71 75 6f 74 61 2d 32 2e 31 2e 33 20 7b  st quota-2.1.3 {
0ad0: 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e   file size test.
0ae0: 64 62 20 7d 20 7b 34 30 39 36 7d 0a 64 6f 5f 74  db } {4096}.do_t
0af0: 65 73 74 20 71 75 6f 74 61 2d 32 2e 31 2e 34 20  est quota-2.1.4 
0b00: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49  {.  catchsql { I
0b10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0b20: 4c 55 45 53 28 33 2c 20 72 61 6e 64 6f 6d 62 6c  LUES(3, randombl
0b30: 6f 62 28 31 31 30 30 29 29 20 7d 0a 7d 20 7b 31  ob(1100)) }.} {1
0b40: 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69   {database or di
0b50: 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f  sk is full}}.do_
0b60: 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 31 2e 35  test quota-2.1.5
0b70: 20 7b 20 73 65 74 20 3a 3a 71 75 6f 74 61 20 7d   { set ::quota }
0b80: 20 7b 34 30 39 36 20 35 31 32 30 7d 0a 0a 73 65   {4096 5120}..se
0b90: 74 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65 73  t ::quota_reques
0ba0: 74 5f 6f 6b 20 31 0a 73 65 74 20 3a 3a 71 75 6f  t_ok 1.set ::quo
0bb0: 74 61 20 5b 6c 69 73 74 5d 0a 64 6f 5f 74 65 73  ta [list].do_tes
0bc0: 74 20 71 75 6f 74 61 2d 32 2e 32 2e 31 20 7b 0a  t quota-2.2.1 {.
0bd0: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
0be0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0bf0: 53 28 33 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  S(3, randomblob(
0c00: 31 31 30 30 29 29 20 7d 0a 7d 20 7b 7d 0a 64 6f  1100)) }.} {}.do
0c10: 5f 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 32 2e  _test quota-2.2.
0c20: 32 20 7b 20 73 65 74 20 3a 3a 71 75 6f 74 61 20  2 { set ::quota 
0c30: 7d 20 7b 34 30 39 36 20 35 31 32 30 7d 0a 64 6f  } {4096 5120}.do
0c40: 5f 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 32 2e  _test quota-2.2.
0c50: 33 20 7b 20 66 69 6c 65 20 73 69 7a 65 20 74 65  3 { file size te
0c60: 73 74 2e 64 62 20 7d 20 7b 35 31 32 30 7d 0a 75  st.db } {5120}.u
0c70: 6e 73 65 74 20 3a 3a 71 75 6f 74 61 5f 72 65 71  nset ::quota_req
0c80: 75 65 73 74 5f 6f 6b 0a 0a 64 6f 5f 74 65 73 74  uest_ok..do_test
0c90: 20 71 75 6f 74 61 2d 32 2e 33 2e 31 20 7b 0a 20   quota-2.3.1 {. 
0ca0: 20 73 71 6c 69 74 65 34 20 64 62 32 20 62 61 6b   sqlite4 db2 bak
0cb0: 2e 64 62 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  .db.  db2 close.
0cc0: 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75  } {}..do_test qu
0cd0: 6f 74 61 2d 32 2e 34 2e 31 20 7b 0a 20 20 73 71  ota-2.4.1 {.  sq
0ce0: 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 68 75 74  lite4_quota_shut
0cf0: 64 6f 77 6e 0a 7d 20 7b 53 51 4c 49 54 45 34 5f  down.} {SQLITE4_
0d00: 4d 49 53 55 53 45 7d 0a 73 65 74 20 3a 3a 71 75  MISUSE}.set ::qu
0d10: 6f 74 61 20 5b 6c 69 73 74 5d 0a 64 6f 5f 74 65  ota [list].do_te
0d20: 73 74 20 71 75 6f 74 61 2d 32 2e 34 2e 32 20 7b  st quota-2.4.2 {
0d30: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49 4e  .  catchsql { IN
0d40: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0d50: 55 45 53 28 33 2c 20 72 61 6e 64 6f 6d 62 6c 6f  UES(3, randomblo
0d60: 62 28 31 31 30 30 29 29 20 7d 0a 7d 20 7b 31 20  b(1100)) }.} {1 
0d70: 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73  {database or dis
0d80: 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f 74  k is full}}.do_t
0d90: 65 73 74 20 71 75 6f 74 61 2d 32 2e 34 2e 33 20  est quota-2.4.3 
0da0: 7b 20 73 65 74 20 3a 3a 71 75 6f 74 61 20 7d 20  { set ::quota } 
0db0: 7b 35 31 32 30 20 36 31 34 34 7d 0a 64 6f 5f 74  {5120 6144}.do_t
0dc0: 65 73 74 20 71 75 6f 74 61 2d 32 2e 34 2e 34 20  est quota-2.4.4 
0dd0: 7b 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74  { file size test
0de0: 2e 64 62 20 7d 20 7b 35 31 32 30 7d 0a 64 6f 5f  .db } {5120}.do_
0df0: 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 34 2e 39  test quota-2.4.9
0e00: 39 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  9 {.  db close. 
0e10: 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73   sqlite4_quota_s
0e20: 68 75 74 64 6f 77 6e 0a 7d 20 7b 53 51 4c 49 54  hutdown.} {SQLIT
0e30: 45 34 5f 4f 4b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  E4_OK}..#-------
0e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e80: 2d 2d 0a 23 20 54 72 79 20 73 6f 6d 65 20 74 65  --.# Try some te
0e90: 73 74 73 20 77 69 74 68 20 6d 6f 72 65 20 74 68  sts with more th
0ea0: 61 6e 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  an one connectio
0eb0: 6e 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20  n to a database 
0ec0: 66 69 6c 65 2e 20 53 74 69 6c 6c 0a 23 20 69 6e  file. Still.# in
0ed0: 20 72 6f 6c 6c 62 61 63 6b 20 6d 6f 64 65 2e 0a   rollback mode..
0ee0: 23 0a 23 20 20 20 71 75 6f 74 61 2d 33 2e 31 2e  #.#   quota-3.1.
0ef0: 2a 3a 20 54 77 6f 20 63 6f 6e 6e 65 63 74 69 6f  *: Two connectio
0f00: 6e 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64  ns to a single d
0f10: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 23 0a  atabase file..#.
0f20: 23 20 20 20 71 75 6f 74 61 2d 33 2e 32 2e 2a 3a  #   quota-3.2.*:
0f30: 20 54 77 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   Two connections
0f40: 20 74 6f 20 65 61 63 68 20 6f 66 20 73 65 76 65   to each of seve
0f50: 72 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  ral database fil
0f60: 65 73 20 28 74 68 61 74 0a 23 20 20 20 20 20 20  es (that.#      
0f70: 20 20 20 20 20 20 20 20 20 20 61 72 65 20 69 6e            are in
0f80: 20 74 68 65 20 73 61 6d 65 20 71 75 6f 74 61 20   the same quota 
0f90: 67 72 6f 75 70 29 2e 0a 23 0a 70 72 6f 63 20 71  group)..#.proc q
0fa0: 75 6f 74 61 5f 63 68 65 63 6b 20 7b 66 69 6c 65  uota_check {file
0fb0: 6e 61 6d 65 20 6c 69 6d 69 74 76 61 72 20 73 69  name limitvar si
0fc0: 7a 65 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c  ze} {.  upvar $l
0fd0: 69 6d 69 74 76 61 72 20 6c 69 6d 69 74 0a 20 20  imitvar limit.  
0fe0: 6c 61 70 70 65 6e 64 20 3a 3a 71 75 6f 74 61 20  lappend ::quota 
0ff0: 5b 73 65 74 20 6c 69 6d 69 74 5d 20 24 73 69 7a  [set limit] $siz
1000: 65 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78  e.  if {[info ex
1010: 69 73 74 73 20 3a 3a 71 75 6f 74 61 5f 72 65 71  ists ::quota_req
1020: 75 65 73 74 5f 6f 6b 5d 7d 20 7b 20 73 65 74 20  uest_ok]} { set 
1030: 6c 69 6d 69 74 20 24 73 69 7a 65 20 7d 0a 7d 0a  limit $size }.}.
1040: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33  .do_test quota-3
1050: 2e 31 2e 31 20 7b 0a 20 20 66 6f 72 63 65 64 65  .1.1 {.  forcede
1060: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73  lete test.db.  s
1070: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 69 6e 69  qlite4_quota_ini
1080: 74 69 61 6c 69 7a 65 20 22 22 20 31 0a 20 20 73  tialize "" 1.  s
1090: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74  qlite4_quota_set
10a0: 20 2a 74 65 73 74 2e 64 62 20 34 30 39 36 20 71   *test.db 4096 q
10b0: 75 6f 74 61 5f 63 68 65 63 6b 0a 7d 20 7b 53 51  uota_check.} {SQ
10c0: 4c 49 54 45 34 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  LITE4_OK}.do_tes
10d0: 74 20 71 75 6f 74 61 2d 33 2e 31 2e 32 20 7b 0a  t quota-3.1.2 {.
10e0: 20 20 73 71 6c 69 74 65 34 20 64 62 20 74 65 73    sqlite4 db tes
10f0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
1100: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65  .    PRAGMA page
1110: 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20 20  _size = 1024;.  
1120: 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c    PRAGMA journal
1130: 5f 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65 3b 0a  _mode = delete;.
1140: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
1150: 76 61 63 75 75 6d 20 3d 20 6f 66 66 3b 0a 20 20  vacuum = off;.  
1160: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1170: 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  1(a PRIMARY KEY,
1180: 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   b);.    INSERT 
1190: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
11a0: 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 7d 0a 20 20  , 'one');.  }.  
11b0: 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64  file size test.d
11c0: 62 0a 7d 20 7b 33 30 37 32 7d 0a 64 6f 5f 74 65  b.} {3072}.do_te
11d0: 73 74 20 71 75 6f 74 61 2d 33 2e 31 2e 33 20 7b  st quota-3.1.3 {
11e0: 0a 20 20 73 71 6c 69 74 65 34 20 64 62 32 20 74  .  sqlite4 db2 t
11f0: 65 73 74 2e 64 62 0a 20 20 73 65 74 20 3a 3a 71  est.db.  set ::q
1200: 75 6f 74 61 20 5b 6c 69 73 74 5d 0a 20 20 65 78  uota [list].  ex
1210: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54  ecsql { CREATE T
1220: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 20 7d 20  ABLE t2(a, b) } 
1230: 64 62 32 0a 20 20 73 65 74 20 3a 3a 71 75 6f 74  db2.  set ::quot
1240: 61 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71  a.} {}.do_test q
1250: 75 6f 74 61 2d 33 2e 31 2e 34 20 7b 0a 20 20 63  uota-3.1.4 {.  c
1260: 61 74 63 68 73 71 6c 20 7b 20 43 52 45 41 54 45  atchsql { CREATE
1270: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 29 20   TABLE t3(a, b) 
1280: 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65  }.} {1 {database
1290: 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c   or disk is full
12a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  }}.do_test quota
12b0: 2d 33 2e 31 2e 35 20 7b 0a 20 20 73 65 74 20 3a  -3.1.5 {.  set :
12c0: 3a 71 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f  :quota_request_o
12d0: 6b 20 31 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  k 1.  execsql { 
12e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
12f0: 61 2c 20 62 29 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  a, b) }.} {}.do_
1300: 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 31 2e 36  test quota-3.1.6
1310: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
1320: 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69  db2 close.  sqli
1330: 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 2a 74  te4_quota_set *t
1340: 65 73 74 2e 64 62 20 30 20 7b 7d 0a 7d 20 7b 53  est.db 0 {}.} {S
1350: 51 4c 49 54 45 34 5f 4f 4b 7d 0a 0a 64 6f 5f 74  QLITE4_OK}..do_t
1360: 65 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e 31 20  est quota-3.2.1 
1370: 7b 0a 20 20 64 65 6c 65 74 65 5f 66 69 6c 65 20  {.  delete_file 
1380: 66 6f 72 63 65 20 74 65 73 74 2e 64 62 20 74 65  force test.db te
1390: 73 74 32 2e 64 62 20 0a 0a 20 20 73 71 6c 69 74  st2.db ..  sqlit
13a0: 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 2a 20 34  e4_quota_set * 4
13b0: 30 39 36 20 7b 7d 0a 20 20 73 71 6c 69 74 65 34  096 {}.  sqlite4
13c0: 20 64 62 31 61 20 74 65 73 74 2e 64 62 0a 20 20   db1a test.db.  
13d0: 73 71 6c 69 74 65 34 20 64 62 32 61 20 74 65 73  sqlite4 db2a tes
13e0: 74 32 2e 64 62 0a 0a 20 20 66 6f 72 65 61 63 68  t2.db..  foreach
13f0: 20 64 62 20 7b 64 62 31 61 20 64 62 32 61 7d 20   db {db1a db2a} 
1400: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1410: 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
1420: 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20  e_size = 1024;. 
1430: 20 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72       PRAGMA jour
1440: 6e 61 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c 65 74  nal_mode = delet
1450: 65 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  e;.      PRAGMA 
1460: 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 6f 66  auto_vacuum = of
1470: 66 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  f;.      CREATE 
1480: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a  TABLE t1(a, b);.
1490: 20 20 20 20 7d 20 24 64 62 0a 20 20 7d 0a 0a 20      } $db.  }.. 
14a0: 20 73 71 6c 69 74 65 34 20 64 62 31 62 20 74 65   sqlite4 db1b te
14b0: 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 34 20  st.db.  sqlite4 
14c0: 64 62 32 62 20 74 65 73 74 32 2e 64 62 0a 0a 20  db2b test2.db.. 
14d0: 20 6c 69 73 74 20 5b 66 69 6c 65 20 73 69 7a 65   list [file size
14e0: 20 74 65 73 74 2e 64 62 5d 20 5b 66 69 6c 65 20   test.db] [file 
14f0: 73 69 7a 65 20 74 65 73 74 32 2e 64 62 5d 0a 7d  size test2.db].}
1500: 20 7b 32 30 34 38 20 32 30 34 38 7d 0a 0a 63 61   {2048 2048}..ca
1510: 74 63 68 20 7b 20 75 6e 73 65 74 20 3a 3a 71 75  tch { unset ::qu
1520: 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 20 7d  ota_request_ok }
1530: 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  ..do_test quota-
1540: 33 2e 32 2e 32 20 7b 20 65 78 65 63 73 71 6c 20  3.2.2 { execsql 
1550: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  { INSERT INTO t1
1560: 20 56 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27   VALUES('x', 'y'
1570: 29 20 7d 20 64 62 31 61 20 7d 20 7b 7d 0a 64 6f  ) } db1a } {}.do
1580: 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e  _test quota-3.2.
1590: 33 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e  3 { execsql { IN
15a0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
15b0: 55 45 53 28 27 76 27 2c 20 27 77 27 29 20 7d 20  UES('v', 'w') } 
15c0: 64 62 31 62 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73  db1b } {}.do_tes
15d0: 74 20 71 75 6f 74 61 2d 33 2e 32 2e 34 20 7b 20  t quota-3.2.4 { 
15e0: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
15f0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1600: 27 74 27 2c 20 27 75 27 29 20 7d 20 64 62 32 61  't', 'u') } db2a
1610: 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75   } {}.do_test qu
1620: 6f 74 61 2d 33 2e 32 2e 35 20 7b 20 65 78 65 63  ota-3.2.5 { exec
1630: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
1640: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 72 27 2c  O t1 VALUES('r',
1650: 20 27 73 27 29 20 7d 20 64 62 32 62 20 7d 20 7b   's') } db2b } {
1660: 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  }..do_test quota
1670: 2d 33 2e 32 2e 36 20 7b 20 0a 20 20 63 61 74 63  -3.2.6 { .  catc
1680: 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  hsql { INSERT IN
1690: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
16a0: 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61  domblob(500), ra
16b0: 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d  ndomblob(500)) }
16c0: 20 64 62 31 61 0a 7d 20 7b 31 20 7b 64 61 74 61   db1a.} {1 {data
16d0: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20  base or disk is 
16e0: 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  full}}.do_test q
16f0: 75 6f 74 61 2d 33 2e 32 2e 37 20 7b 20 0a 20 20  uota-3.2.7 { .  
1700: 63 61 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52  catchsql { INSER
1710: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1720: 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29  (randomblob(500)
1730: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30  , randomblob(500
1740: 29 29 20 7d 20 64 62 31 62 0a 7d 20 7b 31 20 7b  )) } db1b.} {1 {
1750: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
1760: 20 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65   is full}}.do_te
1770: 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e 38 20 7b  st quota-3.2.8 {
1780: 20 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49   .  catchsql { I
1790: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
17a0: 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  LUES(randomblob(
17b0: 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  500), randomblob
17c0: 28 35 30 30 29 29 20 7d 20 64 62 32 61 0a 7d 20  (500)) } db2a.} 
17d0: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20  {1 {database or 
17e0: 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 64  disk is full}}.d
17f0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 32  o_test quota-3.2
1800: 2e 39 20 7b 20 0a 20 20 63 61 74 63 68 73 71 6c  .9 { .  catchsql
1810: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
1820: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62  1 VALUES(randomb
1830: 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d  lob(500), random
1840: 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 32  blob(500)) } db2
1850: 62 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65  b.} {1 {database
1860: 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c   or disk is full
1870: 7d 7d 0a 0a 73 65 74 20 3a 3a 71 75 6f 74 61 20  }}..set ::quota 
1880: 5b 6c 69 73 74 5d 0a 70 72 6f 63 20 71 75 6f 74  [list].proc quot
1890: 61 5f 63 61 6c 6c 62 61 63 6b 20 7b 66 69 6c 65  a_callback {file
18a0: 20 6c 69 6d 69 74 76 61 72 20 73 69 7a 65 7d 20   limitvar size} 
18b0: 7b 0a 20 20 75 70 76 61 72 20 24 6c 69 6d 69 74  {.  upvar $limit
18c0: 76 61 72 20 6c 69 6d 69 74 0a 20 20 69 66 20 7b  var limit.  if {
18d0: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
18e0: 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64  platform)=="wind
18f0: 6f 77 73 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  ows"} {.    set 
1900: 66 69 6c 65 20 5b 20 6c 69 6e 64 65 78 20 5b 73  file [ lindex [s
1910: 74 72 69 6e 67 20 6d 61 70 20 7b 5c 5c 20 5c 2f  tring map {\\ \/
1920: 7d 20 24 66 69 6c 65 5d 20 30 20 5d 0a 20 20 7d  } $file] 0 ].  }
1930: 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 71 75 6f  .  lappend ::quo
1940: 74 61 20 24 66 69 6c 65 20 24 73 69 7a 65 0a 20  ta $file $size. 
1950: 20 73 65 74 20 6c 69 6d 69 74 20 30 0a 7d 0a 73   set limit 0.}.s
1960: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74  qlite4_quota_set
1970: 20 2a 20 34 30 39 36 20 71 75 6f 74 61 5f 63 61   * 4096 quota_ca
1980: 6c 6c 62 61 63 6b 0a 64 6f 5f 74 65 73 74 20 71  llback.do_test q
1990: 75 6f 74 61 2d 33 2e 33 2e 31 20 7b 20 0a 20 20  uota-3.3.1 { .  
19a0: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
19b0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
19c0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c  randomblob(500),
19d0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29   randomblob(500)
19e0: 29 20 7d 20 64 62 31 61 0a 20 20 65 78 65 63 73  ) } db1a.  execs
19f0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
1a00: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f   t1 VALUES(rando
1a10: 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64  mblob(500), rand
1a20: 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64  omblob(500)) } d
1a30: 62 31 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  b1b.  execsql { 
1a40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1a50: 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62  ALUES(randomblob
1a60: 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  (500), randomblo
1a70: 62 28 35 30 30 29 29 20 7d 20 64 62 32 61 0a 20  b(500)) } db2a. 
1a80: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
1a90: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1aa0: 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29  (randomblob(500)
1ab0: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30  , randomblob(500
1ac0: 29 29 20 7d 20 64 62 32 62 0a 20 20 73 65 74 20  )) } db2b.  set 
1ad0: 3a 3a 71 75 6f 74 61 0a 7d 20 5b 6c 69 73 74 20  ::quota.} [list 
1ae0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d  [file join [pwd]
1af0: 20 74 65 73 74 2e 64 62 5d 20 35 31 32 30 5d 0a   test.db] 5120].
1b00: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33  .do_test quota-3
1b10: 2e 32 2e 58 20 7b 0a 20 20 66 6f 72 65 61 63 68  .2.X {.  foreach
1b20: 20 64 62 20 7b 64 62 31 61 20 64 62 32 61 20 64   db {db1a db2a d
1b30: 62 32 62 20 64 62 31 62 7d 20 7b 20 63 61 74 63  b2b db1b} { catc
1b40: 68 20 7b 20 24 64 62 20 63 6c 6f 73 65 20 7d 20  h { $db close } 
1b50: 7d 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74  }.  sqlite4_quot
1b60: 61 5f 73 65 74 20 2a 20 30 20 7b 7d 0a 7d 20 7b  a_set * 0 {}.} {
1b70: 53 51 4c 49 54 45 34 5f 4f 4b 7d 0a 0a 23 2d 2d  SQLITE4_OK}..#--
1b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1bc0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 51 75 6f 74 61 73  -------.# Quotas
1bd0: 20 61 72 65 20 64 65 6c 65 74 65 64 20 77 68 65   are deleted whe
1be0: 6e 20 75 6e 75 73 65 64 20 61 6e 64 20 77 68 65  n unused and whe
1bf0: 6e 20 74 68 65 69 72 20 6c 69 6d 69 74 20 69 73  n their limit is
1c00: 20 73 65 74 20 74 6f 20 7a 65 72 6f 0a 23 0a 0a   set to zero.#..
1c10: 23 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20  # Return a list 
1c20: 6f 66 20 61 6c 6c 20 63 75 72 72 65 6e 74 6c 79  of all currently
1c30: 20 64 65 66 69 6e 65 64 20 71 75 6f 74 61 73 2e   defined quotas.
1c40: 20 20 45 61 63 68 20 71 75 6f 74 61 20 69 73 20    Each quota is 
1c50: 69 64 65 6e 74 69 66 69 65 64 0a 23 20 62 79 20  identified.# by 
1c60: 69 74 73 20 70 61 74 74 65 72 6e 2e 0a 70 72 6f  its pattern..pro
1c70: 63 20 71 75 6f 74 61 5f 6c 69 73 74 20 7b 7d 20  c quota_list {} 
1c80: 7b 0a 20 20 73 65 74 20 61 6c 6c 71 20 7b 7d 0a  {.  set allq {}.
1c90: 20 20 66 6f 72 65 61 63 68 20 71 20 5b 73 71 6c    foreach q [sql
1ca0: 69 74 65 34 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite4_quota_dump]
1cb0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 61   {.    lappend a
1cc0: 6c 6c 71 20 5b 6c 69 6e 64 65 78 20 24 71 20 30  llq [lindex $q 0
1cd0: 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 5b  ].  }.  return [
1ce0: 6c 73 6f 72 74 20 24 61 6c 6c 71 5d 0a 7d 0a 70  lsort $allq].}.p
1cf0: 72 6f 63 20 71 75 6f 74 61 5f 73 69 7a 65 20 7b  roc quota_size {
1d00: 6e 61 6d 65 7d 20 7b 0a 20 20 73 65 74 20 61 6c  name} {.  set al
1d10: 6c 71 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20  lq {}.  foreach 
1d20: 71 20 5b 73 71 6c 69 74 65 34 5f 71 75 6f 74 61  q [sqlite4_quota
1d30: 5f 64 75 6d 70 5d 20 7b 0a 20 20 20 20 69 66 20  _dump] {.    if 
1d40: 7b 5b 6c 69 6e 64 65 78 20 24 71 20 30 5d 3d 3d  {[lindex $q 0]==
1d50: 24 6e 61 6d 65 7d 20 7b 72 65 74 75 72 6e 20 5b  $name} {return [
1d60: 6c 69 6e 64 65 78 20 24 71 20 32 5d 7d 0a 20 20  lindex $q 2]}.  
1d70: 7d 0a 20 20 72 65 74 75 72 6e 20 30 0a 7d 0a 0a  }.  return 0.}..
1d80: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
1d90: 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f  1.1 {.  sqlite4_
1da0: 71 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74 2e  quota_set *test.
1db0: 64 62 20 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f  db 0 {}.  quota_
1dc0: 6c 69 73 74 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  list.} {}.do_tes
1dd0: 74 20 71 75 6f 74 61 2d 34 2e 31 2e 32 20 7b 0a  t quota-4.1.2 {.
1de0: 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f    sqlite4_quota_
1df0: 73 65 74 20 2a 74 65 73 74 2e 64 62 20 34 30 39  set *test.db 409
1e00: 36 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73  6 {}.  quota_lis
1e10: 74 0a 7d 20 7b 2a 74 65 73 74 2e 64 62 7d 0a 64  t.} {*test.db}.d
1e20: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31  o_test quota-4.1
1e30: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f 71  .3 {.  sqlite4_q
1e40: 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74 32 2e  uota_set *test2.
1e50: 64 62 20 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f  db 0 {}.  quota_
1e60: 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74 2e 64 62  list.} {*test.db
1e70: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
1e80: 34 2e 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  4.1.4 {.  sqlite
1e90: 34 5f 71 75 6f 74 61 5f 73 65 74 20 2a 74 65 73  4_quota_set *tes
1ea0: 74 32 2e 64 62 20 31 30 30 30 30 30 20 7b 7d 0a  t2.db 100000 {}.
1eb0: 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b    quota_list.} {
1ec0: 2a 74 65 73 74 2e 64 62 20 2a 74 65 73 74 32 2e  *test.db *test2.
1ed0: 64 62 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  db}.do_test quot
1ee0: 61 2d 34 2e 31 2e 35 20 7b 0a 20 20 73 71 6c 69  a-4.1.5 {.  sqli
1ef0: 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 2a 74  te4_quota_set *t
1f00: 65 73 74 2e 64 62 20 30 20 7b 7d 0a 20 20 71 75  est.db 0 {}.  qu
1f10: 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65 73  ota_list.} {*tes
1f20: 74 32 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20 71  t2.db}.do_test q
1f30: 75 6f 74 61 2d 34 2e 31 2e 36 20 7b 0a 20 20 66  uota-4.1.6 {.  f
1f40: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
1f50: 2e 64 62 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75  .db test2.db-jou
1f60: 72 6e 61 6c 20 74 65 73 74 32 2e 64 62 2d 77 61  rnal test2.db-wa
1f70: 6c 0a 20 20 73 71 6c 69 74 65 34 20 64 62 20 74  l.  sqlite4 db t
1f80: 65 73 74 32 2e 64 62 0a 20 20 64 62 20 65 76 61  est2.db.  db eva
1f90: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
1fa0: 74 32 28 78 29 3b 20 49 4e 53 45 52 54 20 49 4e  t2(x); INSERT IN
1fb0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 74 61  TO t2 VALUES('ta
1fc0: 62 2d 74 32 27 29 3b 7d 0a 20 20 71 75 6f 74 61  b-t2');}.  quota
1fd0: 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74 32 2e  _list.} {*test2.
1fe0: 64 62 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  db}.do_test quot
1ff0: 61 2d 34 2e 31 2e 37 20 7b 0a 20 20 63 61 74 63  a-4.1.7 {.  catc
2000: 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  hsql {INSERT INT
2010: 4f 20 74 32 20 56 41 4c 55 45 53 28 7a 65 72 6f  O t2 VALUES(zero
2020: 62 6c 6f 62 28 32 30 30 30 30 30 29 29 7d 0a 7d  blob(200000))}.}
2030: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 6f 72   {1 {database or
2040: 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a   disk is full}}.
2050: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
2060: 31 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 34 20  1.8 {.  sqlite4 
2070: 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 64  db2 test2.db.  d
2080: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
2090: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 74 61  * FROM t2}.} {ta
20a0: 62 2d 74 32 7d 0a 64 6f 5f 74 65 73 74 20 71 75  b-t2}.do_test qu
20b0: 6f 74 61 2d 34 2e 31 2e 39 20 7b 0a 20 20 73 71  ota-4.1.9 {.  sq
20c0: 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20  lite4_quota_set 
20d0: 2a 74 65 73 74 32 2e 64 62 20 30 20 7b 7d 0a 20  *test2.db 0 {}. 
20e0: 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52   catchsql {INSER
20f0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
2100: 28 7a 65 72 6f 62 6c 6f 62 28 32 30 30 30 30 30  (zeroblob(200000
2110: 29 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ))}.} {0 {}}.do_
2120: 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 31  test quota-4.1.1
2130: 30 20 7b 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74  0 {.  quota_list
2140: 0a 7d 20 7b 2a 74 65 73 74 32 2e 64 62 7d 0a 64  .} {*test2.db}.d
2150: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31  o_test quota-4.1
2160: 2e 31 31 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73  .11 {.  db2 clos
2170: 65 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d  e.  quota_list.}
2180: 20 7b 2a 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f   {*test2.db}.do_
2190: 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 31  test quota-4.1.1
21a0: 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  2 {.  db close. 
21b0: 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d   quota_list.} {}
21c0: 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  ..do_test quota-
21d0: 34 2e 32 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  4.2.1 {.  sqlite
21e0: 34 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 31 30  4_quota_set A 10
21f0: 30 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 34 5f  00 {}.  sqlite4_
2200: 71 75 6f 74 61 5f 73 65 74 20 42 20 31 30 30 30  quota_set B 1000
2210: 20 7b 7d 0a 20 20 73 71 6c 69 74 65 34 5f 71 75   {}.  sqlite4_qu
2220: 6f 74 61 5f 73 65 74 20 43 20 31 30 30 30 20 7b  ota_set C 1000 {
2230: 7d 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74  }.  sqlite4_quot
2240: 61 5f 73 65 74 20 44 20 31 30 30 30 20 7b 7d 0a  a_set D 1000 {}.
2250: 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b    quota_list.} {
2260: 41 20 42 20 43 20 44 7d 0a 64 6f 5f 74 65 73 74  A B C D}.do_test
2270: 20 71 75 6f 74 61 2d 34 2e 32 2e 32 20 7b 0a 20   quota-4.2.2 {. 
2280: 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73   sqlite4_quota_s
2290: 65 74 20 43 20 30 20 7b 7d 0a 20 20 73 71 6c 69  et C 0 {}.  sqli
22a0: 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 42 20  te4_quota_set B 
22b0: 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73  0 {}.  quota_lis
22c0: 74 0a 7d 20 7b 41 20 44 7d 0a 64 6f 5f 74 65 73  t.} {A D}.do_tes
22d0: 74 20 71 75 6f 74 61 2d 34 2e 32 2e 33 20 7b 0a  t quota-4.2.3 {.
22e0: 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f    sqlite4_quota_
22f0: 73 65 74 20 41 20 30 20 7b 7d 0a 20 20 73 71 6c  set A 0 {}.  sql
2300: 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 44  ite4_quota_set D
2310: 20 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69   0 {}.  quota_li
2320: 73 74 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  st.} {}.do_test 
2330: 71 75 6f 74 61 2d 34 2e 32 2e 34 20 7b 0a 20 20  quota-4.2.4 {.  
2340: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65  sqlite4_quota_se
2350: 74 20 41 20 31 30 30 30 20 7b 7d 0a 20 20 73 71  t A 1000 {}.  sq
2360: 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20  lite4_quota_set 
2370: 42 20 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c 69  B 1000 {}.  sqli
2380: 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 43 20  te4_quota_set C 
2390: 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65  1000 {}.  sqlite
23a0: 34 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 30 20  4_quota_set A 0 
23b0: 7b 7d 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f  {}.  sqlite4_quo
23c0: 74 61 5f 73 65 74 20 42 20 30 20 7b 7d 0a 20 20  ta_set B 0 {}.  
23d0: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65  sqlite4_quota_se
23e0: 74 20 43 20 30 20 7b 7d 0a 20 20 71 75 6f 74 61  t C 0 {}.  quota
23f0: 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  _list.} {}.do_te
2400: 73 74 20 71 75 6f 74 61 2d 34 2e 32 2e 35 20 7b  st quota-4.2.5 {
2410: 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61  .  sqlite4_quota
2420: 5f 73 65 74 20 41 20 31 30 30 30 20 7b 7d 0a 20  _set A 1000 {}. 
2430: 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73   sqlite4_quota_s
2440: 65 74 20 42 20 31 30 30 30 20 7b 7d 0a 20 20 73  et B 1000 {}.  s
2450: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74  qlite4_quota_set
2460: 20 43 20 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c   C 1000 {}.  sql
2470: 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 43  ite4_quota_set C
2480: 20 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 34 5f   0 {}.  sqlite4_
2490: 71 75 6f 74 61 5f 73 65 74 20 42 20 30 20 7b 7d  quota_set B 0 {}
24a0: 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61  .  sqlite4_quota
24b0: 5f 73 65 74 20 41 20 30 20 7b 7d 0a 20 20 71 75  _set A 0 {}.  qu
24c0: 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 64  ota_list.} {}..d
24d0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 33  o_test quota-4.3
24e0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f 71  .1 {.  sqlite4_q
24f0: 75 6f 74 61 5f 73 65 74 20 41 20 31 30 30 30 20  uota_set A 1000 
2500: 71 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20  quota_callback. 
2510: 20 73 71 6c 69 74 65 34 20 64 62 20 41 0a 20 20   sqlite4 db A.  
2520: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65  sqlite4_quota_se
2530: 74 20 41 20 30 20 71 75 6f 74 61 5f 63 61 6c 6c  t A 0 quota_call
2540: 62 61 63 6b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  back.  db close.
2550: 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b    quota_list.} {
2560: 7d 0a 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  }..unset -nocomp
2570: 6c 61 69 6e 20 71 75 6f 74 61 67 72 6f 75 70 0a  lain quotagroup.
2580: 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72  if {$tcl_platfor
2590: 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69  m(platform)=="wi
25a0: 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 73 65 74 20  ndows"} {.  set 
25b0: 71 75 6f 74 61 67 72 6f 75 70 20 2a 5c 5c 71 75  quotagroup *\\qu
25c0: 6f 74 61 2d 74 65 73 74 2d 41 3f 2e 64 62 0a 7d  ota-test-A?.db.}
25d0: 20 65 6c 73 65 20 7b 0a 20 20 73 65 74 20 71 75   else {.  set qu
25e0: 6f 74 61 67 72 6f 75 70 20 2a 2f 71 75 6f 74 61  otagroup */quota
25f0: 2d 74 65 73 74 2d 41 3f 2e 64 62 0a 7d 20 0a 66  -test-A?.db.} .f
2600: 6f 72 65 61 63 68 20 66 69 6c 65 20 5b 67 6c 6f  oreach file [glo
2610: 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 71 75  b -nocomplain qu
2620: 6f 74 61 2d 74 65 73 74 2d 41 2a 5d 20 7b 0a 20  ota-test-A*] {. 
2630: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 24 66 69   forcedelete $fi
2640: 6c 65 0a 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  le.}.do_test quo
2650: 74 61 2d 34 2e 34 2e 31 20 7b 0a 20 20 73 65 74  ta-4.4.1 {.  set
2660: 20 3a 3a 71 75 6f 74 61 20 7b 7d 0a 20 20 73 71   ::quota {}.  sq
2670: 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20  lite4_quota_set 
2680: 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70 20 31 30  $::quotagroup 10
2690: 30 30 30 20 71 75 6f 74 61 5f 63 61 6c 6c 62 61  000 quota_callba
26a0: 63 6b 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  ck.  file delete
26b0: 20 2d 66 6f 72 63 65 20 2e 2f 71 75 6f 74 61 2d   -force ./quota-
26c0: 74 65 73 74 2d 41 31 2e 64 62 20 2e 2f 71 75 6f  test-A1.db ./quo
26d0: 74 61 2d 74 65 73 74 2d 41 32 2e 64 62 0a 20 20  ta-test-A2.db.  
26e0: 73 71 6c 69 74 65 34 20 64 62 20 2e 2f 71 75 6f  sqlite4 db ./quo
26f0: 74 61 2d 74 65 73 74 2d 41 31 2e 64 62 0a 20 20  ta-test-A1.db.  
2700: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 43  db eval {.     C
2710: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
2720: 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49  );.     INSERT I
2730: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
2740: 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 30 29 29 3b  ndomblob(5000));
2750: 0a 20 20 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73  .  }.  quota_lis
2760: 74 0a 7d 20 5b 6c 69 73 74 20 24 71 75 6f 74 61  t.} [list $quota
2770: 67 72 6f 75 70 5d 0a 64 6f 5f 74 65 73 74 20 71  group].do_test q
2780: 75 6f 74 61 2d 34 2e 34 2e 32 20 7b 0a 20 20 65  uota-4.4.2 {.  e
2790: 78 70 72 20 7b 24 3a 3a 71 75 6f 74 61 3d 3d 22  xpr {$::quota=="
27a0: 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  "}.} {1}.do_test
27b0: 20 71 75 6f 74 61 2d 34 2e 34 2e 33 20 7b 0a 20   quota-4.4.3 {. 
27c0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
27d0: 74 65 34 20 64 62 20 2e 2f 71 75 6f 74 61 2d 74  te4 db ./quota-t
27e0: 65 73 74 2d 41 32 2e 64 62 0a 20 20 64 62 20 65  est-A2.db.  db e
27f0: 76 61 6c 20 7b 0a 20 20 20 20 20 43 52 45 41 54  val {.     CREAT
2800: 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20  E TABLE t1(x);. 
2810: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2820: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
2830: 62 6c 6f 62 28 35 30 30 30 29 29 3b 0a 20 20 7d  blob(5000));.  }
2840: 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20  .  quota_list.} 
2850: 5b 6c 69 73 74 20 24 71 75 6f 74 61 67 72 6f 75  [list $quotagrou
2860: 70 5d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  p].do_test quota
2870: 2d 34 2e 34 2e 34 20 7b 0a 20 20 65 78 70 72 20  -4.4.4 {.  expr 
2880: 7b 24 3a 3a 71 75 6f 74 61 21 3d 22 22 7d 0a 7d  {$::quota!=""}.}
2890: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {1}.do_test quo
28a0: 74 61 2d 34 2e 34 2e 35 20 7b 0a 20 20 64 62 20  ta-4.4.5 {.  db 
28b0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 34 5f  close.  sqlite4_
28c0: 71 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71 75 6f  quota_set $::quo
28d0: 74 61 67 72 6f 75 70 20 30 20 7b 7d 0a 20 20 73  tagroup 0 {}.  s
28e0: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 64 75 6d  qlite4_quota_dum
28f0: 70 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71  p.} {}.do_test q
2900: 75 6f 74 61 2d 34 2e 34 2e 36 20 7b 0a 20 20 73  uota-4.4.6 {.  s
2910: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74  qlite4_quota_set
2920: 20 24 71 75 6f 74 61 67 72 6f 75 70 20 31 30 30   $quotagroup 100
2930: 30 30 20 71 75 6f 74 61 5f 63 61 6c 6c 62 61 63  00 quota_callbac
2940: 6b 0a 20 20 73 71 6c 69 74 65 34 20 64 62 20 71  k.  sqlite4 db q
2950: 75 6f 74 61 2d 74 65 73 74 2d 41 31 2e 64 62 0a  uota-test-A1.db.
2960: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
2970: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
2980: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20  sqlite_master}. 
2990: 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 71 75 6f   quota_size $quo
29a0: 74 61 67 72 6f 75 70 0a 7d 20 5b 66 69 6c 65 20  tagroup.} [file 
29b0: 73 69 7a 65 20 71 75 6f 74 61 2d 74 65 73 74 2d  size quota-test-
29c0: 41 31 2e 64 62 5d 0a 64 6f 5f 74 65 73 74 20 71  A1.db].do_test q
29d0: 75 6f 74 61 2d 34 2e 34 2e 37 20 7b 0a 20 20 73  uota-4.4.7 {.  s
29e0: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 66 69 6c  qlite4_quota_fil
29f0: 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 41 32 2e  e quota-test-A2.
2a00: 64 62 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20  db.  quota_size 
2a10: 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20  $::quotagroup.} 
2a20: 5b 65 78 70 72 20 7b 5b 66 69 6c 65 20 73 69 7a  [expr {[file siz
2a30: 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 41 31 2e  e quota-test-A1.
2a40: 64 62 5d 2b 5b 66 69 6c 65 20 73 69 7a 65 20 71  db]+[file size q
2a50: 75 6f 74 61 2d 74 65 73 74 2d 41 32 2e 64 62 5d  uota-test-A2.db]
2a60: 7d 5d 0a 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  }]..unset -nocom
2a70: 70 6c 61 69 6e 20 71 75 6f 74 61 67 72 6f 75 70  plain quotagroup
2a80: 0a 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f  .if {$tcl_platfo
2a90: 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77  rm(platform)=="w
2aa0: 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 73 65 74  indows"} {.  set
2ab0: 20 71 75 6f 74 61 67 72 6f 75 70 20 2a 5c 5c 71   quotagroup *\\q
2ac0: 75 6f 74 61 2d 74 65 73 74 2d 42 2a 0a 7d 20 65  uota-test-B*.} e
2ad0: 6c 73 65 20 7b 0a 20 20 73 65 74 20 71 75 6f 74  lse {.  set quot
2ae0: 61 67 72 6f 75 70 20 2a 2f 71 75 6f 74 61 2d 74  agroup */quota-t
2af0: 65 73 74 2d 42 2a 0a 7d 20 0a 66 6f 72 65 61 63  est-B*.} .foreac
2b00: 68 20 66 69 6c 65 20 5b 67 6c 6f 62 20 2d 6e 6f  h file [glob -no
2b10: 63 6f 6d 70 6c 61 69 6e 20 71 75 6f 74 61 2d 74  complain quota-t
2b20: 65 73 74 2d 42 2a 5d 20 7b 0a 20 20 66 6f 72 63  est-B*] {.  forc
2b30: 65 64 65 6c 65 74 65 20 24 66 69 6c 65 0a 7d 0a  edelete $file.}.
2b40: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
2b50: 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f  5.1 {.  sqlite4_
2b60: 71 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71 75 6f  quota_set $::quo
2b70: 74 61 67 72 6f 75 70 20 31 30 30 30 30 30 20 71  tagroup 100000 q
2b80: 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20  uota_callback.  
2b90: 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75  quota_size $::qu
2ba0: 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 64  otagroup.} {0}.d
2bb0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 35  o_test quota-4.5
2bc0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f 71  .2 {.  sqlite4_q
2bd0: 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74 61 2d  uota_file quota-
2be0: 74 65 73 74 2d 42 31 2e 74 78 74 0a 20 20 71 75  test-B1.txt.  qu
2bf0: 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f 74  ota_size $::quot
2c00: 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 70 72 6f  agroup.} {0}.pro
2c10: 63 20 61 64 64 5f 74 6f 5f 66 69 6c 65 20 7b 6e  c add_to_file {n
2c20: 61 6d 65 20 6e 7d 20 7b 0a 20 20 73 65 74 20 6f  ame n} {.  set o
2c30: 75 74 20 5b 6f 70 65 6e 20 24 6e 61 6d 65 20 61  ut [open $name a
2c40: 5d 0a 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24  ].  fconfigure $
2c50: 6f 75 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e  out -translation
2c60: 20 62 69 6e 61 72 79 0a 20 20 70 75 74 73 20 2d   binary.  puts -
2c70: 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b  nonewline $out [
2c80: 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 78 20  string repeat x 
2c90: 24 6e 5d 0a 20 20 63 6c 6f 73 65 20 24 6f 75 74  $n].  close $out
2ca0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  .}.do_test quota
2cb0: 2d 34 2e 35 2e 33 20 7b 0a 20 20 61 64 64 5f 74  -4.5.3 {.  add_t
2cc0: 6f 5f 66 69 6c 65 20 71 75 6f 74 61 2d 74 65 73  o_file quota-tes
2cd0: 74 2d 42 31 2e 74 78 74 20 31 32 33 0a 20 20 73  t-B1.txt 123.  s
2ce0: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 66 69 6c  qlite4_quota_fil
2cf0: 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 42 31 2e  e quota-test-B1.
2d00: 74 78 74 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65  txt.  quota_size
2d10: 20 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d   $::quotagroup.}
2d20: 20 7b 31 32 33 7d 0a 64 6f 5f 74 65 73 74 20 71   {123}.do_test q
2d30: 75 6f 74 61 2d 34 2e 35 2e 34 20 7b 0a 20 20 61  uota-4.5.4 {.  a
2d40: 64 64 5f 74 6f 5f 66 69 6c 65 20 71 75 6f 74 61  dd_to_file quota
2d50: 2d 74 65 73 74 2d 42 32 2e 74 78 74 20 32 33 34  -test-B2.txt 234
2d60: 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f 74 61  .  sqlite4_quota
2d70: 5f 66 69 6c 65 20 71 75 6f 74 61 2d 74 65 73 74  _file quota-test
2d80: 2d 42 32 2e 74 78 74 0a 20 20 71 75 6f 74 61 5f  -B2.txt.  quota_
2d90: 73 69 7a 65 20 24 3a 3a 71 75 6f 74 61 67 72 6f  size $::quotagro
2da0: 75 70 0a 7d 20 7b 33 35 37 7d 0a 64 6f 5f 74 65  up.} {357}.do_te
2db0: 73 74 20 71 75 6f 74 61 2d 34 2e 35 2e 35 20 7b  st quota-4.5.5 {
2dc0: 0a 20 20 61 64 64 5f 74 6f 5f 66 69 6c 65 20 71  .  add_to_file q
2dd0: 75 6f 74 61 2d 74 65 73 74 2d 42 31 2e 74 78 74  uota-test-B1.txt
2de0: 20 32 30 30 30 0a 20 20 73 71 6c 69 74 65 34 5f   2000.  sqlite4_
2df0: 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74 61  quota_file quota
2e00: 2d 74 65 73 74 2d 42 31 2e 74 78 74 0a 20 20 71  -test-B1.txt.  q
2e10: 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f  uota_size $::quo
2e20: 74 61 67 72 6f 75 70 0a 7d 20 7b 32 33 35 37 7d  tagroup.} {2357}
2e30: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
2e40: 2e 35 2e 36 20 7b 0a 20 20 66 6f 72 63 65 64 65  .5.6 {.  forcede
2e50: 6c 65 74 65 20 71 75 6f 74 61 2d 74 65 73 74 2d  lete quota-test-
2e60: 42 31 2e 74 78 74 0a 20 20 73 71 6c 69 74 65 34  B1.txt.  sqlite4
2e70: 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74  _quota_file quot
2e80: 61 2d 74 65 73 74 2d 42 31 2e 74 78 74 0a 20 20  a-test-B1.txt.  
2e90: 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75  quota_size $::qu
2ea0: 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 32 33 34 7d  otagroup.} {234}
2eb0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
2ec0: 2e 35 2e 37 20 7b 0a 20 20 66 6f 72 63 65 64 65  .5.7 {.  forcede
2ed0: 6c 65 74 65 20 71 75 6f 74 61 2d 74 65 73 74 2d  lete quota-test-
2ee0: 42 32 2e 74 78 74 0a 20 20 73 71 6c 69 74 65 34  B2.txt.  sqlite4
2ef0: 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74  _quota_file quot
2f00: 61 2d 74 65 73 74 2d 42 32 2e 74 78 74 0a 20 20  a-test-B2.txt.  
2f10: 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75  quota_size $::qu
2f20: 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 64  otagroup.} {0}.d
2f30: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 35  o_test quota-4.5
2f40: 2e 38 20 7b 0a 20 20 61 64 64 5f 74 6f 5f 66 69  .8 {.  add_to_fi
2f50: 6c 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 42 33  le quota-test-B3
2f60: 2e 74 78 74 20 31 32 33 34 0a 20 20 73 71 6c 69  .txt 1234.  sqli
2f70: 74 65 34 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71  te4_quota_file q
2f80: 75 6f 74 61 2d 74 65 73 74 2d 42 33 2e 74 78 74  uota-test-B3.txt
2f90: 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a  .  quota_size $:
2fa0: 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 31  :quotagroup.} {1
2fb0: 32 33 34 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  234}.do_test quo
2fc0: 74 61 2d 34 2e 35 2e 39 20 7b 0a 20 20 73 71 6c  ta-4.5.9 {.  sql
2fd0: 69 74 65 34 5f 71 75 6f 74 61 5f 73 65 74 20 24  ite4_quota_set $
2fe0: 71 75 6f 74 61 67 72 6f 75 70 20 30 20 7b 7d 0a  quotagroup 0 {}.
2ff0: 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a    quota_size $::
3000: 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d  quotagroup.} {0}
3010: 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  ..do_test quota-
3020: 34 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  4.9.1 {.  db clo
3030: 73 65 0a 20 20 73 71 6c 69 74 65 34 5f 71 75 6f  se.  sqlite4_quo
3040: 74 61 5f 73 65 74 20 41 20 31 30 30 30 20 71 75  ta_set A 1000 qu
3050: 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 73  ota_callback.  s
3060: 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 68 75  qlite4_quota_shu
3070: 74 64 6f 77 6e 0a 7d 20 7b 53 51 4c 49 54 45 34  tdown.} {SQLITE4
3080: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  _OK}.do_test quo
3090: 74 61 2d 34 2e 39 2e 32 20 7b 0a 20 20 71 75 6f  ta-4.9.2 {.  quo
30a0: 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 23 2d  ta_list.} {}..#-
30b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30f0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66  --------.# The f
3100: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 74  ollowing tests t
3110: 65 73 74 20 74 68 61 74 20 74 68 65 20 71 75 6f  est that the quo
3120: 74 61 20 56 46 53 20 68 61 6e 64 6c 65 73 20 6d  ta VFS handles m
3130: 61 6c 6c 6f 63 20 61 6e 64 20 49 4f 20 0a 23 20  alloc and IO .# 
3140: 65 72 72 6f 72 73 2e 0a 23 0a 0a 73 71 6c 69 74  errors..#..sqlit
3150: 65 34 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c  e4_quota_initial
3160: 69 7a 65 20 22 22 20 31 0a 73 71 6c 69 74 65 34  ize "" 1.sqlite4
3170: 5f 71 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74  _quota_set *test
3180: 2e 64 62 20 34 30 39 36 20 7b 7d 0a 0a 64 6f 5f  .db 4096 {}..do_
3190: 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 71 75  faultsim_test qu
31a0: 6f 74 61 2d 35 2e 31 20 2d 70 72 65 70 20 7b 0a  ota-5.1 -prep {.
31b0: 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73    catch {db clos
31c0: 65 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73  e}.} -body {.  s
31d0: 71 6c 69 74 65 34 20 64 62 20 74 65 73 74 32 2e  qlite4 db test2.
31e0: 64 62 0a 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d  db.}.do_faultsim
31f0: 5f 74 65 73 74 20 71 75 6f 74 61 2d 35 2e 32 20  _test quota-5.2 
3200: 2d 70 72 65 70 20 7b 0a 20 20 63 61 74 63 68 20  -prep {.  catch 
3210: 7b 64 62 20 63 6c 6f 73 65 7d 0a 7d 20 2d 62 6f  {db close}.} -bo
3220: 64 79 20 7b 0a 20 20 73 71 6c 69 74 65 34 20 64  dy {.  sqlite4 d
3230: 62 20 74 65 73 74 2e 64 62 0a 7d 0a 0a 63 61 74  b test.db.}..cat
3240: 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a  ch { db close }.
3250: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
3260: 2e 64 62 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f  .db..do_test quo
3270: 74 61 2d 35 2e 33 2e 70 72 65 70 20 7b 0a 20 20  ta-5.3.prep {.  
3280: 73 71 6c 69 74 65 34 20 64 62 20 74 65 73 74 2e  sqlite4 db test.
3290: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
32a0: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
32b0: 61 63 75 75 6d 20 3d 20 31 3b 0a 20 20 20 20 50  acuum = 1;.    P
32c0: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20  RAGMA page_size 
32d0: 3d 20 31 30 32 34 3b 0a 20 20 20 20 43 52 45 41  = 1024;.    CREA
32e0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
32f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
3300: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 30 2c  TO t1 VALUES(10,
3310: 20 7a 65 72 6f 62 6c 6f 62 28 31 32 30 30 29 29   zeroblob(1200))
3320: 3b 0a 20 20 7d 0a 20 20 66 61 75 6c 74 73 69 6d  ;.  }.  faultsim
3330: 5f 73 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a  _save_and_close.
3340: 7d 20 7b 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d  } {}.do_faultsim
3350: 5f 74 65 73 74 20 71 75 6f 74 61 2d 35 2e 33 20  _test quota-5.3 
3360: 2d 70 72 65 70 20 7b 0a 20 20 66 61 75 6c 74 73  -prep {.  faults
3370: 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72  im_restore_and_r
3380: 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a  eopen.} -body {.
3390: 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45    execsql { DELE
33a0: 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 0a 0a  TE FROM t1 }.}..
33b0: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 35 2e  do_test quota-5.
33c0: 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 20  4.1 {.  catch { 
33d0: 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 66 6f 72  db close }.  for
33e0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
33f0: 0a 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 74 65  .  file mkdir te
3400: 73 74 2e 64 62 0a 20 20 6c 69 73 74 20 5b 63 61  st.db.  list [ca
3410: 74 63 68 20 7b 20 73 71 6c 69 74 65 34 20 64 62  tch { sqlite4 db
3420: 20 74 65 73 74 2e 64 62 20 7d 20 6d 73 67 5d 20   test.db } msg] 
3430: 24 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e 61 62 6c  $msg.} {1 {unabl
3440: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
3450: 73 65 20 66 69 6c 65 7d 7d 0a 0a 64 6f 5f 66 61  se file}}..do_fa
3460: 75 6c 74 73 69 6d 5f 74 65 73 74 20 71 75 6f 74  ultsim_test quot
3470: 61 2d 35 2e 35 20 2d 70 72 65 70 20 7b 0a 20 20  a-5.5 -prep {.  
3480: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 34 5f  catch { sqlite4_
3490: 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20 7d  quota_shutdown }
34a0: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71 6c  .} -body {.  sql
34b0: 69 74 65 34 5f 71 75 6f 74 61 5f 69 6e 69 74 69  ite4_quota_initi
34c0: 61 6c 69 7a 65 20 22 22 20 31 0a 7d 0a 0a 64 6f  alize "" 1.}..do
34d0: 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 71  _faultsim_test q
34e0: 75 6f 74 61 2d 35 2e 36 20 2d 70 72 65 70 20 7b  uota-5.6 -prep {
34f0: 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74  .  catch { sqlit
3500: 65 34 5f 71 75 6f 74 61 5f 73 68 75 74 64 6f 77  e4_quota_shutdow
3510: 6e 20 7d 0a 20 20 73 71 6c 69 74 65 34 5f 71 75  n }.  sqlite4_qu
3520: 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22  ota_initialize "
3530: 22 20 31 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  " 1.} -body {.  
3540: 73 71 6c 69 74 65 34 5f 71 75 6f 74 61 5f 73 65  sqlite4_quota_se
3550: 74 20 2a 20 34 30 39 36 20 7b 7d 0a 7d 0a 0a 63  t * 4096 {}.}..c
3560: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 34 5f 71  atch { sqlite4_q
3570: 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20 7d 0a  uota_shutdown }.
3580: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.