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