blob: e4cb156168be57f9208e8bba8f247cbd740dac6d [file] [log] [blame]
shaneh915c8bd2010-02-24 19:36:10 +00001# 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
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20# Test organization:
21#
22# ctime-1.*: Test pragma support.
23# ctime-2.*: Test function support.
24#
25
26ifcapable !pragma||!compileoption_diags {
27 finish_test
28 return
29}
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 already
57do_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
shaneh915c8bd2010-02-24 19:36:10 +000064# SQLITE_THREADSAFE should pretty much always be defined
65# one way or the other, and it must have a value of 0 or 1.
66do_test ctime-1.4.1 {
67 catchsql {
drh8bb76d32010-02-26 16:37:47 +000068 SELECT sqlite_compileoption_used('SQLITE_THREADSAFE');
shaneh915c8bd2010-02-24 19:36:10 +000069 }
70} {0 1}
71do_test ctime-1.4.2 {
72 catchsql {
drh8bb76d32010-02-26 16:37:47 +000073 SELECT sqlite_compileoption_used('THREADSAFE');
shaneh915c8bd2010-02-24 19:36:10 +000074 }
75} {0 1}
76do_test ctime-1.4.3 {
77 catchsql {
drh8bb76d32010-02-26 16:37:47 +000078 SELECT sqlite_compileoption_used("THREADSAFE");
shaneh915c8bd2010-02-24 19:36:10 +000079 }
80} {0 1}
81
shaneh88ba6182010-02-25 18:07:59 +000082do_test ctime-1.5 {
shaneh915c8bd2010-02-24 19:36:10 +000083 set ans1 [ catchsql {
drh8bb76d32010-02-26 16:37:47 +000084 SELECT sqlite_compileoption_used('THREADSAFE=0');
shaneh915c8bd2010-02-24 19:36:10 +000085 } ]
86 set ans2 [ catchsql {
drh8bb76d32010-02-26 16:37:47 +000087 SELECT sqlite_compileoption_used('THREADSAFE=1');
shaneh915c8bd2010-02-24 19:36:10 +000088 } ]
dancfa800c2010-06-24 17:37:57 +000089 set ans3 [ catchsql {
90 SELECT sqlite_compileoption_used('THREADSAFE=2');
91 } ]
92 lsort [ list $ans1 $ans2 $ans3 ]
93} {{0 0} {0 0} {0 1}}
shaneh915c8bd2010-02-24 19:36:10 +000094
shaneh88ba6182010-02-25 18:07:59 +000095do_test ctime-1.6 {
shaneh915c8bd2010-02-24 19:36:10 +000096 execsql {
drh8bb76d32010-02-26 16:37:47 +000097 SELECT sqlite_compileoption_used('THREADSAFE=');
shaneh915c8bd2010-02-24 19:36:10 +000098 }
99} {0}
shaneh88ba6182010-02-25 18:07:59 +0000100
101do_test ctime-1.7.1 {
shaneh915c8bd2010-02-24 19:36:10 +0000102 execsql {
drh8bb76d32010-02-26 16:37:47 +0000103 SELECT sqlite_compileoption_used('SQLITE_OMIT_COMPILEOPTION_DIAGS');
shaneh915c8bd2010-02-24 19:36:10 +0000104 }
105} {0}
shaneh88ba6182010-02-25 18:07:59 +0000106do_test ctime-1.7.2 {
shaneh915c8bd2010-02-24 19:36:10 +0000107 execsql {
drh8bb76d32010-02-26 16:37:47 +0000108 SELECT sqlite_compileoption_used('OMIT_COMPILEOPTION_DIAGS');
shaneh915c8bd2010-02-24 19:36:10 +0000109 }
110} {0}
111
112#####################
113# ctime-2.*: Test function support.
114
115do_test ctime-2.1.1 {
116 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000117 SELECT sqlite_compileoption_used();
shaneh915c8bd2010-02-24 19:36:10 +0000118 }
drh8bb76d32010-02-26 16:37:47 +0000119} {1 {wrong number of arguments to function sqlite_compileoption_used()}}
shaneh915c8bd2010-02-24 19:36:10 +0000120do_test ctime-2.1.2 {
121 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000122 SELECT sqlite_compileoption_used(NULL);
shaneh915c8bd2010-02-24 19:36:10 +0000123 }
124} {0 {{}}}
125do_test ctime-2.1.3 {
126 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000127 SELECT sqlite_compileoption_used("");
shaneh915c8bd2010-02-24 19:36:10 +0000128 }
129} {0 0}
130do_test ctime-2.1.4 {
131 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000132 SELECT sqlite_compileoption_used('');
shaneh915c8bd2010-02-24 19:36:10 +0000133 }
134} {0 0}
135do_test ctime-2.1.5 {
136 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000137 SELECT sqlite_compileoption_used(foo);
shaneh915c8bd2010-02-24 19:36:10 +0000138 }
139} {1 {no such column: foo}}
140do_test ctime-2.1.6 {
141 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000142 SELECT sqlite_compileoption_used('THREADSAFE', 0);
shaneh915c8bd2010-02-24 19:36:10 +0000143 }
drh8bb76d32010-02-26 16:37:47 +0000144} {1 {wrong number of arguments to function sqlite_compileoption_used()}}
shaneh88ba6182010-02-25 18:07:59 +0000145do_test ctime-2.1.7 {
146 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000147 SELECT sqlite_compileoption_used(0);
shaneh88ba6182010-02-25 18:07:59 +0000148 }
149} {0 0}
150do_test ctime-2.1.8 {
151 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000152 SELECT sqlite_compileoption_used('0');
shaneh88ba6182010-02-25 18:07:59 +0000153 }
154} {0 0}
155do_test ctime-2.1.9 {
156 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000157 SELECT sqlite_compileoption_used(1.0);
shaneh88ba6182010-02-25 18:07:59 +0000158 }
159} {0 0}
shaneh915c8bd2010-02-24 19:36:10 +0000160
161do_test ctime-2.2.1 {
162 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000163 SELECT sqlite_compileoption_get();
shaneh915c8bd2010-02-24 19:36:10 +0000164 }
drh8bb76d32010-02-26 16:37:47 +0000165} {1 {wrong number of arguments to function sqlite_compileoption_get()}}
shaneh915c8bd2010-02-24 19:36:10 +0000166do_test ctime-2.2.2 {
167 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000168 SELECT sqlite_compileoption_get(0, 0);
shaneh915c8bd2010-02-24 19:36:10 +0000169 }
drh8bb76d32010-02-26 16:37:47 +0000170} {1 {wrong number of arguments to function sqlite_compileoption_get()}}
shaneh915c8bd2010-02-24 19:36:10 +0000171
172# This assumes there is at least 1 compile time option
173# (see SQLITE_THREADSAFE above).
174do_test ctime-2.3 {
175 catchsql {
drh8bb76d32010-02-26 16:37:47 +0000176 SELECT sqlite_compileoption_used(sqlite_compileoption_get(0));
shaneh915c8bd2010-02-24 19:36:10 +0000177 }
178} {0 1}
179
180# This assumes there is at least 1 compile time option
181# (see SQLITE_THREADSAFE above).
182do_test ctime-2.4 {
shaneh88ba6182010-02-25 18:07:59 +0000183 set ans [ catchsql {
drh8bb76d32010-02-26 16:37:47 +0000184 SELECT sqlite_compileoption_get(0);
shaneh915c8bd2010-02-24 19:36:10 +0000185 } ]
shaneh88ba6182010-02-25 18:07:59 +0000186 list [lindex $ans 0]
shaneh915c8bd2010-02-24 19:36:10 +0000187} {0}
188
189# Get the list of defines using the pragma,
190# then try querying each one with the functions.
191set ans [ catchsql {
192 PRAGMA compile_options;
193} ]
194set opts [ lindex $ans 1 ]
195set tc 1
196foreach opt $opts {
197 do_test ctime-2.5.$tc {
198 set N [ expr {$tc-1} ]
199 set ans1 [ catchsql {
drh8bb76d32010-02-26 16:37:47 +0000200 SELECT sqlite_compileoption_get($N);
shaneh915c8bd2010-02-24 19:36:10 +0000201 } ]
202 set ans2 [ catchsql {
drh8bb76d32010-02-26 16:37:47 +0000203 SELECT sqlite_compileoption_used($opt);
shaneh915c8bd2010-02-24 19:36:10 +0000204 } ]
205 list [ lindex $ans1 0 ] [ expr { [lindex $ans1 1]==$opt } ] \
206 [ expr { $ans2 } ]
207 } {0 1 {0 1}}
208 incr tc 1
209}
210# test 1 past array bounds
211do_test ctime-2.5.$tc {
212 set N [ expr {$tc-1} ]
213 set ans [ catchsql {
drh8bb76d32010-02-26 16:37:47 +0000214 SELECT sqlite_compileoption_get($N);
shaneh915c8bd2010-02-24 19:36:10 +0000215 } ]
216} {0 {{}}}
217incr tc 1
218# test 1 before array bounds (N=-1)
219do_test ctime-2.5.$tc {
220 set N -1
221 set ans [ catchsql {
drh8bb76d32010-02-26 16:37:47 +0000222 SELECT sqlite_compileoption_get($N);
shaneh915c8bd2010-02-24 19:36:10 +0000223 } ]
224} {0 {{}}}
225
shaneh915c8bd2010-02-24 19:36:10 +0000226
227finish_test