1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Fix a faulty assert() in fts5.

FossilOrigin-Name: 569018170b928cadfa0745db631981084e595d90a8c3d1e236c42adae161018f
This commit is contained in:
dan
2022-12-19 20:14:22 +00:00
parent b7fe3cb890
commit 73e460c932
4 changed files with 37 additions and 12 deletions

View File

@ -275,21 +275,21 @@ static void fts5CheckTransactionState(Fts5FullTable *p, int op, int iSavepoint){
break;
case FTS5_SAVEPOINT:
assert( p->ts.eState==1 );
assert( p->ts.eState>=1 );
assert( iSavepoint>=0 );
assert( iSavepoint>=p->ts.iSavepoint );
p->ts.iSavepoint = iSavepoint;
break;
case FTS5_RELEASE:
assert( p->ts.eState==1 );
assert( p->ts.eState>=1 );
assert( iSavepoint>=0 );
assert( iSavepoint<=p->ts.iSavepoint );
p->ts.iSavepoint = iSavepoint-1;
break;
case FTS5_ROLLBACKTO:
assert( p->ts.eState==1 );
assert( p->ts.eState>=1 );
assert( iSavepoint>=-1 );
/* The following assert() can fail if another vtab strikes an error
** within an xSavepoint() call then SQLite calls xRollbackTo() - without

View File

@ -377,5 +377,30 @@ do_catchsql_test 14.4 {
ROLLBACK;
} {0 {}}
#-------------------------------------------------------------------------
reset_db
sqlite3 db2 test.db
do_execsql_test 15.0 {
CREATE TABLE t1(a, b);
BEGIN;
SELECT * FROM t1;
}
do_execsql_test -db db2 15.1 {
BEGIN;
CREATE VIRTUAL TABLE x1 USING fts5(y);
}
do_test 15.2 {
list [catch { db2 eval COMMIT } msg] $msg
} {1 {database is locked}}
do_execsql_test -db db2 15.3 {
SAVEPOINT one;
} {}
do_execsql_test 15.4 END
do_test 15.4 {
list [catch { db2 eval COMMIT } msg] $msg
} {0 {}}
finish_test