Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | When an attempt is made to insert an explicit NULL into an INTEGER PRIMARY KEY column, automatically convert the NULL value into a unique integer key. This was already happening when an implied NULL was inserted - when the INTEGER PRIMARY KEY column was omitted from the list of columns being inserted. Patches from Christian Werner. (CVS 510) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9e3cf4aa2cb44932015b8bd3fd800d76 |
User & Date: | drh 2002-03-31 18:29:03.000 |
Context
2002-04-01
| ||
12:15 | Remove from the index page of the website hyperlinks that are not directly related to SQLite. (CVS 511) (check-in: 0cb5cfa814 user: drh tags: trunk) | |
2002-03-31
| ||
18:29 | When an attempt is made to insert an explicit NULL into an INTEGER PRIMARY KEY column, automatically convert the NULL value into a unique integer key. This was already happening when an implied NULL was inserted - when the INTEGER PRIMARY KEY column was omitted from the list of columns being inserted. Patches from Christian Werner. (CVS 510) (check-in: 9e3cf4aa2c user: drh tags: trunk) | |
2002-03-30
| ||
15:32 | Version 2.4.4 (CVS 509) (check-in: c4b6c0be00 user: drh tags: trunk) | |
Changes
Changes to VERSION.
|
| | | 1 | 2.4.5 |
Changes to src/insert.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle INSERT statements in SQLite. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle INSERT statements in SQLite. ** ** $Id: insert.c,v 1.48 2002/03/31 18:29:03 drh Exp $ */ #include "sqliteInt.h" /* ** This routine is call to handle SQL of the following forms: ** ** insert into TABLE (IDLIST) values(EXPRLIST) |
︙ | ︙ | |||
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | ** except when the table has an INTEGER PRIMARY KEY column, in which ** case the record number is the same as that column. */ if( keyColumn>=0 ){ if( srcTab>=0 ){ sqliteVdbeAddOp(v, OP_Column, srcTab, keyColumn); }else{ sqliteExprCode(pParse, pList->a[keyColumn].pExpr); } sqliteVdbeAddOp(v, OP_MustBeInt, 0, 0); }else{ sqliteVdbeAddOp(v, OP_NewRecno, base, 0); } /* Push onto the stack, data for all columns of the new entry, beginning | > > > > > > > > > | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | ** except when the table has an INTEGER PRIMARY KEY column, in which ** case the record number is the same as that column. */ if( keyColumn>=0 ){ if( srcTab>=0 ){ sqliteVdbeAddOp(v, OP_Column, srcTab, keyColumn); }else{ int addr; sqliteExprCode(pParse, pList->a[keyColumn].pExpr); /* If the PRIMARY KEY expression is NULL, then use OP_NewRecno ** to generate a unique primary key value. */ addr = sqliteVdbeAddOp(v, OP_Dup, 0, 1); sqliteVdbeAddOp(v, OP_NotNull, 0, addr+4); sqliteVdbeAddOp(v, OP_Pop, 1, 0); sqliteVdbeAddOp(v, OP_NewRecno, base, 0); } sqliteVdbeAddOp(v, OP_MustBeInt, 0, 0); }else{ sqliteVdbeAddOp(v, OP_NewRecno, base, 0); } /* Push onto the stack, data for all columns of the new entry, beginning |
︙ | ︙ |
Changes to test/intpkey.test.
︙ | ︙ | |||
9 10 11 12 13 14 15 | # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for the special processing associated # with INTEGER PRIMARY KEY columns. # | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for the special processing associated # with INTEGER PRIMARY KEY columns. # # $Id: intpkey.test,v 1.9 2002/03/31 18:29:03 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table with a primary key and a datatype other than # integer # |
︙ | ︙ | |||
434 435 436 437 438 439 440 441 | do_test intpkey-9.1 { execsql { UPDATE t1 SET c='www' WHERE c='world'; SELECT rowid, a, c FROM t1 WHERE c=='www'; } } {5 5 www 11 11 www} finish_test | > > > > > > > > > > > > > > > > > > | 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 | do_test intpkey-9.1 { execsql { UPDATE t1 SET c='www' WHERE c='world'; SELECT rowid, a, c FROM t1 WHERE c=='www'; } } {5 5 www 11 11 www} # Check insert of NULL for primary key # do_test intpkey-10.1 { execsql { DROP TABLE t2; CREATE TABLE t2(x INTEGER PRIMARY KEY, y, z); INSERT INTO t2 VALUES(NULL, 1, 2); SELECT * from t2; } } {1 1 2} do_test intpkey-10.2 { execsql { INSERT INTO t2 VALUES(NULL, 2, 3); SELECT * from t2 WHERE x=2; } } {2 2 3} finish_test |
Changes to www/changes.tcl.
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Mar 24 (2.4.4)} { <li>Allow "VIEW" to be a column name</li> <li>Added support for CASE expressions (patch from Dan Kennedy)</li> <li>Added RPMS to the delivery (patches from Doug Henry)</li> <li>Fix typos in the documentation</li> <li>Cut over configuration management to a new CVS repository with | > > > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Mar 31 (2.4.5)} { <li>When inserting an explicit NULL into an INTEGER PRIMARY KEY, convert the NULL value into a unique key automatically.</li> } chng {2002 Mar 24 (2.4.4)} { <li>Allow "VIEW" to be a column name</li> <li>Added support for CASE expressions (patch from Dan Kennedy)</li> <li>Added RPMS to the delivery (patches from Doug Henry)</li> <li>Fix typos in the documentation</li> <li>Cut over configuration management to a new CVS repository with |
︙ | ︙ |