diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/fts5/fts5_storage.c | 6 | ||||
-rw-r--r-- | ext/fts5/test/fts5rank.test | 35 | ||||
-rw-r--r-- | ext/misc/carray.c | 2 | ||||
-rw-r--r-- | ext/misc/csv.c | 20 | ||||
-rw-r--r-- | ext/rbu/rbudiff.test | 60 |
5 files changed, 109 insertions, 14 deletions
diff --git a/ext/fts5/fts5_storage.c b/ext/fts5/fts5_storage.c index 90df3396c..a69588745 100644 --- a/ext/fts5/fts5_storage.c +++ b/ext/fts5/fts5_storage.c @@ -247,7 +247,11 @@ int sqlite3Fts5CreateTable( char *zErr = 0; rc = fts5ExecPrintf(pConfig->db, &zErr, "CREATE TABLE %Q.'%q_%q'(%s)%s", - pConfig->zDb, pConfig->zName, zPost, zDefn, bWithout?" WITHOUT ROWID":"" + pConfig->zDb, pConfig->zName, zPost, zDefn, +#ifndef SQLITE_FTS5_NO_WITHOUT_ROWID + bWithout?" WITHOUT ROWID": +#endif + "" ); if( zErr ){ *pzErr = sqlite3_mprintf( diff --git a/ext/fts5/test/fts5rank.test b/ext/fts5/test/fts5rank.test index e958aea15..a70c5d68e 100644 --- a/ext/fts5/test/fts5rank.test +++ b/ext/fts5/test/fts5rank.test @@ -100,30 +100,55 @@ do_test 2.7 { # following tests verify that that problem has been addressed. # foreach_detail_mode $::testprefix { - do_execsql_test 3.0 { + do_execsql_test 3.1.0 { CREATE VIRTUAL TABLE y1 USING fts5(z, detail=%DETAIL%); INSERT INTO y1 VALUES('test xyz'); INSERT INTO y1 VALUES('test test xyz test'); INSERT INTO y1 VALUES('test test xyz'); } - do_execsql_test 3.1 { + do_execsql_test 3.1.1 { SELECT rowid FROM y1('test OR tset'); } {1 2 3} - do_execsql_test 3.2 { + do_execsql_test 3.1.2 { SELECT rowid FROM y1('test OR tset') ORDER BY bm25(y1) } {2 3 1} - do_execsql_test 3.3 { + do_execsql_test 3.1.3 { SELECT rowid FROM y1('test OR tset') ORDER BY +rank } {2 3 1} - do_execsql_test 3.4 { + do_execsql_test 3.1.4 { SELECT rowid FROM y1('test OR tset') ORDER BY rank } {2 3 1} + + do_execsql_test 3.1.5 { + SELECT rowid FROM y1('test OR xyz') ORDER BY rank + } {3 2 1} + + + do_execsql_test 3.2.1 { + CREATE VIRTUAL TABLE z1 USING fts5(a, detail=%DETAIL%); + INSERT INTO z1 VALUES('wrinkle in time'); + SELECT * FROM z1 WHERE z1 MATCH 'wrinkle in time OR a wrinkle in time'; + } {{wrinkle in time}} } +do_execsql_test 4.1 { + 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 WHERE + VTest MATCH 'wrinkle in time OR a wrinkle in time' ORDER BY rank; +} {{wrinkle in time} {Bill Smith}} + + + finish_test diff --git a/ext/misc/carray.c b/ext/misc/carray.c index 6fdbecf57..025eb5db2 100644 --- a/ext/misc/carray.c +++ b/ext/misc/carray.c @@ -237,7 +237,7 @@ static int carrayFilter( if( idxNum<3 ){ pCur->eType = CARRAY_INT32; }else{ - int i; + unsigned char i; const char *zType = (const char*)sqlite3_value_text(argv[2]); for(i=0; i<sizeof(azType)/sizeof(azType[0]); i++){ if( sqlite3_stricmp(zType, azType[i])==0 ) break; diff --git a/ext/misc/csv.c b/ext/misc/csv.c index 3a7e32d31..2a9463bd6 100644 --- a/ext/misc/csv.c +++ b/ext/misc/csv.c @@ -48,6 +48,8 @@ SQLITE_EXTENSION_INIT1 #include <ctype.h> #include <stdio.h> +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* ** A macro to hint to the compiler that a function should not be ** inlined. @@ -230,7 +232,7 @@ static char *csv_read_one_field(CsvReader *p){ || (c==EOF && pc=='"') ){ do{ p->n--; }while( p->z[p->n]!='"' ); - p->cTerm = c; + p->cTerm = (char)c; break; } if( pc=='"' && c!='\r' ){ @@ -240,7 +242,7 @@ static char *csv_read_one_field(CsvReader *p){ if( c==EOF ){ csv_errmsg(p, "line %d: unterminated %c-quoted field\n", startLine, '"'); - p->cTerm = c; + p->cTerm = (char)c; break; } } @@ -257,7 +259,7 @@ static char *csv_read_one_field(CsvReader *p){ p->nLine++; if( p->n>0 && p->z[p->n-1]=='\r' ) p->n--; } - p->cTerm = c; + p->cTerm = (char)c; } if( p->z ) p->z[p->n] = 0; return p->z; @@ -336,9 +338,9 @@ static void csv_trim_whitespace(char *z){ /* Dequote the string */ static void csv_dequote(char *z){ - int i, j; + int j; char cQuote = z[0]; - size_t n; + size_t i, n; if( cQuote!='\'' && cQuote!='"' ) return; n = strlen(z); @@ -723,7 +725,8 @@ static int csvtabFilter( pCur->iRowid = 0; if( pCur->rdr.in==0 ){ assert( pCur->rdr.zIn==pTab->zData ); - assert( pTab->iStart<=pCur->rdr.nIn ); + assert( pTab->iStart>=0 ); + assert( (size_t)pTab->iStart<=pCur->rdr.nIn ); pCur->rdr.iIn = pTab->iStart; }else{ fseek(pCur->rdr.in, pTab->iStart, SEEK_SET); @@ -834,6 +837,7 @@ static sqlite3_module CsvModuleFauxWrite = { }; #endif /* SQLITE_TEST */ +#endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */ #ifdef _WIN32 @@ -849,6 +853,7 @@ int sqlite3_csv_init( char **pzErrMsg, const sqlite3_api_routines *pApi ){ +#ifndef SQLITE_OMIT_VIRTUALTABLE int rc; SQLITE_EXTENSION_INIT2(pApi); rc = sqlite3_create_module(db, "csv", &CsvModule, 0); @@ -858,4 +863,7 @@ int sqlite3_csv_init( } #endif return rc; +#else + return SQLITE_OK; +#endif } diff --git a/ext/rbu/rbudiff.test b/ext/rbu/rbudiff.test index fa8de319d..041a24242 100644 --- a/ext/rbu/rbudiff.test +++ b/ext/rbu/rbudiff.test @@ -203,7 +203,6 @@ foreach {tn init mod} { DELETE FROM 'x''y' WHERE rowid = 1; INSERT INTO 'x''y' VALUES('one two three'); } - } { forcedelete test.db test.db2 @@ -222,5 +221,64 @@ foreach {tn init mod} { } +ifcapable fts5 { + foreach {tn init mod} { + 1 { + CREATE VIRTUAL TABLE t1 USING fts5(c); + INSERT INTO t1 VALUES('a b c'); + INSERT INTO t1 VALUES('a b c'); + } { + DELETE FROM t1 WHERE rowid = 1; + INSERT INTO t1 VALUES('a b c'); + } + + 2 { + CREATE VIRTUAL TABLE t1 USING FTs5(c); + INSERT INTO t1 VALUES('a b c'); + INSERT INTO t1 VALUES('a b c'); + } { + DELETE FROM t1 WHERE rowid = 1; + INSERT INTO t1 VALUES('a b c'); + } + + 3 { + creAte virTUal +tablE t1 USING FTs5(c); + INSERT INTO t1 VALUES('a b c'); + INSERT INTO t1 VALUES('a b c'); + } { + DELETE FROM t1 WHERE rowid = 1; + INSERT INTO t1 VALUES('a b c'); + } + + } { + forcedelete test.db test.db2 + sqlite3 db test.db + db eval "$init" + sqlite3 db test.db2 + db eval "$init ; $mod" + db eval { INSERT INTO t1(t1) VALUES('optimize') } + db close + + do_test 3.$tn.1 { + set sql [get_vtab_rbudiff_sql test.db test.db2] + apply_rbudiff $sql test.db + } {SQLITE_DONE} + + sqlite3 db test.db + sqlite3 db2 test.db2 + do_test 3.$tn.2 { + db2 eval { SELECT * FROM t1 ORDER BY rowid } + } [db eval { SELECT * FROM t1 ORDER BY rowid }] + + do_test 3.$tn.3 { + db2 eval { INSERT INTO t1(t1) VALUES('integrity-check') } + } {} + + db close + db2 close + } +} + finish_test |