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