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