Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an assert() failure that can occur if the user attempts to set an into an integer primary key column to a text value in a table that has a BEFORE UPDATE trigger. (CVS 5787) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c2cf9d60d6626844193b008a37e4417a |
User & Date: | danielk1977 2008-10-09 18:48:31.000 |
Context
2008-10-10
| ||
04:34 | Updated LIMIT support for DELETE/UPDATE. Omit option changed to SQLITE_ENABLE_UPDATE_DELETE_LIMIT. (CVS 5788) (check-in: c10e8a3c7a user: shane tags: trunk) | |
2008-10-09
| ||
18:48 | Fix an assert() failure that can occur if the user attempts to set an into an integer primary key column to a text value in a table that has a BEFORE UPDATE trigger. (CVS 5787) (check-in: c2cf9d60d6 user: danielk1977 tags: trunk) | |
17:57 | New speed testing tools. (CVS 5786) (check-in: 2d427746d5 user: drh tags: trunk) | |
Changes
Changes to src/update.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 UPDATE statements. ** | | | 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 UPDATE statements. ** ** $Id: update.c,v 1.185 2008/10/09 18:48:31 danielk1977 Exp $ */ #include "sqliteInt.h" #ifndef SQLITE_OMIT_VIRTUALTABLE /* Forward declaration */ static void updateVirtualTable( Parse *pParse, /* The parsing context */ |
︙ | ︙ | |||
429 430 431 432 433 434 435 436 437 438 439 440 441 442 | } sqlite3VdbeAddOp3(v, OP_Insert, oldIdx, regRow, regRowid); /* Generate the NEW table */ if( chngRowid ){ sqlite3ExprCodeAndCache(pParse, pRowidExpr, regRowid); }else{ sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regRowid); } regCols = sqlite3GetTempRange(pParse, pTab->nCol); for(i=0; i<pTab->nCol; i++){ if( i==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regCols+i); | > | 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 | } sqlite3VdbeAddOp3(v, OP_Insert, oldIdx, regRow, regRowid); /* Generate the NEW table */ if( chngRowid ){ sqlite3ExprCodeAndCache(pParse, pRowidExpr, regRowid); sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); }else{ sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regRowid); } regCols = sqlite3GetTempRange(pParse, pTab->nCol); for(i=0; i<pTab->nCol; i++){ if( i==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regCols+i); |
︙ | ︙ |
Changes to test/trigger1.test.
︙ | ︙ | |||
623 624 625 626 627 628 629 630 631 | } {main 21 22 23 temp 24 25 26 aux 27 28 29} } do_test trigger1-11.1 { catchsql {SELECT raise(abort,'message');} } {1 {RAISE() may only be used within a trigger-program}} finish_test | > > > > > > > > > > > | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 | } {main 21 22 23 temp 24 25 26 aux 27 28 29} } do_test trigger1-11.1 { catchsql {SELECT raise(abort,'message');} } {1 {RAISE() may only be used within a trigger-program}} do_test trigger1-15.1 { execsql { CREATE TABLE tA(a INTEGER PRIMARY KEY, b, c); CREATE TRIGGER tA_trigger BEFORE UPDATE ON "tA" BEGIN SELECT 1; END; INSERT INTO tA VALUES(1, 2, 3); } catchsql { UPDATE tA SET a = 'abc' } } {1 {datatype mismatch}} do_test trigger1-15.2 { catchsql { INSERT INTO tA VALUES('abc', 2, 3) } } {1 {datatype mismatch}} finish_test |