/ Hex Artifact Content
Login

Artifact 1b8df088e604f2df573f96e726b5e518cb0cddaa:


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 70 77 64 5d 5d 0a 73 65 74 20 3a 3a 71 75   [pwd]].set ::qu
0370: 6f 74 61 5f 6d 61 70 70 69 6e 67 20 5b 6c 69 73  ota_mapping [lis
0380: 74 20 24 3a 3a 71 75 6f 74 61 5f 70 77 64 20 50  t $::quota_pwd P
0390: 57 44 5d 0a 70 72 6f 63 20 73 74 61 6e 64 61 72  WD].proc standar
03a0: 64 5f 70 61 74 68 20 7b 78 7d 20 7b 0a 20 20 73  d_path {x} {.  s
03b0: 65 74 20 78 20 5b 73 74 72 69 6e 67 20 6d 61 70  et x [string map
03c0: 20 7b 5c 5c 20 2f 7d 20 24 78 5d 0a 20 20 72 65   {\\ /} $x].  re
03d0: 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70  turn [string map
03e0: 20 24 3a 3a 71 75 6f 74 61 5f 6d 61 70 70 69 6e   $::quota_mappin
03f0: 67 20 24 78 5d 0a 7d 0a 0a 23 20 54 68 65 20 71  g $x].}..# The q
0400: 75 6f 74 61 5f 63 68 65 63 6b 20 70 72 6f 63 65  uota_check proce
0410: 64 75 72 65 20 69 73 20 61 20 63 61 6c 6c 62 61  dure is a callba
0420: 63 6b 20 66 72 6f 6d 20 74 68 65 20 71 75 6f 74  ck from the quot
0430: 61 20 68 61 6e 64 6c 65 72 2e 0a 23 20 49 74 20  a handler..# It 
0440: 68 61 73 20 74 68 72 65 65 20 61 72 67 75 6d 65  has three argume
0450: 6e 74 73 20 77 68 69 63 68 20 61 72 65 20 28 31  nts which are (1
0460: 29 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 6e  ) the full pathn
0470: 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 0a  ame of the file.
0480: 23 20 74 68 61 74 20 68 61 73 20 67 6f 6e 65 20  # that has gone 
0490: 6f 76 65 72 20 71 75 6f 74 61 2c 20 28 32 29 20  over quota, (2) 
04a0: 74 68 65 20 71 75 6f 74 61 20 6c 69 6d 69 74 2c  the quota limit,
04b0: 20 28 33 29 20 74 68 65 20 72 65 71 75 65 73 74   (3) the request
04c0: 65 64 0a 23 20 6e 65 77 20 71 75 6f 74 61 20 73  ed.# new quota s
04d0: 69 7a 65 20 74 6f 20 63 6f 76 65 72 20 74 68 65  ize to cover the
04e0: 20 6c 61 73 74 20 77 72 69 74 65 2e 20 20 54 68   last write.  Th
04f0: 65 73 65 20 74 68 72 65 65 20 76 61 6c 75 65 73  ese three values
0500: 20 61 72 65 0a 23 20 61 70 70 65 6e 64 65 64 20   are.# appended 
0510: 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  to the global va
0520: 72 69 61 62 6c 65 20 24 3a 3a 71 75 6f 74 61 2e  riable $::quota.
0530: 20 20 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 69    The filename i
0540: 73 20 70 72 6f 63 65 73 73 65 64 0a 23 20 74 6f  s processed.# to
0550: 20 63 6f 6e 76 65 72 74 20 65 76 65 72 79 20 5c   convert every \
0560: 20 63 68 61 72 61 63 74 65 72 20 69 6e 74 6f 20   character into 
0570: 2f 20 61 6e 64 20 74 6f 20 63 68 61 6e 67 65 20  / and to change 
0580: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a  the name of the.
0590: 23 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74  # working direct
05a0: 6f 72 79 20 74 6f 20 50 57 44 2e 20 20 0a 23 0a  ory to PWD.  .#.
05b0: 23 20 54 68 65 20 71 75 6f 74 61 20 69 73 20 69  # The quota is i
05c0: 6e 63 72 65 61 73 65 64 20 74 6f 20 74 68 65 20  ncreased to the 
05d0: 72 65 71 75 65 73 74 20 69 66 20 74 68 65 20 3a  request if the :
05e0: 3a 71 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f  :quota_request_o
05f0: 6b 20 0a 23 20 67 6c 6f 62 61 6c 20 76 61 72 69  k .# global vari
0600: 61 62 6c 65 20 69 73 20 74 72 75 65 2e 0a 23 0a  able is true..#.
0610: 73 65 74 20 3a 3a 71 75 6f 74 61 20 7b 7d 0a 73  set ::quota {}.s
0620: 65 74 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65  et ::quota_reque
0630: 73 74 5f 6f 6b 20 30 0a 0a 70 72 6f 63 20 71 75  st_ok 0..proc qu
0640: 6f 74 61 5f 63 68 65 63 6b 20 7b 66 69 6c 65 6e  ota_check {filen
0650: 61 6d 65 20 6c 69 6d 69 74 76 61 72 20 73 69 7a  ame limitvar siz
0660: 65 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c 69  e} {.  upvar $li
0670: 6d 69 74 76 61 72 20 6c 69 6d 69 74 0a 20 20 6c  mitvar limit.  l
0680: 61 70 70 65 6e 64 20 3a 3a 71 75 6f 74 61 20 5b  append ::quota [
0690: 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 24 66  standard_path $f
06a0: 69 6c 65 6e 61 6d 65 5d 20 5b 73 65 74 20 6c 69  ilename] [set li
06b0: 6d 69 74 5d 20 24 73 69 7a 65 0a 20 20 69 66 20  mit] $size.  if 
06c0: 7b 24 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65 73  {$::quota_reques
06d0: 74 5f 6f 6b 7d 20 7b 73 65 74 20 6c 69 6d 69 74  t_ok} {set limit
06e0: 20 24 73 69 7a 65 7d 0a 7d 0a 0a 73 71 6c 69 74   $size}.}..sqlit
06f0: 65 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a 2f 71  e3_quota_set */q
0700: 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 71 75  uota2a/* 4000 qu
0710: 6f 74 61 5f 63 68 65 63 6b 0a 73 71 6c 69 74 65  ota_check.sqlite
0720: 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a 2f 71 75  3_quota_set */qu
0730: 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 71 75 6f  ota2b/* 5000 quo
0740: 74 61 5f 63 68 65 63 6b 0a 0a 75 6e 73 65 74 20  ta_check..unset 
0750: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 62 69 67 74  -nocomplain bigt
0760: 65 78 74 0a 66 6f 72 20 7b 73 65 74 20 69 20 31  ext.for {set i 1
0770: 7d 20 7b 24 69 3c 3d 31 30 30 30 7d 20 7b 69 6e  } {$i<=1000} {in
0780: 63 72 20 69 7d 20 7b 0a 20 20 69 66 20 7b 24 69  cr i} {.  if {$i
0790: 25 31 30 3d 3d 30 7d 20 7b 0a 20 20 20 20 61 70  %10==0} {.    ap
07a0: 70 65 6e 64 20 62 69 67 74 65 78 74 20 5b 66 6f  pend bigtext [fo
07b0: 72 6d 61 74 20 22 25 30 36 64 5c 6e 22 20 24 69  rmat "%06d\n" $i
07c0: 5d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ].  } else {.   
07d0: 20 61 70 70 65 6e 64 20 62 69 67 74 65 78 74 20   append bigtext 
07e0: 5b 66 6f 72 6d 61 74 20 22 25 30 36 64 20 22 20  [format "%06d " 
07f0: 24 69 5d 0a 20 20 7d 0a 7d 0a 0a 63 61 74 63 68  $i].  }.}..catch
0800: 20 7b 20 75 6e 73 65 74 20 68 31 20 7d 0a 63 61   { unset h1 }.ca
0810: 74 63 68 20 7b 20 75 6e 73 65 74 20 78 20 7d 0a  tch { unset x }.
0820: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31  do_test quota2-1
0830: 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 68 31 20  .1 {.  set ::h1 
0840: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66  [sqlite3_quota_f
0850: 6f 70 65 6e 20 71 75 6f 74 61 32 61 2f 78 79 7a  open quota2a/xyz
0860: 2e 74 78 74 20 77 2b 62 5d 0a 20 20 73 71 6c 69  .txt w+b].  sqli
0870: 74 65 33 5f 71 75 6f 74 61 5f 66 77 72 69 74 65  te3_quota_fwrite
0880: 20 24 3a 3a 68 31 20 31 20 37 30 30 30 20 24 62   $::h1 1 7000 $b
0890: 69 67 74 65 78 74 0a 7d 20 7b 34 30 30 30 7d 0a  igtext.} {4000}.
08a0: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31  do_test quota2-1
08b0: 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 71 75 6f  .2 {.  set ::quo
08c0: 74 61 0a 7d 20 7b 50 57 44 2f 71 75 6f 74 61 32  ta.} {PWD/quota2
08d0: 61 2f 78 79 7a 2e 74 78 74 20 34 30 30 30 20 37  a/xyz.txt 4000 7
08e0: 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  000}.do_test quo
08f0: 74 61 32 2d 31 2e 33 20 7b 0a 20 20 73 71 6c 69  ta2-1.3 {.  sqli
0900: 74 65 33 5f 71 75 6f 74 61 5f 72 65 77 69 6e 64  te3_quota_rewind
0910: 20 24 3a 3a 68 31 0a 20 20 73 65 74 20 3a 3a 78   $::h1.  set ::x
0920: 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f   [sqlite3_quota_
0930: 66 72 65 61 64 20 24 3a 3a 68 31 20 31 30 30 31  fread $::h1 1001
0940: 20 37 5d 0a 20 20 73 74 72 69 6e 67 20 6c 65 6e   7].  string len
0950: 67 74 68 20 24 3a 3a 78 0a 7d 20 7b 33 30 30 33  gth $::x.} {3003
0960: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
0970: 2d 31 2e 34 20 7b 0a 20 20 73 74 72 69 6e 67 20  -1.4 {.  string 
0980: 6d 61 74 63 68 20 24 3a 3a 78 20 5b 73 74 72 69  match $::x [stri
0990: 6e 67 20 72 61 6e 67 65 20 24 3a 3a 62 69 67 74  ng range $::bigt
09a0: 65 78 74 20 30 20 33 30 30 32 5d 0a 7d 20 7b 31  ext 0 3002].} {1
09b0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
09c0: 2d 31 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.5 {.  sqlite3
09d0: 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a  _quota_fseek $::
09e0: 68 31 20 30 20 53 45 45 4b 5f 45 4e 44 0a 20 20  h1 0 SEEK_END.  
09f0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74  sqlite3_quota_ft
0a00: 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 34 30 30  ell $::h1.} {400
0a10: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
0a20: 32 2d 31 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  2-1.6 {.  sqlite
0a30: 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a  3_quota_fseek $:
0a40: 3a 68 31 20 2d 31 30 30 20 53 45 45 4b 5f 45 4e  :h1 -100 SEEK_EN
0a50: 44 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  D.  sqlite3_quot
0a60: 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20  a_ftell $::h1.} 
0a70: 7b 33 39 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71  {3900}.do_test q
0a80: 75 6f 74 61 32 2d 31 2e 37 20 7b 0a 20 20 73 71  uota2-1.7 {.  sq
0a90: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65  lite3_quota_fsee
0aa0: 6b 20 24 3a 3a 68 31 20 2d 31 30 30 20 53 45 45  k $::h1 -100 SEE
0ab0: 4b 5f 43 55 52 0a 20 20 73 71 6c 69 74 65 33 5f  K_CUR.  sqlite3_
0ac0: 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68  quota_ftell $::h
0ad0: 31 0a 7d 20 7b 33 38 30 30 7d 0a 64 6f 5f 74 65  1.} {3800}.do_te
0ae0: 73 74 20 71 75 6f 74 61 32 2d 31 2e 38 20 7b 0a  st quota2-1.8 {.
0af0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0b00: 66 73 65 65 6b 20 24 3a 3a 68 31 20 35 30 20 53  fseek $::h1 50 S
0b10: 45 45 4b 5f 43 55 52 0a 20 20 73 71 6c 69 74 65  EEK_CUR.  sqlite
0b20: 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a  3_quota_ftell $:
0b30: 3a 68 31 0a 7d 20 7b 33 38 35 30 7d 0a 64 6f 5f  :h1.} {3850}.do_
0b40: 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 39 20  test quota2-1.9 
0b50: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
0b60: 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 35 30  a_fseek $::h1 50
0b70: 20 53 45 45 4b 5f 53 45 54 0a 20 20 73 71 6c 69   SEEK_SET.  sqli
0b80: 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20  te3_quota_ftell 
0b90: 24 3a 3a 68 31 0a 7d 20 7b 35 30 7d 0a 64 6f 5f  $::h1.} {50}.do_
0ba0: 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 31 30  test quota2-1.10
0bb0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
0bc0: 74 61 5f 72 65 77 69 6e 64 20 24 3a 3a 68 31 0a  ta_rewind $::h1.
0bd0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0be0: 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 30  ftell $::h1.} {0
0bf0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
0c00: 2d 31 2e 31 31 20 7b 0a 20 20 73 74 61 6e 64 61  -1.11 {.  standa
0c10: 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33  rd_path [sqlite3
0c20: 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b  _quota_dump].} {
0c30: 7b 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30 30  {*/quota2b/* 500
0c40: 30 20 30 7d 20 7b 2a 2f 71 75 6f 74 61 32 61 2f  0 0} {*/quota2a/
0c50: 2a 20 34 30 30 30 20 34 30 30 30 20 7b 50 57 44  * 4000 4000 {PWD
0c60: 2f 71 75 6f 74 61 32 61 2f 78 79 7a 2e 74 78 74  /quota2a/xyz.txt
0c70: 20 34 30 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f   4000 1 0}}}.do_
0c80: 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 31 32  test quota2-1.12
0c90: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
0ca0: 74 61 5f 66 63 6c 6f 73 65 20 24 3a 3a 68 31 0a  ta_fclose $::h1.
0cb0: 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20    standard_path 
0cc0: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64  [sqlite3_quota_d
0cd0: 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61  ump].} {{*/quota
0ce0: 32 62 2f 2a 20 35 30 30 30 20 30 7d 20 7b 2a 2f  2b/* 5000 0} {*/
0cf0: 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 34  quota2a/* 4000 4
0d00: 30 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32 61  000 {PWD/quota2a
0d10: 2f 78 79 7a 2e 74 78 74 20 34 30 30 30 20 30 20  /xyz.txt 4000 0 
0d20: 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  0}}}.do_test quo
0d30: 74 61 32 2d 31 2e 31 33 20 7b 0a 20 20 73 71 6c  ta2-1.13 {.  sql
0d40: 69 74 65 33 5f 71 75 6f 74 61 5f 72 65 6d 6f 76  ite3_quota_remov
0d50: 65 20 71 75 6f 74 61 32 61 2f 78 79 7a 2e 74 78  e quota2a/xyz.tx
0d60: 74 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74  t.  standard_pat
0d70: 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  h [sqlite3_quota
0d80: 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f  _dump].} {{*/quo
0d90: 74 61 32 62 2f 2a 20 35 30 30 30 20 30 7d 20 7b  ta2b/* 5000 0} {
0da0: 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30  */quota2a/* 4000
0db0: 20 30 7d 7d 0a 0a 0a 73 65 74 20 71 75 6f 74 61   0}}...set quota
0dc0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74   {}.do_test quot
0dd0: 61 32 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 3a  a2-2.1 {.  set :
0de0: 3a 68 31 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  :h1 [sqlite3_quo
0df0: 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32 63  ta_fopen quota2c
0e00: 2f 78 79 7a 2e 74 78 74 20 77 2b 62 5d 0a 20 20  /xyz.txt w+b].  
0e10: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 77  sqlite3_quota_fw
0e20: 72 69 74 65 20 24 3a 3a 68 31 20 31 20 37 30 30  rite $::h1 1 700
0e30: 30 20 24 62 69 67 74 65 78 74 0a 7d 20 7b 37 30  0 $bigtext.} {70
0e40: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  00}.do_test quot
0e50: 61 32 2d 32 2e 32 20 7b 0a 20 20 73 65 74 20 3a  a2-2.2 {.  set :
0e60: 3a 71 75 6f 74 61 0a 7d 20 7b 7d 0a 64 6f 5f 74  :quota.} {}.do_t
0e70: 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 33 20 7b  est quota2-2.3 {
0e80: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
0e90: 5f 72 65 77 69 6e 64 20 24 3a 3a 68 31 0a 20 20  _rewind $::h1.  
0ea0: 73 65 74 20 3a 3a 78 20 5b 73 71 6c 69 74 65 33  set ::x [sqlite3
0eb0: 5f 71 75 6f 74 61 5f 66 72 65 61 64 20 24 3a 3a  _quota_fread $::
0ec0: 68 31 20 31 30 30 31 20 37 5d 0a 20 20 73 74 72  h1 1001 7].  str
0ed0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 78 0a  ing length $::x.
0ee0: 7d 20 7b 36 30 30 36 7d 0a 64 6f 5f 74 65 73 74  } {6006}.do_test
0ef0: 20 71 75 6f 74 61 32 2d 32 2e 34 20 7b 0a 20 20   quota2-2.4 {.  
0f00: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 3a 3a  string match $::
0f10: 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  x [string range 
0f20: 24 3a 3a 62 69 67 74 65 78 74 20 30 20 36 30 30  $::bigtext 0 600
0f30: 35 5d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  5].} {1}.do_test
0f40: 20 71 75 6f 74 61 32 2d 32 2e 35 20 7b 0a 20 20   quota2-2.5 {.  
0f50: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73  sqlite3_quota_fs
0f60: 65 65 6b 20 24 3a 3a 68 31 20 30 20 53 45 45 4b  eek $::h1 0 SEEK
0f70: 5f 45 4e 44 0a 20 20 73 71 6c 69 74 65 33 5f 71  _END.  sqlite3_q
0f80: 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31  uota_ftell $::h1
0f90: 0a 7d 20 7b 37 30 30 30 7d 0a 64 6f 5f 74 65 73  .} {7000}.do_tes
0fa0: 74 20 71 75 6f 74 61 32 2d 32 2e 36 20 7b 0a 20  t quota2-2.6 {. 
0fb0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
0fc0: 73 65 65 6b 20 24 3a 3a 68 31 20 2d 31 30 30 20  seek $::h1 -100 
0fd0: 53 45 45 4b 5f 45 4e 44 0a 20 20 73 71 6c 69 74  SEEK_END.  sqlit
0fe0: 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24  e3_quota_ftell $
0ff0: 3a 3a 68 31 0a 7d 20 7b 36 39 30 30 7d 0a 64 6f  ::h1.} {6900}.do
1000: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 37  _test quota2-2.7
1010: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
1020: 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 2d  ta_fseek $::h1 -
1030: 31 30 30 20 53 45 45 4b 5f 43 55 52 0a 20 20 73  100 SEEK_CUR.  s
1040: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65  qlite3_quota_fte
1050: 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 36 38 30 30  ll $::h1.} {6800
1060: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
1070: 2d 32 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33  -2.8 {.  sqlite3
1080: 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a  _quota_fseek $::
1090: 68 31 20 35 30 20 53 45 45 4b 5f 43 55 52 0a 20  h1 50 SEEK_CUR. 
10a0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
10b0: 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 36 38  tell $::h1.} {68
10c0: 35 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  50}.do_test quot
10d0: 61 32 2d 32 2e 39 20 7b 0a 20 20 73 71 6c 69 74  a2-2.9 {.  sqlit
10e0: 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24  e3_quota_fseek $
10f0: 3a 3a 68 31 20 35 30 20 53 45 45 4b 5f 53 45 54  ::h1 50 SEEK_SET
1100: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1110: 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b  _ftell $::h1.} {
1120: 35 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  50}.do_test quot
1130: 61 32 2d 32 2e 31 30 20 7b 0a 20 20 73 71 6c 69  a2-2.10 {.  sqli
1140: 74 65 33 5f 71 75 6f 74 61 5f 72 65 77 69 6e 64  te3_quota_rewind
1150: 20 24 3a 3a 68 31 0a 20 20 73 71 6c 69 74 65 33   $::h1.  sqlite3
1160: 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a  _quota_ftell $::
1170: 68 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  h1.} {0}.do_test
1180: 20 71 75 6f 74 61 32 2d 32 2e 31 31 20 7b 0a 20   quota2-2.11 {. 
1190: 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b   standard_path [
11a0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75  sqlite3_quota_du
11b0: 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32  mp].} {{*/quota2
11c0: 62 2f 2a 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71  b/* 5000 0} {*/q
11d0: 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 30 7d  uota2a/* 4000 0}
11e0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
11f0: 2d 32 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65  -2.12 {.  sqlite
1200: 33 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24  3_quota_fclose $
1210: 3a 3a 68 31 0a 20 20 73 74 61 6e 64 61 72 64 5f  ::h1.  standard_
1220: 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75  path [sqlite3_qu
1230: 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f  ota_dump].} {{*/
1240: 71 75 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 30  quota2b/* 5000 0
1250: 7d 20 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34  } {*/quota2a/* 4
1260: 30 30 30 20 30 7d 7d 0a 0a 64 6f 5f 74 65 73 74  000 0}}..do_test
1270: 20 71 75 6f 74 61 32 2d 33 2e 31 20 7b 0a 20 20   quota2-3.1 {.  
1280: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
1290: 74 20 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 30 20  t */quota2b/* 0 
12a0: 71 75 6f 74 61 5f 63 68 65 63 6b 0a 20 20 73 65  quota_check.  se
12b0: 74 20 3a 3a 68 31 20 5b 73 71 6c 69 74 65 33 5f  t ::h1 [sqlite3_
12c0: 71 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74  quota_fopen quot
12d0: 61 32 61 2f 78 31 2f 61 2e 74 78 74 20 61 5d 0a  a2a/x1/a.txt a].
12e0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
12f0: 66 77 72 69 74 65 20 24 3a 3a 68 31 20 31 30 20  fwrite $::h1 10 
1300: 31 30 20 24 62 69 67 74 65 78 74 0a 7d 20 7b 31  10 $bigtext.} {1
1310: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
1320: 32 2d 33 2e 32 20 7b 0a 20 20 73 74 61 6e 64 61  2-3.2 {.  standa
1330: 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33  rd_path [sqlite3
1340: 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b  _quota_dump].} {
1350: 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30  {*/quota2a/* 400
1360: 30 20 31 30 30 20 7b 50 57 44 2f 71 75 6f 74 61  0 100 {PWD/quota
1370: 32 61 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20  2a/x1/a.txt 100 
1380: 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  1 0}}}.do_test q
1390: 75 6f 74 61 32 2d 33 2e 33 61 20 7b 0a 20 20 73  uota2-3.3a {.  s
13a0: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 66 6c  qlite3_quota_ffl
13b0: 75 73 68 20 24 3a 3a 68 31 20 30 0a 20 20 73 74  ush $::h1 0.  st
13c0: 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c  andard_path [sql
13d0: 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite3_quota_dump]
13e0: 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a  .} {{*/quota2a/*
13f0: 20 34 30 30 30 20 31 30 30 20 7b 50 57 44 2f 71   4000 100 {PWD/q
1400: 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20  uota2a/x1/a.txt 
1410: 31 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65  100 1 0}}}.do_te
1420: 73 74 20 71 75 6f 74 61 32 2d 33 2e 33 62 20 7b  st quota2-3.3b {
1430: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1440: 5f 66 66 6c 75 73 68 20 24 3a 3a 68 31 20 31 0a  _fflush $::h1 1.
1450: 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20    standard_path 
1460: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64  [sqlite3_quota_d
1470: 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61  ump].} {{*/quota
1480: 32 61 2f 2a 20 34 30 30 30 20 31 30 30 20 7b 50  2a/* 4000 100 {P
1490: 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e  WD/quota2a/x1/a.
14a0: 74 78 74 20 31 30 30 20 31 20 30 7d 7d 7d 0a 64  txt 100 1 0}}}.d
14b0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e  o_test quota2-3.
14c0: 33 63 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  3c {.  sqlite3_q
14d0: 75 6f 74 61 5f 66 66 6c 75 73 68 20 24 3a 3a 68  uota_fflush $::h
14e0: 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74  1.  standard_pat
14f0: 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  h [sqlite3_quota
1500: 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f  _dump].} {{*/quo
1510: 74 61 32 61 2f 2a 20 34 30 30 30 20 31 30 30 20  ta2a/* 4000 100 
1520: 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f  {PWD/quota2a/x1/
1530: 61 2e 74 78 74 20 31 30 30 20 31 20 30 7d 7d 7d  a.txt 100 1 0}}}
1540: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1550: 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.4 {.  sqlite3_
1560: 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24 3a 3a  quota_fclose $::
1570: 68 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61  h1.  standard_pa
1580: 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74  th [sqlite3_quot
1590: 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75  a_dump].} {{*/qu
15a0: 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 31 30 30  ota2a/* 4000 100
15b0: 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31   {PWD/quota2a/x1
15c0: 2f 61 2e 74 78 74 20 31 30 30 20 30 20 30 7d 7d  /a.txt 100 0 0}}
15d0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
15e0: 2d 33 2e 35 20 7b 0a 20 20 73 65 74 20 3a 3a 68  -3.5 {.  set ::h
15f0: 32 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  2 [sqlite3_quota
1600: 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32 61 2f 78  _fopen quota2a/x
1610: 32 2f 62 2e 74 78 74 20 61 5d 0a 20 20 73 71 6c  2/b.txt a].  sql
1620: 69 74 65 33 5f 71 75 6f 74 61 5f 66 77 72 69 74  ite3_quota_fwrit
1630: 65 20 24 3a 3a 68 32 20 31 30 20 32 30 20 24 62  e $::h2 10 20 $b
1640: 69 67 74 65 78 74 0a 20 20 73 74 61 6e 64 61 72  igtext.  standar
1650: 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f  d_path [sqlite3_
1660: 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b  quota_dump].} {{
1670: 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30  */quota2a/* 4000
1680: 20 33 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32   300 {PWD/quota2
1690: 61 2f 78 32 2f 62 2e 74 78 74 20 32 30 30 20 31  a/x2/b.txt 200 1
16a0: 20 30 7d 20 7b 50 57 44 2f 71 75 6f 74 61 32 61   0} {PWD/quota2a
16b0: 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20 30 20  /x1/a.txt 100 0 
16c0: 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  0}}}.do_test quo
16d0: 74 61 32 2d 33 2e 36 20 7b 0a 20 20 73 65 74 20  ta2-3.6 {.  set 
16e0: 3a 3a 68 33 20 5b 73 71 6c 69 74 65 33 5f 71 75  ::h3 [sqlite3_qu
16f0: 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32  ota_fopen quota2
1700: 61 2f 78 31 2f 63 2e 74 78 74 20 61 5d 0a 20 20  a/x1/c.txt a].  
1710: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 77  sqlite3_quota_fw
1720: 72 69 74 65 20 24 3a 3a 68 33 20 31 30 20 35 30  rite $::h3 10 50
1730: 20 24 62 69 67 74 65 78 74 0a 20 20 73 74 61 6e   $bigtext.  stan
1740: 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74  dard_path [sqlit
1750: 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d  e3_quota_dump].}
1760: 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34   {{*/quota2a/* 4
1770: 30 30 30 20 38 30 30 20 7b 50 57 44 2f 71 75 6f  000 800 {PWD/quo
1780: 74 61 32 61 2f 78 31 2f 63 2e 74 78 74 20 35 30  ta2a/x1/c.txt 50
1790: 30 20 31 20 30 7d 20 7b 50 57 44 2f 71 75 6f 74  0 1 0} {PWD/quot
17a0: 61 32 61 2f 78 32 2f 62 2e 74 78 74 20 32 30 30  a2a/x2/b.txt 200
17b0: 20 31 20 30 7d 20 7b 50 57 44 2f 71 75 6f 74 61   1 0} {PWD/quota
17c0: 32 61 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20  2a/x1/a.txt 100 
17d0: 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  0 0}}}.do_test q
17e0: 75 6f 74 61 32 2d 33 2e 37 20 7b 0a 20 20 66 69  uota2-3.7 {.  fi
17f0: 6c 65 20 65 78 69 73 74 73 20 71 75 6f 74 61 32  le exists quota2
1800: 61 2f 78 31 2f 61 2e 74 78 74 0a 7d 20 7b 31 7d  a/x1/a.txt.} {1}
1810: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1820: 33 2e 38 20 7b 0a 20 20 66 69 6c 65 20 65 78 69  3.8 {.  file exi
1830: 73 74 73 20 71 75 6f 74 61 32 61 2f 78 32 2f 62  sts quota2a/x2/b
1840: 2e 74 78 74 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  .txt.} {1}.do_te
1850: 73 74 20 71 75 6f 74 61 32 2d 33 2e 39 20 7b 0a  st quota2-3.9 {.
1860: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75    file exists qu
1870: 6f 74 61 32 61 2f 78 31 2f 63 2e 74 78 74 0a 7d  ota2a/x1/c.txt.}
1880: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {1}.do_test quo
1890: 74 61 32 2d 33 2e 31 30 20 7b 0a 20 20 73 71 6c  ta2-3.10 {.  sql
18a0: 69 74 65 33 5f 71 75 6f 74 61 5f 72 65 6d 6f 76  ite3_quota_remov
18b0: 65 20 71 75 6f 74 61 32 61 2f 78 31 0a 20 20 73  e quota2a/x1.  s
18c0: 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71  tandard_path [sq
18d0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70  lite3_quota_dump
18e0: 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f  ].} {{*/quota2a/
18f0: 2a 20 34 30 30 30 20 37 30 30 20 7b 50 57 44 2f  * 4000 700 {PWD/
1900: 71 75 6f 74 61 32 61 2f 78 31 2f 63 2e 74 78 74  quota2a/x1/c.txt
1910: 20 35 30 30 20 31 20 31 7d 20 7b 50 57 44 2f 71   500 1 1} {PWD/q
1920: 75 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 20  uota2a/x2/b.txt 
1930: 32 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65  200 1 0}}}.do_te
1940: 73 74 20 71 75 6f 74 61 32 2d 33 2e 31 31 20 7b  st quota2-3.11 {
1950: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1960: 5f 66 63 6c 6f 73 65 20 24 3a 3a 68 32 0a 20 20  _fclose $::h2.  
1970: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 63  sqlite3_quota_fc
1980: 6c 6f 73 65 20 24 3a 3a 68 33 0a 20 20 73 74 61  lose $::h3.  sta
1990: 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69  ndard_path [sqli
19a0: 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a  te3_quota_dump].
19b0: 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20  } {{*/quota2a/* 
19c0: 34 30 30 30 20 32 30 30 20 7b 50 57 44 2f 71 75  4000 200 {PWD/qu
19d0: 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 20 32  ota2a/x2/b.txt 2
19e0: 30 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73  00 0 0}}}.do_tes
19f0: 74 20 71 75 6f 74 61 32 2d 33 2e 31 32 20 7b 0a  t quota2-3.12 {.
1a00: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75    file exists qu
1a10: 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 0a 7d  ota2a/x1/a.txt.}
1a20: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {0}.do_test quo
1a30: 74 61 32 2d 33 2e 31 33 20 7b 0a 20 20 66 69 6c  ta2-3.13 {.  fil
1a40: 65 20 65 78 69 73 74 73 20 71 75 6f 74 61 32 61  e exists quota2a
1a50: 2f 78 32 2f 62 2e 74 78 74 0a 7d 20 7b 31 7d 0a  /x2/b.txt.} {1}.
1a60: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33  do_test quota2-3
1a70: 2e 31 34 20 7b 0a 20 20 66 69 6c 65 20 65 78 69  .14 {.  file exi
1a80: 73 74 73 20 71 75 6f 74 61 32 61 2f 78 31 2f 63  sts quota2a/x1/c
1a90: 2e 74 78 74 0a 7d 20 7b 30 7d 0a 0a 63 61 74 63  .txt.} {0}..catc
1aa0: 68 20 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  h { sqlite3_quot
1ab0: 61 5f 73 68 75 74 64 6f 77 6e 20 7d 0a 63 61 74  a_shutdown }.cat
1ac0: 63 68 20 7b 20 75 6e 73 65 74 20 71 75 6f 74 61  ch { unset quota
1ad0: 5f 72 65 71 75 65 73 74 5f 6f 6b 20 7d 0a 66 69  _request_ok }.fi
1ae0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.