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