fixed a compat regression, forgot msvc does funky things with overloaded virtual calls
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
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.
11 *************************************************************************
12 ** This file contains the C functions that implement various SQL
13 ** functions of SQLite.
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.
21 #include "sqliteInt.h"
29 ** Return the collating function associated with a function.
31 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
32 return context->pColl;
36 ** Implementation of the non-aggregate min() and max() functions
38 static void minmaxFunc(
39 sqlite3_context *context,
44 int mask; /* 0 for min() or 0xffffffff for max() */
49 mask = sqlite3_user_data(context)==0 ? 0 : -1;
50 pColl = sqlite3GetFuncCollSeq(context);
52 assert( mask==-1 || mask==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 ){
61 sqlite3_result_value(context, argv[iBest]);
65 ** Return the type of the argument.
67 static void typeofFunc(
68 sqlite3_context *context,
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;
80 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
85 ** Implementation of the length() function
87 static void lengthFunc(
88 sqlite3_context *context,
95 switch( sqlite3_value_type(argv[0]) ){
99 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
103 const unsigned char *z = sqlite3_value_text(argv[0]);
110 sqlite3_result_int(context, len);
114 sqlite3_result_null(context);
121 ** Implementation of the abs() function
123 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
125 switch( sqlite3_value_type(argv[0]) ){
126 case SQLITE_INTEGER: {
127 i64 iVal = sqlite3_value_int64(argv[0]);
130 sqlite3_result_error(context, "integer overflow", -1);
135 sqlite3_result_int64(context, iVal);
139 sqlite3_result_null(context);
143 double rVal = sqlite3_value_double(argv[0]);
144 if( rVal<0 ) rVal = -rVal;
145 sqlite3_result_double(context, rVal);
152 ** Implementation of the substr() function.
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.
159 ** If p1 is negative, then we begin abs(p1) from the end of x[].
161 static void substrFunc(
162 sqlite3_context *context,
166 const unsigned char *z;
167 const unsigned char *z2;
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]);
178 assert( len==sqlite3_value_bytes(argv[0]) );
180 z = sqlite3_value_text(argv[0]);
183 for(z2=z; *z2; len++){
184 SQLITE_SKIP_UTF8(z2);
187 p1 = sqlite3_value_int(argv[1]);
188 p2 = sqlite3_value_int(argv[2]);
201 if( p0type!=SQLITE_BLOB ){
206 for(z2=z; *z2 && p2; p2--){
207 SQLITE_SKIP_UTF8(z2);
209 sqlite3_result_text(context, (char*)z, z2-z, SQLITE_TRANSIENT);
212 sqlite3_result_blob(context, (char*)&z[p1], p2, SQLITE_TRANSIENT);
217 ** Implementation of the round() function
219 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
222 char zBuf[500]; /* larger than the %f representation of the largest double */
223 assert( argc==1 || argc==2 );
225 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
226 n = sqlite3_value_int(argv[1]);
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);
238 ** Allocate nByte bytes of space using sqlite3_malloc(). If the
239 ** allocation fails, call sqlite3_result_error_nomem() to notify
240 ** the database handle that malloc() has failed.
242 static void *contextMalloc(sqlite3_context *context, int nByte){
243 char *z = sqlite3_malloc(nByte);
245 sqlite3_result_error_nomem(context);
251 ** Implementation of the upper() and lower() SQL functions.
253 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
257 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
258 z2 = (char*)sqlite3_value_text(argv[0]);
259 n = sqlite3_value_bytes(argv[0]);
260 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
261 assert( z2==(char*)sqlite3_value_text(argv[0]) );
263 z1 = contextMalloc(context, n+1);
266 for(i=0; z1[i]; i++){
267 z1[i] = toupper(z1[i]);
269 sqlite3_result_text(context, z1, -1, sqlite3_free);
273 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
277 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
278 z2 = (char*)sqlite3_value_text(argv[0]);
279 n = sqlite3_value_bytes(argv[0]);
280 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
281 assert( z2==(char*)sqlite3_value_text(argv[0]) );
283 z1 = contextMalloc(context, n+1);
286 for(i=0; z1[i]; i++){
287 z1[i] = tolower(z1[i]);
289 sqlite3_result_text(context, z1, -1, sqlite3_free);
295 ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
296 ** All three do the same thing. They return the first non-NULL
299 static void ifnullFunc(
300 sqlite3_context *context,
305 for(i=0; i<argc; i++){
306 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
307 sqlite3_result_value(context, argv[i]);
314 ** Implementation of random(). Return a random integer.
316 static void randomFunc(
317 sqlite3_context *context,
322 sqlite3Randomness(sizeof(r), &r);
323 if( (r<<1)==0 ) r = 0; /* Prevent 0x8000.... as the result so that we */
324 /* can always do abs() of the result */
325 sqlite3_result_int64(context, r);
329 ** Implementation of randomblob(N). Return a random blob
330 ** that is N bytes long.
332 static void randomBlob(
333 sqlite3_context *context,
340 n = sqlite3_value_int(argv[0]);
344 if( n>SQLITE_MAX_LENGTH ){
345 sqlite3_result_error_toobig(context);
348 p = contextMalloc(context, n);
350 sqlite3Randomness(n, p);
351 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
356 ** Implementation of the last_insert_rowid() SQL function. The return
357 ** value is the same as the sqlite3_last_insert_rowid() API function.
359 static void last_insert_rowid(
360 sqlite3_context *context,
364 sqlite3 *db = sqlite3_user_data(context);
365 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
369 ** Implementation of the changes() SQL function. The return value is the
370 ** same as the sqlite3_changes() API function.
373 sqlite3_context *context,
377 sqlite3 *db = sqlite3_user_data(context);
378 sqlite3_result_int(context, sqlite3_changes(db));
382 ** Implementation of the total_changes() SQL function. The return value is
383 ** the same as the sqlite3_total_changes() API function.
385 static void total_changes(
386 sqlite3_context *context,
390 sqlite3 *db = sqlite3_user_data(context);
391 sqlite3_result_int(context, sqlite3_total_changes(db));
395 ** A structure defining how to do GLOB-style comparisons.
404 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
405 /* The correct SQL-92 behavior is for the LIKE operator to ignore
406 ** case. Thus 'a' LIKE 'A' would be true. */
407 static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
408 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
409 ** is case sensitive causing 'a' LIKE 'A' to be false */
410 static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
413 ** Compare two UTF-8 strings for equality where the first string can
414 ** potentially be a "glob" expression. Return true (1) if they
415 ** are the same and false (0) if they are different.
419 ** '*' Matches any sequence of zero or more characters.
421 ** '?' Matches exactly one character.
423 ** [...] Matches one character from the enclosed list of
426 ** [^...] Matches one character not in the enclosed list.
428 ** With the [...] and [^...] matching, a ']' character can be included
429 ** in the list by making it the first character after '[' or '^'. A
430 ** range of characters can be specified using '-'. Example:
431 ** "[a-z]" matches any single lower-case letter. To match a '-', make
432 ** it the last character in the list.
434 ** This routine is usually quick, but can be N**2 in the worst case.
436 ** Hints: to match '*' or '?', put them in "[]". Like this:
438 ** abc[*]xyz Matches "abc*xyz" only
440 static int patternCompare(
441 const u8 *zPattern, /* The glob pattern */
442 const u8 *zString, /* The string to compare against the glob */
443 const struct compareInfo *pInfo, /* Information about how to do the compare */
444 const int esc /* The escape character */
449 u8 matchOne = pInfo->matchOne;
450 u8 matchAll = pInfo->matchAll;
451 u8 matchSet = pInfo->matchSet;
452 u8 noCase = pInfo->noCase;
453 int prevEscape = 0; /* True if the previous character was 'escape' */
455 while( (c = sqlite3Utf8Read(zPattern,0,&zPattern))!=0 ){
456 if( !prevEscape && c==matchAll ){
457 while( (c=sqlite3Utf8Read(zPattern,0,&zPattern)) == matchAll
459 if( c==matchOne && sqlite3Utf8Read(zString, 0, &zString)==0 ){
466 c = sqlite3Utf8Read(zPattern, 0, &zPattern);
470 }else if( c==matchSet ){
471 assert( esc==0 ); /* This is GLOB, not LIKE */
472 assert( matchSet<0x80 ); /* '[' is a single-byte character */
473 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
474 SQLITE_SKIP_UTF8(zString);
478 while( (c2 = sqlite3Utf8Read(zString,0,&zString))!=0 ){
480 c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
481 c = c<0x80 ? sqlite3UpperToLower[c] : c;
482 while( c2 != 0 && c2 != c ){
483 c2 = sqlite3Utf8Read(zString, 0, &zString);
484 if( c2<0x80 ) c2 = sqlite3UpperToLower[c2];
487 while( c2 != 0 && c2 != c ){
488 c2 = sqlite3Utf8Read(zString, 0, &zString);
491 if( c2==0 ) return 0;
492 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
495 }else if( !prevEscape && c==matchOne ){
496 if( sqlite3Utf8Read(zString, 0, &zString)==0 ){
499 }else if( c==matchSet ){
501 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
504 c = sqlite3Utf8Read(zString, 0, &zString);
506 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
509 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
512 if( c==']' ) seen = 1;
513 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
515 while( c2 && c2!=']' ){
516 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
517 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
518 if( c>=prior_c && c<=c2 ) seen = 1;
526 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
528 if( c2==0 || (seen ^ invert)==0 ){
531 }else if( esc==c && !prevEscape ){
534 c2 = sqlite3Utf8Read(zString, 0, &zString);
536 c = c<0x80 ? sqlite3UpperToLower[c] : c;
537 c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
549 ** Count the number of times that the LIKE operator (or GLOB which is
550 ** just a variation of LIKE) gets called. This is used for testing
554 int sqlite3_like_count = 0;
559 ** Implementation of the like() SQL function. This function implements
560 ** the build-in LIKE operator. The first argument to the function is the
561 ** pattern and the second argument is the string. So, the SQL statements:
565 ** is implemented as like(B,A).
567 ** This same function (with a different compareInfo structure) computes
568 ** the GLOB operator.
570 static void likeFunc(
571 sqlite3_context *context,
575 const unsigned char *zA, *zB;
578 zB = sqlite3_value_text(argv[0]);
579 zA = sqlite3_value_text(argv[1]);
581 /* Limit the length of the LIKE or GLOB pattern to avoid problems
582 ** of deep recursion and N*N behavior in patternCompare().
584 if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
585 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
588 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
591 /* The escape character string must consist of a single UTF-8 character.
592 ** Otherwise, return an error.
594 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
595 if( zEsc==0 ) return;
596 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
597 sqlite3_result_error(context,
598 "ESCAPE expression must be a single character", -1);
601 escape = sqlite3Utf8Read(zEsc, 0, &zEsc);
604 struct compareInfo *pInfo = sqlite3_user_data(context);
606 sqlite3_like_count++;
609 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
614 ** Implementation of the NULLIF(x,y) function. The result is the first
615 ** argument if the arguments are different. The result is NULL if the
616 ** arguments are equal to each other.
618 static void nullifFunc(
619 sqlite3_context *context,
623 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
624 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
625 sqlite3_result_value(context, argv[0]);
630 ** Implementation of the VERSION(*) function. The result is the version
631 ** of the SQLite library that is running.
633 static void versionFunc(
634 sqlite3_context *context,
638 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
641 /* Array for converting from half-bytes (nybbles) into ASCII hex
643 static const char hexdigits[] = {
644 '0', '1', '2', '3', '4', '5', '6', '7',
645 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
649 ** EXPERIMENTAL - This is not an official function. The interface may
650 ** change. This function may disappear. Do not write code that depends
653 ** Implementation of the QUOTE() function. This function takes a single
654 ** argument. If the argument is numeric, the return value is the same as
655 ** the argument. If the argument is NULL, the return value is the string
656 ** "NULL". Otherwise, the argument is enclosed in single quotes with
657 ** single-quote escapes.
659 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
661 switch( sqlite3_value_type(argv[0]) ){
663 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
668 sqlite3_result_value(context, argv[0]);
673 char const *zBlob = sqlite3_value_blob(argv[0]);
674 int nBlob = sqlite3_value_bytes(argv[0]);
675 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
677 if( 2*nBlob+4>SQLITE_MAX_LENGTH ){
678 sqlite3_result_error_toobig(context);
681 zText = (char *)contextMalloc(context, (2*nBlob)+4);
684 for(i=0; i<nBlob; i++){
685 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
686 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
688 zText[(nBlob*2)+2] = '\'';
689 zText[(nBlob*2)+3] = '\0';
692 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
700 const unsigned char *zArg = sqlite3_value_text(argv[0]);
703 if( zArg==0 ) return;
704 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
705 if( i+n+3>SQLITE_MAX_LENGTH ){
706 sqlite3_result_error_toobig(context);
709 z = contextMalloc(context, i+n+3);
712 for(i=0, j=1; zArg[i]; i++){
720 sqlite3_result_text(context, z, j, sqlite3_free);
727 ** The hex() function. Interpret the argument as a blob. Return
728 ** a hexadecimal rendering as text.
731 sqlite3_context *context,
736 const unsigned char *pBlob;
739 pBlob = sqlite3_value_blob(argv[0]);
740 n = sqlite3_value_bytes(argv[0]);
741 if( n*2+1>SQLITE_MAX_LENGTH ){
742 sqlite3_result_error_toobig(context);
745 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
746 z = zHex = contextMalloc(context, n*2 + 1);
748 for(i=0; i<n; i++, pBlob++){
749 unsigned char c = *pBlob;
750 *(z++) = hexdigits[(c>>4)&0xf];
751 *(z++) = hexdigits[c&0xf];
754 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
759 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
761 static void zeroblobFunc(
762 sqlite3_context *context,
768 n = sqlite3_value_int64(argv[0]);
769 if( n>SQLITE_MAX_LENGTH ){
770 sqlite3_result_error_toobig(context);
772 sqlite3_result_zeroblob(context, n);
777 ** The replace() function. Three arguments are all strings: call
778 ** them A, B, and C. The result is also a string which is derived
779 ** from A by replacing every occurance of B with C. The match
780 ** must be exact. Collating sequences are not used.
782 static void replaceFunc(
783 sqlite3_context *context,
787 const unsigned char *zStr; /* The input string A */
788 const unsigned char *zPattern; /* The pattern string B */
789 const unsigned char *zRep; /* The replacement string C */
790 unsigned char *zOut; /* The output */
791 int nStr; /* Size of zStr */
792 int nPattern; /* Size of zPattern */
793 int nRep; /* Size of zRep */
794 i64 nOut; /* Maximum size of zOut */
795 int loopLimit; /* Last zStr[] that might match zPattern[] */
796 int i, j; /* Loop counters */
799 zStr = sqlite3_value_text(argv[0]);
800 if( zStr==0 ) return;
801 nStr = sqlite3_value_bytes(argv[0]);
802 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
803 zPattern = sqlite3_value_text(argv[1]);
804 if( zPattern==0 || zPattern[0]==0 ) return;
805 nPattern = sqlite3_value_bytes(argv[1]);
806 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
807 zRep = sqlite3_value_text(argv[2]);
808 if( zRep==0 ) return;
809 nRep = sqlite3_value_bytes(argv[2]);
810 assert( zRep==sqlite3_value_text(argv[2]) );
812 assert( nOut<SQLITE_MAX_LENGTH );
813 zOut = contextMalloc(context, (int)nOut);
817 loopLimit = nStr - nPattern;
818 for(i=j=0; i<=loopLimit; i++){
819 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
823 nOut += nRep - nPattern;
824 if( nOut>=SQLITE_MAX_LENGTH ){
825 sqlite3_result_error_toobig(context);
830 zOut = sqlite3_realloc(zOut, (int)nOut);
832 sqlite3_result_error_nomem(context);
836 memcpy(&zOut[j], zRep, nRep);
841 assert( j+nStr-i+1==nOut );
842 memcpy(&zOut[j], &zStr[i], nStr-i);
846 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
850 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
851 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
853 static void trimFunc(
854 sqlite3_context *context,
858 const unsigned char *zIn; /* Input string */
859 const unsigned char *zCharSet; /* Set of characters to trim */
860 int nIn; /* Number of bytes in input */
861 int flags; /* 1: trimleft 2: trimright 3: trim */
862 int i; /* Loop counter */
863 unsigned char *aLen; /* Length of each character in zCharSet */
864 const unsigned char **azChar; /* Individual characters in zCharSet */
865 int nChar; /* Number of characters in zCharSet */
867 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
870 zIn = sqlite3_value_text(argv[0]);
872 nIn = sqlite3_value_bytes(argv[0]);
873 assert( zIn==sqlite3_value_text(argv[0]) );
875 static const unsigned char lenOne[] = { 1 };
876 static const unsigned char *azOne[] = { (u8*)" " };
881 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
884 const unsigned char *z;
885 for(z=zCharSet, nChar=0; *z; nChar++){
889 azChar = contextMalloc(context, nChar*(sizeof(char*)+1));
893 aLen = (unsigned char*)&azChar[nChar];
894 for(z=zCharSet, nChar=0; *z; nChar++){
897 aLen[nChar] = z - azChar[nChar];
902 flags = (int)sqlite3_user_data(context);
906 for(i=0; i<nChar; i++){
908 if( memcmp(zIn, azChar[i], len)==0 ) break;
910 if( i>=nChar ) break;
918 for(i=0; i<nChar; i++){
920 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
922 if( i>=nChar ) break;
927 sqlite3_free(azChar);
930 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
933 #ifdef SQLITE_SOUNDEX
935 ** Compute the soundex encoding of a word.
937 static void soundexFunc(
938 sqlite3_context *context,
945 static const unsigned char iCode[] = {
946 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
947 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
949 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
950 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
951 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
952 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
953 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
956 zIn = (u8*)sqlite3_value_text(argv[0]);
957 if( zIn==0 ) zIn = (u8*)"";
958 for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
960 u8 prevcode = iCode[zIn[i]&0x7f];
961 zResult[0] = toupper(zIn[i]);
962 for(j=1; j<4 && zIn[i]; i++){
963 int code = iCode[zIn[i]&0x7f];
965 if( code!=prevcode ){
967 zResult[j++] = code + '0';
977 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
979 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
984 #ifndef SQLITE_OMIT_LOAD_EXTENSION
986 ** A function that loads a shared-library extension then returns NULL.
988 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
989 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
991 sqlite3 *db = sqlite3_user_data(context);
995 zProc = (const char *)sqlite3_value_text(argv[1]);
999 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
1000 sqlite3_result_error(context, zErrMsg, -1);
1001 sqlite3_free(zErrMsg);
1008 ** This function generates a string of random characters. Used for
1009 ** generating test data.
1011 static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){
1012 static const unsigned char zSrc[] =
1013 "abcdefghijklmnopqrstuvwxyz"
1014 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1017 int iMin, iMax, n, r, i;
1018 unsigned char zBuf[1000];
1020 /* It used to be possible to call randstr() with any number of arguments,
1021 ** but now it is registered with SQLite as requiring exactly 2.
1025 iMin = sqlite3_value_int(argv[0]);
1026 if( iMin<0 ) iMin = 0;
1027 if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
1028 iMax = sqlite3_value_int(argv[1]);
1029 if( iMax<iMin ) iMax = iMin;
1030 if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
1033 sqlite3Randomness(sizeof(r), &r);
1035 n += r%(iMax + 1 - iMin);
1037 assert( n<sizeof(zBuf) );
1038 sqlite3Randomness(n, zBuf);
1040 zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
1043 sqlite3_result_text(context, (char*)zBuf, n, SQLITE_TRANSIENT);
1045 #endif /* SQLITE_TEST */
1049 ** The following two SQL functions are used to test returning a text
1050 ** result with a destructor. Function 'test_destructor' takes one argument
1051 ** and returns the same argument interpreted as TEXT. A destructor is
1052 ** passed with the sqlite3_result_text() call.
1054 ** SQL function 'test_destructor_count' returns the number of outstanding
1055 ** allocations made by 'test_destructor';
1057 ** WARNING: Not threadsafe.
1059 static int test_destructor_count_var = 0;
1060 static void destructor(void *p){
1061 char *zVal = (char *)p;
1065 test_destructor_count_var--;
1067 static void test_destructor(
1068 sqlite3_context *pCtx,
1070 sqlite3_value **argv
1074 sqlite3 *db = sqlite3_user_data(pCtx);
1076 test_destructor_count_var++;
1078 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1079 len = sqlite3ValueBytes(argv[0], ENC(db));
1080 zVal = contextMalloc(pCtx, len+3);
1087 memcpy(zVal, sqlite3ValueText(argv[0], ENC(db)), len);
1088 if( ENC(db)==SQLITE_UTF8 ){
1089 sqlite3_result_text(pCtx, zVal, -1, destructor);
1090 #ifndef SQLITE_OMIT_UTF16
1091 }else if( ENC(db)==SQLITE_UTF16LE ){
1092 sqlite3_result_text16le(pCtx, zVal, -1, destructor);
1094 sqlite3_result_text16be(pCtx, zVal, -1, destructor);
1095 #endif /* SQLITE_OMIT_UTF16 */
1098 static void test_destructor_count(
1099 sqlite3_context *pCtx,
1101 sqlite3_value **argv
1103 sqlite3_result_int(pCtx, test_destructor_count_var);
1105 #endif /* SQLITE_TEST */
1109 ** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata()
1112 ** The test_auxdata() SQL function attempts to register each of its arguments
1113 ** as auxiliary data. If there are no prior registrations of aux data for
1114 ** that argument (meaning the argument is not a constant or this is its first
1115 ** call) then the result for that argument is 0. If there is a prior
1116 ** registration, the result for that argument is 1. The overall result
1117 ** is the individual argument results separated by spaces.
1119 static void free_test_auxdata(void *p) {sqlite3_free(p);}
1120 static void test_auxdata(
1121 sqlite3_context *pCtx,
1123 sqlite3_value **argv
1126 char *zRet = contextMalloc(pCtx, nArg*2);
1128 memset(zRet, 0, nArg*2);
1129 for(i=0; i<nArg; i++){
1130 char const *z = (char*)sqlite3_value_text(argv[i]);
1132 char *zAux = sqlite3_get_auxdata(pCtx, i);
1135 if( strcmp(zAux, z) ){
1136 sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
1143 zAux = contextMalloc(pCtx, strlen(z)+1);
1146 sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata);
1151 sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata);
1153 #endif /* SQLITE_TEST */
1157 ** A function to test error reporting from user functions. This function
1158 ** returns a copy of it's first argument as an error.
1160 static void test_error(
1161 sqlite3_context *pCtx,
1163 sqlite3_value **argv
1165 sqlite3_result_error(pCtx, (char*)sqlite3_value_text(argv[0]), 0);
1167 #endif /* SQLITE_TEST */
1170 ** An instance of the following structure holds the context of a
1171 ** sum() or avg() aggregate computation.
1173 typedef struct SumCtx SumCtx;
1175 double rSum; /* Floating point sum */
1176 i64 iSum; /* Integer sum */
1177 i64 cnt; /* Number of elements summed */
1178 u8 overflow; /* True if integer overflow seen */
1179 u8 approx; /* True if non-integer value was input to the sum */
1183 ** Routines used to compute the sum, average, and total.
1185 ** The SUM() function follows the (broken) SQL standard which means
1186 ** that it returns NULL if it sums over no inputs. TOTAL returns
1187 ** 0.0 in that case. In addition, TOTAL always returns a float where
1188 ** SUM might return an integer if it never encounters a floating point
1189 ** value. TOTAL never fails, but SUM might through an exception if
1190 ** it overflows an integer.
1192 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1196 p = sqlite3_aggregate_context(context, sizeof(*p));
1197 type = sqlite3_value_numeric_type(argv[0]);
1198 if( p && type!=SQLITE_NULL ){
1200 if( type==SQLITE_INTEGER ){
1201 i64 v = sqlite3_value_int64(argv[0]);
1203 if( (p->approx|p->overflow)==0 ){
1204 i64 iNewSum = p->iSum + v;
1205 int s1 = p->iSum >> (sizeof(i64)*8-1);
1206 int s2 = v >> (sizeof(i64)*8-1);
1207 int s3 = iNewSum >> (sizeof(i64)*8-1);
1208 p->overflow = (s1&s2&~s3) | (~s1&~s2&s3);
1212 p->rSum += sqlite3_value_double(argv[0]);
1217 static void sumFinalize(sqlite3_context *context){
1219 p = sqlite3_aggregate_context(context, 0);
1220 if( p && p->cnt>0 ){
1222 sqlite3_result_error(context,"integer overflow",-1);
1223 }else if( p->approx ){
1224 sqlite3_result_double(context, p->rSum);
1226 sqlite3_result_int64(context, p->iSum);
1230 static void avgFinalize(sqlite3_context *context){
1232 p = sqlite3_aggregate_context(context, 0);
1233 if( p && p->cnt>0 ){
1234 sqlite3_result_double(context, p->rSum/(double)p->cnt);
1237 static void totalFinalize(sqlite3_context *context){
1239 p = sqlite3_aggregate_context(context, 0);
1240 sqlite3_result_double(context, p ? p->rSum : 0.0);
1244 ** The following structure keeps track of state information for the
1245 ** count() aggregate function.
1247 typedef struct CountCtx CountCtx;
1253 ** Routines to implement the count() aggregate function.
1255 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1257 p = sqlite3_aggregate_context(context, sizeof(*p));
1258 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
1262 static void countFinalize(sqlite3_context *context){
1264 p = sqlite3_aggregate_context(context, 0);
1265 sqlite3_result_int64(context, p ? p->n : 0);
1269 ** Routines to implement min() and max() aggregate functions.
1271 static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1272 Mem *pArg = (Mem *)argv[0];
1275 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1276 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
1277 if( !pBest ) return;
1282 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
1283 /* This step function is used for both the min() and max() aggregates,
1284 ** the only difference between the two being that the sense of the
1285 ** comparison is inverted. For the max() aggregate, the
1286 ** sqlite3_user_data() function returns (void *)-1. For min() it
1287 ** returns (void *)db, where db is the sqlite3* database pointer.
1288 ** Therefore the next statement sets variable 'max' to 1 for the max()
1289 ** aggregate, or 0 for min().
1291 max = sqlite3_user_data(context)!=0;
1292 cmp = sqlite3MemCompare(pBest, pArg, pColl);
1293 if( (max && cmp<0) || (!max && cmp>0) ){
1294 sqlite3VdbeMemCopy(pBest, pArg);
1297 sqlite3VdbeMemCopy(pBest, pArg);
1300 static void minMaxFinalize(sqlite3_context *context){
1301 sqlite3_value *pRes;
1302 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1305 sqlite3_result_value(context, pRes);
1307 sqlite3VdbeMemRelease(pRes);
1313 ** This function registered all of the above C functions as SQL
1314 ** functions. This should be the only routine in this file with
1315 ** external linkage.
1317 void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
1318 static const struct {
1321 u8 argType; /* ff: db 1: 0, 2: 1, 3: 2,... N: N-1. */
1322 u8 eTextRep; /* 1: UTF-16. 0: UTF-8 */
1324 void (*xFunc)(sqlite3_context*,int,sqlite3_value **);
1326 { "min", -1, 0, SQLITE_UTF8, 1, minmaxFunc },
1327 { "min", 0, 0, SQLITE_UTF8, 1, 0 },
1328 { "max", -1, 1, SQLITE_UTF8, 1, minmaxFunc },
1329 { "max", 0, 1, SQLITE_UTF8, 1, 0 },
1330 { "typeof", 1, 0, SQLITE_UTF8, 0, typeofFunc },
1331 { "length", 1, 0, SQLITE_UTF8, 0, lengthFunc },
1332 { "substr", 3, 0, SQLITE_UTF8, 0, substrFunc },
1333 { "abs", 1, 0, SQLITE_UTF8, 0, absFunc },
1334 { "round", 1, 0, SQLITE_UTF8, 0, roundFunc },
1335 { "round", 2, 0, SQLITE_UTF8, 0, roundFunc },
1336 { "upper", 1, 0, SQLITE_UTF8, 0, upperFunc },
1337 { "lower", 1, 0, SQLITE_UTF8, 0, lowerFunc },
1338 { "coalesce", -1, 0, SQLITE_UTF8, 0, ifnullFunc },
1339 { "coalesce", 0, 0, SQLITE_UTF8, 0, 0 },
1340 { "coalesce", 1, 0, SQLITE_UTF8, 0, 0 },
1341 { "hex", 1, 0, SQLITE_UTF8, 0, hexFunc },
1342 { "ifnull", 2, 0, SQLITE_UTF8, 1, ifnullFunc },
1343 { "random", -1, 0, SQLITE_UTF8, 0, randomFunc },
1344 { "randomblob", 1, 0, SQLITE_UTF8, 0, randomBlob },
1345 { "nullif", 2, 0, SQLITE_UTF8, 1, nullifFunc },
1346 { "sqlite_version", 0, 0, SQLITE_UTF8, 0, versionFunc},
1347 { "quote", 1, 0, SQLITE_UTF8, 0, quoteFunc },
1348 { "last_insert_rowid", 0, 0xff, SQLITE_UTF8, 0, last_insert_rowid },
1349 { "changes", 0, 0xff, SQLITE_UTF8, 0, changes },
1350 { "total_changes", 0, 0xff, SQLITE_UTF8, 0, total_changes },
1351 { "replace", 3, 0, SQLITE_UTF8, 0, replaceFunc },
1352 { "ltrim", 1, 1, SQLITE_UTF8, 0, trimFunc },
1353 { "ltrim", 2, 1, SQLITE_UTF8, 0, trimFunc },
1354 { "rtrim", 1, 2, SQLITE_UTF8, 0, trimFunc },
1355 { "rtrim", 2, 2, SQLITE_UTF8, 0, trimFunc },
1356 { "trim", 1, 3, SQLITE_UTF8, 0, trimFunc },
1357 { "trim", 2, 3, SQLITE_UTF8, 0, trimFunc },
1358 { "zeroblob", 1, 0, SQLITE_UTF8, 0, zeroblobFunc },
1359 #ifdef SQLITE_SOUNDEX
1360 { "soundex", 1, 0, SQLITE_UTF8, 0, soundexFunc},
1362 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1363 { "load_extension", 1, 0xff, SQLITE_UTF8, 0, loadExt },
1364 { "load_extension", 2, 0xff, SQLITE_UTF8, 0, loadExt },
1367 { "randstr", 2, 0, SQLITE_UTF8, 0, randStr },
1368 { "test_destructor", 1, 0xff, SQLITE_UTF8, 0, test_destructor},
1369 { "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count},
1370 { "test_auxdata", -1, 0, SQLITE_UTF8, 0, test_auxdata},
1371 { "test_error", 1, 0, SQLITE_UTF8, 0, test_error},
1374 static const struct {
1379 void (*xStep)(sqlite3_context*,int,sqlite3_value**);
1380 void (*xFinalize)(sqlite3_context*);
1382 { "min", 1, 0, 1, minmaxStep, minMaxFinalize },
1383 { "max", 1, 1, 1, minmaxStep, minMaxFinalize },
1384 { "sum", 1, 0, 0, sumStep, sumFinalize },
1385 { "total", 1, 0, 0, sumStep, totalFinalize },
1386 { "avg", 1, 0, 0, sumStep, avgFinalize },
1387 { "count", 0, 0, 0, countStep, countFinalize },
1388 { "count", 1, 0, 0, countStep, countFinalize },
1392 for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
1394 u8 argType = aFuncs[i].argType;
1395 if( argType==0xff ){
1398 pArg = (void*)(int)argType;
1400 sqlite3CreateFunc(db, aFuncs[i].zName, aFuncs[i].nArg,
1401 aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0);
1402 if( aFuncs[i].needCollSeq ){
1403 FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName,
1404 strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0);
1405 if( pFunc && aFuncs[i].needCollSeq ){
1406 pFunc->needCollSeq = 1;
1410 #ifndef SQLITE_OMIT_ALTERTABLE
1411 sqlite3AlterFunctions(db);
1413 #ifndef SQLITE_OMIT_PARSER
1414 sqlite3AttachFunctions(db);
1416 for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
1417 void *pArg = (void*)(int)aAggs[i].argType;
1418 sqlite3CreateFunc(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8,
1419 pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize);
1420 if( aAggs[i].needCollSeq ){
1421 FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName,
1422 strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0);
1423 if( pFunc && aAggs[i].needCollSeq ){
1424 pFunc->needCollSeq = 1;
1428 sqlite3RegisterDateTimeFunctions(db);
1429 if( !db->mallocFailed ){
1430 int rc = sqlite3_overload_function(db, "MATCH", 2);
1431 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1432 if( rc==SQLITE_NOMEM ){
1433 db->mallocFailed = 1;
1437 (void)sqlite3SseFunctions(db);
1439 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1440 sqlite3RegisterLikeFunctions(db, 1);
1442 sqlite3RegisterLikeFunctions(db, 0);
1447 ** Set the LIKEOPT flag on the 2-argument function with the given name.
1449 static void setLikeOptFlag(sqlite3 *db, const char *zName, int flagVal){
1451 pDef = sqlite3FindFunction(db, zName, strlen(zName), 2, SQLITE_UTF8, 0);
1453 pDef->flags = flagVal;
1458 ** Register the built-in LIKE and GLOB functions. The caseSensitive
1459 ** parameter determines whether or not the LIKE operator is case
1460 ** sensitive. GLOB is always case sensitive.
1462 void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1463 struct compareInfo *pInfo;
1464 if( caseSensitive ){
1465 pInfo = (struct compareInfo*)&likeInfoAlt;
1467 pInfo = (struct compareInfo*)&likeInfoNorm;
1469 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1470 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1471 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
1472 (struct compareInfo*)&globInfo, likeFunc, 0,0);
1473 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1474 setLikeOptFlag(db, "like",
1475 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
1479 ** pExpr points to an expression which implements a function. If
1480 ** it is appropriate to apply the LIKE optimization to that function
1481 ** then set aWc[0] through aWc[2] to the wildcard characters and
1482 ** return TRUE. If the function is not a LIKE-style function then
1485 int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
1487 if( pExpr->op!=TK_FUNCTION || !pExpr->pList ){
1490 if( pExpr->pList->nExpr!=2 ){
1493 pDef = sqlite3FindFunction(db, (char*)pExpr->token.z, pExpr->token.n, 2,
1495 if( pDef==0 || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
1499 /* The memcpy() statement assumes that the wildcard characters are
1500 ** the first three statements in the compareInfo structure. The
1501 ** asserts() that follow verify that assumption
1503 memcpy(aWc, pDef->pUserData, 3);
1504 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1505 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1506 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
1507 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;