• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
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
64# 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 {
68    SELECT sqlite_compileoption_used('SQLITE_THREADSAFE');
69  }
70} {0 1}
71do_test ctime-1.4.2 {
72  catchsql {
73    SELECT sqlite_compileoption_used('THREADSAFE');
74  }
75} {0 1}
76do_test ctime-1.4.3 {
77  catchsql {
78    SELECT sqlite_compileoption_used("THREADSAFE");
79  }
80} {0 1}
81
82do_test ctime-1.5 {
83  set ans1 [ catchsql {
84    SELECT sqlite_compileoption_used('THREADSAFE=0');
85  } ]
86  set ans2 [ catchsql {
87    SELECT sqlite_compileoption_used('THREADSAFE=1');
88  } ]
89  set ans3 [ catchsql {
90    SELECT sqlite_compileoption_used('THREADSAFE=2');
91  } ]
92  lsort [ list $ans1 $ans2 $ans3 ]
93} {{0 0} {0 0} {0 1}}
94
95do_test ctime-1.6 {
96  execsql {
97    SELECT sqlite_compileoption_used('THREADSAFE=');
98  }
99} {0}
100
101do_test ctime-1.7.1 {
102  execsql {
103    SELECT sqlite_compileoption_used('SQLITE_OMIT_COMPILEOPTION_DIAGS');
104  }
105} {0}
106do_test ctime-1.7.2 {
107  execsql {
108    SELECT sqlite_compileoption_used('OMIT_COMPILEOPTION_DIAGS');
109  }
110} {0}
111
112#####################
113# ctime-2.*: Test function support.
114
115do_test ctime-2.1.1 {
116  catchsql {
117    SELECT sqlite_compileoption_used();
118  }
119} {1 {wrong number of arguments to function sqlite_compileoption_used()}}
120do_test ctime-2.1.2 {
121  catchsql {
122    SELECT sqlite_compileoption_used(NULL);
123  }
124} {0 {{}}}
125do_test ctime-2.1.3 {
126  catchsql {
127    SELECT sqlite_compileoption_used("");
128  }
129} {0 0}
130do_test ctime-2.1.4 {
131  catchsql {
132    SELECT sqlite_compileoption_used('');
133  }
134} {0 0}
135do_test ctime-2.1.5 {
136  catchsql {
137    SELECT sqlite_compileoption_used(foo);
138  }
139} {1 {no such column: foo}}
140do_test ctime-2.1.6 {
141  catchsql {
142    SELECT sqlite_compileoption_used('THREADSAFE', 0);
143  }
144} {1 {wrong number of arguments to function sqlite_compileoption_used()}}
145do_test ctime-2.1.7 {
146  catchsql {
147    SELECT sqlite_compileoption_used(0);
148  }
149} {0 0}
150do_test ctime-2.1.8 {
151  catchsql {
152    SELECT sqlite_compileoption_used('0');
153  }
154} {0 0}
155do_test ctime-2.1.9 {
156  catchsql {
157    SELECT sqlite_compileoption_used(1.0);
158  }
159} {0 0}
160
161do_test ctime-2.2.1 {
162  catchsql {
163    SELECT sqlite_compileoption_get();
164  }
165} {1 {wrong number of arguments to function sqlite_compileoption_get()}}
166do_test ctime-2.2.2 {
167  catchsql {
168    SELECT sqlite_compileoption_get(0, 0);
169  }
170} {1 {wrong number of arguments to function sqlite_compileoption_get()}}
171
172# This assumes there is at least 1 compile time option
173# (see SQLITE_THREADSAFE above).
174do_test ctime-2.3 {
175  catchsql {
176    SELECT sqlite_compileoption_used(sqlite_compileoption_get(0));
177  }
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 {
183  set ans [ catchsql {
184    SELECT sqlite_compileoption_get(0);
185  } ]
186  list [lindex $ans 0]
187} {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 {
200      SELECT sqlite_compileoption_get($N);
201    } ]
202    set ans2 [ catchsql {
203      SELECT sqlite_compileoption_used($opt);
204    } ]
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 {
214    SELECT sqlite_compileoption_get($N);
215  } ]
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 {
222    SELECT sqlite_compileoption_get($N);
223  } ]
224} {0 {{}}}
225
226
227finish_test
228