Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Replicates http://www.sqlite.org/cvstrac/chngview?cn=4151 which
modified fts2:
Modify handling of SQLITE_SCHEMA in fts2 code. An SQLITE_SCHEMA error may cause SQLite to reload the internal schema, deleting and recreating v-table objects. So the sqlite3_vtab structure can be deleted out from under a v-table implementation. (CVS 4183) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f9020cffda02923ef45979bb447ec2e2 |
User & Date: | shess 2007-07-25 00:38:06.000 |
Context
2007-07-25
| ||
00:56 | Implement xRename() for fts1 so that it is possible to rename fts1 tables. See http://www.sqlite.org/cvstrac/chngview?cn=4143 (CVS 4184) (check-in: febf75f022 user: shess tags: trunk) | |
00:38 |
Replicates http://www.sqlite.org/cvstrac/chngview?cn=4151 which
modified fts2:
Modify handling of SQLITE_SCHEMA in fts2 code. An SQLITE_SCHEMA error may cause SQLite to reload the internal schema, deleting and recreating v-table objects. So the sqlite3_vtab structure can be deleted out from under a v-table implementation. (CVS 4183) (check-in: f9020cffda user: shess tags: trunk) | |
00:28 | Sorry, previous check-in included a last-minute "Did it really work?" change :-). (CVS 4182) (check-in: 5db25e369a user: shess tags: trunk) | |
Changes
Changes to ext/fts1/fts1.c.
︙ | ︙ | |||
1189 1190 1191 1192 1193 1194 1195 | sqlite3_stmt **ppStmt){ int rc; sqlite3_stmt *s = *ppStmt; assert( iStmt<MAX_STMT ); assert( s==v->pFulltextStatements[iStmt] ); while( (rc=sqlite3_step(s))!=SQLITE_DONE && rc!=SQLITE_ROW ){ | < < < | | | < < < | | < | > | < | 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 | sqlite3_stmt **ppStmt){ int rc; sqlite3_stmt *s = *ppStmt; assert( iStmt<MAX_STMT ); assert( s==v->pFulltextStatements[iStmt] ); while( (rc=sqlite3_step(s))!=SQLITE_DONE && rc!=SQLITE_ROW ){ if( rc==SQLITE_BUSY ) continue; if( rc!=SQLITE_ERROR ) return rc; /* If an SQLITE_SCHEMA error has occured, then finalizing this * statement is going to delete the fulltext_vtab structure. If * the statement just executed is in the pFulltextStatements[] * array, it will be finalized twice. So remove it before * calling sqlite3_finalize(). */ v->pFulltextStatements[iStmt] = NULL; rc = sqlite3_finalize(s); break; } return rc; err: sqlite3_finalize(s); return rc; } |
︙ | ︙ |
Added test/fts1n.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 | # 2007 July 24 # # 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 FTS1 module for errors in the handling # of SQLITE_SCHEMA. # # $Id: fts1n.test,v 1.1 2007/07/25 00:38:06 shess Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl # If SQLITE_ENABLE_FTS1 is not defined, omit this file. ifcapable !fts1 { finish_test return } do_test fts1m-1.1 { execsql { CREATE VIRTUAL TABLE t1 USING fts1(a, b, c); INSERT INTO t1(a, b, c) VALUES('one three four', 'one four', 'one two'); SELECT a, b, c FROM t1 WHERE c MATCH 'two'; } } {{one three four} {one four} {one two}} # This test was crashing at one point. # do_test fts1m-1.2 { execsql { SELECT a, b, c FROM t1 WHERE c MATCH 'two'; CREATE TABLE t3(a, b, c); SELECT a, b, c FROM t1 WHERE c MATCH 'two'; } } {{one three four} {one four} {one two} {one three four} {one four} {one two}} finish_test |