/ Hex Artifact Content
Login

Artifact 7e1c84f71f59388963fa8181a1292c87ae814d2d:


0000: 23 20 32 30 31 31 20 44 65 63 65 6d 62 65 72 20  # 2011 December 
0010: 31 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  1.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 0a 73 65 74 20 74  *******.#..set t
0170: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0180: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0190: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
01a0: 74 65 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24  ter.tcl.source $
01b0: 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f 63  testdir/malloc_c
01c0: 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 64 62 20 63 6c  ommon.tcl..db cl
01d0: 6f 73 65 0a 73 71 6c 69 74 65 33 5f 71 75 6f 74  ose.sqlite3_quot
01e0: 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20  a_initialize "" 
01f0: 31 0a 0a 66 6f 72 65 61 63 68 20 64 69 72 20 7b  1..foreach dir {
0200: 71 75 6f 74 61 32 61 2f 78 31 20 71 75 6f 74 61  quota2a/x1 quota
0210: 32 61 2f 78 32 20 71 75 6f 74 61 32 61 20 71 75  2a/x2 quota2a qu
0220: 6f 74 61 32 62 20 71 75 6f 74 61 32 63 7d 20 7b  ota2b quota2c} {
0230: 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  .  file delete -
0240: 66 6f 72 63 65 20 24 64 69 72 0a 7d 0a 66 6f 72  force $dir.}.for
0250: 65 61 63 68 20 64 69 72 20 7b 71 75 6f 74 61 32  each dir {quota2
0260: 61 20 71 75 6f 74 61 32 61 2f 78 31 20 71 75 6f  a quota2a/x1 quo
0270: 74 61 32 61 2f 78 32 20 71 75 6f 74 61 32 62 20  ta2a/x2 quota2b 
0280: 71 75 6f 74 61 32 63 7d 20 7b 0a 20 20 66 69 6c  quota2c} {.  fil
0290: 65 20 6d 6b 64 69 72 20 24 64 69 72 0a 7d 0a 0a  e mkdir $dir.}..
02a0: 23 20 54 68 65 20 73 74 61 6e 64 61 72 64 5f 70  # The standard_p
02b0: 61 74 68 20 70 72 6f 63 65 64 75 72 65 20 63 6f  ath procedure co
02c0: 6e 76 65 72 74 73 20 61 20 70 61 74 68 6e 61 6d  nverts a pathnam
02d0: 65 20 69 6e 74 6f 20 61 20 73 74 61 6e 64 61 72  e into a standar
02e0: 64 20 66 6f 72 6d 61 74 0a 23 20 74 68 61 74 20  d format.# that 
02f0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 63 72 6f  is the same acro
0300: 73 73 20 70 6c 61 74 66 6f 72 6d 73 2e 0a 23 0a  ss platforms..#.
0310: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
0320: 6e 20 3a 3a 71 75 6f 74 61 5f 70 77 64 20 3a 3a  n ::quota_pwd ::
0330: 71 75 6f 74 61 5f 6d 61 70 70 69 6e 67 0a 73 65  quota_mapping.se
0340: 74 20 3a 3a 71 75 6f 74 61 5f 70 77 64 20 5b 73  t ::quota_pwd [s
0350: 74 72 69 6e 67 20 6d 61 70 20 7b 5c 5c 20 2f 7d  tring map {\\ /}
0360: 20 5b 67 65 74 5f 70 77 64 5d 5d 0a 73 65 74 20   [get_pwd]].set 
0370: 3a 3a 71 75 6f 74 61 5f 6d 61 70 70 69 6e 67 20  ::quota_mapping 
0380: 5b 6c 69 73 74 20 24 3a 3a 71 75 6f 74 61 5f 70  [list $::quota_p
0390: 77 64 20 50 57 44 5d 0a 70 72 6f 63 20 73 74 61  wd PWD].proc sta
03a0: 6e 64 61 72 64 5f 70 61 74 68 20 7b 78 7d 20 7b  ndard_path {x} {
03b0: 0a 20 20 73 65 74 20 78 20 5b 73 74 72 69 6e 67  .  set x [string
03c0: 20 6d 61 70 20 7b 5c 5c 20 2f 7d 20 24 78 5d 0a   map {\\ /} $x].
03d0: 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67    return [string
03e0: 20 6d 61 70 20 24 3a 3a 71 75 6f 74 61 5f 6d 61   map $::quota_ma
03f0: 70 70 69 6e 67 20 24 78 5d 0a 7d 0a 0a 23 20 54  pping $x].}..# T
0400: 68 65 20 71 75 6f 74 61 5f 63 68 65 63 6b 20 70  he quota_check p
0410: 72 6f 63 65 64 75 72 65 20 69 73 20 61 20 63 61  rocedure is a ca
0420: 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 74 68 65 20  llback from the 
0430: 71 75 6f 74 61 20 68 61 6e 64 6c 65 72 2e 0a 23  quota handler..#
0440: 20 49 74 20 68 61 73 20 74 68 72 65 65 20 61 72   It has three ar
0450: 67 75 6d 65 6e 74 73 20 77 68 69 63 68 20 61 72  guments which ar
0460: 65 20 28 31 29 20 74 68 65 20 66 75 6c 6c 20 70  e (1) the full p
0470: 61 74 68 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  athname of the f
0480: 69 6c 65 0a 23 20 74 68 61 74 20 68 61 73 20 67  ile.# that has g
0490: 6f 6e 65 20 6f 76 65 72 20 71 75 6f 74 61 2c 20  one over quota, 
04a0: 28 32 29 20 74 68 65 20 71 75 6f 74 61 20 6c 69  (2) the quota li
04b0: 6d 69 74 2c 20 28 33 29 20 74 68 65 20 72 65 71  mit, (3) the req
04c0: 75 65 73 74 65 64 0a 23 20 6e 65 77 20 71 75 6f  uested.# new quo
04d0: 74 61 20 73 69 7a 65 20 74 6f 20 63 6f 76 65 72  ta size to cover
04e0: 20 74 68 65 20 6c 61 73 74 20 77 72 69 74 65 2e   the last write.
04f0: 20 20 54 68 65 73 65 20 74 68 72 65 65 20 76 61    These three va
0500: 6c 75 65 73 20 61 72 65 0a 23 20 61 70 70 65 6e  lues are.# appen
0510: 64 65 64 20 74 6f 20 74 68 65 20 67 6c 6f 62 61  ded to the globa
0520: 6c 20 76 61 72 69 61 62 6c 65 20 24 3a 3a 71 75  l variable $::qu
0530: 6f 74 61 2e 20 20 54 68 65 20 66 69 6c 65 6e 61  ota.  The filena
0540: 6d 65 20 69 73 20 70 72 6f 63 65 73 73 65 64 0a  me is processed.
0550: 23 20 74 6f 20 63 6f 6e 76 65 72 74 20 65 76 65  # to convert eve
0560: 72 79 20 5c 20 63 68 61 72 61 63 74 65 72 20 69  ry \ character i
0570: 6e 74 6f 20 2f 20 61 6e 64 20 74 6f 20 63 68 61  nto / and to cha
0580: 6e 67 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  nge the name of 
0590: 74 68 65 0a 23 20 77 6f 72 6b 69 6e 67 20 64 69  the.# working di
05a0: 72 65 63 74 6f 72 79 20 74 6f 20 50 57 44 2e 20  rectory to PWD. 
05b0: 20 0a 23 0a 23 20 54 68 65 20 71 75 6f 74 61 20   .#.# The quota 
05c0: 69 73 20 69 6e 63 72 65 61 73 65 64 20 74 6f 20  is increased to 
05d0: 74 68 65 20 72 65 71 75 65 73 74 20 69 66 20 74  the request if t
05e0: 68 65 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65  he ::quota_reque
05f0: 73 74 5f 6f 6b 20 0a 23 20 67 6c 6f 62 61 6c 20  st_ok .# global 
0600: 76 61 72 69 61 62 6c 65 20 69 73 20 74 72 75 65  variable is true
0610: 2e 0a 23 0a 73 65 74 20 3a 3a 71 75 6f 74 61 20  ..#.set ::quota 
0620: 7b 7d 0a 73 65 74 20 3a 3a 71 75 6f 74 61 5f 72  {}.set ::quota_r
0630: 65 71 75 65 73 74 5f 6f 6b 20 30 0a 0a 70 72 6f  equest_ok 0..pro
0640: 63 20 71 75 6f 74 61 5f 63 68 65 63 6b 20 7b 66  c quota_check {f
0650: 69 6c 65 6e 61 6d 65 20 6c 69 6d 69 74 76 61 72  ilename limitvar
0660: 20 73 69 7a 65 7d 20 7b 0a 20 20 75 70 76 61 72   size} {.  upvar
0670: 20 24 6c 69 6d 69 74 76 61 72 20 6c 69 6d 69 74   $limitvar limit
0680: 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 71 75 6f  .  lappend ::quo
0690: 74 61 20 5b 73 74 61 6e 64 61 72 64 5f 70 61 74  ta [standard_pat
06a0: 68 20 24 66 69 6c 65 6e 61 6d 65 5d 20 5b 73 65  h $filename] [se
06b0: 74 20 6c 69 6d 69 74 5d 20 24 73 69 7a 65 0a 20  t limit] $size. 
06c0: 20 69 66 20 7b 24 3a 3a 71 75 6f 74 61 5f 72 65   if {$::quota_re
06d0: 71 75 65 73 74 5f 6f 6b 7d 20 7b 73 65 74 20 6c  quest_ok} {set l
06e0: 69 6d 69 74 20 24 73 69 7a 65 7d 0a 7d 0a 0a 73  imit $size}.}..s
06f0: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74  qlite3_quota_set
0700: 20 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30   */quota2a/* 400
0710: 30 20 71 75 6f 74 61 5f 63 68 65 63 6b 0a 73 71  0 quota_check.sq
0720: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65 74 20  lite3_quota_set 
0730: 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30 30 30  */quota2b/* 5000
0740: 20 71 75 6f 74 61 5f 63 68 65 63 6b 0a 0a 75 6e   quota_check..un
0750: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
0760: 62 69 67 74 65 78 74 0a 66 6f 72 20 7b 73 65 74  bigtext.for {set
0770: 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30 30 30 7d   i 1} {$i<=1000}
0780: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 69 66   {incr i} {.  if
0790: 20 7b 24 69 25 31 30 3d 3d 30 7d 20 7b 0a 20 20   {$i%10==0} {.  
07a0: 20 20 61 70 70 65 6e 64 20 62 69 67 74 65 78 74    append bigtext
07b0: 20 5b 66 6f 72 6d 61 74 20 22 25 30 36 64 5c 6e   [format "%06d\n
07c0: 22 20 24 69 5d 0a 20 20 7d 20 65 6c 73 65 20 7b  " $i].  } else {
07d0: 0a 20 20 20 20 61 70 70 65 6e 64 20 62 69 67 74  .    append bigt
07e0: 65 78 74 20 5b 66 6f 72 6d 61 74 20 22 25 30 36  ext [format "%06
07f0: 64 20 22 20 24 69 5d 0a 20 20 7d 0a 7d 0a 0a 63  d " $i].  }.}..c
0800: 61 74 63 68 20 7b 20 75 6e 73 65 74 20 68 31 20  atch { unset h1 
0810: 7d 0a 63 61 74 63 68 20 7b 20 75 6e 73 65 74 20  }.catch { unset 
0820: 78 20 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  x }.do_test quot
0830: 61 32 2d 31 2e 31 20 7b 0a 20 20 73 65 74 20 3a  a2-1.1 {.  set :
0840: 3a 68 31 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  :h1 [sqlite3_quo
0850: 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32 61  ta_fopen quota2a
0860: 2f 78 79 7a 2e 74 78 74 20 77 2b 62 5d 0a 20 20  /xyz.txt w+b].  
0870: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 77  sqlite3_quota_fw
0880: 72 69 74 65 20 24 3a 3a 68 31 20 31 20 37 30 30  rite $::h1 1 700
0890: 30 20 24 62 69 67 74 65 78 74 0a 7d 20 7b 34 30  0 $bigtext.} {40
08a0: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  00}.do_test quot
08b0: 61 32 2d 31 2e 32 20 7b 0a 20 20 73 65 74 20 3a  a2-1.2 {.  set :
08c0: 3a 71 75 6f 74 61 0a 7d 20 7b 50 57 44 2f 71 75  :quota.} {PWD/qu
08d0: 6f 74 61 32 61 2f 78 79 7a 2e 74 78 74 20 34 30  ota2a/xyz.txt 40
08e0: 30 30 20 37 30 30 30 7d 0a 64 6f 5f 74 65 73 74  00 7000}.do_test
08f0: 20 71 75 6f 74 61 32 2d 31 2e 33 20 7b 0a 20 20   quota2-1.3 {.  
0900: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72 65  sqlite3_quota_re
0910: 77 69 6e 64 20 24 3a 3a 68 31 0a 20 20 73 65 74  wind $::h1.  set
0920: 20 3a 3a 78 20 5b 73 71 6c 69 74 65 33 5f 71 75   ::x [sqlite3_qu
0930: 6f 74 61 5f 66 72 65 61 64 20 24 3a 3a 68 31 20  ota_fread $::h1 
0940: 31 30 30 31 20 37 5d 0a 20 20 73 74 72 69 6e 67  1001 7].  string
0950: 20 6c 65 6e 67 74 68 20 24 3a 3a 78 0a 7d 20 7b   length $::x.} {
0960: 33 30 30 33 7d 0a 64 6f 5f 74 65 73 74 20 71 75  3003}.do_test qu
0970: 6f 74 61 32 2d 31 2e 34 20 7b 0a 20 20 73 74 72  ota2-1.4 {.  str
0980: 69 6e 67 20 6d 61 74 63 68 20 24 3a 3a 78 20 5b  ing match $::x [
0990: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 3a 3a  string range $::
09a0: 62 69 67 74 65 78 74 20 30 20 33 30 30 32 5d 0a  bigtext 0 3002].
09b0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75  } {1}.do_test qu
09c0: 6f 74 61 32 2d 31 2e 35 20 7b 0a 20 20 73 71 6c  ota2-1.5 {.  sql
09d0: 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b  ite3_quota_fseek
09e0: 20 24 3a 3a 68 31 20 30 20 53 45 45 4b 5f 45 4e   $::h1 0 SEEK_EN
09f0: 44 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  D.  sqlite3_quot
0a00: 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20  a_ftell $::h1.} 
0a10: 7b 34 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71  {4000}.do_test q
0a20: 75 6f 74 61 32 2d 31 2e 36 20 7b 0a 20 20 73 71  uota2-1.6 {.  sq
0a30: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65  lite3_quota_fsee
0a40: 6b 20 24 3a 3a 68 31 20 2d 31 30 30 20 53 45 45  k $::h1 -100 SEE
0a50: 4b 5f 45 4e 44 0a 20 20 73 71 6c 69 74 65 33 5f  K_END.  sqlite3_
0a60: 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68  quota_ftell $::h
0a70: 31 0a 7d 20 7b 33 39 30 30 7d 0a 64 6f 5f 74 65  1.} {3900}.do_te
0a80: 73 74 20 71 75 6f 74 61 32 2d 31 2e 37 20 7b 0a  st quota2-1.7 {.
0a90: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0aa0: 66 73 65 65 6b 20 24 3a 3a 68 31 20 2d 31 30 30  fseek $::h1 -100
0ab0: 20 53 45 45 4b 5f 43 55 52 0a 20 20 73 71 6c 69   SEEK_CUR.  sqli
0ac0: 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20  te3_quota_ftell 
0ad0: 24 3a 3a 68 31 0a 7d 20 7b 33 38 30 30 7d 0a 64  $::h1.} {3800}.d
0ae0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0af0: 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  8 {.  sqlite3_qu
0b00: 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20  ota_fseek $::h1 
0b10: 35 30 20 53 45 45 4b 5f 43 55 52 0a 20 20 73 71  50 SEEK_CUR.  sq
0b20: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c  lite3_quota_ftel
0b30: 6c 20 24 3a 3a 68 31 0a 7d 20 7b 33 38 35 30 7d  l $::h1.} {3850}
0b40: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
0b50: 31 2e 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.9 {.  sqlite3_
0b60: 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68  quota_fseek $::h
0b70: 31 20 35 30 20 53 45 45 4b 5f 53 45 54 0a 20 20  1 50 SEEK_SET.  
0b80: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74  sqlite3_quota_ft
0b90: 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 35 30 7d  ell $::h1.} {50}
0ba0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
0bb0: 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.10 {.  sqlite3
0bc0: 5f 71 75 6f 74 61 5f 72 65 77 69 6e 64 20 24 3a  _quota_rewind $:
0bd0: 3a 68 31 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  :h1.  sqlite3_qu
0be0: 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a  ota_ftell $::h1.
0bf0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75  } {0}.do_test qu
0c00: 6f 74 61 32 2d 31 2e 31 31 20 7b 0a 20 20 73 74  ota2-1.11 {.  st
0c10: 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c  andard_path [sql
0c20: 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite3_quota_dump]
0c30: 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 62 2f 2a  .} {{*/quota2b/*
0c40: 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71 75 6f 74   5000 0} {*/quot
0c50: 61 32 61 2f 2a 20 34 30 30 30 20 34 30 30 30 20  a2a/* 4000 4000 
0c60: 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 79 7a  {PWD/quota2a/xyz
0c70: 2e 74 78 74 20 34 30 30 30 20 31 20 30 7d 7d 7d  .txt 4000 1 0}}}
0c80: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
0c90: 31 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.12 {.  sqlite3
0ca0: 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24 3a  _quota_fclose $:
0cb0: 3a 68 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70  :h1.  standard_p
0cc0: 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  ath [sqlite3_quo
0cd0: 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71  ta_dump].} {{*/q
0ce0: 75 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 30 7d  uota2b/* 5000 0}
0cf0: 20 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30   {*/quota2a/* 40
0d00: 30 30 20 34 30 30 30 20 7b 50 57 44 2f 71 75 6f  00 4000 {PWD/quo
0d10: 74 61 32 61 2f 78 79 7a 2e 74 78 74 20 34 30 30  ta2a/xyz.txt 400
0d20: 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74  0 0 0}}}.do_test
0d30: 20 71 75 6f 74 61 32 2d 31 2e 31 33 20 7b 0a 20   quota2-1.13 {. 
0d40: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72   sqlite3_quota_r
0d50: 65 6d 6f 76 65 20 71 75 6f 74 61 32 61 2f 78 79  emove quota2a/xy
0d60: 7a 2e 74 78 74 0a 20 20 73 74 61 6e 64 61 72 64  z.txt.  standard
0d70: 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71  _path [sqlite3_q
0d80: 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a  uota_dump].} {{*
0d90: 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30 30 30 20  /quota2b/* 5000 
0da0: 30 7d 20 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20  0} {*/quota2a/* 
0db0: 34 30 30 30 20 30 7d 7d 0a 0a 0a 73 65 74 20 71  4000 0}}...set q
0dc0: 75 6f 74 61 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  uota {}.do_test 
0dd0: 71 75 6f 74 61 32 2d 32 2e 31 20 7b 0a 20 20 73  quota2-2.1 {.  s
0de0: 65 74 20 3a 3a 68 31 20 5b 73 71 6c 69 74 65 33  et ::h1 [sqlite3
0df0: 5f 71 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f  _quota_fopen quo
0e00: 74 61 32 63 2f 78 79 7a 2e 74 78 74 20 77 2b 62  ta2c/xyz.txt w+b
0e10: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  ].  sqlite3_quot
0e20: 61 5f 66 77 72 69 74 65 20 24 3a 3a 68 31 20 31  a_fwrite $::h1 1
0e30: 20 37 30 30 30 20 24 62 69 67 74 65 78 74 0a 7d   7000 $bigtext.}
0e40: 20 7b 37 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20   {7000}.do_test 
0e50: 71 75 6f 74 61 32 2d 32 2e 32 20 7b 0a 20 20 73  quota2-2.2 {.  s
0e60: 65 74 20 3a 3a 71 75 6f 74 61 0a 7d 20 7b 7d 0a  et ::quota.} {}.
0e70: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32  do_test quota2-2
0e80: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .3 {.  sqlite3_q
0e90: 75 6f 74 61 5f 72 65 77 69 6e 64 20 24 3a 3a 68  uota_rewind $::h
0ea0: 31 0a 20 20 73 65 74 20 3a 3a 78 20 5b 73 71 6c  1.  set ::x [sql
0eb0: 69 74 65 33 5f 71 75 6f 74 61 5f 66 72 65 61 64  ite3_quota_fread
0ec0: 20 24 3a 3a 68 31 20 31 30 30 31 20 37 5d 0a 20   $::h1 1001 7]. 
0ed0: 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24   string length $
0ee0: 3a 3a 78 0a 7d 20 7b 36 30 30 36 7d 0a 64 6f 5f  ::x.} {6006}.do_
0ef0: 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 34 20  test quota2-2.4 
0f00: 7b 0a 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68  {.  string match
0f10: 20 24 3a 3a 78 20 5b 73 74 72 69 6e 67 20 72 61   $::x [string ra
0f20: 6e 67 65 20 24 3a 3a 62 69 67 74 65 78 74 20 30  nge $::bigtext 0
0f30: 20 36 30 30 35 5d 0a 7d 20 7b 31 7d 0a 64 6f 5f   6005].} {1}.do_
0f40: 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 35 20  test quota2-2.5 
0f50: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
0f60: 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 30 20  a_fseek $::h1 0 
0f70: 53 45 45 4b 5f 45 4e 44 0a 20 20 73 71 6c 69 74  SEEK_END.  sqlit
0f80: 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24  e3_quota_ftell $
0f90: 3a 3a 68 31 0a 7d 20 7b 37 30 30 30 7d 0a 64 6f  ::h1.} {7000}.do
0fa0: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 36  _test quota2-2.6
0fb0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
0fc0: 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 2d  ta_fseek $::h1 -
0fd0: 31 30 30 20 53 45 45 4b 5f 45 4e 44 0a 20 20 73  100 SEEK_END.  s
0fe0: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65  qlite3_quota_fte
0ff0: 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 36 39 30 30  ll $::h1.} {6900
1000: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
1010: 2d 32 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  -2.7 {.  sqlite3
1020: 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a  _quota_fseek $::
1030: 68 31 20 2d 31 30 30 20 53 45 45 4b 5f 43 55 52  h1 -100 SEEK_CUR
1040: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1050: 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b  _ftell $::h1.} {
1060: 36 38 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75  6800}.do_test qu
1070: 6f 74 61 32 2d 32 2e 38 20 7b 0a 20 20 73 71 6c  ota2-2.8 {.  sql
1080: 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b  ite3_quota_fseek
1090: 20 24 3a 3a 68 31 20 35 30 20 53 45 45 4b 5f 43   $::h1 50 SEEK_C
10a0: 55 52 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  UR.  sqlite3_quo
10b0: 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d  ta_ftell $::h1.}
10c0: 20 7b 36 38 35 30 7d 0a 64 6f 5f 74 65 73 74 20   {6850}.do_test 
10d0: 71 75 6f 74 61 32 2d 32 2e 39 20 7b 0a 20 20 73  quota2-2.9 {.  s
10e0: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65  qlite3_quota_fse
10f0: 65 6b 20 24 3a 3a 68 31 20 35 30 20 53 45 45 4b  ek $::h1 50 SEEK
1100: 5f 53 45 54 0a 20 20 73 71 6c 69 74 65 33 5f 71  _SET.  sqlite3_q
1110: 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31  uota_ftell $::h1
1120: 0a 7d 20 7b 35 30 7d 0a 64 6f 5f 74 65 73 74 20  .} {50}.do_test 
1130: 71 75 6f 74 61 32 2d 32 2e 31 30 20 7b 0a 20 20  quota2-2.10 {.  
1140: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72 65  sqlite3_quota_re
1150: 77 69 6e 64 20 24 3a 3a 68 31 0a 20 20 73 71 6c  wind $::h1.  sql
1160: 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c  ite3_quota_ftell
1170: 20 24 3a 3a 68 31 0a 7d 20 7b 30 7d 0a 64 6f 5f   $::h1.} {0}.do_
1180: 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 31 31  test quota2-2.11
1190: 20 7b 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61   {.  standard_pa
11a0: 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74  th [sqlite3_quot
11b0: 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75  a_dump].} {{*/qu
11c0: 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 30 7d 20  ota2b/* 5000 0} 
11d0: 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30  {*/quota2a/* 400
11e0: 30 20 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75  0 0}}.do_test qu
11f0: 6f 74 61 32 2d 32 2e 31 32 20 7b 0a 20 20 73 71  ota2-2.12 {.  sq
1200: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 63 6c 6f  lite3_quota_fclo
1210: 73 65 20 24 3a 3a 68 31 0a 20 20 73 74 61 6e 64  se $::h1.  stand
1220: 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65  ard_path [sqlite
1230: 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20  3_quota_dump].} 
1240: 7b 7b 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30  {{*/quota2b/* 50
1250: 30 30 20 30 7d 20 7b 2a 2f 71 75 6f 74 61 32 61  00 0} {*/quota2a
1260: 2f 2a 20 34 30 30 30 20 30 7d 7d 0a 0a 64 6f 5f  /* 4000 0}}..do_
1270: 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e 31 20  test quota2-3.1 
1280: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
1290: 61 5f 73 65 74 20 2a 2f 71 75 6f 74 61 32 62 2f  a_set */quota2b/
12a0: 2a 20 30 20 71 75 6f 74 61 5f 63 68 65 63 6b 0a  * 0 quota_check.
12b0: 20 20 73 65 74 20 3a 3a 68 31 20 5b 73 71 6c 69    set ::h1 [sqli
12c0: 74 65 33 5f 71 75 6f 74 61 5f 66 6f 70 65 6e 20  te3_quota_fopen 
12d0: 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74  quota2a/x1/a.txt
12e0: 20 61 5d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75   a].  sqlite3_qu
12f0: 6f 74 61 5f 66 77 72 69 74 65 20 24 3a 3a 68 31  ota_fwrite $::h1
1300: 20 31 30 20 31 30 20 24 62 69 67 74 65 78 74 0a   10 10 $bigtext.
1310: 7d 20 7b 31 30 7d 0a 64 6f 5f 74 65 73 74 20 71  } {10}.do_test q
1320: 75 6f 74 61 32 2d 33 2e 32 20 7b 0a 20 20 73 74  uota2-3.2 {.  st
1330: 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c  andard_path [sql
1340: 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite3_quota_dump]
1350: 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a  .} {{*/quota2a/*
1360: 20 34 30 30 30 20 31 30 30 20 7b 50 57 44 2f 71   4000 100 {PWD/q
1370: 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20  uota2a/x1/a.txt 
1380: 31 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65  100 1 0}}}.do_te
1390: 73 74 20 71 75 6f 74 61 32 2d 33 2e 33 61 20 7b  st quota2-3.3a {
13a0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
13b0: 5f 66 66 6c 75 73 68 20 24 3a 3a 68 31 20 30 0a  _fflush $::h1 0.
13c0: 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20    standard_path 
13d0: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64  [sqlite3_quota_d
13e0: 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61  ump].} {{*/quota
13f0: 32 61 2f 2a 20 34 30 30 30 20 31 30 30 20 7b 50  2a/* 4000 100 {P
1400: 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e  WD/quota2a/x1/a.
1410: 74 78 74 20 31 30 30 20 31 20 30 7d 7d 7d 0a 64  txt 100 1 0}}}.d
1420: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e  o_test quota2-3.
1430: 33 62 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  3b {.  sqlite3_q
1440: 75 6f 74 61 5f 66 66 6c 75 73 68 20 24 3a 3a 68  uota_fflush $::h
1450: 31 20 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70  1 1.  standard_p
1460: 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  ath [sqlite3_quo
1470: 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71  ta_dump].} {{*/q
1480: 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 31 30  uota2a/* 4000 10
1490: 30 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78  0 {PWD/quota2a/x
14a0: 31 2f 61 2e 74 78 74 20 31 30 30 20 31 20 30 7d  1/a.txt 100 1 0}
14b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  }}.do_test quota
14c0: 32 2d 33 2e 33 63 20 7b 0a 20 20 73 71 6c 69 74  2-3.3c {.  sqlit
14d0: 65 33 5f 71 75 6f 74 61 5f 66 66 6c 75 73 68 20  e3_quota_fflush 
14e0: 24 3a 3a 68 31 0a 20 20 73 74 61 6e 64 61 72 64  $::h1.  standard
14f0: 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71  _path [sqlite3_q
1500: 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a  uota_dump].} {{*
1510: 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20  /quota2a/* 4000 
1520: 31 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32 61  100 {PWD/quota2a
1530: 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20 31 20  /x1/a.txt 100 1 
1540: 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  0}}}.do_test quo
1550: 74 61 32 2d 33 2e 34 20 7b 0a 20 20 73 71 6c 69  ta2-3.4 {.  sqli
1560: 74 65 33 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65  te3_quota_fclose
1570: 20 24 3a 3a 68 31 0a 20 20 73 74 61 6e 64 61 72   $::h1.  standar
1580: 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f  d_path [sqlite3_
1590: 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b  quota_dump].} {{
15a0: 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30  */quota2a/* 4000
15b0: 20 31 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32   100 {PWD/quota2
15c0: 61 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20 30  a/x1/a.txt 100 0
15d0: 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75   0}}}.do_test qu
15e0: 6f 74 61 32 2d 33 2e 35 20 7b 0a 20 20 73 65 74  ota2-3.5 {.  set
15f0: 20 3a 3a 68 32 20 5b 73 71 6c 69 74 65 33 5f 71   ::h2 [sqlite3_q
1600: 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74 61  uota_fopen quota
1610: 32 61 2f 78 32 2f 62 2e 74 78 74 20 61 5d 0a 20  2a/x2/b.txt a]. 
1620: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
1630: 77 72 69 74 65 20 24 3a 3a 68 32 20 31 30 20 32  write $::h2 10 2
1640: 30 20 24 62 69 67 74 65 78 74 0a 20 20 73 74 61  0 $bigtext.  sta
1650: 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69  ndard_path [sqli
1660: 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a  te3_quota_dump].
1670: 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20  } {{*/quota2a/* 
1680: 34 30 30 30 20 33 30 30 20 7b 50 57 44 2f 71 75  4000 300 {PWD/qu
1690: 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 20 32  ota2a/x2/b.txt 2
16a0: 30 30 20 31 20 30 7d 20 7b 50 57 44 2f 71 75 6f  00 1 0} {PWD/quo
16b0: 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20 31 30  ta2a/x1/a.txt 10
16c0: 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74  0 0 0}}}.do_test
16d0: 20 71 75 6f 74 61 32 2d 33 2e 36 20 7b 0a 20 20   quota2-3.6 {.  
16e0: 73 65 74 20 3a 3a 68 33 20 5b 73 71 6c 69 74 65  set ::h3 [sqlite
16f0: 33 5f 71 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75  3_quota_fopen qu
1700: 6f 74 61 32 61 2f 78 31 2f 63 2e 74 78 74 20 61  ota2a/x1/c.txt a
1710: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  ].  sqlite3_quot
1720: 61 5f 66 77 72 69 74 65 20 24 3a 3a 68 33 20 31  a_fwrite $::h3 1
1730: 30 20 35 30 20 24 62 69 67 74 65 78 74 0a 20 20  0 50 $bigtext.  
1740: 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73  standard_path [s
1750: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d  qlite3_quota_dum
1760: 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61  p].} {{*/quota2a
1770: 2f 2a 20 34 30 30 30 20 38 30 30 20 7b 50 57 44  /* 4000 800 {PWD
1780: 2f 71 75 6f 74 61 32 61 2f 78 31 2f 63 2e 74 78  /quota2a/x1/c.tx
1790: 74 20 35 30 30 20 31 20 30 7d 20 7b 50 57 44 2f  t 500 1 0} {PWD/
17a0: 71 75 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74  quota2a/x2/b.txt
17b0: 20 32 30 30 20 31 20 30 7d 20 7b 50 57 44 2f 71   200 1 0} {PWD/q
17c0: 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20  uota2a/x1/a.txt 
17d0: 31 30 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65  100 0 0}}}.do_te
17e0: 73 74 20 71 75 6f 74 61 32 2d 33 2e 37 20 7b 0a  st quota2-3.7 {.
17f0: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75    file exists qu
1800: 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 0a 7d  ota2a/x1/a.txt.}
1810: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {1}.do_test quo
1820: 74 61 32 2d 33 2e 38 20 7b 0a 20 20 66 69 6c 65  ta2-3.8 {.  file
1830: 20 65 78 69 73 74 73 20 71 75 6f 74 61 32 61 2f   exists quota2a/
1840: 78 32 2f 62 2e 74 78 74 0a 7d 20 7b 31 7d 0a 64  x2/b.txt.} {1}.d
1850: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e  o_test quota2-3.
1860: 39 20 7b 0a 20 20 66 69 6c 65 20 65 78 69 73 74  9 {.  file exist
1870: 73 20 71 75 6f 74 61 32 61 2f 78 31 2f 63 2e 74  s quota2a/x1/c.t
1880: 78 74 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  xt.} {1}.do_test
1890: 20 71 75 6f 74 61 32 2d 33 2e 31 30 20 7b 0a 20   quota2-3.10 {. 
18a0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72   sqlite3_quota_r
18b0: 65 6d 6f 76 65 20 71 75 6f 74 61 32 61 2f 78 31  emove quota2a/x1
18c0: 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68  .  standard_path
18d0: 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f   [sqlite3_quota_
18e0: 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74  dump].} {{*/quot
18f0: 61 32 61 2f 2a 20 34 30 30 30 20 37 30 30 20 7b  a2a/* 4000 700 {
1900: 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 63  PWD/quota2a/x1/c
1910: 2e 74 78 74 20 35 30 30 20 31 20 31 7d 20 7b 50  .txt 500 1 1} {P
1920: 57 44 2f 71 75 6f 74 61 32 61 2f 78 32 2f 62 2e  WD/quota2a/x2/b.
1930: 74 78 74 20 32 30 30 20 31 20 30 7d 7d 7d 0a 64  txt 200 1 0}}}.d
1940: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e  o_test quota2-3.
1950: 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  11 {.  sqlite3_q
1960: 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24 3a 3a 68  uota_fclose $::h
1970: 32 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  2.  sqlite3_quot
1980: 61 5f 66 63 6c 6f 73 65 20 24 3a 3a 68 33 0a 20  a_fclose $::h3. 
1990: 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b   standard_path [
19a0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75  sqlite3_quota_du
19b0: 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32  mp].} {{*/quota2
19c0: 61 2f 2a 20 34 30 30 30 20 32 30 30 20 7b 50 57  a/* 4000 200 {PW
19d0: 44 2f 71 75 6f 74 61 32 61 2f 78 32 2f 62 2e 74  D/quota2a/x2/b.t
19e0: 78 74 20 32 30 30 20 30 20 30 7d 7d 7d 0a 64 6f  xt 200 0 0}}}.do
19f0: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e 31  _test quota2-3.1
1a00: 32 20 7b 0a 20 20 66 69 6c 65 20 65 78 69 73 74  2 {.  file exist
1a10: 73 20 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74  s quota2a/x1/a.t
1a20: 78 74 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  xt.} {0}.do_test
1a30: 20 71 75 6f 74 61 32 2d 33 2e 31 33 20 7b 0a 20   quota2-3.13 {. 
1a40: 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75 6f   file exists quo
1a50: 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 0a 7d 20  ta2a/x2/b.txt.} 
1a60: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  {1}.do_test quot
1a70: 61 32 2d 33 2e 31 34 20 7b 0a 20 20 66 69 6c 65  a2-3.14 {.  file
1a80: 20 65 78 69 73 74 73 20 71 75 6f 74 61 32 61 2f   exists quota2a/
1a90: 78 31 2f 63 2e 74 78 74 0a 7d 20 7b 30 7d 0a 0a  x1/c.txt.} {0}..
1aa0: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f  catch { sqlite3_
1ab0: 71 75 6f 74 61 5f 73 68 75 74 64 6f 77 6e 20 7d  quota_shutdown }
1ac0: 0a 63 61 74 63 68 20 7b 20 75 6e 73 65 74 20 71  .catch { unset q
1ad0: 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b 20  uota_request_ok 
1ae0: 7d 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        }.finish_test.