/ Hex Artifact Content
Login

Artifact 7dc12e08b11cbc4c16c9ba2aa2e040ea8d8ab4b8:


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 0a 23 20 49 66 20 53 51  ter.tcl..# If SQ
01b0: 4c 49 54 45 5f 43 55 52 44 49 52 20 69 73 20 6e  LITE_CURDIR is n
01c0: 6f 74 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  ot defined, omit
01d0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
01e0: 70 61 62 6c 65 20 21 63 75 72 64 69 72 20 7b 0a  pable !curdir {.
01f0: 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20    finish_test.  
0200: 72 65 74 75 72 6e 0a 7d 0a 0a 73 6f 75 72 63 65  return.}..source
0210: 20 24 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f 63   $testdir/malloc
0220: 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 64 62 20  _common.tcl..db 
0230: 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33 5f 71 75  close.sqlite3_qu
0240: 6f 74 61 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22  ota_initialize "
0250: 22 20 31 0a 0a 66 6f 72 65 61 63 68 20 64 69 72  " 1..foreach dir
0260: 20 7b 71 75 6f 74 61 32 61 2f 78 31 20 71 75 6f   {quota2a/x1 quo
0270: 74 61 32 61 2f 78 32 20 71 75 6f 74 61 32 61 20  ta2a/x2 quota2a 
0280: 71 75 6f 74 61 32 62 20 71 75 6f 74 61 32 63 7d  quota2b quota2c}
0290: 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65   {.  forcedelete
02a0: 20 24 64 69 72 0a 7d 0a 66 6f 72 65 61 63 68 20   $dir.}.foreach 
02b0: 64 69 72 20 7b 71 75 6f 74 61 32 61 20 71 75 6f  dir {quota2a quo
02c0: 74 61 32 61 2f 78 31 20 71 75 6f 74 61 32 61 2f  ta2a/x1 quota2a/
02d0: 78 32 20 71 75 6f 74 61 32 62 20 71 75 6f 74 61  x2 quota2b quota
02e0: 32 63 7d 20 7b 0a 20 20 66 69 6c 65 20 6d 6b 64  2c} {.  file mkd
02f0: 69 72 20 24 64 69 72 0a 7d 0a 0a 23 20 54 68 65  ir $dir.}..# The
0300: 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 70   standard_path p
0310: 72 6f 63 65 64 75 72 65 20 63 6f 6e 76 65 72 74  rocedure convert
0320: 73 20 61 20 70 61 74 68 6e 61 6d 65 20 69 6e 74  s a pathname int
0330: 6f 20 61 20 73 74 61 6e 64 61 72 64 20 66 6f 72  o a standard for
0340: 6d 61 74 0a 23 20 74 68 61 74 20 69 73 20 74 68  mat.# that is th
0350: 65 20 73 61 6d 65 20 61 63 72 6f 73 73 20 70 6c  e same across pl
0360: 61 74 66 6f 72 6d 73 2e 0a 23 0a 75 6e 73 65 74  atforms..#.unset
0370: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 71   -nocomplain ::q
0380: 75 6f 74 61 5f 70 77 64 20 3a 3a 71 75 6f 74 61  uota_pwd ::quota
0390: 5f 6d 61 70 70 69 6e 67 0a 73 65 74 20 3a 3a 71  _mapping.set ::q
03a0: 75 6f 74 61 5f 70 77 64 20 5b 73 74 72 69 6e 67  uota_pwd [string
03b0: 20 6d 61 70 20 7b 5c 5c 20 2f 7d 20 5b 67 65 74   map {\\ /} [get
03c0: 5f 70 77 64 5d 5d 0a 73 65 74 20 3a 3a 71 75 6f  _pwd]].set ::quo
03d0: 74 61 5f 6d 61 70 70 69 6e 67 20 5b 6c 69 73 74  ta_mapping [list
03e0: 20 24 3a 3a 71 75 6f 74 61 5f 70 77 64 20 50 57   $::quota_pwd PW
03f0: 44 5d 0a 70 72 6f 63 20 73 74 61 6e 64 61 72 64  D].proc standard
0400: 5f 70 61 74 68 20 7b 78 7d 20 7b 0a 20 20 73 65  _path {x} {.  se
0410: 74 20 78 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  t x [string map 
0420: 7b 5c 5c 20 2f 7d 20 24 78 5d 0a 20 20 72 65 74  {\\ /} $x].  ret
0430: 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  urn [string map 
0440: 24 3a 3a 71 75 6f 74 61 5f 6d 61 70 70 69 6e 67  $::quota_mapping
0450: 20 24 78 5d 0a 7d 0a 0a 23 20 54 68 65 20 71 75   $x].}..# The qu
0460: 6f 74 61 5f 63 68 65 63 6b 20 70 72 6f 63 65 64  ota_check proced
0470: 75 72 65 20 69 73 20 61 20 63 61 6c 6c 62 61 63  ure is a callbac
0480: 6b 20 66 72 6f 6d 20 74 68 65 20 71 75 6f 74 61  k from the quota
0490: 20 68 61 6e 64 6c 65 72 2e 0a 23 20 49 74 20 68   handler..# It h
04a0: 61 73 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e  as three argumen
04b0: 74 73 20 77 68 69 63 68 20 61 72 65 20 28 31 29  ts which are (1)
04c0: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 6e 61   the full pathna
04d0: 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 23  me of the file.#
04e0: 20 74 68 61 74 20 68 61 73 20 67 6f 6e 65 20 6f   that has gone o
04f0: 76 65 72 20 71 75 6f 74 61 2c 20 28 32 29 20 74  ver quota, (2) t
0500: 68 65 20 71 75 6f 74 61 20 6c 69 6d 69 74 2c 20  he quota limit, 
0510: 28 33 29 20 74 68 65 20 72 65 71 75 65 73 74 65  (3) the requeste
0520: 64 0a 23 20 6e 65 77 20 71 75 6f 74 61 20 73 69  d.# new quota si
0530: 7a 65 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  ze to cover the 
0540: 6c 61 73 74 20 77 72 69 74 65 2e 20 20 54 68 65  last write.  The
0550: 73 65 20 74 68 72 65 65 20 76 61 6c 75 65 73 20  se three values 
0560: 61 72 65 0a 23 20 61 70 70 65 6e 64 65 64 20 74  are.# appended t
0570: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  o the global var
0580: 69 61 62 6c 65 20 24 3a 3a 71 75 6f 74 61 2e 20  iable $::quota. 
0590: 20 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 69 73   The filename is
05a0: 20 70 72 6f 63 65 73 73 65 64 0a 23 20 74 6f 20   processed.# to 
05b0: 63 6f 6e 76 65 72 74 20 65 76 65 72 79 20 5c 20  convert every \ 
05c0: 63 68 61 72 61 63 74 65 72 20 69 6e 74 6f 20 2f  character into /
05d0: 20 61 6e 64 20 74 6f 20 63 68 61 6e 67 65 20 74   and to change t
05e0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 23  he name of the.#
05f0: 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f   working directo
0600: 72 79 20 74 6f 20 50 57 44 2e 20 20 0a 23 0a 23  ry to PWD.  .#.#
0610: 20 54 68 65 20 71 75 6f 74 61 20 69 73 20 69 6e   The quota is in
0620: 63 72 65 61 73 65 64 20 74 6f 20 74 68 65 20 72  creased to the r
0630: 65 71 75 65 73 74 20 69 66 20 74 68 65 20 3a 3a  equest if the ::
0640: 71 75 6f 74 61 5f 72 65 71 75 65 73 74 5f 6f 6b  quota_request_ok
0650: 20 0a 23 20 67 6c 6f 62 61 6c 20 76 61 72 69 61   .# global varia
0660: 62 6c 65 20 69 73 20 74 72 75 65 2e 0a 23 0a 73  ble is true..#.s
0670: 65 74 20 3a 3a 71 75 6f 74 61 20 7b 7d 0a 73 65  et ::quota {}.se
0680: 74 20 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65 73  t ::quota_reques
0690: 74 5f 6f 6b 20 30 0a 0a 70 72 6f 63 20 71 75 6f  t_ok 0..proc quo
06a0: 74 61 5f 63 68 65 63 6b 20 7b 66 69 6c 65 6e 61  ta_check {filena
06b0: 6d 65 20 6c 69 6d 69 74 76 61 72 20 73 69 7a 65  me limitvar size
06c0: 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c 69 6d  } {.  upvar $lim
06d0: 69 74 76 61 72 20 6c 69 6d 69 74 0a 20 20 6c 61  itvar limit.  la
06e0: 70 70 65 6e 64 20 3a 3a 71 75 6f 74 61 20 5b 73  ppend ::quota [s
06f0: 74 61 6e 64 61 72 64 5f 70 61 74 68 20 24 66 69  tandard_path $fi
0700: 6c 65 6e 61 6d 65 5d 20 5b 73 65 74 20 6c 69 6d  lename] [set lim
0710: 69 74 5d 20 24 73 69 7a 65 0a 20 20 69 66 20 7b  it] $size.  if {
0720: 24 3a 3a 71 75 6f 74 61 5f 72 65 71 75 65 73 74  $::quota_request
0730: 5f 6f 6b 7d 20 7b 73 65 74 20 6c 69 6d 69 74 20  _ok} {set limit 
0740: 24 73 69 7a 65 7d 0a 7d 0a 0a 73 71 6c 69 74 65  $size}.}..sqlite
0750: 33 5f 71 75 6f 74 61 5f 73 65 74 20 2a 2f 71 75  3_quota_set */qu
0760: 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 71 75 6f  ota2a/* 4000 quo
0770: 74 61 5f 63 68 65 63 6b 0a 73 71 6c 69 74 65 33  ta_check.sqlite3
0780: 5f 71 75 6f 74 61 5f 73 65 74 20 2a 2f 71 75 6f  _quota_set */quo
0790: 74 61 32 62 2f 2a 20 35 30 30 30 20 71 75 6f 74  ta2b/* 5000 quot
07a0: 61 5f 63 68 65 63 6b 0a 0a 75 6e 73 65 74 20 2d  a_check..unset -
07b0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 62 69 67 74 65  nocomplain bigte
07c0: 78 74 0a 66 6f 72 20 7b 73 65 74 20 69 20 31 7d  xt.for {set i 1}
07d0: 20 7b 24 69 3c 3d 31 30 30 30 7d 20 7b 69 6e 63   {$i<=1000} {inc
07e0: 72 20 69 7d 20 7b 0a 20 20 69 66 20 7b 24 69 25  r i} {.  if {$i%
07f0: 31 30 3d 3d 30 7d 20 7b 0a 20 20 20 20 61 70 70  10==0} {.    app
0800: 65 6e 64 20 62 69 67 74 65 78 74 20 5b 66 6f 72  end bigtext [for
0810: 6d 61 74 20 22 25 30 36 64 5c 6e 22 20 24 69 5d  mat "%06d\n" $i]
0820: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
0830: 61 70 70 65 6e 64 20 62 69 67 74 65 78 74 20 5b  append bigtext [
0840: 66 6f 72 6d 61 74 20 22 25 30 36 64 20 22 20 24  format "%06d " $
0850: 69 5d 0a 20 20 7d 0a 7d 0a 0a 63 61 74 63 68 20  i].  }.}..catch 
0860: 7b 20 75 6e 73 65 74 20 68 31 20 7d 0a 63 61 74  { unset h1 }.cat
0870: 63 68 20 7b 20 75 6e 73 65 74 20 78 20 7d 0a 64  ch { unset x }.d
0880: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0890: 31 20 7b 0a 20 20 73 65 74 20 3a 3a 68 31 20 5b  1 {.  set ::h1 [
08a0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 6f  sqlite3_quota_fo
08b0: 70 65 6e 20 71 75 6f 74 61 32 61 2f 78 79 7a 2e  pen quota2a/xyz.
08c0: 74 78 74 20 77 2b 62 5d 0a 20 20 73 71 6c 69 74  txt w+b].  sqlit
08d0: 65 33 5f 71 75 6f 74 61 5f 66 77 72 69 74 65 20  e3_quota_fwrite 
08e0: 24 3a 3a 68 31 20 31 20 37 30 30 30 20 24 62 69  $::h1 1 7000 $bi
08f0: 67 74 65 78 74 0a 7d 20 7b 34 30 30 30 7d 0a 64  gtext.} {4000}.d
0900: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0910: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 71 75 6f 74  2 {.  set ::quot
0920: 61 0a 7d 20 7b 50 57 44 2f 71 75 6f 74 61 32 61  a.} {PWD/quota2a
0930: 2f 78 79 7a 2e 74 78 74 20 34 30 30 30 20 37 30  /xyz.txt 4000 70
0940: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  00}.do_test quot
0950: 61 32 2d 31 2e 32 2e 31 20 7b 0a 20 20 73 71 6c  a2-1.2.1 {.  sql
0960: 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f  ite3_quota_file_
0970: 73 69 7a 65 20 24 3a 3a 68 31 0a 7d 20 7b 34 30  size $::h1.} {40
0980: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  00}.do_test quot
0990: 61 32 2d 31 2e 32 2e 32 20 7b 0a 20 20 73 71 6c  a2-1.2.2 {.  sql
09a0: 69 74 65 33 5f 71 75 6f 74 61 5f 66 66 6c 75 73  ite3_quota_fflus
09b0: 68 20 24 3a 3a 68 31 20 31 0a 20 20 73 71 6c 69  h $::h1 1.  sqli
09c0: 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f 74  te3_quota_file_t
09d0: 72 75 65 73 69 7a 65 20 24 3a 3a 68 31 0a 7d 20  ruesize $::h1.} 
09e0: 7b 34 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71  {4000}.do_test q
09f0: 75 6f 74 61 32 2d 31 2e 33 20 7b 0a 20 20 73 71  uota2-1.3 {.  sq
0a00: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72 65 77 69  lite3_quota_rewi
0a10: 6e 64 20 24 3a 3a 68 31 0a 20 20 73 65 74 20 3a  nd $::h1.  set :
0a20: 3a 78 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74  :x [sqlite3_quot
0a30: 61 5f 66 72 65 61 64 20 24 3a 3a 68 31 20 31 30  a_fread $::h1 10
0a40: 30 31 20 37 5d 0a 20 20 73 74 72 69 6e 67 20 6c  01 7].  string l
0a50: 65 6e 67 74 68 20 24 3a 3a 78 0a 7d 20 7b 33 30  ength $::x.} {30
0a60: 30 33 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  03}.do_test quot
0a70: 61 32 2d 31 2e 34 20 7b 0a 20 20 73 74 72 69 6e  a2-1.4 {.  strin
0a80: 67 20 6d 61 74 63 68 20 24 3a 3a 78 20 5b 73 74  g match $::x [st
0a90: 72 69 6e 67 20 72 61 6e 67 65 20 24 3a 3a 62 69  ring range $::bi
0aa0: 67 74 65 78 74 20 30 20 33 30 30 32 5d 0a 7d 20  gtext 0 3002].} 
0ab0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  {1}.do_test quot
0ac0: 61 32 2d 31 2e 35 20 7b 0a 20 20 73 71 6c 69 74  a2-1.5 {.  sqlit
0ad0: 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24  e3_quota_fseek $
0ae0: 3a 3a 68 31 20 30 20 53 45 45 4b 5f 45 4e 44 0a  ::h1 0 SEEK_END.
0af0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0b00: 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 34  ftell $::h1.} {4
0b10: 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  000}.do_test quo
0b20: 74 61 32 2d 31 2e 36 20 7b 0a 20 20 73 71 6c 69  ta2-1.6 {.  sqli
0b30: 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20  te3_quota_fseek 
0b40: 24 3a 3a 68 31 20 2d 31 30 30 20 53 45 45 4b 5f  $::h1 -100 SEEK_
0b50: 45 4e 44 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  END.  sqlite3_qu
0b60: 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a  ota_ftell $::h1.
0b70: 7d 20 7b 33 39 30 30 7d 0a 64 6f 5f 74 65 73 74  } {3900}.do_test
0b80: 20 71 75 6f 74 61 32 2d 31 2e 37 20 7b 0a 20 20   quota2-1.7 {.  
0b90: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73  sqlite3_quota_fs
0ba0: 65 65 6b 20 24 3a 3a 68 31 20 2d 31 30 30 20 53  eek $::h1 -100 S
0bb0: 45 45 4b 5f 43 55 52 0a 20 20 73 71 6c 69 74 65  EEK_CUR.  sqlite
0bc0: 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a  3_quota_ftell $:
0bd0: 3a 68 31 0a 7d 20 7b 33 38 30 30 7d 0a 64 6f 5f  :h1.} {3800}.do_
0be0: 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 38 20  test quota2-1.8 
0bf0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
0c00: 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 35 30  a_fseek $::h1 50
0c10: 20 53 45 45 4b 5f 43 55 52 0a 20 20 73 71 6c 69   SEEK_CUR.  sqli
0c20: 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20  te3_quota_ftell 
0c30: 24 3a 3a 68 31 0a 7d 20 7b 33 38 35 30 7d 0a 64  $::h1.} {3850}.d
0c40: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0c50: 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  9 {.  sqlite3_qu
0c60: 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20  ota_fseek $::h1 
0c70: 35 30 20 53 45 45 4b 5f 53 45 54 0a 20 20 73 71  50 SEEK_SET.  sq
0c80: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c  lite3_quota_ftel
0c90: 6c 20 24 3a 3a 68 31 0a 7d 20 7b 35 30 7d 0a 64  l $::h1.} {50}.d
0ca0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0cb0: 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  10 {.  sqlite3_q
0cc0: 75 6f 74 61 5f 72 65 77 69 6e 64 20 24 3a 3a 68  uota_rewind $::h
0cd0: 31 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  1.  sqlite3_quot
0ce0: 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20  a_ftell $::h1.} 
0cf0: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  {0}.do_test quot
0d00: 61 32 2d 31 2e 31 31 20 7b 0a 20 20 73 74 61 6e  a2-1.11 {.  stan
0d10: 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74  dard_path [sqlit
0d20: 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d  e3_quota_dump].}
0d30: 20 7b 7b 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 35   {{*/quota2b/* 5
0d40: 30 30 30 20 30 7d 20 7b 2a 2f 71 75 6f 74 61 32  000 0} {*/quota2
0d50: 61 2f 2a 20 34 30 30 30 20 34 30 30 30 20 7b 50  a/* 4000 4000 {P
0d60: 57 44 2f 71 75 6f 74 61 32 61 2f 78 79 7a 2e 74  WD/quota2a/xyz.t
0d70: 78 74 20 34 30 30 30 20 31 20 30 7d 7d 7d 0a 64  xt 4000 1 0}}}.d
0d80: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0d90: 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  12 {.  sqlite3_q
0da0: 75 6f 74 61 5f 66 74 72 75 6e 63 61 74 65 20 24  uota_ftruncate $
0db0: 3a 3a 68 31 20 33 35 30 30 0a 20 20 73 71 6c 69  ::h1 3500.  sqli
0dc0: 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f 73  te3_quota_file_s
0dd0: 69 7a 65 20 24 3a 3a 68 31 0a 7d 20 7b 33 35 30  ize $::h1.} {350
0de0: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
0df0: 32 2d 31 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74  2-1.13 {.  sqlit
0e00: 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f 74 72  e3_quota_file_tr
0e10: 75 65 73 69 7a 65 20 24 3a 3a 68 31 0a 7d 20 7b  uesize $::h1.} {
0e20: 33 35 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75  3500}.do_test qu
0e30: 6f 74 61 32 2d 31 2e 31 34 20 7b 0a 20 20 73 74  ota2-1.14 {.  st
0e40: 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c  andard_path [sql
0e50: 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite3_quota_dump]
0e60: 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 62 2f 2a  .} {{*/quota2b/*
0e70: 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71 75 6f 74   5000 0} {*/quot
0e80: 61 32 61 2f 2a 20 34 30 30 30 20 33 35 30 30 20  a2a/* 4000 3500 
0e90: 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 79 7a  {PWD/quota2a/xyz
0ea0: 2e 74 78 74 20 33 35 30 30 20 31 20 30 7d 7d 7d  .txt 3500 1 0}}}
0eb0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
0ec0: 31 2e 31 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.15 {.  sqlite3
0ed0: 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a  _quota_fseek $::
0ee0: 68 31 20 30 20 53 45 45 4b 5f 45 4e 44 0a 20 20  h1 0 SEEK_END.  
0ef0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74  sqlite3_quota_ft
0f00: 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 33 35 30  ell $::h1.} {350
0f10: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
0f20: 32 2d 31 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74  2-1.16 {.  sqlit
0f30: 65 33 5f 71 75 6f 74 61 5f 66 77 72 69 74 65 20  e3_quota_fwrite 
0f40: 24 3a 3a 68 31 20 31 20 37 30 30 30 20 24 62 69  $::h1 1 7000 $bi
0f50: 67 74 65 78 74 0a 7d 20 7b 35 30 30 7d 0a 64 6f  gtext.} {500}.do
0f60: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 31  _test quota2-1.1
0f70: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  7 {.  sqlite3_qu
0f80: 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a  ota_ftell $::h1.
0f90: 7d 20 7b 34 30 30 30 7d 0a 64 6f 5f 74 65 73 74  } {4000}.do_test
0fa0: 20 71 75 6f 74 61 32 2d 31 2e 31 38 20 7b 0a 20   quota2-1.18 {. 
0fb0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
0fc0: 69 6c 65 5f 73 69 7a 65 20 24 3a 3a 68 31 0a 7d  ile_size $::h1.}
0fd0: 20 7b 34 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20   {4000}.do_test 
0fe0: 71 75 6f 74 61 32 2d 31 2e 31 39 20 7b 0a 20 20  quota2-1.19 {.  
0ff0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 66  sqlite3_quota_ff
1000: 6c 75 73 68 20 24 3a 3a 68 31 20 31 0a 20 20 73  lush $::h1 1.  s
1010: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c  qlite3_quota_fil
1020: 65 5f 74 72 75 65 73 69 7a 65 20 24 3a 3a 68 31  e_truesize $::h1
1030: 0a 7d 20 7b 34 30 30 30 7d 0a 64 6f 5f 74 65 73  .} {4000}.do_tes
1040: 74 20 71 75 6f 74 61 32 2d 31 2e 32 30 20 7b 0a  t quota2-1.20 {.
1050: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
1060: 66 63 6c 6f 73 65 20 24 3a 3a 68 31 0a 20 20 73  fclose $::h1.  s
1070: 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71  tandard_path [sq
1080: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70  lite3_quota_dump
1090: 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 62 2f  ].} {{*/quota2b/
10a0: 2a 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71 75 6f  * 5000 0} {*/quo
10b0: 74 61 32 61 2f 2a 20 34 30 30 30 20 34 30 30 30  ta2a/* 4000 4000
10c0: 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 79   {PWD/quota2a/xy
10d0: 7a 2e 74 78 74 20 34 30 30 30 20 30 20 30 7d 7d  z.txt 4000 0 0}}
10e0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
10f0: 2d 31 2e 32 31 20 7b 0a 20 20 73 71 6c 69 74 65  -1.21 {.  sqlite
1100: 33 5f 71 75 6f 74 61 5f 72 65 6d 6f 76 65 20 71  3_quota_remove q
1110: 75 6f 74 61 32 61 2f 78 79 7a 2e 74 78 74 0a 20  uota2a/xyz.txt. 
1120: 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b   standard_path [
1130: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75  sqlite3_quota_du
1140: 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32  mp].} {{*/quota2
1150: 62 2f 2a 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71  b/* 5000 0} {*/q
1160: 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 30 7d  uota2a/* 4000 0}
1170: 7d 0a 0a 0a 0a 73 65 74 20 71 75 6f 74 61 20 7b  }....set quota {
1180: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
1190: 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 68  -2.1 {.  set ::h
11a0: 31 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  1 [sqlite3_quota
11b0: 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32 63 2f 78  _fopen quota2c/x
11c0: 79 7a 2e 74 78 74 20 77 2b 62 5d 0a 20 20 73 71  yz.txt w+b].  sq
11d0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 77 72 69  lite3_quota_fwri
11e0: 74 65 20 24 3a 3a 68 31 20 31 20 37 30 30 30 20  te $::h1 1 7000 
11f0: 24 62 69 67 74 65 78 74 0a 7d 20 7b 37 30 30 30  $bigtext.} {7000
1200: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
1210: 2d 32 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 71  -2.2 {.  set ::q
1220: 75 6f 74 61 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  uota.} {}.do_tes
1230: 74 20 71 75 6f 74 61 32 2d 32 2e 33 2e 31 20 7b  t quota2-2.3.1 {
1240: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1250: 5f 72 65 77 69 6e 64 20 24 3a 3a 68 31 0a 20 20  _rewind $::h1.  
1260: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69  sqlite3_quota_fi
1270: 6c 65 5f 61 76 61 69 6c 61 62 6c 65 20 24 3a 3a  le_available $::
1280: 68 31 0a 7d 20 7b 37 30 30 30 7d 0a 64 6f 5f 74  h1.} {7000}.do_t
1290: 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 33 2e 32  est quota2-2.3.2
12a0: 20 7b 0a 20 20 73 65 74 20 3a 3a 78 20 5b 73 71   {.  set ::x [sq
12b0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 72 65 61  lite3_quota_frea
12c0: 64 20 24 3a 3a 68 31 20 31 30 30 31 20 37 5d 0a  d $::h1 1001 7].
12d0: 20 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20    string length 
12e0: 24 3a 3a 78 0a 7d 20 7b 36 30 30 36 7d 0a 64 6f  $::x.} {6006}.do
12f0: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 33  _test quota2-2.3
1300: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .3 {.  sqlite3_q
1310: 75 6f 74 61 5f 66 69 6c 65 5f 61 76 61 69 6c 61  uota_file_availa
1320: 62 6c 65 20 24 3a 3a 68 31 0a 7d 20 7b 30 7d 0a  ble $::h1.} {0}.
1330: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32  do_test quota2-2
1340: 2e 34 20 7b 0a 20 20 73 74 72 69 6e 67 20 6d 61  .4 {.  string ma
1350: 74 63 68 20 24 3a 3a 78 20 5b 73 74 72 69 6e 67  tch $::x [string
1360: 20 72 61 6e 67 65 20 24 3a 3a 62 69 67 74 65 78   range $::bigtex
1370: 74 20 30 20 36 30 30 35 5d 0a 7d 20 7b 31 7d 0a  t 0 6005].} {1}.
1380: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32  do_test quota2-2
1390: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .5 {.  sqlite3_q
13a0: 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31  uota_fseek $::h1
13b0: 20 30 20 53 45 45 4b 5f 45 4e 44 0a 20 20 73 71   0 SEEK_END.  sq
13c0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c  lite3_quota_ftel
13d0: 6c 20 24 3a 3a 68 31 0a 7d 20 7b 37 30 30 30 7d  l $::h1.} {7000}
13e0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
13f0: 32 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.6 {.  sqlite3_
1400: 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68  quota_fseek $::h
1410: 31 20 2d 31 30 30 20 53 45 45 4b 5f 45 4e 44 0a  1 -100 SEEK_END.
1420: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
1430: 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 36  ftell $::h1.} {6
1440: 39 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  900}.do_test quo
1450: 74 61 32 2d 32 2e 36 2e 31 20 7b 0a 20 20 73 71  ta2-2.6.1 {.  sq
1460: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65  lite3_quota_file
1470: 5f 61 76 61 69 6c 61 62 6c 65 20 24 3a 3a 68 31  _available $::h1
1480: 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74 65 73 74  .} {100}.do_test
1490: 20 71 75 6f 74 61 32 2d 32 2e 37 20 7b 0a 20 20   quota2-2.7 {.  
14a0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73  sqlite3_quota_fs
14b0: 65 65 6b 20 24 3a 3a 68 31 20 2d 31 30 30 20 53  eek $::h1 -100 S
14c0: 45 45 4b 5f 43 55 52 0a 20 20 73 71 6c 69 74 65  EEK_CUR.  sqlite
14d0: 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a  3_quota_ftell $:
14e0: 3a 68 31 0a 7d 20 7b 36 38 30 30 7d 0a 64 6f 5f  :h1.} {6800}.do_
14f0: 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 37 2e  test quota2-2.7.
1500: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  1 {.  sqlite3_qu
1510: 6f 74 61 5f 66 69 6c 65 5f 61 76 61 69 6c 61 62  ota_file_availab
1520: 6c 65 20 24 3a 3a 68 31 0a 7d 20 7b 32 30 30 7d  le $::h1.} {200}
1530: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1540: 32 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.8 {.  sqlite3_
1550: 71 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68  quota_fseek $::h
1560: 31 20 35 30 20 53 45 45 4b 5f 43 55 52 0a 20 20  1 50 SEEK_CUR.  
1570: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74  sqlite3_quota_ft
1580: 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 36 38 35  ell $::h1.} {685
1590: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
15a0: 32 2d 32 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69  2-2.8.1 {.  sqli
15b0: 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f 61  te3_quota_file_a
15c0: 76 61 69 6c 61 62 6c 65 20 24 3a 3a 68 31 0a 7d  vailable $::h1.}
15d0: 20 7b 31 35 30 7d 0a 64 6f 5f 74 65 73 74 20 71   {150}.do_test q
15e0: 75 6f 74 61 32 2d 32 2e 39 20 7b 0a 20 20 73 71  uota2-2.9 {.  sq
15f0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65  lite3_quota_fsee
1600: 6b 20 24 3a 3a 68 31 20 35 30 20 53 45 45 4b 5f  k $::h1 50 SEEK_
1610: 53 45 54 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  SET.  sqlite3_qu
1620: 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a  ota_ftell $::h1.
1630: 7d 20 7b 35 30 7d 0a 64 6f 5f 74 65 73 74 20 71  } {50}.do_test q
1640: 75 6f 74 61 32 2d 32 2e 39 2e 31 20 7b 0a 20 20  uota2-2.9.1 {.  
1650: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69  sqlite3_quota_fi
1660: 6c 65 5f 61 76 61 69 6c 61 62 6c 65 20 24 3a 3a  le_available $::
1670: 68 31 0a 7d 20 7b 36 39 35 30 7d 0a 64 6f 5f 74  h1.} {6950}.do_t
1680: 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 31 30 20  est quota2-2.10 
1690: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
16a0: 61 5f 72 65 77 69 6e 64 20 24 3a 3a 68 31 0a 20  a_rewind $::h1. 
16b0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
16c0: 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 30 7d  tell $::h1.} {0}
16d0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
16e0: 32 2e 31 30 2e 31 20 7b 0a 20 20 73 71 6c 69 74  2.10.1 {.  sqlit
16f0: 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f 61 76  e3_quota_file_av
1700: 61 69 6c 61 62 6c 65 20 24 3a 3a 68 31 0a 7d 20  ailable $::h1.} 
1710: 7b 37 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71  {7000}.do_test q
1720: 75 6f 74 61 32 2d 32 2e 31 30 2e 32 20 7b 0a 20  uota2-2.10.2 {. 
1730: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
1740: 65 72 72 6f 72 20 24 3a 3a 68 31 0a 7d 20 7b 30  error $::h1.} {0
1750: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
1760: 2d 32 2e 31 31 20 7b 0a 20 20 73 74 61 6e 64 61  -2.11 {.  standa
1770: 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33  rd_path [sqlite3
1780: 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b  _quota_dump].} {
1790: 7b 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30 30  {*/quota2b/* 500
17a0: 30 20 30 7d 20 7b 2a 2f 71 75 6f 74 61 32 61 2f  0 0} {*/quota2a/
17b0: 2a 20 34 30 30 30 20 30 7d 7d 0a 64 6f 5f 74 65  * 4000 0}}.do_te
17c0: 73 74 20 71 75 6f 74 61 32 2d 32 2e 31 32 20 7b  st quota2-2.12 {
17d0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
17e0: 5f 66 63 6c 6f 73 65 20 24 3a 3a 68 31 0a 20 20  _fclose $::h1.  
17f0: 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73  standard_path [s
1800: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d  qlite3_quota_dum
1810: 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 62  p].} {{*/quota2b
1820: 2f 2a 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71 75  /* 5000 0} {*/qu
1830: 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 30 7d 7d  ota2a/* 4000 0}}
1840: 0a 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  ..do_test quota2
1850: 2d 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.1 {.  sqlite3
1860: 5f 71 75 6f 74 61 5f 73 65 74 20 2a 2f 71 75 6f  _quota_set */quo
1870: 74 61 32 62 2f 2a 20 30 20 71 75 6f 74 61 5f 63  ta2b/* 0 quota_c
1880: 68 65 63 6b 0a 20 20 73 65 74 20 3a 3a 68 31 20  heck.  set ::h1 
1890: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66  [sqlite3_quota_f
18a0: 6f 70 65 6e 20 71 75 6f 74 61 32 61 2f 78 31 2f  open quota2a/x1/
18b0: 61 2e 74 78 74 20 61 5d 0a 20 20 73 71 6c 69 74  a.txt a].  sqlit
18c0: 65 33 5f 71 75 6f 74 61 5f 66 77 72 69 74 65 20  e3_quota_fwrite 
18d0: 24 3a 3a 68 31 20 31 30 20 31 30 20 24 62 69 67  $::h1 10 10 $big
18e0: 74 65 78 74 0a 7d 20 7b 31 30 7d 0a 64 6f 5f 74  text.} {10}.do_t
18f0: 65 73 74 20 71 75 6f 74 61 32 2d 33 2e 32 20 7b  est quota2-3.2 {
1900: 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68  .  standard_path
1910: 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f   [sqlite3_quota_
1920: 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74  dump].} {{*/quot
1930: 61 32 61 2f 2a 20 34 30 30 30 20 31 30 30 20 7b  a2a/* 4000 100 {
1940: 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 61  PWD/quota2a/x1/a
1950: 2e 74 78 74 20 31 30 30 20 31 20 30 7d 7d 7d 0a  .txt 100 1 0}}}.
1960: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33  do_test quota2-3
1970: 2e 33 61 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .3a {.  sqlite3_
1980: 71 75 6f 74 61 5f 66 66 6c 75 73 68 20 24 3a 3a  quota_fflush $::
1990: 68 31 20 30 0a 20 20 73 74 61 6e 64 61 72 64 5f  h1 0.  standard_
19a0: 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75  path [sqlite3_qu
19b0: 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f  ota_dump].} {{*/
19c0: 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 31  quota2a/* 4000 1
19d0: 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f  00 {PWD/quota2a/
19e0: 78 31 2f 61 2e 74 78 74 20 31 30 30 20 31 20 30  x1/a.txt 100 1 0
19f0: 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  }}}.do_test quot
1a00: 61 32 2d 33 2e 33 62 20 7b 0a 20 20 73 71 6c 69  a2-3.3b {.  sqli
1a10: 74 65 33 5f 71 75 6f 74 61 5f 66 66 6c 75 73 68  te3_quota_fflush
1a20: 20 24 3a 3a 68 31 20 31 0a 20 20 73 74 61 6e 64   $::h1 1.  stand
1a30: 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65  ard_path [sqlite
1a40: 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20  3_quota_dump].} 
1a50: 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30  {{*/quota2a/* 40
1a60: 30 30 20 31 30 30 20 7b 50 57 44 2f 71 75 6f 74  00 100 {PWD/quot
1a70: 61 32 61 2f 78 31 2f 61 2e 74 78 74 20 31 30 30  a2a/x1/a.txt 100
1a80: 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20   1 0}}}.do_test 
1a90: 71 75 6f 74 61 32 2d 33 2e 33 63 20 7b 0a 20 20  quota2-3.3c {.  
1aa0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 66  sqlite3_quota_ff
1ab0: 6c 75 73 68 20 24 3a 3a 68 31 0a 20 20 73 74 61  lush $::h1.  sta
1ac0: 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69  ndard_path [sqli
1ad0: 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a  te3_quota_dump].
1ae0: 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20  } {{*/quota2a/* 
1af0: 34 30 30 30 20 31 30 30 20 7b 50 57 44 2f 71 75  4000 100 {PWD/qu
1b00: 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20 31  ota2a/x1/a.txt 1
1b10: 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73  00 1 0}}}.do_tes
1b20: 74 20 71 75 6f 74 61 32 2d 33 2e 34 20 7b 0a 20  t quota2-3.4 {. 
1b30: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
1b40: 63 6c 6f 73 65 20 24 3a 3a 68 31 0a 20 20 73 74  close $::h1.  st
1b50: 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c  andard_path [sql
1b60: 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite3_quota_dump]
1b70: 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a  .} {{*/quota2a/*
1b80: 20 34 30 30 30 20 31 30 30 20 7b 50 57 44 2f 71   4000 100 {PWD/q
1b90: 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20  uota2a/x1/a.txt 
1ba0: 31 30 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65  100 0 0}}}.do_te
1bb0: 73 74 20 71 75 6f 74 61 32 2d 33 2e 35 20 7b 0a  st quota2-3.5 {.
1bc0: 20 20 73 65 74 20 3a 3a 68 32 20 5b 73 71 6c 69    set ::h2 [sqli
1bd0: 74 65 33 5f 71 75 6f 74 61 5f 66 6f 70 65 6e 20  te3_quota_fopen 
1be0: 71 75 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74  quota2a/x2/b.txt
1bf0: 20 61 5d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75   a].  sqlite3_qu
1c00: 6f 74 61 5f 66 77 72 69 74 65 20 24 3a 3a 68 32  ota_fwrite $::h2
1c10: 20 31 30 20 32 30 20 24 62 69 67 74 65 78 74 0a   10 20 $bigtext.
1c20: 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20    standard_path 
1c30: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64  [sqlite3_quota_d
1c40: 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61  ump].} {{*/quota
1c50: 32 61 2f 2a 20 34 30 30 30 20 33 30 30 20 7b 50  2a/* 4000 300 {P
1c60: 57 44 2f 71 75 6f 74 61 32 61 2f 78 32 2f 62 2e  WD/quota2a/x2/b.
1c70: 74 78 74 20 32 30 30 20 31 20 30 7d 20 7b 50 57  txt 200 1 0} {PW
1c80: 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74  D/quota2a/x1/a.t
1c90: 78 74 20 31 30 30 20 30 20 30 7d 7d 7d 0a 64 6f  xt 100 0 0}}}.do
1ca0: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e 36  _test quota2-3.6
1cb0: 20 7b 0a 20 20 73 65 74 20 3a 3a 68 33 20 5b 73   {.  set ::h3 [s
1cc0: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 6f 70  qlite3_quota_fop
1cd0: 65 6e 20 71 75 6f 74 61 32 61 2f 78 31 2f 63 2e  en quota2a/x1/c.
1ce0: 74 78 74 20 61 5d 0a 20 20 73 71 6c 69 74 65 33  txt a].  sqlite3
1cf0: 5f 71 75 6f 74 61 5f 66 77 72 69 74 65 20 24 3a  _quota_fwrite $:
1d00: 3a 68 33 20 31 30 20 35 30 20 24 62 69 67 74 65  :h3 10 50 $bigte
1d10: 78 74 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61  xt.  standard_pa
1d20: 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74  th [sqlite3_quot
1d30: 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75  a_dump].} {{*/qu
1d40: 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 38 30 30  ota2a/* 4000 800
1d50: 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31   {PWD/quota2a/x1
1d60: 2f 63 2e 74 78 74 20 35 30 30 20 31 20 30 7d 20  /c.txt 500 1 0} 
1d70: 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 32 2f  {PWD/quota2a/x2/
1d80: 62 2e 74 78 74 20 32 30 30 20 31 20 30 7d 20 7b  b.txt 200 1 0} {
1d90: 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 61  PWD/quota2a/x1/a
1da0: 2e 74 78 74 20 31 30 30 20 30 20 30 7d 7d 7d 0a  .txt 100 0 0}}}.
1db0: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33  do_test quota2-3
1dc0: 2e 37 20 7b 0a 20 20 66 69 6c 65 20 65 78 69 73  .7 {.  file exis
1dd0: 74 73 20 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e  ts quota2a/x1/a.
1de0: 74 78 74 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  txt.} {1}.do_tes
1df0: 74 20 71 75 6f 74 61 32 2d 33 2e 38 20 7b 0a 20  t quota2-3.8 {. 
1e00: 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75 6f   file exists quo
1e10: 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 0a 7d 20  ta2a/x2/b.txt.} 
1e20: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  {1}.do_test quot
1e30: 61 32 2d 33 2e 39 20 7b 0a 20 20 66 69 6c 65 20  a2-3.9 {.  file 
1e40: 65 78 69 73 74 73 20 71 75 6f 74 61 32 61 2f 78  exists quota2a/x
1e50: 31 2f 63 2e 74 78 74 0a 7d 20 7b 31 7d 0a 64 6f  1/c.txt.} {1}.do
1e60: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e 31  _test quota2-3.1
1e70: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  0 {.  sqlite3_qu
1e80: 6f 74 61 5f 72 65 6d 6f 76 65 20 71 75 6f 74 61  ota_remove quota
1e90: 32 61 2f 78 31 0a 20 20 73 74 61 6e 64 61 72 64  2a/x1.  standard
1ea0: 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71  _path [sqlite3_q
1eb0: 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a  uota_dump].} {{*
1ec0: 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20  /quota2a/* 4000 
1ed0: 37 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32 61  700 {PWD/quota2a
1ee0: 2f 78 31 2f 63 2e 74 78 74 20 35 30 30 20 31 20  /x1/c.txt 500 1 
1ef0: 31 7d 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f  1} {PWD/quota2a/
1f00: 78 32 2f 62 2e 74 78 74 20 32 30 30 20 31 20 30  x2/b.txt 200 1 0
1f10: 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  }}}.do_test quot
1f20: 61 32 2d 33 2e 31 31 20 7b 0a 20 20 73 71 6c 69  a2-3.11 {.  sqli
1f30: 74 65 33 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65  te3_quota_fclose
1f40: 20 24 3a 3a 68 32 0a 20 20 73 71 6c 69 74 65 33   $::h2.  sqlite3
1f50: 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24 3a  _quota_fclose $:
1f60: 3a 68 33 0a 20 20 73 74 61 6e 64 61 72 64 5f 70  :h3.  standard_p
1f70: 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  ath [sqlite3_quo
1f80: 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71  ta_dump].} {{*/q
1f90: 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 32 30  uota2a/* 4000 20
1fa0: 30 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78  0 {PWD/quota2a/x
1fb0: 32 2f 62 2e 74 78 74 20 32 30 30 20 30 20 30 7d  2/b.txt 200 0 0}
1fc0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  }}.do_test quota
1fd0: 32 2d 33 2e 31 32 20 7b 0a 20 20 66 69 6c 65 20  2-3.12 {.  file 
1fe0: 65 78 69 73 74 73 20 71 75 6f 74 61 32 61 2f 78  exists quota2a/x
1ff0: 31 2f 61 2e 74 78 74 0a 7d 20 7b 30 7d 0a 64 6f  1/a.txt.} {0}.do
2000: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e 31  _test quota2-3.1
2010: 33 20 7b 0a 20 20 66 69 6c 65 20 65 78 69 73 74  3 {.  file exist
2020: 73 20 71 75 6f 74 61 32 61 2f 78 32 2f 62 2e 74  s quota2a/x2/b.t
2030: 78 74 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  xt.} {1}.do_test
2040: 20 71 75 6f 74 61 32 2d 33 2e 31 34 20 7b 0a 20   quota2-3.14 {. 
2050: 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75 6f   file exists quo
2060: 74 61 32 61 2f 78 31 2f 63 2e 74 78 74 0a 7d 20  ta2a/x1/c.txt.} 
2070: 7b 30 7d 0a 0a 63 61 74 63 68 20 7b 20 73 71 6c  {0}..catch { sql
2080: 69 74 65 33 5f 71 75 6f 74 61 5f 73 68 75 74 64  ite3_quota_shutd
2090: 6f 77 6e 20 7d 0a 63 61 74 63 68 20 7b 20 75 6e  own }.catch { un
20a0: 73 65 74 20 71 75 6f 74 61 5f 72 65 71 75 65 73  set quota_reques
20b0: 74 5f 6f 6b 20 7d 0a 66 69 6e 69 73 68 5f 74 65  t_ok }.finish_te
20c0: 73 74 0a                                         st.