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 functions that implement various SQL 13 ** functions of SQLite. 14 ** 15 ** There is only one exported symbol in this file - the function 16 ** sqliteRegisterBuildinFunctions() found at the bottom of the file. 17 ** All other code has file scope. 18 */ 19 #include "sqliteInt.h" 20 #include <stdlib.h> 21 #include <assert.h> 22 #include "vdbeInt.h" 23 24 /* 25 ** Return the collating function associated with a function. 26 */ 27 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ 28 return context->pColl; 29 } 30 31 /* 32 ** Indicate that the accumulator load should be skipped on this 33 ** iteration of the aggregate loop. 34 */ 35 static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){ 36 context->skipFlag = 1; 37 } 38 39 /* 40 ** Implementation of the non-aggregate min() and max() functions 41 */ 42 static void minmaxFunc( 43 sqlite3_context *context, 44 int argc, 45 sqlite3_value **argv 46 ){ 47 int i; 48 int mask; /* 0 for min() or 0xffffffff for max() */ 49 int iBest; 50 CollSeq *pColl; 51 52 assert( argc>1 ); 53 mask = sqlite3_user_data(context)==0 ? 0 : -1; 54 pColl = sqlite3GetFuncCollSeq(context); 55 assert( pColl ); 56 assert( mask==-1 || mask==0 ); 57 iBest = 0; 58 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 59 for(i=1; i<argc; i++){ 60 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return; 61 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){ 62 testcase( mask==0 ); 63 iBest = i; 64 } 65 } 66 sqlite3_result_value(context, argv[iBest]); 67 } 68 69 /* 70 ** Return the type of the argument. 71 */ 72 static void typeofFunc( 73 sqlite3_context *context, 74 int NotUsed, 75 sqlite3_value **argv 76 ){ 77 const char *z = 0; 78 UNUSED_PARAMETER(NotUsed); 79 switch( sqlite3_value_type(argv[0]) ){ 80 case SQLITE_INTEGER: z = "integer"; break; 81 case SQLITE_TEXT: z = "text"; break; 82 case SQLITE_FLOAT: z = "real"; break; 83 case SQLITE_BLOB: z = "blob"; break; 84 default: z = "null"; break; 85 } 86 sqlite3_result_text(context, z, -1, SQLITE_STATIC); 87 } 88 89 90 /* 91 ** Implementation of the length() function 92 */ 93 static void lengthFunc( 94 sqlite3_context *context, 95 int argc, 96 sqlite3_value **argv 97 ){ 98 int len; 99 100 assert( argc==1 ); 101 UNUSED_PARAMETER(argc); 102 switch( sqlite3_value_type(argv[0]) ){ 103 case SQLITE_BLOB: 104 case SQLITE_INTEGER: 105 case SQLITE_FLOAT: { 106 sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); 107 break; 108 } 109 case SQLITE_TEXT: { 110 const unsigned char *z = sqlite3_value_text(argv[0]); 111 if( z==0 ) return; 112 len = 0; 113 while( *z ){ 114 len++; 115 SQLITE_SKIP_UTF8(z); 116 } 117 sqlite3_result_int(context, len); 118 break; 119 } 120 default: { 121 sqlite3_result_null(context); 122 break; 123 } 124 } 125 } 126 127 /* 128 ** Implementation of the abs() function. 129 ** 130 ** IMP: R-23979-26855 The abs(X) function returns the absolute value of 131 ** the numeric argument X. 132 */ 133 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 134 assert( argc==1 ); 135 UNUSED_PARAMETER(argc); 136 switch( sqlite3_value_type(argv[0]) ){ 137 case SQLITE_INTEGER: { 138 i64 iVal = sqlite3_value_int64(argv[0]); 139 if( iVal<0 ){ 140 if( (iVal<<1)==0 ){ 141 /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then 142 ** abs(X) throws an integer overflow error since there is no 143 ** equivalent positive 64-bit two complement value. */ 144 sqlite3_result_error(context, "integer overflow", -1); 145 return; 146 } 147 iVal = -iVal; 148 } 149 sqlite3_result_int64(context, iVal); 150 break; 151 } 152 case SQLITE_NULL: { 153 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */ 154 sqlite3_result_null(context); 155 break; 156 } 157 default: { 158 /* Because sqlite3_value_double() returns 0.0 if the argument is not 159 ** something that can be converted into a number, we have: 160 ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that 161 ** cannot be converted to a numeric value. 162 */ 163 double rVal = sqlite3_value_double(argv[0]); 164 if( rVal<0 ) rVal = -rVal; 165 sqlite3_result_double(context, rVal); 166 break; 167 } 168 } 169 } 170 171 /* 172 ** Implementation of the instr() function. 173 ** 174 ** instr(haystack,needle) finds the first occurrence of needle 175 ** in haystack and returns the number of previous characters plus 1, 176 ** or 0 if needle does not occur within haystack. 177 ** 178 ** If both haystack and needle are BLOBs, then the result is one more than 179 ** the number of bytes in haystack prior to the first occurrence of needle, 180 ** or 0 if needle never occurs in haystack. 181 */ 182 static void instrFunc( 183 sqlite3_context *context, 184 int argc, 185 sqlite3_value **argv 186 ){ 187 const unsigned char *zHaystack; 188 const unsigned char *zNeedle; 189 int nHaystack; 190 int nNeedle; 191 int typeHaystack, typeNeedle; 192 int N = 1; 193 int isText; 194 195 UNUSED_PARAMETER(argc); 196 typeHaystack = sqlite3_value_type(argv[0]); 197 typeNeedle = sqlite3_value_type(argv[1]); 198 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; 199 nHaystack = sqlite3_value_bytes(argv[0]); 200 nNeedle = sqlite3_value_bytes(argv[1]); 201 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ 202 zHaystack = sqlite3_value_blob(argv[0]); 203 zNeedle = sqlite3_value_blob(argv[1]); 204 isText = 0; 205 }else{ 206 zHaystack = sqlite3_value_text(argv[0]); 207 zNeedle = sqlite3_value_text(argv[1]); 208 isText = 1; 209 } 210 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ 211 N++; 212 do{ 213 nHaystack--; 214 zHaystack++; 215 }while( isText && (zHaystack[0]&0xc0)==0x80 ); 216 } 217 if( nNeedle>nHaystack ) N = 0; 218 sqlite3_result_int(context, N); 219 } 220 221 /* 222 ** Implementation of the substr() function. 223 ** 224 ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. 225 ** p1 is 1-indexed. So substr(x,1,1) returns the first character 226 ** of x. If x is text, then we actually count UTF-8 characters. 227 ** If x is a blob, then we count bytes. 228 ** 229 ** If p1 is negative, then we begin abs(p1) from the end of x[]. 230 ** 231 ** If p2 is negative, return the p2 characters preceeding p1. 232 */ 233 static void substrFunc( 234 sqlite3_context *context, 235 int argc, 236 sqlite3_value **argv 237 ){ 238 const unsigned char *z; 239 const unsigned char *z2; 240 int len; 241 int p0type; 242 i64 p1, p2; 243 int negP2 = 0; 244 245 assert( argc==3 || argc==2 ); 246 if( sqlite3_value_type(argv[1])==SQLITE_NULL 247 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL) 248 ){ 249 return; 250 } 251 p0type = sqlite3_value_type(argv[0]); 252 p1 = sqlite3_value_int(argv[1]); 253 if( p0type==SQLITE_BLOB ){ 254 len = sqlite3_value_bytes(argv[0]); 255 z = sqlite3_value_blob(argv[0]); 256 if( z==0 ) return; 257 assert( len==sqlite3_value_bytes(argv[0]) ); 258 }else{ 259 z = sqlite3_value_text(argv[0]); 260 if( z==0 ) return; 261 len = 0; 262 if( p1<0 ){ 263 for(z2=z; *z2; len++){ 264 SQLITE_SKIP_UTF8(z2); 265 } 266 } 267 } 268 if( argc==3 ){ 269 p2 = sqlite3_value_int(argv[2]); 270 if( p2<0 ){ 271 p2 = -p2; 272 negP2 = 1; 273 } 274 }else{ 275 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH]; 276 } 277 if( p1<0 ){ 278 p1 += len; 279 if( p1<0 ){ 280 p2 += p1; 281 if( p2<0 ) p2 = 0; 282 p1 = 0; 283 } 284 }else if( p1>0 ){ 285 p1--; 286 }else if( p2>0 ){ 287 p2--; 288 } 289 if( negP2 ){ 290 p1 -= p2; 291 if( p1<0 ){ 292 p2 += p1; 293 p1 = 0; 294 } 295 } 296 assert( p1>=0 && p2>=0 ); 297 if( p0type!=SQLITE_BLOB ){ 298 while( *z && p1 ){ 299 SQLITE_SKIP_UTF8(z); 300 p1--; 301 } 302 for(z2=z; *z2 && p2; p2--){ 303 SQLITE_SKIP_UTF8(z2); 304 } 305 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT); 306 }else{ 307 if( p1+p2>len ){ 308 p2 = len-p1; 309 if( p2<0 ) p2 = 0; 310 } 311 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT); 312 } 313 } 314 315 /* 316 ** Implementation of the round() function 317 */ 318 #ifndef SQLITE_OMIT_FLOATING_POINT 319 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 320 int n = 0; 321 double r; 322 char *zBuf; 323 assert( argc==1 || argc==2 ); 324 if( argc==2 ){ 325 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return; 326 n = sqlite3_value_int(argv[1]); 327 if( n>30 ) n = 30; 328 if( n<0 ) n = 0; 329 } 330 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 331 r = sqlite3_value_double(argv[0]); 332 /* If Y==0 and X will fit in a 64-bit int, 333 ** handle the rounding directly, 334 ** otherwise use printf. 335 */ 336 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){ 337 r = (double)((sqlite_int64)(r+0.5)); 338 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){ 339 r = -(double)((sqlite_int64)((-r)+0.5)); 340 }else{ 341 zBuf = sqlite3_mprintf("%.*f",n,r); 342 if( zBuf==0 ){ 343 sqlite3_result_error_nomem(context); 344 return; 345 } 346 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8); 347 sqlite3_free(zBuf); 348 } 349 sqlite3_result_double(context, r); 350 } 351 #endif 352 353 /* 354 ** Allocate nByte bytes of space using sqlite3_malloc(). If the 355 ** allocation fails, call sqlite3_result_error_nomem() to notify 356 ** the database handle that malloc() has failed and return NULL. 357 ** If nByte is larger than the maximum string or blob length, then 358 ** raise an SQLITE_TOOBIG exception and return NULL. 359 */ 360 static void *contextMalloc(sqlite3_context *context, i64 nByte){ 361 char *z; 362 sqlite3 *db = sqlite3_context_db_handle(context); 363 assert( nByte>0 ); 364 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] ); 365 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); 366 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ 367 sqlite3_result_error_toobig(context); 368 z = 0; 369 }else{ 370 z = sqlite3Malloc((int)nByte); 371 if( !z ){ 372 sqlite3_result_error_nomem(context); 373 } 374 } 375 return z; 376 } 377 378 /* 379 ** Implementation of the upper() and lower() SQL functions. 380 */ 381 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 382 char *z1; 383 const char *z2; 384 int i, n; 385 UNUSED_PARAMETER(argc); 386 z2 = (char*)sqlite3_value_text(argv[0]); 387 n = sqlite3_value_bytes(argv[0]); 388 /* Verify that the call to _bytes() does not invalidate the _text() pointer */ 389 assert( z2==(char*)sqlite3_value_text(argv[0]) ); 390 if( z2 ){ 391 z1 = contextMalloc(context, ((i64)n)+1); 392 if( z1 ){ 393 for(i=0; i<n; i++){ 394 z1[i] = (char)sqlite3Toupper(z2[i]); 395 } 396 sqlite3_result_text(context, z1, n, sqlite3_free); 397 } 398 } 399 } 400 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 401 char *z1; 402 const char *z2; 403 int i, n; 404 UNUSED_PARAMETER(argc); 405 z2 = (char*)sqlite3_value_text(argv[0]); 406 n = sqlite3_value_bytes(argv[0]); 407 /* Verify that the call to _bytes() does not invalidate the _text() pointer */ 408 assert( z2==(char*)sqlite3_value_text(argv[0]) ); 409 if( z2 ){ 410 z1 = contextMalloc(context, ((i64)n)+1); 411 if( z1 ){ 412 for(i=0; i<n; i++){ 413 z1[i] = sqlite3Tolower(z2[i]); 414 } 415 sqlite3_result_text(context, z1, n, sqlite3_free); 416 } 417 } 418 } 419 420 /* 421 ** The COALESCE() and IFNULL() functions are implemented as VDBE code so 422 ** that unused argument values do not have to be computed. However, we 423 ** still need some kind of function implementation for this routines in 424 ** the function table. That function implementation will never be called 425 ** so it doesn't matter what the implementation is. We might as well use 426 ** the "version()" function as a substitute. 427 */ 428 #define ifnullFunc versionFunc /* Substitute function - never called */ 429 430 /* 431 ** Implementation of random(). Return a random integer. 432 */ 433 static void randomFunc( 434 sqlite3_context *context, 435 int NotUsed, 436 sqlite3_value **NotUsed2 437 ){ 438 sqlite_int64 r; 439 UNUSED_PARAMETER2(NotUsed, NotUsed2); 440 sqlite3_randomness(sizeof(r), &r); 441 if( r<0 ){ 442 /* We need to prevent a random number of 0x8000000000000000 443 ** (or -9223372036854775808) since when you do abs() of that 444 ** number of you get the same value back again. To do this 445 ** in a way that is testable, mask the sign bit off of negative 446 ** values, resulting in a positive value. Then take the 447 ** 2s complement of that positive value. The end result can 448 ** therefore be no less than -9223372036854775807. 449 */ 450 r = -(r & LARGEST_INT64); 451 } 452 sqlite3_result_int64(context, r); 453 } 454 455 /* 456 ** Implementation of randomblob(N). Return a random blob 457 ** that is N bytes long. 458 */ 459 static void randomBlob( 460 sqlite3_context *context, 461 int argc, 462 sqlite3_value **argv 463 ){ 464 int n; 465 unsigned char *p; 466 assert( argc==1 ); 467 UNUSED_PARAMETER(argc); 468 n = sqlite3_value_int(argv[0]); 469 if( n<1 ){ 470 n = 1; 471 } 472 p = contextMalloc(context, n); 473 if( p ){ 474 sqlite3_randomness(n, p); 475 sqlite3_result_blob(context, (char*)p, n, sqlite3_free); 476 } 477 } 478 479 /* 480 ** Implementation of the last_insert_rowid() SQL function. The return 481 ** value is the same as the sqlite3_last_insert_rowid() API function. 482 */ 483 static void last_insert_rowid( 484 sqlite3_context *context, 485 int NotUsed, 486 sqlite3_value **NotUsed2 487 ){ 488 sqlite3 *db = sqlite3_context_db_handle(context); 489 UNUSED_PARAMETER2(NotUsed, NotUsed2); 490 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a 491 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface 492 ** function. */ 493 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db)); 494 } 495 496 /* 497 ** Implementation of the changes() SQL function. 498 ** 499 ** IMP: R-62073-11209 The changes() SQL function is a wrapper 500 ** around the sqlite3_changes() C/C++ function and hence follows the same 501 ** rules for counting changes. 502 */ 503 static void changes( 504 sqlite3_context *context, 505 int NotUsed, 506 sqlite3_value **NotUsed2 507 ){ 508 sqlite3 *db = sqlite3_context_db_handle(context); 509 UNUSED_PARAMETER2(NotUsed, NotUsed2); 510 sqlite3_result_int(context, sqlite3_changes(db)); 511 } 512 513 /* 514 ** Implementation of the total_changes() SQL function. The return value is 515 ** the same as the sqlite3_total_changes() API function. 516 */ 517 static void total_changes( 518 sqlite3_context *context, 519 int NotUsed, 520 sqlite3_value **NotUsed2 521 ){ 522 sqlite3 *db = sqlite3_context_db_handle(context); 523 UNUSED_PARAMETER2(NotUsed, NotUsed2); 524 /* IMP: R-52756-41993 This function is a wrapper around the 525 ** sqlite3_total_changes() C/C++ interface. */ 526 sqlite3_result_int(context, sqlite3_total_changes(db)); 527 } 528 529 /* 530 ** A structure defining how to do GLOB-style comparisons. 531 */ 532 struct compareInfo { 533 u8 matchAll; 534 u8 matchOne; 535 u8 matchSet; 536 u8 noCase; 537 }; 538 539 /* 540 ** For LIKE and GLOB matching on EBCDIC machines, assume that every 541 ** character is exactly one byte in size. Also, all characters are 542 ** able to participate in upper-case-to-lower-case mappings in EBCDIC 543 ** whereas only characters less than 0x80 do in ASCII. 544 */ 545 #if defined(SQLITE_EBCDIC) 546 # define sqlite3Utf8Read(A) (*((*A)++)) 547 # define GlogUpperToLower(A) A = sqlite3UpperToLower[A] 548 #else 549 # define GlogUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; } 550 #endif 551 552 static const struct compareInfo globInfo = { '*', '?', '[', 0 }; 553 /* The correct SQL-92 behavior is for the LIKE operator to ignore 554 ** case. Thus 'a' LIKE 'A' would be true. */ 555 static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 }; 556 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator 557 ** is case sensitive causing 'a' LIKE 'A' to be false */ 558 static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 }; 559 560 /* 561 ** Compare two UTF-8 strings for equality where the first string can 562 ** potentially be a "glob" expression. Return true (1) if they 563 ** are the same and false (0) if they are different. 564 ** 565 ** Globbing rules: 566 ** 567 ** '*' Matches any sequence of zero or more characters. 568 ** 569 ** '?' Matches exactly one character. 570 ** 571 ** [...] Matches one character from the enclosed list of 572 ** characters. 573 ** 574 ** [^...] Matches one character not in the enclosed list. 575 ** 576 ** With the [...] and [^...] matching, a ']' character can be included 577 ** in the list by making it the first character after '[' or '^'. A 578 ** range of characters can be specified using '-'. Example: 579 ** "[a-z]" matches any single lower-case letter. To match a '-', make 580 ** it the last character in the list. 581 ** 582 ** This routine is usually quick, but can be N**2 in the worst case. 583 ** 584 ** Hints: to match '*' or '?', put them in "[]". Like this: 585 ** 586 ** abc[*]xyz Matches "abc*xyz" only 587 */ 588 static int patternCompare( 589 const u8 *zPattern, /* The glob pattern */ 590 const u8 *zString, /* The string to compare against the glob */ 591 const struct compareInfo *pInfo, /* Information about how to do the compare */ 592 u32 esc /* The escape character */ 593 ){ 594 u32 c, c2; 595 int invert; 596 int seen; 597 u8 matchOne = pInfo->matchOne; 598 u8 matchAll = pInfo->matchAll; 599 u8 matchSet = pInfo->matchSet; 600 u8 noCase = pInfo->noCase; 601 int prevEscape = 0; /* True if the previous character was 'escape' */ 602 603 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){ 604 if( c==matchAll && !prevEscape ){ 605 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll 606 || c == matchOne ){ 607 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){ 608 return 0; 609 } 610 } 611 if( c==0 ){ 612 return 1; 613 }else if( c==esc ){ 614 c = sqlite3Utf8Read(&zPattern); 615 if( c==0 ){ 616 return 0; 617 } 618 }else if( c==matchSet ){ 619 assert( esc==0 ); /* This is GLOB, not LIKE */ 620 assert( matchSet<0x80 ); /* '[' is a single-byte character */ 621 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){ 622 SQLITE_SKIP_UTF8(zString); 623 } 624 return *zString!=0; 625 } 626 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){ 627 if( noCase ){ 628 GlogUpperToLower(c2); 629 GlogUpperToLower(c); 630 while( c2 != 0 && c2 != c ){ 631 c2 = sqlite3Utf8Read(&zString); 632 GlogUpperToLower(c2); 633 } 634 }else{ 635 while( c2 != 0 && c2 != c ){ 636 c2 = sqlite3Utf8Read(&zString); 637 } 638 } 639 if( c2==0 ) return 0; 640 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1; 641 } 642 return 0; 643 }else if( c==matchOne && !prevEscape ){ 644 if( sqlite3Utf8Read(&zString)==0 ){ 645 return 0; 646 } 647 }else if( c==matchSet ){ 648 u32 prior_c = 0; 649 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */ 650 seen = 0; 651 invert = 0; 652 c = sqlite3Utf8Read(&zString); 653 if( c==0 ) return 0; 654 c2 = sqlite3Utf8Read(&zPattern); 655 if( c2=='^' ){ 656 invert = 1; 657 c2 = sqlite3Utf8Read(&zPattern); 658 } 659 if( c2==']' ){ 660 if( c==']' ) seen = 1; 661 c2 = sqlite3Utf8Read(&zPattern); 662 } 663 while( c2 && c2!=']' ){ 664 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){ 665 c2 = sqlite3Utf8Read(&zPattern); 666 if( c>=prior_c && c<=c2 ) seen = 1; 667 prior_c = 0; 668 }else{ 669 if( c==c2 ){ 670 seen = 1; 671 } 672 prior_c = c2; 673 } 674 c2 = sqlite3Utf8Read(&zPattern); 675 } 676 if( c2==0 || (seen ^ invert)==0 ){ 677 return 0; 678 } 679 }else if( esc==c && !prevEscape ){ 680 prevEscape = 1; 681 }else{ 682 c2 = sqlite3Utf8Read(&zString); 683 if( noCase ){ 684 GlogUpperToLower(c); 685 GlogUpperToLower(c2); 686 } 687 if( c!=c2 ){ 688 return 0; 689 } 690 prevEscape = 0; 691 } 692 } 693 return *zString==0; 694 } 695 696 /* 697 ** Count the number of times that the LIKE operator (or GLOB which is 698 ** just a variation of LIKE) gets called. This is used for testing 699 ** only. 700 */ 701 #ifdef SQLITE_TEST 702 int sqlite3_like_count = 0; 703 #endif 704 705 706 /* 707 ** Implementation of the like() SQL function. This function implements 708 ** the build-in LIKE operator. The first argument to the function is the 709 ** pattern and the second argument is the string. So, the SQL statements: 710 ** 711 ** A LIKE B 712 ** 713 ** is implemented as like(B,A). 714 ** 715 ** This same function (with a different compareInfo structure) computes 716 ** the GLOB operator. 717 */ 718 static void likeFunc( 719 sqlite3_context *context, 720 int argc, 721 sqlite3_value **argv 722 ){ 723 const unsigned char *zA, *zB; 724 u32 escape = 0; 725 int nPat; 726 sqlite3 *db = sqlite3_context_db_handle(context); 727 728 zB = sqlite3_value_text(argv[0]); 729 zA = sqlite3_value_text(argv[1]); 730 731 /* Limit the length of the LIKE or GLOB pattern to avoid problems 732 ** of deep recursion and N*N behavior in patternCompare(). 733 */ 734 nPat = sqlite3_value_bytes(argv[0]); 735 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ); 736 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 ); 737 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){ 738 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); 739 return; 740 } 741 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */ 742 743 if( argc==3 ){ 744 /* The escape character string must consist of a single UTF-8 character. 745 ** Otherwise, return an error. 746 */ 747 const unsigned char *zEsc = sqlite3_value_text(argv[2]); 748 if( zEsc==0 ) return; 749 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){ 750 sqlite3_result_error(context, 751 "ESCAPE expression must be a single character", -1); 752 return; 753 } 754 escape = sqlite3Utf8Read(&zEsc); 755 } 756 if( zA && zB ){ 757 struct compareInfo *pInfo = sqlite3_user_data(context); 758 #ifdef SQLITE_TEST 759 sqlite3_like_count++; 760 #endif 761 762 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape)); 763 } 764 } 765 766 /* 767 ** Implementation of the NULLIF(x,y) function. The result is the first 768 ** argument if the arguments are different. The result is NULL if the 769 ** arguments are equal to each other. 770 */ 771 static void nullifFunc( 772 sqlite3_context *context, 773 int NotUsed, 774 sqlite3_value **argv 775 ){ 776 CollSeq *pColl = sqlite3GetFuncCollSeq(context); 777 UNUSED_PARAMETER(NotUsed); 778 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){ 779 sqlite3_result_value(context, argv[0]); 780 } 781 } 782 783 /* 784 ** Implementation of the sqlite_version() function. The result is the version 785 ** of the SQLite library that is running. 786 */ 787 static void versionFunc( 788 sqlite3_context *context, 789 int NotUsed, 790 sqlite3_value **NotUsed2 791 ){ 792 UNUSED_PARAMETER2(NotUsed, NotUsed2); 793 /* IMP: R-48699-48617 This function is an SQL wrapper around the 794 ** sqlite3_libversion() C-interface. */ 795 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC); 796 } 797 798 /* 799 ** Implementation of the sqlite_source_id() function. The result is a string 800 ** that identifies the particular version of the source code used to build 801 ** SQLite. 802 */ 803 static void sourceidFunc( 804 sqlite3_context *context, 805 int NotUsed, 806 sqlite3_value **NotUsed2 807 ){ 808 UNUSED_PARAMETER2(NotUsed, NotUsed2); 809 /* IMP: R-24470-31136 This function is an SQL wrapper around the 810 ** sqlite3_sourceid() C interface. */ 811 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC); 812 } 813 814 /* 815 ** Implementation of the sqlite_log() function. This is a wrapper around 816 ** sqlite3_log(). The return value is NULL. The function exists purely for 817 ** its side-effects. 818 */ 819 static void errlogFunc( 820 sqlite3_context *context, 821 int argc, 822 sqlite3_value **argv 823 ){ 824 UNUSED_PARAMETER(argc); 825 UNUSED_PARAMETER(context); 826 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1])); 827 } 828 829 /* 830 ** Implementation of the sqlite_compileoption_used() function. 831 ** The result is an integer that identifies if the compiler option 832 ** was used to build SQLite. 833 */ 834 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 835 static void compileoptionusedFunc( 836 sqlite3_context *context, 837 int argc, 838 sqlite3_value **argv 839 ){ 840 const char *zOptName; 841 assert( argc==1 ); 842 UNUSED_PARAMETER(argc); 843 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL 844 ** function is a wrapper around the sqlite3_compileoption_used() C/C++ 845 ** function. 846 */ 847 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){ 848 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName)); 849 } 850 } 851 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 852 853 /* 854 ** Implementation of the sqlite_compileoption_get() function. 855 ** The result is a string that identifies the compiler options 856 ** used to build SQLite. 857 */ 858 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 859 static void compileoptiongetFunc( 860 sqlite3_context *context, 861 int argc, 862 sqlite3_value **argv 863 ){ 864 int n; 865 assert( argc==1 ); 866 UNUSED_PARAMETER(argc); 867 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function 868 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function. 869 */ 870 n = sqlite3_value_int(argv[0]); 871 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC); 872 } 873 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 874 875 /* Array for converting from half-bytes (nybbles) into ASCII hex 876 ** digits. */ 877 static const char hexdigits[] = { 878 '0', '1', '2', '3', '4', '5', '6', '7', 879 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 880 }; 881 882 /* 883 ** EXPERIMENTAL - This is not an official function. The interface may 884 ** change. This function may disappear. Do not write code that depends 885 ** on this function. 886 ** 887 ** Implementation of the QUOTE() function. This function takes a single 888 ** argument. If the argument is numeric, the return value is the same as 889 ** the argument. If the argument is NULL, the return value is the string 890 ** "NULL". Otherwise, the argument is enclosed in single quotes with 891 ** single-quote escapes. 892 */ 893 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 894 assert( argc==1 ); 895 UNUSED_PARAMETER(argc); 896 switch( sqlite3_value_type(argv[0]) ){ 897 case SQLITE_FLOAT: { 898 double r1, r2; 899 char zBuf[50]; 900 r1 = sqlite3_value_double(argv[0]); 901 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1); 902 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8); 903 if( r1!=r2 ){ 904 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1); 905 } 906 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); 907 break; 908 } 909 case SQLITE_INTEGER: { 910 sqlite3_result_value(context, argv[0]); 911 break; 912 } 913 case SQLITE_BLOB: { 914 char *zText = 0; 915 char const *zBlob = sqlite3_value_blob(argv[0]); 916 int nBlob = sqlite3_value_bytes(argv[0]); 917 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ 918 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); 919 if( zText ){ 920 int i; 921 for(i=0; i<nBlob; i++){ 922 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F]; 923 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F]; 924 } 925 zText[(nBlob*2)+2] = '\''; 926 zText[(nBlob*2)+3] = '\0'; 927 zText[0] = 'X'; 928 zText[1] = '\''; 929 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); 930 sqlite3_free(zText); 931 } 932 break; 933 } 934 case SQLITE_TEXT: { 935 int i,j; 936 u64 n; 937 const unsigned char *zArg = sqlite3_value_text(argv[0]); 938 char *z; 939 940 if( zArg==0 ) return; 941 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; } 942 z = contextMalloc(context, ((i64)i)+((i64)n)+3); 943 if( z ){ 944 z[0] = '\''; 945 for(i=0, j=1; zArg[i]; i++){ 946 z[j++] = zArg[i]; 947 if( zArg[i]=='\'' ){ 948 z[j++] = '\''; 949 } 950 } 951 z[j++] = '\''; 952 z[j] = 0; 953 sqlite3_result_text(context, z, j, sqlite3_free); 954 } 955 break; 956 } 957 default: { 958 assert( sqlite3_value_type(argv[0])==SQLITE_NULL ); 959 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC); 960 break; 961 } 962 } 963 } 964 965 /* 966 ** The hex() function. Interpret the argument as a blob. Return 967 ** a hexadecimal rendering as text. 968 */ 969 static void hexFunc( 970 sqlite3_context *context, 971 int argc, 972 sqlite3_value **argv 973 ){ 974 int i, n; 975 const unsigned char *pBlob; 976 char *zHex, *z; 977 assert( argc==1 ); 978 UNUSED_PARAMETER(argc); 979 pBlob = sqlite3_value_blob(argv[0]); 980 n = sqlite3_value_bytes(argv[0]); 981 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ 982 z = zHex = contextMalloc(context, ((i64)n)*2 + 1); 983 if( zHex ){ 984 for(i=0; i<n; i++, pBlob++){ 985 unsigned char c = *pBlob; 986 *(z++) = hexdigits[(c>>4)&0xf]; 987 *(z++) = hexdigits[c&0xf]; 988 } 989 *z = 0; 990 sqlite3_result_text(context, zHex, n*2, sqlite3_free); 991 } 992 } 993 994 /* 995 ** The zeroblob(N) function returns a zero-filled blob of size N bytes. 996 */ 997 static void zeroblobFunc( 998 sqlite3_context *context, 999 int argc, 1000 sqlite3_value **argv 1001 ){ 1002 i64 n; 1003 sqlite3 *db = sqlite3_context_db_handle(context); 1004 assert( argc==1 ); 1005 UNUSED_PARAMETER(argc); 1006 n = sqlite3_value_int64(argv[0]); 1007 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] ); 1008 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); 1009 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){ 1010 sqlite3_result_error_toobig(context); 1011 }else{ 1012 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */ 1013 } 1014 } 1015 1016 /* 1017 ** The replace() function. Three arguments are all strings: call 1018 ** them A, B, and C. The result is also a string which is derived 1019 ** from A by replacing every occurance of B with C. The match 1020 ** must be exact. Collating sequences are not used. 1021 */ 1022 static void replaceFunc( 1023 sqlite3_context *context, 1024 int argc, 1025 sqlite3_value **argv 1026 ){ 1027 const unsigned char *zStr; /* The input string A */ 1028 const unsigned char *zPattern; /* The pattern string B */ 1029 const unsigned char *zRep; /* The replacement string C */ 1030 unsigned char *zOut; /* The output */ 1031 int nStr; /* Size of zStr */ 1032 int nPattern; /* Size of zPattern */ 1033 int nRep; /* Size of zRep */ 1034 i64 nOut; /* Maximum size of zOut */ 1035 int loopLimit; /* Last zStr[] that might match zPattern[] */ 1036 int i, j; /* Loop counters */ 1037 1038 assert( argc==3 ); 1039 UNUSED_PARAMETER(argc); 1040 zStr = sqlite3_value_text(argv[0]); 1041 if( zStr==0 ) return; 1042 nStr = sqlite3_value_bytes(argv[0]); 1043 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */ 1044 zPattern = sqlite3_value_text(argv[1]); 1045 if( zPattern==0 ){ 1046 assert( sqlite3_value_type(argv[1])==SQLITE_NULL 1047 || sqlite3_context_db_handle(context)->mallocFailed ); 1048 return; 1049 } 1050 if( zPattern[0]==0 ){ 1051 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL ); 1052 sqlite3_result_value(context, argv[0]); 1053 return; 1054 } 1055 nPattern = sqlite3_value_bytes(argv[1]); 1056 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */ 1057 zRep = sqlite3_value_text(argv[2]); 1058 if( zRep==0 ) return; 1059 nRep = sqlite3_value_bytes(argv[2]); 1060 assert( zRep==sqlite3_value_text(argv[2]) ); 1061 nOut = nStr + 1; 1062 assert( nOut<SQLITE_MAX_LENGTH ); 1063 zOut = contextMalloc(context, (i64)nOut); 1064 if( zOut==0 ){ 1065 return; 1066 } 1067 loopLimit = nStr - nPattern; 1068 for(i=j=0; i<=loopLimit; i++){ 1069 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){ 1070 zOut[j++] = zStr[i]; 1071 }else{ 1072 u8 *zOld; 1073 sqlite3 *db = sqlite3_context_db_handle(context); 1074 nOut += nRep - nPattern; 1075 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] ); 1076 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); 1077 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ 1078 sqlite3_result_error_toobig(context); 1079 sqlite3_free(zOut); 1080 return; 1081 } 1082 zOld = zOut; 1083 zOut = sqlite3_realloc(zOut, (int)nOut); 1084 if( zOut==0 ){ 1085 sqlite3_result_error_nomem(context); 1086 sqlite3_free(zOld); 1087 return; 1088 } 1089 memcpy(&zOut[j], zRep, nRep); 1090 j += nRep; 1091 i += nPattern-1; 1092 } 1093 } 1094 assert( j+nStr-i+1==nOut ); 1095 memcpy(&zOut[j], &zStr[i], nStr-i); 1096 j += nStr - i; 1097 assert( j<=nOut ); 1098 zOut[j] = 0; 1099 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free); 1100 } 1101 1102 /* 1103 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions. 1104 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both. 1105 */ 1106 static void trimFunc( 1107 sqlite3_context *context, 1108 int argc, 1109 sqlite3_value **argv 1110 ){ 1111 const unsigned char *zIn; /* Input string */ 1112 const unsigned char *zCharSet; /* Set of characters to trim */ 1113 int nIn; /* Number of bytes in input */ 1114 int flags; /* 1: trimleft 2: trimright 3: trim */ 1115 int i; /* Loop counter */ 1116 unsigned char *aLen = 0; /* Length of each character in zCharSet */ 1117 unsigned char **azChar = 0; /* Individual characters in zCharSet */ 1118 int nChar; /* Number of characters in zCharSet */ 1119 1120 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ 1121 return; 1122 } 1123 zIn = sqlite3_value_text(argv[0]); 1124 if( zIn==0 ) return; 1125 nIn = sqlite3_value_bytes(argv[0]); 1126 assert( zIn==sqlite3_value_text(argv[0]) ); 1127 if( argc==1 ){ 1128 static const unsigned char lenOne[] = { 1 }; 1129 static unsigned char * const azOne[] = { (u8*)" " }; 1130 nChar = 1; 1131 aLen = (u8*)lenOne; 1132 azChar = (unsigned char **)azOne; 1133 zCharSet = 0; 1134 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ 1135 return; 1136 }else{ 1137 const unsigned char *z; 1138 for(z=zCharSet, nChar=0; *z; nChar++){ 1139 SQLITE_SKIP_UTF8(z); 1140 } 1141 if( nChar>0 ){ 1142 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); 1143 if( azChar==0 ){ 1144 return; 1145 } 1146 aLen = (unsigned char*)&azChar[nChar]; 1147 for(z=zCharSet, nChar=0; *z; nChar++){ 1148 azChar[nChar] = (unsigned char *)z; 1149 SQLITE_SKIP_UTF8(z); 1150 aLen[nChar] = (u8)(z - azChar[nChar]); 1151 } 1152 } 1153 } 1154 if( nChar>0 ){ 1155 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); 1156 if( flags & 1 ){ 1157 while( nIn>0 ){ 1158 int len = 0; 1159 for(i=0; i<nChar; i++){ 1160 len = aLen[i]; 1161 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break; 1162 } 1163 if( i>=nChar ) break; 1164 zIn += len; 1165 nIn -= len; 1166 } 1167 } 1168 if( flags & 2 ){ 1169 while( nIn>0 ){ 1170 int len = 0; 1171 for(i=0; i<nChar; i++){ 1172 len = aLen[i]; 1173 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break; 1174 } 1175 if( i>=nChar ) break; 1176 nIn -= len; 1177 } 1178 } 1179 if( zCharSet ){ 1180 sqlite3_free(azChar); 1181 } 1182 } 1183 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT); 1184 } 1185 1186 1187 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It 1188 ** is only available if the SQLITE_SOUNDEX compile-time option is used 1189 ** when SQLite is built. 1190 */ 1191 #ifdef SQLITE_SOUNDEX 1192 /* 1193 ** Compute the soundex encoding of a word. 1194 ** 1195 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the 1196 ** soundex encoding of the string X. 1197 */ 1198 static void soundexFunc( 1199 sqlite3_context *context, 1200 int argc, 1201 sqlite3_value **argv 1202 ){ 1203 char zResult[8]; 1204 const u8 *zIn; 1205 int i, j; 1206 static const unsigned char iCode[] = { 1207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1210 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1211 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, 1212 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1213 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, 1214 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1215 }; 1216 assert( argc==1 ); 1217 zIn = (u8*)sqlite3_value_text(argv[0]); 1218 if( zIn==0 ) zIn = (u8*)""; 1219 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){} 1220 if( zIn[i] ){ 1221 u8 prevcode = iCode[zIn[i]&0x7f]; 1222 zResult[0] = sqlite3Toupper(zIn[i]); 1223 for(j=1; j<4 && zIn[i]; i++){ 1224 int code = iCode[zIn[i]&0x7f]; 1225 if( code>0 ){ 1226 if( code!=prevcode ){ 1227 prevcode = code; 1228 zResult[j++] = code + '0'; 1229 } 1230 }else{ 1231 prevcode = 0; 1232 } 1233 } 1234 while( j<4 ){ 1235 zResult[j++] = '0'; 1236 } 1237 zResult[j] = 0; 1238 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT); 1239 }else{ 1240 /* IMP: R-64894-50321 The string "?000" is returned if the argument 1241 ** is NULL or contains no ASCII alphabetic characters. */ 1242 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC); 1243 } 1244 } 1245 #endif /* SQLITE_SOUNDEX */ 1246 1247 #ifndef SQLITE_OMIT_LOAD_EXTENSION 1248 /* 1249 ** A function that loads a shared-library extension then returns NULL. 1250 */ 1251 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){ 1252 const char *zFile = (const char *)sqlite3_value_text(argv[0]); 1253 const char *zProc; 1254 sqlite3 *db = sqlite3_context_db_handle(context); 1255 char *zErrMsg = 0; 1256 1257 if( argc==2 ){ 1258 zProc = (const char *)sqlite3_value_text(argv[1]); 1259 }else{ 1260 zProc = 0; 1261 } 1262 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){ 1263 sqlite3_result_error(context, zErrMsg, -1); 1264 sqlite3_free(zErrMsg); 1265 } 1266 } 1267 #endif 1268 1269 1270 /* 1271 ** An instance of the following structure holds the context of a 1272 ** sum() or avg() aggregate computation. 1273 */ 1274 typedef struct SumCtx SumCtx; 1275 struct SumCtx { 1276 double rSum; /* Floating point sum */ 1277 i64 iSum; /* Integer sum */ 1278 i64 cnt; /* Number of elements summed */ 1279 u8 overflow; /* True if integer overflow seen */ 1280 u8 approx; /* True if non-integer value was input to the sum */ 1281 }; 1282 1283 /* 1284 ** Routines used to compute the sum, average, and total. 1285 ** 1286 ** The SUM() function follows the (broken) SQL standard which means 1287 ** that it returns NULL if it sums over no inputs. TOTAL returns 1288 ** 0.0 in that case. In addition, TOTAL always returns a float where 1289 ** SUM might return an integer if it never encounters a floating point 1290 ** value. TOTAL never fails, but SUM might through an exception if 1291 ** it overflows an integer. 1292 */ 1293 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 1294 SumCtx *p; 1295 int type; 1296 assert( argc==1 ); 1297 UNUSED_PARAMETER(argc); 1298 p = sqlite3_aggregate_context(context, sizeof(*p)); 1299 type = sqlite3_value_numeric_type(argv[0]); 1300 if( p && type!=SQLITE_NULL ){ 1301 p->cnt++; 1302 if( type==SQLITE_INTEGER ){ 1303 i64 v = sqlite3_value_int64(argv[0]); 1304 p->rSum += v; 1305 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ 1306 p->overflow = 1; 1307 } 1308 }else{ 1309 p->rSum += sqlite3_value_double(argv[0]); 1310 p->approx = 1; 1311 } 1312 } 1313 } 1314 static void sumFinalize(sqlite3_context *context){ 1315 SumCtx *p; 1316 p = sqlite3_aggregate_context(context, 0); 1317 if( p && p->cnt>0 ){ 1318 if( p->overflow ){ 1319 sqlite3_result_error(context,"integer overflow",-1); 1320 }else if( p->approx ){ 1321 sqlite3_result_double(context, p->rSum); 1322 }else{ 1323 sqlite3_result_int64(context, p->iSum); 1324 } 1325 } 1326 } 1327 static void avgFinalize(sqlite3_context *context){ 1328 SumCtx *p; 1329 p = sqlite3_aggregate_context(context, 0); 1330 if( p && p->cnt>0 ){ 1331 sqlite3_result_double(context, p->rSum/(double)p->cnt); 1332 } 1333 } 1334 static void totalFinalize(sqlite3_context *context){ 1335 SumCtx *p; 1336 p = sqlite3_aggregate_context(context, 0); 1337 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ 1338 sqlite3_result_double(context, p ? p->rSum : (double)0); 1339 } 1340 1341 /* 1342 ** The following structure keeps track of state information for the 1343 ** count() aggregate function. 1344 */ 1345 typedef struct CountCtx CountCtx; 1346 struct CountCtx { 1347 i64 n; 1348 }; 1349 1350 /* 1351 ** Routines to implement the count() aggregate function. 1352 */ 1353 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 1354 CountCtx *p; 1355 p = sqlite3_aggregate_context(context, sizeof(*p)); 1356 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){ 1357 p->n++; 1358 } 1359 1360 #ifndef SQLITE_OMIT_DEPRECATED 1361 /* The sqlite3_aggregate_count() function is deprecated. But just to make 1362 ** sure it still operates correctly, verify that its count agrees with our 1363 ** internal count when using count(*) and when the total count can be 1364 ** expressed as a 32-bit integer. */ 1365 assert( argc==1 || p==0 || p->n>0x7fffffff 1366 || p->n==sqlite3_aggregate_count(context) ); 1367 #endif 1368 } 1369 static void countFinalize(sqlite3_context *context){ 1370 CountCtx *p; 1371 p = sqlite3_aggregate_context(context, 0); 1372 sqlite3_result_int64(context, p ? p->n : 0); 1373 } 1374 1375 /* 1376 ** Routines to implement min() and max() aggregate functions. 1377 */ 1378 static void minmaxStep( 1379 sqlite3_context *context, 1380 int NotUsed, 1381 sqlite3_value **argv 1382 ){ 1383 Mem *pArg = (Mem *)argv[0]; 1384 Mem *pBest; 1385 UNUSED_PARAMETER(NotUsed); 1386 1387 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); 1388 if( !pBest ) return; 1389 1390 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ 1391 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context); 1392 }else if( pBest->flags ){ 1393 int max; 1394 int cmp; 1395 CollSeq *pColl = sqlite3GetFuncCollSeq(context); 1396 /* This step function is used for both the min() and max() aggregates, 1397 ** the only difference between the two being that the sense of the 1398 ** comparison is inverted. For the max() aggregate, the 1399 ** sqlite3_user_data() function returns (void *)-1. For min() it 1400 ** returns (void *)db, where db is the sqlite3* database pointer. 1401 ** Therefore the next statement sets variable 'max' to 1 for the max() 1402 ** aggregate, or 0 for min(). 1403 */ 1404 max = sqlite3_user_data(context)!=0; 1405 cmp = sqlite3MemCompare(pBest, pArg, pColl); 1406 if( (max && cmp<0) || (!max && cmp>0) ){ 1407 sqlite3VdbeMemCopy(pBest, pArg); 1408 }else{ 1409 sqlite3SkipAccumulatorLoad(context); 1410 } 1411 }else{ 1412 sqlite3VdbeMemCopy(pBest, pArg); 1413 } 1414 } 1415 static void minMaxFinalize(sqlite3_context *context){ 1416 sqlite3_value *pRes; 1417 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); 1418 if( pRes ){ 1419 if( pRes->flags ){ 1420 sqlite3_result_value(context, pRes); 1421 } 1422 sqlite3VdbeMemRelease(pRes); 1423 } 1424 } 1425 1426 /* 1427 ** group_concat(EXPR, ?SEPARATOR?) 1428 */ 1429 static void groupConcatStep( 1430 sqlite3_context *context, 1431 int argc, 1432 sqlite3_value **argv 1433 ){ 1434 const char *zVal; 1435 StrAccum *pAccum; 1436 const char *zSep; 1437 int nVal, nSep; 1438 assert( argc==1 || argc==2 ); 1439 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 1440 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); 1441 1442 if( pAccum ){ 1443 sqlite3 *db = sqlite3_context_db_handle(context); 1444 int firstTerm = pAccum->useMalloc==0; 1445 pAccum->useMalloc = 2; 1446 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH]; 1447 if( !firstTerm ){ 1448 if( argc==2 ){ 1449 zSep = (char*)sqlite3_value_text(argv[1]); 1450 nSep = sqlite3_value_bytes(argv[1]); 1451 }else{ 1452 zSep = ","; 1453 nSep = 1; 1454 } 1455 sqlite3StrAccumAppend(pAccum, zSep, nSep); 1456 } 1457 zVal = (char*)sqlite3_value_text(argv[0]); 1458 nVal = sqlite3_value_bytes(argv[0]); 1459 sqlite3StrAccumAppend(pAccum, zVal, nVal); 1460 } 1461 } 1462 static void groupConcatFinalize(sqlite3_context *context){ 1463 StrAccum *pAccum; 1464 pAccum = sqlite3_aggregate_context(context, 0); 1465 if( pAccum ){ 1466 if( pAccum->tooBig ){ 1467 sqlite3_result_error_toobig(context); 1468 }else if( pAccum->mallocFailed ){ 1469 sqlite3_result_error_nomem(context); 1470 }else{ 1471 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, 1472 sqlite3_free); 1473 } 1474 } 1475 } 1476 1477 /* 1478 ** This routine does per-connection function registration. Most 1479 ** of the built-in functions above are part of the global function set. 1480 ** This routine only deals with those that are not global. 1481 */ 1482 void sqlite3RegisterBuiltinFunctions(sqlite3 *db){ 1483 int rc = sqlite3_overload_function(db, "MATCH", 2); 1484 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); 1485 if( rc==SQLITE_NOMEM ){ 1486 db->mallocFailed = 1; 1487 } 1488 } 1489 1490 /* 1491 ** Set the LIKEOPT flag on the 2-argument function with the given name. 1492 */ 1493 static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){ 1494 FuncDef *pDef; 1495 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName), 1496 2, SQLITE_UTF8, 0); 1497 if( ALWAYS(pDef) ){ 1498 pDef->flags = flagVal; 1499 } 1500 } 1501 1502 /* 1503 ** Register the built-in LIKE and GLOB functions. The caseSensitive 1504 ** parameter determines whether or not the LIKE operator is case 1505 ** sensitive. GLOB is always case sensitive. 1506 */ 1507 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){ 1508 struct compareInfo *pInfo; 1509 if( caseSensitive ){ 1510 pInfo = (struct compareInfo*)&likeInfoAlt; 1511 }else{ 1512 pInfo = (struct compareInfo*)&likeInfoNorm; 1513 } 1514 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); 1515 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); 1516 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, 1517 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0); 1518 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE); 1519 setLikeOptFlag(db, "like", 1520 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE); 1521 } 1522 1523 /* 1524 ** pExpr points to an expression which implements a function. If 1525 ** it is appropriate to apply the LIKE optimization to that function 1526 ** then set aWc[0] through aWc[2] to the wildcard characters and 1527 ** return TRUE. If the function is not a LIKE-style function then 1528 ** return FALSE. 1529 */ 1530 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){ 1531 FuncDef *pDef; 1532 if( pExpr->op!=TK_FUNCTION 1533 || !pExpr->x.pList 1534 || pExpr->x.pList->nExpr!=2 1535 ){ 1536 return 0; 1537 } 1538 assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); 1539 pDef = sqlite3FindFunction(db, pExpr->u.zToken, 1540 sqlite3Strlen30(pExpr->u.zToken), 1541 2, SQLITE_UTF8, 0); 1542 if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){ 1543 return 0; 1544 } 1545 1546 /* The memcpy() statement assumes that the wildcard characters are 1547 ** the first three statements in the compareInfo structure. The 1548 ** asserts() that follow verify that assumption 1549 */ 1550 memcpy(aWc, pDef->pUserData, 3); 1551 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll ); 1552 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne ); 1553 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet ); 1554 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0; 1555 return 1; 1556 } 1557 1558 /* 1559 ** All all of the FuncDef structures in the aBuiltinFunc[] array above 1560 ** to the global function hash table. This occurs at start-time (as 1561 ** a consequence of calling sqlite3_initialize()). 1562 ** 1563 ** After this routine runs 1564 */ 1565 void sqlite3RegisterGlobalFunctions(void){ 1566 /* 1567 ** The following array holds FuncDef structures for all of the functions 1568 ** defined in this file. 1569 ** 1570 ** The array cannot be constant since changes are made to the 1571 ** FuncDef.pHash elements at start-time. The elements of this array 1572 ** are read-only after initialization is complete. 1573 */ 1574 static SQLITE_WSD FuncDef aBuiltinFunc[] = { 1575 FUNCTION(ltrim, 1, 1, 0, trimFunc ), 1576 FUNCTION(ltrim, 2, 1, 0, trimFunc ), 1577 FUNCTION(rtrim, 1, 2, 0, trimFunc ), 1578 FUNCTION(rtrim, 2, 2, 0, trimFunc ), 1579 FUNCTION(trim, 1, 3, 0, trimFunc ), 1580 FUNCTION(trim, 2, 3, 0, trimFunc ), 1581 FUNCTION(min, -1, 0, 1, minmaxFunc ), 1582 FUNCTION(min, 0, 0, 1, 0 ), 1583 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ), 1584 FUNCTION(max, -1, 1, 1, minmaxFunc ), 1585 FUNCTION(max, 0, 1, 1, 0 ), 1586 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ), 1587 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), 1588 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), 1589 FUNCTION(instr, 2, 0, 0, instrFunc ), 1590 FUNCTION(substr, 2, 0, 0, substrFunc ), 1591 FUNCTION(substr, 3, 0, 0, substrFunc ), 1592 FUNCTION(abs, 1, 0, 0, absFunc ), 1593 #ifndef SQLITE_OMIT_FLOATING_POINT 1594 FUNCTION(round, 1, 0, 0, roundFunc ), 1595 FUNCTION(round, 2, 0, 0, roundFunc ), 1596 #endif 1597 FUNCTION(upper, 1, 0, 0, upperFunc ), 1598 FUNCTION(lower, 1, 0, 0, lowerFunc ), 1599 FUNCTION(coalesce, 1, 0, 0, 0 ), 1600 FUNCTION(coalesce, 0, 0, 0, 0 ), 1601 FUNCTION2(coalesce, -1, 0, 0, ifnullFunc, SQLITE_FUNC_COALESCE), 1602 FUNCTION(hex, 1, 0, 0, hexFunc ), 1603 FUNCTION2(ifnull, 2, 0, 0, ifnullFunc, SQLITE_FUNC_COALESCE), 1604 FUNCTION(random, 0, 0, 0, randomFunc ), 1605 FUNCTION(randomblob, 1, 0, 0, randomBlob ), 1606 FUNCTION(nullif, 2, 0, 1, nullifFunc ), 1607 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ), 1608 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ), 1609 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ), 1610 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 1611 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ), 1612 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ), 1613 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 1614 FUNCTION(quote, 1, 0, 0, quoteFunc ), 1615 FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), 1616 FUNCTION(changes, 0, 0, 0, changes ), 1617 FUNCTION(total_changes, 0, 0, 0, total_changes ), 1618 FUNCTION(replace, 3, 0, 0, replaceFunc ), 1619 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), 1620 #ifdef SQLITE_SOUNDEX 1621 FUNCTION(soundex, 1, 0, 0, soundexFunc ), 1622 #endif 1623 #ifndef SQLITE_OMIT_LOAD_EXTENSION 1624 FUNCTION(load_extension, 1, 0, 0, loadExt ), 1625 FUNCTION(load_extension, 2, 0, 0, loadExt ), 1626 #endif 1627 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ), 1628 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ), 1629 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ), 1630 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */ 1631 {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0}, 1632 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ), 1633 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize), 1634 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize), 1635 1636 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), 1637 #ifdef SQLITE_CASE_SENSITIVE_LIKE 1638 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), 1639 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), 1640 #else 1641 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE), 1642 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE), 1643 #endif 1644 }; 1645 1646 int i; 1647 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); 1648 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc); 1649 1650 for(i=0; i<ArraySize(aBuiltinFunc); i++){ 1651 sqlite3FuncDefInsert(pHash, &aFunc[i]); 1652 } 1653 sqlite3RegisterDateTimeFunctions(); 1654 #ifndef SQLITE_OMIT_ALTERTABLE 1655 sqlite3AlterFunctions(); 1656 #endif 1657 } 1658