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.
19
** $Id: func.c,v 1.161 2007/06/22 15:21:16 danielk1977 Exp $
21
#include "sqliteInt.h"
23
/* #include <math.h> */
30
** Return the collating function associated with a function.
32
static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
33
return context->pColl;
37
** Implementation of the non-aggregate min() and max() functions
39
static void minmaxFunc(
40
sqlite3_context *context,
45
int mask; /* 0 for min() or 0xffffffff for max() */
50
mask = sqlite3_user_data(context)==0 ? 0 : -1;
51
pColl = sqlite3GetFuncCollSeq(context);
53
assert( mask==-1 || mask==0 );
55
if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
56
for(i=1; i<argc; i++){
57
if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
58
if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
62
sqlite3_result_value(context, argv[iBest]);
66
** Return the type of the argument.
68
static void typeofFunc(
69
sqlite3_context *context,
74
switch( sqlite3_value_type(argv[0]) ){
75
case SQLITE_NULL: z = "null"; break;
76
case SQLITE_INTEGER: z = "integer"; break;
77
case SQLITE_TEXT: z = "text"; break;
78
case SQLITE_FLOAT: z = "real"; break;
79
case SQLITE_BLOB: z = "blob"; break;
81
sqlite3_result_text(context, z, -1, SQLITE_STATIC);
86
** Implementation of the length() function
88
static void lengthFunc(
89
sqlite3_context *context,
96
switch( sqlite3_value_type(argv[0]) ){
100
sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
104
const unsigned char *z = sqlite3_value_text(argv[0]);
111
sqlite3_result_int(context, len);
115
sqlite3_result_null(context);
122
** Implementation of the abs() function
124
static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
126
switch( sqlite3_value_type(argv[0]) ){
127
case SQLITE_INTEGER: {
128
i64 iVal = sqlite3_value_int64(argv[0]);
131
sqlite3_result_error(context, "integer overflow", -1);
136
sqlite3_result_int64(context, iVal);
140
sqlite3_result_null(context);
144
double rVal = sqlite3_value_double(argv[0]);
145
if( rVal<0 ) rVal = -rVal;
146
sqlite3_result_double(context, rVal);
153
** Implementation of the substr() function.
155
** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
156
** p1 is 1-indexed. So substr(x,1,1) returns the first character
157
** of x. If x is text, then we actually count UTF-8 characters.
158
** If x is a blob, then we count bytes.
160
** If p1 is negative, then we begin abs(p1) from the end of x[].
162
static void substrFunc(
163
sqlite3_context *context,
167
const unsigned char *z;
168
const unsigned char *z2;
174
p0type = sqlite3_value_type(argv[0]);
175
if( p0type==SQLITE_BLOB ){
176
len = sqlite3_value_bytes(argv[0]);
177
z = sqlite3_value_blob(argv[0]);
179
assert( len==sqlite3_value_bytes(argv[0]) );
181
z = sqlite3_value_text(argv[0]);
184
for(z2=z; *z2; len++){
185
SQLITE_SKIP_UTF8(z2);
188
p1 = sqlite3_value_int(argv[1]);
189
p2 = sqlite3_value_int(argv[2]);
202
if( p0type!=SQLITE_BLOB ){
207
for(z2=z; *z2 && p2; p2--){
208
SQLITE_SKIP_UTF8(z2);
210
sqlite3_result_text(context, (char*)z, z2-z, SQLITE_TRANSIENT);
213
sqlite3_result_blob(context, (char*)&z[p1], p2, SQLITE_TRANSIENT);
218
** Implementation of the round() function
220
static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
223
char zBuf[500]; /* larger than the %f representation of the largest double */
224
assert( argc==1 || argc==2 );
226
if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
227
n = sqlite3_value_int(argv[1]);
231
if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
232
r = sqlite3_value_double(argv[0]);
233
sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r);
234
sqlite3AtoF(zBuf, &r);
235
sqlite3_result_double(context, r);
239
** Implementation of the upper() and lower() SQL functions.
241
static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
245
if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
246
z2 = (char*)sqlite3_value_text(argv[0]);
247
n = sqlite3_value_bytes(argv[0]);
248
/* Verify that the call to _bytes() does not invalidate the _text() pointer */
249
assert( z2==(char*)sqlite3_value_text(argv[0]) );
251
z1 = sqlite3_malloc(n+1);
254
for(i=0; z1[i]; i++){
255
z1[i] = toupper(z1[i]);
257
sqlite3_result_text(context, z1, -1, sqlite3_free);
261
static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
265
if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
266
z2 = (char*)sqlite3_value_text(argv[0]);
267
n = sqlite3_value_bytes(argv[0]);
268
/* Verify that the call to _bytes() does not invalidate the _text() pointer */
269
assert( z2==(char*)sqlite3_value_text(argv[0]) );
271
z1 = sqlite3_malloc(n+1);
274
for(i=0; z1[i]; i++){
275
z1[i] = tolower(z1[i]);
277
sqlite3_result_text(context, z1, -1, sqlite3_free);
283
** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
284
** All three do the same thing. They return the first non-NULL
287
static void ifnullFunc(
288
sqlite3_context *context,
293
for(i=0; i<argc; i++){
294
if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
295
sqlite3_result_value(context, argv[i]);
302
** Implementation of random(). Return a random integer.
304
static void randomFunc(
305
sqlite3_context *context,
310
sqlite3Randomness(sizeof(r), &r);
311
if( (r<<1)==0 ) r = 0; /* Prevent 0x8000.... as the result so that we */
312
/* can always do abs() of the result */
313
sqlite3_result_int64(context, r);
317
** Implementation of randomblob(N). Return a random blob
318
** that is N bytes long.
320
static void randomBlob(
321
sqlite3_context *context,
328
n = sqlite3_value_int(argv[0]);
332
if( n>SQLITE_MAX_LENGTH ){
333
sqlite3_result_error_toobig(context);
338
sqlite3Randomness(n, p);
339
sqlite3_result_blob(context, (char*)p, n, sqlite3FreeX);
344
** Implementation of the last_insert_rowid() SQL function. The return
345
** value is the same as the sqlite3_last_insert_rowid() API function.
347
static void last_insert_rowid(
348
sqlite3_context *context,
352
sqlite3 *db = sqlite3_user_data(context);
353
sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
357
** Implementation of the changes() SQL function. The return value is the
358
** same as the sqlite3_changes() API function.
361
sqlite3_context *context,
365
sqlite3 *db = sqlite3_user_data(context);
366
sqlite3_result_int(context, sqlite3_changes(db));
370
** Implementation of the total_changes() SQL function. The return value is
371
** the same as the sqlite3_total_changes() API function.
373
static void total_changes(
374
sqlite3_context *context,
378
sqlite3 *db = sqlite3_user_data(context);
379
sqlite3_result_int(context, sqlite3_total_changes(db));
383
** A structure defining how to do GLOB-style comparisons.
392
static const struct compareInfo globInfo = { '*', '?', '[', 0 };
393
/* The correct SQL-92 behavior is for the LIKE operator to ignore
394
** case. Thus 'a' LIKE 'A' would be true. */
395
static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
396
/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
397
** is case sensitive causing 'a' LIKE 'A' to be false */
398
static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
401
** Compare two UTF-8 strings for equality where the first string can
402
** potentially be a "glob" expression. Return true (1) if they
403
** are the same and false (0) if they are different.
407
** '*' Matches any sequence of zero or more characters.
409
** '?' Matches exactly one character.
411
** [...] Matches one character from the enclosed list of
414
** [^...] Matches one character not in the enclosed list.
416
** With the [...] and [^...] matching, a ']' character can be included
417
** in the list by making it the first character after '[' or '^'. A
418
** range of characters can be specified using '-'. Example:
419
** "[a-z]" matches any single lower-case letter. To match a '-', make
420
** it the last character in the list.
422
** This routine is usually quick, but can be N**2 in the worst case.
424
** Hints: to match '*' or '?', put them in "[]". Like this:
426
** abc[*]xyz Matches "abc*xyz" only
428
static int patternCompare(
429
const u8 *zPattern, /* The glob pattern */
430
const u8 *zString, /* The string to compare against the glob */
431
const struct compareInfo *pInfo, /* Information about how to do the compare */
432
const int esc /* The escape character */
437
u8 matchOne = pInfo->matchOne;
438
u8 matchAll = pInfo->matchAll;
439
u8 matchSet = pInfo->matchSet;
440
u8 noCase = pInfo->noCase;
442
int prevEscape = 0; /* True if the previous character was 'escape' */
444
while( (c = sqlite3Utf8Read(zPattern, 0, &zPattern))!=0 ){
445
if( !prevEscape && c==matchAll ){
446
while( (c=zPattern[0]) == matchAll || c == matchOne ){
448
c2 = sqlite3Utf8Read(zString, 0, &zString);
449
if( c2==0 ) return 0;
453
if( c && esc && sqlite3Utf8Read(zPattern, 0, &zNext)==esc ){
458
assert( esc==0 ); /* This is GLOB, not LIKE */
459
while( *zString && patternCompare(&zPattern[1],zString,pInfo,esc)==0 ){
460
SQLITE_SKIP_UTF8(zString);
464
while( (c2 = *zString)!=0 ){
466
c2 = sqlite3UpperToLower[c2];
467
c = sqlite3UpperToLower[c];
468
while( c2 != 0 && c2 != c ){ c2 = sqlite3UpperToLower[*++zString]; }
470
while( c2 != 0 && c2 != c ){ c2 = *++zString; }
472
if( c2==0 ) return 0;
473
if( patternCompare(&zPattern[1],zString,pInfo,esc) ) return 1;
474
SQLITE_SKIP_UTF8(zString);
478
}else if( !prevEscape && c==matchOne ){
479
if( *zString==0 ) return 0;
480
SQLITE_SKIP_UTF8(zString);
482
}else if( c==matchSet ){
484
assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
487
c = sqlite3Utf8Read(zString, 0, &zString);
490
if( c2=='^' ){ invert = 1; c2 = *++zPattern; }
492
if( c==']' ) seen = 1;
495
while( (c2 = sqlite3Utf8(zPattern,0,&zPattern))!=0 && c2!=']' ){
496
if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
497
c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
498
if( c>=prior_c && c<=c2 ) seen = 1;
507
if( c2==0 || (seen ^ invert)==0 ) return 0;
508
}else if( esc && !prevEscape && sqlite3Utf8Read(zPattern, 0, &zNext)==esc){
513
if( sqlite3UpperToLower[c] != sqlite3UpperToLower[*zString] ) return 0;
515
if( c != *zString ) return 0;
526
** Count the number of times that the LIKE operator (or GLOB which is
527
** just a variation of LIKE) gets called. This is used for testing
531
int sqlite3_like_count = 0;
536
** Implementation of the like() SQL function. This function implements
537
** the build-in LIKE operator. The first argument to the function is the
538
** pattern and the second argument is the string. So, the SQL statements:
542
** is implemented as like(B,A).
544
** This same function (with a different compareInfo structure) computes
545
** the GLOB operator.
547
static void likeFunc(
548
sqlite3_context *context,
552
const unsigned char *zA, *zB;
555
zB = sqlite3_value_text(argv[0]);
556
zA = sqlite3_value_text(argv[1]);
558
/* Limit the length of the LIKE or GLOB pattern to avoid problems
559
** of deep recursion and N*N behavior in patternCompare().
561
if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
562
sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
565
assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
568
/* The escape character string must consist of a single UTF-8 character.
569
** Otherwise, return an error.
571
const unsigned char *zEsc = sqlite3_value_text(argv[2]);
572
if( zEsc==0 ) return;
573
if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
574
sqlite3_result_error(context,
575
"ESCAPE expression must be a single character", -1);
578
escape = sqlite3ReadUtf8(zEsc);
581
struct compareInfo *pInfo = sqlite3_user_data(context);
583
sqlite3_like_count++;
586
sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
591
** Implementation of the NULLIF(x,y) function. The result is the first
592
** argument if the arguments are different. The result is NULL if the
593
** arguments are equal to each other.
595
static void nullifFunc(
596
sqlite3_context *context,
600
CollSeq *pColl = sqlite3GetFuncCollSeq(context);
601
if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
602
sqlite3_result_value(context, argv[0]);
607
** Implementation of the VERSION(*) function. The result is the version
608
** of the SQLite library that is running.
610
static void versionFunc(
611
sqlite3_context *context,
615
sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
618
/* Array for converting from half-bytes (nybbles) into ASCII hex
620
static const char hexdigits[] = {
621
'0', '1', '2', '3', '4', '5', '6', '7',
622
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
626
** EXPERIMENTAL - This is not an official function. The interface may
627
** change. This function may disappear. Do not write code that depends
630
** Implementation of the QUOTE() function. This function takes a single
631
** argument. If the argument is numeric, the return value is the same as
632
** the argument. If the argument is NULL, the return value is the string
633
** "NULL". Otherwise, the argument is enclosed in single quotes with
634
** single-quote escapes.
636
static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
638
switch( sqlite3_value_type(argv[0]) ){
640
sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
645
sqlite3_result_value(context, argv[0]);
650
char const *zBlob = sqlite3_value_blob(argv[0]);
651
int nBlob = sqlite3_value_bytes(argv[0]);
652
assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
654
if( 2*nBlob+4>SQLITE_MAX_LENGTH ){
655
sqlite3_result_error_toobig(context);
658
zText = (char *)sqliteMalloc((2*nBlob)+4);
660
sqlite3_result_error(context, "out of memory", -1);
663
for(i=0; i<nBlob; i++){
664
zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
665
zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
667
zText[(nBlob*2)+2] = '\'';
668
zText[(nBlob*2)+3] = '\0';
671
sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
679
const unsigned char *zArg = sqlite3_value_text(argv[0]);
682
if( zArg==0 ) return;
683
for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
684
if( i+n+3>SQLITE_MAX_LENGTH ){
685
sqlite3_result_error_toobig(context);
688
z = sqliteMalloc( i+n+3 );
691
for(i=0, j=1; zArg[i]; i++){
699
sqlite3_result_text(context, z, j, SQLITE_TRANSIENT);
706
** The hex() function. Interpret the argument as a blob. Return
707
** a hexadecimal rendering as text.
710
sqlite3_context *context,
715
const unsigned char *pBlob;
718
pBlob = sqlite3_value_blob(argv[0]);
719
n = sqlite3_value_bytes(argv[0]);
720
if( n*2+1>SQLITE_MAX_LENGTH ){
721
sqlite3_result_error_toobig(context);
724
assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
725
z = zHex = sqlite3_malloc(n*2 + 1);
726
if( zHex==0 ) return;
727
for(i=0; i<n; i++, pBlob++){
728
unsigned char c = *pBlob;
729
*(z++) = hexdigits[(c>>4)&0xf];
730
*(z++) = hexdigits[c&0xf];
733
sqlite3_result_text(context, zHex, n*2, sqlite3_free);
737
** The zeroblob(N) function returns a zero-filled blob of size N bytes.
739
static void zeroblobFunc(
740
sqlite3_context *context,
746
n = sqlite3_value_int64(argv[0]);
747
if( n>SQLITE_MAX_LENGTH ){
748
sqlite3_result_error_toobig(context);
750
sqlite3_result_zeroblob(context, n);
755
** The replace() function. Three arguments are all strings: call
756
** them A, B, and C. The result is also a string which is derived
757
** from A by replacing every occurance of B with C. The match
758
** must be exact. Collating sequences are not used.
760
static void replaceFunc(
761
sqlite3_context *context,
765
const unsigned char *zStr; /* The input string A */
766
const unsigned char *zPattern; /* The pattern string B */
767
const unsigned char *zRep; /* The replacement string C */
768
unsigned char *zOut; /* The output */
769
int nStr; /* Size of zStr */
770
int nPattern; /* Size of zPattern */
771
int nRep; /* Size of zRep */
772
i64 nOut; /* Maximum size of zOut */
773
int loopLimit; /* Last zStr[] that might match zPattern[] */
774
int i, j; /* Loop counters */
777
zStr = sqlite3_value_text(argv[0]);
778
if( zStr==0 ) return;
779
nStr = sqlite3_value_bytes(argv[0]);
780
assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
781
zPattern = sqlite3_value_text(argv[1]);
782
if( zPattern==0 || zPattern[0]==0 ) return;
783
nPattern = sqlite3_value_bytes(argv[1]);
784
assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
785
zRep = sqlite3_value_text(argv[2]);
786
if( zRep==0 ) return;
787
nRep = sqlite3_value_bytes(argv[2]);
788
assert( zRep==sqlite3_value_text(argv[2]) );
790
assert( nOut<SQLITE_MAX_LENGTH );
791
zOut = sqlite3_malloc((int)nOut);
795
loopLimit = nStr - nPattern;
796
for(i=j=0; i<=loopLimit; i++){
797
if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
800
nOut += nRep - nPattern;
801
if( nOut>=SQLITE_MAX_LENGTH ){
802
sqlite3_result_error_toobig(context);
806
zOut = sqlite3_realloc(zOut, (int)nOut);
810
memcpy(&zOut[j], zRep, nRep);
815
assert( j+nStr-i+1==nOut );
816
memcpy(&zOut[j], &zStr[i], nStr-i);
820
sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
824
** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
825
** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
827
static void trimFunc(
828
sqlite3_context *context,
832
const unsigned char *zIn; /* Input string */
833
const unsigned char *zCharSet; /* Set of characters to trim */
834
int nIn; /* Number of bytes in input */
835
int flags; /* 1: trimleft 2: trimright 3: trim */
836
int i; /* Loop counter */
837
unsigned char *aLen; /* Length of each character in zCharSet */
838
const unsigned char **azChar; /* Individual characters in zCharSet */
839
int nChar; /* Number of characters in zCharSet */
841
if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
844
zIn = sqlite3_value_text(argv[0]);
846
nIn = sqlite3_value_bytes(argv[0]);
847
assert( zIn==sqlite3_value_text(argv[0]) );
849
static const unsigned char lenOne[] = { 1 };
850
static const unsigned char *azOne[] = { (u8*)" " };
855
}else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
858
const unsigned char *z;
859
for(z=zCharSet, nChar=0; *z; nChar++){
863
azChar = sqlite3_malloc( nChar*(sizeof(char*)+1) );
867
aLen = (unsigned char*)&azChar[nChar];
868
for(z=zCharSet, nChar=0; *z; nChar++){
871
aLen[nChar] = z - azChar[nChar];
876
flags = (int)sqlite3_user_data(context);
880
for(i=0; i<nChar; i++){
882
if( memcmp(zIn, azChar[i], len)==0 ) break;
884
if( i>=nChar ) break;
892
for(i=0; i<nChar; i++){
894
if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
896
if( i>=nChar ) break;
901
sqlite3_free(azChar);
904
sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
907
#ifdef SQLITE_SOUNDEX
909
** Compute the soundex encoding of a word.
911
static void soundexFunc(
912
sqlite3_context *context,
919
static const unsigned char iCode[] = {
920
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
921
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
922
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
923
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
924
0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
925
1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
926
0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
927
1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
930
zIn = (u8*)sqlite3_value_text(argv[0]);
931
if( zIn==0 ) zIn = (u8*)"";
932
for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
934
u8 prevcode = iCode[zIn[i]&0x7f];
935
zResult[0] = toupper(zIn[i]);
936
for(j=1; j<4 && zIn[i]; i++){
937
int code = iCode[zIn[i]&0x7f];
939
if( code!=prevcode ){
941
zResult[j++] = code + '0';
951
sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
953
sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
958
#ifndef SQLITE_OMIT_LOAD_EXTENSION
960
** A function that loads a shared-library extension then returns NULL.
962
static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
963
const char *zFile = (const char *)sqlite3_value_text(argv[0]);
965
sqlite3 *db = sqlite3_user_data(context);
969
zProc = (const char *)sqlite3_value_text(argv[1]);
973
if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
974
sqlite3_result_error(context, zErrMsg, -1);
975
sqlite3_free(zErrMsg);
982
** This function generates a string of random characters. Used for
983
** generating test data.
985
static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){
986
static const unsigned char zSrc[] =
987
"abcdefghijklmnopqrstuvwxyz"
988
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
991
int iMin, iMax, n, r, i;
992
unsigned char zBuf[1000];
994
iMin = sqlite3_value_int(argv[0]);
995
if( iMin<0 ) iMin = 0;
996
if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
1001
iMax = sqlite3_value_int(argv[1]);
1002
if( iMax<iMin ) iMax = iMin;
1003
if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
1009
sqlite3Randomness(sizeof(r), &r);
1011
n += r%(iMax + 1 - iMin);
1013
assert( n<sizeof(zBuf) );
1014
sqlite3Randomness(n, zBuf);
1016
zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
1019
sqlite3_result_text(context, (char*)zBuf, n, SQLITE_TRANSIENT);
1021
#endif /* SQLITE_TEST */
1025
** The following two SQL functions are used to test returning a text
1026
** result with a destructor. Function 'test_destructor' takes one argument
1027
** and returns the same argument interpreted as TEXT. A destructor is
1028
** passed with the sqlite3_result_text() call.
1030
** SQL function 'test_destructor_count' returns the number of outstanding
1031
** allocations made by 'test_destructor';
1033
** WARNING: Not threadsafe.
1035
static int test_destructor_count_var = 0;
1036
static void destructor(void *p){
1037
char *zVal = (char *)p;
1041
test_destructor_count_var--;
1043
static void test_destructor(
1044
sqlite3_context *pCtx,
1046
sqlite3_value **argv
1050
sqlite3 *db = sqlite3_user_data(pCtx);
1052
test_destructor_count_var++;
1054
if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1055
len = sqlite3ValueBytes(argv[0], ENC(db));
1056
zVal = sqliteMalloc(len+3);
1061
memcpy(zVal, sqlite3ValueText(argv[0], ENC(db)), len);
1062
if( ENC(db)==SQLITE_UTF8 ){
1063
sqlite3_result_text(pCtx, zVal, -1, destructor);
1064
#ifndef SQLITE_OMIT_UTF16
1065
}else if( ENC(db)==SQLITE_UTF16LE ){
1066
sqlite3_result_text16le(pCtx, zVal, -1, destructor);
1068
sqlite3_result_text16be(pCtx, zVal, -1, destructor);
1069
#endif /* SQLITE_OMIT_UTF16 */
1072
static void test_destructor_count(
1073
sqlite3_context *pCtx,
1075
sqlite3_value **argv
1077
sqlite3_result_int(pCtx, test_destructor_count_var);
1079
#endif /* SQLITE_TEST */
1083
** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata()
1086
** The test_auxdata() SQL function attempts to register each of its arguments
1087
** as auxiliary data. If there are no prior registrations of aux data for
1088
** that argument (meaning the argument is not a constant or this is its first
1089
** call) then the result for that argument is 0. If there is a prior
1090
** registration, the result for that argument is 1. The overall result
1091
** is the individual argument results separated by spaces.
1093
static void free_test_auxdata(void *p) {sqliteFree(p);}
1094
static void test_auxdata(
1095
sqlite3_context *pCtx,
1097
sqlite3_value **argv
1100
char *zRet = sqliteMalloc(nArg*2);
1102
for(i=0; i<nArg; i++){
1103
char const *z = (char*)sqlite3_value_text(argv[i]);
1105
char *zAux = sqlite3_get_auxdata(pCtx, i);
1108
if( strcmp(zAux, z) ){
1109
sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
1114
zAux = sqliteStrDup(z);
1115
sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata);
1120
sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata);
1122
#endif /* SQLITE_TEST */
1126
** A function to test error reporting from user functions. This function
1127
** returns a copy of it's first argument as an error.
1129
static void test_error(
1130
sqlite3_context *pCtx,
1132
sqlite3_value **argv
1134
sqlite3_result_error(pCtx, (char*)sqlite3_value_text(argv[0]), 0);
1136
#endif /* SQLITE_TEST */
1139
** An instance of the following structure holds the context of a
1140
** sum() or avg() aggregate computation.
1142
typedef struct SumCtx SumCtx;
1144
double rSum; /* Floating point sum */
1145
i64 iSum; /* Integer sum */
1146
i64 cnt; /* Number of elements summed */
1147
u8 overflow; /* True if integer overflow seen */
1148
u8 approx; /* True if non-integer value was input to the sum */
1152
** Routines used to compute the sum, average, and total.
1154
** The SUM() function follows the (broken) SQL standard which means
1155
** that it returns NULL if it sums over no inputs. TOTAL returns
1156
** 0.0 in that case. In addition, TOTAL always returns a float where
1157
** SUM might return an integer if it never encounters a floating point
1158
** value. TOTAL never fails, but SUM might through an exception if
1159
** it overflows an integer.
1161
static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1165
p = sqlite3_aggregate_context(context, sizeof(*p));
1166
type = sqlite3_value_numeric_type(argv[0]);
1167
if( p && type!=SQLITE_NULL ){
1169
if( type==SQLITE_INTEGER ){
1170
i64 v = sqlite3_value_int64(argv[0]);
1172
if( (p->approx|p->overflow)==0 ){
1173
i64 iNewSum = p->iSum + v;
1174
int s1 = p->iSum >> (sizeof(i64)*8-1);
1175
int s2 = v >> (sizeof(i64)*8-1);
1176
int s3 = iNewSum >> (sizeof(i64)*8-1);
1177
p->overflow = (s1&s2&~s3) | (~s1&~s2&s3);
1181
p->rSum += sqlite3_value_double(argv[0]);
1186
static void sumFinalize(sqlite3_context *context){
1188
p = sqlite3_aggregate_context(context, 0);
1189
if( p && p->cnt>0 ){
1191
sqlite3_result_error(context,"integer overflow",-1);
1192
}else if( p->approx ){
1193
sqlite3_result_double(context, p->rSum);
1195
sqlite3_result_int64(context, p->iSum);
1199
static void avgFinalize(sqlite3_context *context){
1201
p = sqlite3_aggregate_context(context, 0);
1202
if( p && p->cnt>0 ){
1203
sqlite3_result_double(context, p->rSum/(double)p->cnt);
1206
static void totalFinalize(sqlite3_context *context){
1208
p = sqlite3_aggregate_context(context, 0);
1209
sqlite3_result_double(context, p ? p->rSum : 0.0);
1213
** The following structure keeps track of state information for the
1214
** count() aggregate function.
1216
typedef struct CountCtx CountCtx;
1222
** Routines to implement the count() aggregate function.
1224
static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1226
p = sqlite3_aggregate_context(context, sizeof(*p));
1227
if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
1231
static void countFinalize(sqlite3_context *context){
1233
p = sqlite3_aggregate_context(context, 0);
1234
sqlite3_result_int64(context, p ? p->n : 0);
1238
** Routines to implement min() and max() aggregate functions.
1240
static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){
1241
Mem *pArg = (Mem *)argv[0];
1244
if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1245
pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
1246
if( !pBest ) return;
1251
CollSeq *pColl = sqlite3GetFuncCollSeq(context);
1252
/* This step function is used for both the min() and max() aggregates,
1253
** the only difference between the two being that the sense of the
1254
** comparison is inverted. For the max() aggregate, the
1255
** sqlite3_user_data() function returns (void *)-1. For min() it
1256
** returns (void *)db, where db is the sqlite3* database pointer.
1257
** Therefore the next statement sets variable 'max' to 1 for the max()
1258
** aggregate, or 0 for min().
1260
max = sqlite3_user_data(context)!=0;
1261
cmp = sqlite3MemCompare(pBest, pArg, pColl);
1262
if( (max && cmp<0) || (!max && cmp>0) ){
1263
sqlite3VdbeMemCopy(pBest, pArg);
1266
sqlite3VdbeMemCopy(pBest, pArg);
1269
static void minMaxFinalize(sqlite3_context *context){
1270
sqlite3_value *pRes;
1271
pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1274
sqlite3_result_value(context, pRes);
1276
sqlite3VdbeMemRelease(pRes);
1282
** This function registered all of the above C functions as SQL
1283
** functions. This should be the only routine in this file with
1284
** external linkage.
1286
void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
1287
static const struct {
1290
u8 argType; /* ff: db 1: 0, 2: 1, 3: 2,... N: N-1. */
1291
u8 eTextRep; /* 1: UTF-16. 0: UTF-8 */
1293
void (*xFunc)(sqlite3_context*,int,sqlite3_value **);
1295
{ "min", -1, 0, SQLITE_UTF8, 1, minmaxFunc },
1296
{ "min", 0, 0, SQLITE_UTF8, 1, 0 },
1297
{ "max", -1, 1, SQLITE_UTF8, 1, minmaxFunc },
1298
{ "max", 0, 1, SQLITE_UTF8, 1, 0 },
1299
{ "typeof", 1, 0, SQLITE_UTF8, 0, typeofFunc },
1300
{ "length", 1, 0, SQLITE_UTF8, 0, lengthFunc },
1301
{ "substr", 3, 0, SQLITE_UTF8, 0, substrFunc },
1302
{ "abs", 1, 0, SQLITE_UTF8, 0, absFunc },
1303
{ "round", 1, 0, SQLITE_UTF8, 0, roundFunc },
1304
{ "round", 2, 0, SQLITE_UTF8, 0, roundFunc },
1305
{ "upper", 1, 0, SQLITE_UTF8, 0, upperFunc },
1306
{ "lower", 1, 0, SQLITE_UTF8, 0, lowerFunc },
1307
{ "coalesce", -1, 0, SQLITE_UTF8, 0, ifnullFunc },
1308
{ "coalesce", 0, 0, SQLITE_UTF8, 0, 0 },
1309
{ "coalesce", 1, 0, SQLITE_UTF8, 0, 0 },
1310
{ "hex", 1, 0, SQLITE_UTF8, 0, hexFunc },
1311
{ "ifnull", 2, 0, SQLITE_UTF8, 1, ifnullFunc },
1312
{ "random", -1, 0, SQLITE_UTF8, 0, randomFunc },
1313
{ "randomblob", 1, 0, SQLITE_UTF8, 0, randomBlob },
1314
{ "nullif", 2, 0, SQLITE_UTF8, 1, nullifFunc },
1315
{ "sqlite_version", 0, 0, SQLITE_UTF8, 0, versionFunc},
1316
{ "quote", 1, 0, SQLITE_UTF8, 0, quoteFunc },
1317
{ "last_insert_rowid", 0, 0xff, SQLITE_UTF8, 0, last_insert_rowid },
1318
{ "changes", 0, 0xff, SQLITE_UTF8, 0, changes },
1319
{ "total_changes", 0, 0xff, SQLITE_UTF8, 0, total_changes },
1320
{ "replace", 3, 0, SQLITE_UTF8, 0, replaceFunc },
1321
{ "ltrim", 1, 1, SQLITE_UTF8, 0, trimFunc },
1322
{ "ltrim", 2, 1, SQLITE_UTF8, 0, trimFunc },
1323
{ "rtrim", 1, 2, SQLITE_UTF8, 0, trimFunc },
1324
{ "rtrim", 2, 2, SQLITE_UTF8, 0, trimFunc },
1325
{ "trim", 1, 3, SQLITE_UTF8, 0, trimFunc },
1326
{ "trim", 2, 3, SQLITE_UTF8, 0, trimFunc },
1327
{ "zeroblob", 1, 0, SQLITE_UTF8, 0, zeroblobFunc },
1328
#ifdef SQLITE_SOUNDEX
1329
{ "soundex", 1, 0, SQLITE_UTF8, 0, soundexFunc},
1331
#ifndef SQLITE_OMIT_LOAD_EXTENSION
1332
{ "load_extension", 1, 0xff, SQLITE_UTF8, 0, loadExt },
1333
{ "load_extension", 2, 0xff, SQLITE_UTF8, 0, loadExt },
1336
{ "randstr", 2, 0, SQLITE_UTF8, 0, randStr },
1337
{ "test_destructor", 1, 0xff, SQLITE_UTF8, 0, test_destructor},
1338
{ "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count},
1339
{ "test_auxdata", -1, 0, SQLITE_UTF8, 0, test_auxdata},
1340
{ "test_error", 1, 0, SQLITE_UTF8, 0, test_error},
1343
static const struct {
1348
void (*xStep)(sqlite3_context*,int,sqlite3_value**);
1349
void (*xFinalize)(sqlite3_context*);
1351
{ "min", 1, 0, 1, minmaxStep, minMaxFinalize },
1352
{ "max", 1, 1, 1, minmaxStep, minMaxFinalize },
1353
{ "sum", 1, 0, 0, sumStep, sumFinalize },
1354
{ "total", 1, 0, 0, sumStep, totalFinalize },
1355
{ "avg", 1, 0, 0, sumStep, avgFinalize },
1356
{ "count", 0, 0, 0, countStep, countFinalize },
1357
{ "count", 1, 0, 0, countStep, countFinalize },
1361
for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
1363
u8 argType = aFuncs[i].argType;
1364
if( argType==0xff ){
1367
pArg = (void*)(int)argType;
1369
sqlite3CreateFunc(db, aFuncs[i].zName, aFuncs[i].nArg,
1370
aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0);
1371
if( aFuncs[i].needCollSeq ){
1372
FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName,
1373
strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0);
1374
if( pFunc && aFuncs[i].needCollSeq ){
1375
pFunc->needCollSeq = 1;
1379
#ifndef SQLITE_OMIT_ALTERTABLE
1380
sqlite3AlterFunctions(db);
1382
#ifndef SQLITE_OMIT_PARSER
1383
sqlite3AttachFunctions(db);
1385
for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
1386
void *pArg = (void*)(int)aAggs[i].argType;
1387
sqlite3CreateFunc(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8,
1388
pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize);
1389
if( aAggs[i].needCollSeq ){
1390
FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName,
1391
strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0);
1392
if( pFunc && aAggs[i].needCollSeq ){
1393
pFunc->needCollSeq = 1;
1397
sqlite3RegisterDateTimeFunctions(db);
1398
if( !sqlite3MallocFailed() ){
1399
int rc = sqlite3_overload_function(db, "MATCH", 2);
1400
assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1401
if( rc==SQLITE_NOMEM ){
1402
sqlite3FailedMalloc();
1406
(void)sqlite3SseFunctions(db);
1408
#ifdef SQLITE_CASE_SENSITIVE_LIKE
1409
sqlite3RegisterLikeFunctions(db, 1);
1411
sqlite3RegisterLikeFunctions(db, 0);
1416
** Set the LIKEOPT flag on the 2-argument function with the given name.
1418
static void setLikeOptFlag(sqlite3 *db, const char *zName, int flagVal){
1420
pDef = sqlite3FindFunction(db, zName, strlen(zName), 2, SQLITE_UTF8, 0);
1422
pDef->flags = flagVal;
1427
** Register the built-in LIKE and GLOB functions. The caseSensitive
1428
** parameter determines whether or not the LIKE operator is case
1429
** sensitive. GLOB is always case sensitive.
1431
void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1432
struct compareInfo *pInfo;
1433
if( caseSensitive ){
1434
pInfo = (struct compareInfo*)&likeInfoAlt;
1436
pInfo = (struct compareInfo*)&likeInfoNorm;
1438
sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1439
sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1440
sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
1441
(struct compareInfo*)&globInfo, likeFunc, 0,0);
1442
setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1443
setLikeOptFlag(db, "like",
1444
caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
1448
** pExpr points to an expression which implements a function. If
1449
** it is appropriate to apply the LIKE optimization to that function
1450
** then set aWc[0] through aWc[2] to the wildcard characters and
1451
** return TRUE. If the function is not a LIKE-style function then
1454
int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
1456
if( pExpr->op!=TK_FUNCTION || !pExpr->pList ){
1459
if( pExpr->pList->nExpr!=2 ){
1462
pDef = sqlite3FindFunction(db, (char*)pExpr->token.z, pExpr->token.n, 2,
1464
if( pDef==0 || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
1468
/* The memcpy() statement assumes that the wildcard characters are
1469
** the first three statements in the compareInfo structure. The
1470
** asserts() that follow verify that assumption
1472
memcpy(aWc, pDef->pUserData, 3);
1473
assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1474
assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1475
assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
1476
*pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;