blob: dbc837554118472c507a95bf44f94094b117e0eb [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*************************************************************************
drhede7ae32014-08-06 11:58:40 +000012** This file contains the C-language implementions for many of the SQL
13** 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 }
drh1bd10f82008-12-10 21:19:56 +0000328 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000329 }else{
drh4adc4cb2009-11-11 20:53:31 +0000330 if( p1+p2>len ){
331 p2 = len-p1;
332 if( p2<0 ) p2 = 0;
333 }
drh1bd10f82008-12-10 21:19:56 +0000334 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000335 }
drh0bce8352002-02-28 00:41:10 +0000336}
337
338/*
339** Implementation of the round() function
340*/
shanefbd60f82009-02-04 03:59:25 +0000341#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000342static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000343 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000344 double r;
drh50d654d2009-06-03 01:24:54 +0000345 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000346 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000347 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000348 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000349 n = sqlite3_value_int(argv[1]);
350 if( n>30 ) n = 30;
351 if( n<0 ) n = 0;
352 }
drhd589a922006-03-02 03:02:48 +0000353 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000354 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000355 /* If Y==0 and X will fit in a 64-bit int,
356 ** handle the rounding directly,
357 ** otherwise use printf.
358 */
359 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
360 r = (double)((sqlite_int64)(r+0.5));
361 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
362 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000363 }else{
shaneh147e1762010-02-17 04:19:27 +0000364 zBuf = sqlite3_mprintf("%.*f",n,r);
365 if( zBuf==0 ){
366 sqlite3_result_error_nomem(context);
367 return;
368 }
drh9339da12010-09-30 00:50:49 +0000369 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000370 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000371 }
shaneh147e1762010-02-17 04:19:27 +0000372 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000373}
shanefbd60f82009-02-04 03:59:25 +0000374#endif
drhdc04c582002-02-24 01:55:15 +0000375
danielk197726783a52007-08-29 14:06:22 +0000376/*
377** Allocate nByte bytes of space using sqlite3_malloc(). If the
378** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000379** the database handle that malloc() has failed and return NULL.
380** If nByte is larger than the maximum string or blob length, then
381** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000382*/
drhb1a6c3c2008-03-20 16:30:17 +0000383static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000384 char *z;
drh27e62db2009-04-02 10:16:17 +0000385 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000386 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000387 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
388 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
389 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000390 sqlite3_result_error_toobig(context);
391 z = 0;
392 }else{
drh1bd10f82008-12-10 21:19:56 +0000393 z = sqlite3Malloc((int)nByte);
drhef31c6a2009-04-02 09:07:12 +0000394 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000395 sqlite3_result_error_nomem(context);
396 }
danielk1977a1644fd2007-08-29 12:31:25 +0000397 }
398 return z;
399}
400
drhdc04c582002-02-24 01:55:15 +0000401/*
402** Implementation of the upper() and lower() SQL functions.
403*/
danielk19770ae8b832004-05-25 12:05:56 +0000404static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000405 char *z1;
406 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000407 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000408 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000409 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000410 n = sqlite3_value_bytes(argv[0]);
411 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
412 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000413 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000414 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000415 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000416 for(i=0; i<n; i++){
417 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000418 }
drhdf901d32011-10-13 18:00:11 +0000419 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000420 }
drhdc04c582002-02-24 01:55:15 +0000421 }
422}
danielk19770ae8b832004-05-25 12:05:56 +0000423static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000424 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000425 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000426 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000427 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000428 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000429 n = sqlite3_value_bytes(argv[0]);
430 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
431 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000432 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000433 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000434 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000435 for(i=0; i<n; i++){
436 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000437 }
drhdf901d32011-10-13 18:00:11 +0000438 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000439 }
drhdc04c582002-02-24 01:55:15 +0000440 }
441}
442
drhae6bb952009-11-11 00:24:31 +0000443/*
drhcca9f3d2013-09-06 15:23:29 +0000444** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
445** as VDBE code so that unused argument values do not have to be computed.
446** However, we still need some kind of function implementation for this
447** routines in the function table. The noopFunc macro provides this.
448** noopFunc will never be called so it doesn't matter what the implementation
449** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000450*/
drhcca9f3d2013-09-06 15:23:29 +0000451#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000452
453/*
drhf9ffac92002-03-02 19:00:31 +0000454** Implementation of random(). Return a random integer.
455*/
drhf9b596e2004-05-26 16:54:42 +0000456static void randomFunc(
457 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000458 int NotUsed,
459 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000460){
drh52fc8492006-02-23 21:43:55 +0000461 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000462 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000463 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000464 if( r<0 ){
465 /* We need to prevent a random number of 0x8000000000000000
466 ** (or -9223372036854775808) since when you do abs() of that
467 ** number of you get the same value back again. To do this
468 ** in a way that is testable, mask the sign bit off of negative
469 ** values, resulting in a positive value. Then take the
470 ** 2s complement of that positive value. The end result can
471 ** therefore be no less than -9223372036854775807.
472 */
drhaf8001b2012-02-11 19:53:24 +0000473 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000474 }
drh52fc8492006-02-23 21:43:55 +0000475 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000476}
477
478/*
drh137c7282007-01-29 17:58:28 +0000479** Implementation of randomblob(N). Return a random blob
480** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000481*/
drh137c7282007-01-29 17:58:28 +0000482static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000483 sqlite3_context *context,
484 int argc,
485 sqlite3_value **argv
486){
drh137c7282007-01-29 17:58:28 +0000487 int n;
488 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000489 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000490 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000491 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000492 if( n<1 ){
493 n = 1;
494 }
danielk1977a1644fd2007-08-29 12:31:25 +0000495 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000496 if( p ){
drh2fa18682008-03-19 14:15:34 +0000497 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000498 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000499 }
drh63cf66f2007-01-29 15:50:05 +0000500}
501
502/*
drh6ed41ad2002-04-06 14:10:47 +0000503** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000504** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000505*/
danielk197751ad0ec2004-05-24 12:39:02 +0000506static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000507 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000508 int NotUsed,
509 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000510){
drhfa4a4b92008-03-19 21:45:51 +0000511 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000512 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000513 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
514 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
515 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000516 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000517}
518
rdcf146a772004-02-25 22:51:06 +0000519/*
drhab2f1f92010-01-11 18:26:42 +0000520** Implementation of the changes() SQL function.
521**
522** IMP: R-62073-11209 The changes() SQL function is a wrapper
523** around the sqlite3_changes() C/C++ function and hence follows the same
524** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000525*/
danielk1977b28af712004-06-21 06:50:26 +0000526static void changes(
drhf9b596e2004-05-26 16:54:42 +0000527 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000528 int NotUsed,
529 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000530){
drhfa4a4b92008-03-19 21:45:51 +0000531 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000532 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000533 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000534}
rdcf146a772004-02-25 22:51:06 +0000535
536/*
danielk1977b28af712004-06-21 06:50:26 +0000537** Implementation of the total_changes() SQL function. The return value is
538** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000539*/
danielk1977b28af712004-06-21 06:50:26 +0000540static void total_changes(
541 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000542 int NotUsed,
543 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000544){
drhfa4a4b92008-03-19 21:45:51 +0000545 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000546 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000547 /* IMP: R-52756-41993 This function is a wrapper around the
548 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000549 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000550}
551
drh6ed41ad2002-04-06 14:10:47 +0000552/*
drh4e5ffc52004-08-31 00:52:37 +0000553** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000554*/
drh4e5ffc52004-08-31 00:52:37 +0000555struct compareInfo {
556 u8 matchAll;
557 u8 matchOne;
558 u8 matchSet;
559 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000560};
drh55ef4d92005-08-14 01:20:37 +0000561
drhb9175ae2007-12-07 18:39:04 +0000562/*
563** For LIKE and GLOB matching on EBCDIC machines, assume that every
564** character is exactly one byte in size. Also, all characters are
565** able to participate in upper-case-to-lower-case mappings in EBCDIC
566** whereas only characters less than 0x80 do in ASCII.
567*/
568#if defined(SQLITE_EBCDIC)
drh42610962012-09-17 18:56:32 +0000569# define sqlite3Utf8Read(A) (*((*A)++))
drh6e1b1672013-09-12 23:12:08 +0000570# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000571#else
drh6e1b1672013-09-12 23:12:08 +0000572# define GlobUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000573#endif
574
drh4e5ffc52004-08-31 00:52:37 +0000575static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000576/* The correct SQL-92 behavior is for the LIKE operator to ignore
577** case. Thus 'a' LIKE 'A' would be true. */
578static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
579/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
580** is case sensitive causing 'a' LIKE 'A' to be false */
581static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000582
583/*
drh4e5ffc52004-08-31 00:52:37 +0000584** Compare two UTF-8 strings for equality where the first string can
585** potentially be a "glob" expression. Return true (1) if they
586** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000587**
drh4e5ffc52004-08-31 00:52:37 +0000588** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000589**
drh4e5ffc52004-08-31 00:52:37 +0000590** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000591**
drh4e5ffc52004-08-31 00:52:37 +0000592** '?' Matches exactly one character.
593**
594** [...] Matches one character from the enclosed list of
595** characters.
596**
597** [^...] Matches one character not in the enclosed list.
598**
599** With the [...] and [^...] matching, a ']' character can be included
600** in the list by making it the first character after '[' or '^'. A
601** range of characters can be specified using '-'. Example:
602** "[a-z]" matches any single lower-case letter. To match a '-', make
603** it the last character in the list.
604**
605** This routine is usually quick, but can be N**2 in the worst case.
606**
607** Hints: to match '*' or '?', put them in "[]". Like this:
608**
609** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000610*/
danielk19777c6303c2004-11-17 16:41:29 +0000611static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000612 const u8 *zPattern, /* The glob pattern */
613 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000614 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh0a32fa62011-06-13 12:19:21 +0000615 u32 esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000616){
drh0a32fa62011-06-13 12:19:21 +0000617 u32 c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000618 int invert;
619 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000620 u8 matchOne = pInfo->matchOne;
621 u8 matchAll = pInfo->matchAll;
622 u8 matchSet = pInfo->matchSet;
623 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000624 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000625
drh42610962012-09-17 18:56:32 +0000626 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
627 if( c==matchAll && !prevEscape ){
628 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000629 || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000630 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000631 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000632 }
danielk1977ad7dd422004-06-06 12:41:49 +0000633 }
drh66150952007-07-23 19:12:41 +0000634 if( c==0 ){
635 return 1;
636 }else if( c==esc ){
drh42610962012-09-17 18:56:32 +0000637 c = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000638 if( c==0 ){
639 return 0;
640 }
641 }else if( c==matchSet ){
642 assert( esc==0 ); /* This is GLOB, not LIKE */
643 assert( matchSet<0x80 ); /* '[' is a single-byte character */
644 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000645 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000646 }
647 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000648 }
drh42610962012-09-17 18:56:32 +0000649 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000650 if( noCase ){
drh6e1b1672013-09-12 23:12:08 +0000651 GlobUpperToLower(c2);
652 GlobUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000653 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000654 c2 = sqlite3Utf8Read(&zString);
drh6e1b1672013-09-12 23:12:08 +0000655 GlobUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000656 }
drh66150952007-07-23 19:12:41 +0000657 }else{
658 while( c2 != 0 && c2 != c ){
drh42610962012-09-17 18:56:32 +0000659 c2 = sqlite3Utf8Read(&zString);
drh66150952007-07-23 19:12:41 +0000660 }
drh4e5ffc52004-08-31 00:52:37 +0000661 }
drh66150952007-07-23 19:12:41 +0000662 if( c2==0 ) return 0;
663 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
664 }
665 return 0;
drh42610962012-09-17 18:56:32 +0000666 }else if( c==matchOne && !prevEscape ){
667 if( sqlite3Utf8Read(&zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000668 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000669 }
drh4e5ffc52004-08-31 00:52:37 +0000670 }else if( c==matchSet ){
drh1aa4f3e2011-06-15 12:43:36 +0000671 u32 prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000672 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000673 seen = 0;
674 invert = 0;
drh42610962012-09-17 18:56:32 +0000675 c = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000676 if( c==0 ) return 0;
drh42610962012-09-17 18:56:32 +0000677 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000678 if( c2=='^' ){
679 invert = 1;
drh42610962012-09-17 18:56:32 +0000680 c2 = sqlite3Utf8Read(&zPattern);
drh66150952007-07-23 19:12:41 +0000681 }
drh4e5ffc52004-08-31 00:52:37 +0000682 if( c2==']' ){
683 if( c==']' ) seen = 1;
drh42610962012-09-17 18:56:32 +0000684 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000685 }
drh66150952007-07-23 19:12:41 +0000686 while( c2 && c2!=']' ){
687 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh42610962012-09-17 18:56:32 +0000688 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000689 if( c>=prior_c && c<=c2 ) seen = 1;
690 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000691 }else{
drh66150952007-07-23 19:12:41 +0000692 if( c==c2 ){
693 seen = 1;
694 }
drh4e5ffc52004-08-31 00:52:37 +0000695 prior_c = c2;
696 }
drh42610962012-09-17 18:56:32 +0000697 c2 = sqlite3Utf8Read(&zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000698 }
drh66150952007-07-23 19:12:41 +0000699 if( c2==0 || (seen ^ invert)==0 ){
700 return 0;
701 }
702 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000703 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000704 }else{
drh42610962012-09-17 18:56:32 +0000705 c2 = sqlite3Utf8Read(&zString);
drh4e5ffc52004-08-31 00:52:37 +0000706 if( noCase ){
drh6e1b1672013-09-12 23:12:08 +0000707 GlobUpperToLower(c);
708 GlobUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000709 }
drh66150952007-07-23 19:12:41 +0000710 if( c!=c2 ){
711 return 0;
712 }
danielk19777c6303c2004-11-17 16:41:29 +0000713 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000714 }
danielk197751ad0ec2004-05-24 12:39:02 +0000715 }
drh4e5ffc52004-08-31 00:52:37 +0000716 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000717}
drh4e5ffc52004-08-31 00:52:37 +0000718
drh55ef4d92005-08-14 01:20:37 +0000719/*
drh56282a52013-04-10 16:13:38 +0000720** The sqlite3_strglob() interface.
721*/
722int sqlite3_strglob(const char *zGlobPattern, const char *zString){
723 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, 0)==0;
724}
725
726/*
drh55ef4d92005-08-14 01:20:37 +0000727** Count the number of times that the LIKE operator (or GLOB which is
728** just a variation of LIKE) gets called. This is used for testing
729** only.
730*/
731#ifdef SQLITE_TEST
732int sqlite3_like_count = 0;
733#endif
734
danielk19773f6b0872004-06-17 05:36:44 +0000735
736/*
737** Implementation of the like() SQL function. This function implements
738** the build-in LIKE operator. The first argument to the function is the
739** pattern and the second argument is the string. So, the SQL statements:
740**
741** A LIKE B
742**
743** is implemented as like(B,A).
744**
drh55ef4d92005-08-14 01:20:37 +0000745** This same function (with a different compareInfo structure) computes
746** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000747*/
748static void likeFunc(
749 sqlite3_context *context,
750 int argc,
751 sqlite3_value **argv
752){
drhbeb818d2007-05-08 15:34:47 +0000753 const unsigned char *zA, *zB;
drh0a32fa62011-06-13 12:19:21 +0000754 u32 escape = 0;
drh27e62db2009-04-02 10:16:17 +0000755 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000756 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000757
drh1f0feef2007-05-15 13:27:07 +0000758 zB = sqlite3_value_text(argv[0]);
759 zA = sqlite3_value_text(argv[1]);
760
drhbeb818d2007-05-08 15:34:47 +0000761 /* Limit the length of the LIKE or GLOB pattern to avoid problems
762 ** of deep recursion and N*N behavior in patternCompare().
763 */
drh27e62db2009-04-02 10:16:17 +0000764 nPat = sqlite3_value_bytes(argv[0]);
765 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
766 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
767 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000768 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
769 return;
770 }
drh1f0feef2007-05-15 13:27:07 +0000771 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000772
danielk19777c6303c2004-11-17 16:41:29 +0000773 if( argc==3 ){
774 /* The escape character string must consist of a single UTF-8 character.
775 ** Otherwise, return an error.
776 */
777 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000778 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000779 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000780 sqlite3_result_error(context,
781 "ESCAPE expression must be a single character", -1);
782 return;
783 }
drh42610962012-09-17 18:56:32 +0000784 escape = sqlite3Utf8Read(&zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000785 }
danielk19773f6b0872004-06-17 05:36:44 +0000786 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000787 struct compareInfo *pInfo = sqlite3_user_data(context);
788#ifdef SQLITE_TEST
789 sqlite3_like_count++;
790#endif
drhbeb818d2007-05-08 15:34:47 +0000791
danielk1977b56fe1f2007-05-09 08:24:44 +0000792 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000793 }
drh8912d102002-05-26 21:34:58 +0000794}
795
796/*
797** Implementation of the NULLIF(x,y) function. The result is the first
798** argument if the arguments are different. The result is NULL if the
799** arguments are equal to each other.
800*/
drhf9b596e2004-05-26 16:54:42 +0000801static void nullifFunc(
802 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000803 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000804 sqlite3_value **argv
805){
danielk1977dc1bdc42004-06-11 10:51:27 +0000806 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000807 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000808 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000809 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000810 }
drh0ac65892002-04-20 14:24:41 +0000811}
812
drh647cb0e2002-11-04 19:32:25 +0000813/*
drh47baebc2009-08-14 16:01:24 +0000814** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000815** of the SQLite library that is running.
816*/
drhf9b596e2004-05-26 16:54:42 +0000817static void versionFunc(
818 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000819 int NotUsed,
820 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000821){
danielk197762c14b32008-11-19 09:05:26 +0000822 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000823 /* IMP: R-48699-48617 This function is an SQL wrapper around the
824 ** sqlite3_libversion() C-interface. */
825 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000826}
827
drh47baebc2009-08-14 16:01:24 +0000828/*
829** Implementation of the sqlite_source_id() function. The result is a string
830** that identifies the particular version of the source code used to build
831** SQLite.
832*/
833static void sourceidFunc(
834 sqlite3_context *context,
835 int NotUsed,
836 sqlite3_value **NotUsed2
837){
838 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000839 /* IMP: R-24470-31136 This function is an SQL wrapper around the
840 ** sqlite3_sourceid() C interface. */
841 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000842}
843
shanehbdea6d12010-02-23 04:19:54 +0000844/*
drh3ca84ef2011-04-25 18:03:10 +0000845** Implementation of the sqlite_log() function. This is a wrapper around
846** sqlite3_log(). The return value is NULL. The function exists purely for
847** its side-effects.
848*/
drh840561f2011-04-27 18:08:42 +0000849static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000850 sqlite3_context *context,
851 int argc,
852 sqlite3_value **argv
853){
854 UNUSED_PARAMETER(argc);
855 UNUSED_PARAMETER(context);
856 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
857}
858
859/*
shanehdc97a8c2010-02-23 20:08:35 +0000860** Implementation of the sqlite_compileoption_used() function.
861** The result is an integer that identifies if the compiler option
862** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000863*/
shanehdc97a8c2010-02-23 20:08:35 +0000864#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
865static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000866 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000867 int argc,
868 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000869){
shanehdc97a8c2010-02-23 20:08:35 +0000870 const char *zOptName;
871 assert( argc==1 );
872 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000873 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
874 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
875 ** function.
876 */
drh264a2d42010-02-25 15:28:41 +0000877 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000878 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000879 }
shanehbdea6d12010-02-23 04:19:54 +0000880}
shanehdc97a8c2010-02-23 20:08:35 +0000881#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
882
883/*
884** Implementation of the sqlite_compileoption_get() function.
885** The result is a string that identifies the compiler options
886** used to build SQLite.
887*/
888#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
889static void compileoptiongetFunc(
890 sqlite3_context *context,
891 int argc,
892 sqlite3_value **argv
893){
894 int n;
895 assert( argc==1 );
896 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000897 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
898 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
899 */
shanehdc97a8c2010-02-23 20:08:35 +0000900 n = sqlite3_value_int(argv[0]);
901 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
902}
903#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000904
drh137c7282007-01-29 17:58:28 +0000905/* Array for converting from half-bytes (nybbles) into ASCII hex
906** digits. */
907static const char hexdigits[] = {
908 '0', '1', '2', '3', '4', '5', '6', '7',
909 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
910};
danielk1977d641d642004-11-18 15:44:29 +0000911
drh47394702003-08-20 01:03:33 +0000912/*
drh47394702003-08-20 01:03:33 +0000913** Implementation of the QUOTE() function. This function takes a single
914** argument. If the argument is numeric, the return value is the same as
915** the argument. If the argument is NULL, the return value is the string
916** "NULL". Otherwise, the argument is enclosed in single quotes with
917** single-quote escapes.
918*/
danielk19770ae8b832004-05-25 12:05:56 +0000919static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000920 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000921 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000922 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000923 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000924 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000925 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000926 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000927 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
928 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
929 if( r1!=r2 ){
930 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
931 }
932 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
933 break;
934 }
935 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000936 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000937 break;
938 }
danielk19773f41e972004-06-08 00:39:01 +0000939 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000940 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000941 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000942 int nBlob = sqlite3_value_bytes(argv[0]);
943 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000944 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000945 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000946 int i;
947 for(i=0; i<nBlob; i++){
948 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
949 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
950 }
951 zText[(nBlob*2)+2] = '\'';
952 zText[(nBlob*2)+3] = '\0';
953 zText[0] = 'X';
954 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000955 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000956 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000957 }
958 break;
959 }
drh9c054832004-05-31 18:51:57 +0000960 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000961 int i,j;
962 u64 n;
drh2646da72005-12-09 20:02:05 +0000963 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000964 char *z;
965
drh7a521cf2007-04-25 18:23:52 +0000966 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000967 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000968 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000969 if( z ){
970 z[0] = '\'';
971 for(i=0, j=1; zArg[i]; i++){
972 z[j++] = zArg[i];
973 if( zArg[i]=='\'' ){
974 z[j++] = '\'';
975 }
drhf9b596e2004-05-26 16:54:42 +0000976 }
danielk1977a1644fd2007-08-29 12:31:25 +0000977 z[j++] = '\'';
978 z[j] = 0;
979 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000980 }
drha0df4cc2009-02-02 17:29:59 +0000981 break;
982 }
983 default: {
984 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
985 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
986 break;
drhf9b596e2004-05-26 16:54:42 +0000987 }
drh47394702003-08-20 01:03:33 +0000988 }
989}
990
drh137c7282007-01-29 17:58:28 +0000991/*
drhd495d8c2013-02-22 19:34:25 +0000992** The unicode() function. Return the integer unicode code-point value
993** for the first character of the input string.
994*/
995static void unicodeFunc(
996 sqlite3_context *context,
997 int argc,
998 sqlite3_value **argv
999){
1000 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001001 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001002 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1003}
1004
1005/*
1006** The char() function takes zero or more arguments, each of which is
1007** an integer. It constructs a string where each character of the string
1008** is the unicode character for the corresponding integer argument.
1009*/
1010static void charFunc(
1011 sqlite3_context *context,
1012 int argc,
1013 sqlite3_value **argv
1014){
1015 unsigned char *z, *zOut;
1016 int i;
danb72cad12014-03-08 19:07:03 +00001017 zOut = z = sqlite3_malloc( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001018 if( z==0 ){
1019 sqlite3_result_error_nomem(context);
1020 return;
1021 }
1022 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001023 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001024 unsigned c;
1025 x = sqlite3_value_int64(argv[i]);
1026 if( x<0 || x>0x10ffff ) x = 0xfffd;
1027 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001028 if( c<0x00080 ){
1029 *zOut++ = (u8)(c&0xFF);
1030 }else if( c<0x00800 ){
1031 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1032 *zOut++ = 0x80 + (u8)(c & 0x3F);
1033 }else if( c<0x10000 ){
1034 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1035 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1036 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001037 }else{
drhfe7a5d12013-03-07 14:00:04 +00001038 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1039 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1040 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1041 *zOut++ = 0x80 + (u8)(c & 0x3F);
1042 } \
drhd495d8c2013-02-22 19:34:25 +00001043 }
drhfe7a5d12013-03-07 14:00:04 +00001044 sqlite3_result_text(context, (char*)z, (int)(zOut-z), sqlite3_free);
drhd495d8c2013-02-22 19:34:25 +00001045}
1046
1047/*
drh137c7282007-01-29 17:58:28 +00001048** The hex() function. Interpret the argument as a blob. Return
1049** a hexadecimal rendering as text.
1050*/
1051static void hexFunc(
1052 sqlite3_context *context,
1053 int argc,
1054 sqlite3_value **argv
1055){
1056 int i, n;
1057 const unsigned char *pBlob;
1058 char *zHex, *z;
1059 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001060 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001061 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001062 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001063 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001064 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001065 if( zHex ){
1066 for(i=0; i<n; i++, pBlob++){
1067 unsigned char c = *pBlob;
1068 *(z++) = hexdigits[(c>>4)&0xf];
1069 *(z++) = hexdigits[c&0xf];
1070 }
1071 *z = 0;
1072 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001073 }
drh137c7282007-01-29 17:58:28 +00001074}
1075
drh26b6d902007-03-17 13:27:54 +00001076/*
drh8cff3822007-05-02 02:08:28 +00001077** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1078*/
1079static void zeroblobFunc(
1080 sqlite3_context *context,
1081 int argc,
1082 sqlite3_value **argv
1083){
drh98640a32007-06-07 19:08:32 +00001084 i64 n;
drh27e62db2009-04-02 10:16:17 +00001085 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +00001086 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001087 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001088 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +00001089 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1090 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1091 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +00001092 sqlite3_result_error_toobig(context);
1093 }else{
drhab2f1f92010-01-11 18:26:42 +00001094 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
drh98640a32007-06-07 19:08:32 +00001095 }
drh8cff3822007-05-02 02:08:28 +00001096}
1097
1098/*
drh26b6d902007-03-17 13:27:54 +00001099** The replace() function. Three arguments are all strings: call
1100** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001101** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001102** must be exact. Collating sequences are not used.
1103*/
1104static void replaceFunc(
1105 sqlite3_context *context,
1106 int argc,
1107 sqlite3_value **argv
1108){
1109 const unsigned char *zStr; /* The input string A */
1110 const unsigned char *zPattern; /* The pattern string B */
1111 const unsigned char *zRep; /* The replacement string C */
1112 unsigned char *zOut; /* The output */
1113 int nStr; /* Size of zStr */
1114 int nPattern; /* Size of zPattern */
1115 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001116 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001117 int loopLimit; /* Last zStr[] that might match zPattern[] */
1118 int i, j; /* Loop counters */
1119
1120 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001121 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001122 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001123 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001124 nStr = sqlite3_value_bytes(argv[0]);
1125 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001126 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001127 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001128 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1129 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001130 return;
1131 }
1132 if( zPattern[0]==0 ){
1133 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1134 sqlite3_result_value(context, argv[0]);
1135 return;
1136 }
drh1f0feef2007-05-15 13:27:07 +00001137 nPattern = sqlite3_value_bytes(argv[1]);
1138 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001139 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001140 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001141 nRep = sqlite3_value_bytes(argv[2]);
1142 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001143 nOut = nStr + 1;
1144 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001145 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001146 if( zOut==0 ){
1147 return;
drh26b6d902007-03-17 13:27:54 +00001148 }
drh26b6d902007-03-17 13:27:54 +00001149 loopLimit = nStr - nPattern;
1150 for(i=j=0; i<=loopLimit; i++){
1151 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1152 zOut[j++] = zStr[i];
1153 }else{
drh4a50aac2007-08-23 02:47:53 +00001154 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001155 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001156 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001157 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1158 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1159 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001160 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001161 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001162 return;
1163 }
drh4a50aac2007-08-23 02:47:53 +00001164 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +00001165 zOut = sqlite3_realloc(zOut, (int)nOut);
1166 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001167 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001168 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001169 return;
1170 }
drh26b6d902007-03-17 13:27:54 +00001171 memcpy(&zOut[j], zRep, nRep);
1172 j += nRep;
1173 i += nPattern-1;
1174 }
1175 }
drh2e6400b2007-05-08 15:46:18 +00001176 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001177 memcpy(&zOut[j], &zStr[i], nStr-i);
1178 j += nStr - i;
1179 assert( j<=nOut );
1180 zOut[j] = 0;
1181 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1182}
1183
drh309b3382007-03-17 17:52:42 +00001184/*
1185** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1186** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1187*/
1188static void trimFunc(
1189 sqlite3_context *context,
1190 int argc,
1191 sqlite3_value **argv
1192){
1193 const unsigned char *zIn; /* Input string */
1194 const unsigned char *zCharSet; /* Set of characters to trim */
1195 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001196 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001197 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001198 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1199 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001200 int nChar; /* Number of characters in zCharSet */
1201
drh309b3382007-03-17 17:52:42 +00001202 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1203 return;
1204 }
1205 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001206 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001207 nIn = sqlite3_value_bytes(argv[0]);
1208 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001209 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001210 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001211 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001212 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001213 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001214 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001215 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001216 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001217 return;
drhd1e3a612007-04-27 21:59:52 +00001218 }else{
1219 const unsigned char *z;
1220 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001221 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001222 }
1223 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001224 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001225 if( azChar==0 ){
1226 return;
1227 }
1228 aLen = (unsigned char*)&azChar[nChar];
1229 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001230 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001231 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001232 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001233 }
1234 }
drh309b3382007-03-17 17:52:42 +00001235 }
drhd1e3a612007-04-27 21:59:52 +00001236 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001237 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001238 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001239 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001240 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001241 for(i=0; i<nChar; i++){
1242 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001243 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001244 }
1245 if( i>=nChar ) break;
1246 zIn += len;
1247 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001248 }
1249 }
1250 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001251 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001252 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001253 for(i=0; i<nChar; i++){
1254 len = aLen[i];
1255 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1256 }
1257 if( i>=nChar ) break;
1258 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001259 }
1260 }
drhd1e3a612007-04-27 21:59:52 +00001261 if( zCharSet ){
1262 sqlite3_free(azChar);
1263 }
drh309b3382007-03-17 17:52:42 +00001264 }
1265 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1266}
drh26b6d902007-03-17 13:27:54 +00001267
danielk1977a4de4532008-09-02 15:44:08 +00001268
drh2ba3ccc2009-12-08 02:06:08 +00001269/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1270** is only available if the SQLITE_SOUNDEX compile-time option is used
1271** when SQLite is built.
1272*/
drhd24cc422003-03-27 12:51:24 +00001273#ifdef SQLITE_SOUNDEX
1274/*
1275** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001276**
1277** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1278** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001279*/
drh137c7282007-01-29 17:58:28 +00001280static void soundexFunc(
1281 sqlite3_context *context,
1282 int argc,
1283 sqlite3_value **argv
1284){
drhd24cc422003-03-27 12:51:24 +00001285 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001286 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001287 int i, j;
1288 static const unsigned char iCode[] = {
1289 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
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, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1294 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1295 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1296 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1297 };
1298 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001299 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001300 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001301 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001302 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001303 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001304 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001305 for(j=1; j<4 && zIn[i]; i++){
1306 int code = iCode[zIn[i]&0x7f];
1307 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001308 if( code!=prevcode ){
1309 prevcode = code;
1310 zResult[j++] = code + '0';
1311 }
1312 }else{
1313 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001314 }
1315 }
1316 while( j<4 ){
1317 zResult[j++] = '0';
1318 }
1319 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001320 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001321 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001322 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1323 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001324 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001325 }
1326}
drh2ba3ccc2009-12-08 02:06:08 +00001327#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001328
drhfdb83b22006-06-17 14:12:47 +00001329#ifndef SQLITE_OMIT_LOAD_EXTENSION
1330/*
1331** A function that loads a shared-library extension then returns NULL.
1332*/
1333static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001334 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001335 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001336 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001337 char *zErrMsg = 0;
1338
1339 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001340 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001341 }else{
1342 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001343 }
drh7a521cf2007-04-25 18:23:52 +00001344 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001345 sqlite3_result_error(context, zErrMsg, -1);
1346 sqlite3_free(zErrMsg);
1347 }
1348}
1349#endif
1350
danielk197701427a62005-01-11 13:02:33 +00001351
drh0ac65892002-04-20 14:24:41 +00001352/*
drhd3a149e2002-02-24 17:12:53 +00001353** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001354** sum() or avg() aggregate computation.
1355*/
1356typedef struct SumCtx SumCtx;
1357struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001358 double rSum; /* Floating point sum */
1359 i64 iSum; /* Integer sum */
1360 i64 cnt; /* Number of elements summed */
1361 u8 overflow; /* True if integer overflow seen */
1362 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001363};
1364
1365/*
drha97fdd32006-01-12 22:17:50 +00001366** Routines used to compute the sum, average, and total.
1367**
1368** The SUM() function follows the (broken) SQL standard which means
1369** that it returns NULL if it sums over no inputs. TOTAL returns
1370** 0.0 in that case. In addition, TOTAL always returns a float where
1371** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001372** value. TOTAL never fails, but SUM might through an exception if
1373** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001374*/
danielk19770ae8b832004-05-25 12:05:56 +00001375static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001376 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001377 int type;
drh3f219f42005-09-08 19:45:57 +00001378 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001379 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001380 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001381 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001382 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001383 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001384 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001385 i64 v = sqlite3_value_int64(argv[0]);
1386 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001387 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1388 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001389 }
1390 }else{
drh8c08e862006-02-11 17:34:00 +00001391 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001392 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001393 }
drh739105c2002-05-29 23:22:23 +00001394 }
drhdd5baa92002-02-27 19:50:59 +00001395}
danielk19770ae8b832004-05-25 12:05:56 +00001396static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001397 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001398 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001399 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001400 if( p->overflow ){
1401 sqlite3_result_error(context,"integer overflow",-1);
1402 }else if( p->approx ){
1403 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001404 }else{
drh8c08e862006-02-11 17:34:00 +00001405 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001406 }
drh3d1d95e2005-09-08 10:37:01 +00001407 }
drhdd5baa92002-02-27 19:50:59 +00001408}
danielk19770ae8b832004-05-25 12:05:56 +00001409static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001410 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001411 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001412 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001413 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001414 }
1415}
drha97fdd32006-01-12 22:17:50 +00001416static void totalFinalize(sqlite3_context *context){
1417 SumCtx *p;
1418 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001419 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1420 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001421}
drhdd5baa92002-02-27 19:50:59 +00001422
1423/*
drh0bce8352002-02-28 00:41:10 +00001424** The following structure keeps track of state information for the
1425** count() aggregate function.
1426*/
1427typedef struct CountCtx CountCtx;
1428struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001429 i64 n;
drh0bce8352002-02-28 00:41:10 +00001430};
drhdd5baa92002-02-27 19:50:59 +00001431
drh0bce8352002-02-28 00:41:10 +00001432/*
1433** Routines to implement the count() aggregate function.
1434*/
danielk19770ae8b832004-05-25 12:05:56 +00001435static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001436 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001437 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001438 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001439 p->n++;
1440 }
drh2e79c3d2009-04-08 23:04:14 +00001441
drhd3264c72009-04-15 13:39:47 +00001442#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001443 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1444 ** sure it still operates correctly, verify that its count agrees with our
1445 ** internal count when using count(*) and when the total count can be
1446 ** expressed as a 32-bit integer. */
1447 assert( argc==1 || p==0 || p->n>0x7fffffff
1448 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001449#endif
drh0bce8352002-02-28 00:41:10 +00001450}
danielk19770ae8b832004-05-25 12:05:56 +00001451static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001452 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001453 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001454 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001455}
1456
1457/*
drh0bce8352002-02-28 00:41:10 +00001458** Routines to implement min() and max() aggregate functions.
1459*/
danielk197762c14b32008-11-19 09:05:26 +00001460static void minmaxStep(
1461 sqlite3_context *context,
1462 int NotUsed,
1463 sqlite3_value **argv
1464){
danielk197788208052004-05-25 01:13:20 +00001465 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001466 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001467 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001468
drh9eb516c2004-07-18 20:52:32 +00001469 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001470 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001471
drh94a6d992012-02-02 18:42:09 +00001472 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1473 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1474 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001475 int max;
1476 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001477 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001478 /* This step function is used for both the min() and max() aggregates,
1479 ** the only difference between the two being that the sense of the
1480 ** comparison is inverted. For the max() aggregate, the
1481 ** sqlite3_user_data() function returns (void *)-1. For min() it
1482 ** returns (void *)db, where db is the sqlite3* database pointer.
1483 ** Therefore the next statement sets variable 'max' to 1 for the max()
1484 ** aggregate, or 0 for min().
1485 */
drh309b3382007-03-17 17:52:42 +00001486 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001487 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001488 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001489 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001490 }else{
1491 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001492 }
drh268380c2004-02-25 13:47:31 +00001493 }else{
drhb21c8cd2007-08-21 19:33:56 +00001494 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001495 }
1496}
danielk19770ae8b832004-05-25 12:05:56 +00001497static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001498 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001499 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1500 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001501 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001502 sqlite3_result_value(context, pRes);
1503 }
1504 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001505 }
1506}
drhdd5baa92002-02-27 19:50:59 +00001507
drhb0689692007-11-01 17:38:30 +00001508/*
1509** group_concat(EXPR, ?SEPARATOR?)
1510*/
1511static void groupConcatStep(
1512 sqlite3_context *context,
1513 int argc,
1514 sqlite3_value **argv
1515){
1516 const char *zVal;
drhade86482007-11-28 22:36:40 +00001517 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001518 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001519 int nVal, nSep;
1520 assert( argc==1 || argc==2 );
1521 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001522 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1523
1524 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001525 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001526 int firstTerm = pAccum->useMalloc==0;
drhb9755982010-07-24 16:34:37 +00001527 pAccum->useMalloc = 2;
drhbb4957f2008-03-20 14:03:29 +00001528 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001529 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001530 if( argc==2 ){
1531 zSep = (char*)sqlite3_value_text(argv[1]);
1532 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001533 }else{
1534 zSep = ",";
drhade86482007-11-28 22:36:40 +00001535 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001536 }
drha9ab4812013-12-11 11:00:44 +00001537 if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001538 }
drh07d31172009-02-02 21:57:05 +00001539 zVal = (char*)sqlite3_value_text(argv[0]);
1540 nVal = sqlite3_value_bytes(argv[0]);
drh8009c9b2014-05-07 20:24:00 +00001541 if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001542 }
1543}
1544static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001545 StrAccum *pAccum;
1546 pAccum = sqlite3_aggregate_context(context, 0);
1547 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001548 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001549 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001550 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001551 sqlite3_result_error_nomem(context);
1552 }else{
1553 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1554 sqlite3_free);
1555 }
drhb0689692007-11-01 17:38:30 +00001556 }
1557}
drh4e5ffc52004-08-31 00:52:37 +00001558
drhd3a149e2002-02-24 17:12:53 +00001559/*
drha4741842010-04-25 20:58:37 +00001560** This routine does per-connection function registration. Most
1561** of the built-in functions above are part of the global function set.
1562** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001563*/
drh9bb575f2004-09-06 17:24:11 +00001564void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001565 int rc = sqlite3_overload_function(db, "MATCH", 2);
1566 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1567 if( rc==SQLITE_NOMEM ){
1568 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001569 }
drh55ef4d92005-08-14 01:20:37 +00001570}
1571
1572/*
1573** Set the LIKEOPT flag on the 2-argument function with the given name.
1574*/
drh1bd10f82008-12-10 21:19:56 +00001575static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001576 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001577 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1578 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001579 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001580 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001581 }
1582}
1583
1584/*
1585** Register the built-in LIKE and GLOB functions. The caseSensitive
1586** parameter determines whether or not the LIKE operator is case
1587** sensitive. GLOB is always case sensitive.
1588*/
1589void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1590 struct compareInfo *pInfo;
1591 if( caseSensitive ){
1592 pInfo = (struct compareInfo*)&likeInfoAlt;
1593 }else{
1594 pInfo = (struct compareInfo*)&likeInfoNorm;
1595 }
drh901e9942010-12-15 18:54:37 +00001596 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1597 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1598 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001599 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001600 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1601 setLikeOptFlag(db, "like",
1602 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001603}
1604
1605/*
1606** pExpr points to an expression which implements a function. If
1607** it is appropriate to apply the LIKE optimization to that function
1608** then set aWc[0] through aWc[2] to the wildcard characters and
1609** return TRUE. If the function is not a LIKE-style function then
1610** return FALSE.
1611*/
drhd64fe2f2005-08-28 17:00:23 +00001612int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001613 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001614 if( pExpr->op!=TK_FUNCTION
1615 || !pExpr->x.pList
1616 || pExpr->x.pList->nExpr!=2
1617 ){
drh55ef4d92005-08-14 01:20:37 +00001618 return 0;
1619 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001620 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001621 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1622 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001623 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001624 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001625 return 0;
1626 }
1627
1628 /* The memcpy() statement assumes that the wildcard characters are
1629 ** the first three statements in the compareInfo structure. The
1630 ** asserts() that follow verify that assumption
1631 */
1632 memcpy(aWc, pDef->pUserData, 3);
1633 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1634 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1635 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001636 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001637 return 1;
drhdc04c582002-02-24 01:55:15 +00001638}
danielk19778c0a7912008-08-20 14:49:23 +00001639
drh70a8ca32008-08-21 18:49:27 +00001640/*
drh777c5382008-08-21 20:21:34 +00001641** All all of the FuncDef structures in the aBuiltinFunc[] array above
1642** to the global function hash table. This occurs at start-time (as
1643** a consequence of calling sqlite3_initialize()).
1644**
1645** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001646*/
1647void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001648 /*
1649 ** The following array holds FuncDef structures for all of the functions
1650 ** defined in this file.
1651 **
1652 ** The array cannot be constant since changes are made to the
1653 ** FuncDef.pHash elements at start-time. The elements of this array
1654 ** are read-only after initialization is complete.
1655 */
1656 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1657 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1658 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1659 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1660 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1661 FUNCTION(trim, 1, 3, 0, trimFunc ),
1662 FUNCTION(trim, 2, 3, 0, trimFunc ),
1663 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1664 FUNCTION(min, 0, 0, 1, 0 ),
1665 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1666 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1667 FUNCTION(max, 0, 1, 1, 0 ),
1668 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
drha748fdc2012-03-28 01:34:47 +00001669 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1670 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001671 FUNCTION(instr, 2, 0, 0, instrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001672 FUNCTION(substr, 2, 0, 0, substrFunc ),
1673 FUNCTION(substr, 3, 0, 0, substrFunc ),
drha5c14162013-12-17 15:03:06 +00001674 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001675 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1676 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001677 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001678#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001679 FUNCTION(round, 1, 0, 0, roundFunc ),
1680 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001681#endif
danielk197793ce7412008-09-01 19:14:02 +00001682 FUNCTION(upper, 1, 0, 0, upperFunc ),
1683 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1684 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001685 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhcca9f3d2013-09-06 15:23:29 +00001686 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001687 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001688 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
1689 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhaae0f9e2013-09-11 11:38:58 +00001690 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh03202a92014-06-17 16:11:28 +00001691 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhb1fba282013-11-21 14:33:48 +00001692 VFUNCTION(random, 0, 0, 0, randomFunc ),
1693 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001694 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1695 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001696 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001697 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001698#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
drh8bb76d32010-02-26 16:37:47 +00001699 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1700 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001701#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
danielk197793ce7412008-09-01 19:14:02 +00001702 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001703 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1704 VFUNCTION(changes, 0, 0, 0, changes ),
1705 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001706 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1707 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1708 #ifdef SQLITE_SOUNDEX
1709 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1710 #endif
1711 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1712 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1713 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1714 #endif
1715 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1716 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1717 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001718 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
drhd36e1042013-09-06 13:10:12 +00001719 {0,SQLITE_UTF8|SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
danielk197793ce7412008-09-01 19:14:02 +00001720 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001721 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1722 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001723
1724 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1725 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1726 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1727 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1728 #else
1729 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1730 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1731 #endif
1732 };
1733
drh70a8ca32008-08-21 18:49:27 +00001734 int i;
danielk197793ce7412008-09-01 19:14:02 +00001735 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001736 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001737
drh70a8ca32008-08-21 18:49:27 +00001738 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001739 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001740 }
drh777c5382008-08-21 20:21:34 +00001741 sqlite3RegisterDateTimeFunctions();
drh545f5872010-04-24 14:02:59 +00001742#ifndef SQLITE_OMIT_ALTERTABLE
1743 sqlite3AlterFunctions();
1744#endif
dan0106e372013-08-12 16:34:32 +00001745#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1746 sqlite3AnalyzeFunctions();
1747#endif
drh70a8ca32008-08-21 18:49:27 +00001748}