1 /* 2 ** 2002 February 23 3 ** 4 ** The author disclaims copyright to this source code. In place of 5 ** a legal notice, here is a blessing: 6 ** 7 ** May you do good and not evil. 8 ** May you find forgiveness for yourself and forgive others. 9 ** May you share freely, never taking more than you give. 10 ** 11 ************************************************************************* 12 ** This file contains the C-language implementations for many of the SQL 13 ** functions of SQLite. (Some function, and in particular the date and 14 ** time functions, are implemented separately.) 15 */ 16 #include "sqliteInt.h" 17 #include <stdlib.h> 18 #include <assert.h> 19 #include "vdbeInt.h" 20 21 /* 22 ** Return the collating function associated with a function. 23 */ 24 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ 25 VdbeOp *pOp; 26 assert( context->pVdbe!=0 ); 27 pOp = &context->pVdbe->aOp[context->iOp-1]; 28 assert( pOp->opcode==OP_CollSeq ); 29 assert( pOp->p4type==P4_COLLSEQ ); 30 return pOp->p4.pColl; 31 } 32 33 /* 34 ** Indicate that the accumulator load should be skipped on this 35 ** iteration of the aggregate loop. 36 */ 37 static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){ 38 assert( context->isError<=0 ); 39 context->isError = -1; 40 context->skipFlag = 1; 41 } 42 43 /* 44 ** Implementation of the non-aggregate min() and max() functions 45 */ 46 static void minmaxFunc( 47 sqlite3_context *context, 48 int argc, 49 sqlite3_value **argv 50 ){ 51 int i; 52 int mask; /* 0 for min() or 0xffffffff for max() */ 53 int iBest; 54 CollSeq *pColl; 55 56 assert( argc>1 ); 57 mask = sqlite3_user_data(context)==0 ? 0 : -1; 58 pColl = sqlite3GetFuncCollSeq(context); 59 assert( pColl ); 60 assert( mask==-1 || mask==0 ); 61 iBest = 0; 62 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 63 for(i=1; i<argc; i++){ 64 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return; 65 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){ 66 testcase( mask==0 ); 67 iBest = i; 68 } 69 } 70 sqlite3_result_value(context, argv[iBest]); 71 } 72 73 /* 74 ** Return the type of the argument. 75 */ 76 static void typeofFunc( 77 sqlite3_context *context, 78 int NotUsed, 79 sqlite3_value **argv 80 ){ 81 static const char *azType[] = { "integer", "real", "text", "blob", "null" }; 82 int i = sqlite3_value_type(argv[0]) - 1; 83 UNUSED_PARAMETER(NotUsed); 84 assert( i>=0 && i<ArraySize(azType) ); 85 assert( SQLITE_INTEGER==1 ); 86 assert( SQLITE_FLOAT==2 ); 87 assert( SQLITE_TEXT==3 ); 88 assert( SQLITE_BLOB==4 ); 89 assert( SQLITE_NULL==5 ); 90 /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns 91 ** the datatype code for the initial datatype of the sqlite3_value object 92 ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT, 93 ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */ 94 sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC); 95 } 96 97 98 /* 99 ** Implementation of the length() function 100 */ 101 static void lengthFunc( 102 sqlite3_context *context, 103 int argc, 104 sqlite3_value **argv 105 ){ 106 assert( argc==1 ); 107 UNUSED_PARAMETER(argc); 108 switch( sqlite3_value_type(argv[0]) ){ 109 case SQLITE_BLOB: 110 case SQLITE_INTEGER: 111 case SQLITE_FLOAT: { 112 sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); 113 break; 114 } 115 case SQLITE_TEXT: { 116 const unsigned char *z = sqlite3_value_text(argv[0]); 117 const unsigned char *z0; 118 unsigned char c; 119 if( z==0 ) return; 120 z0 = z; 121 while( (c = *z)!=0 ){ 122 z++; 123 if( c>=0xc0 ){ 124 while( (*z & 0xc0)==0x80 ){ z++; z0++; } 125 } 126 } 127 sqlite3_result_int(context, (int)(z-z0)); 128 break; 129 } 130 default: { 131 sqlite3_result_null(context); 132 break; 133 } 134 } 135 } 136 137 /* 138 ** Implementation of the abs() function. 139 ** 140 ** IMP: R-23979-26855 The abs(X) function returns the absolute value of 141 ** the numeric argument X. 142 */ 143 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 144 assert( argc==1 ); 145 UNUSED_PARAMETER(argc); 146 switch( sqlite3_value_type(argv[0]) ){ 147 case SQLITE_INTEGER: { 148 i64 iVal = sqlite3_value_int64(argv[0]); 149 if( iVal<0 ){ 150 if( iVal==SMALLEST_INT64 ){ 151 /* IMP: R-31676-45509 If X is the integer -9223372036854775808 152 ** then abs(X) throws an integer overflow error since there is no 153 ** equivalent positive 64-bit two complement value. */ 154 sqlite3_result_error(context, "integer overflow", -1); 155 return; 156 } 157 iVal = -iVal; 158 } 159 sqlite3_result_int64(context, iVal); 160 break; 161 } 162 case SQLITE_NULL: { 163 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */ 164 sqlite3_result_null(context); 165 break; 166 } 167 default: { 168 /* Because sqlite3_value_double() returns 0.0 if the argument is not 169 ** something that can be converted into a number, we have: 170 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob 171 ** that cannot be converted to a numeric value. 172 */ 173 double rVal = sqlite3_value_double(argv[0]); 174 if( rVal<0 ) rVal = -rVal; 175 sqlite3_result_double(context, rVal); 176 break; 177 } 178 } 179 } 180 181 /* 182 ** Implementation of the instr() function. 183 ** 184 ** instr(haystack,needle) finds the first occurrence of needle 185 ** in haystack and returns the number of previous characters plus 1, 186 ** or 0 if needle does not occur within haystack. 187 ** 188 ** If both haystack and needle are BLOBs, then the result is one more than 189 ** the number of bytes in haystack prior to the first occurrence of needle, 190 ** or 0 if needle never occurs in haystack. 191 */ 192 static void instrFunc( 193 sqlite3_context *context, 194 int argc, 195 sqlite3_value **argv 196 ){ 197 const unsigned char *zHaystack; 198 const unsigned char *zNeedle; 199 int nHaystack; 200 int nNeedle; 201 int typeHaystack, typeNeedle; 202 int N = 1; 203 int isText; 204 unsigned char firstChar; 205 206 UNUSED_PARAMETER(argc); 207 typeHaystack = sqlite3_value_type(argv[0]); 208 typeNeedle = sqlite3_value_type(argv[1]); 209 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; 210 nHaystack = sqlite3_value_bytes(argv[0]); 211 nNeedle = sqlite3_value_bytes(argv[1]); 212 if( nNeedle>0 ){ 213 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ 214 zHaystack = sqlite3_value_blob(argv[0]); 215 zNeedle = sqlite3_value_blob(argv[1]); 216 isText = 0; 217 }else{ 218 zHaystack = sqlite3_value_text(argv[0]); 219 zNeedle = sqlite3_value_text(argv[1]); 220 isText = 1; 221 } 222 if( zNeedle==0 || (nHaystack && zHaystack==0) ) return; 223 firstChar = zNeedle[0]; 224 while( nNeedle<=nHaystack 225 && (zHaystack[0]!=firstChar || memcmp(zHaystack, zNeedle, nNeedle)!=0) 226 ){ 227 N++; 228 do{ 229 nHaystack--; 230 zHaystack++; 231 }while( isText && (zHaystack[0]&0xc0)==0x80 ); 232 } 233 if( nNeedle>nHaystack ) N = 0; 234 } 235 sqlite3_result_int(context, N); 236 } 237 238 /* 239 ** Implementation of the printf() function. 240 */ 241 static void printfFunc( 242 sqlite3_context *context, 243 int argc, 244 sqlite3_value **argv 245 ){ 246 PrintfArguments x; 247 StrAccum str; 248 const char *zFormat; 249 int n; 250 sqlite3 *db = sqlite3_context_db_handle(context); 251 252 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){ 253 x.nArg = argc-1; 254 x.nUsed = 0; 255 x.apArg = argv+1; 256 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]); 257 str.printfFlags = SQLITE_PRINTF_SQLFUNC; 258 sqlite3_str_appendf(&str, zFormat, &x); 259 n = str.nChar; 260 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n, 261 SQLITE_DYNAMIC); 262 } 263 } 264 265 /* 266 ** Implementation of the substr() function. 267 ** 268 ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. 269 ** p1 is 1-indexed. So substr(x,1,1) returns the first character 270 ** of x. If x is text, then we actually count UTF-8 characters. 271 ** If x is a blob, then we count bytes. 272 ** 273 ** If p1 is negative, then we begin abs(p1) from the end of x[]. 274 ** 275 ** If p2 is negative, return the p2 characters preceding p1. 276 */ 277 static void substrFunc( 278 sqlite3_context *context, 279 int argc, 280 sqlite3_value **argv 281 ){ 282 const unsigned char *z; 283 const unsigned char *z2; 284 int len; 285 int p0type; 286 i64 p1, p2; 287 int negP2 = 0; 288 289 assert( argc==3 || argc==2 ); 290 if( sqlite3_value_type(argv[1])==SQLITE_NULL 291 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL) 292 ){ 293 return; 294 } 295 p0type = sqlite3_value_type(argv[0]); 296 p1 = sqlite3_value_int(argv[1]); 297 if( p0type==SQLITE_BLOB ){ 298 len = sqlite3_value_bytes(argv[0]); 299 z = sqlite3_value_blob(argv[0]); 300 if( z==0 ) return; 301 assert( len==sqlite3_value_bytes(argv[0]) ); 302 }else{ 303 z = sqlite3_value_text(argv[0]); 304 if( z==0 ) return; 305 len = 0; 306 if( p1<0 ){ 307 for(z2=z; *z2; len++){ 308 SQLITE_SKIP_UTF8(z2); 309 } 310 } 311 } 312 #ifdef SQLITE_SUBSTR_COMPATIBILITY 313 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as 314 ** as substr(X,1,N) - it returns the first N characters of X. This 315 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8] 316 ** from 2009-02-02 for compatibility of applications that exploited the 317 ** old buggy behavior. */ 318 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */ 319 #endif 320 if( argc==3 ){ 321 p2 = sqlite3_value_int(argv[2]); 322 if( p2<0 ){ 323 p2 = -p2; 324 negP2 = 1; 325 } 326 }else{ 327 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH]; 328 } 329 if( p1<0 ){ 330 p1 += len; 331 if( p1<0 ){ 332 p2 += p1; 333 if( p2<0 ) p2 = 0; 334 p1 = 0; 335 } 336 }else if( p1>0 ){ 337 p1--; 338 }else if( p2>0 ){ 339 p2--; 340 } 341 if( negP2 ){ 342 p1 -= p2; 343 if( p1<0 ){ 344 p2 += p1; 345 p1 = 0; 346 } 347 } 348 assert( p1>=0 && p2>=0 ); 349 if( p0type!=SQLITE_BLOB ){ 350 while( *z && p1 ){ 351 SQLITE_SKIP_UTF8(z); 352 p1--; 353 } 354 for(z2=z; *z2 && p2; p2--){ 355 SQLITE_SKIP_UTF8(z2); 356 } 357 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT, 358 SQLITE_UTF8); 359 }else{ 360 if( p1+p2>len ){ 361 p2 = len-p1; 362 if( p2<0 ) p2 = 0; 363 } 364 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT); 365 } 366 } 367 368 /* 369 ** Implementation of the round() function 370 */ 371 #ifndef SQLITE_OMIT_FLOATING_POINT 372 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 373 int n = 0; 374 double r; 375 char *zBuf; 376 assert( argc==1 || argc==2 ); 377 if( argc==2 ){ 378 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return; 379 n = sqlite3_value_int(argv[1]); 380 if( n>30 ) n = 30; 381 if( n<0 ) n = 0; 382 } 383 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 384 r = sqlite3_value_double(argv[0]); 385 /* If Y==0 and X will fit in a 64-bit int, 386 ** handle the rounding directly, 387 ** otherwise use printf. 388 */ 389 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){ 390 r = (double)((sqlite_int64)(r+0.5)); 391 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){ 392 r = -(double)((sqlite_int64)((-r)+0.5)); 393 }else{ 394 zBuf = sqlite3_mprintf("%.*f",n,r); 395 if( zBuf==0 ){ 396 sqlite3_result_error_nomem(context); 397 return; 398 } 399 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8); 400 sqlite3_free(zBuf); 401 } 402 sqlite3_result_double(context, r); 403 } 404 #endif 405 406 /* 407 ** Allocate nByte bytes of space using sqlite3Malloc(). If the 408 ** allocation fails, call sqlite3_result_error_nomem() to notify 409 ** the database handle that malloc() has failed and return NULL. 410 ** If nByte is larger than the maximum string or blob length, then 411 ** raise an SQLITE_TOOBIG exception and return NULL. 412 */ 413 static void *contextMalloc(sqlite3_context *context, i64 nByte){ 414 char *z; 415 sqlite3 *db = sqlite3_context_db_handle(context); 416 assert( nByte>0 ); 417 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] ); 418 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); 419 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ 420 sqlite3_result_error_toobig(context); 421 z = 0; 422 }else{ 423 z = sqlite3Malloc(nByte); 424 if( !z ){ 425 sqlite3_result_error_nomem(context); 426 } 427 } 428 return z; 429 } 430 431 /* 432 ** Implementation of the upper() and lower() SQL functions. 433 */ 434 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 435 char *z1; 436 const char *z2; 437 int i, n; 438 UNUSED_PARAMETER(argc); 439 z2 = (char*)sqlite3_value_text(argv[0]); 440 n = sqlite3_value_bytes(argv[0]); 441 /* Verify that the call to _bytes() does not invalidate the _text() pointer */ 442 assert( z2==(char*)sqlite3_value_text(argv[0]) ); 443 if( z2 ){ 444 z1 = contextMalloc(context, ((i64)n)+1); 445 if( z1 ){ 446 for(i=0; i<n; i++){ 447 z1[i] = (char)sqlite3Toupper(z2[i]); 448 } 449 sqlite3_result_text(context, z1, n, sqlite3_free); 450 } 451 } 452 } 453 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 454 char *z1; 455 const char *z2; 456 int i, n; 457 UNUSED_PARAMETER(argc); 458 z2 = (char*)sqlite3_value_text(argv[0]); 459 n = sqlite3_value_bytes(argv[0]); 460 /* Verify that the call to _bytes() does not invalidate the _text() pointer */ 461 assert( z2==(char*)sqlite3_value_text(argv[0]) ); 462 if( z2 ){ 463 z1 = contextMalloc(context, ((i64)n)+1); 464 if( z1 ){ 465 for(i=0; i<n; i++){ 466 z1[i] = sqlite3Tolower(z2[i]); 467 } 468 sqlite3_result_text(context, z1, n, sqlite3_free); 469 } 470 } 471 } 472 473 /* 474 ** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented 475 ** as VDBE code so that unused argument values do not have to be computed. 476 ** However, we still need some kind of function implementation for this 477 ** routines in the function table. The noopFunc macro provides this. 478 ** noopFunc will never be called so it doesn't matter what the implementation 479 ** is. We might as well use the "version()" function as a substitute. 480 */ 481 #define noopFunc versionFunc /* Substitute function - never called */ 482 483 /* 484 ** Implementation of random(). Return a random integer. 485 */ 486 static void randomFunc( 487 sqlite3_context *context, 488 int NotUsed, 489 sqlite3_value **NotUsed2 490 ){ 491 sqlite_int64 r; 492 UNUSED_PARAMETER2(NotUsed, NotUsed2); 493 sqlite3_randomness(sizeof(r), &r); 494 if( r<0 ){ 495 /* We need to prevent a random number of 0x8000000000000000 496 ** (or -9223372036854775808) since when you do abs() of that 497 ** number of you get the same value back again. To do this 498 ** in a way that is testable, mask the sign bit off of negative 499 ** values, resulting in a positive value. Then take the 500 ** 2s complement of that positive value. The end result can 501 ** therefore be no less than -9223372036854775807. 502 */ 503 r = -(r & LARGEST_INT64); 504 } 505 sqlite3_result_int64(context, r); 506 } 507 508 /* 509 ** Implementation of randomblob(N). Return a random blob 510 ** that is N bytes long. 511 */ 512 static void randomBlob( 513 sqlite3_context *context, 514 int argc, 515 sqlite3_value **argv 516 ){ 517 sqlite3_int64 n; 518 unsigned char *p; 519 assert( argc==1 ); 520 UNUSED_PARAMETER(argc); 521 n = sqlite3_value_int64(argv[0]); 522 if( n<1 ){ 523 n = 1; 524 } 525 p = contextMalloc(context, n); 526 if( p ){ 527 sqlite3_randomness(n, p); 528 sqlite3_result_blob(context, (char*)p, n, sqlite3_free); 529 } 530 } 531 532 /* 533 ** Implementation of the last_insert_rowid() SQL function. The return 534 ** value is the same as the sqlite3_last_insert_rowid() API function. 535 */ 536 static void last_insert_rowid( 537 sqlite3_context *context, 538 int NotUsed, 539 sqlite3_value **NotUsed2 540 ){ 541 sqlite3 *db = sqlite3_context_db_handle(context); 542 UNUSED_PARAMETER2(NotUsed, NotUsed2); 543 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a 544 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface 545 ** function. */ 546 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db)); 547 } 548 549 /* 550 ** Implementation of the changes() SQL function. 551 ** 552 ** IMP: R-62073-11209 The changes() SQL function is a wrapper 553 ** around the sqlite3_changes() C/C++ function and hence follows the same 554 ** rules for counting changes. 555 */ 556 static void changes( 557 sqlite3_context *context, 558 int NotUsed, 559 sqlite3_value **NotUsed2 560 ){ 561 sqlite3 *db = sqlite3_context_db_handle(context); 562 UNUSED_PARAMETER2(NotUsed, NotUsed2); 563 sqlite3_result_int(context, sqlite3_changes(db)); 564 } 565 566 /* 567 ** Implementation of the total_changes() SQL function. The return value is 568 ** the same as the sqlite3_total_changes() API function. 569 */ 570 static void total_changes( 571 sqlite3_context *context, 572 int NotUsed, 573 sqlite3_value **NotUsed2 574 ){ 575 sqlite3 *db = sqlite3_context_db_handle(context); 576 UNUSED_PARAMETER2(NotUsed, NotUsed2); 577 /* IMP: R-52756-41993 This function is a wrapper around the 578 ** sqlite3_total_changes() C/C++ interface. */ 579 sqlite3_result_int(context, sqlite3_total_changes(db)); 580 } 581 582 /* 583 ** A structure defining how to do GLOB-style comparisons. 584 */ 585 struct compareInfo { 586 u8 matchAll; /* "*" or "%" */ 587 u8 matchOne; /* "?" or "_" */ 588 u8 matchSet; /* "[" or 0 */ 589 u8 noCase; /* true to ignore case differences */ 590 }; 591 592 /* 593 ** For LIKE and GLOB matching on EBCDIC machines, assume that every 594 ** character is exactly one byte in size. Also, provde the Utf8Read() 595 ** macro for fast reading of the next character in the common case where 596 ** the next character is ASCII. 597 */ 598 #if defined(SQLITE_EBCDIC) 599 # define sqlite3Utf8Read(A) (*((*A)++)) 600 # define Utf8Read(A) (*(A++)) 601 #else 602 # define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A)) 603 #endif 604 605 static const struct compareInfo globInfo = { '*', '?', '[', 0 }; 606 /* The correct SQL-92 behavior is for the LIKE operator to ignore 607 ** case. Thus 'a' LIKE 'A' would be true. */ 608 static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 }; 609 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator 610 ** is case sensitive causing 'a' LIKE 'A' to be false */ 611 static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 }; 612 613 /* 614 ** Possible error returns from patternMatch() 615 */ 616 #define SQLITE_MATCH 0 617 #define SQLITE_NOMATCH 1 618 #define SQLITE_NOWILDCARDMATCH 2 619 620 /* 621 ** Compare two UTF-8 strings for equality where the first string is 622 ** a GLOB or LIKE expression. Return values: 623 ** 624 ** SQLITE_MATCH: Match 625 ** SQLITE_NOMATCH: No match 626 ** SQLITE_NOWILDCARDMATCH: No match in spite of having * or % wildcards. 627 ** 628 ** Globbing rules: 629 ** 630 ** '*' Matches any sequence of zero or more characters. 631 ** 632 ** '?' Matches exactly one character. 633 ** 634 ** [...] Matches one character from the enclosed list of 635 ** characters. 636 ** 637 ** [^...] Matches one character not in the enclosed list. 638 ** 639 ** With the [...] and [^...] matching, a ']' character can be included 640 ** in the list by making it the first character after '[' or '^'. A 641 ** range of characters can be specified using '-'. Example: 642 ** "[a-z]" matches any single lower-case letter. To match a '-', make 643 ** it the last character in the list. 644 ** 645 ** Like matching rules: 646 ** 647 ** '%' Matches any sequence of zero or more characters 648 ** 649 *** '_' Matches any one character 650 ** 651 ** Ec Where E is the "esc" character and c is any other 652 ** character, including '%', '_', and esc, match exactly c. 653 ** 654 ** The comments within this routine usually assume glob matching. 655 ** 656 ** This routine is usually quick, but can be N**2 in the worst case. 657 */ 658 static int patternCompare( 659 const u8 *zPattern, /* The glob pattern */ 660 const u8 *zString, /* The string to compare against the glob */ 661 const struct compareInfo *pInfo, /* Information about how to do the compare */ 662 u32 matchOther /* The escape char (LIKE) or '[' (GLOB) */ 663 ){ 664 u32 c, c2; /* Next pattern and input string chars */ 665 u32 matchOne = pInfo->matchOne; /* "?" or "_" */ 666 u32 matchAll = pInfo->matchAll; /* "*" or "%" */ 667 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */ 668 const u8 *zEscaped = 0; /* One past the last escaped input char */ 669 670 while( (c = Utf8Read(zPattern))!=0 ){ 671 if( c==matchAll ){ /* Match "*" */ 672 /* Skip over multiple "*" characters in the pattern. If there 673 ** are also "?" characters, skip those as well, but consume a 674 ** single character of the input string for each "?" skipped */ 675 while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){ 676 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){ 677 return SQLITE_NOWILDCARDMATCH; 678 } 679 } 680 if( c==0 ){ 681 return SQLITE_MATCH; /* "*" at the end of the pattern matches */ 682 }else if( c==matchOther ){ 683 if( pInfo->matchSet==0 ){ 684 c = sqlite3Utf8Read(&zPattern); 685 if( c==0 ) return SQLITE_NOWILDCARDMATCH; 686 }else{ 687 /* "[...]" immediately follows the "*". We have to do a slow 688 ** recursive search in this case, but it is an unusual case. */ 689 assert( matchOther<0x80 ); /* '[' is a single-byte character */ 690 while( *zString ){ 691 int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther); 692 if( bMatch!=SQLITE_NOMATCH ) return bMatch; 693 SQLITE_SKIP_UTF8(zString); 694 } 695 return SQLITE_NOWILDCARDMATCH; 696 } 697 } 698 699 /* At this point variable c contains the first character of the 700 ** pattern string past the "*". Search in the input string for the 701 ** first matching character and recursively continue the match from 702 ** that point. 703 ** 704 ** For a case-insensitive search, set variable cx to be the same as 705 ** c but in the other case and search the input string for either 706 ** c or cx. 707 */ 708 if( c<=0x80 ){ 709 char zStop[3]; 710 int bMatch; 711 if( noCase ){ 712 zStop[0] = sqlite3Toupper(c); 713 zStop[1] = sqlite3Tolower(c); 714 zStop[2] = 0; 715 }else{ 716 zStop[0] = c; 717 zStop[1] = 0; 718 } 719 while(1){ 720 zString += strcspn((const char*)zString, zStop); 721 if( zString[0]==0 ) break; 722 zString++; 723 bMatch = patternCompare(zPattern,zString,pInfo,matchOther); 724 if( bMatch!=SQLITE_NOMATCH ) return bMatch; 725 } 726 }else{ 727 int bMatch; 728 while( (c2 = Utf8Read(zString))!=0 ){ 729 if( c2!=c ) continue; 730 bMatch = patternCompare(zPattern,zString,pInfo,matchOther); 731 if( bMatch!=SQLITE_NOMATCH ) return bMatch; 732 } 733 } 734 return SQLITE_NOWILDCARDMATCH; 735 } 736 if( c==matchOther ){ 737 if( pInfo->matchSet==0 ){ 738 c = sqlite3Utf8Read(&zPattern); 739 if( c==0 ) return SQLITE_NOMATCH; 740 zEscaped = zPattern; 741 }else{ 742 u32 prior_c = 0; 743 int seen = 0; 744 int invert = 0; 745 c = sqlite3Utf8Read(&zString); 746 if( c==0 ) return SQLITE_NOMATCH; 747 c2 = sqlite3Utf8Read(&zPattern); 748 if( c2=='^' ){ 749 invert = 1; 750 c2 = sqlite3Utf8Read(&zPattern); 751 } 752 if( c2==']' ){ 753 if( c==']' ) seen = 1; 754 c2 = sqlite3Utf8Read(&zPattern); 755 } 756 while( c2 && c2!=']' ){ 757 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){ 758 c2 = sqlite3Utf8Read(&zPattern); 759 if( c>=prior_c && c<=c2 ) seen = 1; 760 prior_c = 0; 761 }else{ 762 if( c==c2 ){ 763 seen = 1; 764 } 765 prior_c = c2; 766 } 767 c2 = sqlite3Utf8Read(&zPattern); 768 } 769 if( c2==0 || (seen ^ invert)==0 ){ 770 return SQLITE_NOMATCH; 771 } 772 continue; 773 } 774 } 775 c2 = Utf8Read(zString); 776 if( c==c2 ) continue; 777 if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){ 778 continue; 779 } 780 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue; 781 return SQLITE_NOMATCH; 782 } 783 return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH; 784 } 785 786 /* 787 ** The sqlite3_strglob() interface. Return 0 on a match (like strcmp()) and 788 ** non-zero if there is no match. 789 */ 790 int sqlite3_strglob(const char *zGlobPattern, const char *zString){ 791 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '['); 792 } 793 794 /* 795 ** The sqlite3_strlike() interface. Return 0 on a match and non-zero for 796 ** a miss - like strcmp(). 797 */ 798 int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){ 799 return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc); 800 } 801 802 /* 803 ** Count the number of times that the LIKE operator (or GLOB which is 804 ** just a variation of LIKE) gets called. This is used for testing 805 ** only. 806 */ 807 #ifdef SQLITE_TEST 808 int sqlite3_like_count = 0; 809 #endif 810 811 812 /* 813 ** Implementation of the like() SQL function. This function implements 814 ** the build-in LIKE operator. The first argument to the function is the 815 ** pattern and the second argument is the string. So, the SQL statements: 816 ** 817 ** A LIKE B 818 ** 819 ** is implemented as like(B,A). 820 ** 821 ** This same function (with a different compareInfo structure) computes 822 ** the GLOB operator. 823 */ 824 static void likeFunc( 825 sqlite3_context *context, 826 int argc, 827 sqlite3_value **argv 828 ){ 829 const unsigned char *zA, *zB; 830 u32 escape; 831 int nPat; 832 sqlite3 *db = sqlite3_context_db_handle(context); 833 struct compareInfo *pInfo = sqlite3_user_data(context); 834 835 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS 836 if( sqlite3_value_type(argv[0])==SQLITE_BLOB 837 || sqlite3_value_type(argv[1])==SQLITE_BLOB 838 ){ 839 #ifdef SQLITE_TEST 840 sqlite3_like_count++; 841 #endif 842 sqlite3_result_int(context, 0); 843 return; 844 } 845 #endif 846 847 /* Limit the length of the LIKE or GLOB pattern to avoid problems 848 ** of deep recursion and N*N behavior in patternCompare(). 849 */ 850 nPat = sqlite3_value_bytes(argv[0]); 851 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ); 852 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 ); 853 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){ 854 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); 855 return; 856 } 857 if( argc==3 ){ 858 /* The escape character string must consist of a single UTF-8 character. 859 ** Otherwise, return an error. 860 */ 861 const unsigned char *zEsc = sqlite3_value_text(argv[2]); 862 if( zEsc==0 ) return; 863 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){ 864 sqlite3_result_error(context, 865 "ESCAPE expression must be a single character", -1); 866 return; 867 } 868 escape = sqlite3Utf8Read(&zEsc); 869 }else{ 870 escape = pInfo->matchSet; 871 } 872 zB = sqlite3_value_text(argv[0]); 873 zA = sqlite3_value_text(argv[1]); 874 if( zA && zB ){ 875 #ifdef SQLITE_TEST 876 sqlite3_like_count++; 877 #endif 878 sqlite3_result_int(context, 879 patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH); 880 } 881 } 882 883 /* 884 ** Implementation of the NULLIF(x,y) function. The result is the first 885 ** argument if the arguments are different. The result is NULL if the 886 ** arguments are equal to each other. 887 */ 888 static void nullifFunc( 889 sqlite3_context *context, 890 int NotUsed, 891 sqlite3_value **argv 892 ){ 893 CollSeq *pColl = sqlite3GetFuncCollSeq(context); 894 UNUSED_PARAMETER(NotUsed); 895 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){ 896 sqlite3_result_value(context, argv[0]); 897 } 898 } 899 900 /* 901 ** Implementation of the sqlite_version() function. The result is the version 902 ** of the SQLite library that is running. 903 */ 904 static void versionFunc( 905 sqlite3_context *context, 906 int NotUsed, 907 sqlite3_value **NotUsed2 908 ){ 909 UNUSED_PARAMETER2(NotUsed, NotUsed2); 910 /* IMP: R-48699-48617 This function is an SQL wrapper around the 911 ** sqlite3_libversion() C-interface. */ 912 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC); 913 } 914 915 /* 916 ** Implementation of the sqlite_source_id() function. The result is a string 917 ** that identifies the particular version of the source code used to build 918 ** SQLite. 919 */ 920 static void sourceidFunc( 921 sqlite3_context *context, 922 int NotUsed, 923 sqlite3_value **NotUsed2 924 ){ 925 UNUSED_PARAMETER2(NotUsed, NotUsed2); 926 /* IMP: R-24470-31136 This function is an SQL wrapper around the 927 ** sqlite3_sourceid() C interface. */ 928 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC); 929 } 930 931 /* 932 ** Implementation of the sqlite_log() function. This is a wrapper around 933 ** sqlite3_log(). The return value is NULL. The function exists purely for 934 ** its side-effects. 935 */ 936 static void errlogFunc( 937 sqlite3_context *context, 938 int argc, 939 sqlite3_value **argv 940 ){ 941 UNUSED_PARAMETER(argc); 942 UNUSED_PARAMETER(context); 943 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1])); 944 } 945 946 /* 947 ** Implementation of the sqlite_compileoption_used() function. 948 ** The result is an integer that identifies if the compiler option 949 ** was used to build SQLite. 950 */ 951 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 952 static void compileoptionusedFunc( 953 sqlite3_context *context, 954 int argc, 955 sqlite3_value **argv 956 ){ 957 const char *zOptName; 958 assert( argc==1 ); 959 UNUSED_PARAMETER(argc); 960 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL 961 ** function is a wrapper around the sqlite3_compileoption_used() C/C++ 962 ** function. 963 */ 964 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){ 965 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName)); 966 } 967 } 968 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 969 970 /* 971 ** Implementation of the sqlite_compileoption_get() function. 972 ** The result is a string that identifies the compiler options 973 ** used to build SQLite. 974 */ 975 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 976 static void compileoptiongetFunc( 977 sqlite3_context *context, 978 int argc, 979 sqlite3_value **argv 980 ){ 981 int n; 982 assert( argc==1 ); 983 UNUSED_PARAMETER(argc); 984 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function 985 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function. 986 */ 987 n = sqlite3_value_int(argv[0]); 988 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC); 989 } 990 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 991 992 /* Array for converting from half-bytes (nybbles) into ASCII hex 993 ** digits. */ 994 static const char hexdigits[] = { 995 '0', '1', '2', '3', '4', '5', '6', '7', 996 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 997 }; 998 999 /* 1000 ** Implementation of the QUOTE() function. This function takes a single 1001 ** argument. If the argument is numeric, the return value is the same as 1002 ** the argument. If the argument is NULL, the return value is the string 1003 ** "NULL". Otherwise, the argument is enclosed in single quotes with 1004 ** single-quote escapes. 1005 */ 1006 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 1007 assert( argc==1 ); 1008 UNUSED_PARAMETER(argc); 1009 switch( sqlite3_value_type(argv[0]) ){ 1010 case SQLITE_FLOAT: { 1011 double r1, r2; 1012 char zBuf[50]; 1013 r1 = sqlite3_value_double(argv[0]); 1014 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1); 1015 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8); 1016 if( r1!=r2 ){ 1017 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1); 1018 } 1019 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); 1020 break; 1021 } 1022 case SQLITE_INTEGER: { 1023 sqlite3_result_value(context, argv[0]); 1024 break; 1025 } 1026 case SQLITE_BLOB: { 1027 char *zText = 0; 1028 char const *zBlob = sqlite3_value_blob(argv[0]); 1029 int nBlob = sqlite3_value_bytes(argv[0]); 1030 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ 1031 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); 1032 if( zText ){ 1033 int i; 1034 for(i=0; i<nBlob; i++){ 1035 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F]; 1036 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F]; 1037 } 1038 zText[(nBlob*2)+2] = '\''; 1039 zText[(nBlob*2)+3] = '\0'; 1040 zText[0] = 'X'; 1041 zText[1] = '\''; 1042 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); 1043 sqlite3_free(zText); 1044 } 1045 break; 1046 } 1047 case SQLITE_TEXT: { 1048 int i,j; 1049 u64 n; 1050 const unsigned char *zArg = sqlite3_value_text(argv[0]); 1051 char *z; 1052 1053 if( zArg==0 ) return; 1054 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; } 1055 z = contextMalloc(context, ((i64)i)+((i64)n)+3); 1056 if( z ){ 1057 z[0] = '\''; 1058 for(i=0, j=1; zArg[i]; i++){ 1059 z[j++] = zArg[i]; 1060 if( zArg[i]=='\'' ){ 1061 z[j++] = '\''; 1062 } 1063 } 1064 z[j++] = '\''; 1065 z[j] = 0; 1066 sqlite3_result_text(context, z, j, sqlite3_free); 1067 } 1068 break; 1069 } 1070 default: { 1071 assert( sqlite3_value_type(argv[0])==SQLITE_NULL ); 1072 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC); 1073 break; 1074 } 1075 } 1076 } 1077 1078 /* 1079 ** The unicode() function. Return the integer unicode code-point value 1080 ** for the first character of the input string. 1081 */ 1082 static void unicodeFunc( 1083 sqlite3_context *context, 1084 int argc, 1085 sqlite3_value **argv 1086 ){ 1087 const unsigned char *z = sqlite3_value_text(argv[0]); 1088 (void)argc; 1089 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z)); 1090 } 1091 1092 /* 1093 ** The char() function takes zero or more arguments, each of which is 1094 ** an integer. It constructs a string where each character of the string 1095 ** is the unicode character for the corresponding integer argument. 1096 */ 1097 static void charFunc( 1098 sqlite3_context *context, 1099 int argc, 1100 sqlite3_value **argv 1101 ){ 1102 unsigned char *z, *zOut; 1103 int i; 1104 zOut = z = sqlite3_malloc64( argc*4+1 ); 1105 if( z==0 ){ 1106 sqlite3_result_error_nomem(context); 1107 return; 1108 } 1109 for(i=0; i<argc; i++){ 1110 sqlite3_int64 x; 1111 unsigned c; 1112 x = sqlite3_value_int64(argv[i]); 1113 if( x<0 || x>0x10ffff ) x = 0xfffd; 1114 c = (unsigned)(x & 0x1fffff); 1115 if( c<0x00080 ){ 1116 *zOut++ = (u8)(c&0xFF); 1117 }else if( c<0x00800 ){ 1118 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); 1119 *zOut++ = 0x80 + (u8)(c & 0x3F); 1120 }else if( c<0x10000 ){ 1121 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); 1122 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); 1123 *zOut++ = 0x80 + (u8)(c & 0x3F); 1124 }else{ 1125 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); 1126 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); 1127 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); 1128 *zOut++ = 0x80 + (u8)(c & 0x3F); 1129 } \ 1130 } 1131 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8); 1132 } 1133 1134 /* 1135 ** The hex() function. Interpret the argument as a blob. Return 1136 ** a hexadecimal rendering as text. 1137 */ 1138 static void hexFunc( 1139 sqlite3_context *context, 1140 int argc, 1141 sqlite3_value **argv 1142 ){ 1143 int i, n; 1144 const unsigned char *pBlob; 1145 char *zHex, *z; 1146 assert( argc==1 ); 1147 UNUSED_PARAMETER(argc); 1148 pBlob = sqlite3_value_blob(argv[0]); 1149 n = sqlite3_value_bytes(argv[0]); 1150 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ 1151 z = zHex = contextMalloc(context, ((i64)n)*2 + 1); 1152 if( zHex ){ 1153 for(i=0; i<n; i++, pBlob++){ 1154 unsigned char c = *pBlob; 1155 *(z++) = hexdigits[(c>>4)&0xf]; 1156 *(z++) = hexdigits[c&0xf]; 1157 } 1158 *z = 0; 1159 sqlite3_result_text(context, zHex, n*2, sqlite3_free); 1160 } 1161 } 1162 1163 /* 1164 ** The zeroblob(N) function returns a zero-filled blob of size N bytes. 1165 */ 1166 static void zeroblobFunc( 1167 sqlite3_context *context, 1168 int argc, 1169 sqlite3_value **argv 1170 ){ 1171 i64 n; 1172 int rc; 1173 assert( argc==1 ); 1174 UNUSED_PARAMETER(argc); 1175 n = sqlite3_value_int64(argv[0]); 1176 if( n<0 ) n = 0; 1177 rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */ 1178 if( rc ){ 1179 sqlite3_result_error_code(context, rc); 1180 } 1181 } 1182 1183 /* 1184 ** The replace() function. Three arguments are all strings: call 1185 ** them A, B, and C. The result is also a string which is derived 1186 ** from A by replacing every occurrence of B with C. The match 1187 ** must be exact. Collating sequences are not used. 1188 */ 1189 static void replaceFunc( 1190 sqlite3_context *context, 1191 int argc, 1192 sqlite3_value **argv 1193 ){ 1194 const unsigned char *zStr; /* The input string A */ 1195 const unsigned char *zPattern; /* The pattern string B */ 1196 const unsigned char *zRep; /* The replacement string C */ 1197 unsigned char *zOut; /* The output */ 1198 int nStr; /* Size of zStr */ 1199 int nPattern; /* Size of zPattern */ 1200 int nRep; /* Size of zRep */ 1201 i64 nOut; /* Maximum size of zOut */ 1202 int loopLimit; /* Last zStr[] that might match zPattern[] */ 1203 int i, j; /* Loop counters */ 1204 unsigned cntExpand; /* Number zOut expansions */ 1205 sqlite3 *db = sqlite3_context_db_handle(context); 1206 1207 assert( argc==3 ); 1208 UNUSED_PARAMETER(argc); 1209 zStr = sqlite3_value_text(argv[0]); 1210 if( zStr==0 ) return; 1211 nStr = sqlite3_value_bytes(argv[0]); 1212 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */ 1213 zPattern = sqlite3_value_text(argv[1]); 1214 if( zPattern==0 ){ 1215 assert( sqlite3_value_type(argv[1])==SQLITE_NULL 1216 || sqlite3_context_db_handle(context)->mallocFailed ); 1217 return; 1218 } 1219 if( zPattern[0]==0 ){ 1220 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL ); 1221 sqlite3_result_value(context, argv[0]); 1222 return; 1223 } 1224 nPattern = sqlite3_value_bytes(argv[1]); 1225 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */ 1226 zRep = sqlite3_value_text(argv[2]); 1227 if( zRep==0 ) return; 1228 nRep = sqlite3_value_bytes(argv[2]); 1229 assert( zRep==sqlite3_value_text(argv[2]) ); 1230 nOut = nStr + 1; 1231 assert( nOut<SQLITE_MAX_LENGTH ); 1232 zOut = contextMalloc(context, (i64)nOut); 1233 if( zOut==0 ){ 1234 return; 1235 } 1236 loopLimit = nStr - nPattern; 1237 cntExpand = 0; 1238 for(i=j=0; i<=loopLimit; i++){ 1239 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){ 1240 zOut[j++] = zStr[i]; 1241 }else{ 1242 if( nRep>nPattern ){ 1243 nOut += nRep - nPattern; 1244 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] ); 1245 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); 1246 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ 1247 sqlite3_result_error_toobig(context); 1248 sqlite3_free(zOut); 1249 return; 1250 } 1251 cntExpand++; 1252 if( (cntExpand&(cntExpand-1))==0 ){ 1253 /* Grow the size of the output buffer only on substitutions 1254 ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */ 1255 u8 *zOld; 1256 zOld = zOut; 1257 zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1)); 1258 if( zOut==0 ){ 1259 sqlite3_result_error_nomem(context); 1260 sqlite3_free(zOld); 1261 return; 1262 } 1263 } 1264 } 1265 memcpy(&zOut[j], zRep, nRep); 1266 j += nRep; 1267 i += nPattern-1; 1268 } 1269 } 1270 assert( j+nStr-i+1<=nOut ); 1271 memcpy(&zOut[j], &zStr[i], nStr-i); 1272 j += nStr - i; 1273 assert( j<=nOut ); 1274 zOut[j] = 0; 1275 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free); 1276 } 1277 1278 /* 1279 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions. 1280 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both. 1281 */ 1282 static void trimFunc( 1283 sqlite3_context *context, 1284 int argc, 1285 sqlite3_value **argv 1286 ){ 1287 const unsigned char *zIn; /* Input string */ 1288 const unsigned char *zCharSet; /* Set of characters to trim */ 1289 int nIn; /* Number of bytes in input */ 1290 int flags; /* 1: trimleft 2: trimright 3: trim */ 1291 int i; /* Loop counter */ 1292 unsigned char *aLen = 0; /* Length of each character in zCharSet */ 1293 unsigned char **azChar = 0; /* Individual characters in zCharSet */ 1294 int nChar; /* Number of characters in zCharSet */ 1295 1296 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ 1297 return; 1298 } 1299 zIn = sqlite3_value_text(argv[0]); 1300 if( zIn==0 ) return; 1301 nIn = sqlite3_value_bytes(argv[0]); 1302 assert( zIn==sqlite3_value_text(argv[0]) ); 1303 if( argc==1 ){ 1304 static const unsigned char lenOne[] = { 1 }; 1305 static unsigned char * const azOne[] = { (u8*)" " }; 1306 nChar = 1; 1307 aLen = (u8*)lenOne; 1308 azChar = (unsigned char **)azOne; 1309 zCharSet = 0; 1310 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ 1311 return; 1312 }else{ 1313 const unsigned char *z; 1314 for(z=zCharSet, nChar=0; *z; nChar++){ 1315 SQLITE_SKIP_UTF8(z); 1316 } 1317 if( nChar>0 ){ 1318 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); 1319 if( azChar==0 ){ 1320 return; 1321 } 1322 aLen = (unsigned char*)&azChar[nChar]; 1323 for(z=zCharSet, nChar=0; *z; nChar++){ 1324 azChar[nChar] = (unsigned char *)z; 1325 SQLITE_SKIP_UTF8(z); 1326 aLen[nChar] = (u8)(z - azChar[nChar]); 1327 } 1328 } 1329 } 1330 if( nChar>0 ){ 1331 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); 1332 if( flags & 1 ){ 1333 while( nIn>0 ){ 1334 int len = 0; 1335 for(i=0; i<nChar; i++){ 1336 len = aLen[i]; 1337 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break; 1338 } 1339 if( i>=nChar ) break; 1340 zIn += len; 1341 nIn -= len; 1342 } 1343 } 1344 if( flags & 2 ){ 1345 while( nIn>0 ){ 1346 int len = 0; 1347 for(i=0; i<nChar; i++){ 1348 len = aLen[i]; 1349 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break; 1350 } 1351 if( i>=nChar ) break; 1352 nIn -= len; 1353 } 1354 } 1355 if( zCharSet ){ 1356 sqlite3_free(azChar); 1357 } 1358 } 1359 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT); 1360 } 1361 1362 1363 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION 1364 /* 1365 ** The "unknown" function is automatically substituted in place of 1366 ** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN 1367 ** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used. 1368 ** When the "sqlite3" command-line shell is built using this functionality, 1369 ** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries 1370 ** involving application-defined functions to be examined in a generic 1371 ** sqlite3 shell. 1372 */ 1373 static void unknownFunc( 1374 sqlite3_context *context, 1375 int argc, 1376 sqlite3_value **argv 1377 ){ 1378 /* no-op */ 1379 } 1380 #endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/ 1381 1382 1383 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It 1384 ** is only available if the SQLITE_SOUNDEX compile-time option is used 1385 ** when SQLite is built. 1386 */ 1387 #ifdef SQLITE_SOUNDEX 1388 /* 1389 ** Compute the soundex encoding of a word. 1390 ** 1391 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the 1392 ** soundex encoding of the string X. 1393 */ 1394 static void soundexFunc( 1395 sqlite3_context *context, 1396 int argc, 1397 sqlite3_value **argv 1398 ){ 1399 char zResult[8]; 1400 const u8 *zIn; 1401 int i, j; 1402 static const unsigned char iCode[] = { 1403 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1406 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1407 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, 1408 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1409 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, 1410 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1411 }; 1412 assert( argc==1 ); 1413 zIn = (u8*)sqlite3_value_text(argv[0]); 1414 if( zIn==0 ) zIn = (u8*)""; 1415 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){} 1416 if( zIn[i] ){ 1417 u8 prevcode = iCode[zIn[i]&0x7f]; 1418 zResult[0] = sqlite3Toupper(zIn[i]); 1419 for(j=1; j<4 && zIn[i]; i++){ 1420 int code = iCode[zIn[i]&0x7f]; 1421 if( code>0 ){ 1422 if( code!=prevcode ){ 1423 prevcode = code; 1424 zResult[j++] = code + '0'; 1425 } 1426 }else{ 1427 prevcode = 0; 1428 } 1429 } 1430 while( j<4 ){ 1431 zResult[j++] = '0'; 1432 } 1433 zResult[j] = 0; 1434 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT); 1435 }else{ 1436 /* IMP: R-64894-50321 The string "?000" is returned if the argument 1437 ** is NULL or contains no ASCII alphabetic characters. */ 1438 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC); 1439 } 1440 } 1441 #endif /* SQLITE_SOUNDEX */ 1442 1443 #ifndef SQLITE_OMIT_LOAD_EXTENSION 1444 /* 1445 ** A function that loads a shared-library extension then returns NULL. 1446 */ 1447 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){ 1448 const char *zFile = (const char *)sqlite3_value_text(argv[0]); 1449 const char *zProc; 1450 sqlite3 *db = sqlite3_context_db_handle(context); 1451 char *zErrMsg = 0; 1452 1453 /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc 1454 ** flag is set. See the sqlite3_enable_load_extension() API. 1455 */ 1456 if( (db->flags & SQLITE_LoadExtFunc)==0 ){ 1457 sqlite3_result_error(context, "not authorized", -1); 1458 return; 1459 } 1460 1461 if( argc==2 ){ 1462 zProc = (const char *)sqlite3_value_text(argv[1]); 1463 }else{ 1464 zProc = 0; 1465 } 1466 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){ 1467 sqlite3_result_error(context, zErrMsg, -1); 1468 sqlite3_free(zErrMsg); 1469 } 1470 } 1471 #endif 1472 1473 1474 /* 1475 ** An instance of the following structure holds the context of a 1476 ** sum() or avg() aggregate computation. 1477 */ 1478 typedef struct SumCtx SumCtx; 1479 struct SumCtx { 1480 double rSum; /* Floating point sum */ 1481 i64 iSum; /* Integer sum */ 1482 i64 cnt; /* Number of elements summed */ 1483 u8 overflow; /* True if integer overflow seen */ 1484 u8 approx; /* True if non-integer value was input to the sum */ 1485 }; 1486 1487 /* 1488 ** Routines used to compute the sum, average, and total. 1489 ** 1490 ** The SUM() function follows the (broken) SQL standard which means 1491 ** that it returns NULL if it sums over no inputs. TOTAL returns 1492 ** 0.0 in that case. In addition, TOTAL always returns a float where 1493 ** SUM might return an integer if it never encounters a floating point 1494 ** value. TOTAL never fails, but SUM might through an exception if 1495 ** it overflows an integer. 1496 */ 1497 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 1498 SumCtx *p; 1499 int type; 1500 assert( argc==1 ); 1501 UNUSED_PARAMETER(argc); 1502 p = sqlite3_aggregate_context(context, sizeof(*p)); 1503 type = sqlite3_value_numeric_type(argv[0]); 1504 if( p && type!=SQLITE_NULL ){ 1505 p->cnt++; 1506 if( type==SQLITE_INTEGER ){ 1507 i64 v = sqlite3_value_int64(argv[0]); 1508 p->rSum += v; 1509 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ 1510 p->approx = p->overflow = 1; 1511 } 1512 }else{ 1513 p->rSum += sqlite3_value_double(argv[0]); 1514 p->approx = 1; 1515 } 1516 } 1517 } 1518 #ifndef SQLITE_OMIT_WINDOWFUNC 1519 static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){ 1520 SumCtx *p; 1521 int type; 1522 assert( argc==1 ); 1523 UNUSED_PARAMETER(argc); 1524 p = sqlite3_aggregate_context(context, sizeof(*p)); 1525 type = sqlite3_value_numeric_type(argv[0]); 1526 /* p is always non-NULL because sumStep() will have been called first 1527 ** to initialize it */ 1528 if( ALWAYS(p) && type!=SQLITE_NULL ){ 1529 assert( p->cnt>0 ); 1530 p->cnt--; 1531 assert( type==SQLITE_INTEGER || p->approx ); 1532 if( type==SQLITE_INTEGER && p->approx==0 ){ 1533 i64 v = sqlite3_value_int64(argv[0]); 1534 p->rSum -= v; 1535 p->iSum -= v; 1536 }else{ 1537 p->rSum -= sqlite3_value_double(argv[0]); 1538 } 1539 } 1540 } 1541 #else 1542 # define sumInverse 0 1543 #endif /* SQLITE_OMIT_WINDOWFUNC */ 1544 static void sumFinalize(sqlite3_context *context){ 1545 SumCtx *p; 1546 p = sqlite3_aggregate_context(context, 0); 1547 if( p && p->cnt>0 ){ 1548 if( p->overflow ){ 1549 sqlite3_result_error(context,"integer overflow",-1); 1550 }else if( p->approx ){ 1551 sqlite3_result_double(context, p->rSum); 1552 }else{ 1553 sqlite3_result_int64(context, p->iSum); 1554 } 1555 } 1556 } 1557 static void avgFinalize(sqlite3_context *context){ 1558 SumCtx *p; 1559 p = sqlite3_aggregate_context(context, 0); 1560 if( p && p->cnt>0 ){ 1561 sqlite3_result_double(context, p->rSum/(double)p->cnt); 1562 } 1563 } 1564 static void totalFinalize(sqlite3_context *context){ 1565 SumCtx *p; 1566 p = sqlite3_aggregate_context(context, 0); 1567 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ 1568 sqlite3_result_double(context, p ? p->rSum : (double)0); 1569 } 1570 1571 /* 1572 ** The following structure keeps track of state information for the 1573 ** count() aggregate function. 1574 */ 1575 typedef struct CountCtx CountCtx; 1576 struct CountCtx { 1577 i64 n; 1578 #ifdef SQLITE_DEBUG 1579 int bInverse; /* True if xInverse() ever called */ 1580 #endif 1581 }; 1582 1583 /* 1584 ** Routines to implement the count() aggregate function. 1585 */ 1586 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 1587 CountCtx *p; 1588 p = sqlite3_aggregate_context(context, sizeof(*p)); 1589 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){ 1590 p->n++; 1591 } 1592 1593 #ifndef SQLITE_OMIT_DEPRECATED 1594 /* The sqlite3_aggregate_count() function is deprecated. But just to make 1595 ** sure it still operates correctly, verify that its count agrees with our 1596 ** internal count when using count(*) and when the total count can be 1597 ** expressed as a 32-bit integer. */ 1598 assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse 1599 || p->n==sqlite3_aggregate_count(context) ); 1600 #endif 1601 } 1602 static void countFinalize(sqlite3_context *context){ 1603 CountCtx *p; 1604 p = sqlite3_aggregate_context(context, 0); 1605 sqlite3_result_int64(context, p ? p->n : 0); 1606 } 1607 #ifndef SQLITE_OMIT_WINDOWFUNC 1608 static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){ 1609 CountCtx *p; 1610 p = sqlite3_aggregate_context(ctx, sizeof(*p)); 1611 /* p is always non-NULL since countStep() will have been called first */ 1612 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){ 1613 p->n--; 1614 #ifdef SQLITE_DEBUG 1615 p->bInverse = 1; 1616 #endif 1617 } 1618 } 1619 #else 1620 # define countInverse 0 1621 #endif /* SQLITE_OMIT_WINDOWFUNC */ 1622 1623 /* 1624 ** Routines to implement min() and max() aggregate functions. 1625 */ 1626 static void minmaxStep( 1627 sqlite3_context *context, 1628 int NotUsed, 1629 sqlite3_value **argv 1630 ){ 1631 Mem *pArg = (Mem *)argv[0]; 1632 Mem *pBest; 1633 UNUSED_PARAMETER(NotUsed); 1634 1635 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); 1636 if( !pBest ) return; 1637 1638 if( sqlite3_value_type(pArg)==SQLITE_NULL ){ 1639 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context); 1640 }else if( pBest->flags ){ 1641 int max; 1642 int cmp; 1643 CollSeq *pColl = sqlite3GetFuncCollSeq(context); 1644 /* This step function is used for both the min() and max() aggregates, 1645 ** the only difference between the two being that the sense of the 1646 ** comparison is inverted. For the max() aggregate, the 1647 ** sqlite3_user_data() function returns (void *)-1. For min() it 1648 ** returns (void *)db, where db is the sqlite3* database pointer. 1649 ** Therefore the next statement sets variable 'max' to 1 for the max() 1650 ** aggregate, or 0 for min(). 1651 */ 1652 max = sqlite3_user_data(context)!=0; 1653 cmp = sqlite3MemCompare(pBest, pArg, pColl); 1654 if( (max && cmp<0) || (!max && cmp>0) ){ 1655 sqlite3VdbeMemCopy(pBest, pArg); 1656 }else{ 1657 sqlite3SkipAccumulatorLoad(context); 1658 } 1659 }else{ 1660 pBest->db = sqlite3_context_db_handle(context); 1661 sqlite3VdbeMemCopy(pBest, pArg); 1662 } 1663 } 1664 static void minMaxValueFinalize(sqlite3_context *context, int bValue){ 1665 sqlite3_value *pRes; 1666 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); 1667 if( pRes ){ 1668 if( pRes->flags ){ 1669 sqlite3_result_value(context, pRes); 1670 } 1671 if( bValue==0 ) sqlite3VdbeMemRelease(pRes); 1672 } 1673 } 1674 #ifndef SQLITE_OMIT_WINDOWFUNC 1675 static void minMaxValue(sqlite3_context *context){ 1676 minMaxValueFinalize(context, 1); 1677 } 1678 #else 1679 # define minMaxValue 0 1680 #endif /* SQLITE_OMIT_WINDOWFUNC */ 1681 static void minMaxFinalize(sqlite3_context *context){ 1682 minMaxValueFinalize(context, 0); 1683 } 1684 1685 /* 1686 ** group_concat(EXPR, ?SEPARATOR?) 1687 */ 1688 static void groupConcatStep( 1689 sqlite3_context *context, 1690 int argc, 1691 sqlite3_value **argv 1692 ){ 1693 const char *zVal; 1694 StrAccum *pAccum; 1695 const char *zSep; 1696 int nVal, nSep; 1697 assert( argc==1 || argc==2 ); 1698 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 1699 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); 1700 1701 if( pAccum ){ 1702 sqlite3 *db = sqlite3_context_db_handle(context); 1703 int firstTerm = pAccum->mxAlloc==0; 1704 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH]; 1705 if( !firstTerm ){ 1706 if( argc==2 ){ 1707 zSep = (char*)sqlite3_value_text(argv[1]); 1708 nSep = sqlite3_value_bytes(argv[1]); 1709 }else{ 1710 zSep = ","; 1711 nSep = 1; 1712 } 1713 if( zSep ) sqlite3_str_append(pAccum, zSep, nSep); 1714 } 1715 zVal = (char*)sqlite3_value_text(argv[0]); 1716 nVal = sqlite3_value_bytes(argv[0]); 1717 if( zVal ) sqlite3_str_append(pAccum, zVal, nVal); 1718 } 1719 } 1720 #ifndef SQLITE_OMIT_WINDOWFUNC 1721 static void groupConcatInverse( 1722 sqlite3_context *context, 1723 int argc, 1724 sqlite3_value **argv 1725 ){ 1726 int n; 1727 StrAccum *pAccum; 1728 assert( argc==1 || argc==2 ); 1729 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 1730 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); 1731 /* pAccum is always non-NULL since groupConcatStep() will have always 1732 ** run frist to initialize it */ 1733 if( ALWAYS(pAccum) ){ 1734 n = sqlite3_value_bytes(argv[0]); 1735 if( argc==2 ){ 1736 n += sqlite3_value_bytes(argv[1]); 1737 }else{ 1738 n++; 1739 } 1740 if( n>=(int)pAccum->nChar ){ 1741 pAccum->nChar = 0; 1742 }else{ 1743 pAccum->nChar -= n; 1744 memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar); 1745 } 1746 if( pAccum->nChar==0 ) pAccum->mxAlloc = 0; 1747 } 1748 } 1749 #else 1750 # define groupConcatInverse 0 1751 #endif /* SQLITE_OMIT_WINDOWFUNC */ 1752 static void groupConcatFinalize(sqlite3_context *context){ 1753 StrAccum *pAccum; 1754 pAccum = sqlite3_aggregate_context(context, 0); 1755 if( pAccum ){ 1756 if( pAccum->accError==SQLITE_TOOBIG ){ 1757 sqlite3_result_error_toobig(context); 1758 }else if( pAccum->accError==SQLITE_NOMEM ){ 1759 sqlite3_result_error_nomem(context); 1760 }else{ 1761 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, 1762 sqlite3_free); 1763 } 1764 } 1765 } 1766 #ifndef SQLITE_OMIT_WINDOWFUNC 1767 static void groupConcatValue(sqlite3_context *context){ 1768 sqlite3_str *pAccum; 1769 pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0); 1770 if( pAccum ){ 1771 if( pAccum->accError==SQLITE_TOOBIG ){ 1772 sqlite3_result_error_toobig(context); 1773 }else if( pAccum->accError==SQLITE_NOMEM ){ 1774 sqlite3_result_error_nomem(context); 1775 }else{ 1776 const char *zText = sqlite3_str_value(pAccum); 1777 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); 1778 } 1779 } 1780 } 1781 #else 1782 # define groupConcatValue 0 1783 #endif /* SQLITE_OMIT_WINDOWFUNC */ 1784 1785 /* 1786 ** This routine does per-connection function registration. Most 1787 ** of the built-in functions above are part of the global function set. 1788 ** This routine only deals with those that are not global. 1789 */ 1790 void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){ 1791 int rc = sqlite3_overload_function(db, "MATCH", 2); 1792 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); 1793 if( rc==SQLITE_NOMEM ){ 1794 sqlite3OomFault(db); 1795 } 1796 } 1797 1798 /* 1799 ** Re-register the built-in LIKE functions. The caseSensitive 1800 ** parameter determines whether or not the LIKE operator is case 1801 ** sensitive. 1802 */ 1803 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){ 1804 struct compareInfo *pInfo; 1805 int flags; 1806 if( caseSensitive ){ 1807 pInfo = (struct compareInfo*)&likeInfoAlt; 1808 flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE; 1809 }else{ 1810 pInfo = (struct compareInfo*)&likeInfoNorm; 1811 flags = SQLITE_FUNC_LIKE; 1812 } 1813 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); 1814 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); 1815 sqlite3FindFunction(db, "like", 2, SQLITE_UTF8, 0)->funcFlags |= flags; 1816 sqlite3FindFunction(db, "like", 3, SQLITE_UTF8, 0)->funcFlags |= flags; 1817 } 1818 1819 /* 1820 ** pExpr points to an expression which implements a function. If 1821 ** it is appropriate to apply the LIKE optimization to that function 1822 ** then set aWc[0] through aWc[2] to the wildcard characters and the 1823 ** escape character and then return TRUE. If the function is not a 1824 ** LIKE-style function then return FALSE. 1825 ** 1826 ** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE 1827 ** operator if c is a string literal that is exactly one byte in length. 1828 ** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is 1829 ** no ESCAPE clause. 1830 ** 1831 ** *pIsNocase is set to true if uppercase and lowercase are equivalent for 1832 ** the function (default for LIKE). If the function makes the distinction 1833 ** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to 1834 ** false. 1835 */ 1836 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){ 1837 FuncDef *pDef; 1838 int nExpr; 1839 if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){ 1840 return 0; 1841 } 1842 assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); 1843 nExpr = pExpr->x.pList->nExpr; 1844 pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0); 1845 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){ 1846 return 0; 1847 } 1848 if( nExpr<3 ){ 1849 aWc[3] = 0; 1850 }else{ 1851 Expr *pEscape = pExpr->x.pList->a[2].pExpr; 1852 char *zEscape; 1853 if( pEscape->op!=TK_STRING ) return 0; 1854 zEscape = pEscape->u.zToken; 1855 if( zEscape[0]==0 || zEscape[1]!=0 ) return 0; 1856 aWc[3] = zEscape[0]; 1857 } 1858 1859 /* The memcpy() statement assumes that the wildcard characters are 1860 ** the first three statements in the compareInfo structure. The 1861 ** asserts() that follow verify that assumption 1862 */ 1863 memcpy(aWc, pDef->pUserData, 3); 1864 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll ); 1865 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne ); 1866 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet ); 1867 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0; 1868 return 1; 1869 } 1870 1871 /* 1872 ** All of the FuncDef structures in the aBuiltinFunc[] array above 1873 ** to the global function hash table. This occurs at start-time (as 1874 ** a consequence of calling sqlite3_initialize()). 1875 ** 1876 ** After this routine runs 1877 */ 1878 void sqlite3RegisterBuiltinFunctions(void){ 1879 /* 1880 ** The following array holds FuncDef structures for all of the functions 1881 ** defined in this file. 1882 ** 1883 ** The array cannot be constant since changes are made to the 1884 ** FuncDef.pHash elements at start-time. The elements of this array 1885 ** are read-only after initialization is complete. 1886 ** 1887 ** For peak efficiency, put the most frequently used function last. 1888 */ 1889 static FuncDef aBuiltinFunc[] = { 1890 #ifdef SQLITE_SOUNDEX 1891 FUNCTION(soundex, 1, 0, 0, soundexFunc ), 1892 #endif 1893 #ifndef SQLITE_OMIT_LOAD_EXTENSION 1894 VFUNCTION(load_extension, 1, 0, 0, loadExt ), 1895 VFUNCTION(load_extension, 2, 0, 0, loadExt ), 1896 #endif 1897 #if SQLITE_USER_AUTHENTICATION 1898 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ), 1899 #endif 1900 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 1901 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ), 1902 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ), 1903 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 1904 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY), 1905 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY), 1906 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY), 1907 #ifdef SQLITE_DEBUG 1908 FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY), 1909 #endif 1910 #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC 1911 FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET| 1912 SQLITE_FUNC_TYPEOF), 1913 #endif 1914 FUNCTION(ltrim, 1, 1, 0, trimFunc ), 1915 FUNCTION(ltrim, 2, 1, 0, trimFunc ), 1916 FUNCTION(rtrim, 1, 2, 0, trimFunc ), 1917 FUNCTION(rtrim, 2, 2, 0, trimFunc ), 1918 FUNCTION(trim, 1, 3, 0, trimFunc ), 1919 FUNCTION(trim, 2, 3, 0, trimFunc ), 1920 FUNCTION(min, -1, 0, 1, minmaxFunc ), 1921 FUNCTION(min, 0, 0, 1, 0 ), 1922 WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, 1923 SQLITE_FUNC_MINMAX ), 1924 FUNCTION(max, -1, 1, 1, minmaxFunc ), 1925 FUNCTION(max, 0, 1, 1, 0 ), 1926 WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, 1927 SQLITE_FUNC_MINMAX ), 1928 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), 1929 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), 1930 FUNCTION(instr, 2, 0, 0, instrFunc ), 1931 FUNCTION(printf, -1, 0, 0, printfFunc ), 1932 FUNCTION(unicode, 1, 0, 0, unicodeFunc ), 1933 FUNCTION(char, -1, 0, 0, charFunc ), 1934 FUNCTION(abs, 1, 0, 0, absFunc ), 1935 #ifndef SQLITE_OMIT_FLOATING_POINT 1936 FUNCTION(round, 1, 0, 0, roundFunc ), 1937 FUNCTION(round, 2, 0, 0, roundFunc ), 1938 #endif 1939 FUNCTION(upper, 1, 0, 0, upperFunc ), 1940 FUNCTION(lower, 1, 0, 0, lowerFunc ), 1941 FUNCTION(hex, 1, 0, 0, hexFunc ), 1942 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE), 1943 VFUNCTION(random, 0, 0, 0, randomFunc ), 1944 VFUNCTION(randomblob, 1, 0, 0, randomBlob ), 1945 FUNCTION(nullif, 2, 0, 1, nullifFunc ), 1946 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ), 1947 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ), 1948 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ), 1949 FUNCTION(quote, 1, 0, 0, quoteFunc ), 1950 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), 1951 VFUNCTION(changes, 0, 0, 0, changes ), 1952 VFUNCTION(total_changes, 0, 0, 0, total_changes ), 1953 FUNCTION(replace, 3, 0, 0, replaceFunc ), 1954 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), 1955 FUNCTION(substr, 2, 0, 0, substrFunc ), 1956 FUNCTION(substr, 3, 0, 0, substrFunc ), 1957 WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0), 1958 WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0), 1959 WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0), 1960 WAGGREGATE(count, 0,0,0, countStep, 1961 countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT ), 1962 WAGGREGATE(count, 1,0,0, countStep, 1963 countFinalize, countFinalize, countInverse, 0 ), 1964 WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep, 1965 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), 1966 WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep, 1967 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), 1968 1969 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), 1970 #ifdef SQLITE_CASE_SENSITIVE_LIKE 1971 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), 1972 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), 1973 #else 1974 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE), 1975 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE), 1976 #endif 1977 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION 1978 FUNCTION(unknown, -1, 0, 0, unknownFunc ), 1979 #endif 1980 FUNCTION(coalesce, 1, 0, 0, 0 ), 1981 FUNCTION(coalesce, 0, 0, 0, 0 ), 1982 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE), 1983 }; 1984 #ifndef SQLITE_OMIT_ALTERTABLE 1985 sqlite3AlterFunctions(); 1986 #endif 1987 sqlite3WindowFunctions(); 1988 #if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4) 1989 sqlite3AnalyzeFunctions(); 1990 #endif 1991 sqlite3RegisterDateTimeFunctions(); 1992 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc)); 1993 1994 #if 0 /* Enable to print out how the built-in functions are hashed */ 1995 { 1996 int i; 1997 FuncDef *p; 1998 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){ 1999 printf("FUNC-HASH %02d:", i); 2000 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){ 2001 int n = sqlite3Strlen30(p->zName); 2002 int h = p->zName[0] + n; 2003 printf(" %s(%d)", p->zName, h); 2004 } 2005 printf("\n"); 2006 } 2007 } 2008 #endif 2009 } 2010