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