Index: ext/fts3/fts3_aux.c ================================================================== --- ext/fts3/fts3_aux.c +++ ext/fts3/fts3_aux.c @@ -300,11 +300,11 @@ pCsr->aStat[0].nOcc++; } break; /* State 3. The integer just read is a column number. */ - case 3: + default: assert( eState==3 ); iCol = (int)v; if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM; pCsr->aStat[iCol+1].nDoc++; eState = 2; break; Index: test/fts3fault2.test ================================================================== --- test/fts3fault2.test +++ test/fts3fault2.test @@ -37,29 +37,46 @@ faultsim_restore_and_reopen db eval {SELECT * FROM sqlite_master} } -body { execsql "SELECT * FROM terms" } -test { - faultsim_test_result {0 {a 1 1 b 1 1 c 2 2 d 1 1 e 1 1}} + faultsim_test_result {0 {a * 1 1 a 0 1 1 b * 1 1 b 0 1 1 c * 2 2 c 0 2 2 d * 1 1 d 0 1 1 e * 1 1 e 0 1 1}} } do_faultsim_test 1.3 -prep { faultsim_restore_and_reopen db eval {SELECT * FROM sqlite_master} } -body { execsql "SELECT * FROM terms WHERE term>'a' AND TERM < 'd'" } -test { - faultsim_test_result {0 {b 1 1 c 2 2}} + faultsim_test_result {0 {b * 1 1 b 0 1 1 c * 2 2 c 0 2 2}} } do_faultsim_test 1.4 -prep { faultsim_restore_and_reopen db eval {SELECT * FROM sqlite_master} } -body { execsql "SELECT * FROM terms WHERE term='c'" } -test { - faultsim_test_result {0 {c 2 2}} + faultsim_test_result {0 {c * 2 2 c 0 2 2}} } +do_test 2.0 { + faultsim_delete_and_reopen + execsql { + CREATE VIRTUAL TABLE tx USING fts4(a, b); + INSERT INTO tx VALUES('a b c', 'x y z'); + CREATE VIRTUAL TABLE terms2 USING fts4aux(tx); + } + faultsim_save_and_close +} {} +do_faultsim_test 2.1 -prep { + faultsim_restore_and_reopen + db eval {SELECT * FROM sqlite_master} +} -body { + execsql "SELECT * FROM terms2" +} -test { + faultsim_test_result {0 {a * 1 1 a 0 1 1 b * 1 1 b 0 1 1 c * 1 1 c 0 1 1 x * 1 1 x 1 1 1 y * 1 1 y 1 1 1 z * 1 1 z 1 1 1}} +} finish_test