AryaWu/sqlite
0
1# 2009 February 242#3# The author disclaims copyright to this source code. In place of4# 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 17set testdir [file dirname $argv0]18source $testdir/tester.tcl19 20# Test organization:21#22# ctime-1.*: Test pragma support.23# ctime-2.*: Test function support.24#25 26ifcapable !pragma||!compileoption_diags {27 finish_test28 return29}30 31#####################32# ctime-1.*: Test pragma support.33 34do_test ctime-1.1.1 {35 catchsql {36 PRAGMA compile_options();37 }38} {1 {near ")": syntax error}}39do_test ctime-1.1.2 {40 catchsql {41 PRAGMA compile_options(NULL);42 }43} {1 {near "NULL": syntax error}}44do_test ctime-1.1.3 {45 catchsql {46 PRAGMA compile_options *;47 }48} {1 {near "*": syntax error}}49 50do_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 already57do_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 are65# a couple of these configurations in releasetest.tcl).66#67ifcapable threadsafe2 {68 foreach {tn opt res} {69 1 SQLITE_THREADSAFE 170 2 THREADSAFE 171 3 THREADSAFE=0 072 4 THREADSAFE=1 073 5 THREADSAFE=2 174 6 THREADSAFE= 075 } {76 do_execsql_test ctime-1.3.$tn {77 SELECT sqlite_compileoption_used($opt)78 } $res79 }80}81 82# SQLITE_THREADSAFE should pretty much always be defined83# one way or the other, and it must have a value of 0 or 1.84sqlite3_db_config db SQLITE_DBCONFIG_DQS_DML 185do_test ctime-1.4.1 {86 catchsql {87 SELECT sqlite_compileoption_used('SQLITE_THREADSAFE');88 }89} {0 1}90do_test ctime-1.4.2 {91 catchsql {92 SELECT sqlite_compileoption_used('THREADSAFE');93 }94} {0 1}95do_test ctime-1.4.3 {96 catchsql {97 SELECT sqlite_compileoption_used("THREADSAFE");98 }99} {0 1}100 101do_test ctime-1.5 {102 set ans1 [ catchsql {103 SELECT sqlite_compileoption_used('THREADSAFE=0');104 } ]105 set ans2 [ catchsql {106 SELECT sqlite_compileoption_used('THREADSAFE=1');107 } ]108 set ans3 [ catchsql {109 SELECT sqlite_compileoption_used('THREADSAFE=2');110 } ]111 lsort [ list $ans1 $ans2 $ans3 ]112} {{0 0} {0 0} {0 1}}113 114do_test ctime-1.6 {115 execsql {116 SELECT sqlite_compileoption_used('THREADSAFE=');117 }118} {0}119 120do_test ctime-1.7.1 {121 execsql {122 SELECT sqlite_compileoption_used('SQLITE_OMIT_COMPILEOPTION_DIAGS');123 }124} {0}125do_test ctime-1.7.2 {126 execsql {127 SELECT sqlite_compileoption_used('OMIT_COMPILEOPTION_DIAGS');128 }129} {0}130 131#####################132# ctime-2.*: Test function support.133 134do_test ctime-2.1.1 {135 catchsql {136 SELECT sqlite_compileoption_used();137 }138} {1 {wrong number of arguments to function sqlite_compileoption_used()}}139do_test ctime-2.1.2 {140 catchsql {141 SELECT sqlite_compileoption_used(NULL);142 }143} {0 {{}}}144do_test ctime-2.1.3 {145 catchsql {146 SELECT sqlite_compileoption_used("");147 }148} {0 0}149do_test ctime-2.1.4 {150 catchsql {151 SELECT sqlite_compileoption_used('');152 }153} {0 0}154do_test ctime-2.1.5 {155 catchsql {156 SELECT sqlite_compileoption_used(foo);157 }158} {1 {no such column: foo}}159do_test ctime-2.1.6 {160 catchsql {161 SELECT sqlite_compileoption_used('THREADSAFE', 0);162 }163} {1 {wrong number of arguments to function sqlite_compileoption_used()}}164do_test ctime-2.1.7 {165 catchsql {166 SELECT sqlite_compileoption_used(0);167 }168} {0 0}169do_test ctime-2.1.8 {170 catchsql {171 SELECT sqlite_compileoption_used('0');172 }173} {0 0}174do_test ctime-2.1.9 {175 catchsql {176 SELECT sqlite_compileoption_used(1.0);177 }178} {0 0}179 180do_test ctime-2.2.1 {181 catchsql {182 SELECT sqlite_compileoption_get();183 }184} {1 {wrong number of arguments to function sqlite_compileoption_get()}}185do_test ctime-2.2.2 {186 catchsql {187 SELECT sqlite_compileoption_get(0, 0);188 }189} {1 {wrong number of arguments to function sqlite_compileoption_get()}}190 191# This assumes there is at least 1 compile time option192# (see SQLITE_THREADSAFE above).193do_test ctime-2.3 {194 catchsql {195 SELECT sqlite_compileoption_used(sqlite_compileoption_get(0));196 }197} {0 1}198 199# This assumes there is at least 1 compile time option200# (see SQLITE_THREADSAFE above).201do_test ctime-2.4 {202 set ans [ catchsql {203 SELECT sqlite_compileoption_get(0);204 } ]205 list [lindex $ans 0]206} {0}207 208# Get the list of defines using the pragma,209# then try querying each one with the functions.210set ans [ catchsql {211 PRAGMA compile_options;212} ]213set opts [ lindex $ans 1 ]214set tc 1215foreach opt $opts {216 do_test ctime-2.5.$tc {217 set N [ expr {$tc-1} ]218 set ans1 [catch {db one {219 SELECT sqlite_compileoption_get($N);220 }} msg]221 lappend ans1 $msg222 set ans2 [ catchsql {223 SELECT sqlite_compileoption_used($opt);224 } ]225 list [ lindex $ans1 0 ] [ expr { [lindex $ans1 1]==$opt } ] \226 [ expr { $ans2 } ]227 } {0 1 {0 1}}228 incr tc 1229}230# test 1 past array bounds231do_test ctime-2.5.$tc {232 set N [ expr {$tc-1} ]233 set ans [ catchsql {234 SELECT sqlite_compileoption_get($N);235 } ]236} {0 {{}}}237incr tc 1238# test 1 before array bounds (N=-1)239do_test ctime-2.5.$tc {240 set N -1241 set ans [ catchsql {242 SELECT sqlite_compileoption_get($N);243 } ]244} {0 {{}}}245 246#--------------------------------------------------------------------------247# Test that SQLITE_DIRECT_OVERFLOW_READ is reflected in the output of248# "PRAGMA compile_options".249#250ifcapable direct_read {251 set res 1252} else {253 set res 0254}255do_test ctime-3.0.1 {256 expr [lsearch [db eval {PRAGMA compile_options}] DIRECT_OVERFLOW_READ]>=0257} $res258 259finish_test260 