zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
for(i=0; zContentCols && i<p->nColumn; i++){
char *z = p->azColumn[i];
- zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i+1, z);
+ zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
}
/* Create the whole SQL script */
zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
while( zCsr<zEnd ){
+ int cmp; /* memcmp() result */
int nSuffix; /* Size of term suffix */
int nPrefix = 0; /* Size of term prefix */
int nBuffer; /* Total term size */
- int nMin; /* Minimum of nBuffer and nTerm */
/* Load the next term on the node into zBuffer */
if( zBuffer ){
** If the interior node term is larger than the specified term, then
** the tree headed by iChild may contain the specified term.
*/
- nMin = (nBuffer>nTerm ? nTerm : nBuffer);
- if( memcmp(zTerm, zBuffer, nMin)<0 ) break;
+ cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
+ if( cmp<0 || (cmp==0 && nBuffer>nTerm) ) break;
iChild++;
};
){
TermSelect *pTS = (TermSelect *)pContext;
int nNew = pTS->nOutput + nDoclist;
-
char *aNew = sqlite3_malloc(nNew);
+
if( !aNew ){
return SQLITE_NOMEM;
}
sqlite3_int64 i1;
rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &i1);
if( rc==SQLITE_OK ){
- sqlite3_int64 i2 = sqlite3_column_int64(pStmt, 3);
+ sqlite3_int64 i2 = sqlite3_column_int64(pStmt, 2);
rc = sqlite3Fts3SegReaderNew(p, iAge, i1, i2, 0, 0, 0, &pNew);
}
}
filter.iCol = iColumn;
filter.zTerm = zTerm;
filter.nTerm = nTerm;
+
rc = sqlite3Fts3SegReaderIterate(p, apSegment, nSegment, &filter,
fts3TermSelectCb, (void *)&tsc
);
sqlite3_value **apVal
){
const char *azSql[] = {
- "DELETE FROM %Q.'%q_content' WHERE rowid = ?",
- "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)",
- "DELETE FROM %Q.'%q_content'",
- "DELETE FROM %Q.'%q_segments'",
- "DELETE FROM %Q.'%q_segdir'",
- "SELECT * FROM %Q.'%q_content' WHERE rowid=?",
- "SELECT coalesce(max(idx)+1, 0) FROM %Q.'%q_segdir' WHERE level=?",
- "INSERT INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)",
- "SELECT coalesce(max(blockid)+1, 1) FROM %Q.'%q_segments'",
- "INSERT INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)",
-
- /* Return segments in order from oldest to newest.*/
- "SELECT idx, start_block, leaves_end_block, end_block, root "
- "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC",
- "SELECT idx, start_block, leaves_end_block, end_block, root "
- "FROM %Q.'%q_segdir' ORDER BY level DESC, idx ASC",
-
- "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?",
- "SELECT count(*), max(level) FROM %Q.'%q_segdir'",
-
- "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
- "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
- 0, /* CONTENT_INSERT - generated elsewhere */
- "SELECT block FROM %Q.'%q_segments' WHERE blockid = ?",
+/* 0 */ "DELETE FROM %Q.'%q_content' WHERE rowid = ?",
+/* 1 */ "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)",
+/* 2 */ "DELETE FROM %Q.'%q_content'",
+/* 3 */ "DELETE FROM %Q.'%q_segments'",
+/* 4 */ "DELETE FROM %Q.'%q_segdir'",
+/* 5 */ "SELECT * FROM %Q.'%q_content' WHERE rowid=?",
+/* 6 */ "SELECT coalesce(max(idx)+1, 0) FROM %Q.'%q_segdir' WHERE level=?",
+/* 7 */ "INSERT INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)",
+/* 8 */ "SELECT coalesce(max(blockid)+1, 1) FROM %Q.'%q_segments'",
+/* 9 */ "INSERT INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)",
+
+ /* Return segments in order from oldest to newest.*/
+/* 10 */ "SELECT idx, start_block, leaves_end_block, end_block, root "
+ "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC",
+/* 11 */ "SELECT idx, start_block, leaves_end_block, end_block, root "
+ "FROM %Q.'%q_segdir' ORDER BY level DESC, idx ASC",
+
+/* 12 */ "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?",
+/* 13 */ "SELECT count(*), max(level) FROM %Q.'%q_segdir'",
+
+/* 14 */ "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
+/* 15 */ "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
+/* 16 */ 0, /* CONTENT_INSERT - generated elsewhere */
+/* 17 */ "SELECT block FROM %Q.'%q_segments' WHERE blockid = ?",
+
};
int rc = SQLITE_OK;
sqlite3_stmt *pStmt;
**
** There is only ever one instance of this SQL statement compiled for
** each FTS3 table.
+**
+** The statement returns the following columns from the %_segdir table:
+**
+** 0: idx
+** 1: start_block
+** 2: leaves_end_block
+** 3: end_block
+** 4: root
*/
int sqlite3Fts3AllSegdirs(Fts3Table *p, sqlite3_stmt **ppStmt){
return fts3SqlStmt(p, SQL_SELECT_ALL_LEVEL, ppStmt, 0);
pReader->nTerm = nPrefix+nSuffix;
pNext += nSuffix;
pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist);
+ assert( pNext<&pReader->aNode[pReader->nNode] );
pReader->aDoclist = pNext;
pReader->pOffsetList = 0;
return SQLITE_OK;
** Fts3SegReader.pOffsetList to point to the next offset list before
** returning.
*/
- if( p==&pReader->aDoclist[pReader->nDoclist] ){
+ if( p>=&pReader->aDoclist[pReader->nDoclist] ){
pReader->pOffsetList = 0;
}else{
sqlite3_int64 iDelta;
-C Add\ssome\smissing\scomments\sand\sfix\ssome\sother\sissues\sin\sfts3\scode.
-D 2009-11-18T15:35:59
+C Fix\sproblems\sintroduced\sinto\sfts3\sas\spart\sof\sthe\srefactoring.
+D 2009-11-19T00:15:28
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 53f3dfa49f28ab5b80cb083fb7c9051e596bcfa1
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts3/fts3.c 2aa2c3f7b4d753f048af1c777b2c5fdd7e52c560
+F ext/fts3/fts3.c 3251d3c5e2304bcd2d8d92d1fa8fa204cfdcd28d
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
F ext/fts3/fts3Int.h f7488bbc9fd12bd3843f59265227321a92b39ed4
F ext/fts3/fts3_expr.c bdf11f3602f62f36f0e42823680bf22033dae0de
F ext/fts3/fts3_tokenizer.c 185a212670a9bbdeb5cad6942305e681bce5c87b
F ext/fts3/fts3_tokenizer.h 7ff73caa3327589bf6550f60d93ebdd1f6a0fb5c
F ext/fts3/fts3_tokenizer1.c 0a5bcc579f35de5d24a9345d7908dc25ae403ee7
-F ext/fts3/fts3_write.c ec6bbf26bfa21e64b059535e46b3a8e57fb21f5c
+F ext/fts3/fts3_write.c 041f6c4dda87db0248402245dc15c348ef8f7a99
F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
F ext/icu/README.txt 3b130aa66e7a681136f6add198b076a2f90d1e33
F ext/icu/icu.c 12e763d288d23b5a49de37caa30737b971a2f1e2
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 45c051e78651d8204c17cecdda2bde705698881f
-R f882843f6b95cfb6a8f2fd130e122bb3
+P 2fe579e778b75fbf503c02e01e5424c1926f2b49
+R 876c3ff77bbdae620820b9bcd69de73e
U dan
-Z b8988750cf7cc171c22183eb295bebe6
+Z 2c58b81314d821564ee17bc92f6804a7