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