/ Check-in [fa718960]

Overview
Comment: Documentation improvements and additional test cases. Tarball | ZIP archive | SQL archive family | ancestors | descendants | both | files | file ages | folders fa71896089538589fb7015d6507e22961e72233b drh 2011-12-02 15:27:41
Context
 2011-12-02 15:31 One minor documentation enhancement. check-in: 8cfd3575 user: drh tags: quota-stdio 15:27 Documentation improvements and additional test cases. check-in: fa718960 user: drh tags: quota-stdio 2011-12-01 22:12 Run quota-stdio tests in binary mode so that they work on windows. check-in: 71e4e97d user: drh tags: quota-stdio
Changes

Changes to src/test_quota.h.

 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89  ** with a zPattern for a quota group that already exists, this routine ** merely updates the iLimit, xCallback, and pArg values for that quota ** group. If zPattern is new, then a new quota group is created. ** ** The zPattern is always compared against the full pathname of the file. ** Even if APIs are called with relative pathnames, SQLite converts the ** name to a full pathname before comparing it against zPattern. zPattern ** is a standard glob pattern with the following matching rules: ** ** '*' Matches any sequence of zero or more characters. ** ** '?' Matches exactly one character. ** ** [...] Matches one character from the enclosed list of ** characters. ** ** [^...] Matches one character not in the enclosed list. ** ** Note that, unlike unix shell globbing, the directory separator "/" ** can match a wildcard. So, for example, the pattern "/abc/xyz/" "*" ** matches any files anywhere in the directory hierarchy beneath ** /abc/xyz ** ** If the iLimit for a quota group is set to zero, then the quota group ** is disabled and will be deleted when the last database connection using ** the quota group is closed. ** ** Calling this routine on a zPattern that does not exist and with a ** zero iLimit is a no-op.   | | > > > > > > |  61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95  ** with a zPattern for a quota group that already exists, this routine ** merely updates the iLimit, xCallback, and pArg values for that quota ** group. If zPattern is new, then a new quota group is created. ** ** The zPattern is always compared against the full pathname of the file. ** Even if APIs are called with relative pathnames, SQLite converts the ** name to a full pathname before comparing it against zPattern. zPattern ** is a glob pattern with the following matching rules: ** ** '*' Matches any sequence of zero or more characters. ** ** '?' Matches exactly one character. ** ** [...] Matches one character from the enclosed list of ** characters. "]" can be part of the list if it is ** the first character. Within the list "X-Y" matches ** characters X or Y or any character in between the ** two. Ex: "[0-9]" matches any digit. ** ** [^...] Matches one character not in the enclosed list. ** ** / Matches either / or \. This allows glob patterns ** containing / to work on both unix and windows. ** ** Note that, unlike unix shell globbing, the directory separator "/" ** can match a wildcard. So, for example, the pattern "/abc/xyz/" "*" ** matches any files anywhere in the directory hierarchy beneath ** /abc/xyz. ** ** If the iLimit for a quota group is set to zero, then the quota group ** is disabled and will be deleted when the last database connection using ** the quota group is closed. ** ** Calling this routine on a zPattern that does not exist and with a ** zero iLimit is a no-op. 

Changes to test/quota-glob.test.

 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50   4 abcdefgh abcdefg 0 5 abcdef? abcdefg 1 6 abcdef? abcdef 0 7 abcdef? abcdefgh 0 8 abcdefg abcdef? 0 9 abcdef? abcdef? 1 10 abc/def abc/def 1 11 abc/def abc\\def 1 12 */abc/* x/abc/y 1 13 */abc/* /abc/ 1 16 */abc/* x///a/ab/abc 0 17 */abc/* x//a/ab/abc/ 1 16 */abc/* x///a/ab/abc 0 17 */abc/* x//a/ab/abc/ 1 } { do_test quota-glob-$testnum.1 { sqlite3_quota_glob$::pattern $::text }$::ans do_test quota-glob-$testnum.2 { sqlite3_quota_glob$::pattern [string map {/ \\} $::text] }$::ans } finish_test   | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >  28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87   4 abcdefgh abcdefg 0 5 abcdef? abcdefg 1 6 abcdef? abcdef 0 7 abcdef? abcdefgh 0 8 abcdefg abcdef? 0 9 abcdef? abcdef? 1 10 abc/def abc/def 1 11 abc//def abc/def 0 12 */abc/* x/abc/y 1 13 */abc/* /abc/ 1 16 */abc/* x///a/ab/abc 0 17 */abc/* x//a/ab/abc/ 1 16 */abc/* x///a/ab/abc 0 17 */abc/* x//a/ab/abc/ 1 18 **/abc/** x//a/ab/abc/ 1 19 *?/abc/*? x//a/ab/abc/y 1 20 ?*/abc/?* x//a/ab/abc/y 1 21 {abc[cde]efg} abcbefg 0 22 {abc[cde]efg} abccefg 1 23 {abc[cde]efg} abcdefg 1 24 {abc[cde]efg} abceefg 1 25 {abc[cde]efg} abcfefg 0 26 {abc[^cde]efg} abcbefg 1 27 {abc[^cde]efg} abccefg 0 28 {abc[^cde]efg} abcdefg 0 29 {abc[^cde]efg} abceefg 0 30 {abc[^cde]efg} abcfefg 1 31 {abc[c-e]efg} abcbefg 0 32 {abc[c-e]efg} abccefg 1 33 {abc[c-e]efg} abcdefg 1 34 {abc[c-e]efg} abceefg 1 35 {abc[c-e]efg} abcfefg 0 36 {abc[^c-e]efg} abcbefg 1 37 {abc[^c-e]efg} abccefg 0 38 {abc[^c-e]efg} abcdefg 0 39 {abc[^c-e]efg} abceefg 0 40 {abc[^c-e]efg} abcfefg 1 41 {abc[c-e]efg} abc-efg 0 42 {abc[-ce]efg} abc-efg 1 43 {abc[ce-]efg} abc-efg 1 44 {abc[][*?]efg} {abc]efg} 1 45 {abc[][*?]efg} {abc*efg} 1 46 {abc[][*?]efg} {abc?efg} 1 47 {abc[][*?]efg} {abc[efg} 1 48 {abc[^][*?]efg} {abc]efg} 0 49 {abc[^][*?]efg} {abc*efg} 0 50 {abc[^][*?]efg} {abc?efg} 0 51 {abc[^][*?]efg} {abc[efg} 0 52 {abc[^][*?]efg} {abcdefg} 1 53 {*[xyz]efg} {abcxefg} 1 54 {*[xyz]efg} {abcwefg} 0 } { do_test quota-glob-$testnum.1 { sqlite3_quota_glob$::pattern $::text }$::ans do_test quota-glob-$testnum.2 { sqlite3_quota_glob$::pattern [string map {/ \\} $::text] }$::ans } finish_test 

Changes to test/quota2.test.

 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... 115 116 117 118 119 120 121 122 123 124 125  set testdir [file dirname $argv0] source$testdir/tester.tcl source $testdir/malloc_common.tcl db close sqlite3_quota_initialize "" 1 file delete -force quota2a file delete -force quota2b file mkdir quota2a file mkdir quota2b # The standard_path procedure converts a pathname into a standard format # that is the same across platforms. # unset -nocomplain ::quota_pwd ::quota_mapping set ::quota_pwd [string map {\\ /} [pwd]] set ::quota_mapping [list$::quota_pwd PWD] ................................................................................ } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 4000 {PWD/quota2a/xyz.txt 4000 0 0}}} do_test quota1-1.13 { sqlite3_quota_remove quota2a/xyz.txt standard_path [sqlite3_quota_dump] } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}} catch { sqlite3_quota_shutdown } catch { unset quota_request_ok } finish_test   | | | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >  13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172  set testdir [file dirname $argv0] source$testdir/tester.tcl source $testdir/malloc_common.tcl db close sqlite3_quota_initialize "" 1 foreach dir {quota2a quota2b quota2c} { file delete -force$dir file mkdir $dir } # The standard_path procedure converts a pathname into a standard format # that is the same across platforms. # unset -nocomplain ::quota_pwd ::quota_mapping set ::quota_pwd [string map {\\ /} [pwd]] set ::quota_mapping [list$::quota_pwd PWD] ................................................................................ } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 4000 {PWD/quota2a/xyz.txt 4000 0 0}}} do_test quota1-1.13 { sqlite3_quota_remove quota2a/xyz.txt standard_path [sqlite3_quota_dump] } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}} set quota {} do_test quota2-2.1 { set ::h1 [sqlite3_quota_fopen quota2c/xyz.txt w+b] sqlite3_quota_fwrite $::h1 1 7000$bigtext } {7000} do_test quota2-2.2 { set ::quota } {} do_test quota2-2.3 { sqlite3_quota_rewind $::h1 set ::x [sqlite3_quota_fread$::h1 1001 7] string length $::x } {6006} do_test quota2-2.4 { string match$::x [string range $::bigtext 0 6005] } {1} do_test quota2-2.5 { sqlite3_quota_fseek$::h1 0 SEEK_END sqlite3_quota_ftell $::h1 } {7000} do_test quota2-2.6 { sqlite3_quota_fseek$::h1 -100 SEEK_END sqlite3_quota_ftell $::h1 } {6900} do_test quota2-2.7 { sqlite3_quota_fseek$::h1 -100 SEEK_CUR sqlite3_quota_ftell $::h1 } {6800} do_test quota2-2.8 { sqlite3_quota_fseek$::h1 50 SEEK_CUR sqlite3_quota_ftell $::h1 } {6850} do_test quota2-2.9 { sqlite3_quota_fseek$::h1 50 SEEK_SET sqlite3_quota_ftell $::h1 } {50} do_test quota2-2.10 { sqlite3_quota_rewind$::h1 sqlite3_quota_ftell $::h1 } {0} do_test quota2-2.11 { standard_path [sqlite3_quota_dump] } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}} do_test quota1-2.12 { sqlite3_quota_fclose$::h1 standard_path [sqlite3_quota_dump] } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}} catch { sqlite3_quota_shutdown } catch { unset quota_request_ok } finish_test