blob: 26cbfbfb0355d1bc0be58190fa91c876ef3706fc [file] [log] [blame]
drhdc04c582002-02-24 01:55:15 +00001/*
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.
drhdc04c582002-02-24 01:55:15 +000018*/
drhb659e9b2005-01-28 01:29:08 +000019#include "sqliteInt.h"
drhd3a149e2002-02-24 17:12:53 +000020#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000021#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000022#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000023
drh55ef4d92005-08-14 01:20:37 +000024/*
25** Return the collating function associated with a function.
26*/
danielk1977dc1bdc42004-06-11 10:51:27 +000027static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
28 return context->pColl;
29}
30
drh0bce8352002-02-28 00:41:10 +000031/*
drh7a957892012-02-02 17:35:43 +000032** Indicate that the accumulator load should be skipped on this
33** iteration of the aggregate loop.
34*/
35static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
36 context->skipFlag = 1;
37}
38
39/*
drh0bce8352002-02-28 00:41:10 +000040** Implementation of the non-aggregate min() and max() functions
41*/
drhf9b596e2004-05-26 16:54:42 +000042static void minmaxFunc(
43 sqlite3_context *context,
44 int argc,
45 sqlite3_value **argv
46){
drh0bce8352002-02-28 00:41:10 +000047 int i;
drh268380c2004-02-25 13:47:31 +000048 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000049 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000050 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000051
drh65595cd2009-02-02 16:32:55 +000052 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000053 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000054 pColl = sqlite3GetFuncCollSeq(context);
55 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000056 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000057 iBest = 0;
drh9c054832004-05-31 18:51:57 +000058 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000059 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000060 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000061 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000062 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000063 iBest = i;
drh0bce8352002-02-28 00:41:10 +000064 }
65 }
drhf4479502004-05-27 03:12:53 +000066 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000067}
drh0bce8352002-02-28 00:41:10 +000068
drh268380c2004-02-25 13:47:31 +000069/*
70** Return the type of the argument.
71*/
drhf9b596e2004-05-26 16:54:42 +000072static void typeofFunc(
73 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000074 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000075 sqlite3_value **argv
76){
danielk197735bb9d02004-05-24 12:55:54 +000077 const char *z = 0;
danielk197762c14b32008-11-19 09:05:26 +000078 UNUSED_PARAMETER(NotUsed);
danielk197735bb9d02004-05-24 12:55:54 +000079 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000080 case SQLITE_INTEGER: z = "integer"; break;
81 case SQLITE_TEXT: z = "text"; break;
82 case SQLITE_FLOAT: z = "real"; break;
83 case SQLITE_BLOB: z = "blob"; break;
drh65595cd2009-02-02 16:32:55 +000084 default: z = "null"; break;
danielk197735bb9d02004-05-24 12:55:54 +000085 }
danielk1977d8123362004-06-12 09:25:12 +000086 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000087}
88
drh5708d2d2005-06-22 10:53:59 +000089
90/*
drh0bce8352002-02-28 00:41:10 +000091** Implementation of the length() function
92*/
drhf9b596e2004-05-26 16:54:42 +000093static void lengthFunc(
94 sqlite3_context *context,
95 int argc,
96 sqlite3_value **argv
97){
drh0bce8352002-02-28 00:41:10 +000098 int len;
99
100 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000101 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000102 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000103 case SQLITE_BLOB:
104 case SQLITE_INTEGER:
105 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000106 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000107 break;
108 }
drh9c054832004-05-31 18:51:57 +0000109 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000110 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000111 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000112 len = 0;
113 while( *z ){
114 len++;
115 SQLITE_SKIP_UTF8(z);
116 }
drhf4479502004-05-27 03:12:53 +0000117 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000118 break;
119 }
120 default: {
121 sqlite3_result_null(context);
122 break;
123 }
124 }
drh0bce8352002-02-28 00:41:10 +0000125}
126
127/*
drh2ba3ccc2009-12-08 02:06:08 +0000128** Implementation of the abs() function.
129**
130** IMP: R-23979-26855 The abs(X) function returns the absolute value of
131** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000132*/
danielk19770ae8b832004-05-25 12:05:56 +0000133static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000134 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000135 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000136 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000137 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000138 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000139 if( iVal<0 ){
140 if( (iVal<<1)==0 ){
drh2ba3ccc2009-12-08 02:06:08 +0000141 /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then
142 ** abs(X) throws an integer overflow error since there is no
143 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000144 sqlite3_result_error(context, "integer overflow", -1);
145 return;
146 }
147 iVal = -iVal;
148 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000149 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000150 break;
151 }
drh9c054832004-05-31 18:51:57 +0000152 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000153 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000154 sqlite3_result_null(context);
155 break;
156 }
157 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000158 /* Because sqlite3_value_double() returns 0.0 if the argument is not
159 ** something that can be converted into a number, we have:
160 ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
161 ** cannot be converted to a numeric value.
162 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000163 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000164 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000165 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000166 break;
167 }
168 }
drh0bce8352002-02-28 00:41:10 +0000169}
170
171/*
drhd55e0722012-10-25 03:07:29 +0000172** Implementation of the instr() function.
173**
174** instr(haystack,needle) finds the first occurrence of needle
175** in haystack and returns the number of previous characters plus 1,
176** or 0 if needle does not occur within haystack.
177**
178** If both haystack and needle are BLOBs, then the result is one more than
179** the number of bytes in haystack prior to the first occurrence of needle,
180** or 0 if needle never occurs in haystack.
181*/
182static void instrFunc(
183 sqlite3_context *context,
184 int argc,
185 sqlite3_value **argv
186){
187 const unsigned char *zHaystack;
188 const unsigned char *zNeedle;
189 int nHaystack;
190 int nNeedle;
191 int typeHaystack, typeNeedle;
192 int N = 1;
193 int isText;
194
drh68c804b2012-12-04 11:03:11 +0000195 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000196 typeHaystack = sqlite3_value_type(argv[0]);
197 typeNeedle = sqlite3_value_type(argv[1]);
198 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
199 nHaystack = sqlite3_value_bytes(argv[0]);
200 nNeedle = sqlite3_value_bytes(argv[1]);
201 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
202 zHaystack = sqlite3_value_blob(argv[0]);
203 zNeedle = sqlite3_value_blob(argv[1]);
204 isText = 0;
205 }else{
206 zHaystack = sqlite3_value_text(argv[0]);
207 zNeedle = sqlite3_value_text(argv[1]);
208 isText = 1;
209 }
210 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
211 N++;
212 do{
213 nHaystack--;
214 zHaystack++;
215 }while( isText && (zHaystack[0]&0xc0)==0x80 );
216 }
217 if( nNeedle>nHaystack ) N = 0;
218 sqlite3_result_int(context, N);
219}
220
221/*
drhf764e6f2007-05-15 01:13:47 +0000222** Implementation of the substr() function.
223**
224** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
225** p1 is 1-indexed. So substr(x,1,1) returns the first character
226** of x. If x is text, then we actually count UTF-8 characters.
227** If x is a blob, then we count bytes.
228**
229** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000230**
drhf7b54962013-05-28 12:11:54 +0000231** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000232*/
drhf9b596e2004-05-26 16:54:42 +0000233static void substrFunc(
234 sqlite3_context *context,
235 int argc,
236 sqlite3_value **argv
237){
drh2646da72005-12-09 20:02:05 +0000238 const unsigned char *z;
239 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000240 int len;
drhf764e6f2007-05-15 01:13:47 +0000241 int p0type;
drh023ae032007-05-08 12:12:16 +0000242 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000243 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000244
drh64f31512007-10-12 19:11:55 +0000245 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000246 if( sqlite3_value_type(argv[1])==SQLITE_NULL
247 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
248 ){
249 return;
250 }
drhf764e6f2007-05-15 01:13:47 +0000251 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000252 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000253 if( p0type==SQLITE_BLOB ){
254 len = sqlite3_value_bytes(argv[0]);
255 z = sqlite3_value_blob(argv[0]);
256 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000257 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000258 }else{
259 z = sqlite3_value_text(argv[0]);
260 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000261 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000262 if( p1<0 ){
263 for(z2=z; *z2; len++){
264 SQLITE_SKIP_UTF8(z2);
265 }
drh4a919112007-05-15 11:55:09 +0000266 }
drhf764e6f2007-05-15 01:13:47 +0000267 }
drh64f31512007-10-12 19:11:55 +0000268 if( argc==3 ){
269 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000270 if( p2<0 ){
271 p2 = -p2;
272 negP2 = 1;
273 }
drh64f31512007-10-12 19:11:55 +0000274 }else{
drhbb4957f2008-03-20 14:03:29 +0000275 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000276 }
drh0bce8352002-02-28 00:41:10 +0000277 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000278 p1 += len;
drh653bc752002-02-28 03:31:10 +0000279 if( p1<0 ){
280 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000281 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000282 p1 = 0;
283 }
drh0bce8352002-02-28 00:41:10 +0000284 }else if( p1>0 ){
285 p1--;
drh65595cd2009-02-02 16:32:55 +0000286 }else if( p2>0 ){
287 p2--;
drh0bce8352002-02-28 00:41:10 +0000288 }
drh65595cd2009-02-02 16:32:55 +0000289 if( negP2 ){
290 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000291 if( p1<0 ){
292 p2 += p1;
293 p1 = 0;
294 }
295 }
drh65595cd2009-02-02 16:32:55 +0000296 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000297 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000298 while( *z && p1 ){
299 SQLITE_SKIP_UTF8(z);
300 p1--;
drhf764e6f2007-05-15 01:13:47 +0000301 }
drh4a919112007-05-15 11:55:09 +0000302 for(z2=z; *z2 && p2; p2--){
303 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000304 }
drh1bd10f82008-12-10 21:19:56 +0000305 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000306 }else{
drh4adc4cb2009-11-11 20:53:31 +0000307 if( p1+p2>len ){
308 p2 = len-p1;
309 if( p2<0 ) p2 = 0;
310 }
drh1bd10f82008-12-10 21:19:56 +0000311 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000312 }
drh0bce8352002-02-28 00:41:10 +0000313}
314
315/*
316** Implementation of the round() function
317*/
shanefbd60f82009-02-04 03:59:25 +0000318#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000319static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000320 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000321 double r;
drh50d654d2009-06-03 01:24:54 +0000322 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000323 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000324 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000325 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000326 n = sqlite3_value_int(argv[1]);
327 if( n>30 ) n = 30;
328 if( n<0 ) n = 0;
329 }
drhd589a922006-03-02 03:02:48 +0000330 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000331 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000332 /* If Y==0 and X will fit in a 64-bit int,
333 ** handle the rounding directly,
334 ** otherwise use printf.
335 */
336 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
337 r = (double)((sqlite_int64)(r+0.5));
338 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
339 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000340 }else{
shaneh147e1762010-02-17 04:19:27 +0000341 zBuf = sqlite3_mprintf("%.*f",n,r);
342 if( zBuf==0 ){
343 sqlite3_result_error_nomem(context);
344 return;
345 }
drh9339da12010-09-30 00:50:49 +0000346 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000347 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000348 }
shaneh147e1762010-02-17 04:19:27 +0000349 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000350}
shanefbd60f82009-02-04 03:59:25 +0000351#endif
drhdc04c582002-02-24 01:55:15 +0000352
danielk197726783a52007-08-29 14:06:22 +0000353/*
354** Allocate nByte bytes of space using sqlite3_malloc(). If the
355** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000356** the database handle that malloc() has failed and return NULL.
357** If nByte is larger than the maximum string or blob length, then
358** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000359*/
drhb1a6c3c2008-03-20 16:30:17 +0000360static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000361 char *z;
drh27e62db2009-04-02 10:16:17 +0000362 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000363 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000364 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
365 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
366 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000367 sqlite3_result_error_toobig(context);
368 z = 0;
369 }else{
drh1bd10f82008-12-10 21:19:56 +0000370 z = sqlite3Malloc((int)nByte);
drhef31c6a2009-04-02 09:07:12 +0000371 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000372 sqlite3_result_error_nomem(context);
373 }
danielk1977a1644fd2007-08-29 12:31:25 +0000374 }
375 return z;
376}
377
drhdc04c582002-02-24 01:55:15 +0000378/*
379** Implementation of the upper() and lower() SQL functions.
380*/
danielk19770ae8b832004-05-25 12:05:56 +0000381static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000382 char *z1;
383 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000384 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000385 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000386 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000387 n = sqlite3_value_bytes(argv[0]);
388 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
389 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000390 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000391 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000392 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000393 for(i=0; i<n; i++){
394 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000395 }
drhdf901d32011-10-13 18:00:11 +0000396 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000397 }
drhdc04c582002-02-24 01:55:15 +0000398 }
399}
danielk19770ae8b832004-05-25 12:05:56 +0000400static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000401 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000402 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000403 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000404 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000405 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000406 n = sqlite3_value_bytes(argv[0]);
407 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
408 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000409 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000410 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000411 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000412 for(i=0; i<n; i++){
413 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000414 }
drhdf901d32011-10-13 18:00:11 +0000415 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000416 }
drhdc04c582002-02-24 01:55:15 +0000417 }
418}
419
drhae6bb952009-11-11 00:24:31 +0000420/*
drhcca9f3d2013-09-06 15:23:29 +0000421** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
422** as VDBE code so that unused argument values do not have to be computed.
423** However, we still need some kind of function implementation for this
424** routines in the function table. The noopFunc macro provides this.
425** noopFunc will never be called so it doesn't matter what the implementation
426** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000427*/
drhcca9f3d2013-09-06 15:23:29 +0000428#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000429
430/*
drhf9ffac92002-03-02 19:00:31 +0000431** Implementation of random(). Return a random integer.
432*/
drhf9b596e2004-05-26 16:54:42 +0000433static void randomFunc(
434 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000435 int NotUsed,
436 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000437){
drh52fc8492006-02-23 21:43:55 +0000438 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000439 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000440 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000441 if( r<0 ){
442 /* We need to prevent a random number of 0x8000000000000000
443 ** (or -9223372036854775808) since when you do abs() of that
444 ** number of you get the same value back again. To do this
445 ** in a way that is testable, mask the sign bit off of negative
446 ** values, resulting in a positive value. Then take the
447 ** 2s complement of that positive value. The end result can
448 ** therefore be no less than -9223372036854775807.
449 */
drhaf8001b2012-02-11 19:53:24 +0000450 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000451 }
drh52fc8492006-02-23 21:43:55 +0000452 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000453}
454
455/*
drh137c7282007-01-29 17:58:28 +0000456** Implementation of randomblob(N). Return a random blob
457** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000458*/
drh137c7282007-01-29 17:58:28 +0000459static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000460 sqlite3_context *context,
461 int argc,
462 sqlite3_value **argv
463){
drh137c7282007-01-29 17:58:28 +0000464 int n;
465 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000466 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000467 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000468 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000469 if( n<1 ){
470 n = 1;
471 }
danielk1977a1644fd2007-08-29 12:31:25 +0000472 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000473 if( p ){
drh2fa18682008-03-19 14:15:34 +0000474 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000475 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000476 }
drh63cf66f2007-01-29 15:50:05 +0000477}
478
479/*
drh6ed41ad2002-04-06 14:10:47 +0000480** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000481** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000482*/
danielk197751ad0ec2004-05-24 12:39:02 +0000483static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000484 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000485 int NotUsed,
486 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000487){
drhfa4a4b92008-03-19 21:45:51 +0000488 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000489 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000490 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
491 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
492 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000493 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000494}
495
rdcf146a772004-02-25 22:51:06 +0000496/*
drhab2f1f92010-01-11 18:26:42 +0000497** Implementation of the changes() SQL function.
498**
499** IMP: R-62073-11209 The changes() SQL function is a wrapper
500** around the sqlite3_changes() C/C++ function and hence follows the same
501** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000502*/
danielk1977b28af712004-06-21 06:50:26 +0000503static void changes(
drhf9b596e2004-05-26 16:54:42 +0000504 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000505 int NotUsed,
506 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000507){
drhfa4a4b92008-03-19 21:45:51 +0000508 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000509 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000510 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000511}
rdcf146a772004-02-25 22:51:06 +0000512
513/*
danielk1977b28af712004-06-21 06:50:26 +0000514** Implementation of the total_changes() SQL function. The return value is
515** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000516*/
danielk1977b28af712004-06-21 06:50:26 +0000517static void total_changes(
518 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000519 int NotUsed,
520 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000521){
drhfa4a4b92008-03-19 21:45:51 +0000522 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000523 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000524 /* IMP: R-52756-41993 This function is a wrapper around the
525 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000526 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000527}
528
drh6ed41ad2002-04-06 14:10:47 +0000529/*
drh4e5ffc52004-08-31 00:52:37 +0000530** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000531*/
drh4e5ffc52004-08-31 00:52:37 +0000532struct compareInfo {
533 u8 matchAll;
534 u8 matchOne;
535 u8 matchSet;
536 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000537};
drh55ef4d92005-08-14 01:20:37 +0000538
drhb9175ae2007-12-07 18:39:04 +0000539/*
540** For LIKE and GLOB matching on EBCDIC machines, assume that every
541** character is exactly one byte in size. Also, all characters are
542** able to participate in upper-case-to-lower-case mappings in EBCDIC
543** whereas only characters less than 0x80 do in ASCII.
544*/
545#if defined(SQLITE_EBCDIC)
drh42610962012-09-17 18:56:32 +0000546# define sqlite3Utf8Read(A) (*((*A)++))
drh0a32fa62011-06-13 12:19:21 +0000547# define GlogUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000548#else
drh0a32fa62011-06-13 12:19:21 +0000549# define GlogUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000550#endif
551
drh4e5ffc52004-08-31 00:52:37 +0000552static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000553/* The correct SQL-92 behavior is for the LIKE operator to ignore
554** case. Thus 'a' LIKE 'A' would be true. */
555static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
556/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
557** is case sensitive causing 'a' LIKE 'A' to be false */
558static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000559
560/*
drh4e5ffc52004-08-31 00:52:37 +0000561** Compare two UTF-8 strings for equality where the first string can
562** potentially be a "glob" expression. Return true (1) if they
563** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000564**
drh4e5ffc52004-08-31 00:52:37 +0000565** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000566**
drh4e5ffc52004-08-31 00:52:37 +0000567** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000568**
drh4e5ffc52004-08-31 00:52:37 +0000569** '?' Matches exactly one character.
570**
571** [...] Matches one character from the enclosed list of
572** characters.
573**
574** [^...] Matches one character not in the enclosed list.
575**
576** With the [...] and [^...] matching, a ']' character can be included
577** in the list by making it the first character after '[' or '^'. A
578** range of characters can be specified using '-'. Example:
579** "[a-z]" matches any single lower-case letter. To match a '-', make
580** it the last character in the list.
581**
582** This routine is usually quick, but can be N**2 in the worst case.
583**
584** Hints: to match '*' or '?', put them in "[]". Like this:
585**
586** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000587*/
danielk19777c6303c2004-11-17 16:41:29 +0000588static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000589 const u8 *zPattern, /* The glob pattern */
590 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000591 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh0a32fa62011-06-13 12:19:21 +0000592 u32 esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000593){
drh0a32fa62011-06-13 12:19:21 +0000594 u32 c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000595 int invert;
596 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000597 u8 matchOne = pInfo->matchOne;
598 u8 matchAll = pInfo->matchAll;
599 u8 matchSet = pInfo->matchSet;
600 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000601 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000602
drh42610962012-09-17 18:56:32 +0000603 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
604 if( c==matchAll && !prevEscape ){
605 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000606 || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000607 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000608 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000609 }
danielk1977ad7dd422004-06-06 12:41:49 +0000610 }
drh66150952007-07-23 19:12:41 +0000611 if( c==0 ){
612 return 1;
613 }else if( c==esc ){
drh42610962012-09-17 18:56:32 +0000614 c = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000615 if( c==0 ){
616 return 0;
617 }
618 }else if( c==matchSet ){
619 assert( esc==0 ); /* This is GLOB, not LIKE */
620 assert( matchSet<0x80 ); /* '[' is a single-byte character */
621 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000622 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000623 }
624 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000625 }
drh42610962012-09-17 18:56:32 +0000626 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000627 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000628 GlogUpperToLower(c2);
629 GlogUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000630 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000631 c2 = sqlite3Utf8Read(&zString);
drh6ed4b782007-12-10 18:07:20 +0000632 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000633 }
drh66150952007-07-23 19:12:41 +0000634 }else{
635 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000636 c2 = sqlite3Utf8Read(&zString);
drh66150952007-07-23 19:12:41 +0000637 }
drh4e5ffc52004-08-31 00:52:37 +0000638 }
drh66150952007-07-23 19:12:41 +0000639 if( c2==0 ) return 0;
640 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
641 }
642 return 0;
drh42610962012-09-17 18:56:32 +0000643 }else if( c==matchOne && !prevEscape ){
644 if( sqlite3Utf8Read(&zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000645 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000646 }
drh4e5ffc52004-08-31 00:52:37 +0000647 }else if( c==matchSet ){
drh1aa4f3e2011-06-15 12:43:36 +0000648 u32 prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000649 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000650 seen = 0;
651 invert = 0;
drh42610962012-09-17 18:56:32 +0000652 c = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000653 if( c==0 ) return 0;
drh42610962012-09-17 18:56:32 +0000654 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000655 if( c2=='^' ){
656 invert = 1;
drh42610962012-09-17 18:56:32 +0000657 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000658 }
drh4e5ffc52004-08-31 00:52:37 +0000659 if( c2==']' ){
660 if( c==']' ) seen = 1;
drh42610962012-09-17 18:56:32 +0000661 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000662 }
drh66150952007-07-23 19:12:41 +0000663 while( c2 && c2!=']' ){
664 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh42610962012-09-17 18:56:32 +0000665 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000666 if( c>=prior_c && c<=c2 ) seen = 1;
667 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000668 }else{
drh66150952007-07-23 19:12:41 +0000669 if( c==c2 ){
670 seen = 1;
671 }
drh4e5ffc52004-08-31 00:52:37 +0000672 prior_c = c2;
673 }
drh42610962012-09-17 18:56:32 +0000674 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000675 }
drh66150952007-07-23 19:12:41 +0000676 if( c2==0 || (seen ^ invert)==0 ){
677 return 0;
678 }
679 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000680 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000681 }else{
drh42610962012-09-17 18:56:32 +0000682 c2 = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000683 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000684 GlogUpperToLower(c);
685 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000686 }
drh66150952007-07-23 19:12:41 +0000687 if( c!=c2 ){
688 return 0;
689 }
danielk19777c6303c2004-11-17 16:41:29 +0000690 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000691 }
danielk197751ad0ec2004-05-24 12:39:02 +0000692 }
drh4e5ffc52004-08-31 00:52:37 +0000693 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000694}
drh4e5ffc52004-08-31 00:52:37 +0000695
drh55ef4d92005-08-14 01:20:37 +0000696/*
drh56282a52013-04-10 16:13:38 +0000697** The sqlite3_strglob() interface.
698*/
699int sqlite3_strglob(const char *zGlobPattern, const char *zString){
700 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, 0)==0;
701}
702
703/*
drh55ef4d92005-08-14 01:20:37 +0000704** Count the number of times that the LIKE operator (or GLOB which is
705** just a variation of LIKE) gets called. This is used for testing
706** only.
707*/
708#ifdef SQLITE_TEST
709int sqlite3_like_count = 0;
710#endif
711
danielk19773f6b0872004-06-17 05:36:44 +0000712
713/*
714** Implementation of the like() SQL function. This function implements
715** the build-in LIKE operator. The first argument to the function is the
716** pattern and the second argument is the string. So, the SQL statements:
717**
718** A LIKE B
719**
720** is implemented as like(B,A).
721**
drh55ef4d92005-08-14 01:20:37 +0000722** This same function (with a different compareInfo structure) computes
723** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000724*/
725static void likeFunc(
726 sqlite3_context *context,
727 int argc,
728 sqlite3_value **argv
729){
drhbeb818d2007-05-08 15:34:47 +0000730 const unsigned char *zA, *zB;
drh0a32fa62011-06-13 12:19:21 +0000731 u32 escape = 0;
drh27e62db2009-04-02 10:16:17 +0000732 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000733 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000734
drh1f0feef2007-05-15 13:27:07 +0000735 zB = sqlite3_value_text(argv[0]);
736 zA = sqlite3_value_text(argv[1]);
737
drhbeb818d2007-05-08 15:34:47 +0000738 /* Limit the length of the LIKE or GLOB pattern to avoid problems
739 ** of deep recursion and N*N behavior in patternCompare().
740 */
drh27e62db2009-04-02 10:16:17 +0000741 nPat = sqlite3_value_bytes(argv[0]);
742 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
743 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
744 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000745 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
746 return;
747 }
drh1f0feef2007-05-15 13:27:07 +0000748 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000749
danielk19777c6303c2004-11-17 16:41:29 +0000750 if( argc==3 ){
751 /* The escape character string must consist of a single UTF-8 character.
752 ** Otherwise, return an error.
753 */
754 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000755 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000756 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000757 sqlite3_result_error(context,
758 "ESCAPE expression must be a single character", -1);
759 return;
760 }
drh42610962012-09-17 18:56:32 +0000761 escape = sqlite3Utf8Read(&zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000762 }
danielk19773f6b0872004-06-17 05:36:44 +0000763 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000764 struct compareInfo *pInfo = sqlite3_user_data(context);
765#ifdef SQLITE_TEST
766 sqlite3_like_count++;
767#endif
drhbeb818d2007-05-08 15:34:47 +0000768
danielk1977b56fe1f2007-05-09 08:24:44 +0000769 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000770 }
drh8912d102002-05-26 21:34:58 +0000771}
772
773/*
774** Implementation of the NULLIF(x,y) function. The result is the first
775** argument if the arguments are different. The result is NULL if the
776** arguments are equal to each other.
777*/
drhf9b596e2004-05-26 16:54:42 +0000778static void nullifFunc(
779 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000780 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000781 sqlite3_value **argv
782){
danielk1977dc1bdc42004-06-11 10:51:27 +0000783 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000784 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000785 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000786 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000787 }
drh0ac65892002-04-20 14:24:41 +0000788}
789
drh647cb0e2002-11-04 19:32:25 +0000790/*
drh47baebc2009-08-14 16:01:24 +0000791** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000792** of the SQLite library that is running.
793*/
drhf9b596e2004-05-26 16:54:42 +0000794static void versionFunc(
795 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000796 int NotUsed,
797 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000798){
danielk197762c14b32008-11-19 09:05:26 +0000799 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000800 /* IMP: R-48699-48617 This function is an SQL wrapper around the
801 ** sqlite3_libversion() C-interface. */
802 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000803}
804
drh47baebc2009-08-14 16:01:24 +0000805/*
806** Implementation of the sqlite_source_id() function. The result is a string
807** that identifies the particular version of the source code used to build
808** SQLite.
809*/
810static void sourceidFunc(
811 sqlite3_context *context,
812 int NotUsed,
813 sqlite3_value **NotUsed2
814){
815 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000816 /* IMP: R-24470-31136 This function is an SQL wrapper around the
817 ** sqlite3_sourceid() C interface. */
818 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000819}
820
shanehbdea6d12010-02-23 04:19:54 +0000821/*
drh3ca84ef2011-04-25 18:03:10 +0000822** Implementation of the sqlite_log() function. This is a wrapper around
823** sqlite3_log(). The return value is NULL. The function exists purely for
824** its side-effects.
825*/
drh840561f2011-04-27 18:08:42 +0000826static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000827 sqlite3_context *context,
828 int argc,
829 sqlite3_value **argv
830){
831 UNUSED_PARAMETER(argc);
832 UNUSED_PARAMETER(context);
833 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
834}
835
836/*
shanehdc97a8c2010-02-23 20:08:35 +0000837** Implementation of the sqlite_compileoption_used() function.
838** The result is an integer that identifies if the compiler option
839** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000840*/
shanehdc97a8c2010-02-23 20:08:35 +0000841#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
842static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000843 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000844 int argc,
845 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000846){
shanehdc97a8c2010-02-23 20:08:35 +0000847 const char *zOptName;
848 assert( argc==1 );
849 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000850 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
851 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
852 ** function.
853 */
drh264a2d42010-02-25 15:28:41 +0000854 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000855 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000856 }
shanehbdea6d12010-02-23 04:19:54 +0000857}
shanehdc97a8c2010-02-23 20:08:35 +0000858#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
859
860/*
861** Implementation of the sqlite_compileoption_get() function.
862** The result is a string that identifies the compiler options
863** used to build SQLite.
864*/
865#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
866static void compileoptiongetFunc(
867 sqlite3_context *context,
868 int argc,
869 sqlite3_value **argv
870){
871 int n;
872 assert( argc==1 );
873 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000874 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
875 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
876 */
shanehdc97a8c2010-02-23 20:08:35 +0000877 n = sqlite3_value_int(argv[0]);
878 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
879}
880#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000881
drh137c7282007-01-29 17:58:28 +0000882/* Array for converting from half-bytes (nybbles) into ASCII hex
883** digits. */
884static const char hexdigits[] = {
885 '0', '1', '2', '3', '4', '5', '6', '7',
886 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
887};
danielk1977d641d642004-11-18 15:44:29 +0000888
drh47394702003-08-20 01:03:33 +0000889/*
drh47394702003-08-20 01:03:33 +0000890** Implementation of the QUOTE() function. This function takes a single
891** argument. If the argument is numeric, the return value is the same as
892** the argument. If the argument is NULL, the return value is the string
893** "NULL". Otherwise, the argument is enclosed in single quotes with
894** single-quote escapes.
895*/
danielk19770ae8b832004-05-25 12:05:56 +0000896static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000897 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000898 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000899 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000900 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000901 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000902 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000903 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000904 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
905 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
906 if( r1!=r2 ){
907 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
908 }
909 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
910 break;
911 }
912 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000913 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000914 break;
915 }
danielk19773f41e972004-06-08 00:39:01 +0000916 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000917 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000918 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000919 int nBlob = sqlite3_value_bytes(argv[0]);
920 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000921 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000922 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000923 int i;
924 for(i=0; i<nBlob; i++){
925 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
926 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
927 }
928 zText[(nBlob*2)+2] = '\'';
929 zText[(nBlob*2)+3] = '\0';
930 zText[0] = 'X';
931 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000932 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000933 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000934 }
935 break;
936 }
drh9c054832004-05-31 18:51:57 +0000937 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000938 int i,j;
939 u64 n;
drh2646da72005-12-09 20:02:05 +0000940 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000941 char *z;
942
drh7a521cf2007-04-25 18:23:52 +0000943 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000944 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000945 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000946 if( z ){
947 z[0] = '\'';
948 for(i=0, j=1; zArg[i]; i++){
949 z[j++] = zArg[i];
950 if( zArg[i]=='\'' ){
951 z[j++] = '\'';
952 }
drhf9b596e2004-05-26 16:54:42 +0000953 }
danielk1977a1644fd2007-08-29 12:31:25 +0000954 z[j++] = '\'';
955 z[j] = 0;
956 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000957 }
drha0df4cc2009-02-02 17:29:59 +0000958 break;
959 }
960 default: {
961 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
962 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
963 break;
drhf9b596e2004-05-26 16:54:42 +0000964 }
drh47394702003-08-20 01:03:33 +0000965 }
966}
967
drh137c7282007-01-29 17:58:28 +0000968/*
drhd495d8c2013-02-22 19:34:25 +0000969** The unicode() function. Return the integer unicode code-point value
970** for the first character of the input string.
971*/
972static void unicodeFunc(
973 sqlite3_context *context,
974 int argc,
975 sqlite3_value **argv
976){
977 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +0000978 (void)argc;
drhd495d8c2013-02-22 19:34:25 +0000979 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
980}
981
982/*
983** The char() function takes zero or more arguments, each of which is
984** an integer. It constructs a string where each character of the string
985** is the unicode character for the corresponding integer argument.
986*/
987static void charFunc(
988 sqlite3_context *context,
989 int argc,
990 sqlite3_value **argv
991){
992 unsigned char *z, *zOut;
993 int i;
994 zOut = z = sqlite3_malloc( argc*4 );
995 if( z==0 ){
996 sqlite3_result_error_nomem(context);
997 return;
998 }
999 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001000 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001001 unsigned c;
1002 x = sqlite3_value_int64(argv[i]);
1003 if( x<0 || x>0x10ffff ) x = 0xfffd;
1004 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001005 if( c<0x00080 ){
1006 *zOut++ = (u8)(c&0xFF);
1007 }else if( c<0x00800 ){
1008 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1009 *zOut++ = 0x80 + (u8)(c & 0x3F);
1010 }else if( c<0x10000 ){
1011 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1012 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1013 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001014 }else{
drhfe7a5d12013-03-07 14:00:04 +00001015 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1016 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1017 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1018 *zOut++ = 0x80 + (u8)(c & 0x3F);
1019 } \
drhd495d8c2013-02-22 19:34:25 +00001020 }
drhfe7a5d12013-03-07 14:00:04 +00001021 sqlite3_result_text(context, (char*)z, (int)(zOut-z), sqlite3_free);
drhd495d8c2013-02-22 19:34:25 +00001022}
1023
1024/*
drh137c7282007-01-29 17:58:28 +00001025** The hex() function. Interpret the argument as a blob. Return
1026** a hexadecimal rendering as text.
1027*/
1028static void hexFunc(
1029 sqlite3_context *context,
1030 int argc,
1031 sqlite3_value **argv
1032){
1033 int i, n;
1034 const unsigned char *pBlob;
1035 char *zHex, *z;
1036 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001037 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001038 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001039 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001040 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001041 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001042 if( zHex ){
1043 for(i=0; i<n; i++, pBlob++){
1044 unsigned char c = *pBlob;
1045 *(z++) = hexdigits[(c>>4)&0xf];
1046 *(z++) = hexdigits[c&0xf];
1047 }
1048 *z = 0;
1049 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001050 }
drh137c7282007-01-29 17:58:28 +00001051}
1052
drh26b6d902007-03-17 13:27:54 +00001053/*
drh8cff3822007-05-02 02:08:28 +00001054** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1055*/
1056static void zeroblobFunc(
1057 sqlite3_context *context,
1058 int argc,
1059 sqlite3_value **argv
1060){
drh98640a32007-06-07 19:08:32 +00001061 i64 n;
drh27e62db2009-04-02 10:16:17 +00001062 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +00001063 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001064 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001065 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +00001066 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1067 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1068 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +00001069 sqlite3_result_error_toobig(context);
1070 }else{
drhab2f1f92010-01-11 18:26:42 +00001071 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
drh98640a32007-06-07 19:08:32 +00001072 }
drh8cff3822007-05-02 02:08:28 +00001073}
1074
1075/*
drh26b6d902007-03-17 13:27:54 +00001076** The replace() function. Three arguments are all strings: call
1077** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001078** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001079** must be exact. Collating sequences are not used.
1080*/
1081static void replaceFunc(
1082 sqlite3_context *context,
1083 int argc,
1084 sqlite3_value **argv
1085){
1086 const unsigned char *zStr; /* The input string A */
1087 const unsigned char *zPattern; /* The pattern string B */
1088 const unsigned char *zRep; /* The replacement string C */
1089 unsigned char *zOut; /* The output */
1090 int nStr; /* Size of zStr */
1091 int nPattern; /* Size of zPattern */
1092 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001093 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001094 int loopLimit; /* Last zStr[] that might match zPattern[] */
1095 int i, j; /* Loop counters */
1096
1097 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001098 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001099 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001100 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001101 nStr = sqlite3_value_bytes(argv[0]);
1102 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001103 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001104 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001105 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1106 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001107 return;
1108 }
1109 if( zPattern[0]==0 ){
1110 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1111 sqlite3_result_value(context, argv[0]);
1112 return;
1113 }
drh1f0feef2007-05-15 13:27:07 +00001114 nPattern = sqlite3_value_bytes(argv[1]);
1115 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001116 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001117 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001118 nRep = sqlite3_value_bytes(argv[2]);
1119 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001120 nOut = nStr + 1;
1121 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001122 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001123 if( zOut==0 ){
1124 return;
drh26b6d902007-03-17 13:27:54 +00001125 }
drh26b6d902007-03-17 13:27:54 +00001126 loopLimit = nStr - nPattern;
1127 for(i=j=0; i<=loopLimit; i++){
1128 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1129 zOut[j++] = zStr[i];
1130 }else{
drh4a50aac2007-08-23 02:47:53 +00001131 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001132 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001133 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001134 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1135 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1136 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001137 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001138 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001139 return;
1140 }
drh4a50aac2007-08-23 02:47:53 +00001141 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +00001142 zOut = sqlite3_realloc(zOut, (int)nOut);
1143 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001144 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001145 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001146 return;
1147 }
drh26b6d902007-03-17 13:27:54 +00001148 memcpy(&zOut[j], zRep, nRep);
1149 j += nRep;
1150 i += nPattern-1;
1151 }
1152 }
drh2e6400b2007-05-08 15:46:18 +00001153 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001154 memcpy(&zOut[j], &zStr[i], nStr-i);
1155 j += nStr - i;
1156 assert( j<=nOut );
1157 zOut[j] = 0;
1158 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1159}
1160
drh309b3382007-03-17 17:52:42 +00001161/*
1162** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1163** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1164*/
1165static void trimFunc(
1166 sqlite3_context *context,
1167 int argc,
1168 sqlite3_value **argv
1169){
1170 const unsigned char *zIn; /* Input string */
1171 const unsigned char *zCharSet; /* Set of characters to trim */
1172 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001173 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001174 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001175 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1176 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001177 int nChar; /* Number of characters in zCharSet */
1178
drh309b3382007-03-17 17:52:42 +00001179 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1180 return;
1181 }
1182 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001183 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001184 nIn = sqlite3_value_bytes(argv[0]);
1185 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001186 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001187 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001188 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001189 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001190 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001191 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001192 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001193 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001194 return;
drhd1e3a612007-04-27 21:59:52 +00001195 }else{
1196 const unsigned char *z;
1197 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001198 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001199 }
1200 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001201 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001202 if( azChar==0 ){
1203 return;
1204 }
1205 aLen = (unsigned char*)&azChar[nChar];
1206 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001207 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001208 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001209 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001210 }
1211 }
drh309b3382007-03-17 17:52:42 +00001212 }
drhd1e3a612007-04-27 21:59:52 +00001213 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001214 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001215 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001216 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001217 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001218 for(i=0; i<nChar; i++){
1219 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001220 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001221 }
1222 if( i>=nChar ) break;
1223 zIn += len;
1224 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001225 }
1226 }
1227 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001228 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001229 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001230 for(i=0; i<nChar; i++){
1231 len = aLen[i];
1232 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1233 }
1234 if( i>=nChar ) break;
1235 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001236 }
1237 }
drhd1e3a612007-04-27 21:59:52 +00001238 if( zCharSet ){
1239 sqlite3_free(azChar);
1240 }
drh309b3382007-03-17 17:52:42 +00001241 }
1242 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1243}
drh26b6d902007-03-17 13:27:54 +00001244
danielk1977a4de4532008-09-02 15:44:08 +00001245
drh2ba3ccc2009-12-08 02:06:08 +00001246/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1247** is only available if the SQLITE_SOUNDEX compile-time option is used
1248** when SQLite is built.
1249*/
drhd24cc422003-03-27 12:51:24 +00001250#ifdef SQLITE_SOUNDEX
1251/*
1252** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001253**
1254** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1255** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001256*/
drh137c7282007-01-29 17:58:28 +00001257static void soundexFunc(
1258 sqlite3_context *context,
1259 int argc,
1260 sqlite3_value **argv
1261){
drhd24cc422003-03-27 12:51:24 +00001262 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001263 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001264 int i, j;
1265 static const unsigned char iCode[] = {
1266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1267 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1270 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1271 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1272 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1273 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1274 };
1275 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001276 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001277 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001278 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001279 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001280 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001281 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001282 for(j=1; j<4 && zIn[i]; i++){
1283 int code = iCode[zIn[i]&0x7f];
1284 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001285 if( code!=prevcode ){
1286 prevcode = code;
1287 zResult[j++] = code + '0';
1288 }
1289 }else{
1290 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001291 }
1292 }
1293 while( j<4 ){
1294 zResult[j++] = '0';
1295 }
1296 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001297 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001298 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001299 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1300 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001301 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001302 }
1303}
drh2ba3ccc2009-12-08 02:06:08 +00001304#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001305
drhfdb83b22006-06-17 14:12:47 +00001306#ifndef SQLITE_OMIT_LOAD_EXTENSION
1307/*
1308** A function that loads a shared-library extension then returns NULL.
1309*/
1310static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001311 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001312 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001313 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001314 char *zErrMsg = 0;
1315
1316 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001317 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001318 }else{
1319 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001320 }
drh7a521cf2007-04-25 18:23:52 +00001321 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001322 sqlite3_result_error(context, zErrMsg, -1);
1323 sqlite3_free(zErrMsg);
1324 }
1325}
1326#endif
1327
danielk197701427a62005-01-11 13:02:33 +00001328
drh0ac65892002-04-20 14:24:41 +00001329/*
drhd3a149e2002-02-24 17:12:53 +00001330** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001331** sum() or avg() aggregate computation.
1332*/
1333typedef struct SumCtx SumCtx;
1334struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001335 double rSum; /* Floating point sum */
1336 i64 iSum; /* Integer sum */
1337 i64 cnt; /* Number of elements summed */
1338 u8 overflow; /* True if integer overflow seen */
1339 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001340};
1341
1342/*
drha97fdd32006-01-12 22:17:50 +00001343** Routines used to compute the sum, average, and total.
1344**
1345** The SUM() function follows the (broken) SQL standard which means
1346** that it returns NULL if it sums over no inputs. TOTAL returns
1347** 0.0 in that case. In addition, TOTAL always returns a float where
1348** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001349** value. TOTAL never fails, but SUM might through an exception if
1350** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001351*/
danielk19770ae8b832004-05-25 12:05:56 +00001352static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001353 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001354 int type;
drh3f219f42005-09-08 19:45:57 +00001355 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001356 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001357 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001358 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001359 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001360 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001361 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001362 i64 v = sqlite3_value_int64(argv[0]);
1363 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001364 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1365 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001366 }
1367 }else{
drh8c08e862006-02-11 17:34:00 +00001368 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001369 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001370 }
drh739105c2002-05-29 23:22:23 +00001371 }
drhdd5baa92002-02-27 19:50:59 +00001372}
danielk19770ae8b832004-05-25 12:05:56 +00001373static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001374 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001375 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001376 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001377 if( p->overflow ){
1378 sqlite3_result_error(context,"integer overflow",-1);
1379 }else if( p->approx ){
1380 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001381 }else{
drh8c08e862006-02-11 17:34:00 +00001382 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001383 }
drh3d1d95e2005-09-08 10:37:01 +00001384 }
drhdd5baa92002-02-27 19:50:59 +00001385}
danielk19770ae8b832004-05-25 12:05:56 +00001386static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001387 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001388 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001389 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001390 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001391 }
1392}
drha97fdd32006-01-12 22:17:50 +00001393static void totalFinalize(sqlite3_context *context){
1394 SumCtx *p;
1395 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001396 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1397 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001398}
drhdd5baa92002-02-27 19:50:59 +00001399
1400/*
drh0bce8352002-02-28 00:41:10 +00001401** The following structure keeps track of state information for the
1402** count() aggregate function.
1403*/
1404typedef struct CountCtx CountCtx;
1405struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001406 i64 n;
drh0bce8352002-02-28 00:41:10 +00001407};
drhdd5baa92002-02-27 19:50:59 +00001408
drh0bce8352002-02-28 00:41:10 +00001409/*
1410** Routines to implement the count() aggregate function.
1411*/
danielk19770ae8b832004-05-25 12:05:56 +00001412static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001413 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001414 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001415 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001416 p->n++;
1417 }
drh2e79c3d2009-04-08 23:04:14 +00001418
drhd3264c72009-04-15 13:39:47 +00001419#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001420 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1421 ** sure it still operates correctly, verify that its count agrees with our
1422 ** internal count when using count(*) and when the total count can be
1423 ** expressed as a 32-bit integer. */
1424 assert( argc==1 || p==0 || p->n>0x7fffffff
1425 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001426#endif
drh0bce8352002-02-28 00:41:10 +00001427}
danielk19770ae8b832004-05-25 12:05:56 +00001428static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001429 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001430 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001431 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001432}
1433
1434/*
drh0bce8352002-02-28 00:41:10 +00001435** Routines to implement min() and max() aggregate functions.
1436*/
danielk197762c14b32008-11-19 09:05:26 +00001437static void minmaxStep(
1438 sqlite3_context *context,
1439 int NotUsed,
1440 sqlite3_value **argv
1441){
danielk197788208052004-05-25 01:13:20 +00001442 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001443 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001444 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001445
drh9eb516c2004-07-18 20:52:32 +00001446 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001447 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001448
drh94a6d992012-02-02 18:42:09 +00001449 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1450 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1451 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001452 int max;
1453 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001454 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001455 /* This step function is used for both the min() and max() aggregates,
1456 ** the only difference between the two being that the sense of the
1457 ** comparison is inverted. For the max() aggregate, the
1458 ** sqlite3_user_data() function returns (void *)-1. For min() it
1459 ** returns (void *)db, where db is the sqlite3* database pointer.
1460 ** Therefore the next statement sets variable 'max' to 1 for the max()
1461 ** aggregate, or 0 for min().
1462 */
drh309b3382007-03-17 17:52:42 +00001463 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001464 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001465 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001466 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001467 }else{
1468 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001469 }
drh268380c2004-02-25 13:47:31 +00001470 }else{
drhb21c8cd2007-08-21 19:33:56 +00001471 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001472 }
1473}
danielk19770ae8b832004-05-25 12:05:56 +00001474static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001475 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001476 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1477 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001478 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001479 sqlite3_result_value(context, pRes);
1480 }
1481 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001482 }
1483}
drhdd5baa92002-02-27 19:50:59 +00001484
drhb0689692007-11-01 17:38:30 +00001485/*
1486** group_concat(EXPR, ?SEPARATOR?)
1487*/
1488static void groupConcatStep(
1489 sqlite3_context *context,
1490 int argc,
1491 sqlite3_value **argv
1492){
1493 const char *zVal;
drhade86482007-11-28 22:36:40 +00001494 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001495 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001496 int nVal, nSep;
1497 assert( argc==1 || argc==2 );
1498 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001499 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1500
1501 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001502 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001503 int firstTerm = pAccum->useMalloc==0;
drhb9755982010-07-24 16:34:37 +00001504 pAccum->useMalloc = 2;
drhbb4957f2008-03-20 14:03:29 +00001505 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001506 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001507 if( argc==2 ){
1508 zSep = (char*)sqlite3_value_text(argv[1]);
1509 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001510 }else{
1511 zSep = ",";
drhade86482007-11-28 22:36:40 +00001512 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001513 }
drhade86482007-11-28 22:36:40 +00001514 sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001515 }
drh07d31172009-02-02 21:57:05 +00001516 zVal = (char*)sqlite3_value_text(argv[0]);
1517 nVal = sqlite3_value_bytes(argv[0]);
1518 sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001519 }
1520}
1521static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001522 StrAccum *pAccum;
1523 pAccum = sqlite3_aggregate_context(context, 0);
1524 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001525 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001526 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001527 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001528 sqlite3_result_error_nomem(context);
1529 }else{
1530 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1531 sqlite3_free);
1532 }
drhb0689692007-11-01 17:38:30 +00001533 }
1534}
drh4e5ffc52004-08-31 00:52:37 +00001535
drhd3a149e2002-02-24 17:12:53 +00001536/*
drha4741842010-04-25 20:58:37 +00001537** This routine does per-connection function registration. Most
1538** of the built-in functions above are part of the global function set.
1539** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001540*/
drh9bb575f2004-09-06 17:24:11 +00001541void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001542 int rc = sqlite3_overload_function(db, "MATCH", 2);
1543 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1544 if( rc==SQLITE_NOMEM ){
1545 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001546 }
drh55ef4d92005-08-14 01:20:37 +00001547}
1548
1549/*
1550** Set the LIKEOPT flag on the 2-argument function with the given name.
1551*/
drh1bd10f82008-12-10 21:19:56 +00001552static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001553 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001554 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1555 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001556 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001557 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001558 }
1559}
1560
1561/*
1562** Register the built-in LIKE and GLOB functions. The caseSensitive
1563** parameter determines whether or not the LIKE operator is case
1564** sensitive. GLOB is always case sensitive.
1565*/
1566void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1567 struct compareInfo *pInfo;
1568 if( caseSensitive ){
1569 pInfo = (struct compareInfo*)&likeInfoAlt;
1570 }else{
1571 pInfo = (struct compareInfo*)&likeInfoNorm;
1572 }
drh901e9942010-12-15 18:54:37 +00001573 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1574 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1575 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001576 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001577 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1578 setLikeOptFlag(db, "like",
1579 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001580}
1581
1582/*
1583** pExpr points to an expression which implements a function. If
1584** it is appropriate to apply the LIKE optimization to that function
1585** then set aWc[0] through aWc[2] to the wildcard characters and
1586** return TRUE. If the function is not a LIKE-style function then
1587** return FALSE.
1588*/
drhd64fe2f2005-08-28 17:00:23 +00001589int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001590 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001591 if( pExpr->op!=TK_FUNCTION
1592 || !pExpr->x.pList
1593 || pExpr->x.pList->nExpr!=2
1594 ){
drh55ef4d92005-08-14 01:20:37 +00001595 return 0;
1596 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001597 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001598 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1599 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001600 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001601 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001602 return 0;
1603 }
1604
1605 /* The memcpy() statement assumes that the wildcard characters are
1606 ** the first three statements in the compareInfo structure. The
1607 ** asserts() that follow verify that assumption
1608 */
1609 memcpy(aWc, pDef->pUserData, 3);
1610 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1611 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1612 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001613 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001614 return 1;
drhdc04c582002-02-24 01:55:15 +00001615}
danielk19778c0a7912008-08-20 14:49:23 +00001616
drh70a8ca32008-08-21 18:49:27 +00001617/*
drh777c5382008-08-21 20:21:34 +00001618** All all of the FuncDef structures in the aBuiltinFunc[] array above
1619** to the global function hash table. This occurs at start-time (as
1620** a consequence of calling sqlite3_initialize()).
1621**
1622** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001623*/
1624void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001625 /*
1626 ** The following array holds FuncDef structures for all of the functions
1627 ** defined in this file.
1628 **
1629 ** The array cannot be constant since changes are made to the
1630 ** FuncDef.pHash elements at start-time. The elements of this array
1631 ** are read-only after initialization is complete.
1632 */
1633 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1634 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1635 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1636 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1637 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1638 FUNCTION(trim, 1, 3, 0, trimFunc ),
1639 FUNCTION(trim, 2, 3, 0, trimFunc ),
1640 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1641 FUNCTION(min, 0, 0, 1, 0 ),
1642 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1643 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1644 FUNCTION(max, 0, 1, 1, 0 ),
1645 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
drha748fdc2012-03-28 01:34:47 +00001646 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1647 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001648 FUNCTION(instr, 2, 0, 0, instrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001649 FUNCTION(substr, 2, 0, 0, substrFunc ),
1650 FUNCTION(substr, 3, 0, 0, substrFunc ),
drhd495d8c2013-02-22 19:34:25 +00001651 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1652 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001653 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001654#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001655 FUNCTION(round, 1, 0, 0, roundFunc ),
1656 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001657#endif
danielk197793ce7412008-09-01 19:14:02 +00001658 FUNCTION(upper, 1, 0, 0, upperFunc ),
1659 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1660 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001661 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhcca9f3d2013-09-06 15:23:29 +00001662 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001663 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001664 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
1665 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1666 FUNCTION2(unlikely, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh9373b012009-02-02 01:50:39 +00001667 FUNCTION(random, 0, 0, 0, randomFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001668 FUNCTION(randomblob, 1, 0, 0, randomBlob ),
1669 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1670 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001671 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001672 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001673#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
drh8bb76d32010-02-26 16:37:47 +00001674 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1675 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001676#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
danielk197793ce7412008-09-01 19:14:02 +00001677 FUNCTION(quote, 1, 0, 0, quoteFunc ),
1678 FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1679 FUNCTION(changes, 0, 0, 0, changes ),
1680 FUNCTION(total_changes, 0, 0, 0, total_changes ),
1681 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1682 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1683 #ifdef SQLITE_SOUNDEX
1684 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1685 #endif
1686 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1687 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1688 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1689 #endif
1690 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1691 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1692 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001693 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
drhd36e1042013-09-06 13:10:12 +00001694 {0,SQLITE_UTF8|SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
danielk197793ce7412008-09-01 19:14:02 +00001695 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001696 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1697 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001698
1699 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1700 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1701 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1702 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1703 #else
1704 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1705 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1706 #endif
1707 };
1708
drh70a8ca32008-08-21 18:49:27 +00001709 int i;
danielk197793ce7412008-09-01 19:14:02 +00001710 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001711 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001712
drh70a8ca32008-08-21 18:49:27 +00001713 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001714 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001715 }
drh777c5382008-08-21 20:21:34 +00001716 sqlite3RegisterDateTimeFunctions();
drh545f5872010-04-24 14:02:59 +00001717#ifndef SQLITE_OMIT_ALTERTABLE
1718 sqlite3AlterFunctions();
1719#endif
dan0106e372013-08-12 16:34:32 +00001720#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1721 sqlite3AnalyzeFunctions();
1722#endif
drh70a8ca32008-08-21 18:49:27 +00001723}