xref: /illumos-gate/usr/src/lib/libsqlite/test/intpkey.test (revision 1da57d551424de5a9d469760be7c4b4d4f10a755)
1*1da57d55SToomas Soome#
2c5c4113dSnw141292# 2001 September 15
3c5c4113dSnw141292#
4c5c4113dSnw141292# The author disclaims copyright to this source code.  In place of
5c5c4113dSnw141292# a legal notice, here is a blessing:
6c5c4113dSnw141292#
7c5c4113dSnw141292#    May you do good and not evil.
8c5c4113dSnw141292#    May you find forgiveness for yourself and forgive others.
9c5c4113dSnw141292#    May you share freely, never taking more than you give.
10c5c4113dSnw141292#
11c5c4113dSnw141292#***********************************************************************
12c5c4113dSnw141292# This file implements regression tests for SQLite library.
13c5c4113dSnw141292#
14c5c4113dSnw141292# This file implements tests for the special processing associated
15c5c4113dSnw141292# with INTEGER PRIMARY KEY columns.
16c5c4113dSnw141292#
17c5c4113dSnw141292# $Id: intpkey.test,v 1.14 2003/06/15 23:42:25 drh Exp $
18c5c4113dSnw141292
19c5c4113dSnw141292set testdir [file dirname $argv0]
20c5c4113dSnw141292source $testdir/tester.tcl
21c5c4113dSnw141292
22c5c4113dSnw141292# Create a table with a primary key and a datatype other than
23c5c4113dSnw141292# integer
24c5c4113dSnw141292#
25c5c4113dSnw141292do_test intpkey-1.0 {
26c5c4113dSnw141292  execsql {
27c5c4113dSnw141292    CREATE TABLE t1(a TEXT PRIMARY KEY, b, c);
28c5c4113dSnw141292  }
29c5c4113dSnw141292} {}
30c5c4113dSnw141292
31c5c4113dSnw141292# There should be an index associated with the primary key
32c5c4113dSnw141292#
33c5c4113dSnw141292do_test intpkey-1.1 {
34c5c4113dSnw141292  execsql {
35c5c4113dSnw141292    SELECT name FROM sqlite_master
36c5c4113dSnw141292    WHERE type='index' AND tbl_name='t1';
37c5c4113dSnw141292  }
38c5c4113dSnw141292} {{(t1 autoindex 1)}}
39c5c4113dSnw141292
40c5c4113dSnw141292# Now create a table with an integer primary key and verify that
41c5c4113dSnw141292# there is no associated index.
42c5c4113dSnw141292#
43c5c4113dSnw141292do_test intpkey-1.2 {
44c5c4113dSnw141292  execsql {
45c5c4113dSnw141292    DROP TABLE t1;
46c5c4113dSnw141292    CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c);
47c5c4113dSnw141292    SELECT name FROM sqlite_master
48c5c4113dSnw141292      WHERE type='index' AND tbl_name='t1';
49c5c4113dSnw141292  }
50c5c4113dSnw141292} {}
51c5c4113dSnw141292
52c5c4113dSnw141292# Insert some records into the new table.  Specify the primary key
53c5c4113dSnw141292# and verify that the key is used as the record number.
54c5c4113dSnw141292#
55c5c4113dSnw141292do_test intpkey-1.3 {
56c5c4113dSnw141292  execsql {
57c5c4113dSnw141292    INSERT INTO t1 VALUES(5,'hello','world');
58c5c4113dSnw141292  }
59c5c4113dSnw141292  db last_insert_rowid
60c5c4113dSnw141292} {5}
61c5c4113dSnw141292do_test intpkey-1.4 {
62c5c4113dSnw141292  execsql {
63c5c4113dSnw141292    SELECT * FROM t1;
64c5c4113dSnw141292  }
65c5c4113dSnw141292} {5 hello world}
66c5c4113dSnw141292do_test intpkey-1.5 {
67c5c4113dSnw141292  execsql {
68c5c4113dSnw141292    SELECT rowid, * FROM t1;
69c5c4113dSnw141292  }
70c5c4113dSnw141292} {5 5 hello world}
71c5c4113dSnw141292
72c5c4113dSnw141292# Attempting to insert a duplicate primary key should give a constraint
73c5c4113dSnw141292# failure.
74c5c4113dSnw141292#
75c5c4113dSnw141292do_test intpkey-1.6 {
76c5c4113dSnw141292  set r [catch {execsql {
77c5c4113dSnw141292     INSERT INTO t1 VALUES(5,'second','entry');
78c5c4113dSnw141292  }} msg]
79c5c4113dSnw141292  lappend r $msg
80c5c4113dSnw141292} {1 {PRIMARY KEY must be unique}}
81c5c4113dSnw141292do_test intpkey-1.7 {
82c5c4113dSnw141292  execsql {
83c5c4113dSnw141292    SELECT rowid, * FROM t1;
84c5c4113dSnw141292  }
85c5c4113dSnw141292} {5 5 hello world}
86c5c4113dSnw141292do_test intpkey-1.8 {
87c5c4113dSnw141292  set r [catch {execsql {
88c5c4113dSnw141292     INSERT INTO t1 VALUES(6,'second','entry');
89c5c4113dSnw141292  }} msg]
90c5c4113dSnw141292  lappend r $msg
91c5c4113dSnw141292} {0 {}}
92c5c4113dSnw141292do_test intpkey-1.8.1 {
93c5c4113dSnw141292  db last_insert_rowid
94c5c4113dSnw141292} {6}
95c5c4113dSnw141292do_test intpkey-1.9 {
96c5c4113dSnw141292  execsql {
97c5c4113dSnw141292    SELECT rowid, * FROM t1;
98c5c4113dSnw141292  }
99c5c4113dSnw141292} {5 5 hello world 6 6 second entry}
100c5c4113dSnw141292
101c5c4113dSnw141292# A ROWID is automatically generated for new records that do not specify
102c5c4113dSnw141292# the integer primary key.
103c5c4113dSnw141292#
104c5c4113dSnw141292do_test intpkey-1.10 {
105c5c4113dSnw141292  execsql {
106c5c4113dSnw141292    INSERT INTO t1(b,c) VALUES('one','two');
107c5c4113dSnw141292    SELECT b FROM t1 ORDER BY b;
108c5c4113dSnw141292  }
109c5c4113dSnw141292} {hello one second}
110c5c4113dSnw141292
111c5c4113dSnw141292# Try to change the ROWID for the new entry.
112c5c4113dSnw141292#
113c5c4113dSnw141292do_test intpkey-1.11 {
114c5c4113dSnw141292  execsql {
115c5c4113dSnw141292    UPDATE t1 SET a=4 WHERE b='one';
116c5c4113dSnw141292    SELECT * FROM t1;
117c5c4113dSnw141292  }
118c5c4113dSnw141292} {4 one two 5 hello world 6 second entry}
119c5c4113dSnw141292
120c5c4113dSnw141292# Make sure SELECT statements are able to use the primary key column
121c5c4113dSnw141292# as an index.
122c5c4113dSnw141292#
123c5c4113dSnw141292do_test intpkey-1.12 {
124c5c4113dSnw141292  execsql {
125c5c4113dSnw141292    SELECT * FROM t1 WHERE a==4;
126c5c4113dSnw141292  }
127c5c4113dSnw141292} {4 one two}
128c5c4113dSnw141292
129c5c4113dSnw141292# Try to insert a non-integer value into the primary key field.  This
130c5c4113dSnw141292# should result in a data type mismatch.
131c5c4113dSnw141292#
132c5c4113dSnw141292do_test intpkey-1.13.1 {
133c5c4113dSnw141292  set r [catch {execsql {
134c5c4113dSnw141292    INSERT INTO t1 VALUES('x','y','z');
135c5c4113dSnw141292  }} msg]
136c5c4113dSnw141292  lappend r $msg
137c5c4113dSnw141292} {1 {datatype mismatch}}
138c5c4113dSnw141292do_test intpkey-1.13.2 {
139c5c4113dSnw141292  set r [catch {execsql {
140c5c4113dSnw141292    INSERT INTO t1 VALUES('','y','z');
141c5c4113dSnw141292  }} msg]
142c5c4113dSnw141292  lappend r $msg
143c5c4113dSnw141292} {1 {datatype mismatch}}
144c5c4113dSnw141292do_test intpkey-1.14 {
145c5c4113dSnw141292  set r [catch {execsql {
146c5c4113dSnw141292    INSERT INTO t1 VALUES(3.4,'y','z');
147c5c4113dSnw141292  }} msg]
148c5c4113dSnw141292  lappend r $msg
149c5c4113dSnw141292} {1 {datatype mismatch}}
150c5c4113dSnw141292do_test intpkey-1.15 {
151c5c4113dSnw141292  set r [catch {execsql {
152c5c4113dSnw141292    INSERT INTO t1 VALUES(-3,'y','z');
153c5c4113dSnw141292  }} msg]
154c5c4113dSnw141292  lappend r $msg
155c5c4113dSnw141292} {0 {}}
156c5c4113dSnw141292do_test intpkey-1.16 {
157c5c4113dSnw141292  execsql {SELECT * FROM t1}
158c5c4113dSnw141292} {-3 y z 4 one two 5 hello world 6 second entry}
159c5c4113dSnw141292
160c5c4113dSnw141292#### INDICES
161c5c4113dSnw141292# Check to make sure indices work correctly with integer primary keys
162c5c4113dSnw141292#
163c5c4113dSnw141292do_test intpkey-2.1 {
164c5c4113dSnw141292  execsql {
165c5c4113dSnw141292    CREATE INDEX i1 ON t1(b);
166c5c4113dSnw141292    SELECT * FROM t1 WHERE b=='y'
167c5c4113dSnw141292  }
168c5c4113dSnw141292} {-3 y z}
169c5c4113dSnw141292do_test intpkey-2.1.1 {
170c5c4113dSnw141292  execsql {
171c5c4113dSnw141292    SELECT * FROM t1 WHERE b=='y' AND rowid<0
172c5c4113dSnw141292  }
173c5c4113dSnw141292} {-3 y z}
174c5c4113dSnw141292do_test intpkey-2.1.2 {
175c5c4113dSnw141292  execsql {
176c5c4113dSnw141292    SELECT * FROM t1 WHERE b=='y' AND rowid<0 AND rowid>=-20
177c5c4113dSnw141292  }
178c5c4113dSnw141292} {-3 y z}
179c5c4113dSnw141292do_test intpkey-2.1.3 {
180c5c4113dSnw141292  execsql {
181c5c4113dSnw141292    SELECT * FROM t1 WHERE b>='y'
182c5c4113dSnw141292  }
183c5c4113dSnw141292} {-3 y z}
184c5c4113dSnw141292do_test intpkey-2.1.4 {
185c5c4113dSnw141292  execsql {
186c5c4113dSnw141292    SELECT * FROM t1 WHERE b>='y' AND rowid<10
187c5c4113dSnw141292  }
188c5c4113dSnw141292} {-3 y z}
189c5c4113dSnw141292
190c5c4113dSnw141292do_test intpkey-2.2 {
191c5c4113dSnw141292  execsql {
192c5c4113dSnw141292    UPDATE t1 SET a=8 WHERE b=='y';
193c5c4113dSnw141292    SELECT * FROM t1 WHERE b=='y';
194c5c4113dSnw141292  }
195c5c4113dSnw141292} {8 y z}
196c5c4113dSnw141292do_test intpkey-2.3 {
197c5c4113dSnw141292  execsql {
198c5c4113dSnw141292    SELECT rowid, * FROM t1;
199c5c4113dSnw141292  }
200c5c4113dSnw141292} {4 4 one two 5 5 hello world 6 6 second entry 8 8 y z}
201c5c4113dSnw141292do_test intpkey-2.4 {
202c5c4113dSnw141292  execsql {
203c5c4113dSnw141292    SELECT rowid, * FROM t1 WHERE b<'second'
204c5c4113dSnw141292  }
205c5c4113dSnw141292} {5 5 hello world 4 4 one two}
206c5c4113dSnw141292do_test intpkey-2.4.1 {
207c5c4113dSnw141292  execsql {
208c5c4113dSnw141292    SELECT rowid, * FROM t1 WHERE 'second'>b
209c5c4113dSnw141292  }
210c5c4113dSnw141292} {5 5 hello world 4 4 one two}
211c5c4113dSnw141292do_test intpkey-2.4.2 {
212c5c4113dSnw141292  execsql {
213c5c4113dSnw141292    SELECT rowid, * FROM t1 WHERE 8>rowid AND 'second'>b
214c5c4113dSnw141292  }
215c5c4113dSnw141292} {4 4 one two 5 5 hello world}
216c5c4113dSnw141292do_test intpkey-2.4.3 {
217c5c4113dSnw141292  execsql {
218c5c4113dSnw141292    SELECT rowid, * FROM t1 WHERE 8>rowid AND 'second'>b AND 0<rowid
219c5c4113dSnw141292  }
220c5c4113dSnw141292} {4 4 one two 5 5 hello world}
221c5c4113dSnw141292do_test intpkey-2.5 {
222c5c4113dSnw141292  execsql {
223c5c4113dSnw141292    SELECT rowid, * FROM t1 WHERE b>'a'
224c5c4113dSnw141292  }
225c5c4113dSnw141292} {5 5 hello world 4 4 one two 6 6 second entry 8 8 y z}
226c5c4113dSnw141292do_test intpkey-2.6 {
227c5c4113dSnw141292  execsql {
228c5c4113dSnw141292    DELETE FROM t1 WHERE rowid=4;
229c5c4113dSnw141292    SELECT * FROM t1 WHERE b>'a';
230c5c4113dSnw141292  }
231c5c4113dSnw141292} {5 hello world 6 second entry 8 y z}
232c5c4113dSnw141292do_test intpkey-2.7 {
233c5c4113dSnw141292  execsql {
234c5c4113dSnw141292    UPDATE t1 SET a=-4 WHERE rowid=8;
235c5c4113dSnw141292    SELECT * FROM t1 WHERE b>'a';
236c5c4113dSnw141292  }
237c5c4113dSnw141292} {5 hello world 6 second entry -4 y z}
238c5c4113dSnw141292do_test intpkey-2.7 {
239c5c4113dSnw141292  execsql {
240c5c4113dSnw141292    SELECT * FROM t1
241c5c4113dSnw141292  }
242c5c4113dSnw141292} {-4 y z 5 hello world 6 second entry}
243c5c4113dSnw141292
244c5c4113dSnw141292# Do an SQL statement.  Append the search count to the end of the result.
245c5c4113dSnw141292#
246c5c4113dSnw141292proc count sql {
247c5c4113dSnw141292  set ::sqlite_search_count 0
248c5c4113dSnw141292  return [concat [execsql $sql] $::sqlite_search_count]
249c5c4113dSnw141292}
250c5c4113dSnw141292
251c5c4113dSnw141292# Create indices that include the integer primary key as one of their
252c5c4113dSnw141292# columns.
253c5c4113dSnw141292#
254c5c4113dSnw141292do_test intpkey-3.1 {
255c5c4113dSnw141292  execsql {
256c5c4113dSnw141292    CREATE INDEX i2 ON t1(a);
257c5c4113dSnw141292  }
258c5c4113dSnw141292} {}
259c5c4113dSnw141292do_test intpkey-3.2 {
260c5c4113dSnw141292  count {
261c5c4113dSnw141292    SELECT * FROM t1 WHERE a=5;
262c5c4113dSnw141292  }
263c5c4113dSnw141292} {5 hello world 0}
264c5c4113dSnw141292do_test intpkey-3.3 {
265c5c4113dSnw141292  count {
266c5c4113dSnw141292    SELECT * FROM t1 WHERE a>4 AND a<6;
267c5c4113dSnw141292  }
268c5c4113dSnw141292} {5 hello world 2}
269c5c4113dSnw141292do_test intpkey-3.4 {
270c5c4113dSnw141292  count {
271c5c4113dSnw141292    SELECT * FROM t1 WHERE b>='hello' AND b<'hello2';
272c5c4113dSnw141292  }
273c5c4113dSnw141292} {5 hello world 3}
274c5c4113dSnw141292do_test intpkey-3.5 {
275c5c4113dSnw141292  execsql {
276c5c4113dSnw141292    CREATE INDEX i3 ON t1(c,a);
277c5c4113dSnw141292  }
278c5c4113dSnw141292} {}
279c5c4113dSnw141292do_test intpkey-3.6 {
280c5c4113dSnw141292  count {
281c5c4113dSnw141292    SELECT * FROM t1 WHERE c=='world';
282c5c4113dSnw141292  }
283c5c4113dSnw141292} {5 hello world 3}
284c5c4113dSnw141292do_test intpkey-3.7 {
285c5c4113dSnw141292  execsql {INSERT INTO t1 VALUES(11,'hello','world')}
286c5c4113dSnw141292  count {
287c5c4113dSnw141292    SELECT * FROM t1 WHERE c=='world';
288c5c4113dSnw141292  }
289c5c4113dSnw141292} {5 hello world 11 hello world 5}
290c5c4113dSnw141292do_test intpkey-3.8 {
291c5c4113dSnw141292  count {
292c5c4113dSnw141292    SELECT * FROM t1 WHERE c=='world' AND a>7;
293c5c4113dSnw141292  }
294c5c4113dSnw141292} {11 hello world 5}
295c5c4113dSnw141292do_test intpkey-3.9 {
296c5c4113dSnw141292  count {
297c5c4113dSnw141292    SELECT * FROM t1 WHERE 7<a;
298c5c4113dSnw141292  }
299c5c4113dSnw141292} {11 hello world 1}
300c5c4113dSnw141292
301c5c4113dSnw141292# Test inequality constraints on integer primary keys and rowids
302c5c4113dSnw141292#
303c5c4113dSnw141292do_test intpkey-4.1 {
304c5c4113dSnw141292  count {
305c5c4113dSnw141292    SELECT * FROM t1 WHERE 11=rowid
306c5c4113dSnw141292  }
307c5c4113dSnw141292} {11 hello world 0}
308c5c4113dSnw141292do_test intpkey-4.2 {
309c5c4113dSnw141292  count {
310c5c4113dSnw141292    SELECT * FROM t1 WHERE 11=rowid AND b=='hello'
311c5c4113dSnw141292  }
312c5c4113dSnw141292} {11 hello world 0}
313c5c4113dSnw141292do_test intpkey-4.3 {
314c5c4113dSnw141292  count {
315c5c4113dSnw141292    SELECT * FROM t1 WHERE 11=rowid AND b=='hello' AND c IS NOT NULL;
316c5c4113dSnw141292  }
317c5c4113dSnw141292} {11 hello world 0}
318c5c4113dSnw141292do_test intpkey-4.4 {
319c5c4113dSnw141292  count {
320c5c4113dSnw141292    SELECT * FROM t1 WHERE rowid==11
321c5c4113dSnw141292  }
322c5c4113dSnw141292} {11 hello world 0}
323c5c4113dSnw141292do_test intpkey-4.5 {
324c5c4113dSnw141292  count {
325c5c4113dSnw141292    SELECT * FROM t1 WHERE oid==11 AND b=='hello'
326c5c4113dSnw141292  }
327c5c4113dSnw141292} {11 hello world 0}
328c5c4113dSnw141292do_test intpkey-4.6 {
329c5c4113dSnw141292  count {
330c5c4113dSnw141292    SELECT * FROM t1 WHERE a==11 AND b=='hello' AND c IS NOT NULL;
331c5c4113dSnw141292  }
332c5c4113dSnw141292} {11 hello world 0}
333c5c4113dSnw141292
334c5c4113dSnw141292do_test intpkey-4.7 {
335c5c4113dSnw141292  count {
336c5c4113dSnw141292    SELECT * FROM t1 WHERE 8<rowid;
337c5c4113dSnw141292  }
338c5c4113dSnw141292} {11 hello world 1}
339c5c4113dSnw141292do_test intpkey-4.8 {
340c5c4113dSnw141292  count {
341c5c4113dSnw141292    SELECT * FROM t1 WHERE 8<rowid AND 11>=oid;
342c5c4113dSnw141292  }
343c5c4113dSnw141292} {11 hello world 1}
344c5c4113dSnw141292do_test intpkey-4.9 {
345c5c4113dSnw141292  count {
346c5c4113dSnw141292    SELECT * FROM t1 WHERE 11<=_rowid_ AND 12>=a;
347c5c4113dSnw141292  }
348c5c4113dSnw141292} {11 hello world 1}
349c5c4113dSnw141292do_test intpkey-4.10 {
350c5c4113dSnw141292  count {
351c5c4113dSnw141292    SELECT * FROM t1 WHERE 0>=_rowid_;
352c5c4113dSnw141292  }
353c5c4113dSnw141292} {-4 y z 1}
354c5c4113dSnw141292do_test intpkey-4.11 {
355c5c4113dSnw141292  count {
356c5c4113dSnw141292    SELECT * FROM t1 WHERE a<0;
357c5c4113dSnw141292  }
358c5c4113dSnw141292} {-4 y z 1}
359c5c4113dSnw141292do_test intpkey-4.12 {
360c5c4113dSnw141292  count {
361c5c4113dSnw141292    SELECT * FROM t1 WHERE a<0 AND a>10;
362c5c4113dSnw141292  }
363c5c4113dSnw141292} {1}
364c5c4113dSnw141292
365c5c4113dSnw141292# Make sure it is OK to insert a rowid of 0
366c5c4113dSnw141292#
367c5c4113dSnw141292do_test intpkey-5.1 {
368c5c4113dSnw141292  execsql {
369c5c4113dSnw141292    INSERT INTO t1 VALUES(0,'zero','entry');
370c5c4113dSnw141292  }
371c5c4113dSnw141292  count {
372c5c4113dSnw141292    SELECT * FROM t1 WHERE a=0;
373c5c4113dSnw141292  }
374c5c4113dSnw141292} {0 zero entry 0}
375c5c4113dSnw141292do_test intpkey=5.2 {
376c5c4113dSnw141292  execsql {
377c5c4113dSnw141292    SELECT rowid, a FROM t1
378c5c4113dSnw141292  }
379c5c4113dSnw141292} {-4 -4 0 0 5 5 6 6 11 11}
380c5c4113dSnw141292
381c5c4113dSnw141292# Test the ability of the COPY command to put data into a
382c5c4113dSnw141292# table that contains an integer primary key.
383c5c4113dSnw141292#
384c5c4113dSnw141292do_test intpkey-6.1 {
385c5c4113dSnw141292  set f [open ./data1.txt w]
386c5c4113dSnw141292  puts $f "20\tb-20\tc-20"
387c5c4113dSnw141292  puts $f "21\tb-21\tc-21"
388c5c4113dSnw141292  puts $f "22\tb-22\tc-22"
389c5c4113dSnw141292  close $f
390c5c4113dSnw141292  execsql {
391c5c4113dSnw141292    COPY t1 FROM 'data1.txt';
392c5c4113dSnw141292    SELECT * FROM t1 WHERE a>=20;
393c5c4113dSnw141292  }
394c5c4113dSnw141292} {20 b-20 c-20 21 b-21 c-21 22 b-22 c-22}
395c5c4113dSnw141292do_test intpkey-6.2 {
396c5c4113dSnw141292  execsql {
397c5c4113dSnw141292    SELECT * FROM t1 WHERE b=='hello'
398c5c4113dSnw141292  }
399c5c4113dSnw141292} {5 hello world 11 hello world}
400c5c4113dSnw141292do_test intpkey-6.3 {
401c5c4113dSnw141292  execsql {
402c5c4113dSnw141292    DELETE FROM t1 WHERE b='b-21';
403c5c4113dSnw141292    SELECT * FROM t1 WHERE b=='b-21';
404c5c4113dSnw141292  }
405c5c4113dSnw141292} {}
406c5c4113dSnw141292do_test intpkey-6.4 {
407c5c4113dSnw141292  execsql {
408c5c4113dSnw141292    SELECT * FROM t1 WHERE a>=20
409c5c4113dSnw141292  }
410c5c4113dSnw141292} {20 b-20 c-20 22 b-22 c-22}
411c5c4113dSnw141292
412c5c4113dSnw141292# Do an insert of values with the columns specified out of order.
413c5c4113dSnw141292#
414c5c4113dSnw141292do_test intpkey-7.1 {
415c5c4113dSnw141292  execsql {
416c5c4113dSnw141292    INSERT INTO t1(c,b,a) VALUES('row','new',30);
417c5c4113dSnw141292    SELECT * FROM t1 WHERE rowid>=30;
418c5c4113dSnw141292  }
419c5c4113dSnw141292} {30 new row}
420c5c4113dSnw141292do_test intpkey-7.2 {
421c5c4113dSnw141292  execsql {
422c5c4113dSnw141292    SELECT * FROM t1 WHERE rowid>20;
423c5c4113dSnw141292  }
424c5c4113dSnw141292} {22 b-22 c-22 30 new row}
425c5c4113dSnw141292
426c5c4113dSnw141292# Do an insert from a select statement.
427c5c4113dSnw141292#
428c5c4113dSnw141292do_test intpkey-8.1 {
429c5c4113dSnw141292  execsql {
430c5c4113dSnw141292    CREATE TABLE t2(x INTEGER PRIMARY KEY, y, z);
431c5c4113dSnw141292    INSERT INTO t2 SELECT * FROM t1;
432c5c4113dSnw141292    SELECT rowid FROM t2;
433c5c4113dSnw141292  }
434c5c4113dSnw141292} {-4 0 5 6 11 20 22 30}
435c5c4113dSnw141292do_test intpkey-8.2 {
436c5c4113dSnw141292  execsql {
437c5c4113dSnw141292    SELECT x FROM t2;
438c5c4113dSnw141292  }
439c5c4113dSnw141292} {-4 0 5 6 11 20 22 30}
440c5c4113dSnw141292
441c5c4113dSnw141292do_test intpkey-9.1 {
442c5c4113dSnw141292  execsql {
443c5c4113dSnw141292    UPDATE t1 SET c='www' WHERE c='world';
444c5c4113dSnw141292    SELECT rowid, a, c FROM t1 WHERE c=='www';
445c5c4113dSnw141292  }
446c5c4113dSnw141292} {5 5 www 11 11 www}
447c5c4113dSnw141292
448c5c4113dSnw141292
449c5c4113dSnw141292# Check insert of NULL for primary key
450c5c4113dSnw141292#
451c5c4113dSnw141292do_test intpkey-10.1 {
452c5c4113dSnw141292  execsql {
453c5c4113dSnw141292    DROP TABLE t2;
454c5c4113dSnw141292    CREATE TABLE t2(x INTEGER PRIMARY KEY, y, z);
455c5c4113dSnw141292    INSERT INTO t2 VALUES(NULL, 1, 2);
456c5c4113dSnw141292    SELECT * from t2;
457c5c4113dSnw141292  }
458c5c4113dSnw141292} {1 1 2}
459c5c4113dSnw141292do_test intpkey-10.2 {
460c5c4113dSnw141292  execsql {
461c5c4113dSnw141292    INSERT INTO t2 VALUES(NULL, 2, 3);
462c5c4113dSnw141292    SELECT * from t2 WHERE x=2;
463c5c4113dSnw141292  }
464c5c4113dSnw141292} {2 2 3}
465c5c4113dSnw141292do_test intpkey-10.3 {
466c5c4113dSnw141292  execsql {
467c5c4113dSnw141292    INSERT INTO t2 SELECT NULL, z, y FROM t2;
468c5c4113dSnw141292    SELECT * FROM t2;
469c5c4113dSnw141292  }
470c5c4113dSnw141292} {1 1 2 2 2 3 3 2 1 4 3 2}
471c5c4113dSnw141292
472c5c4113dSnw141292# This tests checks to see if a floating point number can be used
473c5c4113dSnw141292# to reference an integer primary key.
474c5c4113dSnw141292#
475c5c4113dSnw141292do_test intpkey-11.1 {
476c5c4113dSnw141292  execsql {
477c5c4113dSnw141292    SELECT b FROM t1 WHERE a=2.0+3.0;
478c5c4113dSnw141292  }
479c5c4113dSnw141292} {hello}
480c5c4113dSnw141292do_test intpkey-11.1 {
481c5c4113dSnw141292  execsql {
482c5c4113dSnw141292    SELECT b FROM t1 WHERE a=2.0+3.5;
483c5c4113dSnw141292  }
484c5c4113dSnw141292} {}
485c5c4113dSnw141292
486c5c4113dSnw141292integrity_check intpkey-12.1
487c5c4113dSnw141292
488c5c4113dSnw141292finish_test
489