blob: e421b2861d09609b1730bd55925e0f4cf1a19597 [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){
25 return context->pColl;
26}
27
drh0bce8352002-02-28 00:41:10 +000028/*
drh7a957892012-02-02 17:35:43 +000029** Indicate that the accumulator load should be skipped on this
30** iteration of the aggregate loop.
31*/
32static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
33 context->skipFlag = 1;
34}
35
36/*
drh0bce8352002-02-28 00:41:10 +000037** Implementation of the non-aggregate min() and max() functions
38*/
drhf9b596e2004-05-26 16:54:42 +000039static void minmaxFunc(
40 sqlite3_context *context,
41 int argc,
42 sqlite3_value **argv
43){
drh0bce8352002-02-28 00:41:10 +000044 int i;
drh268380c2004-02-25 13:47:31 +000045 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000046 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000047 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000048
drh65595cd2009-02-02 16:32:55 +000049 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000050 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000051 pColl = sqlite3GetFuncCollSeq(context);
52 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000053 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000054 iBest = 0;
drh9c054832004-05-31 18:51:57 +000055 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000056 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000057 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000058 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000059 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000060 iBest = i;
drh0bce8352002-02-28 00:41:10 +000061 }
62 }
drhf4479502004-05-27 03:12:53 +000063 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000064}
drh0bce8352002-02-28 00:41:10 +000065
drh268380c2004-02-25 13:47:31 +000066/*
67** Return the type of the argument.
68*/
drhf9b596e2004-05-26 16:54:42 +000069static void typeofFunc(
70 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000071 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000072 sqlite3_value **argv
73){
danielk197735bb9d02004-05-24 12:55:54 +000074 const char *z = 0;
danielk197762c14b32008-11-19 09:05:26 +000075 UNUSED_PARAMETER(NotUsed);
danielk197735bb9d02004-05-24 12:55:54 +000076 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000077 case SQLITE_INTEGER: z = "integer"; break;
78 case SQLITE_TEXT: z = "text"; break;
79 case SQLITE_FLOAT: z = "real"; break;
80 case SQLITE_BLOB: z = "blob"; break;
drh65595cd2009-02-02 16:32:55 +000081 default: z = "null"; break;
danielk197735bb9d02004-05-24 12:55:54 +000082 }
danielk1977d8123362004-06-12 09:25:12 +000083 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000084}
85
drh5708d2d2005-06-22 10:53:59 +000086
87/*
drh0bce8352002-02-28 00:41:10 +000088** Implementation of the length() function
89*/
drhf9b596e2004-05-26 16:54:42 +000090static void lengthFunc(
91 sqlite3_context *context,
92 int argc,
93 sqlite3_value **argv
94){
drh0bce8352002-02-28 00:41:10 +000095 int len;
96
97 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +000098 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +000099 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000100 case SQLITE_BLOB:
101 case SQLITE_INTEGER:
102 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000103 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000104 break;
105 }
drh9c054832004-05-31 18:51:57 +0000106 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000107 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000108 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000109 len = 0;
110 while( *z ){
111 len++;
112 SQLITE_SKIP_UTF8(z);
113 }
drhf4479502004-05-27 03:12:53 +0000114 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000115 break;
116 }
117 default: {
118 sqlite3_result_null(context);
119 break;
120 }
121 }
drh0bce8352002-02-28 00:41:10 +0000122}
123
124/*
drh2ba3ccc2009-12-08 02:06:08 +0000125** Implementation of the abs() function.
126**
127** IMP: R-23979-26855 The abs(X) function returns the absolute value of
128** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000129*/
danielk19770ae8b832004-05-25 12:05:56 +0000130static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000131 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000132 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000133 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000134 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000135 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000136 if( iVal<0 ){
drh693e6712014-01-24 22:58:00 +0000137 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000138 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
139 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000140 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000141 sqlite3_result_error(context, "integer overflow", -1);
142 return;
143 }
144 iVal = -iVal;
145 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000146 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000147 break;
148 }
drh9c054832004-05-31 18:51:57 +0000149 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000150 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000151 sqlite3_result_null(context);
152 break;
153 }
154 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000155 /* Because sqlite3_value_double() returns 0.0 if the argument is not
156 ** something that can be converted into a number, we have:
157 ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
158 ** cannot be converted to a numeric value.
159 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000160 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000161 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000162 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000163 break;
164 }
165 }
drh0bce8352002-02-28 00:41:10 +0000166}
167
168/*
drhd55e0722012-10-25 03:07:29 +0000169** Implementation of the instr() function.
170**
171** instr(haystack,needle) finds the first occurrence of needle
172** in haystack and returns the number of previous characters plus 1,
173** or 0 if needle does not occur within haystack.
174**
175** If both haystack and needle are BLOBs, then the result is one more than
176** the number of bytes in haystack prior to the first occurrence of needle,
177** or 0 if needle never occurs in haystack.
178*/
179static void instrFunc(
180 sqlite3_context *context,
181 int argc,
182 sqlite3_value **argv
183){
184 const unsigned char *zHaystack;
185 const unsigned char *zNeedle;
186 int nHaystack;
187 int nNeedle;
188 int typeHaystack, typeNeedle;
189 int N = 1;
190 int isText;
191
drh68c804b2012-12-04 11:03:11 +0000192 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000193 typeHaystack = sqlite3_value_type(argv[0]);
194 typeNeedle = sqlite3_value_type(argv[1]);
195 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
196 nHaystack = sqlite3_value_bytes(argv[0]);
197 nNeedle = sqlite3_value_bytes(argv[1]);
198 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
199 zHaystack = sqlite3_value_blob(argv[0]);
200 zNeedle = sqlite3_value_blob(argv[1]);
201 isText = 0;
202 }else{
203 zHaystack = sqlite3_value_text(argv[0]);
204 zNeedle = sqlite3_value_text(argv[1]);
205 isText = 1;
206 }
207 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
208 N++;
209 do{
210 nHaystack--;
211 zHaystack++;
212 }while( isText && (zHaystack[0]&0xc0)==0x80 );
213 }
214 if( nNeedle>nHaystack ) N = 0;
215 sqlite3_result_int(context, N);
216}
217
218/*
drha5c14162013-12-17 15:03:06 +0000219** Implementation of the printf() function.
220*/
221static void printfFunc(
222 sqlite3_context *context,
223 int argc,
224 sqlite3_value **argv
225){
226 PrintfArguments x;
227 StrAccum str;
228 const char *zFormat;
229 int n;
230
231 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
232 x.nArg = argc-1;
233 x.nUsed = 0;
234 x.apArg = argv+1;
235 sqlite3StrAccumInit(&str, 0, 0, SQLITE_MAX_LENGTH);
236 str.db = sqlite3_context_db_handle(context);
237 sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x);
238 n = str.nChar;
239 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
240 SQLITE_DYNAMIC);
241 }
242}
243
244/*
drhf764e6f2007-05-15 01:13:47 +0000245** Implementation of the substr() function.
246**
247** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
248** p1 is 1-indexed. So substr(x,1,1) returns the first character
249** of x. If x is text, then we actually count UTF-8 characters.
250** If x is a blob, then we count bytes.
251**
252** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000253**
drhf7b54962013-05-28 12:11:54 +0000254** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000255*/
drhf9b596e2004-05-26 16:54:42 +0000256static void substrFunc(
257 sqlite3_context *context,
258 int argc,
259 sqlite3_value **argv
260){
drh2646da72005-12-09 20:02:05 +0000261 const unsigned char *z;
262 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000263 int len;
drhf764e6f2007-05-15 01:13:47 +0000264 int p0type;
drh023ae032007-05-08 12:12:16 +0000265 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000266 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000267
drh64f31512007-10-12 19:11:55 +0000268 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000269 if( sqlite3_value_type(argv[1])==SQLITE_NULL
270 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
271 ){
272 return;
273 }
drhf764e6f2007-05-15 01:13:47 +0000274 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000275 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000276 if( p0type==SQLITE_BLOB ){
277 len = sqlite3_value_bytes(argv[0]);
278 z = sqlite3_value_blob(argv[0]);
279 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000280 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000281 }else{
282 z = sqlite3_value_text(argv[0]);
283 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000284 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000285 if( p1<0 ){
286 for(z2=z; *z2; len++){
287 SQLITE_SKIP_UTF8(z2);
288 }
drh4a919112007-05-15 11:55:09 +0000289 }
drhf764e6f2007-05-15 01:13:47 +0000290 }
drh64f31512007-10-12 19:11:55 +0000291 if( argc==3 ){
292 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000293 if( p2<0 ){
294 p2 = -p2;
295 negP2 = 1;
296 }
drh64f31512007-10-12 19:11:55 +0000297 }else{
drhbb4957f2008-03-20 14:03:29 +0000298 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000299 }
drh0bce8352002-02-28 00:41:10 +0000300 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000301 p1 += len;
drh653bc752002-02-28 03:31:10 +0000302 if( p1<0 ){
303 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000304 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000305 p1 = 0;
306 }
drh0bce8352002-02-28 00:41:10 +0000307 }else if( p1>0 ){
308 p1--;
drh65595cd2009-02-02 16:32:55 +0000309 }else if( p2>0 ){
310 p2--;
drh0bce8352002-02-28 00:41:10 +0000311 }
drh65595cd2009-02-02 16:32:55 +0000312 if( negP2 ){
313 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000314 if( p1<0 ){
315 p2 += p1;
316 p1 = 0;
317 }
318 }
drh65595cd2009-02-02 16:32:55 +0000319 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000320 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000321 while( *z && p1 ){
322 SQLITE_SKIP_UTF8(z);
323 p1--;
drhf764e6f2007-05-15 01:13:47 +0000324 }
drh4a919112007-05-15 11:55:09 +0000325 for(z2=z; *z2 && p2; p2--){
326 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000327 }
drhbbf483f2014-09-09 20:30:24 +0000328 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
329 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000330 }else{
drh4adc4cb2009-11-11 20:53:31 +0000331 if( p1+p2>len ){
332 p2 = len-p1;
333 if( p2<0 ) p2 = 0;
334 }
drhbbf483f2014-09-09 20:30:24 +0000335 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000336 }
drh0bce8352002-02-28 00:41:10 +0000337}
338
339/*
340** Implementation of the round() function
341*/
shanefbd60f82009-02-04 03:59:25 +0000342#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000343static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000344 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000345 double r;
drh50d654d2009-06-03 01:24:54 +0000346 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000347 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000348 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000349 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000350 n = sqlite3_value_int(argv[1]);
351 if( n>30 ) n = 30;
352 if( n<0 ) n = 0;
353 }
drhd589a922006-03-02 03:02:48 +0000354 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000355 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000356 /* If Y==0 and X will fit in a 64-bit int,
357 ** handle the rounding directly,
358 ** otherwise use printf.
359 */
360 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
361 r = (double)((sqlite_int64)(r+0.5));
362 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
363 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000364 }else{
shaneh147e1762010-02-17 04:19:27 +0000365 zBuf = sqlite3_mprintf("%.*f",n,r);
366 if( zBuf==0 ){
367 sqlite3_result_error_nomem(context);
368 return;
369 }
drh9339da12010-09-30 00:50:49 +0000370 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000371 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000372 }
shaneh147e1762010-02-17 04:19:27 +0000373 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000374}
shanefbd60f82009-02-04 03:59:25 +0000375#endif
drhdc04c582002-02-24 01:55:15 +0000376
danielk197726783a52007-08-29 14:06:22 +0000377/*
378** Allocate nByte bytes of space using sqlite3_malloc(). If the
379** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000380** the database handle that malloc() has failed and return NULL.
381** If nByte is larger than the maximum string or blob length, then
382** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000383*/
drhb1a6c3c2008-03-20 16:30:17 +0000384static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000385 char *z;
drh27e62db2009-04-02 10:16:17 +0000386 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000387 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000388 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
389 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
390 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000391 sqlite3_result_error_toobig(context);
392 z = 0;
393 }else{
drhda4ca9d2014-09-09 17:27:35 +0000394 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000395 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000396 sqlite3_result_error_nomem(context);
397 }
danielk1977a1644fd2007-08-29 12:31:25 +0000398 }
399 return z;
400}
401
drhdc04c582002-02-24 01:55:15 +0000402/*
403** Implementation of the upper() and lower() SQL functions.
404*/
danielk19770ae8b832004-05-25 12:05:56 +0000405static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000406 char *z1;
407 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000408 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000409 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000410 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000411 n = sqlite3_value_bytes(argv[0]);
412 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
413 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000414 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000415 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000416 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000417 for(i=0; i<n; i++){
418 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000419 }
drhdf901d32011-10-13 18:00:11 +0000420 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000421 }
drhdc04c582002-02-24 01:55:15 +0000422 }
423}
danielk19770ae8b832004-05-25 12:05:56 +0000424static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000425 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000426 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000427 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000428 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000429 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000430 n = sqlite3_value_bytes(argv[0]);
431 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
432 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000433 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000434 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000435 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000436 for(i=0; i<n; i++){
437 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000438 }
drhdf901d32011-10-13 18:00:11 +0000439 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000440 }
drhdc04c582002-02-24 01:55:15 +0000441 }
442}
443
drhae6bb952009-11-11 00:24:31 +0000444/*
drhcca9f3d2013-09-06 15:23:29 +0000445** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
446** as VDBE code so that unused argument values do not have to be computed.
447** However, we still need some kind of function implementation for this
448** routines in the function table. The noopFunc macro provides this.
449** noopFunc will never be called so it doesn't matter what the implementation
450** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000451*/
drhcca9f3d2013-09-06 15:23:29 +0000452#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000453
454/*
drhf9ffac92002-03-02 19:00:31 +0000455** Implementation of random(). Return a random integer.
456*/
drhf9b596e2004-05-26 16:54:42 +0000457static void randomFunc(
458 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000459 int NotUsed,
460 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000461){
drh52fc8492006-02-23 21:43:55 +0000462 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000463 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000464 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000465 if( r<0 ){
466 /* We need to prevent a random number of 0x8000000000000000
467 ** (or -9223372036854775808) since when you do abs() of that
468 ** number of you get the same value back again. To do this
469 ** in a way that is testable, mask the sign bit off of negative
470 ** values, resulting in a positive value. Then take the
471 ** 2s complement of that positive value. The end result can
472 ** therefore be no less than -9223372036854775807.
473 */
drhaf8001b2012-02-11 19:53:24 +0000474 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000475 }
drh52fc8492006-02-23 21:43:55 +0000476 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000477}
478
479/*
drh137c7282007-01-29 17:58:28 +0000480** Implementation of randomblob(N). Return a random blob
481** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000482*/
drh137c7282007-01-29 17:58:28 +0000483static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000484 sqlite3_context *context,
485 int argc,
486 sqlite3_value **argv
487){
drh137c7282007-01-29 17:58:28 +0000488 int n;
489 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000490 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000491 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000492 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000493 if( n<1 ){
494 n = 1;
495 }
danielk1977a1644fd2007-08-29 12:31:25 +0000496 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000497 if( p ){
drh2fa18682008-03-19 14:15:34 +0000498 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000499 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000500 }
drh63cf66f2007-01-29 15:50:05 +0000501}
502
503/*
drh6ed41ad2002-04-06 14:10:47 +0000504** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000505** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000506*/
danielk197751ad0ec2004-05-24 12:39:02 +0000507static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000508 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000509 int NotUsed,
510 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000511){
drhfa4a4b92008-03-19 21:45:51 +0000512 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000513 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000514 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
515 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
516 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000517 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000518}
519
rdcf146a772004-02-25 22:51:06 +0000520/*
drhab2f1f92010-01-11 18:26:42 +0000521** Implementation of the changes() SQL function.
522**
523** IMP: R-62073-11209 The changes() SQL function is a wrapper
524** around the sqlite3_changes() C/C++ function and hence follows the same
525** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000526*/
danielk1977b28af712004-06-21 06:50:26 +0000527static void changes(
drhf9b596e2004-05-26 16:54:42 +0000528 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000529 int NotUsed,
530 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000531){
drhfa4a4b92008-03-19 21:45:51 +0000532 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000533 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000534 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000535}
rdcf146a772004-02-25 22:51:06 +0000536
537/*
danielk1977b28af712004-06-21 06:50:26 +0000538** Implementation of the total_changes() SQL function. The return value is
539** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000540*/
danielk1977b28af712004-06-21 06:50:26 +0000541static void total_changes(
542 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000543 int NotUsed,
544 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000545){
drhfa4a4b92008-03-19 21:45:51 +0000546 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000547 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000548 /* IMP: R-52756-41993 This function is a wrapper around the
549 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000550 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000551}
552
drh6ed41ad2002-04-06 14:10:47 +0000553/*
drh4e5ffc52004-08-31 00:52:37 +0000554** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000555*/
drh4e5ffc52004-08-31 00:52:37 +0000556struct compareInfo {
557 u8 matchAll;
558 u8 matchOne;
559 u8 matchSet;
560 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000561};
drh55ef4d92005-08-14 01:20:37 +0000562
drhb9175ae2007-12-07 18:39:04 +0000563/*
564** For LIKE and GLOB matching on EBCDIC machines, assume that every
565** character is exactly one byte in size. Also, all characters are
566** able to participate in upper-case-to-lower-case mappings in EBCDIC
567** whereas only characters less than 0x80 do in ASCII.
568*/
569#if defined(SQLITE_EBCDIC)
drh42610962012-09-17 18:56:32 +0000570# define sqlite3Utf8Read(A) (*((*A)++))
drh6e1b1672013-09-12 23:12:08 +0000571# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000572#else
drh6e1b1672013-09-12 23:12:08 +0000573# define GlobUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000574#endif
575
drh4e5ffc52004-08-31 00:52:37 +0000576static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000577/* The correct SQL-92 behavior is for the LIKE operator to ignore
578** case. Thus 'a' LIKE 'A' would be true. */
579static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
580/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
581** is case sensitive causing 'a' LIKE 'A' to be false */
582static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000583
584/*
drh4e5ffc52004-08-31 00:52:37 +0000585** Compare two UTF-8 strings for equality where the first string can
586** potentially be a "glob" expression. Return true (1) if they
587** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000588**
drh4e5ffc52004-08-31 00:52:37 +0000589** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000590**
drh4e5ffc52004-08-31 00:52:37 +0000591** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000592**
drh4e5ffc52004-08-31 00:52:37 +0000593** '?' Matches exactly one character.
594**
595** [...] Matches one character from the enclosed list of
596** characters.
597**
598** [^...] Matches one character not in the enclosed list.
599**
600** With the [...] and [^...] matching, a ']' character can be included
601** in the list by making it the first character after '[' or '^'. A
602** range of characters can be specified using '-'. Example:
603** "[a-z]" matches any single lower-case letter. To match a '-', make
604** it the last character in the list.
605**
606** This routine is usually quick, but can be N**2 in the worst case.
607**
608** Hints: to match '*' or '?', put them in "[]". Like this:
609**
610** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000611*/
danielk19777c6303c2004-11-17 16:41:29 +0000612static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000613 const u8 *zPattern, /* The glob pattern */
614 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000615 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh0a32fa62011-06-13 12:19:21 +0000616 u32 esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000617){
drh0a32fa62011-06-13 12:19:21 +0000618 u32 c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000619 int invert;
620 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000621 u8 matchOne = pInfo->matchOne;
622 u8 matchAll = pInfo->matchAll;
623 u8 matchSet = pInfo->matchSet;
624 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000625 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000626
drh42610962012-09-17 18:56:32 +0000627 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
628 if( c==matchAll && !prevEscape ){
629 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000630 || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000631 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000632 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000633 }
danielk1977ad7dd422004-06-06 12:41:49 +0000634 }
drh66150952007-07-23 19:12:41 +0000635 if( c==0 ){
636 return 1;
637 }else if( c==esc ){
drh42610962012-09-17 18:56:32 +0000638 c = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000639 if( c==0 ){
640 return 0;
641 }
642 }else if( c==matchSet ){
643 assert( esc==0 ); /* This is GLOB, not LIKE */
644 assert( matchSet<0x80 ); /* '[' is a single-byte character */
645 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000646 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000647 }
648 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000649 }
drh42610962012-09-17 18:56:32 +0000650 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000651 if( noCase ){
drh6e1b1672013-09-12 23:12:08 +0000652 GlobUpperToLower(c2);
653 GlobUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000654 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000655 c2 = sqlite3Utf8Read(&zString);
drh6e1b1672013-09-12 23:12:08 +0000656 GlobUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000657 }
drh66150952007-07-23 19:12:41 +0000658 }else{
659 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000660 c2 = sqlite3Utf8Read(&zString);
drh66150952007-07-23 19:12:41 +0000661 }
drh4e5ffc52004-08-31 00:52:37 +0000662 }
drh66150952007-07-23 19:12:41 +0000663 if( c2==0 ) return 0;
664 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
665 }
666 return 0;
drh42610962012-09-17 18:56:32 +0000667 }else if( c==matchOne && !prevEscape ){
668 if( sqlite3Utf8Read(&zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000669 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000670 }
drh4e5ffc52004-08-31 00:52:37 +0000671 }else if( c==matchSet ){
drh1aa4f3e2011-06-15 12:43:36 +0000672 u32 prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000673 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000674 seen = 0;
675 invert = 0;
drh42610962012-09-17 18:56:32 +0000676 c = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000677 if( c==0 ) return 0;
drh42610962012-09-17 18:56:32 +0000678 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000679 if( c2=='^' ){
680 invert = 1;
drh42610962012-09-17 18:56:32 +0000681 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000682 }
drh4e5ffc52004-08-31 00:52:37 +0000683 if( c2==']' ){
684 if( c==']' ) seen = 1;
drh42610962012-09-17 18:56:32 +0000685 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000686 }
drh66150952007-07-23 19:12:41 +0000687 while( c2 && c2!=']' ){
688 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh42610962012-09-17 18:56:32 +0000689 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000690 if( c>=prior_c && c<=c2 ) seen = 1;
691 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000692 }else{
drh66150952007-07-23 19:12:41 +0000693 if( c==c2 ){
694 seen = 1;
695 }
drh4e5ffc52004-08-31 00:52:37 +0000696 prior_c = c2;
697 }
drh42610962012-09-17 18:56:32 +0000698 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000699 }
drh66150952007-07-23 19:12:41 +0000700 if( c2==0 || (seen ^ invert)==0 ){
701 return 0;
702 }
703 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000704 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000705 }else{
drh42610962012-09-17 18:56:32 +0000706 c2 = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000707 if( noCase ){
drh6e1b1672013-09-12 23:12:08 +0000708 GlobUpperToLower(c);
709 GlobUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000710 }
drh66150952007-07-23 19:12:41 +0000711 if( c!=c2 ){
712 return 0;
713 }
danielk19777c6303c2004-11-17 16:41:29 +0000714 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000715 }
danielk197751ad0ec2004-05-24 12:39:02 +0000716 }
drh4e5ffc52004-08-31 00:52:37 +0000717 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000718}
drh4e5ffc52004-08-31 00:52:37 +0000719
drh55ef4d92005-08-14 01:20:37 +0000720/*
drh56282a52013-04-10 16:13:38 +0000721** The sqlite3_strglob() interface.
722*/
723int sqlite3_strglob(const char *zGlobPattern, const char *zString){
724 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, 0)==0;
725}
726
727/*
drh55ef4d92005-08-14 01:20:37 +0000728** Count the number of times that the LIKE operator (or GLOB which is
729** just a variation of LIKE) gets called. This is used for testing
730** only.
731*/
732#ifdef SQLITE_TEST
733int sqlite3_like_count = 0;
734#endif
735
danielk19773f6b0872004-06-17 05:36:44 +0000736
737/*
738** Implementation of the like() SQL function. This function implements
739** the build-in LIKE operator. The first argument to the function is the
740** pattern and the second argument is the string. So, the SQL statements:
741**
742** A LIKE B
743**
744** is implemented as like(B,A).
745**
drh55ef4d92005-08-14 01:20:37 +0000746** This same function (with a different compareInfo structure) computes
747** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000748*/
749static void likeFunc(
750 sqlite3_context *context,
751 int argc,
752 sqlite3_value **argv
753){
drhbeb818d2007-05-08 15:34:47 +0000754 const unsigned char *zA, *zB;
drh0a32fa62011-06-13 12:19:21 +0000755 u32 escape = 0;
drh27e62db2009-04-02 10:16:17 +0000756 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000757 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000758
drh1f0feef2007-05-15 13:27:07 +0000759 zB = sqlite3_value_text(argv[0]);
760 zA = sqlite3_value_text(argv[1]);
761
drhbeb818d2007-05-08 15:34:47 +0000762 /* Limit the length of the LIKE or GLOB pattern to avoid problems
763 ** of deep recursion and N*N behavior in patternCompare().
764 */
drh27e62db2009-04-02 10:16:17 +0000765 nPat = sqlite3_value_bytes(argv[0]);
766 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
767 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
768 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000769 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
770 return;
771 }
drh1f0feef2007-05-15 13:27:07 +0000772 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000773
danielk19777c6303c2004-11-17 16:41:29 +0000774 if( argc==3 ){
775 /* The escape character string must consist of a single UTF-8 character.
776 ** Otherwise, return an error.
777 */
778 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000779 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000780 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000781 sqlite3_result_error(context,
782 "ESCAPE expression must be a single character", -1);
783 return;
784 }
drh42610962012-09-17 18:56:32 +0000785 escape = sqlite3Utf8Read(&zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000786 }
danielk19773f6b0872004-06-17 05:36:44 +0000787 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000788 struct compareInfo *pInfo = sqlite3_user_data(context);
789#ifdef SQLITE_TEST
790 sqlite3_like_count++;
791#endif
drhbeb818d2007-05-08 15:34:47 +0000792
danielk1977b56fe1f2007-05-09 08:24:44 +0000793 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000794 }
drh8912d102002-05-26 21:34:58 +0000795}
796
797/*
798** Implementation of the NULLIF(x,y) function. The result is the first
799** argument if the arguments are different. The result is NULL if the
800** arguments are equal to each other.
801*/
drhf9b596e2004-05-26 16:54:42 +0000802static void nullifFunc(
803 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000804 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000805 sqlite3_value **argv
806){
danielk1977dc1bdc42004-06-11 10:51:27 +0000807 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000808 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000809 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000810 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000811 }
drh0ac65892002-04-20 14:24:41 +0000812}
813
drh647cb0e2002-11-04 19:32:25 +0000814/*
drh47baebc2009-08-14 16:01:24 +0000815** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000816** of the SQLite library that is running.
817*/
drhf9b596e2004-05-26 16:54:42 +0000818static void versionFunc(
819 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000820 int NotUsed,
821 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000822){
danielk197762c14b32008-11-19 09:05:26 +0000823 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000824 /* IMP: R-48699-48617 This function is an SQL wrapper around the
825 ** sqlite3_libversion() C-interface. */
826 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000827}
828
drh47baebc2009-08-14 16:01:24 +0000829/*
830** Implementation of the sqlite_source_id() function. The result is a string
831** that identifies the particular version of the source code used to build
832** SQLite.
833*/
834static void sourceidFunc(
835 sqlite3_context *context,
836 int NotUsed,
837 sqlite3_value **NotUsed2
838){
839 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000840 /* IMP: R-24470-31136 This function is an SQL wrapper around the
841 ** sqlite3_sourceid() C interface. */
842 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000843}
844
shanehbdea6d12010-02-23 04:19:54 +0000845/*
drh3ca84ef2011-04-25 18:03:10 +0000846** Implementation of the sqlite_log() function. This is a wrapper around
847** sqlite3_log(). The return value is NULL. The function exists purely for
848** its side-effects.
849*/
drh840561f2011-04-27 18:08:42 +0000850static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000851 sqlite3_context *context,
852 int argc,
853 sqlite3_value **argv
854){
855 UNUSED_PARAMETER(argc);
856 UNUSED_PARAMETER(context);
857 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
858}
859
860/*
shanehdc97a8c2010-02-23 20:08:35 +0000861** Implementation of the sqlite_compileoption_used() function.
862** The result is an integer that identifies if the compiler option
863** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000864*/
shanehdc97a8c2010-02-23 20:08:35 +0000865#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
866static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000867 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000868 int argc,
869 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000870){
shanehdc97a8c2010-02-23 20:08:35 +0000871 const char *zOptName;
872 assert( argc==1 );
873 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000874 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
875 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
876 ** function.
877 */
drh264a2d42010-02-25 15:28:41 +0000878 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000879 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000880 }
shanehbdea6d12010-02-23 04:19:54 +0000881}
shanehdc97a8c2010-02-23 20:08:35 +0000882#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
883
884/*
885** Implementation of the sqlite_compileoption_get() function.
886** The result is a string that identifies the compiler options
887** used to build SQLite.
888*/
889#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
890static void compileoptiongetFunc(
891 sqlite3_context *context,
892 int argc,
893 sqlite3_value **argv
894){
895 int n;
896 assert( argc==1 );
897 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000898 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
899 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
900 */
shanehdc97a8c2010-02-23 20:08:35 +0000901 n = sqlite3_value_int(argv[0]);
902 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
903}
904#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000905
drh137c7282007-01-29 17:58:28 +0000906/* Array for converting from half-bytes (nybbles) into ASCII hex
907** digits. */
908static const char hexdigits[] = {
909 '0', '1', '2', '3', '4', '5', '6', '7',
910 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
911};
danielk1977d641d642004-11-18 15:44:29 +0000912
drh47394702003-08-20 01:03:33 +0000913/*
drh47394702003-08-20 01:03:33 +0000914** Implementation of the QUOTE() function. This function takes a single
915** argument. If the argument is numeric, the return value is the same as
916** the argument. If the argument is NULL, the return value is the string
917** "NULL". Otherwise, the argument is enclosed in single quotes with
918** single-quote escapes.
919*/
danielk19770ae8b832004-05-25 12:05:56 +0000920static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000921 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000922 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000923 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000924 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000925 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000926 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000927 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000928 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
929 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
930 if( r1!=r2 ){
931 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
932 }
933 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
934 break;
935 }
936 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000937 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000938 break;
939 }
danielk19773f41e972004-06-08 00:39:01 +0000940 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000941 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000942 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000943 int nBlob = sqlite3_value_bytes(argv[0]);
944 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000945 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000946 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000947 int i;
948 for(i=0; i<nBlob; i++){
949 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
950 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
951 }
952 zText[(nBlob*2)+2] = '\'';
953 zText[(nBlob*2)+3] = '\0';
954 zText[0] = 'X';
955 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000956 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000957 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000958 }
959 break;
960 }
drh9c054832004-05-31 18:51:57 +0000961 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000962 int i,j;
963 u64 n;
drh2646da72005-12-09 20:02:05 +0000964 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000965 char *z;
966
drh7a521cf2007-04-25 18:23:52 +0000967 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000968 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000969 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000970 if( z ){
971 z[0] = '\'';
972 for(i=0, j=1; zArg[i]; i++){
973 z[j++] = zArg[i];
974 if( zArg[i]=='\'' ){
975 z[j++] = '\'';
976 }
drhf9b596e2004-05-26 16:54:42 +0000977 }
danielk1977a1644fd2007-08-29 12:31:25 +0000978 z[j++] = '\'';
979 z[j] = 0;
980 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000981 }
drha0df4cc2009-02-02 17:29:59 +0000982 break;
983 }
984 default: {
985 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
986 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
987 break;
drhf9b596e2004-05-26 16:54:42 +0000988 }
drh47394702003-08-20 01:03:33 +0000989 }
990}
991
drh137c7282007-01-29 17:58:28 +0000992/*
drhd495d8c2013-02-22 19:34:25 +0000993** The unicode() function. Return the integer unicode code-point value
994** for the first character of the input string.
995*/
996static void unicodeFunc(
997 sqlite3_context *context,
998 int argc,
999 sqlite3_value **argv
1000){
1001 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001002 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001003 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1004}
1005
1006/*
1007** The char() function takes zero or more arguments, each of which is
1008** an integer. It constructs a string where each character of the string
1009** is the unicode character for the corresponding integer argument.
1010*/
1011static void charFunc(
1012 sqlite3_context *context,
1013 int argc,
1014 sqlite3_value **argv
1015){
1016 unsigned char *z, *zOut;
1017 int i;
danb72cad12014-03-08 19:07:03 +00001018 zOut = z = sqlite3_malloc( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001019 if( z==0 ){
1020 sqlite3_result_error_nomem(context);
1021 return;
1022 }
1023 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001024 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001025 unsigned c;
1026 x = sqlite3_value_int64(argv[i]);
1027 if( x<0 || x>0x10ffff ) x = 0xfffd;
1028 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001029 if( c<0x00080 ){
1030 *zOut++ = (u8)(c&0xFF);
1031 }else if( c<0x00800 ){
1032 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1033 *zOut++ = 0x80 + (u8)(c & 0x3F);
1034 }else if( c<0x10000 ){
1035 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1036 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1037 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001038 }else{
drhfe7a5d12013-03-07 14:00:04 +00001039 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1040 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1041 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1042 *zOut++ = 0x80 + (u8)(c & 0x3F);
1043 } \
drhd495d8c2013-02-22 19:34:25 +00001044 }
drhbbf483f2014-09-09 20:30:24 +00001045 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001046}
1047
1048/*
drh137c7282007-01-29 17:58:28 +00001049** The hex() function. Interpret the argument as a blob. Return
1050** a hexadecimal rendering as text.
1051*/
1052static void hexFunc(
1053 sqlite3_context *context,
1054 int argc,
1055 sqlite3_value **argv
1056){
1057 int i, n;
1058 const unsigned char *pBlob;
1059 char *zHex, *z;
1060 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001061 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001062 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001063 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001064 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001065 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001066 if( zHex ){
1067 for(i=0; i<n; i++, pBlob++){
1068 unsigned char c = *pBlob;
1069 *(z++) = hexdigits[(c>>4)&0xf];
1070 *(z++) = hexdigits[c&0xf];
1071 }
1072 *z = 0;
1073 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001074 }
drh137c7282007-01-29 17:58:28 +00001075}
1076
drh26b6d902007-03-17 13:27:54 +00001077/*
drh8cff3822007-05-02 02:08:28 +00001078** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1079*/
1080static void zeroblobFunc(
1081 sqlite3_context *context,
1082 int argc,
1083 sqlite3_value **argv
1084){
drh98640a32007-06-07 19:08:32 +00001085 i64 n;
drh27e62db2009-04-02 10:16:17 +00001086 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +00001087 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001088 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001089 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +00001090 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1091 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1092 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +00001093 sqlite3_result_error_toobig(context);
1094 }else{
drhab2f1f92010-01-11 18:26:42 +00001095 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
drh98640a32007-06-07 19:08:32 +00001096 }
drh8cff3822007-05-02 02:08:28 +00001097}
1098
1099/*
drh26b6d902007-03-17 13:27:54 +00001100** The replace() function. Three arguments are all strings: call
1101** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001102** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001103** must be exact. Collating sequences are not used.
1104*/
1105static void replaceFunc(
1106 sqlite3_context *context,
1107 int argc,
1108 sqlite3_value **argv
1109){
1110 const unsigned char *zStr; /* The input string A */
1111 const unsigned char *zPattern; /* The pattern string B */
1112 const unsigned char *zRep; /* The replacement string C */
1113 unsigned char *zOut; /* The output */
1114 int nStr; /* Size of zStr */
1115 int nPattern; /* Size of zPattern */
1116 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001117 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001118 int loopLimit; /* Last zStr[] that might match zPattern[] */
1119 int i, j; /* Loop counters */
1120
1121 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001122 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001123 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001124 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001125 nStr = sqlite3_value_bytes(argv[0]);
1126 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001127 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001128 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001129 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1130 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001131 return;
1132 }
1133 if( zPattern[0]==0 ){
1134 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1135 sqlite3_result_value(context, argv[0]);
1136 return;
1137 }
drh1f0feef2007-05-15 13:27:07 +00001138 nPattern = sqlite3_value_bytes(argv[1]);
1139 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001140 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001141 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001142 nRep = sqlite3_value_bytes(argv[2]);
1143 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001144 nOut = nStr + 1;
1145 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001146 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001147 if( zOut==0 ){
1148 return;
drh26b6d902007-03-17 13:27:54 +00001149 }
drh26b6d902007-03-17 13:27:54 +00001150 loopLimit = nStr - nPattern;
1151 for(i=j=0; i<=loopLimit; i++){
1152 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1153 zOut[j++] = zStr[i];
1154 }else{
drh4a50aac2007-08-23 02:47:53 +00001155 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001156 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001157 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001158 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1159 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1160 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001161 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001162 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001163 return;
1164 }
drh4a50aac2007-08-23 02:47:53 +00001165 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +00001166 zOut = sqlite3_realloc(zOut, (int)nOut);
1167 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001168 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001169 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001170 return;
1171 }
drh26b6d902007-03-17 13:27:54 +00001172 memcpy(&zOut[j], zRep, nRep);
1173 j += nRep;
1174 i += nPattern-1;
1175 }
1176 }
drh2e6400b2007-05-08 15:46:18 +00001177 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001178 memcpy(&zOut[j], &zStr[i], nStr-i);
1179 j += nStr - i;
1180 assert( j<=nOut );
1181 zOut[j] = 0;
1182 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1183}
1184
drh309b3382007-03-17 17:52:42 +00001185/*
1186** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1187** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1188*/
1189static void trimFunc(
1190 sqlite3_context *context,
1191 int argc,
1192 sqlite3_value **argv
1193){
1194 const unsigned char *zIn; /* Input string */
1195 const unsigned char *zCharSet; /* Set of characters to trim */
1196 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001197 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001198 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001199 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1200 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001201 int nChar; /* Number of characters in zCharSet */
1202
drh309b3382007-03-17 17:52:42 +00001203 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1204 return;
1205 }
1206 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001207 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001208 nIn = sqlite3_value_bytes(argv[0]);
1209 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001210 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001211 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001212 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001213 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001214 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001215 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001216 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001217 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001218 return;
drhd1e3a612007-04-27 21:59:52 +00001219 }else{
1220 const unsigned char *z;
1221 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001222 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001223 }
1224 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001225 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001226 if( azChar==0 ){
1227 return;
1228 }
1229 aLen = (unsigned char*)&azChar[nChar];
1230 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001231 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001232 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001233 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001234 }
1235 }
drh309b3382007-03-17 17:52:42 +00001236 }
drhd1e3a612007-04-27 21:59:52 +00001237 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001238 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001239 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001240 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001241 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001242 for(i=0; i<nChar; i++){
1243 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001244 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001245 }
1246 if( i>=nChar ) break;
1247 zIn += len;
1248 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001249 }
1250 }
1251 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001252 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001253 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001254 for(i=0; i<nChar; i++){
1255 len = aLen[i];
1256 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1257 }
1258 if( i>=nChar ) break;
1259 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001260 }
1261 }
drhd1e3a612007-04-27 21:59:52 +00001262 if( zCharSet ){
1263 sqlite3_free(azChar);
1264 }
drh309b3382007-03-17 17:52:42 +00001265 }
1266 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1267}
drh26b6d902007-03-17 13:27:54 +00001268
danielk1977a4de4532008-09-02 15:44:08 +00001269
drh2ba3ccc2009-12-08 02:06:08 +00001270/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1271** is only available if the SQLITE_SOUNDEX compile-time option is used
1272** when SQLite is built.
1273*/
drhd24cc422003-03-27 12:51:24 +00001274#ifdef SQLITE_SOUNDEX
1275/*
1276** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001277**
1278** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1279** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001280*/
drh137c7282007-01-29 17:58:28 +00001281static void soundexFunc(
1282 sqlite3_context *context,
1283 int argc,
1284 sqlite3_value **argv
1285){
drhd24cc422003-03-27 12:51:24 +00001286 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001287 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001288 int i, j;
1289 static const unsigned char iCode[] = {
1290 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1294 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1295 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1296 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1297 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1298 };
1299 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001300 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001301 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001302 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001303 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001304 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001305 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001306 for(j=1; j<4 && zIn[i]; i++){
1307 int code = iCode[zIn[i]&0x7f];
1308 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001309 if( code!=prevcode ){
1310 prevcode = code;
1311 zResult[j++] = code + '0';
1312 }
1313 }else{
1314 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001315 }
1316 }
1317 while( j<4 ){
1318 zResult[j++] = '0';
1319 }
1320 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001321 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001322 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001323 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1324 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001325 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001326 }
1327}
drh2ba3ccc2009-12-08 02:06:08 +00001328#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001329
drhfdb83b22006-06-17 14:12:47 +00001330#ifndef SQLITE_OMIT_LOAD_EXTENSION
1331/*
1332** A function that loads a shared-library extension then returns NULL.
1333*/
1334static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001335 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001336 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001337 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001338 char *zErrMsg = 0;
1339
1340 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001341 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001342 }else{
1343 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001344 }
drh7a521cf2007-04-25 18:23:52 +00001345 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001346 sqlite3_result_error(context, zErrMsg, -1);
1347 sqlite3_free(zErrMsg);
1348 }
1349}
1350#endif
1351
danielk197701427a62005-01-11 13:02:33 +00001352
drh0ac65892002-04-20 14:24:41 +00001353/*
drhd3a149e2002-02-24 17:12:53 +00001354** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001355** sum() or avg() aggregate computation.
1356*/
1357typedef struct SumCtx SumCtx;
1358struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001359 double rSum; /* Floating point sum */
1360 i64 iSum; /* Integer sum */
1361 i64 cnt; /* Number of elements summed */
1362 u8 overflow; /* True if integer overflow seen */
1363 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001364};
1365
1366/*
drha97fdd32006-01-12 22:17:50 +00001367** Routines used to compute the sum, average, and total.
1368**
1369** The SUM() function follows the (broken) SQL standard which means
1370** that it returns NULL if it sums over no inputs. TOTAL returns
1371** 0.0 in that case. In addition, TOTAL always returns a float where
1372** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001373** value. TOTAL never fails, but SUM might through an exception if
1374** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001375*/
danielk19770ae8b832004-05-25 12:05:56 +00001376static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001377 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001378 int type;
drh3f219f42005-09-08 19:45:57 +00001379 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001380 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001381 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001382 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001383 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001384 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001385 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001386 i64 v = sqlite3_value_int64(argv[0]);
1387 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001388 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1389 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001390 }
1391 }else{
drh8c08e862006-02-11 17:34:00 +00001392 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001393 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001394 }
drh739105c2002-05-29 23:22:23 +00001395 }
drhdd5baa92002-02-27 19:50:59 +00001396}
danielk19770ae8b832004-05-25 12:05:56 +00001397static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001398 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001399 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001400 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001401 if( p->overflow ){
1402 sqlite3_result_error(context,"integer overflow",-1);
1403 }else if( p->approx ){
1404 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001405 }else{
drh8c08e862006-02-11 17:34:00 +00001406 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001407 }
drh3d1d95e2005-09-08 10:37:01 +00001408 }
drhdd5baa92002-02-27 19:50:59 +00001409}
danielk19770ae8b832004-05-25 12:05:56 +00001410static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001411 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001412 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001413 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001414 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001415 }
1416}
drha97fdd32006-01-12 22:17:50 +00001417static void totalFinalize(sqlite3_context *context){
1418 SumCtx *p;
1419 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001420 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1421 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001422}
drhdd5baa92002-02-27 19:50:59 +00001423
1424/*
drh0bce8352002-02-28 00:41:10 +00001425** The following structure keeps track of state information for the
1426** count() aggregate function.
1427*/
1428typedef struct CountCtx CountCtx;
1429struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001430 i64 n;
drh0bce8352002-02-28 00:41:10 +00001431};
drhdd5baa92002-02-27 19:50:59 +00001432
drh0bce8352002-02-28 00:41:10 +00001433/*
1434** Routines to implement the count() aggregate function.
1435*/
danielk19770ae8b832004-05-25 12:05:56 +00001436static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001437 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001438 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001439 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001440 p->n++;
1441 }
drh2e79c3d2009-04-08 23:04:14 +00001442
drhd3264c72009-04-15 13:39:47 +00001443#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001444 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1445 ** sure it still operates correctly, verify that its count agrees with our
1446 ** internal count when using count(*) and when the total count can be
1447 ** expressed as a 32-bit integer. */
1448 assert( argc==1 || p==0 || p->n>0x7fffffff
1449 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001450#endif
drh0bce8352002-02-28 00:41:10 +00001451}
danielk19770ae8b832004-05-25 12:05:56 +00001452static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001453 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001454 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001455 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001456}
1457
1458/*
drh0bce8352002-02-28 00:41:10 +00001459** Routines to implement min() and max() aggregate functions.
1460*/
danielk197762c14b32008-11-19 09:05:26 +00001461static void minmaxStep(
1462 sqlite3_context *context,
1463 int NotUsed,
1464 sqlite3_value **argv
1465){
danielk197788208052004-05-25 01:13:20 +00001466 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001467 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001468 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001469
drh9eb516c2004-07-18 20:52:32 +00001470 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001471 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001472
drh94a6d992012-02-02 18:42:09 +00001473 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1474 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1475 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001476 int max;
1477 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001478 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001479 /* This step function is used for both the min() and max() aggregates,
1480 ** the only difference between the two being that the sense of the
1481 ** comparison is inverted. For the max() aggregate, the
1482 ** sqlite3_user_data() function returns (void *)-1. For min() it
1483 ** returns (void *)db, where db is the sqlite3* database pointer.
1484 ** Therefore the next statement sets variable 'max' to 1 for the max()
1485 ** aggregate, or 0 for min().
1486 */
drh309b3382007-03-17 17:52:42 +00001487 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001488 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001489 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001490 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001491 }else{
1492 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001493 }
drh268380c2004-02-25 13:47:31 +00001494 }else{
drhb21c8cd2007-08-21 19:33:56 +00001495 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001496 }
1497}
danielk19770ae8b832004-05-25 12:05:56 +00001498static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001499 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001500 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1501 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001502 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001503 sqlite3_result_value(context, pRes);
1504 }
1505 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001506 }
1507}
drhdd5baa92002-02-27 19:50:59 +00001508
drhb0689692007-11-01 17:38:30 +00001509/*
1510** group_concat(EXPR, ?SEPARATOR?)
1511*/
1512static void groupConcatStep(
1513 sqlite3_context *context,
1514 int argc,
1515 sqlite3_value **argv
1516){
1517 const char *zVal;
drhade86482007-11-28 22:36:40 +00001518 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001519 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001520 int nVal, nSep;
1521 assert( argc==1 || argc==2 );
1522 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001523 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1524
1525 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001526 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001527 int firstTerm = pAccum->useMalloc==0;
drhb9755982010-07-24 16:34:37 +00001528 pAccum->useMalloc = 2;
drhbb4957f2008-03-20 14:03:29 +00001529 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001530 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001531 if( argc==2 ){
1532 zSep = (char*)sqlite3_value_text(argv[1]);
1533 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001534 }else{
1535 zSep = ",";
drhade86482007-11-28 22:36:40 +00001536 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001537 }
drha9ab4812013-12-11 11:00:44 +00001538 if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001539 }
drh07d31172009-02-02 21:57:05 +00001540 zVal = (char*)sqlite3_value_text(argv[0]);
1541 nVal = sqlite3_value_bytes(argv[0]);
drh8009c9b2014-05-07 20:24:00 +00001542 if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001543 }
1544}
1545static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001546 StrAccum *pAccum;
1547 pAccum = sqlite3_aggregate_context(context, 0);
1548 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001549 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001550 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001551 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001552 sqlite3_result_error_nomem(context);
1553 }else{
1554 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1555 sqlite3_free);
1556 }
drhb0689692007-11-01 17:38:30 +00001557 }
1558}
drh4e5ffc52004-08-31 00:52:37 +00001559
drhd3a149e2002-02-24 17:12:53 +00001560/*
drha4741842010-04-25 20:58:37 +00001561** This routine does per-connection function registration. Most
1562** of the built-in functions above are part of the global function set.
1563** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001564*/
drh9bb575f2004-09-06 17:24:11 +00001565void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001566 int rc = sqlite3_overload_function(db, "MATCH", 2);
1567 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1568 if( rc==SQLITE_NOMEM ){
1569 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001570 }
drh55ef4d92005-08-14 01:20:37 +00001571}
1572
1573/*
1574** Set the LIKEOPT flag on the 2-argument function with the given name.
1575*/
drh1bd10f82008-12-10 21:19:56 +00001576static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001577 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001578 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1579 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001580 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001581 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001582 }
1583}
1584
1585/*
1586** Register the built-in LIKE and GLOB functions. The caseSensitive
1587** parameter determines whether or not the LIKE operator is case
1588** sensitive. GLOB is always case sensitive.
1589*/
1590void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1591 struct compareInfo *pInfo;
1592 if( caseSensitive ){
1593 pInfo = (struct compareInfo*)&likeInfoAlt;
1594 }else{
1595 pInfo = (struct compareInfo*)&likeInfoNorm;
1596 }
drh901e9942010-12-15 18:54:37 +00001597 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1598 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1599 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001600 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001601 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1602 setLikeOptFlag(db, "like",
1603 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001604}
1605
1606/*
1607** pExpr points to an expression which implements a function. If
1608** it is appropriate to apply the LIKE optimization to that function
1609** then set aWc[0] through aWc[2] to the wildcard characters and
1610** return TRUE. If the function is not a LIKE-style function then
1611** return FALSE.
1612*/
drhd64fe2f2005-08-28 17:00:23 +00001613int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001614 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001615 if( pExpr->op!=TK_FUNCTION
1616 || !pExpr->x.pList
1617 || pExpr->x.pList->nExpr!=2
1618 ){
drh55ef4d92005-08-14 01:20:37 +00001619 return 0;
1620 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001621 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001622 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1623 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001624 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001625 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001626 return 0;
1627 }
1628
1629 /* The memcpy() statement assumes that the wildcard characters are
1630 ** the first three statements in the compareInfo structure. The
1631 ** asserts() that follow verify that assumption
1632 */
1633 memcpy(aWc, pDef->pUserData, 3);
1634 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1635 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1636 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001637 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001638 return 1;
drhdc04c582002-02-24 01:55:15 +00001639}
danielk19778c0a7912008-08-20 14:49:23 +00001640
drh70a8ca32008-08-21 18:49:27 +00001641/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001642** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001643** to the global function hash table. This occurs at start-time (as
1644** a consequence of calling sqlite3_initialize()).
1645**
1646** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001647*/
1648void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001649 /*
1650 ** The following array holds FuncDef structures for all of the functions
1651 ** defined in this file.
1652 **
1653 ** The array cannot be constant since changes are made to the
1654 ** FuncDef.pHash elements at start-time. The elements of this array
1655 ** are read-only after initialization is complete.
1656 */
1657 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1658 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1659 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1660 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1661 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1662 FUNCTION(trim, 1, 3, 0, trimFunc ),
1663 FUNCTION(trim, 2, 3, 0, trimFunc ),
1664 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1665 FUNCTION(min, 0, 0, 1, 0 ),
1666 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1667 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1668 FUNCTION(max, 0, 1, 1, 0 ),
1669 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
drha748fdc2012-03-28 01:34:47 +00001670 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1671 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001672 FUNCTION(instr, 2, 0, 0, instrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001673 FUNCTION(substr, 2, 0, 0, substrFunc ),
1674 FUNCTION(substr, 3, 0, 0, substrFunc ),
drha5c14162013-12-17 15:03:06 +00001675 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001676 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1677 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001678 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001679#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001680 FUNCTION(round, 1, 0, 0, roundFunc ),
1681 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001682#endif
danielk197793ce7412008-09-01 19:14:02 +00001683 FUNCTION(upper, 1, 0, 0, upperFunc ),
1684 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1685 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001686 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhcca9f3d2013-09-06 15:23:29 +00001687 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001688 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001689 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
1690 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhaae0f9e2013-09-11 11:38:58 +00001691 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh03202a92014-06-17 16:11:28 +00001692 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhb1fba282013-11-21 14:33:48 +00001693 VFUNCTION(random, 0, 0, 0, randomFunc ),
1694 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001695 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1696 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001697 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001698 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001699#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
drh8bb76d32010-02-26 16:37:47 +00001700 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1701 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001702#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
danielk197793ce7412008-09-01 19:14:02 +00001703 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001704 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1705 VFUNCTION(changes, 0, 0, 0, changes ),
1706 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001707 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1708 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1709 #ifdef SQLITE_SOUNDEX
1710 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1711 #endif
1712 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1713 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1714 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1715 #endif
1716 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1717 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1718 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001719 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
drhd36e1042013-09-06 13:10:12 +00001720 {0,SQLITE_UTF8|SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
danielk197793ce7412008-09-01 19:14:02 +00001721 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001722 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1723 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001724
1725 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1726 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1727 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1728 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1729 #else
1730 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1731 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1732 #endif
1733 };
1734
drh70a8ca32008-08-21 18:49:27 +00001735 int i;
danielk197793ce7412008-09-01 19:14:02 +00001736 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001737 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001738
drh70a8ca32008-08-21 18:49:27 +00001739 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001740 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001741 }
drh777c5382008-08-21 20:21:34 +00001742 sqlite3RegisterDateTimeFunctions();
drh545f5872010-04-24 14:02:59 +00001743#ifndef SQLITE_OMIT_ALTERTABLE
1744 sqlite3AlterFunctions();
1745#endif
dan0106e372013-08-12 16:34:32 +00001746#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1747 sqlite3AnalyzeFunctions();
1748#endif
drh70a8ca32008-08-21 18:49:27 +00001749}