github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/ctime.test (about) 1 # 2009 February 24 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 6 # May you do good and not evil. 7 # May you find forgiveness for yourself and forgive others. 8 # May you share freely, never taking more than you give. 9 # 10 #*********************************************************************** 11 # This file implements regression tests for SQLite library. 12 # 13 # This file implements tests for the compile time diagnostic 14 # functions. 15 # 16 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 20 # Test organization: 21 # 22 # ctime-1.*: Test pragma support. 23 # ctime-2.*: Test function support. 24 # 25 26 ifcapable !pragma||!compileoption_diags { 27 finish_test 28 return 29 } 30 31 ##################### 32 # ctime-1.*: Test pragma support. 33 34 do_test ctime-1.1.1 { 35 catchsql { 36 PRAGMA compile_options(); 37 } 38 } {1 {near ")": syntax error}} 39 do_test ctime-1.1.2 { 40 catchsql { 41 PRAGMA compile_options(NULL); 42 } 43 } {1 {near "NULL": syntax error}} 44 do_test ctime-1.1.3 { 45 catchsql { 46 PRAGMA compile_options *; 47 } 48 } {1 {near "*": syntax error}} 49 50 do_test ctime-1.2.1 { 51 set ans [ catchsql { 52 PRAGMA compile_options; 53 } ] 54 list [ lindex $ans 0 ] 55 } {0} 56 # the results should be in sorted order already 57 do_test ctime-1.2.2 { 58 set ans [ catchsql { 59 PRAGMA compile_options; 60 } ] 61 list [ lindex $ans 0 ] [ expr { [lsort [lindex $ans 1]]==[lindex $ans 1] } ] 62 } {0 1} 63 64 # Check the THREADSAFE option for SQLITE_THREADSAFE=2 builds (there are 65 # a couple of these configurations in releasetest.tcl). 66 # 67 ifcapable threadsafe2 { 68 foreach {tn opt res} { 69 1 SQLITE_THREADSAFE 1 70 2 THREADSAFE 1 71 3 THREADSAFE=0 0 72 4 THREADSAFE=1 0 73 5 THREADSAFE=2 1 74 6 THREADSAFE= 0 75 } { 76 do_execsql_test ctime-1.3.$tn { 77 SELECT sqlite_compileoption_used($opt) 78 } $res 79 } 80 } 81 82 # SQLITE_THREADSAFE should pretty much always be defined 83 # one way or the other, and it must have a value of 0 or 1. 84 do_test ctime-1.4.1 { 85 catchsql { 86 SELECT sqlite_compileoption_used('SQLITE_THREADSAFE'); 87 } 88 } {0 1} 89 do_test ctime-1.4.2 { 90 catchsql { 91 SELECT sqlite_compileoption_used('THREADSAFE'); 92 } 93 } {0 1} 94 do_test ctime-1.4.3 { 95 catchsql { 96 SELECT sqlite_compileoption_used("THREADSAFE"); 97 } 98 } {0 1} 99 100 do_test ctime-1.5 { 101 set ans1 [ catchsql { 102 SELECT sqlite_compileoption_used('THREADSAFE=0'); 103 } ] 104 set ans2 [ catchsql { 105 SELECT sqlite_compileoption_used('THREADSAFE=1'); 106 } ] 107 set ans3 [ catchsql { 108 SELECT sqlite_compileoption_used('THREADSAFE=2'); 109 } ] 110 lsort [ list $ans1 $ans2 $ans3 ] 111 } {{0 0} {0 0} {0 1}} 112 113 do_test ctime-1.6 { 114 execsql { 115 SELECT sqlite_compileoption_used('THREADSAFE='); 116 } 117 } {0} 118 119 do_test ctime-1.7.1 { 120 execsql { 121 SELECT sqlite_compileoption_used('SQLITE_OMIT_COMPILEOPTION_DIAGS'); 122 } 123 } {0} 124 do_test ctime-1.7.2 { 125 execsql { 126 SELECT sqlite_compileoption_used('OMIT_COMPILEOPTION_DIAGS'); 127 } 128 } {0} 129 130 ##################### 131 # ctime-2.*: Test function support. 132 133 do_test ctime-2.1.1 { 134 catchsql { 135 SELECT sqlite_compileoption_used(); 136 } 137 } {1 {wrong number of arguments to function sqlite_compileoption_used()}} 138 do_test ctime-2.1.2 { 139 catchsql { 140 SELECT sqlite_compileoption_used(NULL); 141 } 142 } {0 {{}}} 143 do_test ctime-2.1.3 { 144 catchsql { 145 SELECT sqlite_compileoption_used(""); 146 } 147 } {0 0} 148 do_test ctime-2.1.4 { 149 catchsql { 150 SELECT sqlite_compileoption_used(''); 151 } 152 } {0 0} 153 do_test ctime-2.1.5 { 154 catchsql { 155 SELECT sqlite_compileoption_used(foo); 156 } 157 } {1 {no such column: foo}} 158 do_test ctime-2.1.6 { 159 catchsql { 160 SELECT sqlite_compileoption_used('THREADSAFE', 0); 161 } 162 } {1 {wrong number of arguments to function sqlite_compileoption_used()}} 163 do_test ctime-2.1.7 { 164 catchsql { 165 SELECT sqlite_compileoption_used(0); 166 } 167 } {0 0} 168 do_test ctime-2.1.8 { 169 catchsql { 170 SELECT sqlite_compileoption_used('0'); 171 } 172 } {0 0} 173 do_test ctime-2.1.9 { 174 catchsql { 175 SELECT sqlite_compileoption_used(1.0); 176 } 177 } {0 0} 178 179 do_test ctime-2.2.1 { 180 catchsql { 181 SELECT sqlite_compileoption_get(); 182 } 183 } {1 {wrong number of arguments to function sqlite_compileoption_get()}} 184 do_test ctime-2.2.2 { 185 catchsql { 186 SELECT sqlite_compileoption_get(0, 0); 187 } 188 } {1 {wrong number of arguments to function sqlite_compileoption_get()}} 189 190 # This assumes there is at least 1 compile time option 191 # (see SQLITE_THREADSAFE above). 192 do_test ctime-2.3 { 193 catchsql { 194 SELECT sqlite_compileoption_used(sqlite_compileoption_get(0)); 195 } 196 } {0 1} 197 198 # This assumes there is at least 1 compile time option 199 # (see SQLITE_THREADSAFE above). 200 do_test ctime-2.4 { 201 set ans [ catchsql { 202 SELECT sqlite_compileoption_get(0); 203 } ] 204 list [lindex $ans 0] 205 } {0} 206 207 # Get the list of defines using the pragma, 208 # then try querying each one with the functions. 209 set ans [ catchsql { 210 PRAGMA compile_options; 211 } ] 212 set opts [ lindex $ans 1 ] 213 set tc 1 214 foreach opt $opts { 215 do_test ctime-2.5.$tc { 216 set N [ expr {$tc-1} ] 217 set ans1 [catch {db one { 218 SELECT sqlite_compileoption_get($N); 219 }} msg] 220 lappend ans1 $msg 221 set ans2 [ catchsql { 222 SELECT sqlite_compileoption_used($opt); 223 } ] 224 list [ lindex $ans1 0 ] [ expr { [lindex $ans1 1]==$opt } ] \ 225 [ expr { $ans2 } ] 226 } {0 1 {0 1}} 227 incr tc 1 228 } 229 # test 1 past array bounds 230 do_test ctime-2.5.$tc { 231 set N [ expr {$tc-1} ] 232 set ans [ catchsql { 233 SELECT sqlite_compileoption_get($N); 234 } ] 235 } {0 {{}}} 236 incr tc 1 237 # test 1 before array bounds (N=-1) 238 do_test ctime-2.5.$tc { 239 set N -1 240 set ans [ catchsql { 241 SELECT sqlite_compileoption_get($N); 242 } ] 243 } {0 {{}}} 244 245 #-------------------------------------------------------------------------- 246 # Test that SQLITE_DIRECT_OVERFLOW_READ is reflected in the output of 247 # "PRAGMA compile_options". 248 # 249 ifcapable direct_read { 250 set res 1 251 } else { 252 set res 0 253 } 254 do_test ctime-3.0.1 { 255 expr [lsearch [db eval {PRAGMA compile_options}] DIRECT_OVERFLOW_READ]>=0 256 } $res 257 258 finish_test