diff options
author | dan miller | 2007-10-20 02:49:29 +0000 |
---|---|---|
committer | dan miller | 2007-10-20 02:49:29 +0000 |
commit | e36d23a85ebff914d74bb541558c2b6082b78edb (patch) | |
tree | 54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/test/unique.test | |
parent | * Fixed an issue whereby avatar chat distances were being calculated against ... (diff) | |
download | opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.zip opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2 opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz |
sqlite source (unix build) added to libraries
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/unique.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/unique.test | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/unique.test b/libraries/sqlite/unix/sqlite-3.5.1/test/unique.test new file mode 100644 index 0000000..7bdc363 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/unique.test | |||
@@ -0,0 +1,253 @@ | |||
1 | # 2001 September 27 | ||
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 file is testing the CREATE UNIQUE INDEX statement, | ||
13 | # and primary keys, and the UNIQUE constraint on table columns | ||
14 | # | ||
15 | # $Id: unique.test,v 1.8 2005/06/24 03:53:06 drh Exp $ | ||
16 | |||
17 | set testdir [file dirname $argv0] | ||
18 | source $testdir/tester.tcl | ||
19 | |||
20 | # Try to create a table with two primary keys. | ||
21 | # (This is allowed in SQLite even that it is not valid SQL) | ||
22 | # | ||
23 | do_test unique-1.1 { | ||
24 | catchsql { | ||
25 | CREATE TABLE t1( | ||
26 | a int PRIMARY KEY, | ||
27 | b int PRIMARY KEY, | ||
28 | c text | ||
29 | ); | ||
30 | } | ||
31 | } {1 {table "t1" has more than one primary key}} | ||
32 | do_test unique-1.1b { | ||
33 | catchsql { | ||
34 | CREATE TABLE t1( | ||
35 | a int PRIMARY KEY, | ||
36 | b int UNIQUE, | ||
37 | c text | ||
38 | ); | ||
39 | } | ||
40 | } {0 {}} | ||
41 | do_test unique-1.2 { | ||
42 | catchsql { | ||
43 | INSERT INTO t1(a,b,c) VALUES(1,2,3) | ||
44 | } | ||
45 | } {0 {}} | ||
46 | do_test unique-1.3 { | ||
47 | catchsql { | ||
48 | INSERT INTO t1(a,b,c) VALUES(1,3,4) | ||
49 | } | ||
50 | } {1 {column a is not unique}} | ||
51 | do_test unique-1.4 { | ||
52 | execsql { | ||
53 | SELECT * FROM t1 ORDER BY a; | ||
54 | } | ||
55 | } {1 2 3} | ||
56 | do_test unique-1.5 { | ||
57 | catchsql { | ||
58 | INSERT INTO t1(a,b,c) VALUES(3,2,4) | ||
59 | } | ||
60 | } {1 {column b is not unique}} | ||
61 | do_test unique-1.6 { | ||
62 | execsql { | ||
63 | SELECT * FROM t1 ORDER BY a; | ||
64 | } | ||
65 | } {1 2 3} | ||
66 | do_test unique-1.7 { | ||
67 | catchsql { | ||
68 | INSERT INTO t1(a,b,c) VALUES(3,4,5) | ||
69 | } | ||
70 | } {0 {}} | ||
71 | do_test unique-1.8 { | ||
72 | execsql { | ||
73 | SELECT * FROM t1 ORDER BY a; | ||
74 | } | ||
75 | } {1 2 3 3 4 5} | ||
76 | integrity_check unique-1.9 | ||
77 | |||
78 | do_test unique-2.0 { | ||
79 | execsql { | ||
80 | DROP TABLE t1; | ||
81 | CREATE TABLE t2(a int, b int); | ||
82 | INSERT INTO t2(a,b) VALUES(1,2); | ||
83 | INSERT INTO t2(a,b) VALUES(3,4); | ||
84 | SELECT * FROM t2 ORDER BY a; | ||
85 | } | ||
86 | } {1 2 3 4} | ||
87 | do_test unique-2.1 { | ||
88 | catchsql { | ||
89 | CREATE UNIQUE INDEX i2 ON t2(a) | ||
90 | } | ||
91 | } {0 {}} | ||
92 | do_test unique-2.2 { | ||
93 | catchsql { | ||
94 | SELECT * FROM t2 ORDER BY a | ||
95 | } | ||
96 | } {0 {1 2 3 4}} | ||
97 | do_test unique-2.3 { | ||
98 | catchsql { | ||
99 | INSERT INTO t2 VALUES(1,5); | ||
100 | } | ||
101 | } {1 {column a is not unique}} | ||
102 | do_test unique-2.4 { | ||
103 | catchsql { | ||
104 | SELECT * FROM t2 ORDER BY a | ||
105 | } | ||
106 | } {0 {1 2 3 4}} | ||
107 | do_test unique-2.5 { | ||
108 | catchsql { | ||
109 | DROP INDEX i2; | ||
110 | SELECT * FROM t2 ORDER BY a; | ||
111 | } | ||
112 | } {0 {1 2 3 4}} | ||
113 | do_test unique-2.6 { | ||
114 | catchsql { | ||
115 | INSERT INTO t2 VALUES(1,5) | ||
116 | } | ||
117 | } {0 {}} | ||
118 | do_test unique-2.7 { | ||
119 | catchsql { | ||
120 | SELECT * FROM t2 ORDER BY a, b; | ||
121 | } | ||
122 | } {0 {1 2 1 5 3 4}} | ||
123 | do_test unique-2.8 { | ||
124 | catchsql { | ||
125 | CREATE UNIQUE INDEX i2 ON t2(a); | ||
126 | } | ||
127 | } {1 {indexed columns are not unique}} | ||
128 | do_test unique-2.9 { | ||
129 | catchsql { | ||
130 | CREATE INDEX i2 ON t2(a); | ||
131 | } | ||
132 | } {0 {}} | ||
133 | integrity_check unique-2.10 | ||
134 | |||
135 | # Test the UNIQUE keyword as used on two or more fields. | ||
136 | # | ||
137 | do_test unique-3.1 { | ||
138 | catchsql { | ||
139 | CREATE TABLE t3( | ||
140 | a int, | ||
141 | b int, | ||
142 | c int, | ||
143 | d int, | ||
144 | unique(a,c,d) | ||
145 | ); | ||
146 | } | ||
147 | } {0 {}} | ||
148 | do_test unique-3.2 { | ||
149 | catchsql { | ||
150 | INSERT INTO t3(a,b,c,d) VALUES(1,2,3,4); | ||
151 | SELECT * FROM t3 ORDER BY a,b,c,d; | ||
152 | } | ||
153 | } {0 {1 2 3 4}} | ||
154 | do_test unique-3.3 { | ||
155 | catchsql { | ||
156 | INSERT INTO t3(a,b,c,d) VALUES(1,2,3,5); | ||
157 | SELECT * FROM t3 ORDER BY a,b,c,d; | ||
158 | } | ||
159 | } {0 {1 2 3 4 1 2 3 5}} | ||
160 | do_test unique-3.4 { | ||
161 | catchsql { | ||
162 | INSERT INTO t3(a,b,c,d) VALUES(1,4,3,5); | ||
163 | SELECT * FROM t3 ORDER BY a,b,c,d; | ||
164 | } | ||
165 | } {1 {columns a, c, d are not unique}} | ||
166 | integrity_check unique-3.5 | ||
167 | |||
168 | # Make sure NULLs are distinct as far as the UNIQUE tests are | ||
169 | # concerned. | ||
170 | # | ||
171 | do_test unique-4.1 { | ||
172 | execsql { | ||
173 | CREATE TABLE t4(a UNIQUE, b, c, UNIQUE(b,c)); | ||
174 | INSERT INTO t4 VALUES(1,2,3); | ||
175 | INSERT INTO t4 VALUES(NULL, 2, NULL); | ||
176 | SELECT * FROM t4; | ||
177 | } | ||
178 | } {1 2 3 {} 2 {}} | ||
179 | do_test unique-4.2 { | ||
180 | catchsql { | ||
181 | INSERT INTO t4 VALUES(NULL, 3, 4); | ||
182 | } | ||
183 | } {0 {}} | ||
184 | do_test unique-4.3 { | ||
185 | execsql { | ||
186 | SELECT * FROM t4 | ||
187 | } | ||
188 | } {1 2 3 {} 2 {} {} 3 4} | ||
189 | do_test unique-4.4 { | ||
190 | catchsql { | ||
191 | INSERT INTO t4 VALUES(2, 2, NULL); | ||
192 | } | ||
193 | } {0 {}} | ||
194 | do_test unique-4.5 { | ||
195 | execsql { | ||
196 | SELECT * FROM t4 | ||
197 | } | ||
198 | } {1 2 3 {} 2 {} {} 3 4 2 2 {}} | ||
199 | |||
200 | # Ticket #1301. Any NULL value in a set of unique columns should | ||
201 | # cause the rows to be distinct. | ||
202 | # | ||
203 | do_test unique-4.6 { | ||
204 | catchsql { | ||
205 | INSERT INTO t4 VALUES(NULL, 2, NULL); | ||
206 | } | ||
207 | } {0 {}} | ||
208 | do_test unique-4.7 { | ||
209 | execsql {SELECT * FROM t4} | ||
210 | } {1 2 3 {} 2 {} {} 3 4 2 2 {} {} 2 {}} | ||
211 | do_test unique-4.8 { | ||
212 | catchsql {CREATE UNIQUE INDEX i4a ON t4(a,b)} | ||
213 | } {0 {}} | ||
214 | do_test unique-4.9 { | ||
215 | catchsql {CREATE UNIQUE INDEX i4b ON t4(a,b,c)} | ||
216 | } {0 {}} | ||
217 | do_test unique-4.10 { | ||
218 | catchsql {CREATE UNIQUE INDEX i4c ON t4(b)} | ||
219 | } {1 {indexed columns are not unique}} | ||
220 | integrity_check unique-4.99 | ||
221 | |||
222 | # Test the error message generation logic. In particular, make sure we | ||
223 | # do not overflow the static buffer used to generate the error message. | ||
224 | # | ||
225 | do_test unique-5.1 { | ||
226 | execsql { | ||
227 | CREATE TABLE t5( | ||
228 | first_column_with_long_name, | ||
229 | second_column_with_long_name, | ||
230 | third_column_with_long_name, | ||
231 | fourth_column_with_long_name, | ||
232 | fifth_column_with_long_name, | ||
233 | sixth_column_with_long_name, | ||
234 | UNIQUE( | ||
235 | first_column_with_long_name, | ||
236 | second_column_with_long_name, | ||
237 | third_column_with_long_name, | ||
238 | fourth_column_with_long_name, | ||
239 | fifth_column_with_long_name, | ||
240 | sixth_column_with_long_name | ||
241 | ) | ||
242 | ); | ||
243 | INSERT INTO t5 VALUES(1,2,3,4,5,6); | ||
244 | SELECT * FROM t5; | ||
245 | } | ||
246 | } {1 2 3 4 5 6} | ||
247 | do_test unique-5.2 { | ||
248 | catchsql { | ||
249 | INSERT INTO t5 VALUES(1,2,3,4,5,6); | ||
250 | } | ||
251 | } {1 {columns first_column_with_long_name, second_column_with_long_name, third_column_with_long_name, fourth_column_with_long_name, fifth_column_with_long_name, ... are not unique}} | ||
252 | |||
253 | finish_test | ||