blob: bcd658cefb22f67cafe9a2ded3baad818954ea93 [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){
drha9e03b12015-03-12 06:46:52 +000025 VdbeOp *pOp;
26 assert( context->pVdbe!=0 );
27 pOp = &context->pVdbe->aOp[context->iOp-1];
drha15cc472014-09-25 13:17:30 +000028 assert( pOp->opcode==OP_CollSeq );
29 assert( pOp->p4type==P4_COLLSEQ );
30 return pOp->p4.pColl;
danielk1977dc1bdc42004-06-11 10:51:27 +000031}
32
drh0bce8352002-02-28 00:41:10 +000033/*
drh7a957892012-02-02 17:35:43 +000034** Indicate that the accumulator load should be skipped on this
35** iteration of the aggregate loop.
36*/
37static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
38 context->skipFlag = 1;
39}
40
41/*
drh0bce8352002-02-28 00:41:10 +000042** Implementation of the non-aggregate min() and max() functions
43*/
drhf9b596e2004-05-26 16:54:42 +000044static void minmaxFunc(
45 sqlite3_context *context,
46 int argc,
47 sqlite3_value **argv
48){
drh0bce8352002-02-28 00:41:10 +000049 int i;
drh268380c2004-02-25 13:47:31 +000050 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000051 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000052 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000053
drh65595cd2009-02-02 16:32:55 +000054 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000055 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000056 pColl = sqlite3GetFuncCollSeq(context);
57 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000058 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000059 iBest = 0;
drh9c054832004-05-31 18:51:57 +000060 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000061 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000062 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000063 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000064 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000065 iBest = i;
drh0bce8352002-02-28 00:41:10 +000066 }
67 }
drhf4479502004-05-27 03:12:53 +000068 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000069}
drh0bce8352002-02-28 00:41:10 +000070
drh268380c2004-02-25 13:47:31 +000071/*
72** Return the type of the argument.
73*/
drhf9b596e2004-05-26 16:54:42 +000074static void typeofFunc(
75 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000076 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000077 sqlite3_value **argv
78){
danielk197735bb9d02004-05-24 12:55:54 +000079 const char *z = 0;
danielk197762c14b32008-11-19 09:05:26 +000080 UNUSED_PARAMETER(NotUsed);
danielk197735bb9d02004-05-24 12:55:54 +000081 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000082 case SQLITE_INTEGER: z = "integer"; break;
83 case SQLITE_TEXT: z = "text"; break;
84 case SQLITE_FLOAT: z = "real"; break;
85 case SQLITE_BLOB: z = "blob"; break;
drh65595cd2009-02-02 16:32:55 +000086 default: z = "null"; break;
danielk197735bb9d02004-05-24 12:55:54 +000087 }
danielk1977d8123362004-06-12 09:25:12 +000088 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000089}
90
drh5708d2d2005-06-22 10:53:59 +000091
92/*
drh0bce8352002-02-28 00:41:10 +000093** Implementation of the length() function
94*/
drhf9b596e2004-05-26 16:54:42 +000095static void lengthFunc(
96 sqlite3_context *context,
97 int argc,
98 sqlite3_value **argv
99){
drh0bce8352002-02-28 00:41:10 +0000100 int len;
101
102 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000103 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000104 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000105 case SQLITE_BLOB:
106 case SQLITE_INTEGER:
107 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000108 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000109 break;
110 }
drh9c054832004-05-31 18:51:57 +0000111 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000112 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000113 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000114 len = 0;
115 while( *z ){
116 len++;
117 SQLITE_SKIP_UTF8(z);
118 }
drhf4479502004-05-27 03:12:53 +0000119 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000120 break;
121 }
122 default: {
123 sqlite3_result_null(context);
124 break;
125 }
126 }
drh0bce8352002-02-28 00:41:10 +0000127}
128
129/*
drh2ba3ccc2009-12-08 02:06:08 +0000130** Implementation of the abs() function.
131**
132** IMP: R-23979-26855 The abs(X) function returns the absolute value of
133** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000134*/
danielk19770ae8b832004-05-25 12:05:56 +0000135static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000136 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000137 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000138 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000139 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000140 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000141 if( iVal<0 ){
drh693e6712014-01-24 22:58:00 +0000142 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000143 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
144 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000145 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000146 sqlite3_result_error(context, "integer overflow", -1);
147 return;
148 }
149 iVal = -iVal;
150 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000151 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000152 break;
153 }
drh9c054832004-05-31 18:51:57 +0000154 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000155 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000156 sqlite3_result_null(context);
157 break;
158 }
159 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000160 /* Because sqlite3_value_double() returns 0.0 if the argument is not
161 ** something that can be converted into a number, we have:
drh643091f2014-11-20 23:21:23 +0000162 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
163 ** that cannot be converted to a numeric value.
drh2ba3ccc2009-12-08 02:06:08 +0000164 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000165 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000166 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000167 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000168 break;
169 }
170 }
drh0bce8352002-02-28 00:41:10 +0000171}
172
173/*
drhd55e0722012-10-25 03:07:29 +0000174** Implementation of the instr() function.
175**
176** instr(haystack,needle) finds the first occurrence of needle
177** in haystack and returns the number of previous characters plus 1,
178** or 0 if needle does not occur within haystack.
179**
180** If both haystack and needle are BLOBs, then the result is one more than
181** the number of bytes in haystack prior to the first occurrence of needle,
182** or 0 if needle never occurs in haystack.
183*/
184static void instrFunc(
185 sqlite3_context *context,
186 int argc,
187 sqlite3_value **argv
188){
189 const unsigned char *zHaystack;
190 const unsigned char *zNeedle;
191 int nHaystack;
192 int nNeedle;
193 int typeHaystack, typeNeedle;
194 int N = 1;
195 int isText;
196
drh68c804b2012-12-04 11:03:11 +0000197 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000198 typeHaystack = sqlite3_value_type(argv[0]);
199 typeNeedle = sqlite3_value_type(argv[1]);
200 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
201 nHaystack = sqlite3_value_bytes(argv[0]);
202 nNeedle = sqlite3_value_bytes(argv[1]);
203 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
204 zHaystack = sqlite3_value_blob(argv[0]);
205 zNeedle = sqlite3_value_blob(argv[1]);
206 isText = 0;
207 }else{
208 zHaystack = sqlite3_value_text(argv[0]);
209 zNeedle = sqlite3_value_text(argv[1]);
210 isText = 1;
211 }
212 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
213 N++;
214 do{
215 nHaystack--;
216 zHaystack++;
217 }while( isText && (zHaystack[0]&0xc0)==0x80 );
218 }
219 if( nNeedle>nHaystack ) N = 0;
220 sqlite3_result_int(context, N);
221}
222
223/*
drha5c14162013-12-17 15:03:06 +0000224** Implementation of the printf() function.
225*/
226static void printfFunc(
227 sqlite3_context *context,
228 int argc,
229 sqlite3_value **argv
230){
231 PrintfArguments x;
232 StrAccum str;
233 const char *zFormat;
drhc0490572015-05-02 11:45:53 +0000234 sqlite3 *db = sqlite3_context_db_handle(context);
drha5c14162013-12-17 15:03:06 +0000235
236 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
237 x.nArg = argc-1;
238 x.nUsed = 0;
239 x.apArg = argv+1;
drhc0490572015-05-02 11:45:53 +0000240 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
drha5c14162013-12-17 15:03:06 +0000241 sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x);
drhb092b032015-05-02 18:25:25 +0000242 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), str.nChar,
drha5c14162013-12-17 15:03:06 +0000243 SQLITE_DYNAMIC);
drhb092b032015-05-02 18:25:25 +0000244 if( str.accError ){
245 if( str.accError==STRACCUM_NOMEM ){
246 sqlite3_result_error_nomem(context);
247 }else{
248 sqlite3_result_error_toobig(context);
249 }
250 }
drha5c14162013-12-17 15:03:06 +0000251 }
252}
253
254/*
drhf764e6f2007-05-15 01:13:47 +0000255** Implementation of the substr() function.
256**
257** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
258** p1 is 1-indexed. So substr(x,1,1) returns the first character
259** of x. If x is text, then we actually count UTF-8 characters.
260** If x is a blob, then we count bytes.
261**
262** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000263**
drhf7b54962013-05-28 12:11:54 +0000264** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000265*/
drhf9b596e2004-05-26 16:54:42 +0000266static void substrFunc(
267 sqlite3_context *context,
268 int argc,
269 sqlite3_value **argv
270){
drh2646da72005-12-09 20:02:05 +0000271 const unsigned char *z;
272 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000273 int len;
drhf764e6f2007-05-15 01:13:47 +0000274 int p0type;
drh023ae032007-05-08 12:12:16 +0000275 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000276 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000277
drh64f31512007-10-12 19:11:55 +0000278 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000279 if( sqlite3_value_type(argv[1])==SQLITE_NULL
280 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
281 ){
282 return;
283 }
drhf764e6f2007-05-15 01:13:47 +0000284 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000285 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000286 if( p0type==SQLITE_BLOB ){
287 len = sqlite3_value_bytes(argv[0]);
288 z = sqlite3_value_blob(argv[0]);
289 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000290 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000291 }else{
292 z = sqlite3_value_text(argv[0]);
293 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000294 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000295 if( p1<0 ){
296 for(z2=z; *z2; len++){
297 SQLITE_SKIP_UTF8(z2);
298 }
drh4a919112007-05-15 11:55:09 +0000299 }
drhf764e6f2007-05-15 01:13:47 +0000300 }
drh883ad042015-02-19 00:29:11 +0000301#ifdef SQLITE_SUBSTR_COMPATIBILITY
302 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
303 ** as substr(X,1,N) - it returns the first N characters of X. This
304 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
305 ** from 2009-02-02 for compatibility of applications that exploited the
306 ** old buggy behavior. */
307 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
308#endif
drh64f31512007-10-12 19:11:55 +0000309 if( argc==3 ){
310 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000311 if( p2<0 ){
312 p2 = -p2;
313 negP2 = 1;
314 }
drh64f31512007-10-12 19:11:55 +0000315 }else{
drhbb4957f2008-03-20 14:03:29 +0000316 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000317 }
drh0bce8352002-02-28 00:41:10 +0000318 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000319 p1 += len;
drh653bc752002-02-28 03:31:10 +0000320 if( p1<0 ){
321 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000322 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000323 p1 = 0;
324 }
drh0bce8352002-02-28 00:41:10 +0000325 }else if( p1>0 ){
326 p1--;
drh65595cd2009-02-02 16:32:55 +0000327 }else if( p2>0 ){
328 p2--;
drh0bce8352002-02-28 00:41:10 +0000329 }
drh65595cd2009-02-02 16:32:55 +0000330 if( negP2 ){
331 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000332 if( p1<0 ){
333 p2 += p1;
334 p1 = 0;
335 }
336 }
drh65595cd2009-02-02 16:32:55 +0000337 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000338 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000339 while( *z && p1 ){
340 SQLITE_SKIP_UTF8(z);
341 p1--;
drhf764e6f2007-05-15 01:13:47 +0000342 }
drh4a919112007-05-15 11:55:09 +0000343 for(z2=z; *z2 && p2; p2--){
344 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000345 }
drhbbf483f2014-09-09 20:30:24 +0000346 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
347 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000348 }else{
drh4adc4cb2009-11-11 20:53:31 +0000349 if( p1+p2>len ){
350 p2 = len-p1;
351 if( p2<0 ) p2 = 0;
352 }
drhbbf483f2014-09-09 20:30:24 +0000353 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000354 }
drh0bce8352002-02-28 00:41:10 +0000355}
356
357/*
358** Implementation of the round() function
359*/
shanefbd60f82009-02-04 03:59:25 +0000360#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000361static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000362 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000363 double r;
drh50d654d2009-06-03 01:24:54 +0000364 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000365 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000366 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000367 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000368 n = sqlite3_value_int(argv[1]);
369 if( n>30 ) n = 30;
370 if( n<0 ) n = 0;
371 }
drhd589a922006-03-02 03:02:48 +0000372 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000373 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000374 /* If Y==0 and X will fit in a 64-bit int,
375 ** handle the rounding directly,
376 ** otherwise use printf.
377 */
378 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
379 r = (double)((sqlite_int64)(r+0.5));
380 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
381 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000382 }else{
shaneh147e1762010-02-17 04:19:27 +0000383 zBuf = sqlite3_mprintf("%.*f",n,r);
384 if( zBuf==0 ){
385 sqlite3_result_error_nomem(context);
386 return;
387 }
drh9339da12010-09-30 00:50:49 +0000388 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000389 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000390 }
shaneh147e1762010-02-17 04:19:27 +0000391 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000392}
shanefbd60f82009-02-04 03:59:25 +0000393#endif
drhdc04c582002-02-24 01:55:15 +0000394
danielk197726783a52007-08-29 14:06:22 +0000395/*
drhf3cdcdc2015-04-29 16:50:28 +0000396** Allocate nByte bytes of space using sqlite3Malloc(). If the
danielk197726783a52007-08-29 14:06:22 +0000397** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000398** the database handle that malloc() has failed and return NULL.
399** If nByte is larger than the maximum string or blob length, then
400** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000401*/
drhb1a6c3c2008-03-20 16:30:17 +0000402static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000403 char *z;
drh27e62db2009-04-02 10:16:17 +0000404 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000405 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000406 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
407 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
408 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000409 sqlite3_result_error_toobig(context);
410 z = 0;
411 }else{
drhda4ca9d2014-09-09 17:27:35 +0000412 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000413 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000414 sqlite3_result_error_nomem(context);
415 }
danielk1977a1644fd2007-08-29 12:31:25 +0000416 }
417 return z;
418}
419
drhdc04c582002-02-24 01:55:15 +0000420/*
421** Implementation of the upper() and lower() SQL functions.
422*/
danielk19770ae8b832004-05-25 12:05:56 +0000423static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000424 char *z1;
425 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] = (char)sqlite3Toupper(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}
danielk19770ae8b832004-05-25 12:05:56 +0000442static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000443 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000444 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000445 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000446 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000447 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000448 n = sqlite3_value_bytes(argv[0]);
449 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
450 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000451 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000452 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000453 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000454 for(i=0; i<n; i++){
455 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000456 }
drhdf901d32011-10-13 18:00:11 +0000457 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000458 }
drhdc04c582002-02-24 01:55:15 +0000459 }
460}
461
drhae6bb952009-11-11 00:24:31 +0000462/*
drhcca9f3d2013-09-06 15:23:29 +0000463** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
464** as VDBE code so that unused argument values do not have to be computed.
465** However, we still need some kind of function implementation for this
466** routines in the function table. The noopFunc macro provides this.
467** noopFunc will never be called so it doesn't matter what the implementation
468** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000469*/
drhcca9f3d2013-09-06 15:23:29 +0000470#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000471
472/*
drhf9ffac92002-03-02 19:00:31 +0000473** Implementation of random(). Return a random integer.
474*/
drhf9b596e2004-05-26 16:54:42 +0000475static void randomFunc(
476 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000477 int NotUsed,
478 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000479){
drh52fc8492006-02-23 21:43:55 +0000480 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000481 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000482 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000483 if( r<0 ){
484 /* We need to prevent a random number of 0x8000000000000000
485 ** (or -9223372036854775808) since when you do abs() of that
486 ** number of you get the same value back again. To do this
487 ** in a way that is testable, mask the sign bit off of negative
488 ** values, resulting in a positive value. Then take the
489 ** 2s complement of that positive value. The end result can
490 ** therefore be no less than -9223372036854775807.
491 */
drhaf8001b2012-02-11 19:53:24 +0000492 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000493 }
drh52fc8492006-02-23 21:43:55 +0000494 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000495}
496
497/*
drh137c7282007-01-29 17:58:28 +0000498** Implementation of randomblob(N). Return a random blob
499** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000500*/
drh137c7282007-01-29 17:58:28 +0000501static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000502 sqlite3_context *context,
503 int argc,
504 sqlite3_value **argv
505){
drh137c7282007-01-29 17:58:28 +0000506 int n;
507 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000508 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000509 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000510 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000511 if( n<1 ){
512 n = 1;
513 }
danielk1977a1644fd2007-08-29 12:31:25 +0000514 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000515 if( p ){
drh2fa18682008-03-19 14:15:34 +0000516 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000517 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000518 }
drh63cf66f2007-01-29 15:50:05 +0000519}
520
521/*
drh6ed41ad2002-04-06 14:10:47 +0000522** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000523** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000524*/
danielk197751ad0ec2004-05-24 12:39:02 +0000525static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000526 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000527 int NotUsed,
528 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000529){
drhfa4a4b92008-03-19 21:45:51 +0000530 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000531 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000532 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
533 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
534 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000535 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000536}
537
rdcf146a772004-02-25 22:51:06 +0000538/*
drhab2f1f92010-01-11 18:26:42 +0000539** Implementation of the changes() SQL function.
540**
541** IMP: R-62073-11209 The changes() SQL function is a wrapper
542** around the sqlite3_changes() C/C++ function and hence follows the same
543** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000544*/
danielk1977b28af712004-06-21 06:50:26 +0000545static void changes(
drhf9b596e2004-05-26 16:54:42 +0000546 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000547 int NotUsed,
548 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000549){
drhfa4a4b92008-03-19 21:45:51 +0000550 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000551 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000552 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000553}
rdcf146a772004-02-25 22:51:06 +0000554
555/*
danielk1977b28af712004-06-21 06:50:26 +0000556** Implementation of the total_changes() SQL function. The return value is
557** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000558*/
danielk1977b28af712004-06-21 06:50:26 +0000559static void total_changes(
560 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000561 int NotUsed,
562 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000563){
drhfa4a4b92008-03-19 21:45:51 +0000564 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000565 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000566 /* IMP: R-52756-41993 This function is a wrapper around the
567 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000568 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000569}
570
drh6ed41ad2002-04-06 14:10:47 +0000571/*
drh4e5ffc52004-08-31 00:52:37 +0000572** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000573*/
drh4e5ffc52004-08-31 00:52:37 +0000574struct compareInfo {
575 u8 matchAll;
576 u8 matchOne;
577 u8 matchSet;
578 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000579};
drh55ef4d92005-08-14 01:20:37 +0000580
drhb9175ae2007-12-07 18:39:04 +0000581/*
582** For LIKE and GLOB matching on EBCDIC machines, assume that every
583** character is exactly one byte in size. Also, all characters are
584** able to participate in upper-case-to-lower-case mappings in EBCDIC
585** whereas only characters less than 0x80 do in ASCII.
586*/
587#if defined(SQLITE_EBCDIC)
drh88b33222014-09-25 03:51:37 +0000588# define sqlite3Utf8Read(A) (*((*A)++))
589# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
590# define GlobUpperToLowerAscii(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000591#else
drh88b33222014-09-25 03:51:37 +0000592# define GlobUpperToLower(A) if( A<=0x7f ){ A = sqlite3UpperToLower[A]; }
593# define GlobUpperToLowerAscii(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000594#endif
595
drh4e5ffc52004-08-31 00:52:37 +0000596static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000597/* The correct SQL-92 behavior is for the LIKE operator to ignore
598** case. Thus 'a' LIKE 'A' would be true. */
599static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
600/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
601** is case sensitive causing 'a' LIKE 'A' to be false */
602static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000603
604/*
drh4e5ffc52004-08-31 00:52:37 +0000605** Compare two UTF-8 strings for equality where the first string can
drh9fdfdc82014-09-25 11:08:57 +0000606** potentially be a "glob" or "like" expression. Return true (1) if they
drh4e5ffc52004-08-31 00:52:37 +0000607** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000608**
drh4e5ffc52004-08-31 00:52:37 +0000609** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000610**
drh4e5ffc52004-08-31 00:52:37 +0000611** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000612**
drh4e5ffc52004-08-31 00:52:37 +0000613** '?' Matches exactly one character.
614**
615** [...] Matches one character from the enclosed list of
616** characters.
617**
618** [^...] Matches one character not in the enclosed list.
619**
620** With the [...] and [^...] matching, a ']' character can be included
621** in the list by making it the first character after '[' or '^'. A
622** range of characters can be specified using '-'. Example:
623** "[a-z]" matches any single lower-case letter. To match a '-', make
624** it the last character in the list.
625**
drh9fdfdc82014-09-25 11:08:57 +0000626** Like matching rules:
627**
628** '%' Matches any sequence of zero or more characters
629**
630*** '_' Matches any one character
631**
632** Ec Where E is the "esc" character and c is any other
633** character, including '%', '_', and esc, match exactly c.
634**
635** The comments through this routine usually assume glob matching.
636**
drh4e5ffc52004-08-31 00:52:37 +0000637** This routine is usually quick, but can be N**2 in the worst case.
drh0ac65892002-04-20 14:24:41 +0000638*/
danielk19777c6303c2004-11-17 16:41:29 +0000639static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000640 const u8 *zPattern, /* The glob pattern */
641 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000642 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh0a32fa62011-06-13 12:19:21 +0000643 u32 esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000644){
drh9fdfdc82014-09-25 11:08:57 +0000645 u32 c, c2; /* Next pattern and input string chars */
646 u32 matchOne = pInfo->matchOne; /* "?" or "_" */
647 u32 matchAll = pInfo->matchAll; /* "*" or "%" */
648 u32 matchOther; /* "[" or the escape character */
649 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
650 const u8 *zEscaped = 0; /* One past the last escaped input char */
drh88b33222014-09-25 03:51:37 +0000651
652 /* The GLOB operator does not have an ESCAPE clause. And LIKE does not
653 ** have the matchSet operator. So we either have to look for one or
654 ** the other, never both. Hence the single variable matchOther is used
655 ** to store the one we have to look for.
656 */
657 matchOther = esc ? esc : pInfo->matchSet;
danielk1977d02eb1f2004-06-06 09:44:03 +0000658
drh42610962012-09-17 18:56:32 +0000659 while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000660 if( c==matchAll ){ /* Match "*" */
661 /* Skip over multiple "*" characters in the pattern. If there
662 ** are also "?" characters, skip those as well, but consume a
663 ** single character of the input string for each "?" skipped */
drh42610962012-09-17 18:56:32 +0000664 while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000665 || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000666 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000667 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000668 }
danielk1977ad7dd422004-06-06 12:41:49 +0000669 }
drh66150952007-07-23 19:12:41 +0000670 if( c==0 ){
drh9fdfdc82014-09-25 11:08:57 +0000671 return 1; /* "*" at the end of the pattern matches */
drh88b33222014-09-25 03:51:37 +0000672 }else if( c==matchOther ){
673 if( esc ){
674 c = sqlite3Utf8Read(&zPattern);
675 if( c==0 ) return 0;
676 }else{
drh9fdfdc82014-09-25 11:08:57 +0000677 /* "[...]" immediately follows the "*". We have to do a slow
678 ** recursive search in this case, but it is an unusual case. */
drh88b33222014-09-25 03:51:37 +0000679 assert( matchOther<0x80 ); /* '[' is a single-byte character */
680 while( *zString
681 && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
682 SQLITE_SKIP_UTF8(zString);
683 }
684 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000685 }
drh66150952007-07-23 19:12:41 +0000686 }
drh9fdfdc82014-09-25 11:08:57 +0000687
688 /* At this point variable c contains the first character of the
689 ** pattern string past the "*". Search in the input string for the
690 ** first matching character and recursively contine the match from
691 ** that point.
692 **
693 ** For a case-insensitive search, set variable cx to be the same as
694 ** c but in the other case and search the input string for either
695 ** c or cx.
696 */
697 if( c<=0x80 ){
698 u32 cx;
699 if( noCase ){
700 cx = sqlite3Toupper(c);
701 c = sqlite3Tolower(c);
drh66150952007-07-23 19:12:41 +0000702 }else{
drh9fdfdc82014-09-25 11:08:57 +0000703 cx = c;
drh4e5ffc52004-08-31 00:52:37 +0000704 }
drh9fdfdc82014-09-25 11:08:57 +0000705 while( (c2 = *(zString++))!=0 ){
706 if( c2!=c && c2!=cx ) continue;
707 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
708 }
709 }else{
710 while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
711 if( c2!=c ) continue;
712 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
713 }
drh66150952007-07-23 19:12:41 +0000714 }
715 return 0;
drh88b33222014-09-25 03:51:37 +0000716 }
drh88b33222014-09-25 03:51:37 +0000717 if( c==matchOther ){
718 if( esc ){
719 c = sqlite3Utf8Read(&zPattern);
720 if( c==0 ) return 0;
drh9fdfdc82014-09-25 11:08:57 +0000721 zEscaped = zPattern;
drh88b33222014-09-25 03:51:37 +0000722 }else{
723 u32 prior_c = 0;
drh9fdfdc82014-09-25 11:08:57 +0000724 int seen = 0;
725 int invert = 0;
drh88b33222014-09-25 03:51:37 +0000726 c = sqlite3Utf8Read(&zString);
727 if( c==0 ) return 0;
728 c2 = sqlite3Utf8Read(&zPattern);
729 if( c2=='^' ){
730 invert = 1;
731 c2 = sqlite3Utf8Read(&zPattern);
732 }
733 if( c2==']' ){
734 if( c==']' ) seen = 1;
735 c2 = sqlite3Utf8Read(&zPattern);
736 }
737 while( c2 && c2!=']' ){
738 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
739 c2 = sqlite3Utf8Read(&zPattern);
740 if( c>=prior_c && c<=c2 ) seen = 1;
741 prior_c = 0;
742 }else{
743 if( c==c2 ){
744 seen = 1;
745 }
746 prior_c = c2;
747 }
748 c2 = sqlite3Utf8Read(&zPattern);
749 }
750 if( c2==0 || (seen ^ invert)==0 ){
751 return 0;
752 }
753 continue;
754 }
755 }
756 c2 = sqlite3Utf8Read(&zString);
757 if( c==c2 ) continue;
drh9fdfdc82014-09-25 11:08:57 +0000758 if( noCase && c<0x80 && c2<0x80 && sqlite3Tolower(c)==sqlite3Tolower(c2) ){
759 continue;
760 }
761 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
762 return 0;
danielk197751ad0ec2004-05-24 12:39:02 +0000763 }
drh4e5ffc52004-08-31 00:52:37 +0000764 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000765}
drh4e5ffc52004-08-31 00:52:37 +0000766
drh55ef4d92005-08-14 01:20:37 +0000767/*
drh56282a52013-04-10 16:13:38 +0000768** The sqlite3_strglob() interface.
769*/
770int sqlite3_strglob(const char *zGlobPattern, const char *zString){
771 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, 0)==0;
772}
773
774/*
drh55ef4d92005-08-14 01:20:37 +0000775** Count the number of times that the LIKE operator (or GLOB which is
776** just a variation of LIKE) gets called. This is used for testing
777** only.
778*/
779#ifdef SQLITE_TEST
780int sqlite3_like_count = 0;
781#endif
782
danielk19773f6b0872004-06-17 05:36:44 +0000783
784/*
785** Implementation of the like() SQL function. This function implements
786** the build-in LIKE operator. The first argument to the function is the
787** pattern and the second argument is the string. So, the SQL statements:
788**
789** A LIKE B
790**
791** is implemented as like(B,A).
792**
drh55ef4d92005-08-14 01:20:37 +0000793** This same function (with a different compareInfo structure) computes
794** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000795*/
796static void likeFunc(
797 sqlite3_context *context,
798 int argc,
799 sqlite3_value **argv
800){
drhbeb818d2007-05-08 15:34:47 +0000801 const unsigned char *zA, *zB;
drh0a32fa62011-06-13 12:19:21 +0000802 u32 escape = 0;
drh27e62db2009-04-02 10:16:17 +0000803 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000804 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000805
drh1f0feef2007-05-15 13:27:07 +0000806 zB = sqlite3_value_text(argv[0]);
807 zA = sqlite3_value_text(argv[1]);
808
drhbeb818d2007-05-08 15:34:47 +0000809 /* Limit the length of the LIKE or GLOB pattern to avoid problems
810 ** of deep recursion and N*N behavior in patternCompare().
811 */
drh27e62db2009-04-02 10:16:17 +0000812 nPat = sqlite3_value_bytes(argv[0]);
813 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
814 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
815 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000816 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
817 return;
818 }
drh1f0feef2007-05-15 13:27:07 +0000819 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000820
danielk19777c6303c2004-11-17 16:41:29 +0000821 if( argc==3 ){
822 /* The escape character string must consist of a single UTF-8 character.
823 ** Otherwise, return an error.
824 */
825 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000826 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000827 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000828 sqlite3_result_error(context,
829 "ESCAPE expression must be a single character", -1);
830 return;
831 }
drh42610962012-09-17 18:56:32 +0000832 escape = sqlite3Utf8Read(&zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000833 }
danielk19773f6b0872004-06-17 05:36:44 +0000834 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000835 struct compareInfo *pInfo = sqlite3_user_data(context);
836#ifdef SQLITE_TEST
837 sqlite3_like_count++;
838#endif
drhbeb818d2007-05-08 15:34:47 +0000839
danielk1977b56fe1f2007-05-09 08:24:44 +0000840 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000841 }
drh8912d102002-05-26 21:34:58 +0000842}
843
844/*
845** Implementation of the NULLIF(x,y) function. The result is the first
846** argument if the arguments are different. The result is NULL if the
847** arguments are equal to each other.
848*/
drhf9b596e2004-05-26 16:54:42 +0000849static void nullifFunc(
850 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000851 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000852 sqlite3_value **argv
853){
danielk1977dc1bdc42004-06-11 10:51:27 +0000854 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000855 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000856 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000857 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000858 }
drh0ac65892002-04-20 14:24:41 +0000859}
860
drh647cb0e2002-11-04 19:32:25 +0000861/*
drh47baebc2009-08-14 16:01:24 +0000862** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000863** of the SQLite library that is running.
864*/
drhf9b596e2004-05-26 16:54:42 +0000865static void versionFunc(
866 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000867 int NotUsed,
868 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000869){
danielk197762c14b32008-11-19 09:05:26 +0000870 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000871 /* IMP: R-48699-48617 This function is an SQL wrapper around the
872 ** sqlite3_libversion() C-interface. */
873 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000874}
875
drh47baebc2009-08-14 16:01:24 +0000876/*
877** Implementation of the sqlite_source_id() function. The result is a string
878** that identifies the particular version of the source code used to build
879** SQLite.
880*/
881static void sourceidFunc(
882 sqlite3_context *context,
883 int NotUsed,
884 sqlite3_value **NotUsed2
885){
886 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000887 /* IMP: R-24470-31136 This function is an SQL wrapper around the
888 ** sqlite3_sourceid() C interface. */
889 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000890}
891
shanehbdea6d12010-02-23 04:19:54 +0000892/*
drh3ca84ef2011-04-25 18:03:10 +0000893** Implementation of the sqlite_log() function. This is a wrapper around
894** sqlite3_log(). The return value is NULL. The function exists purely for
895** its side-effects.
896*/
drh840561f2011-04-27 18:08:42 +0000897static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000898 sqlite3_context *context,
899 int argc,
900 sqlite3_value **argv
901){
902 UNUSED_PARAMETER(argc);
903 UNUSED_PARAMETER(context);
904 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
905}
906
907/*
shanehdc97a8c2010-02-23 20:08:35 +0000908** Implementation of the sqlite_compileoption_used() function.
909** The result is an integer that identifies if the compiler option
910** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000911*/
shanehdc97a8c2010-02-23 20:08:35 +0000912#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
913static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000914 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000915 int argc,
916 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000917){
shanehdc97a8c2010-02-23 20:08:35 +0000918 const char *zOptName;
919 assert( argc==1 );
920 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000921 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
922 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
923 ** function.
924 */
drh264a2d42010-02-25 15:28:41 +0000925 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000926 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000927 }
shanehbdea6d12010-02-23 04:19:54 +0000928}
shanehdc97a8c2010-02-23 20:08:35 +0000929#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
930
931/*
932** Implementation of the sqlite_compileoption_get() function.
933** The result is a string that identifies the compiler options
934** used to build SQLite.
935*/
936#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
937static void compileoptiongetFunc(
938 sqlite3_context *context,
939 int argc,
940 sqlite3_value **argv
941){
942 int n;
943 assert( argc==1 );
944 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000945 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
946 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
947 */
shanehdc97a8c2010-02-23 20:08:35 +0000948 n = sqlite3_value_int(argv[0]);
949 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
950}
951#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000952
drh137c7282007-01-29 17:58:28 +0000953/* Array for converting from half-bytes (nybbles) into ASCII hex
954** digits. */
955static const char hexdigits[] = {
956 '0', '1', '2', '3', '4', '5', '6', '7',
957 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
958};
danielk1977d641d642004-11-18 15:44:29 +0000959
drh47394702003-08-20 01:03:33 +0000960/*
drh47394702003-08-20 01:03:33 +0000961** Implementation of the QUOTE() function. This function takes a single
962** argument. If the argument is numeric, the return value is the same as
963** the argument. If the argument is NULL, the return value is the string
964** "NULL". Otherwise, the argument is enclosed in single quotes with
965** single-quote escapes.
966*/
danielk19770ae8b832004-05-25 12:05:56 +0000967static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000968 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000969 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000970 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000971 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000972 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000973 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000974 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000975 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
976 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
977 if( r1!=r2 ){
978 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
979 }
980 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
981 break;
982 }
983 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000984 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000985 break;
986 }
danielk19773f41e972004-06-08 00:39:01 +0000987 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000988 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000989 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000990 int nBlob = sqlite3_value_bytes(argv[0]);
991 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000992 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000993 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000994 int i;
995 for(i=0; i<nBlob; i++){
996 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
997 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
998 }
999 zText[(nBlob*2)+2] = '\'';
1000 zText[(nBlob*2)+3] = '\0';
1001 zText[0] = 'X';
1002 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +00001003 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +00001004 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +00001005 }
1006 break;
1007 }
drh9c054832004-05-31 18:51:57 +00001008 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +00001009 int i,j;
1010 u64 n;
drh2646da72005-12-09 20:02:05 +00001011 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +00001012 char *z;
1013
drh7a521cf2007-04-25 18:23:52 +00001014 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +00001015 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +00001016 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +00001017 if( z ){
1018 z[0] = '\'';
1019 for(i=0, j=1; zArg[i]; i++){
1020 z[j++] = zArg[i];
1021 if( zArg[i]=='\'' ){
1022 z[j++] = '\'';
1023 }
drhf9b596e2004-05-26 16:54:42 +00001024 }
danielk1977a1644fd2007-08-29 12:31:25 +00001025 z[j++] = '\'';
1026 z[j] = 0;
1027 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +00001028 }
drha0df4cc2009-02-02 17:29:59 +00001029 break;
1030 }
1031 default: {
1032 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1033 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1034 break;
drhf9b596e2004-05-26 16:54:42 +00001035 }
drh47394702003-08-20 01:03:33 +00001036 }
1037}
1038
drh137c7282007-01-29 17:58:28 +00001039/*
drhd495d8c2013-02-22 19:34:25 +00001040** The unicode() function. Return the integer unicode code-point value
1041** for the first character of the input string.
1042*/
1043static void unicodeFunc(
1044 sqlite3_context *context,
1045 int argc,
1046 sqlite3_value **argv
1047){
1048 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001049 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001050 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1051}
1052
1053/*
1054** The char() function takes zero or more arguments, each of which is
1055** an integer. It constructs a string where each character of the string
1056** is the unicode character for the corresponding integer argument.
1057*/
1058static void charFunc(
1059 sqlite3_context *context,
1060 int argc,
1061 sqlite3_value **argv
1062){
1063 unsigned char *z, *zOut;
1064 int i;
drhf3cdcdc2015-04-29 16:50:28 +00001065 zOut = z = sqlite3_malloc64( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001066 if( z==0 ){
1067 sqlite3_result_error_nomem(context);
1068 return;
1069 }
1070 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001071 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001072 unsigned c;
1073 x = sqlite3_value_int64(argv[i]);
1074 if( x<0 || x>0x10ffff ) x = 0xfffd;
1075 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001076 if( c<0x00080 ){
1077 *zOut++ = (u8)(c&0xFF);
1078 }else if( c<0x00800 ){
1079 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1080 *zOut++ = 0x80 + (u8)(c & 0x3F);
1081 }else if( c<0x10000 ){
1082 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1083 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1084 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001085 }else{
drhfe7a5d12013-03-07 14:00:04 +00001086 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1087 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1088 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1089 *zOut++ = 0x80 + (u8)(c & 0x3F);
1090 } \
drhd495d8c2013-02-22 19:34:25 +00001091 }
drhbbf483f2014-09-09 20:30:24 +00001092 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001093}
1094
1095/*
drh137c7282007-01-29 17:58:28 +00001096** The hex() function. Interpret the argument as a blob. Return
1097** a hexadecimal rendering as text.
1098*/
1099static void hexFunc(
1100 sqlite3_context *context,
1101 int argc,
1102 sqlite3_value **argv
1103){
1104 int i, n;
1105 const unsigned char *pBlob;
1106 char *zHex, *z;
1107 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001108 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001109 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001110 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001111 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001112 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001113 if( zHex ){
1114 for(i=0; i<n; i++, pBlob++){
1115 unsigned char c = *pBlob;
1116 *(z++) = hexdigits[(c>>4)&0xf];
1117 *(z++) = hexdigits[c&0xf];
1118 }
1119 *z = 0;
1120 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001121 }
drh137c7282007-01-29 17:58:28 +00001122}
1123
drh26b6d902007-03-17 13:27:54 +00001124/*
drh8cff3822007-05-02 02:08:28 +00001125** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1126*/
1127static void zeroblobFunc(
1128 sqlite3_context *context,
1129 int argc,
1130 sqlite3_value **argv
1131){
drh98640a32007-06-07 19:08:32 +00001132 i64 n;
drh27e62db2009-04-02 10:16:17 +00001133 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +00001134 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001135 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001136 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +00001137 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
1138 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
1139 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +00001140 sqlite3_result_error_toobig(context);
1141 }else{
drhab2f1f92010-01-11 18:26:42 +00001142 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
drh98640a32007-06-07 19:08:32 +00001143 }
drh8cff3822007-05-02 02:08:28 +00001144}
1145
1146/*
drh26b6d902007-03-17 13:27:54 +00001147** The replace() function. Three arguments are all strings: call
1148** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001149** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001150** must be exact. Collating sequences are not used.
1151*/
1152static void replaceFunc(
1153 sqlite3_context *context,
1154 int argc,
1155 sqlite3_value **argv
1156){
1157 const unsigned char *zStr; /* The input string A */
1158 const unsigned char *zPattern; /* The pattern string B */
1159 const unsigned char *zRep; /* The replacement string C */
1160 unsigned char *zOut; /* The output */
1161 int nStr; /* Size of zStr */
1162 int nPattern; /* Size of zPattern */
1163 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001164 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001165 int loopLimit; /* Last zStr[] that might match zPattern[] */
1166 int i, j; /* Loop counters */
1167
1168 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001169 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001170 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001171 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001172 nStr = sqlite3_value_bytes(argv[0]);
1173 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001174 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001175 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001176 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1177 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001178 return;
1179 }
1180 if( zPattern[0]==0 ){
1181 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1182 sqlite3_result_value(context, argv[0]);
1183 return;
1184 }
drh1f0feef2007-05-15 13:27:07 +00001185 nPattern = sqlite3_value_bytes(argv[1]);
1186 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001187 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001188 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001189 nRep = sqlite3_value_bytes(argv[2]);
1190 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001191 nOut = nStr + 1;
1192 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001193 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001194 if( zOut==0 ){
1195 return;
drh26b6d902007-03-17 13:27:54 +00001196 }
drh26b6d902007-03-17 13:27:54 +00001197 loopLimit = nStr - nPattern;
1198 for(i=j=0; i<=loopLimit; i++){
1199 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1200 zOut[j++] = zStr[i];
1201 }else{
drh4a50aac2007-08-23 02:47:53 +00001202 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001203 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001204 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001205 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1206 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1207 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001208 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001209 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001210 return;
1211 }
drh4a50aac2007-08-23 02:47:53 +00001212 zOld = zOut;
drhf3cdcdc2015-04-29 16:50:28 +00001213 zOut = sqlite3_realloc64(zOut, (int)nOut);
drh2e6400b2007-05-08 15:46:18 +00001214 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001215 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001216 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001217 return;
1218 }
drh26b6d902007-03-17 13:27:54 +00001219 memcpy(&zOut[j], zRep, nRep);
1220 j += nRep;
1221 i += nPattern-1;
1222 }
1223 }
drh2e6400b2007-05-08 15:46:18 +00001224 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001225 memcpy(&zOut[j], &zStr[i], nStr-i);
1226 j += nStr - i;
1227 assert( j<=nOut );
1228 zOut[j] = 0;
1229 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1230}
1231
drh309b3382007-03-17 17:52:42 +00001232/*
1233** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1234** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1235*/
1236static void trimFunc(
1237 sqlite3_context *context,
1238 int argc,
1239 sqlite3_value **argv
1240){
1241 const unsigned char *zIn; /* Input string */
1242 const unsigned char *zCharSet; /* Set of characters to trim */
1243 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001244 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001245 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001246 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1247 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001248 int nChar; /* Number of characters in zCharSet */
1249
drh309b3382007-03-17 17:52:42 +00001250 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1251 return;
1252 }
1253 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001254 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001255 nIn = sqlite3_value_bytes(argv[0]);
1256 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001257 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001258 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001259 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001260 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001261 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001262 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001263 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001264 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001265 return;
drhd1e3a612007-04-27 21:59:52 +00001266 }else{
1267 const unsigned char *z;
1268 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001269 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001270 }
1271 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001272 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001273 if( azChar==0 ){
1274 return;
1275 }
1276 aLen = (unsigned char*)&azChar[nChar];
1277 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001278 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001279 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001280 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001281 }
1282 }
drh309b3382007-03-17 17:52:42 +00001283 }
drhd1e3a612007-04-27 21:59:52 +00001284 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001285 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001286 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001287 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001288 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001289 for(i=0; i<nChar; i++){
1290 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001291 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001292 }
1293 if( i>=nChar ) break;
1294 zIn += len;
1295 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001296 }
1297 }
1298 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001299 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001300 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001301 for(i=0; i<nChar; i++){
1302 len = aLen[i];
1303 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1304 }
1305 if( i>=nChar ) break;
1306 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001307 }
1308 }
drhd1e3a612007-04-27 21:59:52 +00001309 if( zCharSet ){
1310 sqlite3_free(azChar);
1311 }
drh309b3382007-03-17 17:52:42 +00001312 }
1313 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1314}
drh26b6d902007-03-17 13:27:54 +00001315
danielk1977a4de4532008-09-02 15:44:08 +00001316
drh2ba3ccc2009-12-08 02:06:08 +00001317/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1318** is only available if the SQLITE_SOUNDEX compile-time option is used
1319** when SQLite is built.
1320*/
drhd24cc422003-03-27 12:51:24 +00001321#ifdef SQLITE_SOUNDEX
1322/*
1323** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001324**
1325** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1326** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001327*/
drh137c7282007-01-29 17:58:28 +00001328static void soundexFunc(
1329 sqlite3_context *context,
1330 int argc,
1331 sqlite3_value **argv
1332){
drhd24cc422003-03-27 12:51:24 +00001333 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001334 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001335 int i, j;
1336 static const unsigned char iCode[] = {
1337 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1338 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1341 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1342 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1343 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1344 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1345 };
1346 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001347 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001348 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001349 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001350 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001351 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001352 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001353 for(j=1; j<4 && zIn[i]; i++){
1354 int code = iCode[zIn[i]&0x7f];
1355 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001356 if( code!=prevcode ){
1357 prevcode = code;
1358 zResult[j++] = code + '0';
1359 }
1360 }else{
1361 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001362 }
1363 }
1364 while( j<4 ){
1365 zResult[j++] = '0';
1366 }
1367 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001368 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001369 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001370 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1371 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001372 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001373 }
1374}
drh2ba3ccc2009-12-08 02:06:08 +00001375#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001376
drhfdb83b22006-06-17 14:12:47 +00001377#ifndef SQLITE_OMIT_LOAD_EXTENSION
1378/*
1379** A function that loads a shared-library extension then returns NULL.
1380*/
1381static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001382 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001383 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001384 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001385 char *zErrMsg = 0;
1386
1387 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001388 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001389 }else{
1390 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001391 }
drh7a521cf2007-04-25 18:23:52 +00001392 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001393 sqlite3_result_error(context, zErrMsg, -1);
1394 sqlite3_free(zErrMsg);
1395 }
1396}
1397#endif
1398
danielk197701427a62005-01-11 13:02:33 +00001399
drh0ac65892002-04-20 14:24:41 +00001400/*
drhd3a149e2002-02-24 17:12:53 +00001401** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001402** sum() or avg() aggregate computation.
1403*/
1404typedef struct SumCtx SumCtx;
1405struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001406 double rSum; /* Floating point sum */
1407 i64 iSum; /* Integer sum */
1408 i64 cnt; /* Number of elements summed */
1409 u8 overflow; /* True if integer overflow seen */
1410 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001411};
1412
1413/*
drha97fdd32006-01-12 22:17:50 +00001414** Routines used to compute the sum, average, and total.
1415**
1416** The SUM() function follows the (broken) SQL standard which means
1417** that it returns NULL if it sums over no inputs. TOTAL returns
1418** 0.0 in that case. In addition, TOTAL always returns a float where
1419** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001420** value. TOTAL never fails, but SUM might through an exception if
1421** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001422*/
danielk19770ae8b832004-05-25 12:05:56 +00001423static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001424 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001425 int type;
drh3f219f42005-09-08 19:45:57 +00001426 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001427 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001428 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001429 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001430 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001431 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001432 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001433 i64 v = sqlite3_value_int64(argv[0]);
1434 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001435 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1436 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001437 }
1438 }else{
drh8c08e862006-02-11 17:34:00 +00001439 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001440 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001441 }
drh739105c2002-05-29 23:22:23 +00001442 }
drhdd5baa92002-02-27 19:50:59 +00001443}
danielk19770ae8b832004-05-25 12:05:56 +00001444static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001445 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001446 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001447 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001448 if( p->overflow ){
1449 sqlite3_result_error(context,"integer overflow",-1);
1450 }else if( p->approx ){
1451 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001452 }else{
drh8c08e862006-02-11 17:34:00 +00001453 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001454 }
drh3d1d95e2005-09-08 10:37:01 +00001455 }
drhdd5baa92002-02-27 19:50:59 +00001456}
danielk19770ae8b832004-05-25 12:05:56 +00001457static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001458 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001459 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001460 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001461 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001462 }
1463}
drha97fdd32006-01-12 22:17:50 +00001464static void totalFinalize(sqlite3_context *context){
1465 SumCtx *p;
1466 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001467 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1468 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001469}
drhdd5baa92002-02-27 19:50:59 +00001470
1471/*
drh0bce8352002-02-28 00:41:10 +00001472** The following structure keeps track of state information for the
1473** count() aggregate function.
1474*/
1475typedef struct CountCtx CountCtx;
1476struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001477 i64 n;
drh0bce8352002-02-28 00:41:10 +00001478};
drhdd5baa92002-02-27 19:50:59 +00001479
drh0bce8352002-02-28 00:41:10 +00001480/*
1481** Routines to implement the count() aggregate function.
1482*/
danielk19770ae8b832004-05-25 12:05:56 +00001483static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001484 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001485 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001486 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001487 p->n++;
1488 }
drh2e79c3d2009-04-08 23:04:14 +00001489
drhd3264c72009-04-15 13:39:47 +00001490#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001491 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1492 ** sure it still operates correctly, verify that its count agrees with our
1493 ** internal count when using count(*) and when the total count can be
1494 ** expressed as a 32-bit integer. */
1495 assert( argc==1 || p==0 || p->n>0x7fffffff
1496 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001497#endif
drh0bce8352002-02-28 00:41:10 +00001498}
danielk19770ae8b832004-05-25 12:05:56 +00001499static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001500 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001501 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001502 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001503}
1504
1505/*
drh0bce8352002-02-28 00:41:10 +00001506** Routines to implement min() and max() aggregate functions.
1507*/
danielk197762c14b32008-11-19 09:05:26 +00001508static void minmaxStep(
1509 sqlite3_context *context,
1510 int NotUsed,
1511 sqlite3_value **argv
1512){
danielk197788208052004-05-25 01:13:20 +00001513 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001514 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001515 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001516
drh9eb516c2004-07-18 20:52:32 +00001517 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001518 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001519
drh94a6d992012-02-02 18:42:09 +00001520 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1521 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1522 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001523 int max;
1524 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001525 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001526 /* This step function is used for both the min() and max() aggregates,
1527 ** the only difference between the two being that the sense of the
1528 ** comparison is inverted. For the max() aggregate, the
1529 ** sqlite3_user_data() function returns (void *)-1. For min() it
1530 ** returns (void *)db, where db is the sqlite3* database pointer.
1531 ** Therefore the next statement sets variable 'max' to 1 for the max()
1532 ** aggregate, or 0 for min().
1533 */
drh309b3382007-03-17 17:52:42 +00001534 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001535 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001536 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001537 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001538 }else{
1539 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001540 }
drh268380c2004-02-25 13:47:31 +00001541 }else{
drh035e5632014-09-16 14:16:31 +00001542 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001543 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001544 }
1545}
danielk19770ae8b832004-05-25 12:05:56 +00001546static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001547 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001548 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1549 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001550 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001551 sqlite3_result_value(context, pRes);
1552 }
1553 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001554 }
1555}
drhdd5baa92002-02-27 19:50:59 +00001556
drhb0689692007-11-01 17:38:30 +00001557/*
1558** group_concat(EXPR, ?SEPARATOR?)
1559*/
1560static void groupConcatStep(
1561 sqlite3_context *context,
1562 int argc,
1563 sqlite3_value **argv
1564){
1565 const char *zVal;
drhade86482007-11-28 22:36:40 +00001566 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001567 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001568 int nVal, nSep;
1569 assert( argc==1 || argc==2 );
1570 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001571 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1572
1573 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001574 sqlite3 *db = sqlite3_context_db_handle(context);
drhc0490572015-05-02 11:45:53 +00001575 int firstTerm = pAccum->mxAlloc==0;
drhbb4957f2008-03-20 14:03:29 +00001576 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001577 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001578 if( argc==2 ){
1579 zSep = (char*)sqlite3_value_text(argv[1]);
1580 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001581 }else{
1582 zSep = ",";
drhade86482007-11-28 22:36:40 +00001583 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001584 }
drha9ab4812013-12-11 11:00:44 +00001585 if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001586 }
drh07d31172009-02-02 21:57:05 +00001587 zVal = (char*)sqlite3_value_text(argv[0]);
1588 nVal = sqlite3_value_bytes(argv[0]);
drh8009c9b2014-05-07 20:24:00 +00001589 if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001590 }
1591}
1592static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001593 StrAccum *pAccum;
1594 pAccum = sqlite3_aggregate_context(context, 0);
1595 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001596 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001597 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001598 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001599 sqlite3_result_error_nomem(context);
1600 }else{
1601 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1602 sqlite3_free);
1603 }
drhb0689692007-11-01 17:38:30 +00001604 }
1605}
drh4e5ffc52004-08-31 00:52:37 +00001606
drhd3a149e2002-02-24 17:12:53 +00001607/*
drha4741842010-04-25 20:58:37 +00001608** This routine does per-connection function registration. Most
1609** of the built-in functions above are part of the global function set.
1610** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001611*/
drh9bb575f2004-09-06 17:24:11 +00001612void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001613 int rc = sqlite3_overload_function(db, "MATCH", 2);
1614 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1615 if( rc==SQLITE_NOMEM ){
1616 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001617 }
drh55ef4d92005-08-14 01:20:37 +00001618}
1619
1620/*
1621** Set the LIKEOPT flag on the 2-argument function with the given name.
1622*/
drh1bd10f82008-12-10 21:19:56 +00001623static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001624 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001625 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1626 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001627 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001628 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001629 }
1630}
1631
1632/*
1633** Register the built-in LIKE and GLOB functions. The caseSensitive
1634** parameter determines whether or not the LIKE operator is case
1635** sensitive. GLOB is always case sensitive.
1636*/
1637void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1638 struct compareInfo *pInfo;
1639 if( caseSensitive ){
1640 pInfo = (struct compareInfo*)&likeInfoAlt;
1641 }else{
1642 pInfo = (struct compareInfo*)&likeInfoNorm;
1643 }
drh901e9942010-12-15 18:54:37 +00001644 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1645 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1646 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001647 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001648 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1649 setLikeOptFlag(db, "like",
1650 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001651}
1652
1653/*
1654** pExpr points to an expression which implements a function. If
1655** it is appropriate to apply the LIKE optimization to that function
1656** then set aWc[0] through aWc[2] to the wildcard characters and
1657** return TRUE. If the function is not a LIKE-style function then
1658** return FALSE.
drh16897072015-03-07 00:57:37 +00001659**
1660** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1661** the function (default for LIKE). If the function makes the distinction
1662** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1663** false.
drh55ef4d92005-08-14 01:20:37 +00001664*/
drhd64fe2f2005-08-28 17:00:23 +00001665int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001666 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001667 if( pExpr->op!=TK_FUNCTION
1668 || !pExpr->x.pList
1669 || pExpr->x.pList->nExpr!=2
1670 ){
drh55ef4d92005-08-14 01:20:37 +00001671 return 0;
1672 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001673 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001674 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1675 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001676 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001677 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001678 return 0;
1679 }
1680
1681 /* The memcpy() statement assumes that the wildcard characters are
1682 ** the first three statements in the compareInfo structure. The
1683 ** asserts() that follow verify that assumption
1684 */
1685 memcpy(aWc, pDef->pUserData, 3);
1686 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1687 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1688 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001689 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001690 return 1;
drhdc04c582002-02-24 01:55:15 +00001691}
danielk19778c0a7912008-08-20 14:49:23 +00001692
drh70a8ca32008-08-21 18:49:27 +00001693/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001694** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001695** to the global function hash table. This occurs at start-time (as
1696** a consequence of calling sqlite3_initialize()).
1697**
1698** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001699*/
1700void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001701 /*
1702 ** The following array holds FuncDef structures for all of the functions
1703 ** defined in this file.
1704 **
1705 ** The array cannot be constant since changes are made to the
1706 ** FuncDef.pHash elements at start-time. The elements of this array
1707 ** are read-only after initialization is complete.
1708 */
1709 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1710 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1711 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1712 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1713 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1714 FUNCTION(trim, 1, 3, 0, trimFunc ),
1715 FUNCTION(trim, 2, 3, 0, trimFunc ),
1716 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1717 FUNCTION(min, 0, 0, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001718 AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize,
1719 SQLITE_FUNC_MINMAX ),
danielk197793ce7412008-09-01 19:14:02 +00001720 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1721 FUNCTION(max, 0, 1, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001722 AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize,
1723 SQLITE_FUNC_MINMAX ),
drha748fdc2012-03-28 01:34:47 +00001724 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1725 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001726 FUNCTION(instr, 2, 0, 0, instrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001727 FUNCTION(substr, 2, 0, 0, substrFunc ),
1728 FUNCTION(substr, 3, 0, 0, substrFunc ),
drha5c14162013-12-17 15:03:06 +00001729 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001730 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1731 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001732 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001733#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001734 FUNCTION(round, 1, 0, 0, roundFunc ),
1735 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001736#endif
danielk197793ce7412008-09-01 19:14:02 +00001737 FUNCTION(upper, 1, 0, 0, upperFunc ),
1738 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1739 FUNCTION(coalesce, 1, 0, 0, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00001740 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhcca9f3d2013-09-06 15:23:29 +00001741 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001742 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001743 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
1744 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhaae0f9e2013-09-11 11:38:58 +00001745 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh03202a92014-06-17 16:11:28 +00001746 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drhb1fba282013-11-21 14:33:48 +00001747 VFUNCTION(random, 0, 0, 0, randomFunc ),
1748 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001749 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1750 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
drh47baebc2009-08-14 16:01:24 +00001751 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001752 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
drhf442e332014-09-10 19:01:14 +00001753#if SQLITE_USER_AUTHENTICATION
1754 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
1755#endif
shanehdc97a8c2010-02-23 20:08:35 +00001756#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
drh8bb76d32010-02-26 16:37:47 +00001757 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1758 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
shanehdc97a8c2010-02-23 20:08:35 +00001759#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
danielk197793ce7412008-09-01 19:14:02 +00001760 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001761 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1762 VFUNCTION(changes, 0, 0, 0, changes ),
1763 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001764 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1765 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1766 #ifdef SQLITE_SOUNDEX
1767 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1768 #endif
1769 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1770 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1771 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1772 #endif
1773 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1774 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1775 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
drh9588ad92014-09-15 14:46:02 +00001776 AGGREGATE2(count, 0, 0, 0, countStep, countFinalize,
1777 SQLITE_FUNC_COUNT ),
danielk197793ce7412008-09-01 19:14:02 +00001778 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001779 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1780 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001781
1782 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1783 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1784 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1785 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1786 #else
1787 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1788 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1789 #endif
1790 };
1791
drh70a8ca32008-08-21 18:49:27 +00001792 int i;
danielk197793ce7412008-09-01 19:14:02 +00001793 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001794 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001795
drh70a8ca32008-08-21 18:49:27 +00001796 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001797 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001798 }
drh777c5382008-08-21 20:21:34 +00001799 sqlite3RegisterDateTimeFunctions();
drh545f5872010-04-24 14:02:59 +00001800#ifndef SQLITE_OMIT_ALTERTABLE
1801 sqlite3AlterFunctions();
1802#endif
dan0106e372013-08-12 16:34:32 +00001803#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1804 sqlite3AnalyzeFunctions();
1805#endif
drh70a8ca32008-08-21 18:49:27 +00001806}