/ Hex Artifact Content
Login

Artifact 6d2bd57e8a4da28817f46db9da18551211cd325f:


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 69 6c 65 20 64 65 6c 65 74 65   {.  file delete
02a0: 20 2d 66 6f 72 63 65 20 24 64 69 72 0a 7d 0a 66   -force $dir.}.f
02b0: 6f 72 65 61 63 68 20 64 69 72 20 7b 71 75 6f 74  oreach dir {quot
02c0: 61 32 61 20 71 75 6f 74 61 32 61 2f 78 31 20 71  a2a quota2a/x1 q
02d0: 75 6f 74 61 32 61 2f 78 32 20 71 75 6f 74 61 32  uota2a/x2 quota2
02e0: 62 20 71 75 6f 74 61 32 63 7d 20 7b 0a 20 20 66  b quota2c} {.  f
02f0: 69 6c 65 20 6d 6b 64 69 72 20 24 64 69 72 0a 7d  ile mkdir $dir.}
0300: 0a 0a 23 20 54 68 65 20 73 74 61 6e 64 61 72 64  ..# The standard
0310: 5f 70 61 74 68 20 70 72 6f 63 65 64 75 72 65 20  _path procedure 
0320: 63 6f 6e 76 65 72 74 73 20 61 20 70 61 74 68 6e  converts a pathn
0330: 61 6d 65 20 69 6e 74 6f 20 61 20 73 74 61 6e 64  ame into a stand
0340: 61 72 64 20 66 6f 72 6d 61 74 0a 23 20 74 68 61  ard format.# tha
0350: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 63  t is the same ac
0360: 72 6f 73 73 20 70 6c 61 74 66 6f 72 6d 73 2e 0a  ross platforms..
0370: 23 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  #.unset -nocompl
0380: 61 69 6e 20 3a 3a 71 75 6f 74 61 5f 70 77 64 20  ain ::quota_pwd 
0390: 3a 3a 71 75 6f 74 61 5f 6d 61 70 70 69 6e 67 0a  ::quota_mapping.
03a0: 73 65 74 20 3a 3a 71 75 6f 74 61 5f 70 77 64 20  set ::quota_pwd 
03b0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 5c 20  [string map {\\ 
03c0: 2f 7d 20 5b 67 65 74 5f 70 77 64 5d 5d 0a 73 65  /} [get_pwd]].se
03d0: 74 20 3a 3a 71 75 6f 74 61 5f 6d 61 70 70 69 6e  t ::quota_mappin
03e0: 67 20 5b 6c 69 73 74 20 24 3a 3a 71 75 6f 74 61  g [list $::quota
03f0: 5f 70 77 64 20 50 57 44 5d 0a 70 72 6f 63 20 73  _pwd PWD].proc s
0400: 74 61 6e 64 61 72 64 5f 70 61 74 68 20 7b 78 7d  tandard_path {x}
0410: 20 7b 0a 20 20 73 65 74 20 78 20 5b 73 74 72 69   {.  set x [stri
0420: 6e 67 20 6d 61 70 20 7b 5c 5c 20 2f 7d 20 24 78  ng map {\\ /} $x
0430: 5d 0a 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69  ].  return [stri
0440: 6e 67 20 6d 61 70 20 24 3a 3a 71 75 6f 74 61 5f  ng map $::quota_
0450: 6d 61 70 70 69 6e 67 20 24 78 5d 0a 7d 0a 0a 23  mapping $x].}..#
0460: 20 54 68 65 20 71 75 6f 74 61 5f 63 68 65 63 6b   The quota_check
0470: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 61 20   procedure is a 
0480: 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 74 68  callback from th
0490: 65 20 71 75 6f 74 61 20 68 61 6e 64 6c 65 72 2e  e quota handler.
04a0: 0a 23 20 49 74 20 68 61 73 20 74 68 72 65 65 20  .# It has three 
04b0: 61 72 67 75 6d 65 6e 74 73 20 77 68 69 63 68 20  arguments which 
04c0: 61 72 65 20 28 31 29 20 74 68 65 20 66 75 6c 6c  are (1) the full
04d0: 20 70 61 74 68 6e 61 6d 65 20 6f 66 20 74 68 65   pathname of the
04e0: 20 66 69 6c 65 0a 23 20 74 68 61 74 20 68 61 73   file.# that has
04f0: 20 67 6f 6e 65 20 6f 76 65 72 20 71 75 6f 74 61   gone over quota
0500: 2c 20 28 32 29 20 74 68 65 20 71 75 6f 74 61 20  , (2) the quota 
0510: 6c 69 6d 69 74 2c 20 28 33 29 20 74 68 65 20 72  limit, (3) the r
0520: 65 71 75 65 73 74 65 64 0a 23 20 6e 65 77 20 71  equested.# new q
0530: 75 6f 74 61 20 73 69 7a 65 20 74 6f 20 63 6f 76  uota size to cov
0540: 65 72 20 74 68 65 20 6c 61 73 74 20 77 72 69 74  er the last writ
0550: 65 2e 20 20 54 68 65 73 65 20 74 68 72 65 65 20  e.  These three 
0560: 76 61 6c 75 65 73 20 61 72 65 0a 23 20 61 70 70  values are.# app
0570: 65 6e 64 65 64 20 74 6f 20 74 68 65 20 67 6c 6f  ended to the glo
0580: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 24 3a 3a  bal variable $::
0590: 71 75 6f 74 61 2e 20 20 54 68 65 20 66 69 6c 65  quota.  The file
05a0: 6e 61 6d 65 20 69 73 20 70 72 6f 63 65 73 73 65  name is processe
05b0: 64 0a 23 20 74 6f 20 63 6f 6e 76 65 72 74 20 65  d.# to convert e
05c0: 76 65 72 79 20 5c 20 63 68 61 72 61 63 74 65 72  very \ character
05d0: 20 69 6e 74 6f 20 2f 20 61 6e 64 20 74 6f 20 63   into / and to c
05e0: 68 61 6e 67 65 20 74 68 65 20 6e 61 6d 65 20 6f  hange the name o
05f0: 66 20 74 68 65 0a 23 20 77 6f 72 6b 69 6e 67 20  f the.# working 
0600: 64 69 72 65 63 74 6f 72 79 20 74 6f 20 50 57 44  directory to PWD
0610: 2e 20 20 0a 23 0a 23 20 54 68 65 20 71 75 6f 74  .  .#.# The quot
0620: 61 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 74  a is increased t
0630: 6f 20 74 68 65 20 72 65 71 75 65 73 74 20 69 66  o the request if
0640: 20 74 68 65 20 3a 3a 71 75 6f 74 61 5f 72 65 71   the ::quota_req
0650: 75 65 73 74 5f 6f 6b 20 0a 23 20 67 6c 6f 62 61  uest_ok .# globa
0660: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 74 72  l variable is tr
0670: 75 65 2e 0a 23 0a 73 65 74 20 3a 3a 71 75 6f 74  ue..#.set ::quot
0680: 61 20 7b 7d 0a 73 65 74 20 3a 3a 71 75 6f 74 61  a {}.set ::quota
0690: 5f 72 65 71 75 65 73 74 5f 6f 6b 20 30 0a 0a 70  _request_ok 0..p
06a0: 72 6f 63 20 71 75 6f 74 61 5f 63 68 65 63 6b 20  roc quota_check 
06b0: 7b 66 69 6c 65 6e 61 6d 65 20 6c 69 6d 69 74 76  {filename limitv
06c0: 61 72 20 73 69 7a 65 7d 20 7b 0a 20 20 75 70 76  ar size} {.  upv
06d0: 61 72 20 24 6c 69 6d 69 74 76 61 72 20 6c 69 6d  ar $limitvar lim
06e0: 69 74 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 71  it.  lappend ::q
06f0: 75 6f 74 61 20 5b 73 74 61 6e 64 61 72 64 5f 70  uota [standard_p
0700: 61 74 68 20 24 66 69 6c 65 6e 61 6d 65 5d 20 5b  ath $filename] [
0710: 73 65 74 20 6c 69 6d 69 74 5d 20 24 73 69 7a 65  set limit] $size
0720: 0a 20 20 69 66 20 7b 24 3a 3a 71 75 6f 74 61 5f  .  if {$::quota_
0730: 72 65 71 75 65 73 74 5f 6f 6b 7d 20 7b 73 65 74  request_ok} {set
0740: 20 6c 69 6d 69 74 20 24 73 69 7a 65 7d 0a 7d 0a   limit $size}.}.
0750: 0a 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73  .sqlite3_quota_s
0760: 65 74 20 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34  et */quota2a/* 4
0770: 30 30 30 20 71 75 6f 74 61 5f 63 68 65 63 6b 0a  000 quota_check.
0780: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
0790: 74 20 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30  t */quota2b/* 50
07a0: 30 30 20 71 75 6f 74 61 5f 63 68 65 63 6b 0a 0a  00 quota_check..
07b0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
07c0: 6e 20 62 69 67 74 65 78 74 0a 66 6f 72 20 7b 73  n bigtext.for {s
07d0: 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30 30  et i 1} {$i<=100
07e0: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
07f0: 69 66 20 7b 24 69 25 31 30 3d 3d 30 7d 20 7b 0a  if {$i%10==0} {.
0800: 20 20 20 20 61 70 70 65 6e 64 20 62 69 67 74 65      append bigte
0810: 78 74 20 5b 66 6f 72 6d 61 74 20 22 25 30 36 64  xt [format "%06d
0820: 5c 6e 22 20 24 69 5d 0a 20 20 7d 20 65 6c 73 65  \n" $i].  } else
0830: 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 62 69   {.    append bi
0840: 67 74 65 78 74 20 5b 66 6f 72 6d 61 74 20 22 25  gtext [format "%
0850: 30 36 64 20 22 20 24 69 5d 0a 20 20 7d 0a 7d 0a  06d " $i].  }.}.
0860: 0a 63 61 74 63 68 20 7b 20 75 6e 73 65 74 20 68  .catch { unset h
0870: 31 20 7d 0a 63 61 74 63 68 20 7b 20 75 6e 73 65  1 }.catch { unse
0880: 74 20 78 20 7d 0a 64 6f 5f 74 65 73 74 20 71 75  t x }.do_test qu
0890: 6f 74 61 32 2d 31 2e 31 20 7b 0a 20 20 73 65 74  ota2-1.1 {.  set
08a0: 20 3a 3a 68 31 20 5b 73 71 6c 69 74 65 33 5f 71   ::h1 [sqlite3_q
08b0: 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74 61  uota_fopen quota
08c0: 32 61 2f 78 79 7a 2e 74 78 74 20 77 2b 62 5d 0a  2a/xyz.txt w+b].
08d0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
08e0: 66 77 72 69 74 65 20 24 3a 3a 68 31 20 31 20 37  fwrite $::h1 1 7
08f0: 30 30 30 20 24 62 69 67 74 65 78 74 0a 7d 20 7b  000 $bigtext.} {
0900: 34 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75  4000}.do_test qu
0910: 6f 74 61 32 2d 31 2e 32 20 7b 0a 20 20 73 65 74  ota2-1.2 {.  set
0920: 20 3a 3a 71 75 6f 74 61 0a 7d 20 7b 50 57 44 2f   ::quota.} {PWD/
0930: 71 75 6f 74 61 32 61 2f 78 79 7a 2e 74 78 74 20  quota2a/xyz.txt 
0940: 34 30 30 30 20 37 30 30 30 7d 0a 64 6f 5f 74 65  4000 7000}.do_te
0950: 73 74 20 71 75 6f 74 61 32 2d 31 2e 32 2e 31 20  st quota2-1.2.1 
0960: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
0970: 61 5f 66 69 6c 65 5f 73 69 7a 65 20 24 3a 3a 68  a_file_size $::h
0980: 31 0a 7d 20 7b 34 30 30 30 7d 0a 64 6f 5f 74 65  1.} {4000}.do_te
0990: 73 74 20 71 75 6f 74 61 32 2d 31 2e 32 2e 32 20  st quota2-1.2.2 
09a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  {.  sqlite3_quot
09b0: 61 5f 66 66 6c 75 73 68 20 24 3a 3a 68 31 20 31  a_fflush $::h1 1
09c0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
09d0: 5f 66 69 6c 65 5f 74 72 75 65 73 69 7a 65 20 24  _file_truesize $
09e0: 3a 3a 68 31 0a 7d 20 7b 34 30 30 30 7d 0a 64 6f  ::h1.} {4000}.do
09f0: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 33  _test quota2-1.3
0a00: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
0a10: 74 61 5f 72 65 77 69 6e 64 20 24 3a 3a 68 31 0a  ta_rewind $::h1.
0a20: 20 20 73 65 74 20 3a 3a 78 20 5b 73 71 6c 69 74    set ::x [sqlit
0a30: 65 33 5f 71 75 6f 74 61 5f 66 72 65 61 64 20 24  e3_quota_fread $
0a40: 3a 3a 68 31 20 31 30 30 31 20 37 5d 0a 20 20 73  ::h1 1001 7].  s
0a50: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $::
0a60: 78 0a 7d 20 7b 33 30 30 33 7d 0a 64 6f 5f 74 65  x.} {3003}.do_te
0a70: 73 74 20 71 75 6f 74 61 32 2d 31 2e 34 20 7b 0a  st quota2-1.4 {.
0a80: 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24    string match $
0a90: 3a 3a 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  ::x [string rang
0aa0: 65 20 24 3a 3a 62 69 67 74 65 78 74 20 30 20 33  e $::bigtext 0 3
0ab0: 30 30 32 5d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  002].} {1}.do_te
0ac0: 73 74 20 71 75 6f 74 61 32 2d 31 2e 35 20 7b 0a  st quota2-1.5 {.
0ad0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0ae0: 66 73 65 65 6b 20 24 3a 3a 68 31 20 30 20 53 45  fseek $::h1 0 SE
0af0: 45 4b 5f 45 4e 44 0a 20 20 73 71 6c 69 74 65 33  EK_END.  sqlite3
0b00: 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a  _quota_ftell $::
0b10: 68 31 0a 7d 20 7b 34 30 30 30 7d 0a 64 6f 5f 74  h1.} {4000}.do_t
0b20: 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 36 20 7b  est quota2-1.6 {
0b30: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
0b40: 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 2d 31 30  _fseek $::h1 -10
0b50: 30 20 53 45 45 4b 5f 45 4e 44 0a 20 20 73 71 6c  0 SEEK_END.  sql
0b60: 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c  ite3_quota_ftell
0b70: 20 24 3a 3a 68 31 0a 7d 20 7b 33 39 30 30 7d 0a   $::h1.} {3900}.
0b80: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31  do_test quota2-1
0b90: 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .7 {.  sqlite3_q
0ba0: 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31  uota_fseek $::h1
0bb0: 20 2d 31 30 30 20 53 45 45 4b 5f 43 55 52 0a 20   -100 SEEK_CUR. 
0bc0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
0bd0: 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 33 38  tell $::h1.} {38
0be0: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  00}.do_test quot
0bf0: 61 32 2d 31 2e 38 20 7b 0a 20 20 73 71 6c 69 74  a2-1.8 {.  sqlit
0c00: 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b 20 24  e3_quota_fseek $
0c10: 3a 3a 68 31 20 35 30 20 53 45 45 4b 5f 43 55 52  ::h1 50 SEEK_CUR
0c20: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
0c30: 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b  _ftell $::h1.} {
0c40: 33 38 35 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75  3850}.do_test qu
0c50: 6f 74 61 32 2d 31 2e 39 20 7b 0a 20 20 73 71 6c  ota2-1.9 {.  sql
0c60: 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65 6b  ite3_quota_fseek
0c70: 20 24 3a 3a 68 31 20 35 30 20 53 45 45 4b 5f 53   $::h1 50 SEEK_S
0c80: 45 54 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  ET.  sqlite3_quo
0c90: 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d  ta_ftell $::h1.}
0ca0: 20 7b 35 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75   {50}.do_test qu
0cb0: 6f 74 61 32 2d 31 2e 31 30 20 7b 0a 20 20 73 71  ota2-1.10 {.  sq
0cc0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72 65 77 69  lite3_quota_rewi
0cd0: 6e 64 20 24 3a 3a 68 31 0a 20 20 73 71 6c 69 74  nd $::h1.  sqlit
0ce0: 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24  e3_quota_ftell $
0cf0: 3a 3a 68 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  ::h1.} {0}.do_te
0d00: 73 74 20 71 75 6f 74 61 32 2d 31 2e 31 31 20 7b  st quota2-1.11 {
0d10: 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68  .  standard_path
0d20: 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f   [sqlite3_quota_
0d30: 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74  dump].} {{*/quot
0d40: 61 32 62 2f 2a 20 35 30 30 30 20 30 7d 20 7b 2a  a2b/* 5000 0} {*
0d50: 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20  /quota2a/* 4000 
0d60: 34 30 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32  4000 {PWD/quota2
0d70: 61 2f 78 79 7a 2e 74 78 74 20 34 30 30 30 20 31  a/xyz.txt 4000 1
0d80: 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75   0}}}.do_test qu
0d90: 6f 74 61 32 2d 31 2e 31 32 20 7b 0a 20 20 73 71  ota2-1.12 {.  sq
0da0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 72 75  lite3_quota_ftru
0db0: 6e 63 61 74 65 20 24 3a 3a 68 31 20 33 35 30 30  ncate $::h1 3500
0dc0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
0dd0: 5f 66 69 6c 65 5f 73 69 7a 65 20 24 3a 3a 68 31  _file_size $::h1
0de0: 0a 7d 20 7b 33 35 30 30 7d 0a 64 6f 5f 74 65 73  .} {3500}.do_tes
0df0: 74 20 71 75 6f 74 61 32 2d 31 2e 31 33 20 7b 0a  t quota2-1.13 {.
0e00: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0e10: 66 69 6c 65 5f 74 72 75 65 73 69 7a 65 20 24 3a  file_truesize $:
0e20: 3a 68 31 0a 7d 20 7b 33 35 30 30 7d 0a 64 6f 5f  :h1.} {3500}.do_
0e30: 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e 31 34  test quota2-1.14
0e40: 20 7b 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61   {.  standard_pa
0e50: 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74  th [sqlite3_quot
0e60: 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75  a_dump].} {{*/qu
0e70: 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 30 7d 20  ota2b/* 5000 0} 
0e80: 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30  {*/quota2a/* 400
0e90: 30 20 33 35 30 30 20 7b 50 57 44 2f 71 75 6f 74  0 3500 {PWD/quot
0ea0: 61 32 61 2f 78 79 7a 2e 74 78 74 20 33 35 30 30  a2a/xyz.txt 3500
0eb0: 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20   1 0}}}.do_test 
0ec0: 71 75 6f 74 61 32 2d 31 2e 31 35 20 7b 0a 20 20  quota2-1.15 {.  
0ed0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73  sqlite3_quota_fs
0ee0: 65 65 6b 20 24 3a 3a 68 31 20 30 20 53 45 45 4b  eek $::h1 0 SEEK
0ef0: 5f 45 4e 44 0a 20 20 73 71 6c 69 74 65 33 5f 71  _END.  sqlite3_q
0f00: 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31  uota_ftell $::h1
0f10: 0a 7d 20 7b 33 35 30 30 7d 0a 64 6f 5f 74 65 73  .} {3500}.do_tes
0f20: 74 20 71 75 6f 74 61 32 2d 31 2e 31 36 20 7b 0a  t quota2-1.16 {.
0f30: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
0f40: 66 77 72 69 74 65 20 24 3a 3a 68 31 20 31 20 37  fwrite $::h1 1 7
0f50: 30 30 30 20 24 62 69 67 74 65 78 74 0a 7d 20 7b  000 $bigtext.} {
0f60: 35 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  500}.do_test quo
0f70: 74 61 32 2d 31 2e 31 37 20 7b 0a 20 20 73 71 6c  ta2-1.17 {.  sql
0f80: 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c  ite3_quota_ftell
0f90: 20 24 3a 3a 68 31 0a 7d 20 7b 34 30 30 30 7d 0a   $::h1.} {4000}.
0fa0: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31  do_test quota2-1
0fb0: 2e 31 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .18 {.  sqlite3_
0fc0: 71 75 6f 74 61 5f 66 69 6c 65 5f 73 69 7a 65 20  quota_file_size 
0fd0: 24 3a 3a 68 31 0a 7d 20 7b 34 30 30 30 7d 0a 64  $::h1.} {4000}.d
0fe0: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 31 2e  o_test quota2-1.
0ff0: 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  19 {.  sqlite3_q
1000: 75 6f 74 61 5f 66 66 6c 75 73 68 20 24 3a 3a 68  uota_fflush $::h
1010: 31 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 71 75  1 1.  sqlite3_qu
1020: 6f 74 61 5f 66 69 6c 65 5f 74 72 75 65 73 69 7a  ota_file_truesiz
1030: 65 20 24 3a 3a 68 31 0a 7d 20 7b 34 30 30 30 7d  e $::h1.} {4000}
1040: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1050: 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.20 {.  sqlite3
1060: 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24 3a  _quota_fclose $:
1070: 3a 68 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70  :h1.  standard_p
1080: 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  ath [sqlite3_quo
1090: 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71  ta_dump].} {{*/q
10a0: 75 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 30 7d  uota2b/* 5000 0}
10b0: 20 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30   {*/quota2a/* 40
10c0: 30 30 20 34 30 30 30 20 7b 50 57 44 2f 71 75 6f  00 4000 {PWD/quo
10d0: 74 61 32 61 2f 78 79 7a 2e 74 78 74 20 34 30 30  ta2a/xyz.txt 400
10e0: 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74  0 0 0}}}.do_test
10f0: 20 71 75 6f 74 61 32 2d 31 2e 32 31 20 7b 0a 20   quota2-1.21 {. 
1100: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 72   sqlite3_quota_r
1110: 65 6d 6f 76 65 20 71 75 6f 74 61 32 61 2f 78 79  emove quota2a/xy
1120: 7a 2e 74 78 74 0a 20 20 73 74 61 6e 64 61 72 64  z.txt.  standard
1130: 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71  _path [sqlite3_q
1140: 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a  uota_dump].} {{*
1150: 2f 71 75 6f 74 61 32 62 2f 2a 20 35 30 30 30 20  /quota2b/* 5000 
1160: 30 7d 20 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20  0} {*/quota2a/* 
1170: 34 30 30 30 20 30 7d 7d 0a 0a 0a 0a 73 65 74 20  4000 0}}....set 
1180: 71 75 6f 74 61 20 7b 7d 0a 64 6f 5f 74 65 73 74  quota {}.do_test
1190: 20 71 75 6f 74 61 32 2d 32 2e 31 20 7b 0a 20 20   quota2-2.1 {.  
11a0: 73 65 74 20 3a 3a 68 31 20 5b 73 71 6c 69 74 65  set ::h1 [sqlite
11b0: 33 5f 71 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75  3_quota_fopen qu
11c0: 6f 74 61 32 63 2f 78 79 7a 2e 74 78 74 20 77 2b  ota2c/xyz.txt w+
11d0: 62 5d 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  b].  sqlite3_quo
11e0: 74 61 5f 66 77 72 69 74 65 20 24 3a 3a 68 31 20  ta_fwrite $::h1 
11f0: 31 20 37 30 30 30 20 24 62 69 67 74 65 78 74 0a  1 7000 $bigtext.
1200: 7d 20 7b 37 30 30 30 7d 0a 64 6f 5f 74 65 73 74  } {7000}.do_test
1210: 20 71 75 6f 74 61 32 2d 32 2e 32 20 7b 0a 20 20   quota2-2.2 {.  
1220: 73 65 74 20 3a 3a 71 75 6f 74 61 0a 7d 20 7b 7d  set ::quota.} {}
1230: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1240: 32 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  2.3.1 {.  sqlite
1250: 33 5f 71 75 6f 74 61 5f 72 65 77 69 6e 64 20 24  3_quota_rewind $
1260: 3a 3a 68 31 0a 20 20 73 71 6c 69 74 65 33 5f 71  ::h1.  sqlite3_q
1270: 75 6f 74 61 5f 66 69 6c 65 5f 61 76 61 69 6c 61  uota_file_availa
1280: 62 6c 65 20 24 3a 3a 68 31 0a 7d 20 7b 37 30 30  ble $::h1.} {700
1290: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
12a0: 32 2d 32 2e 33 2e 32 20 7b 0a 20 20 73 65 74 20  2-2.3.2 {.  set 
12b0: 3a 3a 78 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f  ::x [sqlite3_quo
12c0: 74 61 5f 66 72 65 61 64 20 24 3a 3a 68 31 20 31  ta_fread $::h1 1
12d0: 30 30 31 20 37 5d 0a 20 20 73 74 72 69 6e 67 20  001 7].  string 
12e0: 6c 65 6e 67 74 68 20 24 3a 3a 78 0a 7d 20 7b 36  length $::x.} {6
12f0: 30 30 36 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  006}.do_test quo
1300: 74 61 32 2d 32 2e 33 2e 33 20 7b 0a 20 20 73 71  ta2-2.3.3 {.  sq
1310: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65  lite3_quota_file
1320: 5f 61 76 61 69 6c 61 62 6c 65 20 24 3a 3a 68 31  _available $::h1
1330: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 71  .} {0}.do_test q
1340: 75 6f 74 61 32 2d 32 2e 34 20 7b 0a 20 20 73 74  uota2-2.4 {.  st
1350: 72 69 6e 67 20 6d 61 74 63 68 20 24 3a 3a 78 20  ring match $::x 
1360: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 3a  [string range $:
1370: 3a 62 69 67 74 65 78 74 20 30 20 36 30 30 35 5d  :bigtext 0 6005]
1380: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71  .} {1}.do_test q
1390: 75 6f 74 61 32 2d 32 2e 35 20 7b 0a 20 20 73 71  uota2-2.5 {.  sq
13a0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65 65  lite3_quota_fsee
13b0: 6b 20 24 3a 3a 68 31 20 30 20 53 45 45 4b 5f 45  k $::h1 0 SEEK_E
13c0: 4e 44 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f  ND.  sqlite3_quo
13d0: 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d  ta_ftell $::h1.}
13e0: 20 7b 37 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20   {7000}.do_test 
13f0: 71 75 6f 74 61 32 2d 32 2e 36 20 7b 0a 20 20 73  quota2-2.6 {.  s
1400: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65  qlite3_quota_fse
1410: 65 6b 20 24 3a 3a 68 31 20 2d 31 30 30 20 53 45  ek $::h1 -100 SE
1420: 45 4b 5f 45 4e 44 0a 20 20 73 71 6c 69 74 65 33  EK_END.  sqlite3
1430: 5f 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a  _quota_ftell $::
1440: 68 31 0a 7d 20 7b 36 39 30 30 7d 0a 64 6f 5f 74  h1.} {6900}.do_t
1450: 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 36 2e 31  est quota2-2.6.1
1460: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
1470: 74 61 5f 66 69 6c 65 5f 61 76 61 69 6c 61 62 6c  ta_file_availabl
1480: 65 20 24 3a 3a 68 31 0a 7d 20 7b 31 30 30 7d 0a  e $::h1.} {100}.
1490: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32  do_test quota2-2
14a0: 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .7 {.  sqlite3_q
14b0: 75 6f 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31  uota_fseek $::h1
14c0: 20 2d 31 30 30 20 53 45 45 4b 5f 43 55 52 0a 20   -100 SEEK_CUR. 
14d0: 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66   sqlite3_quota_f
14e0: 74 65 6c 6c 20 24 3a 3a 68 31 0a 7d 20 7b 36 38  tell $::h1.} {68
14f0: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74  00}.do_test quot
1500: 61 32 2d 32 2e 37 2e 31 20 7b 0a 20 20 73 71 6c  a2-2.7.1 {.  sql
1510: 69 74 65 33 5f 71 75 6f 74 61 5f 66 69 6c 65 5f  ite3_quota_file_
1520: 61 76 61 69 6c 61 62 6c 65 20 24 3a 3a 68 31 0a  available $::h1.
1530: 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73 74 20  } {200}.do_test 
1540: 71 75 6f 74 61 32 2d 32 2e 38 20 7b 0a 20 20 73  quota2-2.8 {.  s
1550: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 73 65  qlite3_quota_fse
1560: 65 6b 20 24 3a 3a 68 31 20 35 30 20 53 45 45 4b  ek $::h1 50 SEEK
1570: 5f 43 55 52 0a 20 20 73 71 6c 69 74 65 33 5f 71  _CUR.  sqlite3_q
1580: 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68 31  uota_ftell $::h1
1590: 0a 7d 20 7b 36 38 35 30 7d 0a 64 6f 5f 74 65 73  .} {6850}.do_tes
15a0: 74 20 71 75 6f 74 61 32 2d 32 2e 38 2e 31 20 7b  t quota2-2.8.1 {
15b0: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
15c0: 5f 66 69 6c 65 5f 61 76 61 69 6c 61 62 6c 65 20  _file_available 
15d0: 24 3a 3a 68 31 0a 7d 20 7b 31 35 30 7d 0a 64 6f  $::h1.} {150}.do
15e0: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 39  _test quota2-2.9
15f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f   {.  sqlite3_quo
1600: 74 61 5f 66 73 65 65 6b 20 24 3a 3a 68 31 20 35  ta_fseek $::h1 5
1610: 30 20 53 45 45 4b 5f 53 45 54 0a 20 20 73 71 6c  0 SEEK_SET.  sql
1620: 69 74 65 33 5f 71 75 6f 74 61 5f 66 74 65 6c 6c  ite3_quota_ftell
1630: 20 24 3a 3a 68 31 0a 7d 20 7b 35 30 7d 0a 64 6f   $::h1.} {50}.do
1640: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 39  _test quota2-2.9
1650: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  .1 {.  sqlite3_q
1660: 75 6f 74 61 5f 66 69 6c 65 5f 61 76 61 69 6c 61  uota_file_availa
1670: 62 6c 65 20 24 3a 3a 68 31 0a 7d 20 7b 36 39 35  ble $::h1.} {695
1680: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
1690: 32 2d 32 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74  2-2.10 {.  sqlit
16a0: 65 33 5f 71 75 6f 74 61 5f 72 65 77 69 6e 64 20  e3_quota_rewind 
16b0: 24 3a 3a 68 31 0a 20 20 73 71 6c 69 74 65 33 5f  $::h1.  sqlite3_
16c0: 71 75 6f 74 61 5f 66 74 65 6c 6c 20 24 3a 3a 68  quota_ftell $::h
16d0: 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  1.} {0}.do_test 
16e0: 71 75 6f 74 61 32 2d 32 2e 31 30 2e 31 20 7b 0a  quota2-2.10.1 {.
16f0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
1700: 66 69 6c 65 5f 61 76 61 69 6c 61 62 6c 65 20 24  file_available $
1710: 3a 3a 68 31 0a 7d 20 7b 37 30 30 30 7d 0a 64 6f  ::h1.} {7000}.do
1720: 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 32 2e 31  _test quota2-2.1
1730: 30 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  0.2 {.  sqlite3_
1740: 71 75 6f 74 61 5f 66 65 72 72 6f 72 20 24 3a 3a  quota_ferror $::
1750: 68 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  h1.} {0}.do_test
1760: 20 71 75 6f 74 61 32 2d 32 2e 31 31 20 7b 0a 20   quota2-2.11 {. 
1770: 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b   standard_path [
1780: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75  sqlite3_quota_du
1790: 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32  mp].} {{*/quota2
17a0: 62 2f 2a 20 35 30 30 30 20 30 7d 20 7b 2a 2f 71  b/* 5000 0} {*/q
17b0: 75 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 30 7d  uota2a/* 4000 0}
17c0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
17d0: 2d 32 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65  -2.12 {.  sqlite
17e0: 33 5f 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24  3_quota_fclose $
17f0: 3a 3a 68 31 0a 20 20 73 74 61 6e 64 61 72 64 5f  ::h1.  standard_
1800: 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75  path [sqlite3_qu
1810: 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f  ota_dump].} {{*/
1820: 71 75 6f 74 61 32 62 2f 2a 20 35 30 30 30 20 30  quota2b/* 5000 0
1830: 7d 20 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34  } {*/quota2a/* 4
1840: 30 30 30 20 30 7d 7d 0a 0a 64 6f 5f 74 65 73 74  000 0}}..do_test
1850: 20 71 75 6f 74 61 32 2d 33 2e 31 20 7b 0a 20 20   quota2-3.1 {.  
1860: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 73 65  sqlite3_quota_se
1870: 74 20 2a 2f 71 75 6f 74 61 32 62 2f 2a 20 30 20  t */quota2b/* 0 
1880: 71 75 6f 74 61 5f 63 68 65 63 6b 0a 20 20 73 65  quota_check.  se
1890: 74 20 3a 3a 68 31 20 5b 73 71 6c 69 74 65 33 5f  t ::h1 [sqlite3_
18a0: 71 75 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74  quota_fopen quot
18b0: 61 32 61 2f 78 31 2f 61 2e 74 78 74 20 61 5d 0a  a2a/x1/a.txt a].
18c0: 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f    sqlite3_quota_
18d0: 66 77 72 69 74 65 20 24 3a 3a 68 31 20 31 30 20  fwrite $::h1 10 
18e0: 31 30 20 24 62 69 67 74 65 78 74 0a 7d 20 7b 31  10 $bigtext.} {1
18f0: 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61  0}.do_test quota
1900: 32 2d 33 2e 32 20 7b 0a 20 20 73 74 61 6e 64 61  2-3.2 {.  standa
1910: 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33  rd_path [sqlite3
1920: 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b  _quota_dump].} {
1930: 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30  {*/quota2a/* 400
1940: 30 20 31 30 30 20 7b 50 57 44 2f 71 75 6f 74 61  0 100 {PWD/quota
1950: 32 61 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20  2a/x1/a.txt 100 
1960: 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  1 0}}}.do_test q
1970: 75 6f 74 61 32 2d 33 2e 33 61 20 7b 0a 20 20 73  uota2-3.3a {.  s
1980: 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 66 6c  qlite3_quota_ffl
1990: 75 73 68 20 24 3a 3a 68 31 20 30 0a 20 20 73 74  ush $::h1 0.  st
19a0: 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c  andard_path [sql
19b0: 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d  ite3_quota_dump]
19c0: 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a  .} {{*/quota2a/*
19d0: 20 34 30 30 30 20 31 30 30 20 7b 50 57 44 2f 71   4000 100 {PWD/q
19e0: 75 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 20  uota2a/x1/a.txt 
19f0: 31 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65  100 1 0}}}.do_te
1a00: 73 74 20 71 75 6f 74 61 32 2d 33 2e 33 62 20 7b  st quota2-3.3b {
1a10: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1a20: 5f 66 66 6c 75 73 68 20 24 3a 3a 68 31 20 31 0a  _fflush $::h1 1.
1a30: 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74 68 20    standard_path 
1a40: 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64  [sqlite3_quota_d
1a50: 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61  ump].} {{*/quota
1a60: 32 61 2f 2a 20 34 30 30 30 20 31 30 30 20 7b 50  2a/* 4000 100 {P
1a70: 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f 61 2e  WD/quota2a/x1/a.
1a80: 74 78 74 20 31 30 30 20 31 20 30 7d 7d 7d 0a 64  txt 100 1 0}}}.d
1a90: 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33 2e  o_test quota2-3.
1aa0: 33 63 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 71  3c {.  sqlite3_q
1ab0: 75 6f 74 61 5f 66 66 6c 75 73 68 20 24 3a 3a 68  uota_fflush $::h
1ac0: 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61 74  1.  standard_pat
1ad0: 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  h [sqlite3_quota
1ae0: 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f  _dump].} {{*/quo
1af0: 74 61 32 61 2f 2a 20 34 30 30 30 20 31 30 30 20  ta2a/* 4000 100 
1b00: 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31 2f  {PWD/quota2a/x1/
1b10: 61 2e 74 78 74 20 31 30 30 20 31 20 30 7d 7d 7d  a.txt 100 1 0}}}
1b20: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1b30: 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.4 {.  sqlite3_
1b40: 71 75 6f 74 61 5f 66 63 6c 6f 73 65 20 24 3a 3a  quota_fclose $::
1b50: 68 31 0a 20 20 73 74 61 6e 64 61 72 64 5f 70 61  h1.  standard_pa
1b60: 74 68 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74  th [sqlite3_quot
1b70: 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b 2a 2f 71 75  a_dump].} {{*/qu
1b80: 6f 74 61 32 61 2f 2a 20 34 30 30 30 20 31 30 30  ota2a/* 4000 100
1b90: 20 7b 50 57 44 2f 71 75 6f 74 61 32 61 2f 78 31   {PWD/quota2a/x1
1ba0: 2f 61 2e 74 78 74 20 31 30 30 20 30 20 30 7d 7d  /a.txt 100 0 0}}
1bb0: 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32  }.do_test quota2
1bc0: 2d 33 2e 35 20 7b 0a 20 20 73 65 74 20 3a 3a 68  -3.5 {.  set ::h
1bd0: 32 20 5b 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  2 [sqlite3_quota
1be0: 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32 61 2f 78  _fopen quota2a/x
1bf0: 32 2f 62 2e 74 78 74 20 61 5d 0a 20 20 73 71 6c  2/b.txt a].  sql
1c00: 69 74 65 33 5f 71 75 6f 74 61 5f 66 77 72 69 74  ite3_quota_fwrit
1c10: 65 20 24 3a 3a 68 32 20 31 30 20 32 30 20 24 62  e $::h2 10 20 $b
1c20: 69 67 74 65 78 74 0a 20 20 73 74 61 6e 64 61 72  igtext.  standar
1c30: 64 5f 70 61 74 68 20 5b 73 71 6c 69 74 65 33 5f  d_path [sqlite3_
1c40: 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d 20 7b 7b  quota_dump].} {{
1c50: 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34 30 30 30  */quota2a/* 4000
1c60: 20 33 30 30 20 7b 50 57 44 2f 71 75 6f 74 61 32   300 {PWD/quota2
1c70: 61 2f 78 32 2f 62 2e 74 78 74 20 32 30 30 20 31  a/x2/b.txt 200 1
1c80: 20 30 7d 20 7b 50 57 44 2f 71 75 6f 74 61 32 61   0} {PWD/quota2a
1c90: 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20 30 20  /x1/a.txt 100 0 
1ca0: 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f  0}}}.do_test quo
1cb0: 74 61 32 2d 33 2e 36 20 7b 0a 20 20 73 65 74 20  ta2-3.6 {.  set 
1cc0: 3a 3a 68 33 20 5b 73 71 6c 69 74 65 33 5f 71 75  ::h3 [sqlite3_qu
1cd0: 6f 74 61 5f 66 6f 70 65 6e 20 71 75 6f 74 61 32  ota_fopen quota2
1ce0: 61 2f 78 31 2f 63 2e 74 78 74 20 61 5d 0a 20 20  a/x1/c.txt a].  
1cf0: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 77  sqlite3_quota_fw
1d00: 72 69 74 65 20 24 3a 3a 68 33 20 31 30 20 35 30  rite $::h3 10 50
1d10: 20 24 62 69 67 74 65 78 74 0a 20 20 73 74 61 6e   $bigtext.  stan
1d20: 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69 74  dard_path [sqlit
1d30: 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a 7d  e3_quota_dump].}
1d40: 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20 34   {{*/quota2a/* 4
1d50: 30 30 30 20 38 30 30 20 7b 50 57 44 2f 71 75 6f  000 800 {PWD/quo
1d60: 74 61 32 61 2f 78 31 2f 63 2e 74 78 74 20 35 30  ta2a/x1/c.txt 50
1d70: 30 20 31 20 30 7d 20 7b 50 57 44 2f 71 75 6f 74  0 1 0} {PWD/quot
1d80: 61 32 61 2f 78 32 2f 62 2e 74 78 74 20 32 30 30  a2a/x2/b.txt 200
1d90: 20 31 20 30 7d 20 7b 50 57 44 2f 71 75 6f 74 61   1 0} {PWD/quota
1da0: 32 61 2f 78 31 2f 61 2e 74 78 74 20 31 30 30 20  2a/x1/a.txt 100 
1db0: 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73 74 20 71  0 0}}}.do_test q
1dc0: 75 6f 74 61 32 2d 33 2e 37 20 7b 0a 20 20 66 69  uota2-3.7 {.  fi
1dd0: 6c 65 20 65 78 69 73 74 73 20 71 75 6f 74 61 32  le exists quota2
1de0: 61 2f 78 31 2f 61 2e 74 78 74 0a 7d 20 7b 31 7d  a/x1/a.txt.} {1}
1df0: 0a 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d  .do_test quota2-
1e00: 33 2e 38 20 7b 0a 20 20 66 69 6c 65 20 65 78 69  3.8 {.  file exi
1e10: 73 74 73 20 71 75 6f 74 61 32 61 2f 78 32 2f 62  sts quota2a/x2/b
1e20: 2e 74 78 74 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  .txt.} {1}.do_te
1e30: 73 74 20 71 75 6f 74 61 32 2d 33 2e 39 20 7b 0a  st quota2-3.9 {.
1e40: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75    file exists qu
1e50: 6f 74 61 32 61 2f 78 31 2f 63 2e 74 78 74 0a 7d  ota2a/x1/c.txt.}
1e60: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {1}.do_test quo
1e70: 74 61 32 2d 33 2e 31 30 20 7b 0a 20 20 73 71 6c  ta2-3.10 {.  sql
1e80: 69 74 65 33 5f 71 75 6f 74 61 5f 72 65 6d 6f 76  ite3_quota_remov
1e90: 65 20 71 75 6f 74 61 32 61 2f 78 31 0a 20 20 73  e quota2a/x1.  s
1ea0: 74 61 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71  tandard_path [sq
1eb0: 6c 69 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70  lite3_quota_dump
1ec0: 5d 0a 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f  ].} {{*/quota2a/
1ed0: 2a 20 34 30 30 30 20 37 30 30 20 7b 50 57 44 2f  * 4000 700 {PWD/
1ee0: 71 75 6f 74 61 32 61 2f 78 31 2f 63 2e 74 78 74  quota2a/x1/c.txt
1ef0: 20 35 30 30 20 31 20 31 7d 20 7b 50 57 44 2f 71   500 1 1} {PWD/q
1f00: 75 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 20  uota2a/x2/b.txt 
1f10: 32 30 30 20 31 20 30 7d 7d 7d 0a 64 6f 5f 74 65  200 1 0}}}.do_te
1f20: 73 74 20 71 75 6f 74 61 32 2d 33 2e 31 31 20 7b  st quota2-3.11 {
1f30: 0a 20 20 73 71 6c 69 74 65 33 5f 71 75 6f 74 61  .  sqlite3_quota
1f40: 5f 66 63 6c 6f 73 65 20 24 3a 3a 68 32 0a 20 20  _fclose $::h2.  
1f50: 73 71 6c 69 74 65 33 5f 71 75 6f 74 61 5f 66 63  sqlite3_quota_fc
1f60: 6c 6f 73 65 20 24 3a 3a 68 33 0a 20 20 73 74 61  lose $::h3.  sta
1f70: 6e 64 61 72 64 5f 70 61 74 68 20 5b 73 71 6c 69  ndard_path [sqli
1f80: 74 65 33 5f 71 75 6f 74 61 5f 64 75 6d 70 5d 0a  te3_quota_dump].
1f90: 7d 20 7b 7b 2a 2f 71 75 6f 74 61 32 61 2f 2a 20  } {{*/quota2a/* 
1fa0: 34 30 30 30 20 32 30 30 20 7b 50 57 44 2f 71 75  4000 200 {PWD/qu
1fb0: 6f 74 61 32 61 2f 78 32 2f 62 2e 74 78 74 20 32  ota2a/x2/b.txt 2
1fc0: 30 30 20 30 20 30 7d 7d 7d 0a 64 6f 5f 74 65 73  00 0 0}}}.do_tes
1fd0: 74 20 71 75 6f 74 61 32 2d 33 2e 31 32 20 7b 0a  t quota2-3.12 {.
1fe0: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 71 75    file exists qu
1ff0: 6f 74 61 32 61 2f 78 31 2f 61 2e 74 78 74 0a 7d  ota2a/x1/a.txt.}
2000: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 71 75 6f   {0}.do_test quo
2010: 74 61 32 2d 33 2e 31 33 20 7b 0a 20 20 66 69 6c  ta2-3.13 {.  fil
2020: 65 20 65 78 69 73 74 73 20 71 75 6f 74 61 32 61  e exists quota2a
2030: 2f 78 32 2f 62 2e 74 78 74 0a 7d 20 7b 31 7d 0a  /x2/b.txt.} {1}.
2040: 64 6f 5f 74 65 73 74 20 71 75 6f 74 61 32 2d 33  do_test quota2-3
2050: 2e 31 34 20 7b 0a 20 20 66 69 6c 65 20 65 78 69  .14 {.  file exi
2060: 73 74 73 20 71 75 6f 74 61 32 61 2f 78 31 2f 63  sts quota2a/x1/c
2070: 2e 74 78 74 0a 7d 20 7b 30 7d 0a 0a 63 61 74 63  .txt.} {0}..catc
2080: 68 20 7b 20 73 71 6c 69 74 65 33 5f 71 75 6f 74  h { sqlite3_quot
2090: 61 5f 73 68 75 74 64 6f 77 6e 20 7d 0a 63 61 74  a_shutdown }.cat
20a0: 63 68 20 7b 20 75 6e 73 65 74 20 71 75 6f 74 61  ch { unset quota
20b0: 5f 72 65 71 75 65 73 74 5f 6f 6b 20 7d 0a 66 69  _request_ok }.fi
20c0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.