/ Hex Artifact Content
Login

Artifact 2379902c25e291eac5c12b4cf96946a3447e3744:


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 0a 23 20 49 66 20 53  ster.tcl..# If S
01b0: 51 4c 49 54 45 5f 43 55 52 44 49 52 20 69 73 20  QLITE_CURDIR is 
01c0: 6e 6f 74 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69  not defined, omi
01d0: 74 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63  t this file..ifc
01e0: 61 70 61 62 6c 65 20 21 63 75 72 64 69 72 20 7b  apable !curdir {
01f0: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
0200: 20 72 65 74 75 72 6e 0a 7d 0a 0a 73 6f 75 72 63   return.}..sourc
0210: 65 20 24 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f  e $testdir/mallo
0220: 63 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 75 6e  c_common.tcl..un
0230: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
0240: 64 65 66 61 75 6c 74 56 66 73 0a 73 65 74 20 64  defaultVfs.set d
0250: 65 66 61 75 6c 74 56 66 73 20 5b 66 69 6c 65 5f  efaultVfs [file_
0260: 63 6f 6e 74 72 6f 6c 5f 76 66 73 6e 61 6d 65 20  control_vfsname 
0270: 64 62 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a 64 6f  db].db close..do
0280: 5f 74 65 73 74 20 71 75 6f 74 61 2d 31 2e 31 20  _test quota-1.1 
0290: 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f  { sqlite3_quota_
02a0: 69 6e 69 74 69 61 6c 69 7a 65 20 6e 6f 73 75 63  initialize nosuc
02b0: 68 76 66 73 20 31 20 7d 20 7b 53 51 4c 49 54 45  hvfs 1 } {SQLITE
02c0: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
02d0: 71 75 6f 74 61 2d 31 2e 32 20 7b 20 73 71 6c 69  quota-1.2 { sqli
02e0: 74 65 33 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61  te3_quota_initia
02f0: 6c 69 7a 65 20 22 22 20 31 20 7d 20 20 20 20 20  lize "" 1 }     
0300: 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64     {SQLITE_OK}.d
0310: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 31 2e 33  o_test quota-1.3
0320: 20 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61   { sqlite3_quota
0330: 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31  _initialize "" 1
0340: 20 7d 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54   }        {SQLIT
0350: 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73  E_MISUSE}.do_tes
0360: 74 20 71 75 6f 74 61 2d 31 2e 34 20 7b 20 73 71  t quota-1.4 { sq
0370: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 68 75 74  lite3_quota_shut
0380: 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20 20  down }          
0390: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
03a0: 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  ..do_test quota-
03b0: 31 2e 35 20 7b 20 73 71 6c 69 74 65 33 5f 71 75  1.5 { sqlite3_qu
03c0: 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22  ota_initialize "
03d0: 22 20 30 20 7d 20 20 20 20 20 20 20 20 7b 53 51  " 0 }        {SQ
03e0: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
03f0: 20 71 75 6f 74 61 2d 31 2e 36 20 7b 20 73 71 6c   quota-1.6 { sql
0400: 69 74 65 33 5f 71 75 6f 74 61 5f 73 68 75 74 64  ite3_quota_shutd
0410: 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20 20 20  own }           
0420: 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a      {SQLITE_OK}.
0430: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 31 2e  do_test quota-1.
0440: 37 20 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  7 { sqlite3_quot
0450: 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20  a_initialize "" 
0460: 31 20 7d 20 20 20 20 20 20 20 20 7b 53 51 4c 49  1 }        {SQLI
0470: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 71  TE_OK}.do_test q
0480: 75 6f 74 61 2d 31 2e 38 20 7b 20 73 71 6c 69 74  uota-1.8 { sqlit
0490: 65 33 5f 71 75 6f 74 61 5f 73 68 75 74 64 6f 77  e3_quota_shutdow
04a0: 6e 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  n }             
04b0: 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 0a    {SQLITE_OK}...
04c0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
04d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 53 6f 6d  ----------.# Som
0510: 65 20 73 69 6d 70 6c 65 20 77 61 72 6d 2d 62 6f  e simple warm-bo
0520: 64 79 20 74 65 73 74 73 20 77 69 74 68 20 61 20  dy tests with a 
0530: 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20  single database 
0540: 66 69 6c 65 20 69 6e 20 72 6f 6c 6c 62 61 63 6b  file in rollback
0550: 20 0a 23 20 6d 6f 64 65 3a 0a 23 0a 23 20 20 20   .# mode:.#.#   
0560: 71 75 6f 74 61 2d 32 2e 31 2e 2a 3a 20 54 65 73  quota-2.1.*: Tes
0570: 74 20 74 68 61 74 20 53 51 4c 49 54 45 5f 46 55  t that SQLITE_FU
0580: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  LL is returned i
0590: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
05a0: 6f 75 6c 64 0a 23 20 20 20 20 20 20 20 20 20 20  ould.#          
05b0: 20 20 20 20 20 20 65 78 63 65 65 64 20 74 68 65        exceed the
05c0: 20 63 6f 6e 66 69 67 75 72 65 64 20 71 75 6f 74   configured quot
05d0: 61 2e 0a 23 0a 23 20 20 20 71 75 6f 74 61 2d 32  a..#.#   quota-2
05e0: 2e 32 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20  .2.*: Test that 
05f0: 53 51 4c 49 54 45 5f 46 55 4c 4c 20 69 73 20 6e  SQLITE_FULL is n
0600: 6f 74 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  ot returned and 
0610: 74 68 65 20 64 61 74 61 62 61 73 65 0a 23 20 20  the database.#  
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72                gr
0630: 6f 77 73 20 69 66 20 74 68 65 20 63 61 6c 6c 62  ows if the callb
0640: 61 63 6b 20 65 78 74 65 6e 64 73 20 74 68 65 20  ack extends the 
0650: 71 75 6f 74 61 20 77 68 65 6e 20 74 68 65 20 64  quota when the d
0660: 61 74 61 62 61 73 65 0a 23 20 20 20 20 20 20 20  atabase.#       
0670: 20 20 20 20 20 20 20 20 20 61 74 74 65 6d 70 74           attempt
0680: 73 20 74 6f 20 67 72 6f 77 20 62 65 79 6f 6e 64  s to grow beyond
0690: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
06a0: 71 75 6f 74 61 2e 0a 23 0a 23 20 20 20 71 75 6f  quota..#.#   quo
06b0: 74 61 2d 32 2e 33 2e 2a 3a 20 4f 70 65 6e 20 61  ta-2.3.*: Open a
06c0: 6e 64 20 63 6c 6f 73 65 20 61 20 64 62 20 74 68  nd close a db th
06d0: 61 74 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f  at is not part o
06e0: 66 20 61 6e 79 20 71 75 6f 74 61 20 67 72 6f 75  f any quota grou
06f0: 70 2e 20 41 74 0a 23 20 20 20 20 20 20 20 20 20  p. At.#         
0700: 20 20 20 20 20 20 20 6f 6e 65 20 70 6f 69 6e 74         one point
0710: 20 74 68 69 73 20 77 61 73 20 63 61 75 73 69 6e   this was causin
0720: 67 20 6d 75 74 65 78 20 72 65 66 73 20 74 6f 20  g mutex refs to 
0730: 62 65 20 6c 65 61 6b 65 64 2e 0a 23 0a 23 20 20  be leaked..#.#  
0740: 20 71 75 6f 74 61 2d 32 2e 34 2e 2a 3a 20 54 72   quota-2.4.*: Tr
0750: 79 20 74 6f 20 73 68 75 74 64 6f 77 6e 20 74 68  y to shutdown th
0760: 65 20 71 75 6f 74 61 20 73 79 73 74 65 6d 20 62  e quota system b
0770: 65 66 6f 72 65 20 63 6c 6f 73 69 6e 67 20 74 68  efore closing th
0780: 65 20 64 62 0a 23 20 20 20 20 20 20 20 20 20 20  e db.#          
0790: 20 20 20 20 20 20 66 69 6c 65 2e 20 43 68 65 63        file. Chec
07a0: 6b 20 74 68 61 74 20 74 68 69 73 20 66 61 69 6c  k that this fail
07b0: 73 20 61 6e 64 20 74 68 65 20 71 75 6f 74 61 20  s and the quota 
07c0: 73 79 73 74 65 6d 20 73 74 69 6c 6c 20 77 6f 72  system still wor
07d0: 6b 73 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ks.#            
07e0: 20 20 20 20 61 66 74 65 72 77 61 72 64 73 2e 20      afterwards. 
07f0: 54 68 65 6e 20 63 6c 6f 73 65 20 74 68 65 20 64  Then close the d
0800: 61 74 61 62 61 73 65 20 61 6e 64 20 73 75 63 63  atabase and succ
0810: 65 73 73 66 75 6c 6c 79 20 73 68 75 74 0a 23 20  essfully shut.# 
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
0830: 6f 77 6e 20 74 68 65 20 71 75 6f 74 61 20 73 79  own the quota sy
0840: 73 74 65 6d 2e 0a 23 20 20 20 0a 73 71 6c 69 74  stem..#   .sqlit
0850: 65 33 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c  e3_quota_initial
0860: 69 7a 65 20 22 22 20 31 0a 0a 75 6e 73 65 74 20  ize "" 1..unset 
0870: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 71 75 6f 74  -nocomplain quot
0880: 61 5f 72 65 71 75 65 73 74 5f 6f 6b 0a 70 72 6f  a_request_ok.pro
0890: 63 20 71 75 6f 74 61 5f 63 68 65 63 6b 20 7b 66  c quota_check {f
08a0: 69 6c 65 6e 61 6d 65 20 6c 69 6d 69 74 76 61 72  ilename limitvar
08b0: 20 73 69 7a 65 7d 20 7b 0a 20 20 75 70 76 61 72   size} {.  upvar
08c0: 20 24 6c 69 6d 69 74 76 61 72 20 6c 69 6d 69 74   $limitvar limit
08d0: 0a 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 71 75  ..  lappend ::qu
08e0: 6f 74 61 20 5b 73 65 74 20 6c 69 6d 69 74 5d 20  ota [set limit] 
08f0: 24 73 69 7a 65 0a 20 20 69 66 20 7b 5b 69 6e 66  $size.  if {[inf
0900: 6f 20 65 78 69 73 74 73 20 3a 3a 71 75 6f 74 61  o exists ::quota
0910: 5f 72 65 71 75 65 73 74 5f 6f 6b 5d 7d 20 7b 20  _request_ok]} { 
0920: 73 65 74 20 6c 69 6d 69 74 20 24 73 69 7a 65 20  set limit $size 
0930: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f  }.}..do_test quo
0940: 74 61 2d 32 2e 31 2e 31 20 7b 0a 20 20 73 71 6c  ta-2.1.1 {.  sql
0950: 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a  ite3_quota_set *
0960: 74 65 73 74 2e 64 62 20 34 30 39 36 20 71 75 6f  test.db 4096 quo
0970: 74 61 5f 63 68 65 63 6b 0a 7d 20 7b 53 51 4c 49  ta_check.} {SQLI
0980: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 71  TE_OK}.do_test q
0990: 75 6f 74 61 2d 32 2e 31 2e 32 20 7b 0a 20 20 73  uota-2.1.2 {.  s
09a0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
09b0: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
09c0: 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69    PRAGMA page_si
09d0: 7a 65 3d 31 30 32 34 3b 0a 20 20 20 20 50 52 41  ze=1024;.    PRA
09e0: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d  GMA auto_vacuum=
09f0: 4f 46 46 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  OFF;.    PRAGMA 
0a00: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 44 45 4c  journal_mode=DEL
0a10: 45 54 45 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a  ETE;.  }.  set :
0a20: 3a 71 75 6f 74 61 20 5b 6c 69 73 74 5d 0a 20 20  :quota [list].  
0a30: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
0a40: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
0a50: 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   b);.    INSERT 
0a60: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
0a70: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30  , randomblob(110
0a80: 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  0));.    INSERT 
0a90: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
0aa0: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30  , randomblob(110
0ab0: 30 29 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a  0));.  }.  set :
0ac0: 3a 71 75 6f 74 61 0a 7d 20 7b 7d 0a 64 6f 5f 74  :quota.} {}.do_t
0ad0: 65 73 74 20 71 75 6f 74 61 2d 32 2e 31 2e 32 2e  est quota-2.1.2.
0ae0: 31 20 7b 0a 20 20 66 69 6c 65 5f 63 6f 6e 74 72  1 {.  file_contr
0af0: 6f 6c 5f 76 66 73 6e 61 6d 65 20 64 62 0a 7d 20  ol_vfsname db.} 
0b00: 71 75 6f 74 61 2f 24 64 65 66 61 75 6c 74 56 66  quota/$defaultVf
0b10: 73 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  s.do_test quota-
0b20: 32 2e 31 2e 33 20 7b 20 66 69 6c 65 20 73 69 7a  2.1.3 { file siz
0b30: 65 20 74 65 73 74 2e 64 62 20 7d 20 7b 34 30 39  e test.db } {409
0b40: 36 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  6}.do_test quota
0b50: 2d 32 2e 31 2e 34 20 7b 0a 20 20 63 61 74 63 68  -2.1.4 {.  catch
0b60: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0b70: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 72  O t1 VALUES(3, r
0b80: 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30 30 29 29  andomblob(1100))
0b90: 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73   }.} {1 {databas
0ba0: 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c  e or disk is ful
0bb0: 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  l}}.do_test quot
0bc0: 61 2d 32 2e 31 2e 35 20 7b 20 73 65 74 20 3a 3a  a-2.1.5 { set ::
0bd0: 71 75 6f 74 61 20 7d 20 7b 34 30 39 36 20 35 31  quota } {4096 51
0be0: 32 30 7d 0a 0a 73 65 74 20 3a 3a 71 75 6f 74 61  20}..set ::quota
0bf0: 5f 72 65 71 75 65 73 74 5f 6f 6b 20 31 0a 73 65  _request_ok 1.se
0c00: 74 20 3a 3a 71 75 6f 74 61 20 5b 6c 69 73 74 5d  t ::quota [list]
0c10: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 32  .do_test quota-2
0c20: 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.1 {.  execsql
0c30: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
0c40: 31 20 56 41 4c 55 45 53 28 33 2c 20 72 61 6e 64  1 VALUES(3, rand
0c50: 6f 6d 62 6c 6f 62 28 31 31 30 30 29 29 20 7d 0a  omblob(1100)) }.
0c60: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  } {}.do_test quo
0c70: 74 61 2d 32 2e 32 2e 32 20 7b 20 73 65 74 20 3a  ta-2.2.2 { set :
0c80: 3a 71 75 6f 74 61 20 7d 20 7b 34 30 39 36 20 35  :quota } {4096 5
0c90: 31 32 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  120}.do_test quo
0ca0: 74 61 2d 32 2e 32 2e 33 20 7b 20 66 69 6c 65 20  ta-2.2.3 { file 
0cb0: 73 69 7a 65 20 74 65 73 74 2e 64 62 20 7d 20 7b  size test.db } {
0cc0: 35 31 32 30 7d 0a 75 6e 73 65 74 20 3a 3a 71 75  5120}.unset ::qu
0cd0: 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 0a 0a  ota_request_ok..
0ce0: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 32 2e  do_test quota-2.
0cf0: 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  3.1 {.  sqlite3 
0d00: 64 62 32 20 62 61 6b 2e 64 62 0a 20 20 64 62 32  db2 bak.db.  db2
0d10: 20 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 64 6f 5f   close.} {}..do_
0d20: 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 34 2e 31  test quota-2.4.1
0d30: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
0d40: 74 61 5f 73 68 75 74 64 6f 77 6e 0a 7d 20 7b 53  ta_shutdown.} {S
0d50: 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 73 65  QLITE_MISUSE}.se
0d60: 74 20 3a 3a 71 75 6f 74 61 20 5b 6c 69 73 74 5d  t ::quota [list]
0d70: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 32  .do_test quota-2
0d80: 2e 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71  .4.2 {.  catchsq
0d90: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
0da0: 74 31 20 56 41 4c 55 45 53 28 33 2c 20 72 61 6e  t1 VALUES(3, ran
0db0: 64 6f 6d 62 6c 6f 62 28 31 31 30 30 29 29 20 7d  domblob(1100)) }
0dc0: 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20  .} {1 {database 
0dd0: 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d  or disk is full}
0de0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
0df0: 32 2e 34 2e 33 20 7b 20 73 65 74 20 3a 3a 71 75  2.4.3 { set ::qu
0e00: 6f 74 61 20 7d 20 7b 35 31 32 30 20 36 31 34 34  ota } {5120 6144
0e10: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
0e20: 32 2e 34 2e 34 20 7b 20 66 69 6c 65 20 73 69 7a  2.4.4 { file siz
0e30: 65 20 74 65 73 74 2e 64 62 20 7d 20 7b 35 31 32  e test.db } {512
0e40: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
0e50: 2d 32 2e 34 2e 39 39 20 7b 0a 20 20 64 62 20 63  -2.4.99 {.  db c
0e60: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 71  lose.  sqlite3_q
0e70: 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 0a 7d 20  uota_shutdown.} 
0e80: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 2d 2d  {SQLITE_OK}..#--
0e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ed0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 72 79 20 73 6f  -------.# Try so
0ee0: 6d 65 20 74 65 73 74 73 20 77 69 74 68 20 6d 6f  me tests with mo
0ef0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 63 6f 6e 6e  re than one conn
0f00: 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61  ection to a data
0f10: 62 61 73 65 20 66 69 6c 65 2e 20 53 74 69 6c 6c  base file. Still
0f20: 0a 23 20 69 6e 20 72 6f 6c 6c 62 61 63 6b 20 6d  .# in rollback m
0f30: 6f 64 65 2e 0a 23 0a 23 20 20 20 71 75 6f 74 61  ode..#.#   quota
0f40: 2d 33 2e 31 2e 2a 3a 20 54 77 6f 20 63 6f 6e 6e  -3.1.*: Two conn
0f50: 65 63 74 69 6f 6e 73 20 74 6f 20 61 20 73 69 6e  ections to a sin
0f60: 67 6c 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  gle database fil
0f70: 65 2e 0a 23 0a 23 20 20 20 71 75 6f 74 61 2d 33  e..#.#   quota-3
0f80: 2e 32 2e 2a 3a 20 54 77 6f 20 63 6f 6e 6e 65 63  .2.*: Two connec
0f90: 74 69 6f 6e 73 20 74 6f 20 65 61 63 68 20 6f 66  tions to each of
0fa0: 20 73 65 76 65 72 61 6c 20 64 61 74 61 62 61 73   several databas
0fb0: 65 20 66 69 6c 65 73 20 28 74 68 61 74 0a 23 20  e files (that.# 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
0fd0: 72 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 71  re in the same q
0fe0: 75 6f 74 61 20 67 72 6f 75 70 29 2e 0a 23 0a 70  uota group)..#.p
0ff0: 72 6f 63 20 71 75 6f 74 61 5f 63 68 65 63 6b 20  roc quota_check 
1000: 7b 66 69 6c 65 6e 61 6d 65 20 6c 69 6d 69 74 76  {filename limitv
1010: 61 72 20 73 69 7a 65 7d 20 7b 0a 20 20 75 70 76  ar size} {.  upv
1020: 61 72 20 24 6c 69 6d 69 74 76 61 72 20 6c 69 6d  ar $limitvar lim
1030: 69 74 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 71  it.  lappend ::q
1040: 75 6f 74 61 20 5b 73 65 74 20 6c 69 6d 69 74 5d  uota [set limit]
1050: 20 24 73 69 7a 65 0a 20 20 69 66 20 7b 5b 69 6e   $size.  if {[in
1060: 66 6f 20 65 78 69 73 74 73 20 3a 3a 71 75 6f 74  fo exists ::quot
1070: 61 5f 72 65 71 75 65 73 74 5f 6f 6b 5d 7d 20 7b  a_request_ok]} {
1080: 20 73 65 74 20 6c 69 6d 69 74 20 24 73 69 7a 65   set limit $size
1090: 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75   }.}..do_test qu
10a0: 6f 74 61 2d 33 2e 31 2e 31 20 7b 0a 20 20 66 6f  ota-3.1.1 {.  fo
10b0: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
10c0: 62 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  b.  sqlite3_quot
10d0: 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20  a_initialize "" 
10e0: 31 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  1.  sqlite3_quot
10f0: 61 5f 73 65 74 20 2a 74 65 73 74 2e 64 62 20 34  a_set *test.db 4
1100: 30 39 36 20 71 75 6f 74 61 5f 63 68 65 63 6b 0a  096 quota_check.
1110: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
1120: 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 31 2e  _test quota-3.1.
1130: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  2 {.  sqlite3 db
1140: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
1150: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
1160: 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34  page_size = 1024
1170: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75  ;.    PRAGMA jou
1180: 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c 65  rnal_mode = dele
1190: 74 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  te;.    PRAGMA a
11a0: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 6f 66 66  uto_vacuum = off
11b0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
11c0: 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20  LE t1(a PRIMARY 
11d0: 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53  KEY, b);.    INS
11e0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
11f0: 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20  ES(1, 'one');.  
1200: 7d 0a 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65  }.  file size te
1210: 73 74 2e 64 62 0a 7d 20 7b 33 30 37 32 7d 0a 64  st.db.} {3072}.d
1220: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 31  o_test quota-3.1
1230: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .3 {.  sqlite3 d
1240: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74  b2 test.db.  set
1250: 20 3a 3a 71 75 6f 74 61 20 5b 6c 69 73 74 5d 0a   ::quota [list].
1260: 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41    execsql { CREA
1270: 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62  TE TABLE t2(a, b
1280: 29 20 7d 20 64 62 32 0a 20 20 73 65 74 20 3a 3a  ) } db2.  set ::
1290: 71 75 6f 74 61 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  quota.} {}.do_te
12a0: 73 74 20 71 75 6f 74 61 2d 33 2e 31 2e 34 20 7b  st quota-3.1.4 {
12b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 43 52  .  catchsql { CR
12c0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
12d0: 20 62 29 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61   b) }.} {1 {data
12e0: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20  base or disk is 
12f0: 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  full}}.do_test q
1300: 75 6f 74 61 2d 33 2e 31 2e 35 20 7b 0a 20 20 73  uota-3.1.5 {.  s
1310: 65 74 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65  et ::quota_reque
1320: 73 74 5f 6f 6b 20 31 0a 20 20 65 78 65 63 73 71  st_ok 1.  execsq
1330: 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45  l { CREATE TABLE
1340: 20 74 33 28 61 2c 20 62 29 20 7d 0a 7d 20 7b 7d   t3(a, b) }.} {}
1350: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33  .do_test quota-3
1360: 2e 31 2e 36 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .1.6 {.  db clos
1370: 65 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20  e.  db2 close.  
1380: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
1390: 74 20 2a 74 65 73 74 2e 64 62 20 30 20 7b 7d 0a  t *test.db 0 {}.
13a0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 64  } {SQLITE_OK}..d
13b0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 32  o_test quota-3.2
13c0: 2e 31 20 7b 0a 20 20 64 65 6c 65 74 65 5f 66 69  .1 {.  delete_fi
13d0: 6c 65 20 66 6f 72 63 65 20 74 65 73 74 2e 64 62  le force test.db
13e0: 20 74 65 73 74 32 2e 64 62 20 0a 0a 20 20 73 71   test2.db ..  sq
13f0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
1400: 2a 20 34 30 39 36 20 7b 7d 0a 20 20 73 71 6c 69  * 4096 {}.  sqli
1410: 74 65 33 20 64 62 31 61 20 74 65 73 74 2e 64 62  te3 db1a test.db
1420: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 61 20  .  sqlite3 db2a 
1430: 74 65 73 74 32 2e 64 62 0a 0a 20 20 66 6f 72 65  test2.db..  fore
1440: 61 63 68 20 64 62 20 7b 64 62 31 61 20 64 62 32  ach db {db1a db2
1450: 61 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  a} {.    execsql
1460: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
1470: 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34  page_size = 1024
1480: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6a  ;.      PRAGMA j
1490: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 64 65  ournal_mode = de
14a0: 6c 65 74 65 3b 0a 20 20 20 20 20 20 50 52 41 47  lete;.      PRAG
14b0: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d  MA auto_vacuum =
14c0: 20 6f 66 66 3b 0a 20 20 20 20 20 20 43 52 45 41   off;.      CREA
14d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
14e0: 29 3b 0a 20 20 20 20 7d 20 24 64 62 0a 20 20 7d  );.    } $db.  }
14f0: 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62 31 62  ..  sqlite3 db1b
1500: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
1510: 65 33 20 64 62 32 62 20 74 65 73 74 32 2e 64 62  e3 db2b test2.db
1520: 0a 0a 20 20 6c 69 73 74 20 5b 66 69 6c 65 20 73  ..  list [file s
1530: 69 7a 65 20 74 65 73 74 2e 64 62 5d 20 5b 66 69  ize test.db] [fi
1540: 6c 65 20 73 69 7a 65 20 74 65 73 74 32 2e 64 62  le size test2.db
1550: 5d 0a 7d 20 7b 32 30 34 38 20 32 30 34 38 7d 0a  ].} {2048 2048}.
1560: 0a 63 61 74 63 68 20 7b 20 75 6e 73 65 74 20 3a  .catch { unset :
1570: 3a 71 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f  :quota_request_o
1580: 6b 20 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f  k }..do_test quo
1590: 74 61 2d 33 2e 32 2e 32 20 7b 20 65 78 65 63 73  ta-3.2.2 { execs
15a0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
15b0: 20 74 31 20 56 41 4c 55 45 53 28 27 78 27 2c 20   t1 VALUES('x', 
15c0: 27 79 27 29 20 7d 20 64 62 31 61 20 7d 20 7b 7d  'y') } db1a } {}
15d0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33  .do_test quota-3
15e0: 2e 32 2e 33 20 7b 20 65 78 65 63 73 71 6c 20 7b  .2.3 { execsql {
15f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1600: 56 41 4c 55 45 53 28 27 76 27 2c 20 27 77 27 29  VALUES('v', 'w')
1610: 20 7d 20 64 62 31 62 20 7d 20 7b 7d 0a 64 6f 5f   } db1b } {}.do_
1620: 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e 34  test quota-3.2.4
1630: 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53   { execsql { INS
1640: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1650: 45 53 28 27 74 27 2c 20 27 75 27 29 20 7d 20 64  ES('t', 'u') } d
1660: 62 32 61 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  b2a } {}.do_test
1670: 20 71 75 6f 74 61 2d 33 2e 32 2e 35 20 7b 20 65   quota-3.2.5 { e
1680: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
1690: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
16a0: 72 27 2c 20 27 73 27 29 20 7d 20 64 62 32 62 20  r', 's') } db2b 
16b0: 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75  } {}..do_test qu
16c0: 6f 74 61 2d 33 2e 32 2e 36 20 7b 20 0a 20 20 63  ota-3.2.6 { .  c
16d0: 61 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52 54  atchsql { INSERT
16e0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
16f0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c  randomblob(500),
1700: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29   randomblob(500)
1710: 29 20 7d 20 64 62 31 61 0a 7d 20 7b 31 20 7b 64  ) } db1a.} {1 {d
1720: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
1730: 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73  is full}}.do_tes
1740: 74 20 71 75 6f 74 61 2d 33 2e 32 2e 37 20 7b 20  t quota-3.2.7 { 
1750: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49 4e  .  catchsql { IN
1760: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1770: 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35  UES(randomblob(5
1780: 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  00), randomblob(
1790: 35 30 30 29 29 20 7d 20 64 62 31 62 0a 7d 20 7b  500)) } db1b.} {
17a0: 31 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64  1 {database or d
17b0: 69 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f  isk is full}}.do
17c0: 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e  _test quota-3.2.
17d0: 38 20 7b 20 0a 20 20 63 61 74 63 68 73 71 6c 20  8 { .  catchsql 
17e0: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  { INSERT INTO t1
17f0: 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c   VALUES(randombl
1800: 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62  ob(500), randomb
1810: 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 32 61  lob(500)) } db2a
1820: 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20  .} {1 {database 
1830: 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d  or disk is full}
1840: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
1850: 33 2e 32 2e 39 20 7b 20 0a 20 20 63 61 74 63 68  3.2.9 { .  catch
1860: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
1870: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
1880: 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e  omblob(500), ran
1890: 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20  domblob(500)) } 
18a0: 64 62 32 62 0a 7d 20 7b 31 20 7b 64 61 74 61 62  db2b.} {1 {datab
18b0: 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66  ase or disk is f
18c0: 75 6c 6c 7d 7d 0a 0a 73 65 74 20 3a 3a 71 75 6f  ull}}..set ::quo
18d0: 74 61 20 5b 6c 69 73 74 5d 0a 70 72 6f 63 20 71  ta [list].proc q
18e0: 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 20 7b 66  uota_callback {f
18f0: 69 6c 65 20 6c 69 6d 69 74 76 61 72 20 73 69 7a  ile limitvar siz
1900: 65 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c 69  e} {.  upvar $li
1910: 6d 69 74 76 61 72 20 6c 69 6d 69 74 0a 20 20 69  mitvar limit.  i
1920: 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  f {$::tcl_platfo
1930: 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77  rm(platform)=="w
1940: 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 20 20 73  indows"} {.    s
1950: 65 74 20 66 69 6c 65 20 5b 20 6c 69 6e 64 65 78  et file [ lindex
1960: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 5c   [string map {\\
1970: 20 5c 2f 7d 20 24 66 69 6c 65 5d 20 30 20 5d 0a   \/} $file] 0 ].
1980: 20 20 7d 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a    }.  lappend ::
1990: 71 75 6f 74 61 20 24 66 69 6c 65 20 24 73 69 7a  quota $file $siz
19a0: 65 0a 20 20 73 65 74 20 6c 69 6d 69 74 20 30 0a  e.  set limit 0.
19b0: 7d 0a 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f  }.sqlite3_quota_
19c0: 73 65 74 20 2a 20 34 30 39 36 20 71 75 6f 74 61  set * 4096 quota
19d0: 5f 63 61 6c 6c 62 61 63 6b 0a 64 6f 5f 74 65 73  _callback.do_tes
19e0: 74 20 71 75 6f 74 61 2d 33 2e 33 2e 31 20 7b 20  t quota-3.3.1 { 
19f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
1a00: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1a10: 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30  ES(randomblob(50
1a20: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35  0), randomblob(5
1a30: 30 30 29 29 20 7d 20 64 62 31 61 0a 20 20 65 78  00)) } db1a.  ex
1a40: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
1a50: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
1a60: 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72  ndomblob(500), r
1a70: 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20  andomblob(500)) 
1a80: 7d 20 64 62 31 62 0a 20 20 65 78 65 63 73 71 6c  } db1b.  execsql
1a90: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
1aa0: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62  1 VALUES(randomb
1ab0: 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d  lob(500), random
1ac0: 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 32  blob(500)) } db2
1ad0: 61 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e  a.  execsql { IN
1ae0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1af0: 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35  UES(randomblob(5
1b00: 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  00), randomblob(
1b10: 35 30 30 29 29 20 7d 20 64 62 32 62 0a 20 20 73  500)) } db2b.  s
1b20: 65 74 20 3a 3a 71 75 6f 74 61 0a 7d 20 5b 6c 69  et ::quota.} [li
1b30: 73 74 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  st [file join [g
1b40: 65 74 5f 70 77 64 5d 20 74 65 73 74 2e 64 62 5d  et_pwd] test.db]
1b50: 20 35 31 32 30 5d 0a 0a 64 6f 5f 74 65 73 74 20   5120]..do_test 
1b60: 71 75 6f 74 61 2d 33 2e 32 2e 58 20 7b 0a 20 20  quota-3.2.X {.  
1b70: 66 6f 72 65 61 63 68 20 64 62 20 7b 64 62 31 61  foreach db {db1a
1b80: 20 64 62 32 61 20 64 62 32 62 20 64 62 31 62 7d   db2a db2b db1b}
1b90: 20 7b 20 63 61 74 63 68 20 7b 20 24 64 62 20 63   { catch { $db c
1ba0: 6c 6f 73 65 20 7d 20 7d 0a 20 20 73 71 6c 69 74  lose } }.  sqlit
1bb0: 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a 20 30  e3_quota_set * 0
1bc0: 20 7b 7d 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b   {}.} {SQLITE_OK
1bd0: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
1be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
1c20: 51 75 6f 74 61 73 20 61 72 65 20 64 65 6c 65 74  Quotas are delet
1c30: 65 64 20 77 68 65 6e 20 75 6e 75 73 65 64 20 61  ed when unused a
1c40: 6e 64 20 77 68 65 6e 20 74 68 65 69 72 20 6c 69  nd when their li
1c50: 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 7a 65  mit is set to ze
1c60: 72 6f 0a 23 0a 0a 23 20 52 65 74 75 72 6e 20 61  ro.#..# Return a
1c70: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 75 72   list of all cur
1c80: 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 20 71  rently defined q
1c90: 75 6f 74 61 73 2e 20 20 45 61 63 68 20 71 75 6f  uotas.  Each quo
1ca0: 74 61 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  ta is identified
1cb0: 0a 23 20 62 79 20 69 74 73 20 70 61 74 74 65 72  .# by its patter
1cc0: 6e 2e 0a 70 72 6f 63 20 71 75 6f 74 61 5f 6c 69  n..proc quota_li
1cd0: 73 74 20 7b 7d 20 7b 0a 20 20 73 65 74 20 61 6c  st {} {.  set al
1ce0: 6c 71 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20  lq {}.  foreach 
1cf0: 71 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  q [sqlite3_quota
1d00: 5f 64 75 6d 70 5d 20 7b 0a 20 20 20 20 6c 61 70  _dump] {.    lap
1d10: 70 65 6e 64 20 61 6c 6c 71 20 5b 6c 69 6e 64 65  pend allq [linde
1d20: 78 20 24 71 20 30 5d 0a 20 20 7d 0a 20 20 72 65  x $q 0].  }.  re
1d30: 74 75 72 6e 20 5b 6c 73 6f 72 74 20 24 61 6c 6c  turn [lsort $all
1d40: 71 5d 0a 7d 0a 70 72 6f 63 20 71 75 6f 74 61 5f  q].}.proc quota_
1d50: 73 69 7a 65 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  size {name} {.  
1d60: 73 65 74 20 61 6c 6c 71 20 7b 7d 0a 20 20 66 6f  set allq {}.  fo
1d70: 72 65 61 63 68 20 71 20 5b 73 71 6c 69 74 65 33  reach q [sqlite3
1d80: 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 20 7b 0a 20  _quota_dump] {. 
1d90: 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24     if {[lindex $
1da0: 71 20 30 5d 3d 3d 24 6e 61 6d 65 7d 20 7b 72 65  q 0]==$name} {re
1db0: 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 71 20  turn [lindex $q 
1dc0: 32 5d 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  2]}.  }.  return
1dd0: 20 30 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75   0.}..do_test qu
1de0: 6f 74 61 2d 34 2e 31 2e 31 20 7b 0a 20 20 73 71  ota-4.1.1 {.  sq
1df0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
1e00: 2a 74 65 73 74 2e 64 62 20 30 20 7b 7d 0a 20 20  *test.db 0 {}.  
1e10: 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d 0a  quota_list.} {}.
1e20: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
1e30: 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.2 {.  sqlite3_
1e40: 71 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74 2e  quota_set *test.
1e50: 64 62 20 34 30 39 36 20 7b 7d 0a 20 20 71 75 6f  db 4096 {}.  quo
1e60: 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74  ta_list.} {*test
1e70: 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  .db}.do_test quo
1e80: 74 61 2d 34 2e 31 2e 33 20 7b 0a 20 20 73 71 6c  ta-4.1.3 {.  sql
1e90: 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a  ite3_quota_set *
1ea0: 74 65 73 74 32 2e 64 62 20 30 20 7b 7d 0a 20 20  test2.db 0 {}.  
1eb0: 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74  quota_list.} {*t
1ec0: 65 73 74 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20  est.db}.do_test 
1ed0: 71 75 6f 74 61 2d 34 2e 31 2e 34 20 7b 0a 20 20  quota-4.1.4 {.  
1ee0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
1ef0: 74 20 2a 74 65 73 74 32 2e 64 62 20 31 30 30 30  t *test2.db 1000
1f00: 30 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69  00 {}.  quota_li
1f10: 73 74 0a 7d 20 7b 2a 74 65 73 74 2e 64 62 20 2a  st.} {*test.db *
1f20: 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f 74 65 73  test2.db}.do_tes
1f30: 74 20 71 75 6f 74 61 2d 34 2e 31 2e 35 20 7b 0a  t quota-4.1.5 {.
1f40: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
1f50: 73 65 74 20 2a 74 65 73 74 2e 64 62 20 30 20 7b  set *test.db 0 {
1f60: 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d  }.  quota_list.}
1f70: 20 7b 2a 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f   {*test2.db}.do_
1f80: 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 36  test quota-4.1.6
1f90: 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65   {.  forcedelete
1fa0: 20 74 65 73 74 32 2e 64 62 20 74 65 73 74 32 2e   test2.db test2.
1fb0: 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73 74 32  db-journal test2
1fc0: 2e 64 62 2d 77 61 6c 0a 20 20 73 71 6c 69 74 65  .db-wal.  sqlite
1fd0: 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20  3 db test2.db.  
1fe0: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
1ff0: 54 41 42 4c 45 20 74 32 28 78 29 3b 20 49 4e 53  TABLE t2(x); INS
2000: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
2010: 45 53 28 27 74 61 62 2d 74 32 27 29 3b 7d 0a 20  ES('tab-t2');}. 
2020: 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a   quota_list.} {*
2030: 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f 74 65 73  test2.db}.do_tes
2040: 74 20 71 75 6f 74 61 2d 34 2e 31 2e 37 20 7b 0a  t quota-4.1.7 {.
2050: 20 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45    catchsql {INSE
2060: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
2070: 53 28 7a 65 72 6f 62 6c 6f 62 28 32 30 30 30 30  S(zeroblob(20000
2080: 30 29 29 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62  0))}.} {1 {datab
2090: 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66  ase or disk is f
20a0: 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75  ull}}.do_test qu
20b0: 6f 74 61 2d 34 2e 31 2e 38 20 7b 0a 20 20 73 71  ota-4.1.8 {.  sq
20c0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e  lite3 db2 test2.
20d0: 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53  db.  db2 eval {S
20e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
20f0: 0a 7d 20 7b 74 61 62 2d 74 32 7d 0a 64 6f 5f 74  .} {tab-t2}.do_t
2100: 65 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 39 20  est quota-4.1.9 
2110: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
2120: 61 5f 73 65 74 20 2a 74 65 73 74 32 2e 64 62 20  a_set *test2.db 
2130: 30 20 7b 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  0 {}.  catchsql 
2140: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  {INSERT INTO t2 
2150: 56 41 4c 55 45 53 28 7a 65 72 6f 62 6c 6f 62 28  VALUES(zeroblob(
2160: 32 30 30 30 30 30 29 29 7d 0a 7d 20 7b 30 20 7b  200000))}.} {0 {
2170: 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  }}.do_test quota
2180: 2d 34 2e 31 2e 31 30 20 7b 0a 20 20 71 75 6f 74  -4.1.10 {.  quot
2190: 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74 32  a_list.} {*test2
21a0: 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  .db}.do_test quo
21b0: 74 61 2d 34 2e 31 2e 31 31 20 7b 0a 20 20 64 62  ta-4.1.11 {.  db
21c0: 32 20 63 6c 6f 73 65 0a 20 20 71 75 6f 74 61 5f  2 close.  quota_
21d0: 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74 32 2e 64  list.} {*test2.d
21e0: 62 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  b}.do_test quota
21f0: 2d 34 2e 31 2e 31 32 20 7b 0a 20 20 64 62 20 63  -4.1.12 {.  db c
2200: 6c 6f 73 65 0a 20 20 71 75 6f 74 61 5f 6c 69 73  lose.  quota_lis
2210: 74 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  t.} {}..do_test 
2220: 71 75 6f 74 61 2d 34 2e 32 2e 31 20 7b 0a 20 20  quota-4.2.1 {.  
2230: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
2240: 74 20 41 20 31 30 30 30 20 7b 7d 0a 20 20 73 71  t A 1000 {}.  sq
2250: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
2260: 42 20 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c 69  B 1000 {}.  sqli
2270: 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 43 20  te3_quota_set C 
2280: 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65  1000 {}.  sqlite
2290: 33 5f 71 75 6f 74 61 5f 73 65 74 20 44 20 31 30  3_quota_set D 10
22a0: 30 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69  00 {}.  quota_li
22b0: 73 74 0a 7d 20 7b 41 20 42 20 43 20 44 7d 0a 64  st.} {A B C D}.d
22c0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 32  o_test quota-4.2
22d0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .2 {.  sqlite3_q
22e0: 75 6f 74 61 5f 73 65 74 20 43 20 30 20 7b 7d 0a  uota_set C 0 {}.
22f0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
2300: 73 65 74 20 42 20 30 20 7b 7d 0a 20 20 71 75 6f  set B 0 {}.  quo
2310: 74 61 5f 6c 69 73 74 0a 7d 20 7b 41 20 44 7d 0a  ta_list.} {A D}.
2320: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
2330: 32 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.3 {.  sqlite3_
2340: 71 75 6f 74 61 5f 73 65 74 20 41 20 30 20 7b 7d  quota_set A 0 {}
2350: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
2360: 5f 73 65 74 20 44 20 30 20 7b 7d 0a 20 20 71 75  _set D 0 {}.  qu
2370: 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 64 6f  ota_list.} {}.do
2380: 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 32 2e  _test quota-4.2.
2390: 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  4 {.  sqlite3_qu
23a0: 6f 74 61 5f 73 65 74 20 41 20 31 30 30 30 20 7b  ota_set A 1000 {
23b0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  }.  sqlite3_quot
23c0: 61 5f 73 65 74 20 42 20 31 30 30 30 20 7b 7d 0a  a_set B 1000 {}.
23d0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
23e0: 73 65 74 20 43 20 31 30 30 30 20 7b 7d 0a 20 20  set C 1000 {}.  
23f0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
2400: 74 20 41 20 30 20 7b 7d 0a 20 20 73 71 6c 69 74  t A 0 {}.  sqlit
2410: 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 42 20 30  e3_quota_set B 0
2420: 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75   {}.  sqlite3_qu
2430: 6f 74 61 5f 73 65 74 20 43 20 30 20 7b 7d 0a 20  ota_set C 0 {}. 
2440: 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d   quota_list.} {}
2450: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
2460: 2e 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  .2.5 {.  sqlite3
2470: 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 31 30 30  _quota_set A 100
2480: 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71  0 {}.  sqlite3_q
2490: 75 6f 74 61 5f 73 65 74 20 42 20 31 30 30 30 20  uota_set B 1000 
24a0: 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  {}.  sqlite3_quo
24b0: 74 61 5f 73 65 74 20 43 20 31 30 30 30 20 7b 7d  ta_set C 1000 {}
24c0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
24d0: 5f 73 65 74 20 43 20 30 20 7b 7d 0a 20 20 73 71  _set C 0 {}.  sq
24e0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
24f0: 42 20 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33  B 0 {}.  sqlite3
2500: 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 30 20 7b  _quota_set A 0 {
2510: 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d  }.  quota_list.}
2520: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {}..do_test quo
2530: 74 61 2d 34 2e 33 2e 31 20 7b 0a 20 20 73 71 6c  ta-4.3.1 {.  sql
2540: 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 41  ite3_quota_set A
2550: 20 31 30 30 30 20 71 75 6f 74 61 5f 63 61 6c 6c   1000 quota_call
2560: 62 61 63 6b 0a 20 20 73 71 6c 69 74 65 33 20 64  back.  sqlite3 d
2570: 62 20 41 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  b A.  sqlite3_qu
2580: 6f 74 61 5f 73 65 74 20 41 20 30 20 71 75 6f 74  ota_set A 0 quot
2590: 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 64 62 20  a_callback.  db 
25a0: 63 6c 6f 73 65 0a 20 20 71 75 6f 74 61 5f 6c 69  close.  quota_li
25b0: 73 74 0a 7d 20 7b 7d 0a 0a 75 6e 73 65 74 20 2d  st.} {}..unset -
25c0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 71 75 6f 74 61  nocomplain quota
25d0: 67 72 6f 75 70 0a 69 66 20 7b 24 74 63 6c 5f 70  group.if {$tcl_p
25e0: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
25f0: 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a  )=="windows"} {.
2600: 20 20 73 65 74 20 71 75 6f 74 61 67 72 6f 75 70    set quotagroup
2610: 20 2a 5c 5c 71 75 6f 74 61 2d 74 65 73 74 2d 41   *\\quota-test-A
2620: 3f 2e 64 62 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  ?.db.} else {.  
2630: 73 65 74 20 71 75 6f 74 61 67 72 6f 75 70 20 2a  set quotagroup *
2640: 2f 71 75 6f 74 61 2d 74 65 73 74 2d 41 3f 2e 64  /quota-test-A?.d
2650: 62 0a 7d 20 0a 66 6f 72 65 61 63 68 20 66 69 6c  b.} .foreach fil
2660: 65 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c  e [glob -nocompl
2670: 61 69 6e 20 71 75 6f 74 61 2d 74 65 73 74 2d 41  ain quota-test-A
2680: 2a 5d 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c 65  *] {.  forcedele
2690: 74 65 20 24 66 69 6c 65 0a 7d 0a 64 6f 5f 74 65  te $file.}.do_te
26a0: 73 74 20 71 75 6f 74 61 2d 34 2e 34 2e 31 20 7b  st quota-4.4.1 {
26b0: 0a 20 20 73 65 74 20 3a 3a 71 75 6f 74 61 20 7b  .  set ::quota {
26c0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  }.  sqlite3_quot
26d0: 61 5f 73 65 74 20 24 3a 3a 71 75 6f 74 61 67 72  a_set $::quotagr
26e0: 6f 75 70 20 31 30 30 30 30 20 71 75 6f 74 61 5f  oup 10000 quota_
26f0: 63 61 6c 6c 62 61 63 6b 0a 20 20 66 6f 72 63 65  callback.  force
2700: 64 65 6c 65 74 65 20 2e 2f 71 75 6f 74 61 2d 74  delete ./quota-t
2710: 65 73 74 2d 41 31 2e 64 62 20 2e 2f 71 75 6f 74  est-A1.db ./quot
2720: 61 2d 74 65 73 74 2d 41 32 2e 64 62 0a 20 20 73  a-test-A2.db.  s
2730: 71 6c 69 74 65 33 20 64 62 20 2e 2f 71 75 6f 74  qlite3 db ./quot
2740: 61 2d 74 65 73 74 2d 41 31 2e 64 62 0a 20 20 64  a-test-A1.db.  d
2750: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 43 52  b eval {.     CR
2760: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29  EATE TABLE t1(x)
2770: 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;.     INSERT IN
2780: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
2790: 64 6f 6d 62 6c 6f 62 28 35 30 30 30 29 29 3b 0a  domblob(5000));.
27a0: 20 20 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74    }.  quota_list
27b0: 0a 7d 20 5b 6c 69 73 74 20 24 71 75 6f 74 61 67  .} [list $quotag
27c0: 72 6f 75 70 5d 0a 64 6f 5f 74 65 73 74 20 71 75  roup].do_test qu
27d0: 6f 74 61 2d 34 2e 34 2e 32 20 7b 0a 20 20 65 78  ota-4.4.2 {.  ex
27e0: 70 72 20 7b 24 3a 3a 71 75 6f 74 61 3d 3d 22 22  pr {$::quota==""
27f0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
2800: 71 75 6f 74 61 2d 34 2e 34 2e 33 20 7b 0a 20 20  quota-4.4.3 {.  
2810: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
2820: 65 33 20 64 62 20 2e 2f 71 75 6f 74 61 2d 74 65  e3 db ./quota-te
2830: 73 74 2d 41 32 2e 64 62 0a 20 20 64 62 20 65 76  st-A2.db.  db ev
2840: 61 6c 20 7b 0a 20 20 20 20 20 43 52 45 41 54 45  al {.     CREATE
2850: 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20   TABLE t1(x);.  
2860: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2870: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62  1 VALUES(randomb
2880: 6c 6f 62 28 35 30 30 30 29 29 3b 0a 20 20 7d 0a  lob(5000));.  }.
2890: 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 5b    quota_list.} [
28a0: 6c 69 73 74 20 24 71 75 6f 74 61 67 72 6f 75 70  list $quotagroup
28b0: 5d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  ].do_test quota-
28c0: 34 2e 34 2e 34 20 7b 0a 20 20 65 78 70 72 20 7b  4.4.4 {.  expr {
28d0: 24 3a 3a 71 75 6f 74 61 21 3d 22 22 7d 0a 7d 20  $::quota!=""}.} 
28e0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  {1}.do_test quot
28f0: 61 2d 34 2e 34 2e 35 20 7b 0a 20 20 64 62 20 63  a-4.4.5 {.  db c
2900: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 71  lose.  sqlite3_q
2910: 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71 75 6f 74  uota_set $::quot
2920: 61 67 72 6f 75 70 20 30 20 7b 7d 0a 20 20 73 71  agroup 0 {}.  sq
2930: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70  lite3_quota_dump
2940: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75  .} {}.do_test qu
2950: 6f 74 61 2d 34 2e 34 2e 36 20 7b 0a 20 20 73 71  ota-4.4.6 {.  sq
2960: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
2970: 24 71 75 6f 74 61 67 72 6f 75 70 20 31 30 30 30  $quotagroup 1000
2980: 30 20 71 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b  0 quota_callback
2990: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 71 75  .  sqlite3 db qu
29a0: 6f 74 61 2d 74 65 73 74 2d 41 31 2e 64 62 0a 20  ota-test-A1.db. 
29b0: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
29c0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73   count(*) FROM s
29d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20  qlite_master}.  
29e0: 71 75 6f 74 61 5f 73 69 7a 65 20 24 71 75 6f 74  quota_size $quot
29f0: 61 67 72 6f 75 70 0a 7d 20 5b 66 69 6c 65 20 73  agroup.} [file s
2a00: 69 7a 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 41  ize quota-test-A
2a10: 31 2e 64 62 5d 0a 64 6f 5f 74 65 73 74 20 71 75  1.db].do_test qu
2a20: 6f 74 61 2d 34 2e 34 2e 37 20 7b 0a 20 20 73 71  ota-4.4.7 {.  sq
2a30: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65  lite3_quota_file
2a40: 20 71 75 6f 74 61 2d 74 65 73 74 2d 41 32 2e 64   quota-test-A2.d
2a50: 62 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24  b.  quota_size $
2a60: 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 5b  ::quotagroup.} [
2a70: 65 78 70 72 20 7b 5b 66 69 6c 65 20 73 69 7a 65  expr {[file size
2a80: 20 71 75 6f 74 61 2d 74 65 73 74 2d 41 31 2e 64   quota-test-A1.d
2a90: 62 5d 2b 5b 66 69 6c 65 20 73 69 7a 65 20 71 75  b]+[file size qu
2aa0: 6f 74 61 2d 74 65 73 74 2d 41 32 2e 64 62 5d 7d  ota-test-A2.db]}
2ab0: 5d 0a 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  ]..unset -nocomp
2ac0: 6c 61 69 6e 20 71 75 6f 74 61 67 72 6f 75 70 0a  lain quotagroup.
2ad0: 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72  if {$tcl_platfor
2ae0: 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69  m(platform)=="wi
2af0: 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 73 65 74 20  ndows"} {.  set 
2b00: 71 75 6f 74 61 67 72 6f 75 70 20 2a 5c 5c 71 75  quotagroup *\\qu
2b10: 6f 74 61 2d 74 65 73 74 2d 42 2a 0a 7d 20 65 6c  ota-test-B*.} el
2b20: 73 65 20 7b 0a 20 20 73 65 74 20 71 75 6f 74 61  se {.  set quota
2b30: 67 72 6f 75 70 20 2a 2f 71 75 6f 74 61 2d 74 65  group */quota-te
2b40: 73 74 2d 42 2a 0a 7d 20 0a 66 6f 72 65 61 63 68  st-B*.} .foreach
2b50: 20 66 69 6c 65 20 5b 67 6c 6f 62 20 2d 6e 6f 63   file [glob -noc
2b60: 6f 6d 70 6c 61 69 6e 20 71 75 6f 74 61 2d 74 65  omplain quota-te
2b70: 73 74 2d 42 2a 5d 20 7b 0a 20 20 66 6f 72 63 65  st-B*] {.  force
2b80: 64 65 6c 65 74 65 20 24 66 69 6c 65 0a 7d 0a 64  delete $file.}.d
2b90: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 35  o_test quota-4.5
2ba0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .1 {.  sqlite3_q
2bb0: 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71 75 6f 74  uota_set $::quot
2bc0: 61 67 72 6f 75 70 20 31 30 30 30 30 30 20 71 75  agroup 100000 qu
2bd0: 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 71  ota_callback.  q
2be0: 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f  uota_size $::quo
2bf0: 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 64 6f  tagroup.} {0}.do
2c00: 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 35 2e  _test quota-4.5.
2c10: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  2 {.  sqlite3_qu
2c20: 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74 61 2d 74  ota_file quota-t
2c30: 65 73 74 2d 42 31 2e 74 78 74 0a 20 20 71 75 6f  est-B1.txt.  quo
2c40: 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f 74 61  ta_size $::quota
2c50: 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 70 72 6f 63  group.} {0}.proc
2c60: 20 61 64 64 5f 74 6f 5f 66 69 6c 65 20 7b 6e 61   add_to_file {na
2c70: 6d 65 20 6e 7d 20 7b 0a 20 20 73 65 74 20 6f 75  me n} {.  set ou
2c80: 74 20 5b 6f 70 65 6e 20 24 6e 61 6d 65 20 61 5d  t [open $name a]
2c90: 0a 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 6f  .  fconfigure $o
2ca0: 75 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20  ut -translation 
2cb0: 62 69 6e 61 72 79 0a 20 20 70 75 74 73 20 2d 6e  binary.  puts -n
2cc0: 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 73  onewline $out [s
2cd0: 74 72 69 6e 67 20 72 65 70 65 61 74 20 78 20 24  tring repeat x $
2ce0: 6e 5d 0a 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a  n].  close $out.
2cf0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
2d00: 34 2e 35 2e 33 20 7b 0a 20 20 61 64 64 5f 74 6f  4.5.3 {.  add_to
2d10: 5f 66 69 6c 65 20 71 75 6f 74 61 2d 74 65 73 74  _file quota-test
2d20: 2d 42 31 2e 74 78 74 20 31 32 33 0a 20 20 73 71  -B1.txt 123.  sq
2d30: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65  lite3_quota_file
2d40: 20 71 75 6f 74 61 2d 74 65 73 74 2d 42 31 2e 74   quota-test-B1.t
2d50: 78 74 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20  xt.  quota_size 
2d60: 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20  $::quotagroup.} 
2d70: 7b 31 32 33 7d 0a 64 6f 5f 74 65 73 74 20 71 75  {123}.do_test qu
2d80: 6f 74 61 2d 34 2e 35 2e 34 20 7b 0a 20 20 61 64  ota-4.5.4 {.  ad
2d90: 64 5f 74 6f 5f 66 69 6c 65 20 71 75 6f 74 61 2d  d_to_file quota-
2da0: 74 65 73 74 2d 42 32 2e 74 78 74 20 32 33 34 0a  test-B2.txt 234.
2db0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
2dc0: 66 69 6c 65 20 71 75 6f 74 61 2d 74 65 73 74 2d  file quota-test-
2dd0: 42 32 2e 74 78 74 0a 20 20 71 75 6f 74 61 5f 73  B2.txt.  quota_s
2de0: 69 7a 65 20 24 3a 3a 71 75 6f 74 61 67 72 6f 75  ize $::quotagrou
2df0: 70 0a 7d 20 7b 33 35 37 7d 0a 64 6f 5f 74 65 73  p.} {357}.do_tes
2e00: 74 20 71 75 6f 74 61 2d 34 2e 35 2e 35 20 7b 0a  t quota-4.5.5 {.
2e10: 20 20 61 64 64 5f 74 6f 5f 66 69 6c 65 20 71 75    add_to_file qu
2e20: 6f 74 61 2d 74 65 73 74 2d 42 31 2e 74 78 74 20  ota-test-B1.txt 
2e30: 32 30 30 30 0a 20 20 73 71 6c 69 74 65 33 5f 71  2000.  sqlite3_q
2e40: 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74 61 2d  uota_file quota-
2e50: 74 65 73 74 2d 42 31 2e 74 78 74 0a 20 20 71 75  test-B1.txt.  qu
2e60: 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f 74  ota_size $::quot
2e70: 61 67 72 6f 75 70 0a 7d 20 7b 32 33 35 37 7d 0a  agroup.} {2357}.
2e80: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
2e90: 35 2e 36 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c  5.6 {.  forcedel
2ea0: 65 74 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 42  ete quota-test-B
2eb0: 31 2e 74 78 74 0a 20 20 73 71 6c 69 74 65 33 5f  1.txt.  sqlite3_
2ec0: 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74 61  quota_file quota
2ed0: 2d 74 65 73 74 2d 42 31 2e 74 78 74 0a 20 20 71  -test-B1.txt.  q
2ee0: 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f  uota_size $::quo
2ef0: 74 61 67 72 6f 75 70 0a 7d 20 7b 32 33 34 7d 0a  tagroup.} {234}.
2f00: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
2f10: 35 2e 37 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c  5.7 {.  forcedel
2f20: 65 74 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 42  ete quota-test-B
2f30: 32 2e 74 78 74 0a 20 20 73 71 6c 69 74 65 33 5f  2.txt.  sqlite3_
2f40: 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74 61  quota_file quota
2f50: 2d 74 65 73 74 2d 42 32 2e 74 78 74 0a 20 20 71  -test-B2.txt.  q
2f60: 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f  uota_size $::quo
2f70: 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 64 6f  tagroup.} {0}.do
2f80: 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 35 2e  _test quota-4.5.
2f90: 38 20 7b 0a 20 20 61 64 64 5f 74 6f 5f 66 69 6c  8 {.  add_to_fil
2fa0: 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 42 33 2e  e quota-test-B3.
2fb0: 74 78 74 20 31 32 33 34 0a 20 20 73 71 6c 69 74  txt 1234.  sqlit
2fc0: 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75  e3_quota_file qu
2fd0: 6f 74 61 2d 74 65 73 74 2d 42 33 2e 74 78 74 0a  ota-test-B3.txt.
2fe0: 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a    quota_size $::
2ff0: 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 31 32  quotagroup.} {12
3000: 33 34 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  34}.do_test quot
3010: 61 2d 34 2e 35 2e 39 20 7b 0a 20 20 73 71 6c 69  a-4.5.9 {.  sqli
3020: 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 24 71  te3_quota_set $q
3030: 75 6f 74 61 67 72 6f 75 70 20 30 20 7b 7d 0a 20  uotagroup 0 {}. 
3040: 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71   quota_size $::q
3050: 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a  uotagroup.} {0}.
3060: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
3070: 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .9.1 {.  db clos
3080: 65 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  e.  sqlite3_quot
3090: 61 5f 73 65 74 20 41 20 31 30 30 30 20 71 75 6f  a_set A 1000 quo
30a0: 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 73 71  ta_callback.  sq
30b0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 68 75 74  lite3_quota_shut
30c0: 64 6f 77 6e 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  down.} {SQLITE_O
30d0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  K}.do_test quota
30e0: 2d 34 2e 39 2e 32 20 7b 0a 20 20 71 75 6f 74 61  -4.9.2 {.  quota
30f0: 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d  _list.} {}..#---
3100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3140: 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66 6f 6c  ------.# The fol
3150: 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 74 65 73  lowing tests tes
3160: 74 20 74 68 61 74 20 74 68 65 20 71 75 6f 74 61  t that the quota
3170: 20 56 46 53 20 68 61 6e 64 6c 65 73 20 6d 61 6c   VFS handles mal
3180: 6c 6f 63 20 61 6e 64 20 49 4f 20 0a 23 20 65 72  loc and IO .# er
3190: 72 6f 72 73 2e 0a 23 0a 0a 73 71 6c 69 74 65 33  rors..#..sqlite3
31a0: 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a  _quota_initializ
31b0: 65 20 22 22 20 31 0a 73 71 6c 69 74 65 33 5f 71  e "" 1.sqlite3_q
31c0: 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74 2e 64  uota_set *test.d
31d0: 62 20 34 30 39 36 20 7b 7d 0a 0a 64 6f 5f 66 61  b 4096 {}..do_fa
31e0: 75 6c 74 73 69 6d 5f 74 65 73 74 20 71 75 6f 74  ultsim_test quot
31f0: 61 2d 35 2e 31 20 2d 70 72 65 70 20 7b 0a 20 20  a-5.1 -prep {.  
3200: 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d  catch {db close}
3210: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71 6c  .} -body {.  sql
3220: 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62  ite3 db test2.db
3230: 0a 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74  .}.do_faultsim_t
3240: 65 73 74 20 71 75 6f 74 61 2d 35 2e 32 20 2d 70  est quota-5.2 -p
3250: 72 65 70 20 7b 0a 20 20 63 61 74 63 68 20 7b 64  rep {.  catch {d
3260: 62 20 63 6c 6f 73 65 7d 0a 7d 20 2d 62 6f 64 79  b close}.} -body
3270: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20   {.  sqlite3 db 
3280: 74 65 73 74 2e 64 62 0a 7d 0a 0a 63 61 74 63 68  test.db.}..catch
3290: 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 66 6f   { db close }.fo
32a0: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
32b0: 62 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  b..do_test quota
32c0: 2d 35 2e 33 2e 70 72 65 70 20 7b 0a 20 20 73 71  -5.3.prep {.  sq
32d0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
32e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
32f0: 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63   PRAGMA auto_vac
3300: 75 75 6d 20 3d 20 31 3b 0a 20 20 20 20 50 52 41  uum = 1;.    PRA
3310: 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20  GMA page_size = 
3320: 31 30 32 34 3b 0a 20 20 20 20 43 52 45 41 54 45  1024;.    CREATE
3330: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b   TABLE t1(a, b);
3340: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3350: 20 74 31 20 56 41 4c 55 45 53 28 31 30 2c 20 7a   t1 VALUES(10, z
3360: 65 72 6f 62 6c 6f 62 28 31 32 30 30 29 29 3b 0a  eroblob(1200));.
3370: 20 20 7d 0a 20 20 66 61 75 6c 74 73 69 6d 5f 73    }.  faultsim_s
3380: 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a 7d 20  ave_and_close.} 
3390: 7b 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74  {}.do_faultsim_t
33a0: 65 73 74 20 71 75 6f 74 61 2d 35 2e 33 20 2d 70  est quota-5.3 -p
33b0: 72 65 70 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d  rep {.  faultsim
33c0: 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72 65 6f  _restore_and_reo
33d0: 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  pen.} -body {.  
33e0: 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45  execsql { DELETE
33f0: 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 0a 0a 64 6f   FROM t1 }.}..do
3400: 5f 74 65 73 74 20 71 75 6f 74 61 2d 35 2e 34 2e  _test quota-5.4.
3410: 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 64 62  1 {.  catch { db
3420: 20 63 6c 6f 73 65 20 7d 0a 20 20 66 6f 72 63 65   close }.  force
3430: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
3440: 20 66 69 6c 65 20 6d 6b 64 69 72 20 74 65 73 74   file mkdir test
3450: 2e 64 62 0a 20 20 6c 69 73 74 20 5b 63 61 74 63  .db.  list [catc
3460: 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74  h { sqlite3 db t
3470: 65 73 74 2e 64 62 20 7d 20 6d 73 67 5d 20 24 6d  est.db } msg] $m
3480: 73 67 0a 7d 20 7b 31 20 7b 75 6e 61 62 6c 65 20  sg.} {1 {unable 
3490: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
34a0: 20 66 69 6c 65 7d 7d 0a 0a 64 6f 5f 66 61 75 6c   file}}..do_faul
34b0: 74 73 69 6d 5f 74 65 73 74 20 71 75 6f 74 61 2d  tsim_test quota-
34c0: 35 2e 35 20 2d 70 72 65 70 20 7b 0a 20 20 63 61  5.5 -prep {.  ca
34d0: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 71 75  tch { sqlite3_qu
34e0: 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20 7d 0a 7d  ota_shutdown }.}
34f0: 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71 6c 69 74   -body {.  sqlit
3500: 65 33 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c  e3_quota_initial
3510: 69 7a 65 20 22 22 20 31 0a 7d 0a 0a 64 6f 5f 66  ize "" 1.}..do_f
3520: 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 71 75 6f  aultsim_test quo
3530: 74 61 2d 35 2e 36 20 2d 70 72 65 70 20 7b 0a 20  ta-5.6 -prep {. 
3540: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
3550: 5f 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20  _quota_shutdown 
3560: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  }.  sqlite3_quot
3570: 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20  a_initialize "" 
3580: 31 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71  1.} -body {.  sq
3590: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
35a0: 2a 20 34 30 39 36 20 7b 7d 0a 7d 0a 0a 63 61 74  * 4096 {}.}..cat
35b0: 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f  ch { sqlite3_quo
35c0: 74 61 5f 73 68 75 74 64 6f 77 6e 20 7d 0a 66 69  ta_shutdown }.fi
35d0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.