|
1 # 2006 August 23 |
|
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. The |
|
12 # focus of this script is automatic extension loading and the |
|
13 # sqlite3_auto_extension() API. |
|
14 # |
|
15 # $Id: loadext2.test,v 1.3 2008/03/19 16:08:54 drh Exp $ |
|
16 |
|
17 set testdir [file dirname $argv0] |
|
18 source $testdir/tester.tcl |
|
19 |
|
20 # Only run these tests if the approriate APIs are defined |
|
21 # in the system under test. |
|
22 # |
|
23 ifcapable !load_ext { |
|
24 finish_test |
|
25 return |
|
26 } |
|
27 if {[info command sqlite3_auto_extension_sqr]==""} { |
|
28 finish_test |
|
29 return |
|
30 } |
|
31 |
|
32 |
|
33 # None of the extension are loaded by default. |
|
34 # |
|
35 do_test loadext2-1.1 { |
|
36 catchsql { |
|
37 SELECT sqr(2) |
|
38 } |
|
39 } {1 {no such function: sqr}} |
|
40 do_test loadext2-1.2 { |
|
41 catchsql { |
|
42 SELECT cube(2) |
|
43 } |
|
44 } {1 {no such function: cube}} |
|
45 |
|
46 # Register auto-loaders. Still functions do not exist. |
|
47 # |
|
48 do_test loadext2-1.3 { |
|
49 sqlite3_auto_extension_sqr |
|
50 sqlite3_auto_extension_cube |
|
51 catchsql { |
|
52 SELECT sqr(2) |
|
53 } |
|
54 } {1 {no such function: sqr}} |
|
55 do_test loadext2-1.4 { |
|
56 catchsql { |
|
57 SELECT cube(2) |
|
58 } |
|
59 } {1 {no such function: cube}} |
|
60 |
|
61 |
|
62 # Functions do exist in a new database connection |
|
63 # |
|
64 do_test loadext2-1.5 { |
|
65 sqlite3 db test.db |
|
66 catchsql { |
|
67 SELECT sqr(2) |
|
68 } |
|
69 } {0 4.0} |
|
70 do_test loadext2-1.6 { |
|
71 catchsql { |
|
72 SELECT cube(2) |
|
73 } |
|
74 } {0 8.0} |
|
75 |
|
76 |
|
77 # Reset extension auto loading. Existing extensions still exist. |
|
78 # |
|
79 do_test loadext2-1.7 { |
|
80 sqlite3_reset_auto_extension |
|
81 catchsql { |
|
82 SELECT sqr(2) |
|
83 } |
|
84 } {0 4.0} |
|
85 do_test loadext2-1.8 { |
|
86 catchsql { |
|
87 SELECT cube(2) |
|
88 } |
|
89 } {0 8.0} |
|
90 |
|
91 |
|
92 # Register only the sqr() function. |
|
93 # |
|
94 do_test loadext2-1.9 { |
|
95 sqlite3_auto_extension_sqr |
|
96 sqlite3 db test.db |
|
97 catchsql { |
|
98 SELECT sqr(2) |
|
99 } |
|
100 } {0 4.0} |
|
101 do_test loadext2-1.10 { |
|
102 catchsql { |
|
103 SELECT cube(2) |
|
104 } |
|
105 } {1 {no such function: cube}} |
|
106 |
|
107 # Register only the cube() function. |
|
108 # |
|
109 do_test loadext2-1.11 { |
|
110 sqlite3_reset_auto_extension |
|
111 sqlite3_auto_extension_cube |
|
112 sqlite3 db test.db |
|
113 catchsql { |
|
114 SELECT sqr(2) |
|
115 } |
|
116 } {1 {no such function: sqr}} |
|
117 do_test loadext2-1.12 { |
|
118 catchsql { |
|
119 SELECT cube(2) |
|
120 } |
|
121 } {0 8.0} |
|
122 |
|
123 # Register a broken entry point. |
|
124 # |
|
125 do_test loadext2-1.13 { |
|
126 sqlite3_auto_extension_broken |
|
127 set rc [catch {sqlite3 db test.db} errmsg] |
|
128 lappend rc $errmsg |
|
129 } {1 {automatic extension loading failed: broken autoext!}} |
|
130 do_test loadext2-1.14 { |
|
131 catchsql { |
|
132 SELECT sqr(2) |
|
133 } |
|
134 } {1 {no such function: sqr}} |
|
135 do_test loadext2-1.15 { |
|
136 catchsql { |
|
137 SELECT cube(2) |
|
138 } |
|
139 } {0 8.0} |
|
140 |
|
141 |
|
142 sqlite3_reset_auto_extension |
|
143 autoinstall_test_functions |
|
144 finish_test |