blob: cf556e2439d944f85d955f862e6b8c78a7384a2d [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*************************************************************************
peter.d.reid60ec9142014-09-06 16:39:46 +000012** This file contains the C-language implementations for many of the SQL
drhede7ae32014-08-06 11:58:40 +000013** functions of SQLite. (Some function, and in particular the date and
14** time functions, are implemented separately.)
drhdc04c582002-02-24 01:55:15 +000015*/
drhb659e9b2005-01-28 01:29:08 +000016#include "sqliteInt.h"
drhd3a149e2002-02-24 17:12:53 +000017#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000018#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000019#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000020
drh55ef4d92005-08-14 01:20:37 +000021/*
22** Return the collating function associated with a function.
23*/
danielk1977dc1bdc42004-06-11 10:51:27 +000024static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
drha15cc472014-09-25 13:17:30 +000025 VdbeOp *pOp = &context->pVdbe->aOp[context->iOp-1];
26 assert( pOp->opcode==OP_CollSeq );
27 assert( pOp->p4type==P4_COLLSEQ );
28 return pOp->p4.pColl;
danielk1977dc1bdc42004-06-11 10:51:27 +000029}
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 ){
drh693e6712014-01-24 22:58:00 +0000140 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000141 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
142 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000143 ** 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/*
drha5c14162013-12-17 15:03:06 +0000222** Implementation of the printf() function.
223*/
224static void printfFunc(
225 sqlite3_context *context,
226 int argc,
227 sqlite3_value **argv
228){
229 PrintfArguments x;
230 StrAccum str;
231 const char *zFormat;
232 int n;
233
234 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
235 x.nArg = argc-1;
236 x.nUsed = 0;
237 x.apArg = argv+1;
238 sqlite3StrAccumInit(&str, 0, 0, SQLITE_MAX_LENGTH);
239 str.db = sqlite3_context_db_handle(context);
240 sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x);
241 n = str.nChar;
242 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
243 SQLITE_DYNAMIC);
244 }
245}
246
247/*
drhf764e6f2007-05-15 01:13:47 +0000248** Implementation of the substr() function.
249**
250** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
251** p1 is 1-indexed. So substr(x,1,1) returns the first character
252** of x. If x is text, then we actually count UTF-8 characters.
253** If x is a blob, then we count bytes.
254**
255** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000256**
drhf7b54962013-05-28 12:11:54 +0000257** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000258*/
drhf9b596e2004-05-26 16:54:42 +0000259static void substrFunc(
260 sqlite3_context *context,
261 int argc,
262 sqlite3_value **argv
263){
drh2646da72005-12-09 20:02:05 +0000264 const unsigned char *z;
265 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000266 int len;
drhf764e6f2007-05-15 01:13:47 +0000267 int p0type;
drh023ae032007-05-08 12:12:16 +0000268 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000269 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000270
drh64f31512007-10-12 19:11:55 +0000271 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000272 if( sqlite3_value_type(argv[1])==SQLITE_NULL
273 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
274 ){
275 return;
276 }
drhf764e6f2007-05-15 01:13:47 +0000277 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000278 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000279 if( p0type==SQLITE_BLOB ){
280 len = sqlite3_value_bytes(argv[0]);
281 z = sqlite3_value_blob(argv[0]);
282 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000283 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000284 }else{
285 z = sqlite3_value_text(argv[0]);
286 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000287 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000288 if( p1<0 ){
289 for(z2=z; *z2; len++){
290 SQLITE_SKIP_UTF8(z2);
291 }
drh4a919112007-05-15 11:55:09 +0000292 }
drhf764e6f2007-05-15 01:13:47 +0000293 }
drh64f31512007-10-12 19:11:55 +0000294 if( argc==3 ){
295 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000296 if( p2<0 ){
297 p2 = -p2;
298 negP2 = 1;
299 }
drh64f31512007-10-12 19:11:55 +0000300 }else{
drhbb4957f2008-03-20 14:03:29 +0000301 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000302 }
drh0bce8352002-02-28 00:41:10 +0000303 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000304 p1 += len;
drh653bc752002-02-28 03:31:10 +0000305 if( p1<0 ){
306 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000307 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000308 p1 = 0;
309 }
drh0bce8352002-02-28 00:41:10 +0000310 }else if( p1>0 ){
311 p1--;
drh65595cd2009-02-02 16:32:55 +0000312 }else if( p2>0 ){
313 p2--;
drh0bce8352002-02-28 00:41:10 +0000314 }
drh65595cd2009-02-02 16:32:55 +0000315 if( negP2 ){
316 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000317 if( p1<0 ){
318 p2 += p1;
319 p1 = 0;
320 }
321 }
drh65595cd2009-02-02 16:32:55 +0000322 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000323 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000324 while( *z && p1 ){
325 SQLITE_SKIP_UTF8(z);
326 p1--;
drhf764e6f2007-05-15 01:13:47 +0000327 }
drh4a919112007-05-15 11:55:09 +0000328 for(z2=z; *z2 && p2; p2--){
329 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000330 }
drhbbf483f2014-09-09 20:30:24 +0000331 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
332 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000333 }else{
drh4adc4cb2009-11-11 20:53:31 +0000334 if( p1+p2>len ){
335 p2 = len-p1;
336 if( p2<0 ) p2 = 0;
337 }
drhbbf483f2014-09-09 20:30:24 +0000338 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000339 }
drh0bce8352002-02-28 00:41:10 +0000340}
341
342/*
343** Implementation of the round() function
344*/
shanefbd60f82009-02-04 03:59:25 +0000345#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000346static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000347 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000348 double r;
drh50d654d2009-06-03 01:24:54 +0000349 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000350 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000351 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000352 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000353 n = sqlite3_value_int(argv[1]);
354 if( n>30 ) n = 30;
355 if( n<0 ) n = 0;
356 }
drhd589a922006-03-02 03:02:48 +0000357 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000358 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000359 /* If Y==0 and X will fit in a 64-bit int,
360 ** handle the rounding directly,
361 ** otherwise use printf.
362 */
363 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
364 r = (double)((sqlite_int64)(r+0.5));
365 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
366 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000367 }else{
shaneh147e1762010-02-17 04:19:27 +0000368 zBuf = sqlite3_mprintf("%.*f",n,r);
369 if( zBuf==0 ){
370 sqlite3_result_error_nomem(context);
371 return;
372 }
drh9339da12010-09-30 00:50:49 +0000373 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000374 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000375 }
shaneh147e1762010-02-17 04:19:27 +0000376 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000377}
shanefbd60f82009-02-04 03:59:25 +0000378#endif
drhdc04c582002-02-24 01:55:15 +0000379
danielk197726783a52007-08-29 14:06:22 +0000380/*
381** Allocate nByte bytes of space using sqlite3_malloc(). If the
382** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000383** the database handle that malloc() has failed and return NULL.
384** If nByte is larger than the maximum string or blob length, then
385** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000386*/
drhb1a6c3c2008-03-20 16:30:17 +0000387static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000388 char *z;
drh27e62db2009-04-02 10:16:17 +0000389 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000390 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000391 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
392 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
393 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000394 sqlite3_result_error_toobig(context);
395 z = 0;
396 }else{
drhda4ca9d2014-09-09 17:27:35 +0000397 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000398 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000399 sqlite3_result_error_nomem(context);
400 }
danielk1977a1644fd2007-08-29 12:31:25 +0000401 }
402 return z;
403}
404
drhdc04c582002-02-24 01:55:15 +0000405/*
406** Implementation of the upper() and lower() SQL functions.
407*/
danielk19770ae8b832004-05-25 12:05:56 +0000408static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000409 char *z1;
410 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000411 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000412 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000413 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000414 n = sqlite3_value_bytes(argv[0]);
415 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
416 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000417 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000418 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000419 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000420 for(i=0; i<n; i++){
421 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000422 }
drhdf901d32011-10-13 18:00:11 +0000423 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000424 }
drhdc04c582002-02-24 01:55:15 +0000425 }
426}
danielk19770ae8b832004-05-25 12:05:56 +0000427static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000428 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000429 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000430 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000431 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000432 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000433 n = sqlite3_value_bytes(argv[0]);
434 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
435 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000436 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000437 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000438 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000439 for(i=0; i<n; i++){
440 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000441 }
drhdf901d32011-10-13 18:00:11 +0000442 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000443 }
drhdc04c582002-02-24 01:55:15 +0000444 }
445}
446
drhae6bb952009-11-11 00:24:31 +0000447/*
drhcca9f3d2013-09-06 15:23:29 +0000448** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
449** as VDBE code so that unused argument values do not have to be computed.
450** However, we still need some kind of function implementation for this
451** routines in the function table. The noopFunc macro provides this.
452** noopFunc will never be called so it doesn't matter what the implementation
453** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000454*/
drhcca9f3d2013-09-06 15:23:29 +0000455#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000456
457/*
drhf9ffac92002-03-02 19:00:31 +0000458** Implementation of random(). Return a random integer.
459*/
drhf9b596e2004-05-26 16:54:42 +0000460static void randomFunc(
461 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000462 int NotUsed,
463 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000464){
drh52fc8492006-02-23 21:43:55 +0000465 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000466 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000467 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000468 if( r<0 ){
469 /* We need to prevent a random number of 0x8000000000000000
470 ** (or -9223372036854775808) since when you do abs() of that
471 ** number of you get the same value back again. To do this
472 ** in a way that is testable, mask the sign bit off of negative
473 ** values, resulting in a positive value. Then take the
474 ** 2s complement of that positive value. The end result can
475 ** therefore be no less than -9223372036854775807.
476 */
drhaf8001b2012-02-11 19:53:24 +0000477 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000478 }
drh52fc8492006-02-23 21:43:55 +0000479 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000480}
481
482/*
drh137c7282007-01-29 17:58:28 +0000483** Implementation of randomblob(N). Return a random blob
484** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000485*/
drh137c7282007-01-29 17:58:28 +0000486static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000487 sqlite3_context *context,
488 int argc,
489 sqlite3_value **argv
490){
drh137c7282007-01-29 17:58:28 +0000491 int n;
492 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000493 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000494 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000495 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000496 if( n<1 ){
497 n = 1;
498 }
danielk1977a1644fd2007-08-29 12:31:25 +0000499 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000500 if( p ){
drh2fa18682008-03-19 14:15:34 +0000501 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000502 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000503 }
drh63cf66f2007-01-29 15:50:05 +0000504}
505
506/*
drh6ed41ad2002-04-06 14:10:47 +0000507** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000508** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000509*/
danielk197751ad0ec2004-05-24 12:39:02 +0000510static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000511 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000512 int NotUsed,
513 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000514){
drhfa4a4b92008-03-19 21:45:51 +0000515 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000516 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000517 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
518 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
519 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000520 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000521}
522
rdcf146a772004-02-25 22:51:06 +0000523/*
drhab2f1f92010-01-11 18:26:42 +0000524** Implementation of the changes() SQL function.
525**
526** IMP: R-62073-11209 The changes() SQL function is a wrapper
527** around the sqlite3_changes() C/C++ function and hence follows the same
528** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000529*/
danielk1977b28af712004-06-21 06:50:26 +0000530static void changes(
drhf9b596e2004-05-26 16:54:42 +0000531 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000532 int NotUsed,
533 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000534){
drhfa4a4b92008-03-19 21:45:51 +0000535 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000536 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000537 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000538}
rdcf146a772004-02-25 22:51:06 +0000539
540/*
danielk1977b28af712004-06-21 06:50:26 +0000541** Implementation of the total_changes() SQL function. The return value is
542** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000543*/
danielk1977b28af712004-06-21 06:50:26 +0000544static void total_changes(
545 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000546 int NotUsed,
547 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000548){
drhfa4a4b92008-03-19 21:45:51 +0000549 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000550 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000551 /* IMP: R-52756-41993 This function is a wrapper around the
552 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000553 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000554}
555
drh6ed41ad2002-04-06 14:10:47 +0000556/*
drh4e5ffc52004-08-31 00:52:37 +0000557** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000558*/
drh4e5ffc52004-08-31 00:52:37 +0000559struct compareInfo {
560 u8 matchAll;
561 u8 matchOne;
562 u8 matchSet;
563 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000564};
drh55ef4d92005-08-14 01:20:37 +0000565
drhb9175ae2007-12-07 18:39:04 +0000566/*
567** For LIKE and GLOB matching on EBCDIC machines, assume that every
568** character is exactly one byte in size. Also, all characters are
569** able to participate in upper-case-to-lower-case mappings in EBCDIC
570** whereas only characters less than 0x80 do in ASCII.
571*/
572#if defined(SQLITE_EBCDIC)
drh88b33222014-09-25 03:51:37 +0000573# define sqlite3Utf8Read(A) (*((*A)++))
574# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
575# define GlobUpperToLowerAscii(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000576#else
drh88b33222014-09-25 03:51:37 +0000577# define GlobUpperToLower(A) if( A<=0x7f ){ A = sqlite3UpperToLower[A]; }
578# define GlobUpperToLowerAscii(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000579#endif
580
drh4e5ffc52004-08-31 00:52:37 +0000581static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000582/* The correct SQL-92 behavior is for the LIKE operator to ignore
583** case. Thus 'a' LIKE 'A' would be true. */
584static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
585/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
586** is case sensitive causing 'a' LIKE 'A' to be false */
587static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000588
589/*
drh4e5ffc52004-08-31 00:52:37 +0000590** Compare two UTF-8 strings for equality where the first string can
drh9fdfdc82014-09-25 11:08:57 +0000591** potentially be a "glob" or "like" expression. Return true (1) if they
drh4e5ffc52004-08-31 00:52:37 +0000592** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000593**
drh4e5ffc52004-08-31 00:52:37 +0000594** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000595**
drh4e5ffc52004-08-31 00:52:37 +0000596** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000597**
drh4e5ffc52004-08-31 00:52:37 +0000598** '?' Matches exactly one character.
599**
600** [...] Matches one character from the enclosed list of
601** characters.
602**
603** [^...] Matches one character not in the enclosed list.
604**
605** With the [...] and [^...] matching, a ']' character can be included
606** in the list by making it the first character after '[' or '^'. A
607** range of characters can be specified using '-'. Example:
608** "[a-z]" matches any single lower-case letter. To match a '-', make
609** it the last character in the list.
610**
drh9fdfdc82014-09-25 11:08:57 +0000611** Like matching rules:
612**
613** '%' Matches any sequence of zero or more characters
614**
615*** '_' Matches any one character
616**
617** Ec Where E is the "esc" character and c is any other
618** character, including '%', '_', and esc, match exactly c.
619**
620** The comments through this routine usually assume glob matching.
621**
drh4e5ffc52004-08-31 00:52:37 +0000622** This routine is usually quick, but can be N**2 in the worst case.
drh0ac65892002-04-20 14:24:41 +0000623*/
danielk19777c6303c2004-11-17 16:41:29 +0000624static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000625 const u8 *zPattern, /* The glob pattern */
626 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000627 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh0a32fa62011-06-13 12:19:21 +0000628 u32 esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000629){
drh9fdfdc82014-09-25 11:08:57 +0000630 u32 c, c2; /* Next pattern and input string chars */
631 u32 matchOne = pInfo->matchOne; /* "?" or "_" */
632 u32 matchAll = pInfo->matchAll; /* "*" or "%" */
633 u32 matchOther; /* "[" or the escape character */
634 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
635 const u8 *zEscaped = 0; /* One past the last escaped input char */
drh88b33222014-09-25 03:51:37 +0000636
637 /* The GLOB operator does not have an ESCAPE clause. And LIKE does not
638 ** have the matchSet operator. So we either have to look for one or
639 ** the other, never both. Hence the single variable matchOther is used
640 ** to store the one we have to look for.
641 */
642 matchOther = esc ? esc : pInfo->matchSet;
danielk1977d02eb1f2004-06-06 09:44:03 +0000643
drh42610962012-09-17 18:56:32 +0000644 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000645 if( c==matchAll ){ /* Match "*" */
646 /* Skip over multiple "*" characters in the pattern. If there
647 ** are also "?" characters, skip those as well, but consume a
648 ** single character of the input string for each "?" skipped */
drh42610962012-09-17 18:56:32 +0000649 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000650 || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000651 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000652 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000653 }
danielk1977ad7dd422004-06-06 12:41:49 +0000654 }
drh66150952007-07-23 19:12:41 +0000655 if( c==0 ){
drh9fdfdc82014-09-25 11:08:57 +0000656 return 1; /* "*" at the end of the pattern matches */
drh88b33222014-09-25 03:51:37 +0000657 }else if( c==matchOther ){
658 if( esc ){
659 c = sqlite3Utf8Read(&zPattern);
660 if( c==0 ) return 0;
661 }else{
drh9fdfdc82014-09-25 11:08:57 +0000662 /* "[...]" immediately follows the "*". We have to do a slow
663 ** recursive search in this case, but it is an unusual case. */
drh88b33222014-09-25 03:51:37 +0000664 assert( matchOther<0x80 ); /* '[' is a single-byte character */
665 while( *zString
666 && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
667 SQLITE_SKIP_UTF8(zString);
668 }
669 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000670 }
drh66150952007-07-23 19:12:41 +0000671 }
drh9fdfdc82014-09-25 11:08:57 +0000672
673 /* At this point variable c contains the first character of the
674 ** pattern string past the "*". Search in the input string for the
675 ** first matching character and recursively contine the match from
676 ** that point.
677 **
678 ** For a case-insensitive search, set variable cx to be the same as
679 ** c but in the other case and search the input string for either
680 ** c or cx.
681 */
682 if( c<=0x80 ){
683 u32 cx;
684 if( noCase ){
685 cx = sqlite3Toupper(c);
686 c = sqlite3Tolower(c);
drh66150952007-07-23 19:12:41 +0000687 }else{
drh9fdfdc82014-09-25 11:08:57 +0000688 cx = c;
drh4e5ffc52004-08-31 00:52:37 +0000689 }
drh9fdfdc82014-09-25 11:08:57 +0000690 while( (c2 = *(zString++))!=0 ){
691 if( c2!=c && c2!=cx ) continue;
692 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
693 }
694 }else{
695 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
696 if( c2!=c ) continue;
697 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
698 }
drh66150952007-07-23 19:12:41 +0000699 }
700 return 0;
drh88b33222014-09-25 03:51:37 +0000701 }
drh88b33222014-09-25 03:51:37 +0000702 if( c==matchOther ){
703 if( esc ){
704 c = sqlite3Utf8Read(&zPattern);
705 if( c==0 ) return 0;
drh9fdfdc82014-09-25 11:08:57 +0000706 zEscaped = zPattern;
drh88b33222014-09-25 03:51:37 +0000707 }else{
708 u32 prior_c = 0;
drh9fdfdc82014-09-25 11:08:57 +0000709 int seen = 0;
710 int invert = 0;
drh88b33222014-09-25 03:51:37 +0000711 c = sqlite3Utf8Read(&zString);
712 if( c==0 ) return 0;
713 c2 = sqlite3Utf8Read(&zPattern);
714 if( c2=='^' ){
715 invert = 1;
716 c2 = sqlite3Utf8Read(&zPattern);
717 }
718 if( c2==']' ){
719 if( c==']' ) seen = 1;
720 c2 = sqlite3Utf8Read(&zPattern);
721 }
722 while( c2 && c2!=']' ){
723 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
724 c2 = sqlite3Utf8Read(&zPattern);
725 if( c>=prior_c && c<=c2 ) seen = 1;
726 prior_c = 0;
727 }else{
728 if( c==c2 ){
729 seen = 1;
730 }
731 prior_c = c2;
732 }
733 c2 = sqlite3Utf8Read(&zPattern);
734 }
735 if( c2==0 || (seen ^ invert)==0 ){
736 return 0;
737 }
738 continue;
739 }
740 }
741 c2 = sqlite3Utf8Read(&zString);
742 if( c==c2 ) continue;
drh9fdfdc82014-09-25 11:08:57 +0000743 if( noCase && c<0x80 && c2<0x80 && sqlite3Tolower(c)==sqlite3Tolower(c2) ){
744 continue;
745 }
746 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
747 return 0;
danielk197751ad0ec2004-05-24 12:39:02 +0000748 }
drh4e5ffc52004-08-31 00:52:37 +0000749 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000750}
drh4e5ffc52004-08-31 00:52:37 +0000751
drh55ef4d92005-08-14 01:20:37 +0000752/*
drh56282a52013-04-10 16:13:38 +0000753** The sqlite3_strglob() interface.
754*/
755int sqlite3_strglob(const char *zGlobPattern, const char *zString){
756 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, 0)==0;
757}
758
759/*
drh55ef4d92005-08-14 01:20:37 +0000760** Count the number of times that the LIKE operator (or GLOB which is
761** just a variation of LIKE) gets called. This is used for testing
762** only.
763*/
764#ifdef SQLITE_TEST
765int sqlite3_like_count = 0;
766#endif
767
danielk19773f6b0872004-06-17 05:36:44 +0000768
769/*
770** Implementation of the like() SQL function. This function implements
771** the build-in LIKE operator. The first argument to the function is the
772** pattern and the second argument is the string. So, the SQL statements:
773**
774** A LIKE B
775**
776** is implemented as like(B,A).
777**
drh55ef4d92005-08-14 01:20:37 +0000778** This same function (with a different compareInfo structure) computes
779** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000780*/
781static void likeFunc(
782 sqlite3_context *context,
783 int argc,
784 sqlite3_value **argv
785){
drhbeb818d2007-05-08 15:34:47 +0000786 const unsigned char *zA, *zB;
drh0a32fa62011-06-13 12:19:21 +0000787 u32 escape = 0;
drh27e62db2009-04-02 10:16:17 +0000788 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000789 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000790
drh1f0feef2007-05-15 13:27:07 +0000791 zB = sqlite3_value_text(argv[0]);
792 zA = sqlite3_value_text(argv[1]);
793
drhbeb818d2007-05-08 15:34:47 +0000794 /* Limit the length of the LIKE or GLOB pattern to avoid problems
795 ** of deep recursion and N*N behavior in patternCompare().
796 */
drh27e62db2009-04-02 10:16:17 +0000797 nPat = sqlite3_value_bytes(argv[0]);
798 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
799 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
800 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000801 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
802 return;
803 }
drh1f0feef2007-05-15 13:27:07 +0000804 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000805
danielk19777c6303c2004-11-17 16:41:29 +0000806 if( argc==3 ){
807 /* The escape character string must consist of a single UTF-8 character.
808 ** Otherwise, return an error.
809 */
810 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000811 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000812 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000813 sqlite3_result_error(context,
814 "ESCAPE expression must be a single character", -1);
815 return;
816 }
drh42610962012-09-17 18:56:32 +0000817 escape = sqlite3Utf8Read(&zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000818 }
danielk19773f6b0872004-06-17 05:36:44 +0000819 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000820 struct compareInfo *pInfo = sqlite3_user_data(context);
821#ifdef SQLITE_TEST
822 sqlite3_like_count++;
823#endif
drhbeb818d2007-05-08 15:34:47 +0000824
danielk1977b56fe1f2007-05-09 08:24:44 +0000825 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000826 }
drh8912d102002-05-26 21:34:58 +0000827}
828
829/*
830** Implementation of the NULLIF(x,y) function. The result is the first
831** argument if the arguments are different. The result is NULL if the
832** arguments are equal to each other.
833*/
drhf9b596e2004-05-26 16:54:42 +0000834static void nullifFunc(
835 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000836 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000837 sqlite3_value **argv
838){
danielk1977dc1bdc42004-06-11 10:51:27 +0000839 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000840 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000841 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000842 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000843 }
drh0ac65892002-04-20 14:24:41 +0000844}
845
drh647cb0e2002-11-04 19:32:25 +0000846/*
drh47baebc2009-08-14 16:01:24 +0000847** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000848** of the SQLite library that is running.
849*/
drhf9b596e2004-05-26 16:54:42 +0000850static void versionFunc(
851 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000852 int NotUsed,
853 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000854){
danielk197762c14b32008-11-19 09:05:26 +0000855 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000856 /* IMP: R-48699-48617 This function is an SQL wrapper around the
857 ** sqlite3_libversion() C-interface. */
858 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000859}
860
drh47baebc2009-08-14 16:01:24 +0000861/*
862** Implementation of the sqlite_source_id() function. The result is a string
863** that identifies the particular version of the source code used to build
864** SQLite.
865*/
866static void sourceidFunc(
867 sqlite3_context *context,
868 int NotUsed,
869 sqlite3_value **NotUsed2
870){
871 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000872 /* IMP: R-24470-31136 This function is an SQL wrapper around the
873 ** sqlite3_sourceid() C interface. */
874 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000875}
876
shanehbdea6d12010-02-23 04:19:54 +0000877/*
drh3ca84ef2011-04-25 18:03:10 +0000878** Implementation of the sqlite_log() function. This is a wrapper around
879** sqlite3_log(). The return value is NULL. The function exists purely for
880** its side-effects.
881*/
drh840561f2011-04-27 18:08:42 +0000882static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000883 sqlite3_context *context,
884 int argc,
885 sqlite3_value **argv
886){
887 UNUSED_PARAMETER(argc);
888 UNUSED_PARAMETER(context);
889 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
890}
891
892/*
shanehdc97a8c2010-02-23 20:08:35 +0000893** Implementation of the sqlite_compileoption_used() function.
894** The result is an integer that identifies if the compiler option
895** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000896*/
shanehdc97a8c2010-02-23 20:08:35 +0000897#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
898static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000899 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000900 int argc,
901 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000902){
shanehdc97a8c2010-02-23 20:08:35 +0000903 const char *zOptName;
904 assert( argc==1 );
905 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000906 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
907 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
908 ** function.
909 */
drh264a2d42010-02-25 15:28:41 +0000910 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000911 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000912 }
shanehbdea6d12010-02-23 04:19:54 +0000913}
shanehdc97a8c2010-02-23 20:08:35 +0000914#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
915
916/*
917** Implementation of the sqlite_compileoption_get() function.
918** The result is a string that identifies the compiler options
919** used to build SQLite.
920*/
921#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
922static void compileoptiongetFunc(
923 sqlite3_context *context,
924 int argc,
925 sqlite3_value **argv
926){
927 int n;
928 assert( argc==1 );
929 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000930 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
931 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
932 */
shanehdc97a8c2010-02-23 20:08:35 +0000933 n = sqlite3_value_int(argv[0]);
934 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
935}
936#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000937
drh137c7282007-01-29 17:58:28 +0000938/* Array for converting from half-bytes (nybbles) into ASCII hex
939** digits. */
940static const char hexdigits[] = {
941 '0', '1', '2', '3', '4', '5', '6', '7',
942 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
943};
danielk1977d641d642004-11-18 15:44:29 +0000944
drh47394702003-08-20 01:03:33 +0000945/*
drh47394702003-08-20 01:03:33 +0000946** Implementation of the QUOTE() function. This function takes a single
947** argument. If the argument is numeric, the return value is the same as
948** the argument. If the argument is NULL, the return value is the string
949** "NULL". Otherwise, the argument is enclosed in single quotes with
950** single-quote escapes.
951*/
danielk19770ae8b832004-05-25 12:05:56 +0000952static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000953 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000954 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000955 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000956 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000957 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000958 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000959 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000960 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
961 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
962 if( r1!=r2 ){
963 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
964 }
965 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
966 break;
967 }
968 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000969 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000970 break;
971 }
danielk19773f41e972004-06-08 00:39:01 +0000972 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000973 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000974 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000975 int nBlob = sqlite3_value_bytes(argv[0]);
976 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000977 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000978 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000979 int i;
980 for(i=0; i<nBlob; i++){
981 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
982 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
983 }
984 zText[(nBlob*2)+2] = '\'';
985 zText[(nBlob*2)+3] = '\0';
986 zText[0] = 'X';
987 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000988 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000989 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000990 }
991 break;
992 }
drh9c054832004-05-31 18:51:57 +0000993 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000994 int i,j;
995 u64 n;
drh2646da72005-12-09 20:02:05 +0000996 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000997 char *z;
998
drh7a521cf2007-04-25 18:23:52 +0000999 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +00001000 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +00001001 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +00001002 if( z ){
1003 z[0] = '\'';
1004 for(i=0, j=1; zArg[i]; i++){
1005 z[j++] = zArg[i];
1006 if( zArg[i]=='\'' ){
1007 z[j++] = '\'';
1008 }
drhf9b596e2004-05-26 16:54:42 +00001009 }
danielk1977a1644fd2007-08-29 12:31:25 +00001010 z[j++] = '\'';
1011 z[j] = 0;
1012 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +00001013 }
drha0df4cc2009-02-02 17:29:59 +00001014 break;
1015 }
1016 default: {
1017 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1018 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1019 break;
drhf9b596e2004-05-26 16:54:42 +00001020 }
drh47394702003-08-20 01:03:33 +00001021 }
1022}
1023
drh137c7282007-01-29 17:58:28 +00001024/*
drhd495d8c2013-02-22 19:34:25 +00001025** The unicode() function. Return the integer unicode code-point value
1026** for the first character of the input string.
1027*/
1028static void unicodeFunc(
1029 sqlite3_context *context,
1030 int argc,
1031 sqlite3_value **argv
1032){
1033 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001034 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001035 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1036}
1037
1038/*
1039** The char() function takes zero or more arguments, each of which is
1040** an integer. It constructs a string where each character of the string
1041** is the unicode character for the corresponding integer argument.
1042*/
1043static void charFunc(
1044 sqlite3_context *context,
1045 int argc,
1046 sqlite3_value **argv
1047){
1048 unsigned char *z, *zOut;
1049 int i;
danb72cad12014-03-08 19:07:03 +00001050 zOut = z = sqlite3_malloc( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001051 if( z==0 ){
1052 sqlite3_result_error_nomem(context);
1053 return;
1054 }
1055 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001056 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001057 unsigned c;
1058 x = sqlite3_value_int64(argv[i]);
1059 if( x<0 || x>0x10ffff ) x = 0xfffd;
1060 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001061 if( c<0x00080 ){
1062 *zOut++ = (u8)(c&0xFF);
1063 }else if( c<0x00800 ){
1064 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1065 *zOut++ = 0x80 + (u8)(c & 0x3F);
1066 }else if( c<0x10000 ){
1067 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1068 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1069 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001070 }else{
drhfe7a5d12013-03-07 14:00:04 +00001071 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1072 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1073 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1074 *zOut++ = 0x80 + (u8)(c & 0x3F);
1075 } \
drhd495d8c2013-02-22 19:34:25 +00001076 }
drhbbf483f2014-09-09 20:30:24 +00001077 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001078}
1079
1080/*
drh137c7282007-01-29 17:58:28 +00001081** The hex() function. Interpret the argument as a blob. Return
1082** a hexadecimal rendering as text.
1083*/
1084static void hexFunc(
1085 sqlite3_context *context,
1086 int argc,
1087 sqlite3_value **argv
1088){
1089 int i, n;
1090 const unsigned char *pBlob;
1091 char *zHex, *z;
1092 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001093 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001094 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001095 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001096 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001097 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001098 if( zHex ){
1099 for(i=0; i<n; i++, pBlob++){
1100 unsigned char c = *pBlob;
1101 *(z++) = hexdigits[(c>>4)&0xf];
1102 *(z++) = hexdigits[c&0xf];
1103 }
1104 *z = 0;
1105 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001106 }
drh137c7282007-01-29 17:58:28 +00001107}
1108
drh26b6d902007-03-17 13:27:54 +00001109/*
drh8cff3822007-05-02 02:08:28 +00001110** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1111*/
1112static void zeroblobFunc(
1113 sqlite3_context *context,
1114 int argc,
1115 sqlite3_value **argv
1116){
drh98640a32007-06-07 19:08:32 +00001117 i64 n;
drh27e62db2009-04-02 10:16:17 +00001118 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +00001119 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001120 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001121 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +00001122 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1123 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1124 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +00001125 sqlite3_result_error_toobig(context);
1126 }else{
drhab2f1f92010-01-11 18:26:42 +00001127 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
drh98640a32007-06-07 19:08:32 +00001128 }
drh8cff3822007-05-02 02:08:28 +00001129}
1130
1131/*
drh26b6d902007-03-17 13:27:54 +00001132** The replace() function. Three arguments are all strings: call
1133** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001134** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001135** must be exact. Collating sequences are not used.
1136*/
1137static void replaceFunc(
1138 sqlite3_context *context,
1139 int argc,
1140 sqlite3_value **argv
1141){
1142 const unsigned char *zStr; /* The input string A */
1143 const unsigned char *zPattern; /* The pattern string B */
1144 const unsigned char *zRep; /* The replacement string C */
1145 unsigned char *zOut; /* The output */
1146 int nStr; /* Size of zStr */
1147 int nPattern; /* Size of zPattern */
1148 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001149 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001150 int loopLimit; /* Last zStr[] that might match zPattern[] */
1151 int i, j; /* Loop counters */
1152
1153 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001154 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001155 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001156 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001157 nStr = sqlite3_value_bytes(argv[0]);
1158 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001159 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001160 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001161 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1162 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001163 return;
1164 }
1165 if( zPattern[0]==0 ){
1166 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1167 sqlite3_result_value(context, argv[0]);
1168 return;
1169 }
drh1f0feef2007-05-15 13:27:07 +00001170 nPattern = sqlite3_value_bytes(argv[1]);
1171 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001172 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001173 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001174 nRep = sqlite3_value_bytes(argv[2]);
1175 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001176 nOut = nStr + 1;
1177 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001178 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001179 if( zOut==0 ){
1180 return;
drh26b6d902007-03-17 13:27:54 +00001181 }
drh26b6d902007-03-17 13:27:54 +00001182 loopLimit = nStr - nPattern;
1183 for(i=j=0; i<=loopLimit; i++){
1184 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1185 zOut[j++] = zStr[i];
1186 }else{
drh4a50aac2007-08-23 02:47:53 +00001187 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001188 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001189 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001190 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1191 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1192 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001193 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001194 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001195 return;
1196 }
drh4a50aac2007-08-23 02:47:53 +00001197 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +00001198 zOut = sqlite3_realloc(zOut, (int)nOut);
1199 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001200 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001201 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001202 return;
1203 }
drh26b6d902007-03-17 13:27:54 +00001204 memcpy(&zOut[j], zRep, nRep);
1205 j += nRep;
1206 i += nPattern-1;
1207 }
1208 }
drh2e6400b2007-05-08 15:46:18 +00001209 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001210 memcpy(&zOut[j], &zStr[i], nStr-i);
1211 j += nStr - i;
1212 assert( j<=nOut );
1213 zOut[j] = 0;
1214 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1215}
1216
drh309b3382007-03-17 17:52:42 +00001217/*
1218** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1219** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1220*/
1221static void trimFunc(
1222 sqlite3_context *context,
1223 int argc,
1224 sqlite3_value **argv
1225){
1226 const unsigned char *zIn; /* Input string */
1227 const unsigned char *zCharSet; /* Set of characters to trim */
1228 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001229 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001230 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001231 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1232 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001233 int nChar; /* Number of characters in zCharSet */
1234
drh309b3382007-03-17 17:52:42 +00001235 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1236 return;
1237 }
1238 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001239 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001240 nIn = sqlite3_value_bytes(argv[0]);
1241 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001242 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001243 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001244 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001245 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001246 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001247 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001248 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001249 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001250 return;
drhd1e3a612007-04-27 21:59:52 +00001251 }else{
1252 const unsigned char *z;
1253 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001254 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001255 }
1256 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001257 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001258 if( azChar==0 ){
1259 return;
1260 }
1261 aLen = (unsigned char*)&azChar[nChar];
1262 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001263 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001264 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001265 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001266 }
1267 }
drh309b3382007-03-17 17:52:42 +00001268 }
drhd1e3a612007-04-27 21:59:52 +00001269 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001270 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001271 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001272 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001273 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001274 for(i=0; i<nChar; i++){
1275 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001276 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001277 }
1278 if( i>=nChar ) break;
1279 zIn += len;
1280 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001281 }
1282 }
1283 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001284 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001285 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001286 for(i=0; i<nChar; i++){
1287 len = aLen[i];
1288 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1289 }
1290 if( i>=nChar ) break;
1291 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001292 }
1293 }
drhd1e3a612007-04-27 21:59:52 +00001294 if( zCharSet ){
1295 sqlite3_free(azChar);
1296 }
drh309b3382007-03-17 17:52:42 +00001297 }
1298 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1299}
drh26b6d902007-03-17 13:27:54 +00001300
danielk1977a4de4532008-09-02 15:44:08 +00001301
drh2ba3ccc2009-12-08 02:06:08 +00001302/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1303** is only available if the SQLITE_SOUNDEX compile-time option is used
1304** when SQLite is built.
1305*/
drhd24cc422003-03-27 12:51:24 +00001306#ifdef SQLITE_SOUNDEX
1307/*
1308** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001309**
1310** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1311** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001312*/
drh137c7282007-01-29 17:58:28 +00001313static void soundexFunc(
1314 sqlite3_context *context,
1315 int argc,
1316 sqlite3_value **argv
1317){
drhd24cc422003-03-27 12:51:24 +00001318 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001319 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001320 int i, j;
1321 static const unsigned char iCode[] = {
1322 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1323 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1324 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1326 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1327 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1328 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1329 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1330 };
1331 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001332 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001333 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001334 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001335 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001336 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001337 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001338 for(j=1; j<4 && zIn[i]; i++){
1339 int code = iCode[zIn[i]&0x7f];
1340 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001341 if( code!=prevcode ){
1342 prevcode = code;
1343 zResult[j++] = code + '0';
1344 }
1345 }else{
1346 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001347 }
1348 }
1349 while( j<4 ){
1350 zResult[j++] = '0';
1351 }
1352 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001353 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001354 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001355 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1356 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001357 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001358 }
1359}
drh2ba3ccc2009-12-08 02:06:08 +00001360#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001361
drhfdb83b22006-06-17 14:12:47 +00001362#ifndef SQLITE_OMIT_LOAD_EXTENSION
1363/*
1364** A function that loads a shared-library extension then returns NULL.
1365*/
1366static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001367 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001368 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001369 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001370 char *zErrMsg = 0;
1371
1372 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001373 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001374 }else{
1375 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001376 }
drh7a521cf2007-04-25 18:23:52 +00001377 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001378 sqlite3_result_error(context, zErrMsg, -1);
1379 sqlite3_free(zErrMsg);
1380 }
1381}
1382#endif
1383
danielk197701427a62005-01-11 13:02:33 +00001384
drh0ac65892002-04-20 14:24:41 +00001385/*
drhd3a149e2002-02-24 17:12:53 +00001386** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001387** sum() or avg() aggregate computation.
1388*/
1389typedef struct SumCtx SumCtx;
1390struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001391 double rSum; /* Floating point sum */
1392 i64 iSum; /* Integer sum */
1393 i64 cnt; /* Number of elements summed */
1394 u8 overflow; /* True if integer overflow seen */
1395 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001396};
1397
1398/*
drha97fdd32006-01-12 22:17:50 +00001399** Routines used to compute the sum, average, and total.
1400**
1401** The SUM() function follows the (broken) SQL standard which means
1402** that it returns NULL if it sums over no inputs. TOTAL returns
1403** 0.0 in that case. In addition, TOTAL always returns a float where
1404** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001405** value. TOTAL never fails, but SUM might through an exception if
1406** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001407*/
danielk19770ae8b832004-05-25 12:05:56 +00001408static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001409 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001410 int type;
drh3f219f42005-09-08 19:45:57 +00001411 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001412 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001413 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001414 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001415 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001416 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001417 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001418 i64 v = sqlite3_value_int64(argv[0]);
1419 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001420 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1421 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001422 }
1423 }else{
drh8c08e862006-02-11 17:34:00 +00001424 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001425 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001426 }
drh739105c2002-05-29 23:22:23 +00001427 }
drhdd5baa92002-02-27 19:50:59 +00001428}
danielk19770ae8b832004-05-25 12:05:56 +00001429static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001430 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001431 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001432 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001433 if( p->overflow ){
1434 sqlite3_result_error(context,"integer overflow",-1);
1435 }else if( p->approx ){
1436 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001437 }else{
drh8c08e862006-02-11 17:34:00 +00001438 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001439 }
drh3d1d95e2005-09-08 10:37:01 +00001440 }
drhdd5baa92002-02-27 19:50:59 +00001441}
danielk19770ae8b832004-05-25 12:05:56 +00001442static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001443 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001444 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001445 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001446 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001447 }
1448}
drha97fdd32006-01-12 22:17:50 +00001449static void totalFinalize(sqlite3_context *context){
1450 SumCtx *p;
1451 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001452 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1453 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001454}
drhdd5baa92002-02-27 19:50:59 +00001455
1456/*
drh0bce8352002-02-28 00:41:10 +00001457** The following structure keeps track of state information for the
1458** count() aggregate function.
1459*/
1460typedef struct CountCtx CountCtx;
1461struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001462 i64 n;
drh0bce8352002-02-28 00:41:10 +00001463};
drhdd5baa92002-02-27 19:50:59 +00001464
drh0bce8352002-02-28 00:41:10 +00001465/*
1466** Routines to implement the count() aggregate function.
1467*/
danielk19770ae8b832004-05-25 12:05:56 +00001468static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001469 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001470 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001471 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001472 p->n++;
1473 }
drh2e79c3d2009-04-08 23:04:14 +00001474
drhd3264c72009-04-15 13:39:47 +00001475#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001476 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1477 ** sure it still operates correctly, verify that its count agrees with our
1478 ** internal count when using count(*) and when the total count can be
1479 ** expressed as a 32-bit integer. */
1480 assert( argc==1 || p==0 || p->n>0x7fffffff
1481 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001482#endif
drh0bce8352002-02-28 00:41:10 +00001483}
danielk19770ae8b832004-05-25 12:05:56 +00001484static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001485 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001486 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001487 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001488}
1489
1490/*
drh0bce8352002-02-28 00:41:10 +00001491** Routines to implement min() and max() aggregate functions.
1492*/
danielk197762c14b32008-11-19 09:05:26 +00001493static void minmaxStep(
1494 sqlite3_context *context,
1495 int NotUsed,
1496 sqlite3_value **argv
1497){
danielk197788208052004-05-25 01:13:20 +00001498 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001499 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001500 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001501
drh9eb516c2004-07-18 20:52:32 +00001502 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001503 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001504
drh94a6d992012-02-02 18:42:09 +00001505 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1506 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1507 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001508 int max;
1509 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001510 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001511 /* This step function is used for both the min() and max() aggregates,
1512 ** the only difference between the two being that the sense of the
1513 ** comparison is inverted. For the max() aggregate, the
1514 ** sqlite3_user_data() function returns (void *)-1. For min() it
1515 ** returns (void *)db, where db is the sqlite3* database pointer.
1516 ** Therefore the next statement sets variable 'max' to 1 for the max()
1517 ** aggregate, or 0 for min().
1518 */
drh309b3382007-03-17 17:52:42 +00001519 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001520 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001521 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001522 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001523 }else{
1524 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001525 }
drh268380c2004-02-25 13:47:31 +00001526 }else{
drh035e5632014-09-16 14:16:31 +00001527 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001528 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001529 }
1530}
danielk19770ae8b832004-05-25 12:05:56 +00001531static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001532 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001533 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1534 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001535 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001536 sqlite3_result_value(context, pRes);
1537 }
1538 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001539 }
1540}
drhdd5baa92002-02-27 19:50:59 +00001541
drhb0689692007-11-01 17:38:30 +00001542/*
1543** group_concat(EXPR, ?SEPARATOR?)
1544*/
1545static void groupConcatStep(
1546 sqlite3_context *context,
1547 int argc,
1548 sqlite3_value **argv
1549){
1550 const char *zVal;
drhade86482007-11-28 22:36:40 +00001551 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001552 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001553 int nVal, nSep;
1554 assert( argc==1 || argc==2 );
1555 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001556 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1557
1558 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001559 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001560 int firstTerm = pAccum->useMalloc==0;
drhb9755982010-07-24 16:34:37 +00001561 pAccum->useMalloc = 2;
drhbb4957f2008-03-20 14:03:29 +00001562 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001563 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001564 if( argc==2 ){
1565 zSep = (char*)sqlite3_value_text(argv[1]);
1566 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001567 }else{
1568 zSep = ",";
drhade86482007-11-28 22:36:40 +00001569 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001570 }
drha9ab4812013-12-11 11:00:44 +00001571 if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001572 }
drh07d31172009-02-02 21:57:05 +00001573 zVal = (char*)sqlite3_value_text(argv[0]);
1574 nVal = sqlite3_value_bytes(argv[0]);
drh8009c9b2014-05-07 20:24:00 +00001575 if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001576 }
1577}
1578static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001579 StrAccum *pAccum;
1580 pAccum = sqlite3_aggregate_context(context, 0);
1581 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001582 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001583 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001584 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001585 sqlite3_result_error_nomem(context);
1586 }else{
1587 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1588 sqlite3_free);
1589 }
drhb0689692007-11-01 17:38:30 +00001590 }
1591}
drh4e5ffc52004-08-31 00:52:37 +00001592
drhd3a149e2002-02-24 17:12:53 +00001593/*
drha4741842010-04-25 20:58:37 +00001594** This routine does per-connection function registration. Most
1595** of the built-in functions above are part of the global function set.
1596** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001597*/
drh9bb575f2004-09-06 17:24:11 +00001598void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001599 int rc = sqlite3_overload_function(db, "MATCH", 2);
1600 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1601 if( rc==SQLITE_NOMEM ){
1602 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001603 }
drh55ef4d92005-08-14 01:20:37 +00001604}
1605
1606/*
1607** Set the LIKEOPT flag on the 2-argument function with the given name.
1608*/
drh1bd10f82008-12-10 21:19:56 +00001609static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001610 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001611 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1612 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001613 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001614 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001615 }
1616}
1617
1618/*
1619** Register the built-in LIKE and GLOB functions. The caseSensitive
1620** parameter determines whether or not the LIKE operator is case
1621** sensitive. GLOB is always case sensitive.
1622*/
1623void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1624 struct compareInfo *pInfo;
1625 if( caseSensitive ){
1626 pInfo = (struct compareInfo*)&likeInfoAlt;
1627 }else{
1628 pInfo = (struct compareInfo*)&likeInfoNorm;
1629 }
drh901e9942010-12-15 18:54:37 +00001630 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1631 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1632 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001633 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001634 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1635 setLikeOptFlag(db, "like",
1636 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001637}
1638
1639/*
1640** pExpr points to an expression which implements a function. If
1641** it is appropriate to apply the LIKE optimization to that function
1642** then set aWc[0] through aWc[2] to the wildcard characters and
1643** return TRUE. If the function is not a LIKE-style function then
1644** return FALSE.
1645*/
drhd64fe2f2005-08-28 17:00:23 +00001646int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001647 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001648 if( pExpr->op!=TK_FUNCTION
1649 || !pExpr->x.pList
1650 || pExpr->x.pList->nExpr!=2
1651 ){
drh55ef4d92005-08-14 01:20:37 +00001652 return 0;
1653 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001654 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001655 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1656 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001657 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001658 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001659 return 0;
1660 }
1661
1662 /* The memcpy() statement assumes that the wildcard characters are
1663 ** the first three statements in the compareInfo structure. The
1664 ** asserts() that follow verify that assumption
1665 */
1666 memcpy(aWc, pDef->pUserData, 3);
1667 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1668 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1669 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001670 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001671 return 1;
drhdc04c582002-02-24 01:55:15 +00001672}
danielk19778c0a7912008-08-20 14:49:23 +00001673
drh70a8ca32008-08-21 18:49:27 +00001674/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001675** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001676** to the global function hash table. This occurs at start-time (as
1677** a consequence of calling sqlite3_initialize()).
1678**
1679** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001680*/
1681void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001682 /*
1683 ** The following array holds FuncDef structures for all of the functions
1684 ** defined in this file.
1685 **
1686 ** The array cannot be constant since changes are made to the
1687 ** FuncDef.pHash elements at start-time. The elements of this array
1688 ** are read-only after initialization is complete.
1689 */
1690 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1691 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1692 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1693 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1694 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1695 FUNCTION(trim, 1, 3, 0, trimFunc ),
1696 FUNCTION(trim, 2, 3, 0, trimFunc ),
1697 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1698 FUNCTION(min, 0, 0, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001699 AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize,
1700 SQLITE_FUNC_MINMAX ),
danielk197793ce7412008-09-01 19:14:02 +00001701 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1702 FUNCTION(max, 0, 1, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001703 AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize,
1704 SQLITE_FUNC_MINMAX ),
drha748fdc2012-03-28 01:34:47 +00001705 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1706 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001707 FUNCTION(instr, 2, 0, 0, instrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001708 FUNCTION(substr, 2, 0, 0, substrFunc ),
1709 FUNCTION(substr, 3, 0, 0, substrFunc ),
drha5c14162013-12-17 15:03:06 +00001710 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001711 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1712 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001713 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001714#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001715 FUNCTION(round, 1, 0, 0, roundFunc ),
1716 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001717#endif
danielk197793ce7412008-09-01 19:14:02 +00001718 FUNCTION(upper, 1, 0, 0, upperFunc ),
1719 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1720 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001721 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhcca9f3d2013-09-06 15:23:29 +00001722 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001723 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001724 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
1725 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhaae0f9e2013-09-11 11:38:58 +00001726 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh03202a92014-06-17 16:11:28 +00001727 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhb1fba282013-11-21 14:33:48 +00001728 VFUNCTION(random, 0, 0, 0, randomFunc ),
1729 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001730 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1731 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001732 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001733 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
drhf442e332014-09-10 19:01:14 +00001734#if SQLITE_USER_AUTHENTICATION
1735 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
1736#endif
shanehdc97a8c2010-02-23 20:08:35 +00001737#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
drh8bb76d32010-02-26 16:37:47 +00001738 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1739 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001740#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
danielk197793ce7412008-09-01 19:14:02 +00001741 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001742 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1743 VFUNCTION(changes, 0, 0, 0, changes ),
1744 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001745 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1746 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1747 #ifdef SQLITE_SOUNDEX
1748 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1749 #endif
1750 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1751 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1752 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1753 #endif
1754 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1755 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1756 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
drh9588ad92014-09-15 14:46:02 +00001757 AGGREGATE2(count, 0, 0, 0, countStep, countFinalize,
1758 SQLITE_FUNC_COUNT ),
danielk197793ce7412008-09-01 19:14:02 +00001759 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001760 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1761 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001762
1763 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1764 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1765 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1766 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1767 #else
1768 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1769 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1770 #endif
1771 };
1772
drh70a8ca32008-08-21 18:49:27 +00001773 int i;
danielk197793ce7412008-09-01 19:14:02 +00001774 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001775 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001776
drh70a8ca32008-08-21 18:49:27 +00001777 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001778 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001779 }
drh777c5382008-08-21 20:21:34 +00001780 sqlite3RegisterDateTimeFunctions();
drh545f5872010-04-24 14:02:59 +00001781#ifndef SQLITE_OMIT_ALTERTABLE
1782 sqlite3AlterFunctions();
1783#endif
dan0106e372013-08-12 16:34:32 +00001784#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1785 sqlite3AnalyzeFunctions();
1786#endif
drh70a8ca32008-08-21 18:49:27 +00001787}