/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact bfb269ce81ea52f593f9648316cd5013d766dd2a:


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 66 6f  c_common.tcl..fo
0230: 72 63 65 64 65 6c 65 74 65 20 62 61 6b 2e 64 62  rcedelete bak.db
0240: 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
0250: 69 6e 20 64 65 66 61 75 6c 74 56 66 73 0a 73 65  in defaultVfs.se
0260: 74 20 64 65 66 61 75 6c 74 56 66 73 20 5b 66 69  t defaultVfs [fi
0270: 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 76 66 73 6e 61  le_control_vfsna
0280: 6d 65 20 64 62 5d 0a 64 62 20 63 6c 6f 73 65 0a  me db].db close.
0290: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 31  .do_test quota-1
02a0: 2e 31 20 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f  .1 { sqlite3_quo
02b0: 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 6e 6f  ta_initialize no
02c0: 73 75 63 68 76 66 73 20 31 20 7d 20 7b 53 51 4c  suchvfs 1 } {SQL
02d0: 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65  ITE_ERROR}.do_te
02e0: 73 74 20 71 75 6f 74 61 2d 31 2e 32 20 7b 20 73  st quota-1.2 { s
02f0: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 69 6e 69  qlite3_quota_ini
0300: 74 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20  tialize "" 1 }  
0310: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b        {SQLITE_OK
0320: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
0330: 31 2e 33 20 7b 20 73 71 6c 69 74 65 33 5f 71 75  1.3 { sqlite3_qu
0340: 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22  ota_initialize "
0350: 22 20 31 20 7d 20 20 20 20 20 20 20 20 7b 53 51  " 1 }        {SQ
0360: 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f  LITE_MISUSE}.do_
0370: 74 65 73 74 20 71 75 6f 74 61 2d 31 2e 34 20 7b  test quota-1.4 {
0380: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
0390: 68 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20  hutdown }       
03a0: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
03b0: 4f 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f  OK}..do_test quo
03c0: 74 61 2d 31 2e 35 20 7b 20 73 71 6c 69 74 65 33  ta-1.5 { sqlite3
03d0: 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a  _quota_initializ
03e0: 65 20 22 22 20 30 20 7d 20 20 20 20 20 20 20 20  e "" 0 }        
03f0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
0400: 65 73 74 20 71 75 6f 74 61 2d 31 2e 36 20 7b 20  est quota-1.6 { 
0410: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 68  sqlite3_quota_sh
0420: 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20  utdown }        
0430: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f         {SQLITE_O
0440: 4b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  K}.do_test quota
0450: 2d 31 2e 37 20 7b 20 73 71 6c 69 74 65 33 5f 71  -1.7 { sqlite3_q
0460: 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20  uota_initialize 
0470: 22 22 20 31 20 7d 20 20 20 20 20 20 20 20 7b 53  "" 1 }        {S
0480: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
0490: 74 20 71 75 6f 74 61 2d 31 2e 38 20 7b 20 73 71  t quota-1.8 { sq
04a0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 68 75 74  lite3_quota_shut
04b0: 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20 20  down }          
04c0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
04d0: 0a 0a 0a 23 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 2d 2d 2d 2d 2d 2d  ----------------
0510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
0520: 53 6f 6d 65 20 73 69 6d 70 6c 65 20 77 61 72 6d  Some simple warm
0530: 2d 62 6f 64 79 20 74 65 73 74 73 20 77 69 74 68  -body tests with
0540: 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61   a single databa
0550: 73 65 20 66 69 6c 65 20 69 6e 20 72 6f 6c 6c 62  se file in rollb
0560: 61 63 6b 20 0a 23 20 6d 6f 64 65 3a 0a 23 0a 23  ack .# mode:.#.#
0570: 20 20 20 71 75 6f 74 61 2d 32 2e 31 2e 2a 3a 20     quota-2.1.*: 
0580: 54 65 73 74 20 74 68 61 74 20 53 51 4c 49 54 45  Test that SQLITE
0590: 5f 46 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65  _FULL is returne
05a0: 64 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  d if the databas
05b0: 65 20 77 6f 75 6c 64 0a 23 20 20 20 20 20 20 20  e would.#       
05c0: 20 20 20 20 20 20 20 20 20 65 78 63 65 65 64 20           exceed 
05d0: 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 71  the configured q
05e0: 75 6f 74 61 2e 0a 23 0a 23 20 20 20 71 75 6f 74  uota..#.#   quot
05f0: 61 2d 32 2e 32 2e 2a 3a 20 54 65 73 74 20 74 68  a-2.2.*: Test th
0600: 61 74 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 69  at SQLITE_FULL i
0610: 73 20 6e 6f 74 20 72 65 74 75 72 6e 65 64 20 61  s not returned a
0620: 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  nd the database.
0630: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
0640: 20 67 72 6f 77 73 20 69 66 20 74 68 65 20 63 61   grows if the ca
0650: 6c 6c 62 61 63 6b 20 65 78 74 65 6e 64 73 20 74  llback extends t
0660: 68 65 20 71 75 6f 74 61 20 77 68 65 6e 20 74 68  he quota when th
0670: 65 20 64 61 74 61 62 61 73 65 0a 23 20 20 20 20  e database.#    
0680: 20 20 20 20 20 20 20 20 20 20 20 20 61 74 74 65              atte
0690: 6d 70 74 73 20 74 6f 20 67 72 6f 77 20 62 65 79  mpts to grow bey
06a0: 6f 6e 64 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ond the configur
06b0: 65 64 20 71 75 6f 74 61 2e 0a 23 0a 23 20 20 20  ed quota..#.#   
06c0: 71 75 6f 74 61 2d 32 2e 33 2e 2a 3a 20 4f 70 65  quota-2.3.*: Ope
06d0: 6e 20 61 6e 64 20 63 6c 6f 73 65 20 61 20 64 62  n and close a db
06e0: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 61 72   that is not par
06f0: 74 20 6f 66 20 61 6e 79 20 71 75 6f 74 61 20 67  t of any quota g
0700: 72 6f 75 70 2e 20 41 74 0a 23 20 20 20 20 20 20  roup. At.#      
0710: 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20 70 6f            one po
0720: 69 6e 74 20 74 68 69 73 20 77 61 73 20 63 61 75  int this was cau
0730: 73 69 6e 67 20 6d 75 74 65 78 20 72 65 66 73 20  sing mutex refs 
0740: 74 6f 20 62 65 20 6c 65 61 6b 65 64 2e 0a 23 0a  to be leaked..#.
0750: 23 20 20 20 71 75 6f 74 61 2d 32 2e 34 2e 2a 3a  #   quota-2.4.*:
0760: 20 54 72 79 20 74 6f 20 73 68 75 74 64 6f 77 6e   Try to shutdown
0770: 20 74 68 65 20 71 75 6f 74 61 20 73 79 73 74 65   the quota syste
0780: 6d 20 62 65 66 6f 72 65 20 63 6c 6f 73 69 6e 67  m before closing
0790: 20 74 68 65 20 64 62 0a 23 20 20 20 20 20 20 20   the db.#       
07a0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 2e 20 43           file. C
07b0: 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 66  heck that this f
07c0: 61 69 6c 73 20 61 6e 64 20 74 68 65 20 71 75 6f  ails and the quo
07d0: 74 61 20 73 79 73 74 65 6d 20 73 74 69 6c 6c 20  ta system still 
07e0: 77 6f 72 6b 73 0a 23 20 20 20 20 20 20 20 20 20  works.#         
07f0: 20 20 20 20 20 20 20 61 66 74 65 72 77 61 72 64         afterward
0800: 73 2e 20 54 68 65 6e 20 63 6c 6f 73 65 20 74 68  s. Then close th
0810: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 73  e database and s
0820: 75 63 63 65 73 73 66 75 6c 6c 79 20 73 68 75 74  uccessfully shut
0830: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
0840: 20 20 64 6f 77 6e 20 74 68 65 20 71 75 6f 74 61    down the quota
0850: 20 73 79 73 74 65 6d 2e 0a 23 20 20 20 0a 73 71   system..#   .sq
0860: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 69 6e 69 74  lite3_quota_init
0870: 69 61 6c 69 7a 65 20 22 22 20 31 0a 0a 75 6e 73  ialize "" 1..uns
0880: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 71  et -nocomplain q
0890: 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 0a  uota_request_ok.
08a0: 70 72 6f 63 20 71 75 6f 74 61 5f 63 68 65 63 6b  proc quota_check
08b0: 20 7b 66 69 6c 65 6e 61 6d 65 20 6c 69 6d 69 74   {filename limit
08c0: 76 61 72 20 73 69 7a 65 7d 20 7b 0a 20 20 75 70  var size} {.  up
08d0: 76 61 72 20 24 6c 69 6d 69 74 76 61 72 20 6c 69  var $limitvar li
08e0: 6d 69 74 0a 0a 20 20 6c 61 70 70 65 6e 64 20 3a  mit..  lappend :
08f0: 3a 71 75 6f 74 61 20 5b 73 65 74 20 6c 69 6d 69  :quota [set limi
0900: 74 5d 20 24 73 69 7a 65 0a 20 20 69 66 20 7b 5b  t] $size.  if {[
0910: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 71 75  info exists ::qu
0920: 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 5d 7d  ota_request_ok]}
0930: 20 7b 20 73 65 74 20 6c 69 6d 69 74 20 24 73 69   { set limit $si
0940: 7a 65 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  ze }.}..do_test 
0950: 71 75 6f 74 61 2d 32 2e 31 2e 31 20 7b 0a 20 20  quota-2.1.1 {.  
0960: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
0970: 74 20 2a 74 65 73 74 2e 64 62 20 34 30 39 36 20  t *test.db 4096 
0980: 71 75 6f 74 61 5f 63 68 65 63 6b 0a 7d 20 7b 53  quota_check.} {S
0990: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
09a0: 74 20 71 75 6f 74 61 2d 32 2e 31 2e 32 20 7b 0a  t quota-2.1.2 {.
09b0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
09c0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
09d0: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65  .    PRAGMA page
09e0: 5f 73 69 7a 65 3d 31 30 32 34 3b 0a 20 20 20 20  _size=1024;.    
09f0: 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75  PRAGMA auto_vacu
0a00: 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47  um=OFF;.    PRAG
0a10: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  MA journal_mode=
0a20: 44 45 4c 45 54 45 3b 0a 20 20 7d 0a 20 20 73 65  DELETE;.  }.  se
0a30: 74 20 3a 3a 71 75 6f 74 61 20 5b 6c 69 73 74 5d  t ::quota [list]
0a40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0a50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0a60: 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45  (a, b);.    INSE
0a70: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0a80: 53 28 31 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  S(1, randomblob(
0a90: 31 31 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45  1100));.    INSE
0aa0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0ab0: 53 28 32 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  S(2, randomblob(
0ac0: 31 31 30 30 29 29 3b 0a 20 20 7d 0a 20 20 73 65  1100));.  }.  se
0ad0: 74 20 3a 3a 71 75 6f 74 61 0a 7d 20 7b 7d 0a 64  t ::quota.} {}.d
0ae0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 32 2e 31  o_test quota-2.1
0af0: 2e 32 2e 31 20 7b 0a 20 20 66 69 6c 65 5f 63 6f  .2.1 {.  file_co
0b00: 6e 74 72 6f 6c 5f 76 66 73 6e 61 6d 65 20 64 62  ntrol_vfsname db
0b10: 0a 7d 20 71 75 6f 74 61 2f 24 64 65 66 61 75 6c  .} quota/$defaul
0b20: 74 56 66 73 0a 64 6f 5f 74 65 73 74 20 71 75 6f  tVfs.do_test quo
0b30: 74 61 2d 32 2e 31 2e 33 20 7b 20 66 69 6c 65 20  ta-2.1.3 { file 
0b40: 73 69 7a 65 20 74 65 73 74 2e 64 62 20 7d 20 7b  size test.db } {
0b50: 34 30 39 36 7d 0a 64 6f 5f 74 65 73 74 20 71 75  4096}.do_test qu
0b60: 6f 74 61 2d 32 2e 31 2e 34 20 7b 0a 20 20 63 61  ota-2.1.4 {.  ca
0b70: 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  tchsql { INSERT 
0b80: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
0b90: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30  , randomblob(110
0ba0: 30 29 29 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61  0)) }.} {1 {data
0bb0: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20  base or disk is 
0bc0: 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  full}}.do_test q
0bd0: 75 6f 74 61 2d 32 2e 31 2e 35 20 7b 20 73 65 74  uota-2.1.5 { set
0be0: 20 3a 3a 71 75 6f 74 61 20 7d 20 7b 34 30 39 36   ::quota } {4096
0bf0: 20 35 31 32 30 7d 0a 0a 73 65 74 20 3a 3a 71 75   5120}..set ::qu
0c00: 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 20 31  ota_request_ok 1
0c10: 0a 73 65 74 20 3a 3a 71 75 6f 74 61 20 5b 6c 69  .set ::quota [li
0c20: 73 74 5d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  st].do_test quot
0c30: 61 2d 32 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63  a-2.2.1 {.  exec
0c40: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0c50: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 72  O t1 VALUES(3, r
0c60: 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30 30 29 29  andomblob(1100))
0c70: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
0c80: 71 75 6f 74 61 2d 32 2e 32 2e 32 20 7b 20 73 65  quota-2.2.2 { se
0c90: 74 20 3a 3a 71 75 6f 74 61 20 7d 20 7b 34 30 39  t ::quota } {409
0ca0: 36 20 35 31 32 30 7d 0a 64 6f 5f 74 65 73 74 20  6 5120}.do_test 
0cb0: 71 75 6f 74 61 2d 32 2e 32 2e 33 20 7b 20 66 69  quota-2.2.3 { fi
0cc0: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 20  le size test.db 
0cd0: 7d 20 7b 35 31 32 30 7d 0a 75 6e 73 65 74 20 3a  } {5120}.unset :
0ce0: 3a 71 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f  :quota_request_o
0cf0: 6b 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  k..do_test quota
0d00: 2d 32 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -2.3.1 {.  sqlit
0d10: 65 33 20 64 62 32 20 62 61 6b 2e 64 62 0a 20 20  e3 db2 bak.db.  
0d20: 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a  db2 close.} {}..
0d30: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 32 2e  do_test quota-2.
0d40: 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.1 {.  sqlite3_
0d50: 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 0a 7d  quota_shutdown.}
0d60: 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d   {SQLITE_MISUSE}
0d70: 0a 73 65 74 20 3a 3a 71 75 6f 74 61 20 5b 6c 69  .set ::quota [li
0d80: 73 74 5d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  st].do_test quot
0d90: 61 2d 32 2e 34 2e 32 20 7b 0a 20 20 63 61 74 63  a-2.4.2 {.  catc
0da0: 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  hsql { INSERT IN
0db0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20  TO t1 VALUES(3, 
0dc0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30 30 29  randomblob(1100)
0dd0: 29 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61  ) }.} {1 {databa
0de0: 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75  se or disk is fu
0df0: 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  ll}}.do_test quo
0e00: 74 61 2d 32 2e 34 2e 33 20 7b 20 73 65 74 20 3a  ta-2.4.3 { set :
0e10: 3a 71 75 6f 74 61 20 7d 20 7b 35 31 32 30 20 36  :quota } {5120 6
0e20: 31 34 34 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  144}.do_test quo
0e30: 74 61 2d 32 2e 34 2e 34 20 7b 20 66 69 6c 65 20  ta-2.4.4 { file 
0e40: 73 69 7a 65 20 74 65 73 74 2e 64 62 20 7d 20 7b  size test.db } {
0e50: 35 31 32 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75  5120}.do_test qu
0e60: 6f 74 61 2d 32 2e 34 2e 39 39 20 7b 0a 20 20 64  ota-2.4.99 {.  d
0e70: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
0e80: 33 5f 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e  3_quota_shutdown
0e90: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a  .} {SQLITE_OK}..
0ea0: 23 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 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 72 79  ----------.# Try
0ef0: 20 73 6f 6d 65 20 74 65 73 74 73 20 77 69 74 68   some tests with
0f00: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 63   more than one c
0f10: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64  onnection to a d
0f20: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 53 74  atabase file. St
0f30: 69 6c 6c 0a 23 20 69 6e 20 72 6f 6c 6c 62 61 63  ill.# in rollbac
0f40: 6b 20 6d 6f 64 65 2e 0a 23 0a 23 20 20 20 71 75  k mode..#.#   qu
0f50: 6f 74 61 2d 33 2e 31 2e 2a 3a 20 54 77 6f 20 63  ota-3.1.*: Two c
0f60: 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 61 20  onnections to a 
0f70: 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20  single database 
0f80: 66 69 6c 65 2e 0a 23 0a 23 20 20 20 71 75 6f 74  file..#.#   quot
0f90: 61 2d 33 2e 32 2e 2a 3a 20 54 77 6f 20 63 6f 6e  a-3.2.*: Two con
0fa0: 6e 65 63 74 69 6f 6e 73 20 74 6f 20 65 61 63 68  nections to each
0fb0: 20 6f 66 20 73 65 76 65 72 61 6c 20 64 61 74 61   of several data
0fc0: 62 61 73 65 20 66 69 6c 65 73 20 28 74 68 61 74  base files (that
0fd0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
0fe0: 20 20 61 72 65 20 69 6e 20 74 68 65 20 73 61 6d    are in the sam
0ff0: 65 20 71 75 6f 74 61 20 67 72 6f 75 70 29 2e 0a  e quota group)..
1000: 23 0a 70 72 6f 63 20 71 75 6f 74 61 5f 63 68 65  #.proc quota_che
1010: 63 6b 20 7b 66 69 6c 65 6e 61 6d 65 20 6c 69 6d  ck {filename lim
1020: 69 74 76 61 72 20 73 69 7a 65 7d 20 7b 0a 20 20  itvar size} {.  
1030: 75 70 76 61 72 20 24 6c 69 6d 69 74 76 61 72 20  upvar $limitvar 
1040: 6c 69 6d 69 74 0a 20 20 6c 61 70 70 65 6e 64 20  limit.  lappend 
1050: 3a 3a 71 75 6f 74 61 20 5b 73 65 74 20 6c 69 6d  ::quota [set lim
1060: 69 74 5d 20 24 73 69 7a 65 0a 20 20 69 66 20 7b  it] $size.  if {
1070: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 71  [info exists ::q
1080: 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 5d  uota_request_ok]
1090: 7d 20 7b 20 73 65 74 20 6c 69 6d 69 74 20 24 73  } { set limit $s
10a0: 69 7a 65 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  ize }.}..do_test
10b0: 20 71 75 6f 74 61 2d 33 2e 31 2e 31 20 7b 0a 20   quota-3.1.1 {. 
10c0: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
10d0: 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 5f 71  t.db.  sqlite3_q
10e0: 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20  uota_initialize 
10f0: 22 22 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 71  "" 1.  sqlite3_q
1100: 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74 2e 64  uota_set *test.d
1110: 62 20 34 30 39 36 20 71 75 6f 74 61 5f 63 68 65  b 4096 quota_che
1120: 63 6b 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  ck.} {SQLITE_OK}
1130: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33  .do_test quota-3
1140: 2e 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  .1.2 {.  sqlite3
1150: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
1160: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
1170: 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31  MA page_size = 1
1180: 30 32 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  024;.    PRAGMA 
1190: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 64  journal_mode = d
11a0: 65 6c 65 74 65 3b 0a 20 20 20 20 50 52 41 47 4d  elete;.    PRAGM
11b0: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20  A auto_vacuum = 
11c0: 6f 66 66 3b 0a 20 20 20 20 43 52 45 41 54 45 20  off;.    CREATE 
11d0: 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41  TABLE t1(a PRIMA
11e0: 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20  RY KEY, b);.    
11f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1200: 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b  ALUES(1, 'one');
1210: 0a 20 20 7d 0a 20 20 66 69 6c 65 20 73 69 7a 65  .  }.  file size
1220: 20 74 65 73 74 2e 64 62 0a 7d 20 7b 33 30 37 32   test.db.} {3072
1230: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
1240: 33 2e 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  3.1.3 {.  sqlite
1250: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
1260: 73 65 74 20 3a 3a 71 75 6f 74 61 20 5b 6c 69 73  set ::quota [lis
1270: 74 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43  t].  execsql { C
1280: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
1290: 2c 20 62 29 20 7d 20 64 62 32 0a 20 20 73 65 74  , b) } db2.  set
12a0: 20 3a 3a 71 75 6f 74 61 0a 7d 20 7b 7d 0a 64 6f   ::quota.} {}.do
12b0: 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 31 2e  _test quota-3.1.
12c0: 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  4 {.  catchsql {
12d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
12e0: 28 61 2c 20 62 29 20 7d 0a 7d 20 7b 31 20 7b 64  (a, b) }.} {1 {d
12f0: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
1300: 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73  is full}}.do_tes
1310: 74 20 71 75 6f 74 61 2d 33 2e 31 2e 35 20 7b 0a  t quota-3.1.5 {.
1320: 20 20 73 65 74 20 3a 3a 71 75 6f 74 61 5f 72 65    set ::quota_re
1330: 71 75 65 73 74 5f 6f 6b 20 31 0a 20 20 65 78 65  quest_ok 1.  exe
1340: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
1350: 42 4c 45 20 74 33 28 61 2c 20 62 29 20 7d 0a 7d  BLE t3(a, b) }.}
1360: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74   {}.do_test quot
1370: 61 2d 33 2e 31 2e 36 20 7b 0a 20 20 64 62 20 63  a-3.1.6 {.  db c
1380: 6c 6f 73 65 0a 20 20 64 62 32 20 63 6c 6f 73 65  lose.  db2 close
1390: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
13a0: 5f 73 65 74 20 2a 74 65 73 74 2e 64 62 20 30 20  _set *test.db 0 
13b0: 7b 7d 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  {}.} {SQLITE_OK}
13c0: 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  ..do_test quota-
13d0: 33 2e 32 2e 31 20 7b 0a 20 20 64 65 6c 65 74 65  3.2.1 {.  delete
13e0: 5f 66 69 6c 65 20 66 6f 72 63 65 20 74 65 73 74  _file force test
13f0: 2e 64 62 20 74 65 73 74 32 2e 64 62 20 0a 0a 20  .db test2.db .. 
1400: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
1410: 65 74 20 2a 20 34 30 39 36 20 7b 7d 0a 20 20 73  et * 4096 {}.  s
1420: 71 6c 69 74 65 33 20 64 62 31 61 20 74 65 73 74  qlite3 db1a test
1430: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
1440: 32 61 20 74 65 73 74 32 2e 64 62 0a 0a 20 20 66  2a test2.db..  f
1450: 6f 72 65 61 63 68 20 64 62 20 7b 64 62 31 61 20  oreach db {db1a 
1460: 64 62 32 61 7d 20 7b 0a 20 20 20 20 65 78 65 63  db2a} {.    exec
1470: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
1480: 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31  MA page_size = 1
1490: 30 32 34 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  024;.      PRAGM
14a0: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  A journal_mode =
14b0: 20 64 65 6c 65 74 65 3b 0a 20 20 20 20 20 20 50   delete;.      P
14c0: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
14d0: 6d 20 3d 20 6f 66 66 3b 0a 20 20 20 20 20 20 43  m = off;.      C
14e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
14f0: 2c 20 62 29 3b 0a 20 20 20 20 7d 20 24 64 62 0a  , b);.    } $db.
1500: 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 20 64    }..  sqlite3 d
1510: 62 31 62 20 74 65 73 74 2e 64 62 0a 20 20 73 71  b1b test.db.  sq
1520: 6c 69 74 65 33 20 64 62 32 62 20 74 65 73 74 32  lite3 db2b test2
1530: 2e 64 62 0a 0a 20 20 6c 69 73 74 20 5b 66 69 6c  .db..  list [fil
1540: 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 20  e size test.db] 
1550: 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 32  [file size test2
1560: 2e 64 62 5d 0a 7d 20 7b 32 30 34 38 20 32 30 34  .db].} {2048 204
1570: 38 7d 0a 0a 63 61 74 63 68 20 7b 20 75 6e 73 65  8}..catch { unse
1580: 74 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65 73  t ::quota_reques
1590: 74 5f 6f 6b 20 7d 0a 0a 64 6f 5f 74 65 73 74 20  t_ok }..do_test 
15a0: 71 75 6f 74 61 2d 33 2e 32 2e 32 20 7b 20 65 78  quota-3.2.2 { ex
15b0: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
15c0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 78  NTO t1 VALUES('x
15d0: 27 2c 20 27 79 27 29 20 7d 20 64 62 31 61 20 7d  ', 'y') } db1a }
15e0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74   {}.do_test quot
15f0: 61 2d 33 2e 32 2e 33 20 7b 20 65 78 65 63 73 71  a-3.2.3 { execsq
1600: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
1610: 74 31 20 56 41 4c 55 45 53 28 27 76 27 2c 20 27  t1 VALUES('v', '
1620: 77 27 29 20 7d 20 64 62 31 62 20 7d 20 7b 7d 0a  w') } db1b } {}.
1630: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33 2e  do_test quota-3.
1640: 32 2e 34 20 7b 20 65 78 65 63 73 71 6c 20 7b 20  2.4 { execsql { 
1650: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1660: 41 4c 55 45 53 28 27 74 27 2c 20 27 75 27 29 20  ALUES('t', 'u') 
1670: 7d 20 64 62 32 61 20 7d 20 7b 7d 0a 64 6f 5f 74  } db2a } {}.do_t
1680: 65 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e 35 20  est quota-3.2.5 
1690: 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45  { execsql { INSE
16a0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
16b0: 53 28 27 72 27 2c 20 27 73 27 29 20 7d 20 64 62  S('r', 's') } db
16c0: 32 62 20 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74  2b } {}..do_test
16d0: 20 71 75 6f 74 61 2d 33 2e 32 2e 36 20 7b 20 0a   quota-3.2.6 { .
16e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49 4e 53    catchsql { INS
16f0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1700: 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30  ES(randomblob(50
1710: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35  0), randomblob(5
1720: 30 30 29 29 20 7d 20 64 62 31 61 0a 7d 20 7b 31  00)) } db1a.} {1
1730: 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69   {database or di
1740: 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f  sk is full}}.do_
1750: 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e 37  test quota-3.2.7
1760: 20 7b 20 0a 20 20 63 61 74 63 68 73 71 6c 20 7b   { .  catchsql {
1770: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1780: 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f  VALUES(randomblo
1790: 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c  b(500), randombl
17a0: 6f 62 28 35 30 30 29 29 20 7d 20 64 62 31 62 0a  ob(500)) } db1b.
17b0: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 6f  } {1 {database o
17c0: 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 7d  r disk is full}}
17d0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 33  .do_test quota-3
17e0: 2e 32 2e 38 20 7b 20 0a 20 20 63 61 74 63 68 73  .2.8 { .  catchs
17f0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
1800: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f   t1 VALUES(rando
1810: 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64  mblob(500), rand
1820: 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64  omblob(500)) } d
1830: 62 32 61 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61  b2a.} {1 {databa
1840: 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75  se or disk is fu
1850: 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  ll}}.do_test quo
1860: 74 61 2d 33 2e 32 2e 39 20 7b 20 0a 20 20 63 61  ta-3.2.9 { .  ca
1870: 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  tchsql { INSERT 
1880: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72  INTO t1 VALUES(r
1890: 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20  andomblob(500), 
18a0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29  randomblob(500))
18b0: 20 7d 20 64 62 32 62 0a 7d 20 7b 31 20 7b 64 61   } db2b.} {1 {da
18c0: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69  tabase or disk i
18d0: 73 20 66 75 6c 6c 7d 7d 0a 0a 73 65 74 20 3a 3a  s full}}..set ::
18e0: 71 75 6f 74 61 20 5b 6c 69 73 74 5d 0a 70 72 6f  quota [list].pro
18f0: 63 20 71 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b  c quota_callback
1900: 20 7b 66 69 6c 65 20 6c 69 6d 69 74 76 61 72 20   {file limitvar 
1910: 73 69 7a 65 7d 20 7b 0a 20 20 75 70 76 61 72 20  size} {.  upvar 
1920: 24 6c 69 6d 69 74 76 61 72 20 6c 69 6d 69 74 0a  $limitvar limit.
1930: 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61    if {$::tcl_pla
1940: 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d  tform(platform)=
1950: 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20  ="windows"} {.  
1960: 20 20 73 65 74 20 66 69 6c 65 20 5b 20 6c 69 6e    set file [ lin
1970: 64 65 78 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  dex [string map 
1980: 7b 5c 5c 20 5c 2f 7d 20 24 66 69 6c 65 5d 20 30  {\\ \/} $file] 0
1990: 20 5d 0a 20 20 7d 0a 20 20 6c 61 70 70 65 6e 64   ].  }.  lappend
19a0: 20 3a 3a 71 75 6f 74 61 20 24 66 69 6c 65 20 24   ::quota $file $
19b0: 73 69 7a 65 0a 20 20 73 65 74 20 6c 69 6d 69 74  size.  set limit
19c0: 20 30 0a 7d 0a 73 71 6c 69 74 65 33 5f 71 75 6f   0.}.sqlite3_quo
19d0: 74 61 5f 73 65 74 20 2a 20 34 30 39 36 20 71 75  ta_set * 4096 qu
19e0: 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 64 6f 5f  ota_callback.do_
19f0: 74 65 73 74 20 71 75 6f 74 61 2d 33 2e 33 2e 31  test quota-3.3.1
1a00: 20 7b 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20   { .  execsql { 
1a10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1a20: 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62  ALUES(randomblob
1a30: 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  (500), randomblo
1a40: 62 28 35 30 30 29 29 20 7d 20 64 62 31 61 0a 20  b(500)) } db1a. 
1a50: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
1a60: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1a70: 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29  (randomblob(500)
1a80: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30  , randomblob(500
1a90: 29 29 20 7d 20 64 62 31 62 0a 20 20 65 78 65 63  )) } db1b.  exec
1aa0: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
1ab0: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
1ac0: 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e  omblob(500), ran
1ad0: 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20  domblob(500)) } 
1ae0: 64 62 32 61 0a 20 20 65 78 65 63 73 71 6c 20 7b  db2a.  execsql {
1af0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1b00: 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f  VALUES(randomblo
1b10: 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c  b(500), randombl
1b20: 6f 62 28 35 30 30 29 29 20 7d 20 64 62 32 62 0a  ob(500)) } db2b.
1b30: 20 20 73 65 74 20 3a 3a 71 75 6f 74 61 0a 7d 20    set ::quota.} 
1b40: 5b 6c 69 73 74 20 5b 66 69 6c 65 20 6a 6f 69 6e  [list [file join
1b50: 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73 74 2e   [get_pwd] test.
1b60: 64 62 5d 20 35 31 32 30 5d 0a 0a 64 6f 5f 74 65  db] 5120]..do_te
1b70: 73 74 20 71 75 6f 74 61 2d 33 2e 32 2e 58 20 7b  st quota-3.2.X {
1b80: 0a 20 20 66 6f 72 65 61 63 68 20 64 62 20 7b 64  .  foreach db {d
1b90: 62 31 61 20 64 62 32 61 20 64 62 32 62 20 64 62  b1a db2a db2b db
1ba0: 31 62 7d 20 7b 20 63 61 74 63 68 20 7b 20 24 64  1b} { catch { $d
1bb0: 62 20 63 6c 6f 73 65 20 7d 20 7d 0a 20 20 73 71  b close } }.  sq
1bc0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
1bd0: 2a 20 30 20 7b 7d 0a 7d 20 7b 53 51 4c 49 54 45  * 0 {}.} {SQLITE
1be0: 5f 4f 4b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  _OK}..#---------
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 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c30: 0a 23 20 51 75 6f 74 61 73 20 61 72 65 20 64 65  .# Quotas are de
1c40: 6c 65 74 65 64 20 77 68 65 6e 20 75 6e 75 73 65  leted when unuse
1c50: 64 20 61 6e 64 20 77 68 65 6e 20 74 68 65 69 72  d and when their
1c60: 20 6c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f   limit is set to
1c70: 20 7a 65 72 6f 0a 23 0a 0a 23 20 52 65 74 75 72   zero.#..# Retur
1c80: 6e 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  n a list of all 
1c90: 63 75 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65  currently define
1ca0: 64 20 71 75 6f 74 61 73 2e 20 20 45 61 63 68 20  d quotas.  Each 
1cb0: 71 75 6f 74 61 20 69 73 20 69 64 65 6e 74 69 66  quota is identif
1cc0: 69 65 64 0a 23 20 62 79 20 69 74 73 20 70 61 74  ied.# by its pat
1cd0: 74 65 72 6e 2e 0a 70 72 6f 63 20 71 75 6f 74 61  tern..proc quota
1ce0: 5f 6c 69 73 74 20 7b 7d 20 7b 0a 20 20 73 65 74  _list {} {.  set
1cf0: 20 61 6c 6c 71 20 7b 7d 0a 20 20 66 6f 72 65 61   allq {}.  forea
1d00: 63 68 20 71 20 5b 73 71 6c 69 74 65 33 5f 71 75  ch q [sqlite3_qu
1d10: 6f 74 61 5f 64 75 6d 70 5d 20 7b 0a 20 20 20 20  ota_dump] {.    
1d20: 6c 61 70 70 65 6e 64 20 61 6c 6c 71 20 5b 6c 69  lappend allq [li
1d30: 6e 64 65 78 20 24 71 20 30 5d 0a 20 20 7d 0a 20  ndex $q 0].  }. 
1d40: 20 72 65 74 75 72 6e 20 5b 6c 73 6f 72 74 20 24   return [lsort $
1d50: 61 6c 6c 71 5d 0a 7d 0a 70 72 6f 63 20 71 75 6f  allq].}.proc quo
1d60: 74 61 5f 73 69 7a 65 20 7b 6e 61 6d 65 7d 20 7b  ta_size {name} {
1d70: 0a 20 20 73 65 74 20 61 6c 6c 71 20 7b 7d 0a 20  .  set allq {}. 
1d80: 20 66 6f 72 65 61 63 68 20 71 20 5b 73 71 6c 69   foreach q [sqli
1d90: 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 20  te3_quota_dump] 
1da0: 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65  {.    if {[linde
1db0: 78 20 24 71 20 30 5d 3d 3d 24 6e 61 6d 65 7d 20  x $q 0]==$name} 
1dc0: 7b 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20  {return [lindex 
1dd0: 24 71 20 32 5d 7d 0a 20 20 7d 0a 20 20 72 65 74  $q 2]}.  }.  ret
1de0: 75 72 6e 20 30 0a 7d 0a 0a 64 6f 5f 74 65 73 74  urn 0.}..do_test
1df0: 20 71 75 6f 74 61 2d 34 2e 31 2e 31 20 7b 0a 20   quota-4.1.1 {. 
1e00: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
1e10: 65 74 20 2a 74 65 73 74 2e 64 62 20 30 20 7b 7d  et *test.db 0 {}
1e20: 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20  .  quota_list.} 
1e30: 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  {}.do_test quota
1e40: 2d 34 2e 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74  -4.1.2 {.  sqlit
1e50: 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a 74 65  e3_quota_set *te
1e60: 73 74 2e 64 62 20 34 30 39 36 20 7b 7d 0a 20 20  st.db 4096 {}.  
1e70: 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74  quota_list.} {*t
1e80: 65 73 74 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20  est.db}.do_test 
1e90: 71 75 6f 74 61 2d 34 2e 31 2e 33 20 7b 0a 20 20  quota-4.1.3 {.  
1ea0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
1eb0: 74 20 2a 74 65 73 74 32 2e 64 62 20 30 20 7b 7d  t *test2.db 0 {}
1ec0: 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20  .  quota_list.} 
1ed0: 7b 2a 74 65 73 74 2e 64 62 7d 0a 64 6f 5f 74 65  {*test.db}.do_te
1ee0: 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 34 20 7b  st quota-4.1.4 {
1ef0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1f00: 5f 73 65 74 20 2a 74 65 73 74 32 2e 64 62 20 31  _set *test2.db 1
1f10: 30 30 30 30 30 20 7b 7d 0a 20 20 71 75 6f 74 61  00000 {}.  quota
1f20: 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74 2e 64  _list.} {*test.d
1f30: 62 20 2a 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f  b *test2.db}.do_
1f40: 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 35  test quota-4.1.5
1f50: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
1f60: 74 61 5f 73 65 74 20 2a 74 65 73 74 2e 64 62 20  ta_set *test.db 
1f70: 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73  0 {}.  quota_lis
1f80: 74 0a 7d 20 7b 2a 74 65 73 74 32 2e 64 62 7d 0a  t.} {*test2.db}.
1f90: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e  do_test quota-4.
1fa0: 31 2e 36 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c  1.6 {.  forcedel
1fb0: 65 74 65 20 74 65 73 74 32 2e 64 62 20 74 65 73  ete test2.db tes
1fc0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65  t2.db-journal te
1fd0: 73 74 32 2e 64 62 2d 77 61 6c 0a 20 20 73 71 6c  st2.db-wal.  sql
1fe0: 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62  ite3 db test2.db
1ff0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41  .  db eval {CREA
2000: 54 45 20 54 41 42 4c 45 20 74 32 28 78 29 3b 20  TE TABLE t2(x); 
2010: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
2020: 41 4c 55 45 53 28 27 74 61 62 2d 74 32 27 29 3b  ALUES('tab-t2');
2030: 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d  }.  quota_list.}
2040: 20 7b 2a 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f   {*test2.db}.do_
2050: 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31 2e 37  test quota-4.1.7
2060: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49   {.  catchsql {I
2070: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
2080: 4c 55 45 53 28 7a 65 72 6f 62 6c 6f 62 28 32 30  LUES(zeroblob(20
2090: 30 30 30 30 29 29 7d 0a 7d 20 7b 31 20 7b 64 61  0000))}.} {1 {da
20a0: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69  tabase or disk i
20b0: 73 20 66 75 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74  s full}}.do_test
20c0: 20 71 75 6f 74 61 2d 34 2e 31 2e 38 20 7b 0a 20   quota-4.1.8 {. 
20d0: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
20e0: 74 32 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c  t2.db.  db2 eval
20f0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2100: 74 32 7d 0a 7d 20 7b 74 61 62 2d 74 32 7d 0a 64  t2}.} {tab-t2}.d
2110: 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 31  o_test quota-4.1
2120: 2e 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .9 {.  sqlite3_q
2130: 75 6f 74 61 5f 73 65 74 20 2a 74 65 73 74 32 2e  uota_set *test2.
2140: 64 62 20 30 20 7b 7d 0a 20 20 63 61 74 63 68 73  db 0 {}.  catchs
2150: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
2160: 74 32 20 56 41 4c 55 45 53 28 7a 65 72 6f 62 6c  t2 VALUES(zerobl
2170: 6f 62 28 32 30 30 30 30 30 29 29 7d 0a 7d 20 7b  ob(200000))}.} {
2180: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75  0 {}}.do_test qu
2190: 6f 74 61 2d 34 2e 31 2e 31 30 20 7b 0a 20 20 71  ota-4.1.10 {.  q
21a0: 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65  uota_list.} {*te
21b0: 73 74 32 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20  st2.db}.do_test 
21c0: 71 75 6f 74 61 2d 34 2e 31 2e 31 31 20 7b 0a 20  quota-4.1.11 {. 
21d0: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 71 75 6f   db2 close.  quo
21e0: 74 61 5f 6c 69 73 74 0a 7d 20 7b 2a 74 65 73 74  ta_list.} {*test
21f0: 32 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20 71 75  2.db}.do_test qu
2200: 6f 74 61 2d 34 2e 31 2e 31 32 20 7b 0a 20 20 64  ota-4.1.12 {.  d
2210: 62 20 63 6c 6f 73 65 0a 20 20 71 75 6f 74 61 5f  b close.  quota_
2220: 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  list.} {}..do_te
2230: 73 74 20 71 75 6f 74 61 2d 34 2e 32 2e 31 20 7b  st quota-4.2.1 {
2240: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
2250: 5f 73 65 74 20 41 20 31 30 30 30 20 7b 7d 0a 20  _set A 1000 {}. 
2260: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
2270: 65 74 20 42 20 31 30 30 30 20 7b 7d 0a 20 20 73  et B 1000 {}.  s
2280: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74  qlite3_quota_set
2290: 20 43 20 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c   C 1000 {}.  sql
22a0: 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 44  ite3_quota_set D
22b0: 20 31 30 30 30 20 7b 7d 0a 20 20 71 75 6f 74 61   1000 {}.  quota
22c0: 5f 6c 69 73 74 0a 7d 20 7b 41 20 42 20 43 20 44  _list.} {A B C D
22d0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
22e0: 34 2e 32 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  4.2.2 {.  sqlite
22f0: 33 5f 71 75 6f 74 61 5f 73 65 74 20 43 20 30 20  3_quota_set C 0 
2300: 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  {}.  sqlite3_quo
2310: 74 61 5f 73 65 74 20 42 20 30 20 7b 7d 0a 20 20  ta_set B 0 {}.  
2320: 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 41 20  quota_list.} {A 
2330: 44 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  D}.do_test quota
2340: 2d 34 2e 32 2e 33 20 7b 0a 20 20 73 71 6c 69 74  -4.2.3 {.  sqlit
2350: 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 30  e3_quota_set A 0
2360: 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75   {}.  sqlite3_qu
2370: 6f 74 61 5f 73 65 74 20 44 20 30 20 7b 7d 0a 20  ota_set D 0 {}. 
2380: 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d   quota_list.} {}
2390: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
23a0: 2e 32 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  .2.4 {.  sqlite3
23b0: 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 31 30 30  _quota_set A 100
23c0: 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71  0 {}.  sqlite3_q
23d0: 75 6f 74 61 5f 73 65 74 20 42 20 31 30 30 30 20  uota_set B 1000 
23e0: 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  {}.  sqlite3_quo
23f0: 74 61 5f 73 65 74 20 43 20 31 30 30 30 20 7b 7d  ta_set C 1000 {}
2400: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
2410: 5f 73 65 74 20 41 20 30 20 7b 7d 0a 20 20 73 71  _set A 0 {}.  sq
2420: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
2430: 42 20 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33  B 0 {}.  sqlite3
2440: 5f 71 75 6f 74 61 5f 73 65 74 20 43 20 30 20 7b  _quota_set C 0 {
2450: 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a 7d  }.  quota_list.}
2460: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74   {}.do_test quot
2470: 61 2d 34 2e 32 2e 35 20 7b 0a 20 20 73 71 6c 69  a-4.2.5 {.  sqli
2480: 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 41 20  te3_quota_set A 
2490: 31 30 30 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65  1000 {}.  sqlite
24a0: 33 5f 71 75 6f 74 61 5f 73 65 74 20 42 20 31 30  3_quota_set B 10
24b0: 30 30 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f  00 {}.  sqlite3_
24c0: 71 75 6f 74 61 5f 73 65 74 20 43 20 31 30 30 30  quota_set C 1000
24d0: 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75   {}.  sqlite3_qu
24e0: 6f 74 61 5f 73 65 74 20 43 20 30 20 7b 7d 0a 20  ota_set C 0 {}. 
24f0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
2500: 65 74 20 42 20 30 20 7b 7d 0a 20 20 73 71 6c 69  et B 0 {}.  sqli
2510: 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 41 20  te3_quota_set A 
2520: 30 20 7b 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73  0 {}.  quota_lis
2530: 74 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  t.} {}..do_test 
2540: 71 75 6f 74 61 2d 34 2e 33 2e 31 20 7b 0a 20 20  quota-4.3.1 {.  
2550: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
2560: 74 20 41 20 31 30 30 30 20 71 75 6f 74 61 5f 63  t A 1000 quota_c
2570: 61 6c 6c 62 61 63 6b 0a 20 20 73 71 6c 69 74 65  allback.  sqlite
2580: 33 20 64 62 20 41 0a 20 20 73 71 6c 69 74 65 33  3 db A.  sqlite3
2590: 5f 71 75 6f 74 61 5f 73 65 74 20 41 20 30 20 71  _quota_set A 0 q
25a0: 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20  uota_callback.  
25b0: 64 62 20 63 6c 6f 73 65 0a 20 20 71 75 6f 74 61  db close.  quota
25c0: 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 75 6e 73 65  _list.} {}..unse
25d0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 71 75  t -nocomplain qu
25e0: 6f 74 61 67 72 6f 75 70 0a 69 66 20 7b 24 74 63  otagroup.if {$tc
25f0: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
2600: 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d  orm)=="windows"}
2610: 20 7b 0a 20 20 73 65 74 20 71 75 6f 74 61 67 72   {.  set quotagr
2620: 6f 75 70 20 2a 5c 5c 71 75 6f 74 61 2d 74 65 73  oup *\\quota-tes
2630: 74 2d 41 3f 2e 64 62 0a 7d 20 65 6c 73 65 20 7b  t-A?.db.} else {
2640: 0a 20 20 73 65 74 20 71 75 6f 74 61 67 72 6f 75  .  set quotagrou
2650: 70 20 2a 2f 71 75 6f 74 61 2d 74 65 73 74 2d 41  p */quota-test-A
2660: 3f 2e 64 62 0a 7d 20 0a 66 6f 72 65 61 63 68 20  ?.db.} .foreach 
2670: 66 69 6c 65 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f  file [glob -noco
2680: 6d 70 6c 61 69 6e 20 71 75 6f 74 61 2d 74 65 73  mplain quota-tes
2690: 74 2d 41 2a 5d 20 7b 0a 20 20 66 6f 72 63 65 64  t-A*] {.  forced
26a0: 65 6c 65 74 65 20 24 66 69 6c 65 0a 7d 0a 64 6f  elete $file.}.do
26b0: 5f 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 34 2e  _test quota-4.4.
26c0: 31 20 7b 0a 20 20 73 65 74 20 3a 3a 71 75 6f 74  1 {.  set ::quot
26d0: 61 20 7b 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71  a {}.  sqlite3_q
26e0: 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71 75 6f 74  uota_set $::quot
26f0: 61 67 72 6f 75 70 20 31 30 30 30 30 20 71 75 6f  agroup 10000 quo
2700: 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 66 6f  ta_callback.  fo
2710: 72 63 65 64 65 6c 65 74 65 20 2e 2f 71 75 6f 74  rcedelete ./quot
2720: 61 2d 74 65 73 74 2d 41 31 2e 64 62 20 2e 2f 71  a-test-A1.db ./q
2730: 75 6f 74 61 2d 74 65 73 74 2d 41 32 2e 64 62 0a  uota-test-A2.db.
2740: 20 20 73 71 6c 69 74 65 33 20 64 62 20 2e 2f 71    sqlite3 db ./q
2750: 75 6f 74 61 2d 74 65 73 74 2d 41 31 2e 64 62 0a  uota-test-A1.db.
2760: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
2770: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2780: 28 78 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54  (x);.     INSERT
2790: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
27a0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 30 29  randomblob(5000)
27b0: 29 3b 0a 20 20 7d 0a 20 20 71 75 6f 74 61 5f 6c  );.  }.  quota_l
27c0: 69 73 74 0a 7d 20 5b 6c 69 73 74 20 24 71 75 6f  ist.} [list $quo
27d0: 74 61 67 72 6f 75 70 5d 0a 64 6f 5f 74 65 73 74  tagroup].do_test
27e0: 20 71 75 6f 74 61 2d 34 2e 34 2e 32 20 7b 0a 20   quota-4.4.2 {. 
27f0: 20 65 78 70 72 20 7b 24 3a 3a 71 75 6f 74 61 3d   expr {$::quota=
2800: 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  =""}.} {1}.do_te
2810: 73 74 20 71 75 6f 74 61 2d 34 2e 34 2e 33 20 7b  st quota-4.4.3 {
2820: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
2830: 6c 69 74 65 33 20 64 62 20 2e 2f 71 75 6f 74 61  lite3 db ./quota
2840: 2d 74 65 73 74 2d 41 32 2e 64 62 0a 20 20 64 62  -test-A2.db.  db
2850: 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 43 52 45   eval {.     CRE
2860: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
2870: 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  .     INSERT INT
2880: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
2890: 6f 6d 62 6c 6f 62 28 35 30 30 30 29 29 3b 0a 20  omblob(5000));. 
28a0: 20 7d 0a 20 20 71 75 6f 74 61 5f 6c 69 73 74 0a   }.  quota_list.
28b0: 7d 20 5b 6c 69 73 74 20 24 71 75 6f 74 61 67 72  } [list $quotagr
28c0: 6f 75 70 5d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  oup].do_test quo
28d0: 74 61 2d 34 2e 34 2e 34 20 7b 0a 20 20 65 78 70  ta-4.4.4 {.  exp
28e0: 72 20 7b 24 3a 3a 71 75 6f 74 61 21 3d 22 22 7d  r {$::quota!=""}
28f0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71  .} {1}.do_test q
2900: 75 6f 74 61 2d 34 2e 34 2e 35 20 7b 0a 20 20 64  uota-4.4.5 {.  d
2910: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
2920: 33 5f 71 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71  3_quota_set $::q
2930: 75 6f 74 61 67 72 6f 75 70 20 30 20 7b 7d 0a 20  uotagroup 0 {}. 
2940: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64   sqlite3_quota_d
2950: 75 6d 70 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  ump.} {}.do_test
2960: 20 71 75 6f 74 61 2d 34 2e 34 2e 36 20 7b 0a 20   quota-4.4.6 {. 
2970: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
2980: 65 74 20 24 71 75 6f 74 61 67 72 6f 75 70 20 31  et $quotagroup 1
2990: 30 30 30 30 20 71 75 6f 74 61 5f 63 61 6c 6c 62  0000 quota_callb
29a0: 61 63 6b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ack.  sqlite3 db
29b0: 20 71 75 6f 74 61 2d 74 65 73 74 2d 41 31 2e 64   quota-test-A1.d
29c0: 62 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  b.  db eval {SEL
29d0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
29e0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
29f0: 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 71  .  quota_size $q
2a00: 75 6f 74 61 67 72 6f 75 70 0a 7d 20 5b 66 69 6c  uotagroup.} [fil
2a10: 65 20 73 69 7a 65 20 71 75 6f 74 61 2d 74 65 73  e size quota-tes
2a20: 74 2d 41 31 2e 64 62 5d 0a 64 6f 5f 74 65 73 74  t-A1.db].do_test
2a30: 20 71 75 6f 74 61 2d 34 2e 34 2e 37 20 7b 0a 20   quota-4.4.7 {. 
2a40: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
2a50: 69 6c 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 41  ile quota-test-A
2a60: 32 2e 64 62 0a 20 20 71 75 6f 74 61 5f 73 69 7a  2.db.  quota_siz
2a70: 65 20 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a  e $::quotagroup.
2a80: 7d 20 5b 65 78 70 72 20 7b 5b 66 69 6c 65 20 73  } [expr {[file s
2a90: 69 7a 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 41  ize quota-test-A
2aa0: 31 2e 64 62 5d 2b 5b 66 69 6c 65 20 73 69 7a 65  1.db]+[file size
2ab0: 20 71 75 6f 74 61 2d 74 65 73 74 2d 41 32 2e 64   quota-test-A2.d
2ac0: 62 5d 7d 5d 0a 0a 75 6e 73 65 74 20 2d 6e 6f 63  b]}]..unset -noc
2ad0: 6f 6d 70 6c 61 69 6e 20 71 75 6f 74 61 67 72 6f  omplain quotagro
2ae0: 75 70 0a 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74  up.if {$tcl_plat
2af0: 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d  form(platform)==
2b00: 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 73  "windows"} {.  s
2b10: 65 74 20 71 75 6f 74 61 67 72 6f 75 70 20 2a 5c  et quotagroup *\
2b20: 5c 71 75 6f 74 61 2d 74 65 73 74 2d 42 2a 0a 7d  \quota-test-B*.}
2b30: 20 65 6c 73 65 20 7b 0a 20 20 73 65 74 20 71 75   else {.  set qu
2b40: 6f 74 61 67 72 6f 75 70 20 2a 2f 71 75 6f 74 61  otagroup */quota
2b50: 2d 74 65 73 74 2d 42 2a 0a 7d 20 0a 66 6f 72 65  -test-B*.} .fore
2b60: 61 63 68 20 66 69 6c 65 20 5b 67 6c 6f 62 20 2d  ach file [glob -
2b70: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 71 75 6f 74 61  nocomplain quota
2b80: 2d 74 65 73 74 2d 42 2a 5d 20 7b 0a 20 20 66 6f  -test-B*] {.  fo
2b90: 72 63 65 64 65 6c 65 74 65 20 24 66 69 6c 65 0a  rcedelete $file.
2ba0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d  }.do_test quota-
2bb0: 34 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  4.5.1 {.  sqlite
2bc0: 33 5f 71 75 6f 74 61 5f 73 65 74 20 24 3a 3a 71  3_quota_set $::q
2bd0: 75 6f 74 61 67 72 6f 75 70 20 31 30 30 30 30 30  uotagroup 100000
2be0: 20 71 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a   quota_callback.
2bf0: 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a    quota_size $::
2c00: 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d  quotagroup.} {0}
2c10: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
2c20: 2e 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  .5.2 {.  sqlite3
2c30: 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f 74  _quota_file quot
2c40: 61 2d 74 65 73 74 2d 42 31 2e 74 78 74 0a 20 20  a-test-B1.txt.  
2c50: 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71 75  quota_size $::qu
2c60: 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d 0a 70  otagroup.} {0}.p
2c70: 72 6f 63 20 61 64 64 5f 74 6f 5f 66 69 6c 65 20  roc add_to_file 
2c80: 7b 6e 61 6d 65 20 6e 7d 20 7b 0a 20 20 73 65 74  {name n} {.  set
2c90: 20 6f 75 74 20 5b 6f 70 65 6e 20 24 6e 61 6d 65   out [open $name
2ca0: 20 61 5d 0a 20 20 66 63 6f 6e 66 69 67 75 72 65   a].  fconfigure
2cb0: 20 24 6f 75 74 20 2d 74 72 61 6e 73 6c 61 74 69   $out -translati
2cc0: 6f 6e 20 62 69 6e 61 72 79 0a 20 20 70 75 74 73  on binary.  puts
2cd0: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74   -nonewline $out
2ce0: 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20   [string repeat 
2cf0: 78 20 24 6e 5d 0a 20 20 63 6c 6f 73 65 20 24 6f  x $n].  close $o
2d00: 75 74 0a 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  ut.}.do_test quo
2d10: 74 61 2d 34 2e 35 2e 33 20 7b 0a 20 20 61 64 64  ta-4.5.3 {.  add
2d20: 5f 74 6f 5f 66 69 6c 65 20 71 75 6f 74 61 2d 74  _to_file quota-t
2d30: 65 73 74 2d 42 31 2e 74 78 74 20 31 32 33 0a 20  est-B1.txt 123. 
2d40: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
2d50: 69 6c 65 20 71 75 6f 74 61 2d 74 65 73 74 2d 42  ile quota-test-B
2d60: 31 2e 74 78 74 0a 20 20 71 75 6f 74 61 5f 73 69  1.txt.  quota_si
2d70: 7a 65 20 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70  ze $::quotagroup
2d80: 0a 7d 20 7b 31 32 33 7d 0a 64 6f 5f 74 65 73 74  .} {123}.do_test
2d90: 20 71 75 6f 74 61 2d 34 2e 35 2e 34 20 7b 0a 20   quota-4.5.4 {. 
2da0: 20 61 64 64 5f 74 6f 5f 66 69 6c 65 20 71 75 6f   add_to_file quo
2db0: 74 61 2d 74 65 73 74 2d 42 32 2e 74 78 74 20 32  ta-test-B2.txt 2
2dc0: 33 34 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  34.  sqlite3_quo
2dd0: 74 61 5f 66 69 6c 65 20 71 75 6f 74 61 2d 74 65  ta_file quota-te
2de0: 73 74 2d 42 32 2e 74 78 74 0a 20 20 71 75 6f 74  st-B2.txt.  quot
2df0: 61 5f 73 69 7a 65 20 24 3a 3a 71 75 6f 74 61 67  a_size $::quotag
2e00: 72 6f 75 70 0a 7d 20 7b 33 35 37 7d 0a 64 6f 5f  roup.} {357}.do_
2e10: 74 65 73 74 20 71 75 6f 74 61 2d 34 2e 35 2e 35  test quota-4.5.5
2e20: 20 7b 0a 20 20 61 64 64 5f 74 6f 5f 66 69 6c 65   {.  add_to_file
2e30: 20 71 75 6f 74 61 2d 74 65 73 74 2d 42 31 2e 74   quota-test-B1.t
2e40: 78 74 20 32 30 30 30 0a 20 20 73 71 6c 69 74 65  xt 2000.  sqlite
2e50: 33 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75 6f  3_quota_file quo
2e60: 74 61 2d 74 65 73 74 2d 42 31 2e 74 78 74 0a 20  ta-test-B1.txt. 
2e70: 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a 71   quota_size $::q
2e80: 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 32 33 35  uotagroup.} {235
2e90: 37 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  7}.do_test quota
2ea0: 2d 34 2e 35 2e 36 20 7b 0a 20 20 66 6f 72 63 65  -4.5.6 {.  force
2eb0: 64 65 6c 65 74 65 20 71 75 6f 74 61 2d 74 65 73  delete quota-tes
2ec0: 74 2d 42 31 2e 74 78 74 0a 20 20 73 71 6c 69 74  t-B1.txt.  sqlit
2ed0: 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75  e3_quota_file qu
2ee0: 6f 74 61 2d 74 65 73 74 2d 42 31 2e 74 78 74 0a  ota-test-B1.txt.
2ef0: 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a    quota_size $::
2f00: 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 32 33  quotagroup.} {23
2f10: 34 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  4}.do_test quota
2f20: 2d 34 2e 35 2e 37 20 7b 0a 20 20 66 6f 72 63 65  -4.5.7 {.  force
2f30: 64 65 6c 65 74 65 20 71 75 6f 74 61 2d 74 65 73  delete quota-tes
2f40: 74 2d 42 32 2e 74 78 74 0a 20 20 73 71 6c 69 74  t-B2.txt.  sqlit
2f50: 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 20 71 75  e3_quota_file qu
2f60: 6f 74 61 2d 74 65 73 74 2d 42 32 2e 74 78 74 0a  ota-test-B2.txt.
2f70: 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24 3a 3a    quota_size $::
2f80: 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b 30 7d  quotagroup.} {0}
2f90: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 34  .do_test quota-4
2fa0: 2e 35 2e 38 20 7b 0a 20 20 61 64 64 5f 74 6f 5f  .5.8 {.  add_to_
2fb0: 66 69 6c 65 20 71 75 6f 74 61 2d 74 65 73 74 2d  file quota-test-
2fc0: 42 33 2e 74 78 74 20 31 32 33 34 0a 20 20 73 71  B3.txt 1234.  sq
2fd0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65  lite3_quota_file
2fe0: 20 71 75 6f 74 61 2d 74 65 73 74 2d 42 33 2e 74   quota-test-B3.t
2ff0: 78 74 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20  xt.  quota_size 
3000: 24 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20  $::quotagroup.} 
3010: 7b 31 32 33 34 7d 0a 64 6f 5f 74 65 73 74 20 71  {1234}.do_test q
3020: 75 6f 74 61 2d 34 2e 35 2e 39 20 7b 0a 20 20 73  uota-4.5.9 {.  s
3030: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74  qlite3_quota_set
3040: 20 24 71 75 6f 74 61 67 72 6f 75 70 20 30 20 7b   $quotagroup 0 {
3050: 7d 0a 20 20 71 75 6f 74 61 5f 73 69 7a 65 20 24  }.  quota_size $
3060: 3a 3a 71 75 6f 74 61 67 72 6f 75 70 0a 7d 20 7b  ::quotagroup.} {
3070: 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  0}..do_test quot
3080: 61 2d 34 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63  a-4.9.1 {.  db c
3090: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 71  lose.  sqlite3_q
30a0: 75 6f 74 61 5f 73 65 74 20 41 20 31 30 30 30 20  uota_set A 1000 
30b0: 71 75 6f 74 61 5f 63 61 6c 6c 62 61 63 6b 0a 20  quota_callback. 
30c0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
30d0: 68 75 74 64 6f 77 6e 0a 7d 20 7b 53 51 4c 49 54  hutdown.} {SQLIT
30e0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 71 75  E_OK}.do_test qu
30f0: 6f 74 61 2d 34 2e 39 2e 32 20 7b 0a 20 20 71 75  ota-4.9.2 {.  qu
3100: 6f 74 61 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 23  ota_list.} {}..#
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20  ---------.# The 
3160: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20  following tests 
3170: 74 65 73 74 20 74 68 61 74 20 74 68 65 20 71 75  test that the qu
3180: 6f 74 61 20 56 46 53 20 68 61 6e 64 6c 65 73 20  ota VFS handles 
3190: 6d 61 6c 6c 6f 63 20 61 6e 64 20 49 4f 20 0a 23  malloc and IO .#
31a0: 20 65 72 72 6f 72 73 2e 0a 23 0a 0a 73 71 6c 69   errors..#..sqli
31b0: 74 65 33 5f 71 75 6f 74 61 5f 69 6e 69 74 69 61  te3_quota_initia
31c0: 6c 69 7a 65 20 22 22 20 31 0a 73 71 6c 69 74 65  lize "" 1.sqlite
31d0: 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a 74 65 73  3_quota_set *tes
31e0: 74 2e 64 62 20 34 30 39 36 20 7b 7d 0a 0a 64 6f  t.db 4096 {}..do
31f0: 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 71  _faultsim_test q
3200: 75 6f 74 61 2d 35 2e 31 20 2d 70 72 65 70 20 7b  uota-5.1 -prep {
3210: 0a 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f  .  catch {db clo
3220: 73 65 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  se}.} -body {.  
3230: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 32  sqlite3 db test2
3240: 2e 64 62 0a 7d 0a 64 6f 5f 66 61 75 6c 74 73 69  .db.}.do_faultsi
3250: 6d 5f 74 65 73 74 20 71 75 6f 74 61 2d 35 2e 32  m_test quota-5.2
3260: 20 2d 70 72 65 70 20 7b 0a 20 20 63 61 74 63 68   -prep {.  catch
3270: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 7d 20 2d 62   {db close}.} -b
3280: 6f 64 79 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ody {.  sqlite3 
3290: 64 62 20 74 65 73 74 2e 64 62 0a 7d 0a 0a 63 61  db test.db.}..ca
32a0: 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d  tch { db close }
32b0: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
32c0: 74 2e 64 62 0a 0a 64 6f 5f 74 65 73 74 20 71 75  t.db..do_test qu
32d0: 6f 74 61 2d 35 2e 33 2e 70 72 65 70 20 7b 0a 20  ota-5.3.prep {. 
32e0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
32f0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
3300: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
3310: 76 61 63 75 75 6d 20 3d 20 31 3b 0a 20 20 20 20  vacuum = 1;.    
3320: 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
3330: 20 3d 20 31 30 32 34 3b 0a 20 20 20 20 43 52 45   = 1024;.    CRE
3340: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
3350: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
3360: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 30  NTO t1 VALUES(10
3370: 2c 20 7a 65 72 6f 62 6c 6f 62 28 31 32 30 30 29  , zeroblob(1200)
3380: 29 3b 0a 20 20 7d 0a 20 20 66 61 75 6c 74 73 69  );.  }.  faultsi
3390: 6d 5f 73 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65  m_save_and_close
33a0: 0a 7d 20 7b 7d 0a 64 6f 5f 66 61 75 6c 74 73 69  .} {}.do_faultsi
33b0: 6d 5f 74 65 73 74 20 71 75 6f 74 61 2d 35 2e 33  m_test quota-5.3
33c0: 20 2d 70 72 65 70 20 7b 0a 20 20 66 61 75 6c 74   -prep {.  fault
33d0: 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f  sim_restore_and_
33e0: 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b  reopen.} -body {
33f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c  .  execsql { DEL
3400: 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 0a  ETE FROM t1 }.}.
3410: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 2d 35  .do_test quota-5
3420: 2e 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 20 7b  .4.1 {.  catch {
3430: 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 66 6f   db close }.  fo
3440: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
3450: 62 0a 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 74  b.  file mkdir t
3460: 65 73 74 2e 64 62 0a 20 20 6c 69 73 74 20 5b 63  est.db.  list [c
3470: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64  atch { sqlite3 d
3480: 62 20 74 65 73 74 2e 64 62 20 7d 20 6d 73 67 5d  b test.db } msg]
3490: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e 61 62   $msg.} {1 {unab
34a0: 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
34b0: 61 73 65 20 66 69 6c 65 7d 7d 0a 0a 64 6f 5f 66  ase file}}..do_f
34c0: 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 71 75 6f  aultsim_test quo
34d0: 74 61 2d 35 2e 35 20 2d 70 72 65 70 20 7b 0a 20  ta-5.5 -prep {. 
34e0: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
34f0: 5f 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20  _quota_shutdown 
3500: 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71  }.} -body {.  sq
3510: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 69 6e 69 74  lite3_quota_init
3520: 69 61 6c 69 7a 65 20 22 22 20 31 0a 7d 0a 0a 64  ialize "" 1.}..d
3530: 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20  o_faultsim_test 
3540: 71 75 6f 74 61 2d 35 2e 36 20 2d 70 72 65 70 20  quota-5.6 -prep 
3550: 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69  {.  catch { sqli
3560: 74 65 33 5f 71 75 6f 74 61 5f 73 68 75 74 64 6f  te3_quota_shutdo
3570: 77 6e 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 71  wn }.  sqlite3_q
3580: 75 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20  uota_initialize 
3590: 22 22 20 31 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  "" 1.} -body {. 
35a0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73   sqlite3_quota_s
35b0: 65 74 20 2a 20 34 30 39 36 20 7b 7d 0a 7d 0a 0a  et * 4096 {}.}..
35c0: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f  catch { sqlite3_
35d0: 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20 7d  quota_shutdown }
35e0: 0a 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73  .catch { db clos
35f0: 65 20 7d 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  e }.forcedelete 
3600: 74 65 73 74 2e 64 62 0a 66 69 6e 69 73 68 5f 74  test.db.finish_t
3610: 65 73 74 0a                                      est.