mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Fix overzealous fts2 assertions WRT rowid 0 or lower. Only check that
docids are ascending if there was a prior docid set for the doclist, ignore the initial docid of 0. (CVS 4026) FossilOrigin-Name: ed3a131f1d3fe51d1e79bdfe1bfafa55f825afa9
This commit is contained in:
@ -716,12 +716,18 @@ typedef struct DLWriter {
|
|||||||
DocListType iType;
|
DocListType iType;
|
||||||
DataBuffer *b;
|
DataBuffer *b;
|
||||||
sqlite_int64 iPrevDocid;
|
sqlite_int64 iPrevDocid;
|
||||||
|
#ifndef NDEBUG
|
||||||
|
int has_iPrevDocid;
|
||||||
|
#endif
|
||||||
} DLWriter;
|
} DLWriter;
|
||||||
|
|
||||||
static void dlwInit(DLWriter *pWriter, DocListType iType, DataBuffer *b){
|
static void dlwInit(DLWriter *pWriter, DocListType iType, DataBuffer *b){
|
||||||
pWriter->b = b;
|
pWriter->b = b;
|
||||||
pWriter->iType = iType;
|
pWriter->iType = iType;
|
||||||
pWriter->iPrevDocid = 0;
|
pWriter->iPrevDocid = 0;
|
||||||
|
#ifndef NDEBUG
|
||||||
|
pWriter->has_iPrevDocid = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
static void dlwDestroy(DLWriter *pWriter){
|
static void dlwDestroy(DLWriter *pWriter){
|
||||||
SCRAMBLE(pWriter);
|
SCRAMBLE(pWriter);
|
||||||
@ -780,11 +786,15 @@ static void dlwAdd(DLWriter *pWriter, sqlite_int64 iDocid){
|
|||||||
char c[VARINT_MAX];
|
char c[VARINT_MAX];
|
||||||
int n = putVarint(c, iDocid-pWriter->iPrevDocid);
|
int n = putVarint(c, iDocid-pWriter->iPrevDocid);
|
||||||
|
|
||||||
assert( pWriter->iPrevDocid<iDocid );
|
/* Docids must ascend. */
|
||||||
|
assert( !pWriter->has_iPrevDocid || iDocid>pWriter->iPrevDocid );
|
||||||
assert( pWriter->iType==DL_DOCIDS );
|
assert( pWriter->iType==DL_DOCIDS );
|
||||||
|
|
||||||
dataBufferAppend(pWriter->b, c, n);
|
dataBufferAppend(pWriter->b, c, n);
|
||||||
pWriter->iPrevDocid = iDocid;
|
pWriter->iPrevDocid = iDocid;
|
||||||
|
#ifndef NDEBUG
|
||||||
|
pWriter->has_iPrevDocid = 1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************/
|
/*******************************************************************/
|
||||||
@ -961,10 +971,14 @@ static void plwInit(PLWriter *pWriter, DLWriter *dlw, sqlite_int64 iDocid){
|
|||||||
|
|
||||||
pWriter->dlw = dlw;
|
pWriter->dlw = dlw;
|
||||||
|
|
||||||
assert( iDocid>pWriter->dlw->iPrevDocid );
|
/* Docids must ascend. */
|
||||||
|
assert( !pWriter->dlw->has_iPrevDocid || iDocid>pWriter->dlw->iPrevDocid );
|
||||||
n = putVarint(c, iDocid-pWriter->dlw->iPrevDocid);
|
n = putVarint(c, iDocid-pWriter->dlw->iPrevDocid);
|
||||||
dataBufferAppend(pWriter->dlw->b, c, n);
|
dataBufferAppend(pWriter->dlw->b, c, n);
|
||||||
pWriter->dlw->iPrevDocid = iDocid;
|
pWriter->dlw->iPrevDocid = iDocid;
|
||||||
|
#ifndef NDEBUG
|
||||||
|
pWriter->dlw->has_iPrevDocid = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
pWriter->iColumn = 0;
|
pWriter->iColumn = 0;
|
||||||
pWriter->iPos = 0;
|
pWriter->iPos = 0;
|
||||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Add\sthe\slarger\sSQLite\sicon\sto\sthe\srepository.\s(CVS\s4025)
|
C Fix\soverzealous\sfts2\sassertions\sWRT\srowid\s0\sor\slower.\s\sOnly\scheck\sthat\ndocids\sare\sascending\sif\sthere\swas\sa\sprior\sdocid\sset\sfor\sthe\sdoclist,\nignore\sthe\sinitial\sdocid\sof\s0.\s(CVS\s4026)
|
||||||
D 2007-05-19T11:50:36
|
D 2007-05-21T21:59:18
|
||||||
F Makefile.in a42354804b50c2708ce72cf79e4daa30f50191b5
|
F Makefile.in a42354804b50c2708ce72cf79e4daa30f50191b5
|
||||||
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
|
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@ -36,7 +36,7 @@ F ext/fts1/fulltext.h 08525a47852d1d62a0be81d3fc3fe2d23b094efd
|
|||||||
F ext/fts1/simple_tokenizer.c 1844d72f7194c3fd3d7e4173053911bf0661b70d
|
F ext/fts1/simple_tokenizer.c 1844d72f7194c3fd3d7e4173053911bf0661b70d
|
||||||
F ext/fts1/tokenizer.h 0c53421b832366d20d720d21ea3e1f6e66a36ef9
|
F ext/fts1/tokenizer.h 0c53421b832366d20d720d21ea3e1f6e66a36ef9
|
||||||
F ext/fts2/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
F ext/fts2/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
||||||
F ext/fts2/fts2.c 9e1f5942fc063f2d6778bc44372eba9b2b43eebd
|
F ext/fts2/fts2.c 4c68ff4f2c95f1cb36d760c89b2a98d07a9dc518
|
||||||
F ext/fts2/fts2.h 591916a822cfb6426518fdbf6069359119bc46eb
|
F ext/fts2/fts2.h 591916a822cfb6426518fdbf6069359119bc46eb
|
||||||
F ext/fts2/fts2_hash.c b3f22116d4ef0bc8f2da6e3fdc435c86d0951a9b
|
F ext/fts2/fts2_hash.c b3f22116d4ef0bc8f2da6e3fdc435c86d0951a9b
|
||||||
F ext/fts2/fts2_hash.h e283308156018329f042816eb09334df714e105e
|
F ext/fts2/fts2_hash.h e283308156018329f042816eb09334df714e105e
|
||||||
@ -235,7 +235,7 @@ F test/fts1j.test e4c0ffcd0ba2adce09c6b7b43ffd0749b5fda5c7
|
|||||||
F test/fts1k.test fdf295cb797ba6a2ef81ec41cb98df0ceb2e572c
|
F test/fts1k.test fdf295cb797ba6a2ef81ec41cb98df0ceb2e572c
|
||||||
F test/fts1l.test 15c119ed2362b2b28d5300c0540a6a43eab66c36
|
F test/fts1l.test 15c119ed2362b2b28d5300c0540a6a43eab66c36
|
||||||
F test/fts1porter.test d86e9c3e0c7f8ff95add6582b4b585fb4e02b96d
|
F test/fts1porter.test d86e9c3e0c7f8ff95add6582b4b585fb4e02b96d
|
||||||
F test/fts2a.test 103fc178d134c54c44c1938a4331e9e2030792d9
|
F test/fts2a.test 473a5c8b473a4e21a8e3fddaed1e59666e0c6ab7
|
||||||
F test/fts2b.test 964abc0236c849c07ca1ae496bb25c268ae94816
|
F test/fts2b.test 964abc0236c849c07ca1ae496bb25c268ae94816
|
||||||
F test/fts2c.test ffb5a35230ac72c4354535c547965ce6824537c0
|
F test/fts2c.test ffb5a35230ac72c4354535c547965ce6824537c0
|
||||||
F test/fts2d.test b7eaa671ca9a16997f3e5b158ee777ae21052b0b
|
F test/fts2d.test b7eaa671ca9a16997f3e5b158ee777ae21052b0b
|
||||||
@ -494,7 +494,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
||||||
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
||||||
P 315dc71b921ffba514271a2ed571d5f4162c775f
|
P d7539c6e8b66d537307e70aac5f2001135151c78
|
||||||
R 6690b927b9e60ea3f1ce16e28d14b75e
|
R fc1fc4b99da3f2060e3c202b7bab5aec
|
||||||
U drh
|
U shess
|
||||||
Z 34db7163f46344eeab9731ece1a3c204
|
Z a33da34f6d94403bda46e441bbf9b0fa
|
||||||
|
@ -1 +1 @@
|
|||||||
d7539c6e8b66d537307e70aac5f2001135151c78
|
ed3a131f1d3fe51d1e79bdfe1bfafa55f825afa9
|
@ -11,7 +11,7 @@
|
|||||||
# This file implements regression tests for SQLite library. The
|
# This file implements regression tests for SQLite library. The
|
||||||
# focus of this script is testing the FTS2 module.
|
# focus of this script is testing the FTS2 module.
|
||||||
#
|
#
|
||||||
# $Id: fts2a.test,v 1.1 2006/10/19 23:36:26 shess Exp $
|
# $Id: fts2a.test,v 1.2 2007/05/21 21:59:18 shess Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
@ -181,6 +181,22 @@ do_test fts2a-5.3 {
|
|||||||
execsql {SELECT rowid FROM t1 WHERE content MATCH NULL}
|
execsql {SELECT rowid FROM t1 WHERE content MATCH NULL}
|
||||||
} {}
|
} {}
|
||||||
|
|
||||||
|
# Test the ability to handle non-positive rowids
|
||||||
|
#
|
||||||
|
do_test fts2a-6.0 {
|
||||||
|
execsql {INSERT INTO t1(rowid, content) VALUES(0, 'four five')}
|
||||||
|
} {}
|
||||||
|
do_test fts2a-6.1 {
|
||||||
|
execsql {SELECT content FROM t1 WHERE rowid = 0}
|
||||||
|
} {{four five}}
|
||||||
|
do_test fts2a-6.2 {
|
||||||
|
execsql {INSERT INTO t1(rowid, content) VALUES(-1, 'three four')}
|
||||||
|
} {}
|
||||||
|
do_test fts2a-6.3 {
|
||||||
|
execsql {SELECT content FROM t1 WHERE rowid = -1}
|
||||||
|
} {{three four}}
|
||||||
|
do_test fts2a-6.4 {
|
||||||
|
execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'four'}
|
||||||
|
} {-1 0 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user