I am encountering errors or crashes when using FTS5 and MATCH expressions involving <query>OR <query> combined with ORDER BY rank =========================
Simplest example [using SQLite program]: ----------------------------------------------- DROP TABLE IF EXISTS VTest; CREATE virtual TABLE VTest USING FTS5(Title, AUthor, tokenize ='porter unicode61 remove_diacritics 1', columnsize='1', detail=full); INSERT INTO VTest (Title, Author) VALUES ('wrinkle in time', 'Bill Smith'); SELECT * FROM VTest; OK SELECT * FROM VTest WHERE VTest MATCH 'wrinkle in time OR a wrinkle in time'; OK SELECT * FROM VTest WHERE VTest MATCH 'wrinkle in time' ORDER BY rank OK SELECT * FROM VTest WHERE VTest MATCH 'wrinkle in time OR a wrinkle in time' ORDER BY rank; ERROR Error: database disk image is malformed Note that the error [or commonly a crash in my system with a real table/data] seems to occur when the OR is combined with ORDER BY These [simplified] results were obtained with the SQLite shell program built with SQLite 3.13. ========================= SQLite build: [Windows 10, VS 2015] Preprocessor flags: ----------------------------------------------- WIN32 _DEBUG _WINDOWS SQLITE_THREADSAFE=2 SQLITE_ALLOW_COVERING_INDEX_SCAN=1 SQLITE_ENABLE_STAT4=1 SQLITE_TEMP_STORE=2 SQLITE_ENABLE_FTS5=1 SQLITE_ENABLE_FTS4=1 SQLITE_ENABLE_FTS3=1 SQLITE_ENABLE_FTS3_PARENTHESIS=1 ---------------------------------------------------------------- I also see this kind of problem in SQLiteStudio with SQLite 3.12.2 and [most importantly to us] in our application built with SQLite3.13 [with same flags above] I assume that I misunderstood something about the syntax or flags, but reviewing the SQLite docs on FTS5 I don't see where I went wrong. ========================= Further details: ----------------------------------------------- In our program [32-bit debug build with above flags] with VS 2015 debugger set to trap exceptions we see this stack trace 00000000() Unknown [Frames below may be incorrect and/or missing] Alexandria.exe!fts5MultiIterNext(Fts5Index * p, Fts5Iter * pIter, int bFrom, __int64 iFrom) Line 186755 C Alexandria.exe!fts5MultiIterNextFrom(Fts5Index * p, Fts5Iter * pIter, __int64 iMatch) Line 187418 C Alexandria.exe!sqlite3Fts5IterNextFrom(Fts5IndexIter * pIndexIter, __int64 iMatch) Line 189325 C Alexandria.exe!fts5ExprNodeNext_TERM(Fts5Expr * pExpr, Fts5ExprNode * pNode, int bFromValid, __int64 iFrom) Line 181773 C Alexandria.exe!fts5ExprNodeTest_AND(Fts5Expr * pExpr, Fts5ExprNode * pAnd) Line 181852 C Alexandria.exe!fts5ExprNodeNext_AND(Fts5Expr * pExpr, Fts5ExprNode * pNode, int bFromValid, __int64 iFrom) Line 181891 C Alexandria.exe!fts5ExprNodeNext_OR(Fts5Expr * pExpr, Fts5ExprNode * pNode, int bFromValid, __int64 iFrom) Line 181821 C Alexandria.exe!sqlite3Fts5ExprNext(Fts5Expr * p, __int64 iLast) Line 182079 C Alexandria.exe!fts5NextMethod(sqlite3_vtab_cursor * pCursor) Line 191208 C Alexandria.exe!sqlite3VdbeExec(Vdbe * p) Line 83260 C Alexandria.exe!sqlite3Step(Vdbe * p) Line 75131 C Alexandria.exe!sqlite3_step(sqlite3_stmt * pStmt) Line 75193 C Alexandria.exe!fts5SorterNext(Fts5Cursor * pCsr) Line 191102 C Alexandria.exe!fts5CursorFirstSorted(Fts5Table * pTab, Fts5Cursor * pCsr, int bDesc) Line 191303 C Alexandria.exe!fts5FilterMethod(sqlite3_vtab_cursor * pCursor, int idxNum, const char * zUnused, int nVal, Mem * * apVal) Line 191588 C Alexandria.exe!sqlite3VdbeExec(Vdbe * p) Line 83174 C Alexandria.exe!sqlite3Step(Vdbe * p) Line 75131 C Alexandria.exe!sqlite3_step(sqlite3_stmt * pStmt) Line 75193 C Alexandria.exe!nsFTS5SearchService::`anonymous namespace'::DB_Worker::operator()(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & csQuery, unsigned int nMaxToFind, std::vector<nsFTS5SearchService::SearchResponse::SearchRecord,std::allocator<nsFTS5SearchService::SearchResponse::SearchRecord> > & vecResp) Line 76 C++ With this query: SELECT T2TFTSrsn FROM T2TitleFTS WHERE T2TitleFTS MATCH '{T2TFTStitle T2TFTSseries}:a wrinkle in time OR wrinkle in time' ORDER BY rank LIMIT 50; ========================= Julian Dohmen | developer Evelyn Manufacturing | Alexandria & KeepnTrack 801.943.7277 ext 565 | jdoh...@companioncorp.com _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users