Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(929)

Side by Side Diff: third_party/sqlite/src/ext/fts3/fts3_tokenizer.c

Issue 1610963002: Import SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 ** 2007 June 22 2 ** 2007 June 22
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 assert( argc==1 || argc==2 ); 62 assert( argc==1 || argc==2 );
63 63
64 pHash = (Fts3Hash *)sqlite3_user_data(context); 64 pHash = (Fts3Hash *)sqlite3_user_data(context);
65 65
66 zName = sqlite3_value_text(argv[0]); 66 zName = sqlite3_value_text(argv[0]);
67 nName = sqlite3_value_bytes(argv[0])+1; 67 nName = sqlite3_value_bytes(argv[0])+1;
68 68
69 if( argc==2 ){ 69 if( argc==2 ){
70 void *pOld; 70 void *pOld;
71 int n = sqlite3_value_bytes(argv[1]); 71 int n = sqlite3_value_bytes(argv[1]);
72 if( n!=sizeof(pPtr) ){ 72 if( zName==0 || n!=sizeof(pPtr) ){
73 sqlite3_result_error(context, "argument type mismatch", -1); 73 sqlite3_result_error(context, "argument type mismatch", -1);
74 return; 74 return;
75 } 75 }
76 pPtr = *(void **)sqlite3_value_blob(argv[1]); 76 pPtr = *(void **)sqlite3_value_blob(argv[1]);
77 pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr); 77 pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
78 if( pOld==pPtr ){ 78 if( pOld==pPtr ){
79 sqlite3_result_error(context, "out of memory", -1); 79 sqlite3_result_error(context, "out of memory", -1);
80 return; 80 return;
81 } 81 }
82 }else{ 82 }else{
83 pPtr = sqlite3Fts3HashFind(pHash, zName, nName); 83 if( zName ){
84 pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
85 }
84 if( !pPtr ){ 86 if( !pPtr ){
85 char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName); 87 char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
86 sqlite3_result_error(context, zErr, -1); 88 sqlite3_result_error(context, zErr, -1);
87 sqlite3_free(zErr); 89 sqlite3_free(zErr);
88 return; 90 return;
89 } 91 }
90 } 92 }
91 93
92 sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT); 94 sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
93 } 95 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 int n = 0; 156 int n = 0;
155 char *zCopy; 157 char *zCopy;
156 char *zEnd; /* Pointer to nul-term of zCopy */ 158 char *zEnd; /* Pointer to nul-term of zCopy */
157 sqlite3_tokenizer_module *m; 159 sqlite3_tokenizer_module *m;
158 160
159 zCopy = sqlite3_mprintf("%s", zArg); 161 zCopy = sqlite3_mprintf("%s", zArg);
160 if( !zCopy ) return SQLITE_NOMEM; 162 if( !zCopy ) return SQLITE_NOMEM;
161 zEnd = &zCopy[strlen(zCopy)]; 163 zEnd = &zCopy[strlen(zCopy)];
162 164
163 z = (char *)sqlite3Fts3NextToken(zCopy, &n); 165 z = (char *)sqlite3Fts3NextToken(zCopy, &n);
166 if( z==0 ){
167 assert( n==0 );
168 z = zCopy;
169 }
164 z[n] = '\0'; 170 z[n] = '\0';
165 sqlite3Fts3Dequote(z); 171 sqlite3Fts3Dequote(z);
166 172
167 m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1); 173 m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
168 if( !m ){ 174 if( !m ){
169 *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z); 175 sqlite3Fts3ErrMsg(pzErr, "unknown tokenizer: %s", z);
170 rc = SQLITE_ERROR; 176 rc = SQLITE_ERROR;
171 }else{ 177 }else{
172 char const **aArg = 0; 178 char const **aArg = 0;
173 int iArg = 0; 179 int iArg = 0;
174 z = &z[n+1]; 180 z = &z[n+1];
175 while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){ 181 while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){
176 int nNew = sizeof(char *)*(iArg+1); 182 int nNew = sizeof(char *)*(iArg+1);
177 char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew); 183 char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew);
178 if( !aNew ){ 184 if( !aNew ){
179 sqlite3_free(zCopy); 185 sqlite3_free(zCopy);
180 sqlite3_free((void *)aArg); 186 sqlite3_free((void *)aArg);
181 return SQLITE_NOMEM; 187 return SQLITE_NOMEM;
182 } 188 }
183 aArg = aNew; 189 aArg = aNew;
184 aArg[iArg++] = z; 190 aArg[iArg++] = z;
185 z[n] = '\0'; 191 z[n] = '\0';
186 sqlite3Fts3Dequote(z); 192 sqlite3Fts3Dequote(z);
187 z = &z[n+1]; 193 z = &z[n+1];
188 } 194 }
189 rc = m->xCreate(iArg, aArg, ppTok); 195 rc = m->xCreate(iArg, aArg, ppTok);
190 assert( rc!=SQLITE_OK || *ppTok ); 196 assert( rc!=SQLITE_OK || *ppTok );
191 if( rc!=SQLITE_OK ){ 197 if( rc!=SQLITE_OK ){
192 *pzErr = sqlite3_mprintf("unknown tokenizer"); 198 sqlite3Fts3ErrMsg(pzErr, "unknown tokenizer");
193 }else{ 199 }else{
194 (*ppTok)->pModule = m; 200 (*ppTok)->pModule = m;
195 } 201 }
196 sqlite3_free((void *)aArg); 202 sqlite3_free((void *)aArg);
197 } 203 }
198 204
199 sqlite3_free(zCopy); 205 sqlite3_free(zCopy);
200 return rc; 206 return rc;
201 } 207 }
202 208
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 272
267 nName = sqlite3_value_bytes(argv[0]); 273 nName = sqlite3_value_bytes(argv[0]);
268 zName = (const char *)sqlite3_value_text(argv[0]); 274 zName = (const char *)sqlite3_value_text(argv[0]);
269 nInput = sqlite3_value_bytes(argv[argc-1]); 275 nInput = sqlite3_value_bytes(argv[argc-1]);
270 zInput = (const char *)sqlite3_value_text(argv[argc-1]); 276 zInput = (const char *)sqlite3_value_text(argv[argc-1]);
271 277
272 pHash = (Fts3Hash *)sqlite3_user_data(context); 278 pHash = (Fts3Hash *)sqlite3_user_data(context);
273 p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1); 279 p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
274 280
275 if( !p ){ 281 if( !p ){
276 char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName); 282 char *zErr2 = sqlite3_mprintf("unknown tokenizer: %s", zName);
277 sqlite3_result_error(context, zErr, -1); 283 sqlite3_result_error(context, zErr2, -1);
278 sqlite3_free(zErr); 284 sqlite3_free(zErr2);
279 return; 285 return;
280 } 286 }
281 287
282 pRet = Tcl_NewObj(); 288 pRet = Tcl_NewObj();
283 Tcl_IncrRefCount(pRet); 289 Tcl_IncrRefCount(pRet);
284 290
285 for(i=1; i<argc-1; i++){ 291 for(i=1; i<argc-1; i++){
286 azArg[i-1] = (const char *)sqlite3_value_text(argv[i]); 292 azArg[i-1] = (const char *)sqlite3_value_text(argv[i]);
287 } 293 }
288 294
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 485
480 #ifdef SQLITE_TEST 486 #ifdef SQLITE_TEST
481 sqlite3_free(zTest); 487 sqlite3_free(zTest);
482 sqlite3_free(zTest2); 488 sqlite3_free(zTest2);
483 #endif 489 #endif
484 490
485 return rc; 491 return rc;
486 } 492 }
487 493
488 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ 494 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
OLDNEW
« no previous file with comments | « third_party/sqlite/src/ext/fts3/fts3_tokenize_vtab.c ('k') | third_party/sqlite/src/ext/fts3/fts3_write.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698