You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
8.2 KiB
233 lines
8.2 KiB
https://www.sqlite.org/cgi/src/info/374b5108087a2eae
|
|
|
|
--- sqlite3.c
|
|
+++ sqlite3.c
|
|
@@ -2121,11 +2121,25 @@
|
|
** following this call. The second parameter may be a NULL pointer, in
|
|
** which case the trigger setting is not reported back. </dd>
|
|
**
|
|
+** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
|
|
+** <dd> ^This option is used to enable or disable the two-argument
|
|
+** version of the [fts3_tokenizer()] function which is part of the
|
|
+** [FTS3] full-text search engine extension.
|
|
+** There should be two additional arguments.
|
|
+** The first argument is an integer which is 0 to disable fts3_tokenizer() or
|
|
+** positive to enable fts3_tokenizer() or negative to leave the setting
|
|
+** unchanged.
|
|
+** The second parameter is a pointer to an integer into which
|
|
+** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled
|
|
+** following this call. The second parameter may be a NULL pointer, in
|
|
+** which case the new setting is not reported back. </dd>
|
|
+**
|
|
** </dl>
|
|
*/
|
|
-#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
|
|
-#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
|
|
-#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
|
|
+#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
|
|
+#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
|
|
+#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
|
|
+#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */
|
|
|
|
|
|
/*
|
|
@@ -12206,6 +12220,7 @@
|
|
#define SQLITE_VdbeEQP 0x04000000 /* Debug EXPLAIN QUERY PLAN */
|
|
#define SQLITE_Vacuum 0x08000000 /* Currently in a VACUUM */
|
|
#define SQLITE_CellSizeCk 0x10000000 /* Check btree cell sizes on load */
|
|
+#define SQLITE_Fts3Tokenizer 0x20000000 /* Enable fts3_tokenizer(2) */
|
|
|
|
|
|
/*
|
|
@@ -133589,8 +133604,9 @@
|
|
int op; /* The opcode */
|
|
u32 mask; /* Mask of the bit in sqlite3.flags to set/clear */
|
|
} aFlagOp[] = {
|
|
- { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys },
|
|
- { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger },
|
|
+ { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys },
|
|
+ { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger },
|
|
+ { SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, SQLITE_Fts3Tokenizer },
|
|
};
|
|
unsigned int i;
|
|
rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
|
|
@@ -135607,6 +135623,9 @@
|
|
#if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
|
|
| SQLITE_CellSizeCk
|
|
#endif
|
|
+#if defined(SQLITE_ENABLE_FTS3_TOKENIZER)
|
|
+ | SQLITE_Fts3Tokenizer
|
|
+#endif
|
|
;
|
|
sqlite3HashInit(&db->aCollSeq);
|
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
|
@@ -146857,6 +146876,18 @@
|
|
/* #include <string.h> */
|
|
|
|
/*
|
|
+** Return true if the two-argument version of fts3_tokenizer()
|
|
+** has been activated via a prior call to sqlite3_db_config(db,
|
|
+** SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, 1, 0);
|
|
+*/
|
|
+static int fts3TokenizerEnabled(sqlite3_context *context){
|
|
+ sqlite3 *db = sqlite3_context_db_handle(context);
|
|
+ int isEnabled = 0;
|
|
+ sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER,-1,&isEnabled);
|
|
+ return isEnabled;
|
|
+}
|
|
+
|
|
+/*
|
|
** Implementation of the SQL scalar function for accessing the underlying
|
|
** hash table. This function may be called as follows:
|
|
**
|
|
@@ -146876,7 +146907,7 @@
|
|
** is a blob containing the pointer stored as the hash data corresponding
|
|
** to string <key-name> (after the hash-table is updated, if applicable).
|
|
*/
|
|
-static void scalarFunc(
|
|
+static void fts3TokenizerFunc(
|
|
sqlite3_context *context,
|
|
int argc,
|
|
sqlite3_value **argv
|
|
@@ -146894,27 +146925,23 @@
|
|
nName = sqlite3_value_bytes(argv[0])+1;
|
|
|
|
if( argc==2 ){
|
|
-#ifdef SQLITE_ENABLE_FTS3_TOKENIZER
|
|
- void *pOld;
|
|
- int n = sqlite3_value_bytes(argv[1]);
|
|
- if( zName==0 || n!=sizeof(pPtr) ){
|
|
- sqlite3_result_error(context, "argument type mismatch", -1);
|
|
- return;
|
|
- }
|
|
- pPtr = *(void **)sqlite3_value_blob(argv[1]);
|
|
- pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
|
|
- if( pOld==pPtr ){
|
|
- sqlite3_result_error(context, "out of memory", -1);
|
|
+ if( fts3TokenizerEnabled(context) ){
|
|
+ void *pOld;
|
|
+ int n = sqlite3_value_bytes(argv[1]);
|
|
+ if( zName==0 || n!=sizeof(pPtr) ){
|
|
+ sqlite3_result_error(context, "argument type mismatch", -1);
|
|
+ return;
|
|
+ }
|
|
+ pPtr = *(void **)sqlite3_value_blob(argv[1]);
|
|
+ pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
|
|
+ if( pOld==pPtr ){
|
|
+ sqlite3_result_error(context, "out of memory", -1);
|
|
+ }
|
|
+ }else{
|
|
+ sqlite3_result_error(context, "fts3tokenize disabled", -1);
|
|
return;
|
|
}
|
|
-#else
|
|
- sqlite3_result_error(context, "fts3tokenize: "
|
|
- "disabled - rebuild with -DSQLITE_ENABLE_FTS3_TOKENIZER", -1
|
|
- );
|
|
- return;
|
|
-#endif /* SQLITE_ENABLE_FTS3_TOKENIZER */
|
|
- }else
|
|
- {
|
|
+ }else{
|
|
if( zName ){
|
|
pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
|
|
}
|
|
@@ -146925,7 +146952,6 @@
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
|
|
}
|
|
|
|
@@ -147163,7 +147189,6 @@
|
|
Tcl_DecrRefCount(pRet);
|
|
}
|
|
|
|
-#ifdef SQLITE_ENABLE_FTS3_TOKENIZER
|
|
static
|
|
int registerTokenizer(
|
|
sqlite3 *db,
|
|
@@ -147185,7 +147210,6 @@
|
|
|
|
return sqlite3_finalize(pStmt);
|
|
}
|
|
-#endif /* SQLITE_ENABLE_FTS3_TOKENIZER */
|
|
|
|
|
|
static
|
|
@@ -147258,13 +147282,13 @@
|
|
assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") );
|
|
|
|
/* Test the storage function */
|
|
-#ifdef SQLITE_ENABLE_FTS3_TOKENIZER
|
|
- rc = registerTokenizer(db, "nosuchtokenizer", p1);
|
|
- assert( rc==SQLITE_OK );
|
|
- rc = queryTokenizer(db, "nosuchtokenizer", &p2);
|
|
- assert( rc==SQLITE_OK );
|
|
- assert( p2==p1 );
|
|
-#endif
|
|
+ if( fts3TokenizerEnabled(context) ){
|
|
+ rc = registerTokenizer(db, "nosuchtokenizer", p1);
|
|
+ assert( rc==SQLITE_OK );
|
|
+ rc = queryTokenizer(db, "nosuchtokenizer", &p2);
|
|
+ assert( rc==SQLITE_OK );
|
|
+ assert( p2==p1 );
|
|
+ }
|
|
|
|
sqlite3_result_text(context, "ok", -1, SQLITE_STATIC);
|
|
}
|
|
@@ -147280,7 +147304,7 @@
|
|
** sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
|
|
**
|
|
** This function adds a scalar function (see header comment above
|
|
-** scalarFunc() in this file for details) and, if ENABLE_TABLE is
|
|
+** fts3TokenizerFunc() in this file for details) and, if ENABLE_TABLE is
|
|
** defined at compilation time, a temporary virtual table (see header
|
|
** comment above struct HashTableVtab) to the database schema. Both
|
|
** provide read/write access to the contents of *pHash.
|
|
@@ -147309,10 +147333,10 @@
|
|
#endif
|
|
|
|
if( SQLITE_OK==rc ){
|
|
- rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
|
|
+ rc = sqlite3_create_function(db, zName, 1, any, p, fts3TokenizerFunc, 0, 0);
|
|
}
|
|
if( SQLITE_OK==rc ){
|
|
- rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
|
|
+ rc = sqlite3_create_function(db, zName, 2, any, p, fts3TokenizerFunc, 0, 0);
|
|
}
|
|
#ifdef SQLITE_TEST
|
|
if( SQLITE_OK==rc ){
|
|
--- sqlite3.h
|
|
+++ sqlite3.h
|
|
@@ -1904,11 +1904,25 @@
|
|
** following this call. The second parameter may be a NULL pointer, in
|
|
** which case the trigger setting is not reported back. </dd>
|
|
**
|
|
+** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
|
|
+** <dd> ^This option is used to enable or disable the two-argument
|
|
+** version of the [fts3_tokenizer()] function which is part of the
|
|
+** [FTS3] full-text search engine extension.
|
|
+** There should be two additional arguments.
|
|
+** The first argument is an integer which is 0 to disable fts3_tokenizer() or
|
|
+** positive to enable fts3_tokenizer() or negative to leave the setting
|
|
+** unchanged.
|
|
+** The second parameter is a pointer to an integer into which
|
|
+** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled
|
|
+** following this call. The second parameter may be a NULL pointer, in
|
|
+** which case the new setting is not reported back. </dd>
|
|
+**
|
|
** </dl>
|
|
*/
|
|
-#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
|
|
-#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
|
|
-#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
|
|
+#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
|
|
+#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
|
|
+#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
|
|
+#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */
|
|
|
|
|
|
/*
|