Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Clear the BTCF_ValidNKey flag when putting a cursor into REQUIRESEEK state. Fix for [1b266395]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a6d5e4e8693bea3739c35fe9769ac9ab |
User & Date: | dan 2015-09-30 12:59:12.171 |
Context
2015-09-30
| ||
14:19 | Fix an assert() in btree.c that is only true for non-corrupt databases. (check-in: 29f7227ff1 user: drh tags: trunk) | |
12:59 | Clear the BTCF_ValidNKey flag when putting a cursor into REQUIRESEEK state. Fix for [1b266395]. (check-in: a6d5e4e869 user: dan tags: trunk) | |
11:19 | Improve error handling in shell command ".tables". (check-in: 31a91ee7d3 user: dan tags: trunk) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
657 658 659 660 661 662 663 | rc = saveCursorKey(pCur); if( rc==SQLITE_OK ){ btreeReleaseAllCursorPages(pCur); pCur->eState = CURSOR_REQUIRESEEK; } | | | 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 | rc = saveCursorKey(pCur); if( rc==SQLITE_OK ){ btreeReleaseAllCursorPages(pCur); pCur->eState = CURSOR_REQUIRESEEK; } pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl|BTCF_AtLast); return rc; } /* Forward reference */ static int SQLITE_NOINLINE saveCursorsOnList(BtCursor*,Pgno,BtCursor*); /* |
︙ | ︙ |
Changes to test/fkey1.test.
︙ | ︙ | |||
146 147 148 149 150 151 152 153 154 | SELECT 1, """5" FROM """4"; DELETE FROM """1"; SELECT 2, """5" FROM """4"; } {1 abc} do_execsql_test fkey1-4.2 { PRAGMA table_info="""1"; } {0 {"2} TEXT 0 {} 1 1 {"3} TEXT 0 {} 0} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | SELECT 1, """5" FROM """4"; DELETE FROM """1"; SELECT 2, """5" FROM """4"; } {1 abc} do_execsql_test fkey1-4.2 { PRAGMA table_info="""1"; } {0 {"2} TEXT 0 {} 1 1 {"3} TEXT 0 {} 0} #------------------------------------------------------------------------- # do_execsql_test fkey1-5.1 { CREATE TABLE t11( x INTEGER PRIMARY KEY, parent REFERENCES t11 ON DELETE CASCADE ); INSERT INTO t11 VALUES (1, NULL), (2, 1), (3, 2); } {} # The REPLACE part of this statement deletes the row (2, 1). Then the # DELETE CASCADE caused by deleting that row removes the (3, 2) row. Which # would have been the parent of the new row being inserted. Causing an # FK violation. # do_catchsql_test fkey1-5.2 { INSERT OR REPLACE INTO t11 VALUES (2, 3); } {1 {FOREIGN KEY constraint failed}} # A similar test to the above. do_execsql_test fkey1-5.3 { CREATE TABLE Foo ( Id INTEGER PRIMARY KEY, ParentId INTEGER REFERENCES Foo(Id) ON DELETE CASCADE, C1 ); INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (1, null, 'A'); INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (2, 1, 'A-2-1'); INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (3, 2, 'A-3-2'); INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (4, 3, 'A-4-3'); } do_catchsql_test fkey1-5.4 { INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (2, 3, 'A-2-3'); } {1 {FOREIGN KEY constraint failed}} finish_test |