| Index: third_party/sqlite/src/ext/fts3/fts3_tokenizer.c
|
| diff --git a/third_party/sqlite/src/ext/fts3/fts3_tokenizer.c b/third_party/sqlite/src/ext/fts3/fts3_tokenizer.c
|
| index aa28933439cea86d5a722f2537d08226f608a11b..04f84460e87be324685a16a1c9dd8c08b6e4bf0a 100644
|
| --- a/third_party/sqlite/src/ext/fts3/fts3_tokenizer.c
|
| +++ b/third_party/sqlite/src/ext/fts3/fts3_tokenizer.c
|
| @@ -23,14 +23,9 @@
|
| ** * The FTS3 module is being built into the core of
|
| ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
|
| */
|
| +#include "fts3Int.h"
|
| #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
|
|
|
| -#include "sqlite3ext.h"
|
| -#ifndef SQLITE_CORE
|
| - SQLITE_EXTENSION_INIT1
|
| -#endif
|
| -
|
| -#include "fts3Int.h"
|
| #include <assert.h>
|
| #include <string.h>
|
|
|
| @@ -156,7 +151,7 @@ int sqlite3Fts3InitTokenizer(
|
| ){
|
| int rc;
|
| char *z = (char *)zArg;
|
| - int n;
|
| + int n = 0;
|
| char *zCopy;
|
| char *zEnd; /* Pointer to nul-term of zCopy */
|
| sqlite3_tokenizer_module *m;
|
| @@ -214,10 +209,9 @@ int sqlite3Fts3InitTokenizer(
|
| /*
|
| ** Implementation of a special SQL scalar function for testing tokenizers
|
| ** designed to be used in concert with the Tcl testing framework. This
|
| -** function must be called with two arguments:
|
| +** function must be called with two or more arguments:
|
| **
|
| -** SELECT <function-name>(<key-name>, <input-string>);
|
| -** SELECT <function-name>(<key-name>, <pointer>);
|
| +** SELECT <function-name>(<key-name>, ..., <input-string>);
|
| **
|
| ** where <function-name> is the name passed as the second argument
|
| ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer')
|
| @@ -254,27 +248,27 @@ static void testFunc(
|
| const char *zInput;
|
| int nInput;
|
|
|
| - const char *zArg = 0;
|
| + const char *azArg[64];
|
|
|
| const char *zToken;
|
| - int nToken;
|
| - int iStart;
|
| - int iEnd;
|
| - int iPos;
|
| + int nToken = 0;
|
| + int iStart = 0;
|
| + int iEnd = 0;
|
| + int iPos = 0;
|
| + int i;
|
|
|
| Tcl_Obj *pRet;
|
|
|
| - assert( argc==2 || argc==3 );
|
| + if( argc<2 ){
|
| + sqlite3_result_error(context, "insufficient arguments", -1);
|
| + return;
|
| + }
|
|
|
| nName = sqlite3_value_bytes(argv[0]);
|
| zName = (const char *)sqlite3_value_text(argv[0]);
|
| nInput = sqlite3_value_bytes(argv[argc-1]);
|
| zInput = (const char *)sqlite3_value_text(argv[argc-1]);
|
|
|
| - if( argc==3 ){
|
| - zArg = (const char *)sqlite3_value_text(argv[1]);
|
| - }
|
| -
|
| pHash = (Fts3Hash *)sqlite3_user_data(context);
|
| p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
|
|
|
| @@ -288,16 +282,19 @@ static void testFunc(
|
| pRet = Tcl_NewObj();
|
| Tcl_IncrRefCount(pRet);
|
|
|
| - if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){
|
| + for(i=1; i<argc-1; i++){
|
| + azArg[i-1] = (const char *)sqlite3_value_text(argv[i]);
|
| + }
|
| +
|
| + if( SQLITE_OK!=p->xCreate(argc-2, azArg, &pTokenizer) ){
|
| zErr = "error in xCreate()";
|
| goto finish;
|
| }
|
| pTokenizer->pModule = p;
|
| - if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){
|
| + if( sqlite3Fts3OpenTokenizer(pTokenizer, 0, zInput, nInput, &pCsr) ){
|
| zErr = "error in xOpen()";
|
| goto finish;
|
| }
|
| - pCsr->pTokenizer = pTokenizer;
|
|
|
| while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){
|
| Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos));
|
| @@ -431,7 +428,7 @@ static void intTestFunc(
|
| /*
|
| ** Set up SQL objects in database db used to access the contents of
|
| ** the hash table pointed to by argument pHash. The hash table must
|
| -** been initialised to use string keys, and to take a private copy
|
| +** been initialized to use string keys, and to take a private copy
|
| ** of the key when a value is inserted. i.e. by a call similar to:
|
| **
|
| ** sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
|
| @@ -473,10 +470,7 @@ int sqlite3Fts3InitHashTable(
|
| }
|
| #ifdef SQLITE_TEST
|
| if( SQLITE_OK==rc ){
|
| - rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0);
|
| - }
|
| - if( SQLITE_OK==rc ){
|
| - rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0);
|
| + rc = sqlite3_create_function(db, zTest, -1, any, p, testFunc, 0, 0);
|
| }
|
| if( SQLITE_OK==rc ){
|
| rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0);
|
|
|