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.102 2005/07/09 02:38:06 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 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ 30 return context->pColl; 31 } 32 33 /* 34 ** Implementation of the non-aggregate min() and max() functions 35 */ 36 static void minmaxFunc( 37 sqlite3_context *context, 38 int argc, 39 sqlite3_value **argv 40 ){ 41 int i; 42 int mask; /* 0 for min() or 0xffffffff for max() */ 43 int iBest; 44 CollSeq *pColl; 45 46 if( argc==0 ) return; 47 mask = sqlite3_user_data(context)==0 ? 0 : -1; 48 pColl = sqlite3GetFuncCollSeq(context); 49 assert( pColl ); 50 assert( mask==-1 || mask==0 ); 51 iBest = 0; 52 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 53 for(i=1; i<argc; i++){ 54 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return; 55 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){ 56 iBest = i; 57 } 58 } 59 sqlite3_result_value(context, argv[iBest]); 60 } 61 62 /* 63 ** Return the type of the argument. 64 */ 65 static void typeofFunc( 66 sqlite3_context *context, 67 int argc, 68 sqlite3_value **argv 69 ){ 70 const char *z = 0; 71 switch( sqlite3_value_type(argv[0]) ){ 72 case SQLITE_NULL: z = "null"; break; 73 case SQLITE_INTEGER: z = "integer"; break; 74 case SQLITE_TEXT: z = "text"; break; 75 case SQLITE_FLOAT: z = "real"; break; 76 case SQLITE_BLOB: z = "blob"; break; 77 } 78 sqlite3_result_text(context, z, -1, SQLITE_STATIC); 79 } 80 81 82 /* 83 ** Implementation of the length() function 84 */ 85 static void lengthFunc( 86 sqlite3_context *context, 87 int argc, 88 sqlite3_value **argv 89 ){ 90 int len; 91 92 assert( argc==1 ); 93 switch( sqlite3_value_type(argv[0]) ){ 94 case SQLITE_BLOB: 95 case SQLITE_INTEGER: 96 case SQLITE_FLOAT: { 97 sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); 98 break; 99 } 100 case SQLITE_TEXT: { 101 const char *z = sqlite3_value_text(argv[0]); 102 for(len=0; *z; z++){ if( (0xc0&*z)!=0x80 ) len++; } 103 sqlite3_result_int(context, len); 104 break; 105 } 106 default: { 107 sqlite3_result_null(context); 108 break; 109 } 110 } 111 } 112 113 /* 114 ** Implementation of the abs() function 115 */ 116 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 117 assert( argc==1 ); 118 switch( sqlite3_value_type(argv[0]) ){ 119 case SQLITE_INTEGER: { 120 i64 iVal = sqlite3_value_int64(argv[0]); 121 if( iVal<0 ) iVal = iVal * -1; 122 sqlite3_result_int64(context, iVal); 123 break; 124 } 125 case SQLITE_NULL: { 126 sqlite3_result_null(context); 127 break; 128 } 129 default: { 130 double rVal = sqlite3_value_double(argv[0]); 131 if( rVal<0 ) rVal = rVal * -1.0; 132 sqlite3_result_double(context, rVal); 133 break; 134 } 135 } 136 } 137 138 /* 139 ** Implementation of the substr() function 140 */ 141 static void substrFunc( 142 sqlite3_context *context, 143 int argc, 144 sqlite3_value **argv 145 ){ 146 const char *z; 147 const char *z2; 148 int i; 149 int p1, p2, len; 150 151 assert( argc==3 ); 152 z = sqlite3_value_text(argv[0]); 153 if( z==0 ) return; 154 p1 = sqlite3_value_int(argv[1]); 155 p2 = sqlite3_value_int(argv[2]); 156 for(len=0, z2=z; *z2; z2++){ if( (0xc0&*z2)!=0x80 ) len++; } 157 if( p1<0 ){ 158 p1 += len; 159 if( p1<0 ){ 160 p2 += p1; 161 p1 = 0; 162 } 163 }else if( p1>0 ){ 164 p1--; 165 } 166 if( p1+p2>len ){ 167 p2 = len-p1; 168 } 169 for(i=0; i<p1 && z[i]; i++){ 170 if( (z[i]&0xc0)==0x80 ) p1++; 171 } 172 while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p1++; } 173 for(; i<p1+p2 && z[i]; i++){ 174 if( (z[i]&0xc0)==0x80 ) p2++; 175 } 176 while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p2++; } 177 if( p2<0 ) p2 = 0; 178 sqlite3_result_text(context, &z[p1], p2, SQLITE_TRANSIENT); 179 } 180 181 /* 182 ** Implementation of the round() function 183 */ 184 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 185 int n = 0; 186 double r; 187 char zBuf[100]; 188 assert( argc==1 || argc==2 ); 189 if( argc==2 ){ 190 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return; 191 n = sqlite3_value_int(argv[1]); 192 if( n>30 ) n = 30; 193 if( n<0 ) n = 0; 194 } 195 if( SQLITE_NULL==sqlite3_value_type(argv[0]) ) return; 196 r = sqlite3_value_double(argv[0]); 197 sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r); 198 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); 199 } 200 201 /* 202 ** Implementation of the upper() and lower() SQL functions. 203 */ 204 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 205 unsigned char *z; 206 int i; 207 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return; 208 z = sqliteMalloc(sqlite3_value_bytes(argv[0])+1); 209 if( z==0 ) return; 210 strcpy(z, sqlite3_value_text(argv[0])); 211 for(i=0; z[i]; i++){ 212 z[i] = toupper(z[i]); 213 } 214 sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT); 215 sqliteFree(z); 216 } 217 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 218 unsigned char *z; 219 int i; 220 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return; 221 z = sqliteMalloc(sqlite3_value_bytes(argv[0])+1); 222 if( z==0 ) return; 223 strcpy(z, sqlite3_value_text(argv[0])); 224 for(i=0; z[i]; i++){ 225 z[i] = tolower(z[i]); 226 } 227 sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT); 228 sqliteFree(z); 229 } 230 231 /* 232 ** Implementation of the IFNULL(), NVL(), and COALESCE() functions. 233 ** All three do the same thing. They return the first non-NULL 234 ** argument. 235 */ 236 static void ifnullFunc( 237 sqlite3_context *context, 238 int argc, 239 sqlite3_value **argv 240 ){ 241 int i; 242 for(i=0; i<argc; i++){ 243 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){ 244 sqlite3_result_value(context, argv[i]); 245 break; 246 } 247 } 248 } 249 250 /* 251 ** Implementation of random(). Return a random integer. 252 */ 253 static void randomFunc( 254 sqlite3_context *context, 255 int argc, 256 sqlite3_value **argv 257 ){ 258 int r; 259 sqlite3Randomness(sizeof(r), &r); 260 sqlite3_result_int(context, r); 261 } 262 263 /* 264 ** Implementation of the last_insert_rowid() SQL function. The return 265 ** value is the same as the sqlite3_last_insert_rowid() API function. 266 */ 267 static void last_insert_rowid( 268 sqlite3_context *context, 269 int arg, 270 sqlite3_value **argv 271 ){ 272 sqlite3 *db = sqlite3_user_data(context); 273 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db)); 274 } 275 276 /* 277 ** Implementation of the changes() SQL function. The return value is the 278 ** same as the sqlite3_changes() API function. 279 */ 280 static void changes( 281 sqlite3_context *context, 282 int arg, 283 sqlite3_value **argv 284 ){ 285 sqlite3 *db = sqlite3_user_data(context); 286 sqlite3_result_int(context, sqlite3_changes(db)); 287 } 288 289 /* 290 ** Implementation of the total_changes() SQL function. The return value is 291 ** the same as the sqlite3_total_changes() API function. 292 */ 293 static void total_changes( 294 sqlite3_context *context, 295 int arg, 296 sqlite3_value **argv 297 ){ 298 sqlite3 *db = sqlite3_user_data(context); 299 sqlite3_result_int(context, sqlite3_total_changes(db)); 300 } 301 302 /* 303 ** A structure defining how to do GLOB-style comparisons. 304 */ 305 struct compareInfo { 306 u8 matchAll; 307 u8 matchOne; 308 u8 matchSet; 309 u8 noCase; 310 }; 311 static const struct compareInfo globInfo = { '*', '?', '[', 0 }; 312 #ifndef SQLITE_CASE_SENSITIVE_LIKE 313 /* The correct SQL-92 behavior is for the LIKE operator to ignore 314 ** case. Thus 'a' LIKE 'A' would be true. */ 315 static const struct compareInfo likeInfo = { '%', '_', 0, 1 }; 316 #else 317 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator 318 ** is case sensitive causing 'a' LIKE 'A' to be false */ 319 static const struct compareInfo likeInfo = { '%', '_', 0, 0 }; 320 #endif 321 322 /* 323 ** X is a pointer to the first byte of a UTF-8 character. Increment 324 ** X so that it points to the next character. This only works right 325 ** if X points to a well-formed UTF-8 string. 326 */ 327 #define sqliteNextChar(X) while( (0xc0&*++(X))==0x80 ){} 328 #define sqliteCharVal(X) sqlite3ReadUtf8(X) 329 330 331 /* 332 ** Compare two UTF-8 strings for equality where the first string can 333 ** potentially be a "glob" expression. Return true (1) if they 334 ** are the same and false (0) if they are different. 335 ** 336 ** Globbing rules: 337 ** 338 ** '*' Matches any sequence of zero or more characters. 339 ** 340 ** '?' Matches exactly one character. 341 ** 342 ** [...] Matches one character from the enclosed list of 343 ** characters. 344 ** 345 ** [^...] Matches one character not in the enclosed list. 346 ** 347 ** With the [...] and [^...] matching, a ']' character can be included 348 ** in the list by making it the first character after '[' or '^'. A 349 ** range of characters can be specified using '-'. Example: 350 ** "[a-z]" matches any single lower-case letter. To match a '-', make 351 ** it the last character in the list. 352 ** 353 ** This routine is usually quick, but can be N**2 in the worst case. 354 ** 355 ** Hints: to match '*' or '?', put them in "[]". Like this: 356 ** 357 ** abc[*]xyz Matches "abc*xyz" only 358 */ 359 static int patternCompare( 360 const u8 *zPattern, /* The glob pattern */ 361 const u8 *zString, /* The string to compare against the glob */ 362 const struct compareInfo *pInfo, /* Information about how to do the compare */ 363 const int esc /* The escape character */ 364 ){ 365 register int c; 366 int invert; 367 int seen; 368 int c2; 369 u8 matchOne = pInfo->matchOne; 370 u8 matchAll = pInfo->matchAll; 371 u8 matchSet = pInfo->matchSet; 372 u8 noCase = pInfo->noCase; 373 int prevEscape = 0; /* True if the previous character was 'escape' */ 374 375 while( (c = *zPattern)!=0 ){ 376 if( !prevEscape && c==matchAll ){ 377 while( (c=zPattern[1]) == matchAll || c == matchOne ){ 378 if( c==matchOne ){ 379 if( *zString==0 ) return 0; 380 sqliteNextChar(zString); 381 } 382 zPattern++; 383 } 384 if( c && esc && sqlite3ReadUtf8(&zPattern[1])==esc ){ 385 u8 const *zTemp = &zPattern[1]; 386 sqliteNextChar(zTemp); 387 c = *zTemp; 388 } 389 if( c==0 ) return 1; 390 if( c==matchSet ){ 391 assert( esc==0 ); /* This is GLOB, not LIKE */ 392 while( *zString && patternCompare(&zPattern[1],zString,pInfo,esc)==0 ){ 393 sqliteNextChar(zString); 394 } 395 return *zString!=0; 396 }else{ 397 while( (c2 = *zString)!=0 ){ 398 if( noCase ){ 399 c2 = sqlite3UpperToLower[c2]; 400 c = sqlite3UpperToLower[c]; 401 while( c2 != 0 && c2 != c ){ c2 = sqlite3UpperToLower[*++zString]; } 402 }else{ 403 while( c2 != 0 && c2 != c ){ c2 = *++zString; } 404 } 405 if( c2==0 ) return 0; 406 if( patternCompare(&zPattern[1],zString,pInfo,esc) ) return 1; 407 sqliteNextChar(zString); 408 } 409 return 0; 410 } 411 }else if( !prevEscape && c==matchOne ){ 412 if( *zString==0 ) return 0; 413 sqliteNextChar(zString); 414 zPattern++; 415 }else if( c==matchSet ){ 416 int prior_c = 0; 417 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */ 418 seen = 0; 419 invert = 0; 420 c = sqliteCharVal(zString); 421 if( c==0 ) return 0; 422 c2 = *++zPattern; 423 if( c2=='^' ){ invert = 1; c2 = *++zPattern; } 424 if( c2==']' ){ 425 if( c==']' ) seen = 1; 426 c2 = *++zPattern; 427 } 428 while( (c2 = sqliteCharVal(zPattern))!=0 && c2!=']' ){ 429 if( c2=='-' && zPattern[1]!=']' && zPattern[1]!=0 && prior_c>0 ){ 430 zPattern++; 431 c2 = sqliteCharVal(zPattern); 432 if( c>=prior_c && c<=c2 ) seen = 1; 433 prior_c = 0; 434 }else if( c==c2 ){ 435 seen = 1; 436 prior_c = c2; 437 }else{ 438 prior_c = c2; 439 } 440 sqliteNextChar(zPattern); 441 } 442 if( c2==0 || (seen ^ invert)==0 ) return 0; 443 sqliteNextChar(zString); 444 zPattern++; 445 }else if( esc && !prevEscape && sqlite3ReadUtf8(zPattern)==esc){ 446 prevEscape = 1; 447 sqliteNextChar(zPattern); 448 }else{ 449 if( noCase ){ 450 if( sqlite3UpperToLower[c] != sqlite3UpperToLower[*zString] ) return 0; 451 }else{ 452 if( c != *zString ) return 0; 453 } 454 zPattern++; 455 zString++; 456 prevEscape = 0; 457 } 458 } 459 return *zString==0; 460 } 461 462 463 /* 464 ** Implementation of the like() SQL function. This function implements 465 ** the build-in LIKE operator. The first argument to the function is the 466 ** pattern and the second argument is the string. So, the SQL statements: 467 ** 468 ** A LIKE B 469 ** 470 ** is implemented as like(B,A). 471 ** 472 ** If the pointer retrieved by via a call to sqlite3_user_data() is 473 ** not NULL, then this function uses UTF-16. Otherwise UTF-8. 474 */ 475 static void likeFunc( 476 sqlite3_context *context, 477 int argc, 478 sqlite3_value **argv 479 ){ 480 const unsigned char *zA = sqlite3_value_text(argv[0]); 481 const unsigned char *zB = sqlite3_value_text(argv[1]); 482 int escape = 0; 483 if( argc==3 ){ 484 /* The escape character string must consist of a single UTF-8 character. 485 ** Otherwise, return an error. 486 */ 487 const unsigned char *zEsc = sqlite3_value_text(argv[2]); 488 if( sqlite3utf8CharLen(zEsc, -1)!=1 ){ 489 sqlite3_result_error(context, 490 "ESCAPE expression must be a single character", -1); 491 return; 492 } 493 escape = sqlite3ReadUtf8(zEsc); 494 } 495 if( zA && zB ){ 496 sqlite3_result_int(context, patternCompare(zA, zB, &likeInfo, escape)); 497 } 498 } 499 500 /* 501 ** Implementation of the glob() SQL function. This function implements 502 ** the build-in GLOB operator. The first argument to the function is the 503 ** string and the second argument is the pattern. So, the SQL statements: 504 ** 505 ** A GLOB B 506 ** 507 ** is implemented as glob(B,A). 508 */ 509 static void globFunc(sqlite3_context *context, int arg, sqlite3_value **argv){ 510 const unsigned char *zA = sqlite3_value_text(argv[0]); 511 const unsigned char *zB = sqlite3_value_text(argv[1]); 512 if( zA && zB ){ 513 sqlite3_result_int(context, patternCompare(zA, zB, &globInfo, 0)); 514 } 515 } 516 517 /* 518 ** Implementation of the NULLIF(x,y) function. The result is the first 519 ** argument if the arguments are different. The result is NULL if the 520 ** arguments are equal to each other. 521 */ 522 static void nullifFunc( 523 sqlite3_context *context, 524 int argc, 525 sqlite3_value **argv 526 ){ 527 CollSeq *pColl = sqlite3GetFuncCollSeq(context); 528 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){ 529 sqlite3_result_value(context, argv[0]); 530 } 531 } 532 533 /* 534 ** Implementation of the VERSION(*) function. The result is the version 535 ** of the SQLite library that is running. 536 */ 537 static void versionFunc( 538 sqlite3_context *context, 539 int argc, 540 sqlite3_value **argv 541 ){ 542 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC); 543 } 544 545 546 /* 547 ** EXPERIMENTAL - This is not an official function. The interface may 548 ** change. This function may disappear. Do not write code that depends 549 ** on this function. 550 ** 551 ** Implementation of the QUOTE() function. This function takes a single 552 ** argument. If the argument is numeric, the return value is the same as 553 ** the argument. If the argument is NULL, the return value is the string 554 ** "NULL". Otherwise, the argument is enclosed in single quotes with 555 ** single-quote escapes. 556 */ 557 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 558 if( argc<1 ) return; 559 switch( sqlite3_value_type(argv[0]) ){ 560 case SQLITE_NULL: { 561 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC); 562 break; 563 } 564 case SQLITE_INTEGER: 565 case SQLITE_FLOAT: { 566 sqlite3_result_value(context, argv[0]); 567 break; 568 } 569 case SQLITE_BLOB: { 570 static const char hexdigits[] = { 571 '0', '1', '2', '3', '4', '5', '6', '7', 572 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 573 }; 574 char *zText = 0; 575 int nBlob = sqlite3_value_bytes(argv[0]); 576 char const *zBlob = sqlite3_value_blob(argv[0]); 577 578 zText = (char *)sqliteMalloc((2*nBlob)+4); 579 if( !zText ){ 580 sqlite3_result_error(context, "out of memory", -1); 581 }else{ 582 int i; 583 for(i=0; i<nBlob; i++){ 584 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F]; 585 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F]; 586 } 587 zText[(nBlob*2)+2] = '\''; 588 zText[(nBlob*2)+3] = '\0'; 589 zText[0] = 'X'; 590 zText[1] = '\''; 591 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); 592 sqliteFree(zText); 593 } 594 break; 595 } 596 case SQLITE_TEXT: { 597 int i,j,n; 598 const char *zArg = sqlite3_value_text(argv[0]); 599 char *z; 600 601 for(i=n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; } 602 z = sqliteMalloc( i+n+3 ); 603 if( z==0 ) return; 604 z[0] = '\''; 605 for(i=0, j=1; zArg[i]; i++){ 606 z[j++] = zArg[i]; 607 if( zArg[i]=='\'' ){ 608 z[j++] = '\''; 609 } 610 } 611 z[j++] = '\''; 612 z[j] = 0; 613 sqlite3_result_text(context, z, j, SQLITE_TRANSIENT); 614 sqliteFree(z); 615 } 616 } 617 } 618 619 #ifdef SQLITE_SOUNDEX 620 /* 621 ** Compute the soundex encoding of a word. 622 */ 623 static void soundexFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ 624 char zResult[8]; 625 const u8 *zIn; 626 int i, j; 627 static const unsigned char iCode[] = { 628 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, 633 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, 634 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, 635 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, 636 }; 637 assert( argc==1 ); 638 zIn = (u8*)sqlite3_value_text(argv[0]); 639 for(i=0; zIn[i] && !isalpha(zIn[i]); i++){} 640 if( zIn[i] ){ 641 zResult[0] = toupper(zIn[i]); 642 for(j=1; j<4 && zIn[i]; i++){ 643 int code = iCode[zIn[i]&0x7f]; 644 if( code>0 ){ 645 zResult[j++] = code + '0'; 646 } 647 } 648 while( j<4 ){ 649 zResult[j++] = '0'; 650 } 651 zResult[j] = 0; 652 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT); 653 }else{ 654 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC); 655 } 656 } 657 #endif 658 659 #ifdef SQLITE_TEST 660 /* 661 ** This function generates a string of random characters. Used for 662 ** generating test data. 663 */ 664 static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){ 665 static const unsigned char zSrc[] = 666 "abcdefghijklmnopqrstuvwxyz" 667 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 668 "0123456789" 669 ".-!,:*^+=_|?/<> "; 670 int iMin, iMax, n, r, i; 671 unsigned char zBuf[1000]; 672 if( argc>=1 ){ 673 iMin = sqlite3_value_int(argv[0]); 674 if( iMin<0 ) iMin = 0; 675 if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1; 676 }else{ 677 iMin = 1; 678 } 679 if( argc>=2 ){ 680 iMax = sqlite3_value_int(argv[1]); 681 if( iMax<iMin ) iMax = iMin; 682 if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1; 683 }else{ 684 iMax = 50; 685 } 686 n = iMin; 687 if( iMax>iMin ){ 688 sqlite3Randomness(sizeof(r), &r); 689 r &= 0x7fffffff; 690 n += r%(iMax + 1 - iMin); 691 } 692 assert( n<sizeof(zBuf) ); 693 sqlite3Randomness(n, zBuf); 694 for(i=0; i<n; i++){ 695 zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)]; 696 } 697 zBuf[n] = 0; 698 sqlite3_result_text(context, zBuf, n, SQLITE_TRANSIENT); 699 } 700 #endif /* SQLITE_TEST */ 701 702 #ifdef SQLITE_TEST 703 /* 704 ** The following two SQL functions are used to test returning a text 705 ** result with a destructor. Function 'test_destructor' takes one argument 706 ** and returns the same argument interpreted as TEXT. A destructor is 707 ** passed with the sqlite3_result_text() call. 708 ** 709 ** SQL function 'test_destructor_count' returns the number of outstanding 710 ** allocations made by 'test_destructor'; 711 ** 712 ** WARNING: Not threadsafe. 713 */ 714 static int test_destructor_count_var = 0; 715 static void destructor(void *p){ 716 char *zVal = (char *)p; 717 assert(zVal); 718 zVal--; 719 sqliteFree(zVal); 720 test_destructor_count_var--; 721 } 722 static void test_destructor( 723 sqlite3_context *pCtx, 724 int nArg, 725 sqlite3_value **argv 726 ){ 727 char *zVal; 728 int len; 729 sqlite3 *db = sqlite3_user_data(pCtx); 730 731 test_destructor_count_var++; 732 assert( nArg==1 ); 733 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 734 len = sqlite3ValueBytes(argv[0], db->enc); 735 zVal = sqliteMalloc(len+3); 736 zVal[len] = 0; 737 zVal[len-1] = 0; 738 assert( zVal ); 739 zVal++; 740 memcpy(zVal, sqlite3ValueText(argv[0], db->enc), len); 741 if( db->enc==SQLITE_UTF8 ){ 742 sqlite3_result_text(pCtx, zVal, -1, destructor); 743 #ifndef SQLITE_OMIT_UTF16 744 }else if( db->enc==SQLITE_UTF16LE ){ 745 sqlite3_result_text16le(pCtx, zVal, -1, destructor); 746 }else{ 747 sqlite3_result_text16be(pCtx, zVal, -1, destructor); 748 #endif /* SQLITE_OMIT_UTF16 */ 749 } 750 } 751 static void test_destructor_count( 752 sqlite3_context *pCtx, 753 int nArg, 754 sqlite3_value **argv 755 ){ 756 sqlite3_result_int(pCtx, test_destructor_count_var); 757 } 758 #endif /* SQLITE_TEST */ 759 760 #ifdef SQLITE_TEST 761 /* 762 ** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata() 763 ** interface. 764 ** 765 ** The test_auxdata() SQL function attempts to register each of its arguments 766 ** as auxiliary data. If there are no prior registrations of aux data for 767 ** that argument (meaning the argument is not a constant or this is its first 768 ** call) then the result for that argument is 0. If there is a prior 769 ** registration, the result for that argument is 1. The overall result 770 ** is the individual argument results separated by spaces. 771 */ 772 static void free_test_auxdata(void *p) {sqliteFree(p);} 773 static void test_auxdata( 774 sqlite3_context *pCtx, 775 int nArg, 776 sqlite3_value **argv 777 ){ 778 int i; 779 char *zRet = sqliteMalloc(nArg*2); 780 if( !zRet ) return; 781 for(i=0; i<nArg; i++){ 782 char const *z = sqlite3_value_text(argv[i]); 783 if( z ){ 784 char *zAux = sqlite3_get_auxdata(pCtx, i); 785 if( zAux ){ 786 zRet[i*2] = '1'; 787 if( strcmp(zAux, z) ){ 788 sqlite3_result_error(pCtx, "Auxilary data corruption", -1); 789 return; 790 } 791 }else{ 792 zRet[i*2] = '0'; 793 zAux = sqliteStrDup(z); 794 sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata); 795 } 796 zRet[i*2+1] = ' '; 797 } 798 } 799 sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata); 800 } 801 #endif /* SQLITE_TEST */ 802 803 #ifdef SQLITE_TEST 804 /* 805 ** A function to test error reporting from user functions. This function 806 ** returns a copy of it's first argument as an error. 807 */ 808 static void test_error( 809 sqlite3_context *pCtx, 810 int nArg, 811 sqlite3_value **argv 812 ){ 813 sqlite3_result_error(pCtx, sqlite3_value_text(argv[0]), 0); 814 } 815 #endif /* SQLITE_TEST */ 816 817 /* 818 ** An instance of the following structure holds the context of a 819 ** sum() or avg() aggregate computation. 820 */ 821 typedef struct SumCtx SumCtx; 822 struct SumCtx { 823 double sum; /* Sum of terms */ 824 int cnt; /* Number of elements summed */ 825 }; 826 827 /* 828 ** Routines used to compute the sum or average. 829 */ 830 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 831 SumCtx *p; 832 if( argc<1 ) return; 833 p = sqlite3_aggregate_context(context, sizeof(*p)); 834 if( p && SQLITE_NULL!=sqlite3_value_type(argv[0]) ){ 835 p->sum += sqlite3_value_double(argv[0]); 836 p->cnt++; 837 } 838 } 839 static void sumFinalize(sqlite3_context *context){ 840 SumCtx *p; 841 p = sqlite3_aggregate_context(context, sizeof(*p)); 842 sqlite3_result_double(context, p ? p->sum : 0.0); 843 } 844 static void avgFinalize(sqlite3_context *context){ 845 SumCtx *p; 846 p = sqlite3_aggregate_context(context, sizeof(*p)); 847 if( p && p->cnt>0 ){ 848 sqlite3_result_double(context, p->sum/(double)p->cnt); 849 } 850 } 851 852 /* 853 ** An instance of the following structure holds the context of a 854 ** variance or standard deviation computation. 855 */ 856 typedef struct StdDevCtx StdDevCtx; 857 struct StdDevCtx { 858 double sum; /* Sum of terms */ 859 double sum2; /* Sum of the squares of terms */ 860 int cnt; /* Number of terms counted */ 861 }; 862 863 /* 864 ** The following structure keeps track of state information for the 865 ** count() aggregate function. 866 */ 867 typedef struct CountCtx CountCtx; 868 struct CountCtx { 869 int n; 870 }; 871 872 /* 873 ** Routines to implement the count() aggregate function. 874 */ 875 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 876 CountCtx *p; 877 p = sqlite3_aggregate_context(context, sizeof(*p)); 878 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){ 879 p->n++; 880 } 881 } 882 static void countFinalize(sqlite3_context *context){ 883 CountCtx *p; 884 p = sqlite3_aggregate_context(context, sizeof(*p)); 885 sqlite3_result_int(context, p ? p->n : 0); 886 } 887 888 /* 889 ** This function tracks state information for the min() and max() 890 ** aggregate functions. 891 */ 892 typedef struct MinMaxCtx MinMaxCtx; 893 struct MinMaxCtx { 894 char *z; /* The best so far */ 895 char zBuf[28]; /* Space that can be used for storage */ 896 }; 897 898 /* 899 ** Routines to implement min() and max() aggregate functions. 900 */ 901 static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){ 902 Mem *pArg = (Mem *)argv[0]; 903 Mem *pBest; 904 905 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; 906 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); 907 if( !pBest ) return; 908 909 if( pBest->flags ){ 910 int max; 911 int cmp; 912 CollSeq *pColl = sqlite3GetFuncCollSeq(context); 913 /* This step function is used for both the min() and max() aggregates, 914 ** the only difference between the two being that the sense of the 915 ** comparison is inverted. For the max() aggregate, the 916 ** sqlite3_user_data() function returns (void *)-1. For min() it 917 ** returns (void *)db, where db is the sqlite3* database pointer. 918 ** Therefore the next statement sets variable 'max' to 1 for the max() 919 ** aggregate, or 0 for min(). 920 */ 921 max = ((sqlite3_user_data(context)==(void *)-1)?1:0); 922 cmp = sqlite3MemCompare(pBest, pArg, pColl); 923 if( (max && cmp<0) || (!max && cmp>0) ){ 924 sqlite3VdbeMemCopy(pBest, pArg); 925 } 926 }else{ 927 sqlite3VdbeMemCopy(pBest, pArg); 928 } 929 } 930 static void minMaxFinalize(sqlite3_context *context){ 931 sqlite3_value *pRes; 932 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, sizeof(Mem)); 933 if( pRes->flags ){ 934 sqlite3_result_value(context, pRes); 935 } 936 sqlite3VdbeMemRelease(pRes); 937 } 938 939 940 /* 941 ** This function registered all of the above C functions as SQL 942 ** functions. This should be the only routine in this file with 943 ** external linkage. 944 */ 945 void sqlite3RegisterBuiltinFunctions(sqlite3 *db){ 946 static const struct { 947 char *zName; 948 signed char nArg; 949 u8 argType; /* 0: none. 1: db 2: (-1) */ 950 u8 eTextRep; /* 1: UTF-16. 0: UTF-8 */ 951 u8 needCollSeq; 952 void (*xFunc)(sqlite3_context*,int,sqlite3_value **); 953 } aFuncs[] = { 954 { "min", -1, 0, SQLITE_UTF8, 1, minmaxFunc }, 955 { "min", 0, 0, SQLITE_UTF8, 1, 0 }, 956 { "max", -1, 2, SQLITE_UTF8, 1, minmaxFunc }, 957 { "max", 0, 2, SQLITE_UTF8, 1, 0 }, 958 { "typeof", 1, 0, SQLITE_UTF8, 0, typeofFunc }, 959 { "length", 1, 0, SQLITE_UTF8, 0, lengthFunc }, 960 { "substr", 3, 0, SQLITE_UTF8, 0, substrFunc }, 961 #ifndef SQLITE_OMIT_UTF16 962 { "substr", 3, 0, SQLITE_UTF16LE, 0, sqlite3utf16Substr }, 963 #endif 964 { "abs", 1, 0, SQLITE_UTF8, 0, absFunc }, 965 { "round", 1, 0, SQLITE_UTF8, 0, roundFunc }, 966 { "round", 2, 0, SQLITE_UTF8, 0, roundFunc }, 967 { "upper", 1, 0, SQLITE_UTF8, 0, upperFunc }, 968 { "lower", 1, 0, SQLITE_UTF8, 0, lowerFunc }, 969 { "coalesce", -1, 0, SQLITE_UTF8, 0, ifnullFunc }, 970 { "coalesce", 0, 0, SQLITE_UTF8, 0, 0 }, 971 { "coalesce", 1, 0, SQLITE_UTF8, 0, 0 }, 972 { "ifnull", 2, 0, SQLITE_UTF8, 1, ifnullFunc }, 973 { "random", -1, 0, SQLITE_UTF8, 0, randomFunc }, 974 { "like", 2, 0, SQLITE_UTF8, 0, likeFunc }, 975 { "like", 3, 0, SQLITE_UTF8, 0, likeFunc }, 976 { "glob", 2, 0, SQLITE_UTF8, 0, globFunc }, 977 { "nullif", 2, 0, SQLITE_UTF8, 1, nullifFunc }, 978 { "sqlite_version", 0, 0, SQLITE_UTF8, 0, versionFunc}, 979 { "quote", 1, 0, SQLITE_UTF8, 0, quoteFunc }, 980 { "last_insert_rowid", 0, 1, SQLITE_UTF8, 0, last_insert_rowid }, 981 { "changes", 0, 1, SQLITE_UTF8, 0, changes }, 982 { "total_changes", 0, 1, SQLITE_UTF8, 0, total_changes }, 983 #ifdef SQLITE_SOUNDEX 984 { "soundex", 1, 0, SQLITE_UTF8, 0, soundexFunc}, 985 #endif 986 #ifdef SQLITE_TEST 987 { "randstr", 2, 0, SQLITE_UTF8, 0, randStr }, 988 { "test_destructor", 1, 1, SQLITE_UTF8, 0, test_destructor}, 989 { "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count}, 990 { "test_auxdata", -1, 0, SQLITE_UTF8, 0, test_auxdata}, 991 { "test_error", 1, 0, SQLITE_UTF8, 0, test_error}, 992 #endif 993 }; 994 static const struct { 995 char *zName; 996 signed char nArg; 997 u8 argType; 998 u8 needCollSeq; 999 void (*xStep)(sqlite3_context*,int,sqlite3_value**); 1000 void (*xFinalize)(sqlite3_context*); 1001 } aAggs[] = { 1002 { "min", 1, 0, 1, minmaxStep, minMaxFinalize }, 1003 { "max", 1, 2, 1, minmaxStep, minMaxFinalize }, 1004 { "sum", 1, 0, 0, sumStep, sumFinalize }, 1005 { "avg", 1, 0, 0, sumStep, avgFinalize }, 1006 { "count", 0, 0, 0, countStep, countFinalize }, 1007 { "count", 1, 0, 0, countStep, countFinalize }, 1008 }; 1009 int i; 1010 1011 for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){ 1012 void *pArg = 0; 1013 switch( aFuncs[i].argType ){ 1014 case 1: pArg = db; break; 1015 case 2: pArg = (void *)(-1); break; 1016 } 1017 sqlite3_create_function(db, aFuncs[i].zName, aFuncs[i].nArg, 1018 aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0); 1019 if( aFuncs[i].needCollSeq ){ 1020 FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName, 1021 strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0); 1022 if( pFunc && aFuncs[i].needCollSeq ){ 1023 pFunc->needCollSeq = 1; 1024 } 1025 } 1026 } 1027 #ifndef SQLITE_OMIT_ALTERTABLE 1028 sqlite3AlterFunctions(db); 1029 #endif 1030 for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){ 1031 void *pArg = 0; 1032 switch( aAggs[i].argType ){ 1033 case 1: pArg = db; break; 1034 case 2: pArg = (void *)(-1); break; 1035 } 1036 sqlite3_create_function(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8, 1037 pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize); 1038 if( aAggs[i].needCollSeq ){ 1039 FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName, 1040 strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0); 1041 if( pFunc && aAggs[i].needCollSeq ){ 1042 pFunc->needCollSeq = 1; 1043 } 1044 } 1045 } 1046 sqlite3RegisterDateTimeFunctions(db); 1047 #ifdef SQLITE_SSE 1048 { 1049 sqlite3SseFunctions(db); 1050 } 1051 #endif 1052 } 1053