Re: [sqlite] Error or Crash using OR in MATCH clause
Dan Thank you, and another member - Simon Slavin, for replying so quickly. It does look exactly like my problem: we'll await 3.14 with interest. Julian Dohmen | developer Evelyn Manufacturing | Alexandria & KeepnTrack 801.943.7277 ext 565 | jdoh...@companioncorp.com From: Dan Kennedy To: Sent: 7/21/2016 12:01 PM Subject: Re: [sqlite] Error or Crash using OR in MATCH clause On 07/21/2016 11:16 PM, Julian Dohmen wrote: > I am encountering errors or crashes when using FTS5 and MATCH expressions > involving > OR > combined with > ORDER BY rank > = Thanks for the detailed report. I think this one was fixed a couple of weeks after 3.13 was released: http://sqlite.org/src/info/64ca1a835a89fd21 The fix will be part of 3.14. Dan. > > 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 > > () 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 *
Re: [sqlite] Error or Crash using OR in MATCH clause
On 07/21/2016 11:16 PM, Julian Dohmen wrote: I am encountering errors or crashes when using FTS5 and MATCH expressions involving OR combined with ORDER BY rank = Thanks for the detailed report. I think this one was fixed a couple of weeks after 3.13 was released: http://sqlite.org/src/info/64ca1a835a89fd21 The fix will be part of 3.14. Dan. 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 ()Unknown [Frames below may be incorrect and/or missing] Alexandria.exe!fts5MultiIterNext(Fts5Index * p, Fts5Iter * pIter, int bFrom, __int64 iFrom) Line 186755C Alexandria.exe!fts5MultiIterNextFrom(Fts5Index * p, Fts5Iter * pIter, __int64 iMatch) Line 187418C Alexandria.exe!sqlite3Fts5IterNextFrom(Fts5IndexIter * pIndexIter, __int64 iMatch) Line 189325C Alexandria.exe!fts5ExprNodeNext_TERM(Fts5Expr * pExpr, Fts5ExprNode * pNode, int bFromValid, __int64 iFrom) Line 181773C Alexandria.exe!fts5ExprNodeTest_AND(Fts5Expr * pExpr, Fts5ExprNode * pAnd) Line 181852C Alexandria.exe!fts5ExprNodeNext_AND(Fts5Expr * pExpr, Fts5ExprNode * pNode, int bFromValid, __int64 iFrom) Line 181891C Alexandria.exe!fts5ExprNodeNext_OR(Fts5Expr * pExpr, Fts5ExprNode * pNode, int bFromValid, __int64 iFrom) Line 181821C Alexandria.exe!sqlite3Fts5ExprNext(Fts5Expr * p, __int64 iLast) Line 182079C Alexandria.exe!fts5NextMethod(sqlite3_vtab_cursor * pCursor) Line 191208 C Alexandria.exe!sqlite3VdbeExec(Vdbe * p) Line 83260C Alexandria.exe!sqlite3Step(Vdbe * p) Line 75131C Alexandria.exe!sqlite3_step(sqlite3_stmt * pStmt) Line 75193C Alexandria.exe!fts5SorterNext(Fts5Cursor * pCsr) Line 191102C Alexandria.exe!fts5CursorFirstSorted(Fts5Table * pTab, Fts5Cursor * pCsr, int bDesc) Line 191303C Alexandria.exe!fts5FilterMethod(sqlite3_vtab_cursor * pCursor, int idxNum, const char * zUnused, int nVal, Mem * * apVal) Line 191588C Alexandria.exe!sqlite3VdbeExec(Vdbe * p) Line 83174C Alexandria.exe!sqlite3Step(Vdbe * p) Line 75131C Alexandria.exe!sqlite3_step(sqlite3_stmt * pStmt) Line 75193C Alexandria.exe!nsFTS5SearchService::`anonymous namespace'::DB_Worker::operator()(const std::basic_string,std::allocator > & csQuery, unsigned int nMaxToFind, std::vector > & vecResp) Line 76C++ 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 ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Error or Crash using OR in MATCH clause
In SQLite.exe [the source of the simple example I sent] PRAGMA integrity_check; Ok Julian Dohmen | developer Evelyn Manufacturing | Alexandria & KeepnTrack 801.943.7277 ext 565 | jdoh...@companioncorp.com From: Simon Slavin To: SQLite mailing list Sent: 7/21/2016 11:45 AM Subject: Re: [sqlite] Error or Crash using OR in MATCH clause On 21 Jul 2016, at 5:16pm, Julian Dohmen wrote: > SELECT * FROM VTest WHERE VTest MATCH 'wrinkle in time OR a wrinkle in time' > ORDER BY rank; > ERROR > Error: database disk image is malformed What is the result of PRAGMA integrity_check ? Simon. ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Error or Crash using OR in MATCH clause
On 21 Jul 2016, at 5:16pm, Julian Dohmen wrote: > SELECT * FROM VTest WHERE VTest MATCH 'wrinkle in time OR a wrinkle in time' > ORDER BY rank; > ERROR > Error: database disk image is malformed What is the result of PRAGMA integrity_check ? Simon. ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
[sqlite] Error or Crash using OR in MATCH clause
I am encountering errors or crashes when using FTS5 and MATCH expressions involving OR 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 () 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,std::allocator > & csQuery, unsigned int nMaxToFind, std::vector > & 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