aboutsummaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/fts5/fts5_storage.c6
-rw-r--r--ext/fts5/test/fts5rank.test35
-rw-r--r--ext/misc/carray.c2
-rw-r--r--ext/misc/csv.c20
-rw-r--r--ext/rbu/rbudiff.test60
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