blob: 662a08f504d39ec400df946d7b0866c92a7ff2f9 [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;
234 int n;
drhc0490572015-05-02 11:45:53 +0000235 sqlite3 *db = sqlite3_context_db_handle(context);
drha5c14162013-12-17 15:03:06 +0000236
237 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
238 x.nArg = argc-1;
239 x.nUsed = 0;
240 x.apArg = argv+1;
drhc0490572015-05-02 11:45:53 +0000241 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
drh5f4a6862016-01-30 12:50:25 +0000242 str.printfFlags = SQLITE_PRINTF_SQLFUNC;
243 sqlite3XPrintf(&str, zFormat, &x);
drha5c14162013-12-17 15:03:06 +0000244 n = str.nChar;
245 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
246 SQLITE_DYNAMIC);
247 }
248}
249
250/*
drhf764e6f2007-05-15 01:13:47 +0000251** Implementation of the substr() function.
252**
253** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
254** p1 is 1-indexed. So substr(x,1,1) returns the first character
255** of x. If x is text, then we actually count UTF-8 characters.
256** If x is a blob, then we count bytes.
257**
258** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000259**
drhf7b54962013-05-28 12:11:54 +0000260** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000261*/
drhf9b596e2004-05-26 16:54:42 +0000262static void substrFunc(
263 sqlite3_context *context,
264 int argc,
265 sqlite3_value **argv
266){
drh2646da72005-12-09 20:02:05 +0000267 const unsigned char *z;
268 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000269 int len;
drhf764e6f2007-05-15 01:13:47 +0000270 int p0type;
drh023ae032007-05-08 12:12:16 +0000271 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000272 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000273
drh64f31512007-10-12 19:11:55 +0000274 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000275 if( sqlite3_value_type(argv[1])==SQLITE_NULL
276 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
277 ){
278 return;
279 }
drhf764e6f2007-05-15 01:13:47 +0000280 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000281 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000282 if( p0type==SQLITE_BLOB ){
283 len = sqlite3_value_bytes(argv[0]);
284 z = sqlite3_value_blob(argv[0]);
285 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000286 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000287 }else{
288 z = sqlite3_value_text(argv[0]);
289 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000290 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000291 if( p1<0 ){
292 for(z2=z; *z2; len++){
293 SQLITE_SKIP_UTF8(z2);
294 }
drh4a919112007-05-15 11:55:09 +0000295 }
drhf764e6f2007-05-15 01:13:47 +0000296 }
drh883ad042015-02-19 00:29:11 +0000297#ifdef SQLITE_SUBSTR_COMPATIBILITY
298 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
299 ** as substr(X,1,N) - it returns the first N characters of X. This
300 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
301 ** from 2009-02-02 for compatibility of applications that exploited the
302 ** old buggy behavior. */
303 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
304#endif
drh64f31512007-10-12 19:11:55 +0000305 if( argc==3 ){
306 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000307 if( p2<0 ){
308 p2 = -p2;
309 negP2 = 1;
310 }
drh64f31512007-10-12 19:11:55 +0000311 }else{
drhbb4957f2008-03-20 14:03:29 +0000312 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000313 }
drh0bce8352002-02-28 00:41:10 +0000314 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000315 p1 += len;
drh653bc752002-02-28 03:31:10 +0000316 if( p1<0 ){
317 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000318 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000319 p1 = 0;
320 }
drh0bce8352002-02-28 00:41:10 +0000321 }else if( p1>0 ){
322 p1--;
drh65595cd2009-02-02 16:32:55 +0000323 }else if( p2>0 ){
324 p2--;
drh0bce8352002-02-28 00:41:10 +0000325 }
drh65595cd2009-02-02 16:32:55 +0000326 if( negP2 ){
327 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000328 if( p1<0 ){
329 p2 += p1;
330 p1 = 0;
331 }
332 }
drh65595cd2009-02-02 16:32:55 +0000333 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000334 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000335 while( *z && p1 ){
336 SQLITE_SKIP_UTF8(z);
337 p1--;
drhf764e6f2007-05-15 01:13:47 +0000338 }
drh4a919112007-05-15 11:55:09 +0000339 for(z2=z; *z2 && p2; p2--){
340 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000341 }
drhbbf483f2014-09-09 20:30:24 +0000342 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
343 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000344 }else{
drh4adc4cb2009-11-11 20:53:31 +0000345 if( p1+p2>len ){
346 p2 = len-p1;
347 if( p2<0 ) p2 = 0;
348 }
drhbbf483f2014-09-09 20:30:24 +0000349 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000350 }
drh0bce8352002-02-28 00:41:10 +0000351}
352
353/*
354** Implementation of the round() function
355*/
shanefbd60f82009-02-04 03:59:25 +0000356#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000357static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000358 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000359 double r;
drh50d654d2009-06-03 01:24:54 +0000360 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000361 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000362 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000363 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000364 n = sqlite3_value_int(argv[1]);
365 if( n>30 ) n = 30;
366 if( n<0 ) n = 0;
367 }
drhd589a922006-03-02 03:02:48 +0000368 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000369 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000370 /* If Y==0 and X will fit in a 64-bit int,
371 ** handle the rounding directly,
372 ** otherwise use printf.
373 */
374 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
375 r = (double)((sqlite_int64)(r+0.5));
376 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
377 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000378 }else{
shaneh147e1762010-02-17 04:19:27 +0000379 zBuf = sqlite3_mprintf("%.*f",n,r);
380 if( zBuf==0 ){
381 sqlite3_result_error_nomem(context);
382 return;
383 }
drh9339da12010-09-30 00:50:49 +0000384 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000385 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000386 }
shaneh147e1762010-02-17 04:19:27 +0000387 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000388}
shanefbd60f82009-02-04 03:59:25 +0000389#endif
drhdc04c582002-02-24 01:55:15 +0000390
danielk197726783a52007-08-29 14:06:22 +0000391/*
drhf3cdcdc2015-04-29 16:50:28 +0000392** Allocate nByte bytes of space using sqlite3Malloc(). If the
danielk197726783a52007-08-29 14:06:22 +0000393** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000394** the database handle that malloc() has failed and return NULL.
395** If nByte is larger than the maximum string or blob length, then
396** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000397*/
drhb1a6c3c2008-03-20 16:30:17 +0000398static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000399 char *z;
drh27e62db2009-04-02 10:16:17 +0000400 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000401 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000402 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
403 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
404 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000405 sqlite3_result_error_toobig(context);
406 z = 0;
407 }else{
drhda4ca9d2014-09-09 17:27:35 +0000408 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000409 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000410 sqlite3_result_error_nomem(context);
411 }
danielk1977a1644fd2007-08-29 12:31:25 +0000412 }
413 return z;
414}
415
drhdc04c582002-02-24 01:55:15 +0000416/*
417** Implementation of the upper() and lower() SQL functions.
418*/
danielk19770ae8b832004-05-25 12:05:56 +0000419static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000420 char *z1;
421 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000422 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000423 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000424 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000425 n = sqlite3_value_bytes(argv[0]);
426 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
427 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000428 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000429 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000430 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000431 for(i=0; i<n; i++){
432 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000433 }
drhdf901d32011-10-13 18:00:11 +0000434 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000435 }
drhdc04c582002-02-24 01:55:15 +0000436 }
437}
danielk19770ae8b832004-05-25 12:05:56 +0000438static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000439 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000440 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000441 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000442 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000443 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000444 n = sqlite3_value_bytes(argv[0]);
445 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
446 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000447 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000448 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000449 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000450 for(i=0; i<n; i++){
451 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000452 }
drhdf901d32011-10-13 18:00:11 +0000453 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000454 }
drhdc04c582002-02-24 01:55:15 +0000455 }
456}
457
drhae6bb952009-11-11 00:24:31 +0000458/*
drhcca9f3d2013-09-06 15:23:29 +0000459** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
460** as VDBE code so that unused argument values do not have to be computed.
461** However, we still need some kind of function implementation for this
462** routines in the function table. The noopFunc macro provides this.
463** noopFunc will never be called so it doesn't matter what the implementation
464** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000465*/
drhcca9f3d2013-09-06 15:23:29 +0000466#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000467
468/*
drhf9ffac92002-03-02 19:00:31 +0000469** Implementation of random(). Return a random integer.
470*/
drhf9b596e2004-05-26 16:54:42 +0000471static void randomFunc(
472 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000473 int NotUsed,
474 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000475){
drh52fc8492006-02-23 21:43:55 +0000476 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000477 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000478 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000479 if( r<0 ){
480 /* We need to prevent a random number of 0x8000000000000000
481 ** (or -9223372036854775808) since when you do abs() of that
482 ** number of you get the same value back again. To do this
483 ** in a way that is testable, mask the sign bit off of negative
484 ** values, resulting in a positive value. Then take the
485 ** 2s complement of that positive value. The end result can
486 ** therefore be no less than -9223372036854775807.
487 */
drhaf8001b2012-02-11 19:53:24 +0000488 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000489 }
drh52fc8492006-02-23 21:43:55 +0000490 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000491}
492
493/*
drh137c7282007-01-29 17:58:28 +0000494** Implementation of randomblob(N). Return a random blob
495** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000496*/
drh137c7282007-01-29 17:58:28 +0000497static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000498 sqlite3_context *context,
499 int argc,
500 sqlite3_value **argv
501){
drh137c7282007-01-29 17:58:28 +0000502 int n;
503 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000504 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000505 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000506 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000507 if( n<1 ){
508 n = 1;
509 }
danielk1977a1644fd2007-08-29 12:31:25 +0000510 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000511 if( p ){
drh2fa18682008-03-19 14:15:34 +0000512 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000513 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000514 }
drh63cf66f2007-01-29 15:50:05 +0000515}
516
517/*
drh6ed41ad2002-04-06 14:10:47 +0000518** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000519** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000520*/
danielk197751ad0ec2004-05-24 12:39:02 +0000521static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000522 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000523 int NotUsed,
524 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000525){
drhfa4a4b92008-03-19 21:45:51 +0000526 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000527 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000528 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
529 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
530 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000531 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000532}
533
rdcf146a772004-02-25 22:51:06 +0000534/*
drhab2f1f92010-01-11 18:26:42 +0000535** Implementation of the changes() SQL function.
536**
537** IMP: R-62073-11209 The changes() SQL function is a wrapper
538** around the sqlite3_changes() C/C++ function and hence follows the same
539** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000540*/
danielk1977b28af712004-06-21 06:50:26 +0000541static void changes(
drhf9b596e2004-05-26 16:54:42 +0000542 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000543 int NotUsed,
544 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000545){
drhfa4a4b92008-03-19 21:45:51 +0000546 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000547 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000548 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000549}
rdcf146a772004-02-25 22:51:06 +0000550
551/*
danielk1977b28af712004-06-21 06:50:26 +0000552** Implementation of the total_changes() SQL function. The return value is
553** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000554*/
danielk1977b28af712004-06-21 06:50:26 +0000555static void total_changes(
556 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000557 int NotUsed,
558 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000559){
drhfa4a4b92008-03-19 21:45:51 +0000560 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000561 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000562 /* IMP: R-52756-41993 This function is a wrapper around the
563 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000564 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000565}
566
drh6ed41ad2002-04-06 14:10:47 +0000567/*
drh4e5ffc52004-08-31 00:52:37 +0000568** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000569*/
drh4e5ffc52004-08-31 00:52:37 +0000570struct compareInfo {
drh07e83472016-01-11 03:48:18 +0000571 u8 matchAll; /* "*" or "%" */
572 u8 matchOne; /* "?" or "_" */
573 u8 matchSet; /* "[" or 0 */
574 u8 noCase; /* true to ignore case differences */
danielk1977d02eb1f2004-06-06 09:44:03 +0000575};
drh55ef4d92005-08-14 01:20:37 +0000576
drhb9175ae2007-12-07 18:39:04 +0000577/*
578** For LIKE and GLOB matching on EBCDIC machines, assume that every
drhb0870482015-06-17 13:20:54 +0000579** character is exactly one byte in size. Also, provde the Utf8Read()
580** macro for fast reading of the next character in the common case where
581** the next character is ASCII.
drhb9175ae2007-12-07 18:39:04 +0000582*/
583#if defined(SQLITE_EBCDIC)
drh88b33222014-09-25 03:51:37 +0000584# define sqlite3Utf8Read(A) (*((*A)++))
drhb0870482015-06-17 13:20:54 +0000585# define Utf8Read(A) (*(A++))
drhb9175ae2007-12-07 18:39:04 +0000586#else
drhb0870482015-06-17 13:20:54 +0000587# define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))
drhb9175ae2007-12-07 18:39:04 +0000588#endif
589
drh4e5ffc52004-08-31 00:52:37 +0000590static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000591/* The correct SQL-92 behavior is for the LIKE operator to ignore
592** case. Thus 'a' LIKE 'A' would be true. */
593static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
594/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
595** is case sensitive causing 'a' LIKE 'A' to be false */
596static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000597
598/*
drh4e5ffc52004-08-31 00:52:37 +0000599** Compare two UTF-8 strings for equality where the first string can
drh9fdfdc82014-09-25 11:08:57 +0000600** potentially be a "glob" or "like" expression. Return true (1) if they
drh4e5ffc52004-08-31 00:52:37 +0000601** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000602**
drh4e5ffc52004-08-31 00:52:37 +0000603** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000604**
drh4e5ffc52004-08-31 00:52:37 +0000605** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000606**
drh4e5ffc52004-08-31 00:52:37 +0000607** '?' Matches exactly one character.
608**
609** [...] Matches one character from the enclosed list of
610** characters.
611**
612** [^...] Matches one character not in the enclosed list.
613**
614** With the [...] and [^...] matching, a ']' character can be included
615** in the list by making it the first character after '[' or '^'. A
616** range of characters can be specified using '-'. Example:
617** "[a-z]" matches any single lower-case letter. To match a '-', make
618** it the last character in the list.
619**
drh9fdfdc82014-09-25 11:08:57 +0000620** Like matching rules:
621**
622** '%' Matches any sequence of zero or more characters
623**
624*** '_' Matches any one character
625**
626** Ec Where E is the "esc" character and c is any other
627** character, including '%', '_', and esc, match exactly c.
628**
drhb0870482015-06-17 13:20:54 +0000629** The comments within this routine usually assume glob matching.
drh9fdfdc82014-09-25 11:08:57 +0000630**
drh4e5ffc52004-08-31 00:52:37 +0000631** This routine is usually quick, but can be N**2 in the worst case.
drh0ac65892002-04-20 14:24:41 +0000632*/
danielk19777c6303c2004-11-17 16:41:29 +0000633static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000634 const u8 *zPattern, /* The glob pattern */
635 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000636 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh07e83472016-01-11 03:48:18 +0000637 u32 matchOther /* The escape char (LIKE) or '[' (GLOB) */
danielk197751ad0ec2004-05-24 12:39:02 +0000638){
drh9fdfdc82014-09-25 11:08:57 +0000639 u32 c, c2; /* Next pattern and input string chars */
640 u32 matchOne = pInfo->matchOne; /* "?" or "_" */
641 u32 matchAll = pInfo->matchAll; /* "*" or "%" */
drh9fdfdc82014-09-25 11:08:57 +0000642 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
643 const u8 *zEscaped = 0; /* One past the last escaped input char */
drh88b33222014-09-25 03:51:37 +0000644
drhb0870482015-06-17 13:20:54 +0000645 while( (c = Utf8Read(zPattern))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000646 if( c==matchAll ){ /* Match "*" */
647 /* Skip over multiple "*" characters in the pattern. If there
648 ** are also "?" characters, skip those as well, but consume a
649 ** single character of the input string for each "?" skipped */
drhb0870482015-06-17 13:20:54 +0000650 while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000651 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh66150952007-07-23 19:12:41 +0000652 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000653 }
danielk1977ad7dd422004-06-06 12:41:49 +0000654 }
drh66150952007-07-23 19:12:41 +0000655 if( c==0 ){
drh9fdfdc82014-09-25 11:08:57 +0000656 return 1; /* "*" at the end of the pattern matches */
drh88b33222014-09-25 03:51:37 +0000657 }else if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000658 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000659 c = sqlite3Utf8Read(&zPattern);
660 if( c==0 ) return 0;
661 }else{
drh9fdfdc82014-09-25 11:08:57 +0000662 /* "[...]" immediately follows the "*". We have to do a slow
663 ** recursive search in this case, but it is an unusual case. */
drh88b33222014-09-25 03:51:37 +0000664 assert( matchOther<0x80 ); /* '[' is a single-byte character */
665 while( *zString
drh07e83472016-01-11 03:48:18 +0000666 && patternCompare(&zPattern[-1],zString,pInfo,matchOther)==0 ){
drh88b33222014-09-25 03:51:37 +0000667 SQLITE_SKIP_UTF8(zString);
668 }
669 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000670 }
drh66150952007-07-23 19:12:41 +0000671 }
drh9fdfdc82014-09-25 11:08:57 +0000672
673 /* At this point variable c contains the first character of the
674 ** pattern string past the "*". Search in the input string for the
675 ** first matching character and recursively contine the match from
676 ** that point.
677 **
678 ** For a case-insensitive search, set variable cx to be the same as
679 ** c but in the other case and search the input string for either
680 ** c or cx.
681 */
682 if( c<=0x80 ){
683 u32 cx;
684 if( noCase ){
685 cx = sqlite3Toupper(c);
686 c = sqlite3Tolower(c);
drh66150952007-07-23 19:12:41 +0000687 }else{
drh9fdfdc82014-09-25 11:08:57 +0000688 cx = c;
drh4e5ffc52004-08-31 00:52:37 +0000689 }
drh9fdfdc82014-09-25 11:08:57 +0000690 while( (c2 = *(zString++))!=0 ){
691 if( c2!=c && c2!=cx ) continue;
drh07e83472016-01-11 03:48:18 +0000692 if( patternCompare(zPattern,zString,pInfo,matchOther) ) return 1;
drh9fdfdc82014-09-25 11:08:57 +0000693 }
694 }else{
drhb0870482015-06-17 13:20:54 +0000695 while( (c2 = Utf8Read(zString))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000696 if( c2!=c ) continue;
drh07e83472016-01-11 03:48:18 +0000697 if( patternCompare(zPattern,zString,pInfo,matchOther) ) return 1;
drh9fdfdc82014-09-25 11:08:57 +0000698 }
drh66150952007-07-23 19:12:41 +0000699 }
700 return 0;
drh88b33222014-09-25 03:51:37 +0000701 }
drh88b33222014-09-25 03:51:37 +0000702 if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000703 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000704 c = sqlite3Utf8Read(&zPattern);
705 if( c==0 ) return 0;
drh9fdfdc82014-09-25 11:08:57 +0000706 zEscaped = zPattern;
drh88b33222014-09-25 03:51:37 +0000707 }else{
708 u32 prior_c = 0;
drh9fdfdc82014-09-25 11:08:57 +0000709 int seen = 0;
710 int invert = 0;
drh88b33222014-09-25 03:51:37 +0000711 c = sqlite3Utf8Read(&zString);
712 if( c==0 ) return 0;
713 c2 = sqlite3Utf8Read(&zPattern);
714 if( c2=='^' ){
715 invert = 1;
716 c2 = sqlite3Utf8Read(&zPattern);
717 }
718 if( c2==']' ){
719 if( c==']' ) seen = 1;
720 c2 = sqlite3Utf8Read(&zPattern);
721 }
722 while( c2 && c2!=']' ){
723 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
724 c2 = sqlite3Utf8Read(&zPattern);
725 if( c>=prior_c && c<=c2 ) seen = 1;
726 prior_c = 0;
727 }else{
728 if( c==c2 ){
729 seen = 1;
730 }
731 prior_c = c2;
732 }
733 c2 = sqlite3Utf8Read(&zPattern);
734 }
735 if( c2==0 || (seen ^ invert)==0 ){
736 return 0;
737 }
738 continue;
739 }
740 }
drhb0870482015-06-17 13:20:54 +0000741 c2 = Utf8Read(zString);
drh88b33222014-09-25 03:51:37 +0000742 if( c==c2 ) continue;
drhfb397262016-01-20 14:22:41 +0000743 if( noCase && c<0x80 && c2<0x80 && sqlite3Tolower(c)==sqlite3Tolower(c2) ){
drh9fdfdc82014-09-25 11:08:57 +0000744 continue;
745 }
746 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
747 return 0;
danielk197751ad0ec2004-05-24 12:39:02 +0000748 }
drh4e5ffc52004-08-31 00:52:37 +0000749 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000750}
drh4e5ffc52004-08-31 00:52:37 +0000751
drh55ef4d92005-08-14 01:20:37 +0000752/*
drh56282a52013-04-10 16:13:38 +0000753** The sqlite3_strglob() interface.
754*/
755int sqlite3_strglob(const char *zGlobPattern, const char *zString){
drh07e83472016-01-11 03:48:18 +0000756 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[')==0;
drh56282a52013-04-10 16:13:38 +0000757}
758
759/*
drh8b4a94a2015-11-24 21:23:59 +0000760** The sqlite3_strlike() interface.
761*/
762int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){
763 return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc)==0;
764}
765
766/*
drh55ef4d92005-08-14 01:20:37 +0000767** Count the number of times that the LIKE operator (or GLOB which is
768** just a variation of LIKE) gets called. This is used for testing
769** only.
770*/
771#ifdef SQLITE_TEST
772int sqlite3_like_count = 0;
773#endif
774
danielk19773f6b0872004-06-17 05:36:44 +0000775
776/*
777** Implementation of the like() SQL function. This function implements
778** the build-in LIKE operator. The first argument to the function is the
779** pattern and the second argument is the string. So, the SQL statements:
780**
781** A LIKE B
782**
783** is implemented as like(B,A).
784**
drh55ef4d92005-08-14 01:20:37 +0000785** This same function (with a different compareInfo structure) computes
786** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000787*/
788static void likeFunc(
789 sqlite3_context *context,
790 int argc,
791 sqlite3_value **argv
792){
drhbeb818d2007-05-08 15:34:47 +0000793 const unsigned char *zA, *zB;
drh07e83472016-01-11 03:48:18 +0000794 u32 escape;
drh27e62db2009-04-02 10:16:17 +0000795 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000796 sqlite3 *db = sqlite3_context_db_handle(context);
drh07e83472016-01-11 03:48:18 +0000797 struct compareInfo *pInfo = sqlite3_user_data(context);
drhbeb818d2007-05-08 15:34:47 +0000798
drh41d2e662015-12-01 21:23:07 +0000799#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
800 if( sqlite3_value_type(argv[0])==SQLITE_BLOB
801 || sqlite3_value_type(argv[1])==SQLITE_BLOB
802 ){
803#ifdef SQLITE_TEST
804 sqlite3_like_count++;
805#endif
806 sqlite3_result_int(context, 0);
807 return;
808 }
809#endif
drh1f0feef2007-05-15 13:27:07 +0000810 zB = sqlite3_value_text(argv[0]);
811 zA = sqlite3_value_text(argv[1]);
812
drhbeb818d2007-05-08 15:34:47 +0000813 /* Limit the length of the LIKE or GLOB pattern to avoid problems
814 ** of deep recursion and N*N behavior in patternCompare().
815 */
drh27e62db2009-04-02 10:16:17 +0000816 nPat = sqlite3_value_bytes(argv[0]);
817 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
818 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
819 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000820 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
821 return;
822 }
drh1f0feef2007-05-15 13:27:07 +0000823 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000824
danielk19777c6303c2004-11-17 16:41:29 +0000825 if( argc==3 ){
826 /* The escape character string must consist of a single UTF-8 character.
827 ** Otherwise, return an error.
828 */
829 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000830 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000831 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000832 sqlite3_result_error(context,
833 "ESCAPE expression must be a single character", -1);
834 return;
835 }
drh42610962012-09-17 18:56:32 +0000836 escape = sqlite3Utf8Read(&zEsc);
drh07e83472016-01-11 03:48:18 +0000837 }else{
838 escape = pInfo->matchSet;
danielk19777c6303c2004-11-17 16:41:29 +0000839 }
danielk19773f6b0872004-06-17 05:36:44 +0000840 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000841#ifdef SQLITE_TEST
842 sqlite3_like_count++;
843#endif
danielk1977b56fe1f2007-05-09 08:24:44 +0000844 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000845 }
drh8912d102002-05-26 21:34:58 +0000846}
847
848/*
849** Implementation of the NULLIF(x,y) function. The result is the first
850** argument if the arguments are different. The result is NULL if the
851** arguments are equal to each other.
852*/
drhf9b596e2004-05-26 16:54:42 +0000853static void nullifFunc(
854 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000855 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000856 sqlite3_value **argv
857){
danielk1977dc1bdc42004-06-11 10:51:27 +0000858 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000859 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000860 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000861 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000862 }
drh0ac65892002-04-20 14:24:41 +0000863}
864
drh647cb0e2002-11-04 19:32:25 +0000865/*
drh47baebc2009-08-14 16:01:24 +0000866** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000867** of the SQLite library that is running.
868*/
drhf9b596e2004-05-26 16:54:42 +0000869static void versionFunc(
870 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000871 int NotUsed,
872 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000873){
danielk197762c14b32008-11-19 09:05:26 +0000874 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000875 /* IMP: R-48699-48617 This function is an SQL wrapper around the
876 ** sqlite3_libversion() C-interface. */
877 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000878}
879
drh47baebc2009-08-14 16:01:24 +0000880/*
881** Implementation of the sqlite_source_id() function. The result is a string
882** that identifies the particular version of the source code used to build
883** SQLite.
884*/
885static void sourceidFunc(
886 sqlite3_context *context,
887 int NotUsed,
888 sqlite3_value **NotUsed2
889){
890 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000891 /* IMP: R-24470-31136 This function is an SQL wrapper around the
892 ** sqlite3_sourceid() C interface. */
893 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000894}
895
shanehbdea6d12010-02-23 04:19:54 +0000896/*
drh3ca84ef2011-04-25 18:03:10 +0000897** Implementation of the sqlite_log() function. This is a wrapper around
898** sqlite3_log(). The return value is NULL. The function exists purely for
899** its side-effects.
900*/
drh840561f2011-04-27 18:08:42 +0000901static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000902 sqlite3_context *context,
903 int argc,
904 sqlite3_value **argv
905){
906 UNUSED_PARAMETER(argc);
907 UNUSED_PARAMETER(context);
908 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
909}
910
911/*
shanehdc97a8c2010-02-23 20:08:35 +0000912** Implementation of the sqlite_compileoption_used() function.
913** The result is an integer that identifies if the compiler option
914** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000915*/
shanehdc97a8c2010-02-23 20:08:35 +0000916#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
917static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000918 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000919 int argc,
920 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000921){
shanehdc97a8c2010-02-23 20:08:35 +0000922 const char *zOptName;
923 assert( argc==1 );
924 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000925 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
926 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
927 ** function.
928 */
drh264a2d42010-02-25 15:28:41 +0000929 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000930 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000931 }
shanehbdea6d12010-02-23 04:19:54 +0000932}
shanehdc97a8c2010-02-23 20:08:35 +0000933#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
934
935/*
936** Implementation of the sqlite_compileoption_get() function.
937** The result is a string that identifies the compiler options
938** used to build SQLite.
939*/
940#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
941static void compileoptiongetFunc(
942 sqlite3_context *context,
943 int argc,
944 sqlite3_value **argv
945){
946 int n;
947 assert( argc==1 );
948 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000949 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
950 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
951 */
shanehdc97a8c2010-02-23 20:08:35 +0000952 n = sqlite3_value_int(argv[0]);
953 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
954}
955#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000956
drh137c7282007-01-29 17:58:28 +0000957/* Array for converting from half-bytes (nybbles) into ASCII hex
958** digits. */
959static const char hexdigits[] = {
960 '0', '1', '2', '3', '4', '5', '6', '7',
961 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
962};
danielk1977d641d642004-11-18 15:44:29 +0000963
drh47394702003-08-20 01:03:33 +0000964/*
drh47394702003-08-20 01:03:33 +0000965** Implementation of the QUOTE() function. This function takes a single
966** argument. If the argument is numeric, the return value is the same as
967** the argument. If the argument is NULL, the return value is the string
968** "NULL". Otherwise, the argument is enclosed in single quotes with
969** single-quote escapes.
970*/
danielk19770ae8b832004-05-25 12:05:56 +0000971static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000972 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000973 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000974 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000975 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +0000976 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +0000977 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +0000978 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +0000979 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
980 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
981 if( r1!=r2 ){
982 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
983 }
984 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
985 break;
986 }
987 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +0000988 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000989 break;
990 }
danielk19773f41e972004-06-08 00:39:01 +0000991 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000992 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000993 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000994 int nBlob = sqlite3_value_bytes(argv[0]);
995 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000996 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000997 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000998 int i;
999 for(i=0; i<nBlob; i++){
1000 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
1001 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
1002 }
1003 zText[(nBlob*2)+2] = '\'';
1004 zText[(nBlob*2)+3] = '\0';
1005 zText[0] = 'X';
1006 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +00001007 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +00001008 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +00001009 }
1010 break;
1011 }
drh9c054832004-05-31 18:51:57 +00001012 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +00001013 int i,j;
1014 u64 n;
drh2646da72005-12-09 20:02:05 +00001015 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +00001016 char *z;
1017
drh7a521cf2007-04-25 18:23:52 +00001018 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +00001019 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +00001020 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +00001021 if( z ){
1022 z[0] = '\'';
1023 for(i=0, j=1; zArg[i]; i++){
1024 z[j++] = zArg[i];
1025 if( zArg[i]=='\'' ){
1026 z[j++] = '\'';
1027 }
drhf9b596e2004-05-26 16:54:42 +00001028 }
danielk1977a1644fd2007-08-29 12:31:25 +00001029 z[j++] = '\'';
1030 z[j] = 0;
1031 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +00001032 }
drha0df4cc2009-02-02 17:29:59 +00001033 break;
1034 }
1035 default: {
1036 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1037 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1038 break;
drhf9b596e2004-05-26 16:54:42 +00001039 }
drh47394702003-08-20 01:03:33 +00001040 }
1041}
1042
drh137c7282007-01-29 17:58:28 +00001043/*
drhd495d8c2013-02-22 19:34:25 +00001044** The unicode() function. Return the integer unicode code-point value
1045** for the first character of the input string.
1046*/
1047static void unicodeFunc(
1048 sqlite3_context *context,
1049 int argc,
1050 sqlite3_value **argv
1051){
1052 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001053 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001054 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1055}
1056
1057/*
1058** The char() function takes zero or more arguments, each of which is
1059** an integer. It constructs a string where each character of the string
1060** is the unicode character for the corresponding integer argument.
1061*/
1062static void charFunc(
1063 sqlite3_context *context,
1064 int argc,
1065 sqlite3_value **argv
1066){
1067 unsigned char *z, *zOut;
1068 int i;
drhf3cdcdc2015-04-29 16:50:28 +00001069 zOut = z = sqlite3_malloc64( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001070 if( z==0 ){
1071 sqlite3_result_error_nomem(context);
1072 return;
1073 }
1074 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001075 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001076 unsigned c;
1077 x = sqlite3_value_int64(argv[i]);
1078 if( x<0 || x>0x10ffff ) x = 0xfffd;
1079 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001080 if( c<0x00080 ){
1081 *zOut++ = (u8)(c&0xFF);
1082 }else if( c<0x00800 ){
1083 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1084 *zOut++ = 0x80 + (u8)(c & 0x3F);
1085 }else if( c<0x10000 ){
1086 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1087 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1088 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001089 }else{
drhfe7a5d12013-03-07 14:00:04 +00001090 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1091 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1092 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1093 *zOut++ = 0x80 + (u8)(c & 0x3F);
1094 } \
drhd495d8c2013-02-22 19:34:25 +00001095 }
drhbbf483f2014-09-09 20:30:24 +00001096 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001097}
1098
1099/*
drh137c7282007-01-29 17:58:28 +00001100** The hex() function. Interpret the argument as a blob. Return
1101** a hexadecimal rendering as text.
1102*/
1103static void hexFunc(
1104 sqlite3_context *context,
1105 int argc,
1106 sqlite3_value **argv
1107){
1108 int i, n;
1109 const unsigned char *pBlob;
1110 char *zHex, *z;
1111 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001112 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001113 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001114 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001115 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001116 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001117 if( zHex ){
1118 for(i=0; i<n; i++, pBlob++){
1119 unsigned char c = *pBlob;
1120 *(z++) = hexdigits[(c>>4)&0xf];
1121 *(z++) = hexdigits[c&0xf];
1122 }
1123 *z = 0;
1124 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001125 }
drh137c7282007-01-29 17:58:28 +00001126}
1127
drh26b6d902007-03-17 13:27:54 +00001128/*
drh8cff3822007-05-02 02:08:28 +00001129** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1130*/
1131static void zeroblobFunc(
1132 sqlite3_context *context,
1133 int argc,
1134 sqlite3_value **argv
1135){
drh98640a32007-06-07 19:08:32 +00001136 i64 n;
dana4d5ae82015-07-24 16:24:37 +00001137 int rc;
drh8cff3822007-05-02 02:08:28 +00001138 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001139 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001140 n = sqlite3_value_int64(argv[0]);
dana4d5ae82015-07-24 16:24:37 +00001141 if( n<0 ) n = 0;
1142 rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
1143 if( rc ){
1144 sqlite3_result_error_code(context, rc);
drh98640a32007-06-07 19:08:32 +00001145 }
drh8cff3822007-05-02 02:08:28 +00001146}
1147
1148/*
drh26b6d902007-03-17 13:27:54 +00001149** The replace() function. Three arguments are all strings: call
1150** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001151** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001152** must be exact. Collating sequences are not used.
1153*/
1154static void replaceFunc(
1155 sqlite3_context *context,
1156 int argc,
1157 sqlite3_value **argv
1158){
1159 const unsigned char *zStr; /* The input string A */
1160 const unsigned char *zPattern; /* The pattern string B */
1161 const unsigned char *zRep; /* The replacement string C */
1162 unsigned char *zOut; /* The output */
1163 int nStr; /* Size of zStr */
1164 int nPattern; /* Size of zPattern */
1165 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001166 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001167 int loopLimit; /* Last zStr[] that might match zPattern[] */
1168 int i, j; /* Loop counters */
1169
1170 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001171 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001172 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001173 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001174 nStr = sqlite3_value_bytes(argv[0]);
1175 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001176 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001177 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001178 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1179 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001180 return;
1181 }
1182 if( zPattern[0]==0 ){
1183 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1184 sqlite3_result_value(context, argv[0]);
1185 return;
1186 }
drh1f0feef2007-05-15 13:27:07 +00001187 nPattern = sqlite3_value_bytes(argv[1]);
1188 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001189 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001190 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001191 nRep = sqlite3_value_bytes(argv[2]);
1192 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001193 nOut = nStr + 1;
1194 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001195 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001196 if( zOut==0 ){
1197 return;
drh26b6d902007-03-17 13:27:54 +00001198 }
drh26b6d902007-03-17 13:27:54 +00001199 loopLimit = nStr - nPattern;
1200 for(i=j=0; i<=loopLimit; i++){
1201 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1202 zOut[j++] = zStr[i];
1203 }else{
drh4a50aac2007-08-23 02:47:53 +00001204 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001205 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001206 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001207 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1208 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1209 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001210 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001211 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001212 return;
1213 }
drh4a50aac2007-08-23 02:47:53 +00001214 zOld = zOut;
drhf3cdcdc2015-04-29 16:50:28 +00001215 zOut = sqlite3_realloc64(zOut, (int)nOut);
drh2e6400b2007-05-08 15:46:18 +00001216 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001217 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001218 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001219 return;
1220 }
drh26b6d902007-03-17 13:27:54 +00001221 memcpy(&zOut[j], zRep, nRep);
1222 j += nRep;
1223 i += nPattern-1;
1224 }
1225 }
drh2e6400b2007-05-08 15:46:18 +00001226 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001227 memcpy(&zOut[j], &zStr[i], nStr-i);
1228 j += nStr - i;
1229 assert( j<=nOut );
1230 zOut[j] = 0;
1231 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1232}
1233
drh309b3382007-03-17 17:52:42 +00001234/*
1235** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1236** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1237*/
1238static void trimFunc(
1239 sqlite3_context *context,
1240 int argc,
1241 sqlite3_value **argv
1242){
1243 const unsigned char *zIn; /* Input string */
1244 const unsigned char *zCharSet; /* Set of characters to trim */
1245 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001246 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001247 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001248 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1249 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001250 int nChar; /* Number of characters in zCharSet */
1251
drh309b3382007-03-17 17:52:42 +00001252 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1253 return;
1254 }
1255 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001256 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001257 nIn = sqlite3_value_bytes(argv[0]);
1258 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001259 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001260 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001261 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001262 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001263 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001264 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001265 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001266 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001267 return;
drhd1e3a612007-04-27 21:59:52 +00001268 }else{
1269 const unsigned char *z;
1270 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001271 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001272 }
1273 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001274 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001275 if( azChar==0 ){
1276 return;
1277 }
1278 aLen = (unsigned char*)&azChar[nChar];
1279 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001280 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001281 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001282 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001283 }
1284 }
drh309b3382007-03-17 17:52:42 +00001285 }
drhd1e3a612007-04-27 21:59:52 +00001286 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001287 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001288 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001289 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001290 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001291 for(i=0; i<nChar; i++){
1292 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001293 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001294 }
1295 if( i>=nChar ) break;
1296 zIn += len;
1297 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001298 }
1299 }
1300 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001301 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001302 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001303 for(i=0; i<nChar; i++){
1304 len = aLen[i];
1305 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1306 }
1307 if( i>=nChar ) break;
1308 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001309 }
1310 }
drhd1e3a612007-04-27 21:59:52 +00001311 if( zCharSet ){
1312 sqlite3_free(azChar);
1313 }
drh309b3382007-03-17 17:52:42 +00001314 }
1315 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1316}
drh26b6d902007-03-17 13:27:54 +00001317
danielk1977a4de4532008-09-02 15:44:08 +00001318
drh2ba3ccc2009-12-08 02:06:08 +00001319/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1320** is only available if the SQLITE_SOUNDEX compile-time option is used
1321** when SQLite is built.
1322*/
drhd24cc422003-03-27 12:51:24 +00001323#ifdef SQLITE_SOUNDEX
1324/*
1325** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001326**
1327** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1328** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001329*/
drh137c7282007-01-29 17:58:28 +00001330static void soundexFunc(
1331 sqlite3_context *context,
1332 int argc,
1333 sqlite3_value **argv
1334){
drhd24cc422003-03-27 12:51:24 +00001335 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001336 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001337 int i, j;
1338 static const unsigned char iCode[] = {
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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1346 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1347 };
1348 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001349 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001350 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001351 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001352 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001353 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001354 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001355 for(j=1; j<4 && zIn[i]; i++){
1356 int code = iCode[zIn[i]&0x7f];
1357 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001358 if( code!=prevcode ){
1359 prevcode = code;
1360 zResult[j++] = code + '0';
1361 }
1362 }else{
1363 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001364 }
1365 }
1366 while( j<4 ){
1367 zResult[j++] = '0';
1368 }
1369 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001370 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001371 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001372 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1373 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001374 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001375 }
1376}
drh2ba3ccc2009-12-08 02:06:08 +00001377#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001378
drhfdb83b22006-06-17 14:12:47 +00001379#ifndef SQLITE_OMIT_LOAD_EXTENSION
1380/*
1381** A function that loads a shared-library extension then returns NULL.
1382*/
1383static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001384 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001385 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001386 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001387 char *zErrMsg = 0;
1388
1389 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001390 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001391 }else{
1392 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001393 }
drh7a521cf2007-04-25 18:23:52 +00001394 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001395 sqlite3_result_error(context, zErrMsg, -1);
1396 sqlite3_free(zErrMsg);
1397 }
1398}
1399#endif
1400
danielk197701427a62005-01-11 13:02:33 +00001401
drh0ac65892002-04-20 14:24:41 +00001402/*
drhd3a149e2002-02-24 17:12:53 +00001403** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001404** sum() or avg() aggregate computation.
1405*/
1406typedef struct SumCtx SumCtx;
1407struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001408 double rSum; /* Floating point sum */
1409 i64 iSum; /* Integer sum */
1410 i64 cnt; /* Number of elements summed */
1411 u8 overflow; /* True if integer overflow seen */
1412 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001413};
1414
1415/*
drha97fdd32006-01-12 22:17:50 +00001416** Routines used to compute the sum, average, and total.
1417**
1418** The SUM() function follows the (broken) SQL standard which means
1419** that it returns NULL if it sums over no inputs. TOTAL returns
1420** 0.0 in that case. In addition, TOTAL always returns a float where
1421** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001422** value. TOTAL never fails, but SUM might through an exception if
1423** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001424*/
danielk19770ae8b832004-05-25 12:05:56 +00001425static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001426 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001427 int type;
drh3f219f42005-09-08 19:45:57 +00001428 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001429 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001430 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001431 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001432 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001433 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001434 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001435 i64 v = sqlite3_value_int64(argv[0]);
1436 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001437 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1438 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001439 }
1440 }else{
drh8c08e862006-02-11 17:34:00 +00001441 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001442 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001443 }
drh739105c2002-05-29 23:22:23 +00001444 }
drhdd5baa92002-02-27 19:50:59 +00001445}
danielk19770ae8b832004-05-25 12:05:56 +00001446static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001447 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001448 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001449 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001450 if( p->overflow ){
1451 sqlite3_result_error(context,"integer overflow",-1);
1452 }else if( p->approx ){
1453 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001454 }else{
drh8c08e862006-02-11 17:34:00 +00001455 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001456 }
drh3d1d95e2005-09-08 10:37:01 +00001457 }
drhdd5baa92002-02-27 19:50:59 +00001458}
danielk19770ae8b832004-05-25 12:05:56 +00001459static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001460 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001461 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001462 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001463 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001464 }
1465}
drha97fdd32006-01-12 22:17:50 +00001466static void totalFinalize(sqlite3_context *context){
1467 SumCtx *p;
1468 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001469 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1470 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001471}
drhdd5baa92002-02-27 19:50:59 +00001472
1473/*
drh0bce8352002-02-28 00:41:10 +00001474** The following structure keeps track of state information for the
1475** count() aggregate function.
1476*/
1477typedef struct CountCtx CountCtx;
1478struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001479 i64 n;
drh0bce8352002-02-28 00:41:10 +00001480};
drhdd5baa92002-02-27 19:50:59 +00001481
drh0bce8352002-02-28 00:41:10 +00001482/*
1483** Routines to implement the count() aggregate function.
1484*/
danielk19770ae8b832004-05-25 12:05:56 +00001485static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001486 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001487 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001488 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001489 p->n++;
1490 }
drh2e79c3d2009-04-08 23:04:14 +00001491
drhd3264c72009-04-15 13:39:47 +00001492#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001493 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1494 ** sure it still operates correctly, verify that its count agrees with our
1495 ** internal count when using count(*) and when the total count can be
1496 ** expressed as a 32-bit integer. */
1497 assert( argc==1 || p==0 || p->n>0x7fffffff
1498 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001499#endif
drh0bce8352002-02-28 00:41:10 +00001500}
danielk19770ae8b832004-05-25 12:05:56 +00001501static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001502 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001503 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001504 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001505}
1506
1507/*
drh0bce8352002-02-28 00:41:10 +00001508** Routines to implement min() and max() aggregate functions.
1509*/
danielk197762c14b32008-11-19 09:05:26 +00001510static void minmaxStep(
1511 sqlite3_context *context,
1512 int NotUsed,
1513 sqlite3_value **argv
1514){
danielk197788208052004-05-25 01:13:20 +00001515 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001516 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001517 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001518
drh9eb516c2004-07-18 20:52:32 +00001519 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001520 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001521
drh94a6d992012-02-02 18:42:09 +00001522 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1523 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1524 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001525 int max;
1526 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001527 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001528 /* This step function is used for both the min() and max() aggregates,
1529 ** the only difference between the two being that the sense of the
1530 ** comparison is inverted. For the max() aggregate, the
1531 ** sqlite3_user_data() function returns (void *)-1. For min() it
1532 ** returns (void *)db, where db is the sqlite3* database pointer.
1533 ** Therefore the next statement sets variable 'max' to 1 for the max()
1534 ** aggregate, or 0 for min().
1535 */
drh309b3382007-03-17 17:52:42 +00001536 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001537 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001538 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001539 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001540 }else{
1541 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001542 }
drh268380c2004-02-25 13:47:31 +00001543 }else{
drh035e5632014-09-16 14:16:31 +00001544 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001545 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001546 }
1547}
danielk19770ae8b832004-05-25 12:05:56 +00001548static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001549 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001550 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1551 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001552 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001553 sqlite3_result_value(context, pRes);
1554 }
1555 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001556 }
1557}
drhdd5baa92002-02-27 19:50:59 +00001558
drhb0689692007-11-01 17:38:30 +00001559/*
1560** group_concat(EXPR, ?SEPARATOR?)
1561*/
1562static void groupConcatStep(
1563 sqlite3_context *context,
1564 int argc,
1565 sqlite3_value **argv
1566){
1567 const char *zVal;
drhade86482007-11-28 22:36:40 +00001568 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001569 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001570 int nVal, nSep;
1571 assert( argc==1 || argc==2 );
1572 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001573 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1574
1575 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001576 sqlite3 *db = sqlite3_context_db_handle(context);
drhc0490572015-05-02 11:45:53 +00001577 int firstTerm = pAccum->mxAlloc==0;
drhbb4957f2008-03-20 14:03:29 +00001578 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001579 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001580 if( argc==2 ){
1581 zSep = (char*)sqlite3_value_text(argv[1]);
1582 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001583 }else{
1584 zSep = ",";
drhade86482007-11-28 22:36:40 +00001585 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001586 }
drha9ab4812013-12-11 11:00:44 +00001587 if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001588 }
drh07d31172009-02-02 21:57:05 +00001589 zVal = (char*)sqlite3_value_text(argv[0]);
1590 nVal = sqlite3_value_bytes(argv[0]);
drh8009c9b2014-05-07 20:24:00 +00001591 if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001592 }
1593}
1594static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001595 StrAccum *pAccum;
1596 pAccum = sqlite3_aggregate_context(context, 0);
1597 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001598 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001599 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001600 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001601 sqlite3_result_error_nomem(context);
1602 }else{
1603 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1604 sqlite3_free);
1605 }
drhb0689692007-11-01 17:38:30 +00001606 }
1607}
drh4e5ffc52004-08-31 00:52:37 +00001608
drhd3a149e2002-02-24 17:12:53 +00001609/*
drha4741842010-04-25 20:58:37 +00001610** This routine does per-connection function registration. Most
1611** of the built-in functions above are part of the global function set.
1612** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001613*/
drh80738d92016-02-15 00:34:16 +00001614void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001615 int rc = sqlite3_overload_function(db, "MATCH", 2);
1616 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1617 if( rc==SQLITE_NOMEM ){
drh4a642b62016-02-05 01:55:27 +00001618 sqlite3OomFault(db);
danielk1977832a58a2007-06-22 15:21:15 +00001619 }
drh55ef4d92005-08-14 01:20:37 +00001620}
1621
1622/*
1623** Set the LIKEOPT flag on the 2-argument function with the given name.
1624*/
drh1bd10f82008-12-10 21:19:56 +00001625static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001626 FuncDef *pDef;
drh80738d92016-02-15 00:34:16 +00001627 pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001628 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001629 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001630 }
1631}
1632
1633/*
1634** Register the built-in LIKE and GLOB functions. The caseSensitive
1635** parameter determines whether or not the LIKE operator is case
1636** sensitive. GLOB is always case sensitive.
1637*/
1638void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1639 struct compareInfo *pInfo;
1640 if( caseSensitive ){
1641 pInfo = (struct compareInfo*)&likeInfoAlt;
1642 }else{
1643 pInfo = (struct compareInfo*)&likeInfoNorm;
1644 }
drh901e9942010-12-15 18:54:37 +00001645 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1646 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1647 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001648 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001649 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1650 setLikeOptFlag(db, "like",
1651 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001652}
1653
1654/*
1655** pExpr points to an expression which implements a function. If
1656** it is appropriate to apply the LIKE optimization to that function
1657** then set aWc[0] through aWc[2] to the wildcard characters and
1658** return TRUE. If the function is not a LIKE-style function then
1659** return FALSE.
drh16897072015-03-07 00:57:37 +00001660**
1661** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1662** the function (default for LIKE). If the function makes the distinction
1663** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1664** false.
drh55ef4d92005-08-14 01:20:37 +00001665*/
drhd64fe2f2005-08-28 17:00:23 +00001666int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001667 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001668 if( pExpr->op!=TK_FUNCTION
1669 || !pExpr->x.pList
1670 || pExpr->x.pList->nExpr!=2
1671 ){
drh55ef4d92005-08-14 01:20:37 +00001672 return 0;
1673 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001674 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh80738d92016-02-15 00:34:16 +00001675 pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001676 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001677 return 0;
1678 }
1679
1680 /* The memcpy() statement assumes that the wildcard characters are
1681 ** the first three statements in the compareInfo structure. The
1682 ** asserts() that follow verify that assumption
1683 */
1684 memcpy(aWc, pDef->pUserData, 3);
1685 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1686 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1687 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001688 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001689 return 1;
drhdc04c582002-02-24 01:55:15 +00001690}
danielk19778c0a7912008-08-20 14:49:23 +00001691
drh70a8ca32008-08-21 18:49:27 +00001692/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001693** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001694** to the global function hash table. This occurs at start-time (as
1695** a consequence of calling sqlite3_initialize()).
1696**
1697** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001698*/
drh80738d92016-02-15 00:34:16 +00001699void sqlite3RegisterBuiltinFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001700 /*
1701 ** The following array holds FuncDef structures for all of the functions
1702 ** defined in this file.
1703 **
1704 ** The array cannot be constant since changes are made to the
1705 ** FuncDef.pHash elements at start-time. The elements of this array
1706 ** are read-only after initialization is complete.
drh80738d92016-02-15 00:34:16 +00001707 **
1708 ** For peak efficiency, put the most frequently used function last.
danielk197793ce7412008-09-01 19:14:02 +00001709 */
drh80738d92016-02-15 00:34:16 +00001710 static FuncDef aBuiltinFunc[] = {
1711#ifdef SQLITE_SOUNDEX
1712 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1713#endif
1714#ifndef SQLITE_OMIT_LOAD_EXTENSION
1715 VFUNCTION(load_extension, 1, 0, 0, loadExt ),
1716 VFUNCTION(load_extension, 2, 0, 0, loadExt ),
1717#endif
1718#if SQLITE_USER_AUTHENTICATION
1719 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
1720#endif
1721#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1722 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1723 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
1724#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1725 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1726 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1727 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
danielk197793ce7412008-09-01 19:14:02 +00001728 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1729 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1730 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1731 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1732 FUNCTION(trim, 1, 3, 0, trimFunc ),
1733 FUNCTION(trim, 2, 3, 0, trimFunc ),
1734 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1735 FUNCTION(min, 0, 0, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001736 AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize,
1737 SQLITE_FUNC_MINMAX ),
danielk197793ce7412008-09-01 19:14:02 +00001738 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1739 FUNCTION(max, 0, 1, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001740 AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize,
1741 SQLITE_FUNC_MINMAX ),
drha748fdc2012-03-28 01:34:47 +00001742 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1743 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001744 FUNCTION(instr, 2, 0, 0, instrFunc ),
drha5c14162013-12-17 15:03:06 +00001745 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001746 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1747 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001748 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001749#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001750 FUNCTION(round, 1, 0, 0, roundFunc ),
1751 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001752#endif
danielk197793ce7412008-09-01 19:14:02 +00001753 FUNCTION(upper, 1, 0, 0, upperFunc ),
1754 FUNCTION(lower, 1, 0, 0, lowerFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001755 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001756 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
drhb1fba282013-11-21 14:33:48 +00001757 VFUNCTION(random, 0, 0, 0, randomFunc ),
1758 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001759 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
drh03bf26d2015-08-31 21:16:36 +00001760 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
1761 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001762 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001763 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001764 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1765 VFUNCTION(changes, 0, 0, 0, changes ),
1766 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001767 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1768 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
drh80738d92016-02-15 00:34:16 +00001769 FUNCTION(substr, 2, 0, 0, substrFunc ),
1770 FUNCTION(substr, 3, 0, 0, substrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001771 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1772 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1773 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
drh9588ad92014-09-15 14:46:02 +00001774 AGGREGATE2(count, 0, 0, 0, countStep, countFinalize,
1775 SQLITE_FUNC_COUNT ),
danielk197793ce7412008-09-01 19:14:02 +00001776 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001777 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1778 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001779
1780 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1781 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1782 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1783 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1784 #else
1785 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1786 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1787 #endif
drh80738d92016-02-15 00:34:16 +00001788 FUNCTION(coalesce, 1, 0, 0, 0 ),
1789 FUNCTION(coalesce, 0, 0, 0, 0 ),
1790 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001791 };
drh545f5872010-04-24 14:02:59 +00001792#ifndef SQLITE_OMIT_ALTERTABLE
1793 sqlite3AlterFunctions();
1794#endif
dan0106e372013-08-12 16:34:32 +00001795#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1796 sqlite3AnalyzeFunctions();
1797#endif
drh80738d92016-02-15 00:34:16 +00001798 sqlite3RegisterDateTimeFunctions();
1799 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
1800
1801#if 0 /* Enable to print out how the built-in functions are hashed */
1802 {
1803 int i;
1804 FuncDef *p;
1805 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
1806 printf("FUNC-HASH %02d:", i);
1807 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
1808 int n = sqlite3Strlen30(p->zName);
1809 int h = p->zName[0] + n;
1810 printf(" %s(%d)", p->zName, h);
1811 }
1812 printf("\n");
1813 }
1814 }
1815#endif
drh70a8ca32008-08-21 18:49:27 +00001816}