Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Avoid attempting to call savepoint related methods on deleted sqlite3_vtab objects. Fix for [48f299634a]. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3565fcf898960d7a23d23a2f363b039b |
User & Date: | dan 2011-10-29 11:43:04 |
References
2011-10-29
| ||
11:46 | • Closed ticket [48f29963]: Crash in SAVEPOINT within a transaction that writes to then drops an FTS table plus 2 other changes (artifact: 0d0b3bfb user: dan) | |
Context
2011-10-29
| ||
12:42 | Fix some code formatting in sqlite3Ext.h to avoid lines longer than 80 characters. (check-in: 3ec20c30 user: drh tags: trunk) | |
11:43 | Avoid attempting to call savepoint related methods on deleted sqlite3_vtab objects. Fix for [48f299634a]. (check-in: 3565fcf8 user: dan tags: trunk) | |
01:33 | Avoid reporting a NOMEM error if a memory allocation fails while copying the error message from a prepared statement into the database connection. (check-in: dcb78793 user: drh tags: trunk) | |
Changes
Changes to src/vtab.c.
︙ | ︙ | |||
887 888 889 890 891 892 893 | assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN ); assert( iSavepoint>=0 ); if( db->aVTrans ){ int i; for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){ VTable *pVTab = db->aVTrans[i]; const sqlite3_module *pMod = pVTab->pMod->pModule; | | | | 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 | assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN ); assert( iSavepoint>=0 ); if( db->aVTrans ){ int i; for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){ VTable *pVTab = db->aVTrans[i]; const sqlite3_module *pMod = pVTab->pMod->pModule; if( pVTab->pVtab && pMod->iVersion>=2 ){ int (*xMethod)(sqlite3_vtab *, int); switch( op ){ case SAVEPOINT_BEGIN: xMethod = pMod->xSavepoint; pVTab->iSavepoint = iSavepoint+1; break; case SAVEPOINT_ROLLBACK: xMethod = pMod->xRollbackTo; break; default: xMethod = pMod->xRelease; break; } if( xMethod && pVTab->iSavepoint>iSavepoint ){ rc = xMethod(pVTab->pVtab, iSavepoint); } } } } return rc; } |
︙ | ︙ |
Added test/fts3drop.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # 2011 October 29 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #************************************************************************* # This file implements regression tests for SQLite library. The # focus of this script is testing the FTS3 module. More specifically, # that DROP TABLE commands can co-exist with savepoints inside transactions. # See ticket [48f299634a] for details. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix fts3drop # If SQLITE_ENABLE_FTS3 is defined, omit this file. ifcapable !fts3 { finish_test return } do_execsql_test 1.1 { CREATE VIRTUAL TABLE f1 USING fts3; INSERT INTO f1 VALUES('a b c'); } do_execsql_test 1.2 { BEGIN; INSERT INTO f1 VALUES('d e f'); SAVEPOINT one; INSERT INTO f1 VALUES('g h i'); DROP TABLE f1; ROLLBACK TO one; COMMIT; } do_execsql_test 1.3 { SELECT * FROM f1; } {{a b c} {d e f}} do_execsql_test 1.4 { BEGIN; INSERT INTO f1 VALUES('g h i'); SAVEPOINT one; INSERT INTO f1 VALUES('j k l'); DROP TABLE f1; RELEASE one; ROLLBACK; } do_execsql_test 1.5 { SELECT * FROM f1; } {{a b c} {d e f}} finish_test |