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