mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Change fts4aux to (additionally) report on term frequency in individual columns of an fts table.
FossilOrigin-Name: 3996f92a9aca9ac2628be003eca83c8f954c71de
This commit is contained in:
@ -31,17 +31,22 @@ struct Fts3auxCursor {
|
|||||||
Fts3SegReaderCursor csr; /* Must be right after "base" */
|
Fts3SegReaderCursor csr; /* Must be right after "base" */
|
||||||
Fts3SegFilter filter;
|
Fts3SegFilter filter;
|
||||||
char *zStop;
|
char *zStop;
|
||||||
int nStop;
|
int nStop; /* Byte-length of string zStop */
|
||||||
int isEof;
|
int isEof; /* True if cursor is at EOF */
|
||||||
sqlite3_int64 iRowid;
|
sqlite3_int64 iRowid; /* Current rowid */
|
||||||
sqlite3_int64 nDoc;
|
|
||||||
sqlite3_int64 nOcc;
|
int iCol; /* Current value of 'col' column */
|
||||||
|
int nStat; /* Size of aStat[] array */
|
||||||
|
struct Fts3auxColstats {
|
||||||
|
sqlite3_int64 nDoc; /* 'documents' values for current csr row */
|
||||||
|
sqlite3_int64 nOcc; /* 'occurrences' values for current csr row */
|
||||||
|
} *aStat;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Schema of the terms table.
|
** Schema of the terms table.
|
||||||
*/
|
*/
|
||||||
#define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, documents, occurrences)"
|
#define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, col, documents, occurrences)"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This function does all the work for both the xConnect and xCreate methods.
|
** This function does all the work for both the xConnect and xCreate methods.
|
||||||
@ -199,10 +204,27 @@ static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){
|
|||||||
sqlite3Fts3SegReaderFinish(&pCsr->csr);
|
sqlite3Fts3SegReaderFinish(&pCsr->csr);
|
||||||
sqlite3_free((void *)pCsr->filter.zTerm);
|
sqlite3_free((void *)pCsr->filter.zTerm);
|
||||||
sqlite3_free(pCsr->zStop);
|
sqlite3_free(pCsr->zStop);
|
||||||
|
sqlite3_free(pCsr->aStat);
|
||||||
sqlite3_free(pCsr);
|
sqlite3_free(pCsr);
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){
|
||||||
|
if( nSize>pCsr->nStat ){
|
||||||
|
struct Fts3auxColstats *aNew;
|
||||||
|
aNew = (struct Fts3auxColstats *)sqlite3_realloc(pCsr->aStat,
|
||||||
|
sizeof(struct Fts3auxColstats) * nSize
|
||||||
|
);
|
||||||
|
if( aNew==0 ) return SQLITE_NOMEM;
|
||||||
|
memset(&aNew[pCsr->nStat], 0,
|
||||||
|
sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat)
|
||||||
|
);
|
||||||
|
pCsr->aStat = aNew;
|
||||||
|
pCsr->nStat = nSize;
|
||||||
|
}
|
||||||
|
return SQLITE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** xNext - Advance the cursor to the next row, if any.
|
** xNext - Advance the cursor to the next row, if any.
|
||||||
*/
|
*/
|
||||||
@ -211,12 +233,21 @@ static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
|
|||||||
Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
|
Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
/* Increment our pretend rowid value. */
|
||||||
|
pCsr->iRowid++;
|
||||||
|
|
||||||
|
for(pCsr->iCol++; pCsr->iCol<pCsr->nStat; pCsr->iCol++){
|
||||||
|
if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr);
|
rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr);
|
||||||
if( rc==SQLITE_ROW ){
|
if( rc==SQLITE_ROW ){
|
||||||
int i;
|
int i = 0;
|
||||||
int isIgnore = 1;
|
|
||||||
int nDoclist = pCsr->csr.nDoclist;
|
int nDoclist = pCsr->csr.nDoclist;
|
||||||
char *aDoclist = pCsr->csr.aDoclist;
|
char *aDoclist = pCsr->csr.aDoclist;
|
||||||
|
int iCol;
|
||||||
|
|
||||||
|
int eState = 0;
|
||||||
|
|
||||||
if( pCsr->zStop ){
|
if( pCsr->zStop ){
|
||||||
int n = (pCsr->nStop<pCsr->csr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm;
|
int n = (pCsr->nStop<pCsr->csr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm;
|
||||||
@ -227,27 +258,61 @@ static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now count the number of documents and positions in the doclist
|
if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM;
|
||||||
** in pCsr->csr.aDoclist[]. Store the number of documents in pCsr->nDoc
|
memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat);
|
||||||
** and the number of occurrences in pCsr->nOcc. */
|
iCol = 0;
|
||||||
pCsr->nDoc = 0;
|
|
||||||
pCsr->nOcc = 0;
|
|
||||||
i = 0;
|
|
||||||
while( i<nDoclist ){
|
while( i<nDoclist ){
|
||||||
sqlite3_int64 v = 0;
|
sqlite3_int64 v = 0;
|
||||||
|
|
||||||
i += sqlite3Fts3GetVarint(&aDoclist[i], &v);
|
i += sqlite3Fts3GetVarint(&aDoclist[i], &v);
|
||||||
if( isIgnore ){
|
switch( eState ){
|
||||||
isIgnore = 0;
|
/* State 0. In this state the integer just read was a docid. */
|
||||||
}else if( v>1 ){
|
case 0:
|
||||||
pCsr->nOcc++;
|
pCsr->aStat[0].nDoc++;
|
||||||
}else{
|
eState = 1;
|
||||||
if( v==0 ) pCsr->nDoc++;
|
iCol = 0;
|
||||||
isIgnore = 1;
|
break;
|
||||||
|
|
||||||
|
/* State 1. In this state we are expecting either a 1, indicating
|
||||||
|
** that the following integer will be a column number, or the
|
||||||
|
** start of a position list for column 0.
|
||||||
|
**
|
||||||
|
** The only difference between state 1 and state 2 is that if the
|
||||||
|
** integer encountered in state 1 is not 0 or 1, then we need to
|
||||||
|
** increment the column 0 "nDoc" count for this term.
|
||||||
|
*/
|
||||||
|
case 1:
|
||||||
|
assert( iCol==0 );
|
||||||
|
if( v>1 ){
|
||||||
|
pCsr->aStat[1].nDoc++;
|
||||||
|
}
|
||||||
|
eState = 2;
|
||||||
|
/* fall through */
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if( v==0 ){ /* 0x00. Next integer will be a docid. */
|
||||||
|
eState = 0;
|
||||||
|
}else if( v==1 ){ /* 0x01. Next integer will be a column number. */
|
||||||
|
eState = 3;
|
||||||
|
}else{ /* 2 or greater. A position. */
|
||||||
|
pCsr->aStat[iCol+1].nOcc++;
|
||||||
|
pCsr->aStat[0].nOcc++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* State 3. The integer just read is a column number. */
|
||||||
|
case 3:
|
||||||
|
iCol = (int)v;
|
||||||
|
if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM;
|
||||||
|
pCsr->aStat[iCol+1].nDoc++;
|
||||||
|
eState = 2;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pCsr->iCol = 0;
|
||||||
rc = SQLITE_OK;
|
rc = SQLITE_OK;
|
||||||
pCsr->iRowid++;
|
|
||||||
}else{
|
}else{
|
||||||
pCsr->isEof = 1;
|
pCsr->isEof = 1;
|
||||||
}
|
}
|
||||||
@ -280,6 +345,7 @@ static int fts3auxFilterMethod(
|
|||||||
testcase(pCsr->filter.zTerm);
|
testcase(pCsr->filter.zTerm);
|
||||||
sqlite3Fts3SegReaderFinish(&pCsr->csr);
|
sqlite3Fts3SegReaderFinish(&pCsr->csr);
|
||||||
sqlite3_free((void *)pCsr->filter.zTerm);
|
sqlite3_free((void *)pCsr->filter.zTerm);
|
||||||
|
sqlite3_free(pCsr->aStat);
|
||||||
memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr);
|
memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr);
|
||||||
|
|
||||||
pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY;
|
pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY;
|
||||||
@ -332,10 +398,16 @@ static int fts3auxColumnMethod(
|
|||||||
assert( p->isEof==0 );
|
assert( p->isEof==0 );
|
||||||
if( iCol==0 ){ /* Column "term" */
|
if( iCol==0 ){ /* Column "term" */
|
||||||
sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT);
|
sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT);
|
||||||
}else if( iCol==1 ){ /* Column "documents" */
|
}else if( iCol==1 ){ /* Column "col" */
|
||||||
sqlite3_result_int64(pContext, p->nDoc);
|
if( p->iCol ){
|
||||||
|
sqlite3_result_int(pContext, p->iCol-1);
|
||||||
|
}else{
|
||||||
|
sqlite3_result_text(pContext, "*", -1, SQLITE_STATIC);
|
||||||
|
}
|
||||||
|
}else if( iCol==2 ){ /* Column "documents" */
|
||||||
|
sqlite3_result_int64(pContext, p->aStat[p->iCol].nDoc);
|
||||||
}else{ /* Column "occurrences" */
|
}else{ /* Column "occurrences" */
|
||||||
sqlite3_result_int64(pContext, p->nOcc);
|
sqlite3_result_int64(pContext, p->aStat[p->iCol].nOcc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
|
@ -2223,7 +2223,7 @@ void sqlite3Fts3SegReaderFinish(
|
|||||||
*/
|
*/
|
||||||
static int fts3SegmentMerge(Fts3Table *p, int iLevel){
|
static int fts3SegmentMerge(Fts3Table *p, int iLevel){
|
||||||
int rc; /* Return code */
|
int rc; /* Return code */
|
||||||
int iIdx; /* Index of new segment */
|
int iIdx = 0; /* Index of new segment */
|
||||||
int iNewLevel = 0; /* Level to create new segment at */
|
int iNewLevel = 0; /* Level to create new segment at */
|
||||||
SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */
|
SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */
|
||||||
Fts3SegFilter filter; /* Segment term filter condition */
|
Fts3SegFilter filter; /* Segment term filter condition */
|
||||||
@ -2242,7 +2242,6 @@ static int fts3SegmentMerge(Fts3Table *p, int iLevel){
|
|||||||
rc = SQLITE_DONE;
|
rc = SQLITE_DONE;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
iIdx = 0;
|
|
||||||
rc = fts3SegmentCountMax(p, &nDummy, &iNewLevel);
|
rc = fts3SegmentCountMax(p, &nDummy, &iNewLevel);
|
||||||
}else{
|
}else{
|
||||||
/* This call is to merge all segments at level iLevel. Find the next
|
/* This call is to merge all segments at level iLevel. Find the next
|
||||||
|
30
manifest
30
manifest
@ -1,8 +1,5 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
C Change\sfts4aux\sto\s(additionally)\sreport\son\sterm\sfrequency\sin\sindividual\scolumns\sof\san\sfts\stable.
|
||||||
Hash: SHA1
|
D 2011-02-04T18:56:25.115
|
||||||
|
|
||||||
C Significant\schanges\shave\soccurred\ssince\sthe\s3.7.5\srelease\sso\sgo\sahead\sand\nincrease\sthe\sversion\snumber\sto\s3.7.6.
|
|
||||||
D 2011-02-04T14:28:34.714
|
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c
|
F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@ -67,7 +64,7 @@ F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
|||||||
F ext/fts3/fts3.c 5653c5654ac9b65bf3646af7e1d695c7e9b991a0
|
F ext/fts3/fts3.c 5653c5654ac9b65bf3646af7e1d695c7e9b991a0
|
||||||
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
||||||
F ext/fts3/fts3Int.h 945926ea4b6a686c3e9834640a252d9870b7191e
|
F ext/fts3/fts3Int.h 945926ea4b6a686c3e9834640a252d9870b7191e
|
||||||
F ext/fts3/fts3_aux.c 233a9f0bd8fa336d78f5905b2c94c8860d237dd9
|
F ext/fts3/fts3_aux.c 60563fe93307dbca20bafeabb28dac829bdf1520
|
||||||
F ext/fts3/fts3_expr.c 5f49e0deaf723724b08100bb3ff40aab02ad0c93
|
F ext/fts3/fts3_expr.c 5f49e0deaf723724b08100bb3ff40aab02ad0c93
|
||||||
F ext/fts3/fts3_hash.c 3c8f6387a4a7f5305588b203fa7c887d753e1f1c
|
F ext/fts3/fts3_hash.c 3c8f6387a4a7f5305588b203fa7c887d753e1f1c
|
||||||
F ext/fts3/fts3_hash.h 8331fb2206c609f9fc4c4735b9ab5ad6137c88ec
|
F ext/fts3/fts3_hash.h 8331fb2206c609f9fc4c4735b9ab5ad6137c88ec
|
||||||
@ -77,7 +74,7 @@ F ext/fts3/fts3_snippet.c bfefb42b5debf8725a30fd5122572aaeedc99397
|
|||||||
F ext/fts3/fts3_tokenizer.c 055f3dc7369585350b28db1ee0f3b214dca6724d
|
F ext/fts3/fts3_tokenizer.c 055f3dc7369585350b28db1ee0f3b214dca6724d
|
||||||
F ext/fts3/fts3_tokenizer.h 13ffd9fcb397fec32a05ef5cd9e0fa659bf3dbd3
|
F ext/fts3/fts3_tokenizer.h 13ffd9fcb397fec32a05ef5cd9e0fa659bf3dbd3
|
||||||
F ext/fts3/fts3_tokenizer1.c 6e5cbaa588924ac578263a598e4fb9f5c9bb179d
|
F ext/fts3/fts3_tokenizer1.c 6e5cbaa588924ac578263a598e4fb9f5c9bb179d
|
||||||
F ext/fts3/fts3_write.c 8cf14b0e1eee656cda0197e99754f980c216dd9a
|
F ext/fts3/fts3_write.c 813495ed106eb9461044e3c0374f4db69b37eb09
|
||||||
F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
|
F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
|
||||||
F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
|
F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
|
||||||
F ext/icu/README.txt bf8461d8cdc6b8f514c080e4e10dc3b2bbdfefa9
|
F ext/icu/README.txt bf8461d8cdc6b8f514c080e4e10dc3b2bbdfefa9
|
||||||
@ -443,10 +440,10 @@ F test/fts3am.test 218aa6ba0dfc50c7c16b2022aac5c6be593d08d8
|
|||||||
F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18
|
F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18
|
||||||
F test/fts3ao.test b83f99f70e9eec85f27d75801a974b3f820e01f9
|
F test/fts3ao.test b83f99f70e9eec85f27d75801a974b3f820e01f9
|
||||||
F test/fts3atoken.test 25c2070e1e8755d414bf9c8200427b277a9f99fa
|
F test/fts3atoken.test 25c2070e1e8755d414bf9c8200427b277a9f99fa
|
||||||
F test/fts3aux1.test 6145608289e8a6337acb3432d592e57b8e46ad35
|
F test/fts3aux1.test 0ec0280f21987e8772948986cd631a1b47a14dd8
|
||||||
F test/fts3b.test e93bbb653e52afde110ad53bbd793f14fe7a8984
|
F test/fts3b.test e93bbb653e52afde110ad53bbd793f14fe7a8984
|
||||||
F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958
|
F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958
|
||||||
F test/fts3comp1.test dab659038f2e0e2f5807d51da4dde38e213e28da
|
F test/fts3comp1.test a0f5b16a2df44dd0b15751787130af2183167c0c
|
||||||
F test/fts3corrupt.test 7890cc202406858386ddf390a879dcf80bc10abf
|
F test/fts3corrupt.test 7890cc202406858386ddf390a879dcf80bc10abf
|
||||||
F test/fts3corrupt2.test 6d96efae2f8a6af3eeaf283aba437e6d0e5447ba
|
F test/fts3corrupt2.test 6d96efae2f8a6af3eeaf283aba437e6d0e5447ba
|
||||||
F test/fts3cov.test e0fb00d8b715ddae4a94c305992dfc3ef70353d7
|
F test/fts3cov.test e0fb00d8b715ddae4a94c305992dfc3ef70353d7
|
||||||
@ -909,14 +906,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 499edcbc8ab70fcf35431d4e672c68dbcb6c5aad
|
P 999c915a4a075a4d1736ae786cbe7d1587809fee
|
||||||
R cc7b57ce81720a94448946b660037826
|
R 21ef4f44397ebadeb7dd1b381e1ac485
|
||||||
U drh
|
U dan
|
||||||
Z 8745751948dcdf83f4b3e0ca2b57d0f3
|
Z 2b26bcdfd659b090671de58b945f2afb
|
||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
|
||||||
|
|
||||||
iD8DBQFNTA0XoxKgR168RlERAlrcAJ9SvZzElf1pzDXd0qVTSBS7d+6W0gCghh6x
|
|
||||||
w2v+KG+1xh3gtALTpGEpSA8=
|
|
||||||
=zWr7
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
|
@ -1 +1 @@
|
|||||||
999c915a4a075a4d1736ae786cbe7d1587809fee
|
3996f92a9aca9ac2628be003eca83c8f954c71de
|
@ -24,7 +24,7 @@ do_execsql_test 1.1 {
|
|||||||
INSERT INTO t1 VALUES('one three five seven');
|
INSERT INTO t1 VALUES('one three five seven');
|
||||||
|
|
||||||
CREATE VIRTUAL TABLE terms USING fts4aux(t1);
|
CREATE VIRTUAL TABLE terms USING fts4aux(t1);
|
||||||
SELECT * FROM terms;
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
} {
|
} {
|
||||||
five 2 2 four 2 2 one 2 2 seven 1 1
|
five 2 2 four 2 2 one 2 2 seven 1 1
|
||||||
six 1 1 three 3 3 two 1 1
|
six 1 1 three 3 3 two 1 1
|
||||||
@ -32,7 +32,7 @@ do_execsql_test 1.1 {
|
|||||||
|
|
||||||
do_execsql_test 1.2 {
|
do_execsql_test 1.2 {
|
||||||
INSERT INTO t1 VALUES('one one one three three three');
|
INSERT INTO t1 VALUES('one one one three three three');
|
||||||
SELECT * FROM terms;
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
} {
|
} {
|
||||||
five 2 2 four 2 2 one 3 5 seven 1 1
|
five 2 2 four 2 2 one 3 5 seven 1 1
|
||||||
six 1 1 three 4 6 two 1 1
|
six 1 1 three 4 6 two 1 1
|
||||||
@ -40,7 +40,7 @@ do_execsql_test 1.2 {
|
|||||||
|
|
||||||
do_execsql_test 1.3 {
|
do_execsql_test 1.3 {
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
SELECT * FROM terms;
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
} {}
|
} {}
|
||||||
|
|
||||||
do_execsql_test 1.4 {
|
do_execsql_test 1.4 {
|
||||||
@ -53,7 +53,7 @@ do_execsql_test 1.4 {
|
|||||||
INSERT INTO t1 SELECT * FROM t1;
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
INSERT INTO t1 SELECT * FROM t1;
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
INSERT INTO t1 SELECT * FROM t1;
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
SELECT * FROM terms;
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
} {a 256 1024 b 256 768}
|
} {a 256 1024 b 256 768}
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -84,6 +84,9 @@ do_execsql_test 2.0 {
|
|||||||
INSERT INTO x1(x1) VALUES('nodesize=24');
|
INSERT INTO x1(x1) VALUES('nodesize=24');
|
||||||
CREATE VIRTUAL TABLE terms USING fts4aux(x1);
|
CREATE VIRTUAL TABLE terms USING fts4aux(x1);
|
||||||
|
|
||||||
|
CREATE VIEW terms_v AS
|
||||||
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
|
|
||||||
INSERT INTO x1 VALUES('braes brag bragged bragger bragging');
|
INSERT INTO x1 VALUES('braes brag bragged bragger bragging');
|
||||||
INSERT INTO x1 VALUES('brags braid braided braiding braids');
|
INSERT INTO x1 VALUES('brags braid braided braiding braids');
|
||||||
INSERT INTO x1 VALUES('brain brainchild brained braining brains');
|
INSERT INTO x1 VALUES('brain brainchild brained braining brains');
|
||||||
@ -112,38 +115,38 @@ do_execsql_test 2.1.1.2 {
|
|||||||
#
|
#
|
||||||
do_test 2.1.2.1 {
|
do_test 2.1.2.1 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term='braid' }
|
execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND term='braid' }
|
||||||
set cnt
|
set cnt
|
||||||
} {1}
|
} {2}
|
||||||
do_test 2.1.2.2 {
|
do_test 2.1.2.2 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term='braid' }
|
execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND +term='braid' }
|
||||||
set cnt
|
set cnt
|
||||||
} {19}
|
} {38}
|
||||||
|
|
||||||
# Similar to the test immediately above, but using a term ("breakfast") that
|
# Similar to the test immediately above, but using a term ("breakfast") that
|
||||||
# is not featured in the dataset.
|
# is not featured in the dataset.
|
||||||
#
|
#
|
||||||
do_test 2.1.3.1 {
|
do_test 2.1.3.1 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term='breakfast' }
|
execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND term='breakfast' }
|
||||||
set cnt
|
set cnt
|
||||||
} {0}
|
} {0}
|
||||||
do_test 2.1.3.2 {
|
do_test 2.1.3.2 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term='breakfast' }
|
execsql { SELECT * FROM terms_v WHERE rec('cnt', term) AND +term='breakfast' }
|
||||||
set cnt
|
set cnt
|
||||||
} {19}
|
} {38}
|
||||||
|
|
||||||
do_execsql_test 2.1.4.1 { SELECT * FROM terms WHERE term='braid' } {braid 1 1}
|
do_execsql_test 2.1.4.1 { SELECT * FROM terms_v WHERE term='braid' } {braid 1 1}
|
||||||
do_execsql_test 2.1.4.2 { SELECT * FROM terms WHERE +term='braid' } {braid 1 1}
|
do_execsql_test 2.1.4.2 { SELECT * FROM terms_v WHERE +term='braid'} {braid 1 1}
|
||||||
do_execsql_test 2.1.4.3 { SELECT * FROM terms WHERE term='breakfast' } {}
|
do_execsql_test 2.1.4.3 { SELECT * FROM terms_v WHERE term='breakfast' } {}
|
||||||
do_execsql_test 2.1.4.4 { SELECT * FROM terms WHERE +term='breakfast' } {}
|
do_execsql_test 2.1.4.4 { SELECT * FROM terms_v WHERE +term='breakfast' } {}
|
||||||
|
|
||||||
do_execsql_test 2.1.4.5 { SELECT * FROM terms WHERE term='cba' } {}
|
do_execsql_test 2.1.4.5 { SELECT * FROM terms_v WHERE term='cba' } {}
|
||||||
do_execsql_test 2.1.4.6 { SELECT * FROM terms WHERE +term='cba' } {}
|
do_execsql_test 2.1.4.6 { SELECT * FROM terms_v WHERE +term='cba' } {}
|
||||||
do_execsql_test 2.1.4.7 { SELECT * FROM terms WHERE term='abc' } {}
|
do_execsql_test 2.1.4.7 { SELECT * FROM terms_v WHERE term='abc' } {}
|
||||||
do_execsql_test 2.1.4.8 { SELECT * FROM terms WHERE +term='abc' } {}
|
do_execsql_test 2.1.4.8 { SELECT * FROM terms_v WHERE +term='abc' } {}
|
||||||
|
|
||||||
# Special case: term=NULL
|
# Special case: term=NULL
|
||||||
#
|
#
|
||||||
@ -174,33 +177,33 @@ do_test 2.2.2.1 {
|
|||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term>'brain' }
|
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term>'brain' }
|
||||||
set cnt
|
set cnt
|
||||||
} {9}
|
} {18}
|
||||||
do_test 2.2.2.2 {
|
do_test 2.2.2.2 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term>'brain' }
|
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term>'brain' }
|
||||||
set cnt
|
set cnt
|
||||||
} {19}
|
} {38}
|
||||||
do_execsql_test 2.2.2.3 {
|
do_execsql_test 2.2.2.3 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND term>'brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE term>'brain'
|
||||||
} {
|
} {
|
||||||
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
||||||
brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.2.4 {
|
do_execsql_test 2.2.2.4 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND +term>'brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE +term>'brain'
|
||||||
} {
|
} {
|
||||||
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
||||||
brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.2.5 {
|
do_execsql_test 2.2.2.5 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND term>='brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE term>='brain'
|
||||||
} {
|
} {
|
||||||
brain 1 1
|
brain 1 1
|
||||||
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
||||||
brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
brainstem 1 1 brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.2.6 {
|
do_execsql_test 2.2.2.6 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND +term>='brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE +term>='brain'
|
||||||
} {
|
} {
|
||||||
brain 1 1
|
brain 1 1
|
||||||
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
brainchild 1 1 brained 1 1 braining 1 1 brains 1 1
|
||||||
@ -208,7 +211,7 @@ do_execsql_test 2.2.2.6 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_execsql_test 2.2.2.7 {
|
do_execsql_test 2.2.2.7 {
|
||||||
SELECT * FROM terms WHERE term>='abc'
|
SELECT term, documents, occurrences FROM terms_v WHERE term>='abc'
|
||||||
} {
|
} {
|
||||||
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1
|
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1
|
||||||
bragging 1 1 brags 1 1 braid 1 1 braided 1 1
|
bragging 1 1 brags 1 1 braid 1 1 braided 1 1
|
||||||
@ -217,7 +220,7 @@ do_execsql_test 2.2.2.7 {
|
|||||||
brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
brainstems 1 1 brainstorm 1 1 brainstorms 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.2.8 {
|
do_execsql_test 2.2.2.8 {
|
||||||
SELECT * FROM terms WHERE +term>='abc'
|
SELECT term, documents, occurrences FROM terms_v WHERE +term>='abc'
|
||||||
} {
|
} {
|
||||||
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1
|
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1
|
||||||
bragging 1 1 brags 1 1 braid 1 1 braided 1 1
|
bragging 1 1 brags 1 1 braid 1 1 braided 1 1
|
||||||
@ -227,48 +230,48 @@ do_execsql_test 2.2.2.8 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_execsql_test 2.2.2.9 {
|
do_execsql_test 2.2.2.9 {
|
||||||
SELECT * FROM terms WHERE term>='brainstorms'
|
SELECT term, documents, occurrences FROM terms_v WHERE term>='brainstorms'
|
||||||
} {brainstorms 1 1}
|
} {brainstorms 1 1}
|
||||||
do_execsql_test 2.2.2.10 {
|
do_execsql_test 2.2.2.10 {
|
||||||
SELECT * FROM terms WHERE term>='brainstorms'
|
SELECT term, documents, occurrences FROM terms_v WHERE term>='brainstorms'
|
||||||
} {brainstorms 1 1}
|
} {brainstorms 1 1}
|
||||||
do_execsql_test 2.2.2.11 { SELECT * FROM terms WHERE term>'brainstorms' } {}
|
do_execsql_test 2.2.2.11 { SELECT * FROM terms_v WHERE term>'brainstorms' } {}
|
||||||
do_execsql_test 2.2.2.12 { SELECT * FROM terms WHERE term>'brainstorms' } {}
|
do_execsql_test 2.2.2.12 { SELECT * FROM terms_v WHERE term>'brainstorms' } {}
|
||||||
|
|
||||||
do_execsql_test 2.2.2.13 { SELECT * FROM terms WHERE term>'cba' } {}
|
do_execsql_test 2.2.2.13 { SELECT * FROM terms_v WHERE term>'cba' } {}
|
||||||
do_execsql_test 2.2.2.14 { SELECT * FROM terms WHERE term>'cba' } {}
|
do_execsql_test 2.2.2.14 { SELECT * FROM terms_v WHERE term>'cba' } {}
|
||||||
|
|
||||||
do_test 2.2.3.1 {
|
do_test 2.2.3.1 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term<'brain' }
|
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND term<'brain' }
|
||||||
set cnt
|
set cnt
|
||||||
} {11}
|
} {22}
|
||||||
do_test 2.2.3.2 {
|
do_test 2.2.3.2 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term<'brain' }
|
execsql { SELECT * FROM terms WHERE rec('cnt', term) AND +term<'brain' }
|
||||||
set cnt
|
set cnt
|
||||||
} {19}
|
} {38}
|
||||||
do_execsql_test 2.2.3.3 {
|
do_execsql_test 2.2.3.3 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND term<'brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE term<'brain'
|
||||||
} {
|
} {
|
||||||
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
||||||
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.3.4 {
|
do_execsql_test 2.2.3.4 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND +term<'brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE +term<'brain'
|
||||||
} {
|
} {
|
||||||
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
||||||
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.3.5 {
|
do_execsql_test 2.2.3.5 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND term<='brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE term<='brain'
|
||||||
} {
|
} {
|
||||||
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
||||||
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
||||||
brain 1 1
|
brain 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.3.6 {
|
do_execsql_test 2.2.3.6 {
|
||||||
SELECT * FROM terms WHERE rec('cnt', term) AND +term<='brain'
|
SELECT term, documents, occurrences FROM terms_v WHERE +term<='brain'
|
||||||
} {
|
} {
|
||||||
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
braes 1 1 brag 1 1 bragged 1 1 bragger 1 1 bragging 1 1
|
||||||
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
||||||
@ -278,39 +281,39 @@ do_execsql_test 2.2.3.6 {
|
|||||||
do_test 2.2.4.1 {
|
do_test 2.2.4.1 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql {
|
execsql {
|
||||||
SELECT * FROM terms
|
SELECT term, documents, occurrences FROM terms
|
||||||
WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain'
|
WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain'
|
||||||
}
|
}
|
||||||
set cnt
|
set cnt
|
||||||
} {6}
|
} {12}
|
||||||
do_test 2.2.4.2 {
|
do_test 2.2.4.2 {
|
||||||
set cnt 0
|
set cnt 0
|
||||||
execsql {
|
execsql {
|
||||||
SELECT * FROM terms
|
SELECT term, documents, occurrences FROM terms
|
||||||
WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain'
|
WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain'
|
||||||
}
|
}
|
||||||
set cnt
|
set cnt
|
||||||
} {19}
|
} {38}
|
||||||
do_execsql_test 2.2.4.3 {
|
do_execsql_test 2.2.4.3 {
|
||||||
SELECT * FROM terms
|
SELECT term, documents, occurrences FROM terms_v
|
||||||
WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain'
|
WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain'
|
||||||
} {
|
} {
|
||||||
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1 brain 1 1
|
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1 brain 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.4.4 {
|
do_execsql_test 2.2.4.4 {
|
||||||
SELECT * FROM terms
|
SELECT term, documents, occurrences FROM terms_v
|
||||||
WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain'
|
WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain'
|
||||||
} {
|
} {
|
||||||
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1 brain 1 1
|
brags 1 1 braid 1 1 braided 1 1 braiding 1 1 braids 1 1 brain 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.4.5 {
|
do_execsql_test 2.2.4.5 {
|
||||||
SELECT * FROM terms
|
SELECT term, documents, occurrences FROM terms_v
|
||||||
WHERE rec('cnt', term) AND term > 'brags' AND term < 'brain'
|
WHERE rec('cnt', term) AND term > 'brags' AND term < 'brain'
|
||||||
} {
|
} {
|
||||||
braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
||||||
}
|
}
|
||||||
do_execsql_test 2.2.4.6 {
|
do_execsql_test 2.2.4.6 {
|
||||||
SELECT * FROM terms
|
SELECT term, documents, occurrences FROM terms_v
|
||||||
WHERE rec('cnt', term) AND +term > 'brags' AND +term < 'brain'
|
WHERE rec('cnt', term) AND +term > 'brags' AND +term < 'brain'
|
||||||
} {
|
} {
|
||||||
braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
braid 1 1 braided 1 1 braiding 1 1 braids 1 1
|
||||||
@ -393,8 +396,8 @@ do_execsql_test 4.1 {
|
|||||||
INSERT INTO x1 VALUES('f g h i j');
|
INSERT INTO x1 VALUES('f g h i j');
|
||||||
INSERT INTO x1 VALUES('k k l l a');
|
INSERT INTO x1 VALUES('k k l l a');
|
||||||
|
|
||||||
INSERT INTO x2 SELECT term FROM terms;
|
INSERT INTO x2 SELECT term FROM terms WHERE col = '*';
|
||||||
INSERT INTO x3 SELECT term FROM terms;
|
INSERT INTO x3 SELECT term FROM terms WHERE col = '*';
|
||||||
}
|
}
|
||||||
|
|
||||||
proc do_plansql_test {tn sql r} {
|
proc do_plansql_test {tn sql r} {
|
||||||
@ -403,7 +406,7 @@ proc do_plansql_test {tn sql r} {
|
|||||||
|
|
||||||
|
|
||||||
do_plansql_test 4.2 {
|
do_plansql_test 4.2 {
|
||||||
SELECT y FROM x2, terms WHERE y = term
|
SELECT y FROM x2, terms WHERE y = term AND col = '*'
|
||||||
} {
|
} {
|
||||||
0 0 0 {SCAN TABLE x2 (~1000000 rows)}
|
0 0 0 {SCAN TABLE x2 (~1000000 rows)}
|
||||||
0 1 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)}
|
0 1 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)}
|
||||||
@ -411,7 +414,7 @@ do_plansql_test 4.2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_plansql_test 4.3 {
|
do_plansql_test 4.3 {
|
||||||
SELECT y FROM terms, x2 WHERE y = term
|
SELECT y FROM terms, x2 WHERE y = term AND col = '*'
|
||||||
} {
|
} {
|
||||||
0 0 1 {SCAN TABLE x2 (~1000000 rows)}
|
0 0 1 {SCAN TABLE x2 (~1000000 rows)}
|
||||||
0 1 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)}
|
0 1 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 1: (~0 rows)}
|
||||||
@ -419,7 +422,7 @@ do_plansql_test 4.3 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_plansql_test 4.4 {
|
do_plansql_test 4.4 {
|
||||||
SELECT y FROM x3, terms WHERE y = term
|
SELECT y FROM x3, terms WHERE y = term AND col = '*'
|
||||||
} {
|
} {
|
||||||
0 0 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)}
|
0 0 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)}
|
||||||
0 1 0 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) (~10 rows)}
|
0 1 0 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) (~10 rows)}
|
||||||
@ -427,7 +430,7 @@ do_plansql_test 4.4 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_plansql_test 4.5 {
|
do_plansql_test 4.5 {
|
||||||
SELECT y FROM terms, x3 WHERE y = term AND occurrences>1
|
SELECT y FROM terms, x3 WHERE y = term AND occurrences>1 AND col = '*'
|
||||||
} {
|
} {
|
||||||
0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)}
|
0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0: (~0 rows)}
|
||||||
0 1 1 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) (~10 rows)}
|
0 1 1 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) (~10 rows)}
|
||||||
|
@ -88,14 +88,14 @@ foreach {tn zip unzip} {
|
|||||||
#
|
#
|
||||||
do_execsql_test 1.$tn.7 {
|
do_execsql_test 1.$tn.7 {
|
||||||
CREATE VIRTUAL TABLE terms USING fts4aux(t1);
|
CREATE VIRTUAL TABLE terms USING fts4aux(t1);
|
||||||
SELECT * FROM terms;
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
} {
|
} {
|
||||||
eight 1 1 four 2 2 nine 1 1 one 1 1
|
eight 1 1 four 2 2 nine 1 1 one 1 1
|
||||||
six 2 2 three 2 2 twelve 1 1 two 1 2
|
six 2 2 three 2 2 twelve 1 1 two 1 2
|
||||||
}
|
}
|
||||||
do_execsql_test 1.$tn.8 {
|
do_execsql_test 1.$tn.8 {
|
||||||
DELETE FROM t1 WHERE docid = 1;
|
DELETE FROM t1 WHERE docid = 1;
|
||||||
SELECT * FROM terms;
|
SELECT term, documents, occurrences FROM terms WHERE col = '*';
|
||||||
} {
|
} {
|
||||||
eight 1 1 four 1 1 nine 1 1
|
eight 1 1 four 1 1 nine 1 1
|
||||||
six 1 1 three 1 1 twelve 1 1
|
six 1 1 three 1 1 twelve 1 1
|
||||||
|
Reference in New Issue
Block a user