blob: 0504a8f0266e8e5433a15fe03b96b00589f33df8 [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){
drh21d59782018-01-23 19:24:54 +000038 assert( context->isError<=0 );
39 context->isError = -1;
drh7a957892012-02-02 17:35:43 +000040 context->skipFlag = 1;
41}
42
43/*
drh0bce8352002-02-28 00:41:10 +000044** Implementation of the non-aggregate min() and max() functions
45*/
drhf9b596e2004-05-26 16:54:42 +000046static void minmaxFunc(
47 sqlite3_context *context,
48 int argc,
49 sqlite3_value **argv
50){
drh0bce8352002-02-28 00:41:10 +000051 int i;
drh268380c2004-02-25 13:47:31 +000052 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000053 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000054 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000055
drh65595cd2009-02-02 16:32:55 +000056 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000057 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000058 pColl = sqlite3GetFuncCollSeq(context);
59 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000060 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000061 iBest = 0;
drh9c054832004-05-31 18:51:57 +000062 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000063 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000064 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000065 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000066 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000067 iBest = i;
drh0bce8352002-02-28 00:41:10 +000068 }
69 }
drhf4479502004-05-27 03:12:53 +000070 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000071}
drh0bce8352002-02-28 00:41:10 +000072
drh268380c2004-02-25 13:47:31 +000073/*
74** Return the type of the argument.
75*/
drhf9b596e2004-05-26 16:54:42 +000076static void typeofFunc(
77 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000078 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000079 sqlite3_value **argv
80){
drh9d8e4012017-07-06 13:51:50 +000081 static const char *azType[] = { "integer", "real", "text", "blob", "null" };
82 int i = sqlite3_value_type(argv[0]) - 1;
danielk197762c14b32008-11-19 09:05:26 +000083 UNUSED_PARAMETER(NotUsed);
drh9d8e4012017-07-06 13:51:50 +000084 assert( i>=0 && i<ArraySize(azType) );
85 assert( SQLITE_INTEGER==1 );
86 assert( SQLITE_FLOAT==2 );
87 assert( SQLITE_TEXT==3 );
88 assert( SQLITE_BLOB==4 );
89 assert( SQLITE_NULL==5 );
drh3cef3642017-07-14 19:22:08 +000090 /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns
91 ** the datatype code for the initial datatype of the sqlite3_value object
92 ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT,
93 ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */
drh9d8e4012017-07-06 13:51:50 +000094 sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000095}
96
drh5708d2d2005-06-22 10:53:59 +000097
98/*
drh0bce8352002-02-28 00:41:10 +000099** Implementation of the length() function
100*/
drhf9b596e2004-05-26 16:54:42 +0000101static void lengthFunc(
102 sqlite3_context *context,
103 int argc,
104 sqlite3_value **argv
105){
drh0bce8352002-02-28 00:41:10 +0000106 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000107 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000108 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000109 case SQLITE_BLOB:
110 case SQLITE_INTEGER:
111 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000112 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000113 break;
114 }
drh9c054832004-05-31 18:51:57 +0000115 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000116 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7ea34692018-01-23 04:22:33 +0000117 const unsigned char *z0;
118 unsigned char c;
drh7a521cf2007-04-25 18:23:52 +0000119 if( z==0 ) return;
drh7ea34692018-01-23 04:22:33 +0000120 z0 = z;
121 while( (c = *z)!=0 ){
122 z++;
123 if( c>=0xc0 ){
124 while( (*z & 0xc0)==0x80 ){ z++; z0++; }
125 }
drh4a919112007-05-15 11:55:09 +0000126 }
drh7ea34692018-01-23 04:22:33 +0000127 sqlite3_result_int(context, (int)(z-z0));
drhf9b596e2004-05-26 16:54:42 +0000128 break;
129 }
130 default: {
131 sqlite3_result_null(context);
132 break;
133 }
134 }
drh0bce8352002-02-28 00:41:10 +0000135}
136
137/*
drh2ba3ccc2009-12-08 02:06:08 +0000138** Implementation of the abs() function.
139**
140** IMP: R-23979-26855 The abs(X) function returns the absolute value of
141** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000142*/
danielk19770ae8b832004-05-25 12:05:56 +0000143static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000144 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000145 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000146 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000147 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000148 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000149 if( iVal<0 ){
drh693e6712014-01-24 22:58:00 +0000150 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000151 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
152 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000153 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000154 sqlite3_result_error(context, "integer overflow", -1);
155 return;
156 }
157 iVal = -iVal;
158 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000159 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000160 break;
161 }
drh9c054832004-05-31 18:51:57 +0000162 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000163 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000164 sqlite3_result_null(context);
165 break;
166 }
167 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000168 /* Because sqlite3_value_double() returns 0.0 if the argument is not
169 ** something that can be converted into a number, we have:
drh643091f2014-11-20 23:21:23 +0000170 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
171 ** that cannot be converted to a numeric value.
drh2ba3ccc2009-12-08 02:06:08 +0000172 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000173 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000174 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000175 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000176 break;
177 }
178 }
drh0bce8352002-02-28 00:41:10 +0000179}
180
181/*
drhd55e0722012-10-25 03:07:29 +0000182** Implementation of the instr() function.
183**
184** instr(haystack,needle) finds the first occurrence of needle
185** in haystack and returns the number of previous characters plus 1,
186** or 0 if needle does not occur within haystack.
187**
188** If both haystack and needle are BLOBs, then the result is one more than
189** the number of bytes in haystack prior to the first occurrence of needle,
190** or 0 if needle never occurs in haystack.
191*/
192static void instrFunc(
193 sqlite3_context *context,
194 int argc,
195 sqlite3_value **argv
196){
197 const unsigned char *zHaystack;
198 const unsigned char *zNeedle;
199 int nHaystack;
200 int nNeedle;
201 int typeHaystack, typeNeedle;
202 int N = 1;
203 int isText;
204
drh68c804b2012-12-04 11:03:11 +0000205 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000206 typeHaystack = sqlite3_value_type(argv[0]);
207 typeNeedle = sqlite3_value_type(argv[1]);
208 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
209 nHaystack = sqlite3_value_bytes(argv[0]);
210 nNeedle = sqlite3_value_bytes(argv[1]);
dan895decf2016-12-30 14:15:56 +0000211 if( nNeedle>0 ){
212 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
213 zHaystack = sqlite3_value_blob(argv[0]);
214 zNeedle = sqlite3_value_blob(argv[1]);
215 isText = 0;
216 }else{
217 zHaystack = sqlite3_value_text(argv[0]);
218 zNeedle = sqlite3_value_text(argv[1]);
219 isText = 1;
dan895decf2016-12-30 14:15:56 +0000220 }
drhb30574b2017-03-16 14:28:52 +0000221 if( zNeedle==0 || (nHaystack && zHaystack==0) ) return;
dan895decf2016-12-30 14:15:56 +0000222 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
223 N++;
224 do{
225 nHaystack--;
226 zHaystack++;
227 }while( isText && (zHaystack[0]&0xc0)==0x80 );
228 }
229 if( nNeedle>nHaystack ) N = 0;
drhd55e0722012-10-25 03:07:29 +0000230 }
drhd55e0722012-10-25 03:07:29 +0000231 sqlite3_result_int(context, N);
232}
233
234/*
drha5c14162013-12-17 15:03:06 +0000235** Implementation of the printf() function.
236*/
237static void printfFunc(
238 sqlite3_context *context,
239 int argc,
240 sqlite3_value **argv
241){
242 PrintfArguments x;
243 StrAccum str;
244 const char *zFormat;
245 int n;
drhc0490572015-05-02 11:45:53 +0000246 sqlite3 *db = sqlite3_context_db_handle(context);
drha5c14162013-12-17 15:03:06 +0000247
248 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
249 x.nArg = argc-1;
250 x.nUsed = 0;
251 x.apArg = argv+1;
drhc0490572015-05-02 11:45:53 +0000252 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
drh5f4a6862016-01-30 12:50:25 +0000253 str.printfFlags = SQLITE_PRINTF_SQLFUNC;
drh0cdbe1a2018-05-09 13:46:26 +0000254 sqlite3_str_appendf(&str, zFormat, &x);
drha5c14162013-12-17 15:03:06 +0000255 n = str.nChar;
256 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
257 SQLITE_DYNAMIC);
258 }
259}
260
261/*
drhf764e6f2007-05-15 01:13:47 +0000262** Implementation of the substr() function.
263**
264** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
265** p1 is 1-indexed. So substr(x,1,1) returns the first character
266** of x. If x is text, then we actually count UTF-8 characters.
267** If x is a blob, then we count bytes.
268**
269** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000270**
drhf7b54962013-05-28 12:11:54 +0000271** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000272*/
drhf9b596e2004-05-26 16:54:42 +0000273static void substrFunc(
274 sqlite3_context *context,
275 int argc,
276 sqlite3_value **argv
277){
drh2646da72005-12-09 20:02:05 +0000278 const unsigned char *z;
279 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000280 int len;
drhf764e6f2007-05-15 01:13:47 +0000281 int p0type;
drh023ae032007-05-08 12:12:16 +0000282 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000283 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000284
drh64f31512007-10-12 19:11:55 +0000285 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000286 if( sqlite3_value_type(argv[1])==SQLITE_NULL
287 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
288 ){
289 return;
290 }
drhf764e6f2007-05-15 01:13:47 +0000291 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000292 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000293 if( p0type==SQLITE_BLOB ){
294 len = sqlite3_value_bytes(argv[0]);
295 z = sqlite3_value_blob(argv[0]);
296 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000297 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000298 }else{
299 z = sqlite3_value_text(argv[0]);
300 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000301 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000302 if( p1<0 ){
303 for(z2=z; *z2; len++){
304 SQLITE_SKIP_UTF8(z2);
305 }
drh4a919112007-05-15 11:55:09 +0000306 }
drhf764e6f2007-05-15 01:13:47 +0000307 }
drh883ad042015-02-19 00:29:11 +0000308#ifdef SQLITE_SUBSTR_COMPATIBILITY
309 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
310 ** as substr(X,1,N) - it returns the first N characters of X. This
311 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
312 ** from 2009-02-02 for compatibility of applications that exploited the
313 ** old buggy behavior. */
314 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
315#endif
drh64f31512007-10-12 19:11:55 +0000316 if( argc==3 ){
317 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000318 if( p2<0 ){
319 p2 = -p2;
320 negP2 = 1;
321 }
drh64f31512007-10-12 19:11:55 +0000322 }else{
drhbb4957f2008-03-20 14:03:29 +0000323 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000324 }
drh0bce8352002-02-28 00:41:10 +0000325 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000326 p1 += len;
drh653bc752002-02-28 03:31:10 +0000327 if( p1<0 ){
328 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000329 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000330 p1 = 0;
331 }
drh0bce8352002-02-28 00:41:10 +0000332 }else if( p1>0 ){
333 p1--;
drh65595cd2009-02-02 16:32:55 +0000334 }else if( p2>0 ){
335 p2--;
drh0bce8352002-02-28 00:41:10 +0000336 }
drh65595cd2009-02-02 16:32:55 +0000337 if( negP2 ){
338 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000339 if( p1<0 ){
340 p2 += p1;
341 p1 = 0;
342 }
343 }
drh65595cd2009-02-02 16:32:55 +0000344 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000345 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000346 while( *z && p1 ){
347 SQLITE_SKIP_UTF8(z);
348 p1--;
drhf764e6f2007-05-15 01:13:47 +0000349 }
drh4a919112007-05-15 11:55:09 +0000350 for(z2=z; *z2 && p2; p2--){
351 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000352 }
drhbbf483f2014-09-09 20:30:24 +0000353 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
354 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000355 }else{
drh4adc4cb2009-11-11 20:53:31 +0000356 if( p1+p2>len ){
357 p2 = len-p1;
358 if( p2<0 ) p2 = 0;
359 }
drhbbf483f2014-09-09 20:30:24 +0000360 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000361 }
drh0bce8352002-02-28 00:41:10 +0000362}
363
364/*
365** Implementation of the round() function
366*/
shanefbd60f82009-02-04 03:59:25 +0000367#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000368static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000369 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000370 double r;
drh50d654d2009-06-03 01:24:54 +0000371 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000372 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000373 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000374 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000375 n = sqlite3_value_int(argv[1]);
376 if( n>30 ) n = 30;
377 if( n<0 ) n = 0;
378 }
drhd589a922006-03-02 03:02:48 +0000379 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000380 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000381 /* If Y==0 and X will fit in a 64-bit int,
382 ** handle the rounding directly,
383 ** otherwise use printf.
384 */
385 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
386 r = (double)((sqlite_int64)(r+0.5));
387 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
388 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000389 }else{
shaneh147e1762010-02-17 04:19:27 +0000390 zBuf = sqlite3_mprintf("%.*f",n,r);
391 if( zBuf==0 ){
392 sqlite3_result_error_nomem(context);
393 return;
394 }
drh9339da12010-09-30 00:50:49 +0000395 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000396 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000397 }
shaneh147e1762010-02-17 04:19:27 +0000398 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000399}
shanefbd60f82009-02-04 03:59:25 +0000400#endif
drhdc04c582002-02-24 01:55:15 +0000401
danielk197726783a52007-08-29 14:06:22 +0000402/*
drhf3cdcdc2015-04-29 16:50:28 +0000403** Allocate nByte bytes of space using sqlite3Malloc(). If the
danielk197726783a52007-08-29 14:06:22 +0000404** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000405** the database handle that malloc() has failed and return NULL.
406** If nByte is larger than the maximum string or blob length, then
407** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000408*/
drhb1a6c3c2008-03-20 16:30:17 +0000409static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000410 char *z;
drh27e62db2009-04-02 10:16:17 +0000411 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000412 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000413 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
414 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
415 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000416 sqlite3_result_error_toobig(context);
417 z = 0;
418 }else{
drhda4ca9d2014-09-09 17:27:35 +0000419 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000420 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000421 sqlite3_result_error_nomem(context);
422 }
danielk1977a1644fd2007-08-29 12:31:25 +0000423 }
424 return z;
425}
426
drhdc04c582002-02-24 01:55:15 +0000427/*
428** Implementation of the upper() and lower() SQL functions.
429*/
danielk19770ae8b832004-05-25 12:05:56 +0000430static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000431 char *z1;
432 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000433 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000434 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000435 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000436 n = sqlite3_value_bytes(argv[0]);
437 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
438 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000439 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000440 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000441 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000442 for(i=0; i<n; i++){
443 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000444 }
drhdf901d32011-10-13 18:00:11 +0000445 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000446 }
drhdc04c582002-02-24 01:55:15 +0000447 }
448}
danielk19770ae8b832004-05-25 12:05:56 +0000449static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000450 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000451 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000452 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000453 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000454 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000455 n = sqlite3_value_bytes(argv[0]);
456 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
457 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000458 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000459 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000460 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000461 for(i=0; i<n; i++){
462 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000463 }
drhdf901d32011-10-13 18:00:11 +0000464 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000465 }
drhdc04c582002-02-24 01:55:15 +0000466 }
467}
468
drhae6bb952009-11-11 00:24:31 +0000469/*
drhcca9f3d2013-09-06 15:23:29 +0000470** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
471** as VDBE code so that unused argument values do not have to be computed.
472** However, we still need some kind of function implementation for this
473** routines in the function table. The noopFunc macro provides this.
474** noopFunc will never be called so it doesn't matter what the implementation
475** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000476*/
drhcca9f3d2013-09-06 15:23:29 +0000477#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000478
479/*
drhf9ffac92002-03-02 19:00:31 +0000480** Implementation of random(). Return a random integer.
481*/
drhf9b596e2004-05-26 16:54:42 +0000482static void randomFunc(
483 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000484 int NotUsed,
485 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000486){
drh52fc8492006-02-23 21:43:55 +0000487 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000488 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000489 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000490 if( r<0 ){
491 /* We need to prevent a random number of 0x8000000000000000
492 ** (or -9223372036854775808) since when you do abs() of that
493 ** number of you get the same value back again. To do this
494 ** in a way that is testable, mask the sign bit off of negative
495 ** values, resulting in a positive value. Then take the
496 ** 2s complement of that positive value. The end result can
497 ** therefore be no less than -9223372036854775807.
498 */
drhaf8001b2012-02-11 19:53:24 +0000499 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000500 }
drh52fc8492006-02-23 21:43:55 +0000501 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000502}
503
504/*
drh137c7282007-01-29 17:58:28 +0000505** Implementation of randomblob(N). Return a random blob
506** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000507*/
drh137c7282007-01-29 17:58:28 +0000508static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000509 sqlite3_context *context,
510 int argc,
511 sqlite3_value **argv
512){
drh137c7282007-01-29 17:58:28 +0000513 int n;
514 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000515 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000516 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000517 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000518 if( n<1 ){
519 n = 1;
520 }
danielk1977a1644fd2007-08-29 12:31:25 +0000521 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000522 if( p ){
drh2fa18682008-03-19 14:15:34 +0000523 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000524 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000525 }
drh63cf66f2007-01-29 15:50:05 +0000526}
527
528/*
drh6ed41ad2002-04-06 14:10:47 +0000529** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000530** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000531*/
danielk197751ad0ec2004-05-24 12:39:02 +0000532static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000533 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000534 int NotUsed,
535 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000536){
drhfa4a4b92008-03-19 21:45:51 +0000537 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000538 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000539 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
540 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
541 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000542 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000543}
544
rdcf146a772004-02-25 22:51:06 +0000545/*
drhab2f1f92010-01-11 18:26:42 +0000546** Implementation of the changes() SQL function.
547**
548** IMP: R-62073-11209 The changes() SQL function is a wrapper
549** around the sqlite3_changes() C/C++ function and hence follows the same
550** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000551*/
danielk1977b28af712004-06-21 06:50:26 +0000552static void changes(
drhf9b596e2004-05-26 16:54:42 +0000553 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000554 int NotUsed,
555 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000556){
drhfa4a4b92008-03-19 21:45:51 +0000557 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000558 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000559 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000560}
rdcf146a772004-02-25 22:51:06 +0000561
562/*
danielk1977b28af712004-06-21 06:50:26 +0000563** Implementation of the total_changes() SQL function. The return value is
564** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000565*/
danielk1977b28af712004-06-21 06:50:26 +0000566static void total_changes(
567 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000568 int NotUsed,
569 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000570){
drhfa4a4b92008-03-19 21:45:51 +0000571 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000572 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000573 /* IMP: R-52756-41993 This function is a wrapper around the
574 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000575 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000576}
577
drh6ed41ad2002-04-06 14:10:47 +0000578/*
drh4e5ffc52004-08-31 00:52:37 +0000579** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000580*/
drh4e5ffc52004-08-31 00:52:37 +0000581struct compareInfo {
drh07e83472016-01-11 03:48:18 +0000582 u8 matchAll; /* "*" or "%" */
583 u8 matchOne; /* "?" or "_" */
584 u8 matchSet; /* "[" or 0 */
585 u8 noCase; /* true to ignore case differences */
danielk1977d02eb1f2004-06-06 09:44:03 +0000586};
drh55ef4d92005-08-14 01:20:37 +0000587
drhb9175ae2007-12-07 18:39:04 +0000588/*
589** For LIKE and GLOB matching on EBCDIC machines, assume that every
drhb0870482015-06-17 13:20:54 +0000590** character is exactly one byte in size. Also, provde the Utf8Read()
591** macro for fast reading of the next character in the common case where
592** the next character is ASCII.
drhb9175ae2007-12-07 18:39:04 +0000593*/
594#if defined(SQLITE_EBCDIC)
drh88b33222014-09-25 03:51:37 +0000595# define sqlite3Utf8Read(A) (*((*A)++))
drhb0870482015-06-17 13:20:54 +0000596# define Utf8Read(A) (*(A++))
drhb9175ae2007-12-07 18:39:04 +0000597#else
drhb0870482015-06-17 13:20:54 +0000598# define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))
drhb9175ae2007-12-07 18:39:04 +0000599#endif
600
drh4e5ffc52004-08-31 00:52:37 +0000601static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000602/* The correct SQL-92 behavior is for the LIKE operator to ignore
603** case. Thus 'a' LIKE 'A' would be true. */
604static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
605/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
606** is case sensitive causing 'a' LIKE 'A' to be false */
607static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000608
609/*
drh698a01c2016-12-01 18:49:40 +0000610** Possible error returns from patternMatch()
611*/
612#define SQLITE_MATCH 0
613#define SQLITE_NOMATCH 1
614#define SQLITE_NOWILDCARDMATCH 2
615
616/*
617** Compare two UTF-8 strings for equality where the first string is
618** a GLOB or LIKE expression. Return values:
619**
620** SQLITE_MATCH: Match
621** SQLITE_NOMATCH: No match
622** SQLITE_NOWILDCARDMATCH: No match in spite of having * or % wildcards.
drh0ac65892002-04-20 14:24:41 +0000623**
drh4e5ffc52004-08-31 00:52:37 +0000624** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000625**
drh4e5ffc52004-08-31 00:52:37 +0000626** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000627**
drh4e5ffc52004-08-31 00:52:37 +0000628** '?' Matches exactly one character.
629**
630** [...] Matches one character from the enclosed list of
631** characters.
632**
633** [^...] Matches one character not in the enclosed list.
634**
635** With the [...] and [^...] matching, a ']' character can be included
636** in the list by making it the first character after '[' or '^'. A
637** range of characters can be specified using '-'. Example:
638** "[a-z]" matches any single lower-case letter. To match a '-', make
639** it the last character in the list.
640**
drh9fdfdc82014-09-25 11:08:57 +0000641** Like matching rules:
642**
643** '%' Matches any sequence of zero or more characters
644**
645*** '_' Matches any one character
646**
647** Ec Where E is the "esc" character and c is any other
648** character, including '%', '_', and esc, match exactly c.
649**
drhb0870482015-06-17 13:20:54 +0000650** The comments within this routine usually assume glob matching.
drh9fdfdc82014-09-25 11:08:57 +0000651**
drh4e5ffc52004-08-31 00:52:37 +0000652** This routine is usually quick, but can be N**2 in the worst case.
drh0ac65892002-04-20 14:24:41 +0000653*/
danielk19777c6303c2004-11-17 16:41:29 +0000654static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000655 const u8 *zPattern, /* The glob pattern */
656 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000657 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh698a01c2016-12-01 18:49:40 +0000658 u32 matchOther /* The escape char (LIKE) or '[' (GLOB) */
danielk197751ad0ec2004-05-24 12:39:02 +0000659){
drh9fdfdc82014-09-25 11:08:57 +0000660 u32 c, c2; /* Next pattern and input string chars */
661 u32 matchOne = pInfo->matchOne; /* "?" or "_" */
662 u32 matchAll = pInfo->matchAll; /* "*" or "%" */
drh9fdfdc82014-09-25 11:08:57 +0000663 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
664 const u8 *zEscaped = 0; /* One past the last escaped input char */
drh88b33222014-09-25 03:51:37 +0000665
drhb0870482015-06-17 13:20:54 +0000666 while( (c = Utf8Read(zPattern))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000667 if( c==matchAll ){ /* Match "*" */
668 /* Skip over multiple "*" characters in the pattern. If there
669 ** are also "?" characters, skip those as well, but consume a
670 ** single character of the input string for each "?" skipped */
drhb0870482015-06-17 13:20:54 +0000671 while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000672 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh698a01c2016-12-01 18:49:40 +0000673 return SQLITE_NOWILDCARDMATCH;
drh4e5ffc52004-08-31 00:52:37 +0000674 }
danielk1977ad7dd422004-06-06 12:41:49 +0000675 }
drh66150952007-07-23 19:12:41 +0000676 if( c==0 ){
drh698a01c2016-12-01 18:49:40 +0000677 return SQLITE_MATCH; /* "*" at the end of the pattern matches */
drh88b33222014-09-25 03:51:37 +0000678 }else if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000679 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000680 c = sqlite3Utf8Read(&zPattern);
drh698a01c2016-12-01 18:49:40 +0000681 if( c==0 ) return SQLITE_NOWILDCARDMATCH;
drh88b33222014-09-25 03:51:37 +0000682 }else{
drh9fdfdc82014-09-25 11:08:57 +0000683 /* "[...]" immediately follows the "*". We have to do a slow
684 ** recursive search in this case, but it is an unusual case. */
drh88b33222014-09-25 03:51:37 +0000685 assert( matchOther<0x80 ); /* '[' is a single-byte character */
drh698a01c2016-12-01 18:49:40 +0000686 while( *zString ){
687 int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther);
688 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh88b33222014-09-25 03:51:37 +0000689 SQLITE_SKIP_UTF8(zString);
690 }
drh698a01c2016-12-01 18:49:40 +0000691 return SQLITE_NOWILDCARDMATCH;
drh66150952007-07-23 19:12:41 +0000692 }
drh66150952007-07-23 19:12:41 +0000693 }
drh9fdfdc82014-09-25 11:08:57 +0000694
695 /* At this point variable c contains the first character of the
696 ** pattern string past the "*". Search in the input string for the
dan1a4a7372016-12-01 17:34:59 +0000697 ** first matching character and recursively continue the match from
drh9fdfdc82014-09-25 11:08:57 +0000698 ** that point.
699 **
700 ** For a case-insensitive search, set variable cx to be the same as
701 ** c but in the other case and search the input string for either
702 ** c or cx.
703 */
704 if( c<=0x80 ){
drheba21f92017-10-30 18:49:11 +0000705 char zStop[3];
drh698a01c2016-12-01 18:49:40 +0000706 int bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000707 if( noCase ){
drheba21f92017-10-30 18:49:11 +0000708 zStop[0] = sqlite3Toupper(c);
709 zStop[1] = sqlite3Tolower(c);
710 zStop[2] = 0;
drh66150952007-07-23 19:12:41 +0000711 }else{
drheba21f92017-10-30 18:49:11 +0000712 zStop[0] = c;
713 zStop[1] = 0;
drh4e5ffc52004-08-31 00:52:37 +0000714 }
drheba21f92017-10-30 18:49:11 +0000715 while(1){
716 zString += strcspn((const char*)zString, zStop);
717 if( zString[0]==0 ) break;
718 zString++;
drh698a01c2016-12-01 18:49:40 +0000719 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
720 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000721 }
722 }else{
drh698a01c2016-12-01 18:49:40 +0000723 int bMatch;
drhb0870482015-06-17 13:20:54 +0000724 while( (c2 = Utf8Read(zString))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000725 if( c2!=c ) continue;
drh698a01c2016-12-01 18:49:40 +0000726 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
727 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000728 }
drh66150952007-07-23 19:12:41 +0000729 }
drh698a01c2016-12-01 18:49:40 +0000730 return SQLITE_NOWILDCARDMATCH;
drh88b33222014-09-25 03:51:37 +0000731 }
drh88b33222014-09-25 03:51:37 +0000732 if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000733 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000734 c = sqlite3Utf8Read(&zPattern);
drh698a01c2016-12-01 18:49:40 +0000735 if( c==0 ) return SQLITE_NOMATCH;
drh9fdfdc82014-09-25 11:08:57 +0000736 zEscaped = zPattern;
drh88b33222014-09-25 03:51:37 +0000737 }else{
738 u32 prior_c = 0;
drh9fdfdc82014-09-25 11:08:57 +0000739 int seen = 0;
740 int invert = 0;
drh88b33222014-09-25 03:51:37 +0000741 c = sqlite3Utf8Read(&zString);
drh698a01c2016-12-01 18:49:40 +0000742 if( c==0 ) return SQLITE_NOMATCH;
drh88b33222014-09-25 03:51:37 +0000743 c2 = sqlite3Utf8Read(&zPattern);
744 if( c2=='^' ){
745 invert = 1;
746 c2 = sqlite3Utf8Read(&zPattern);
747 }
748 if( c2==']' ){
749 if( c==']' ) seen = 1;
750 c2 = sqlite3Utf8Read(&zPattern);
751 }
752 while( c2 && c2!=']' ){
753 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
754 c2 = sqlite3Utf8Read(&zPattern);
755 if( c>=prior_c && c<=c2 ) seen = 1;
756 prior_c = 0;
757 }else{
758 if( c==c2 ){
759 seen = 1;
760 }
761 prior_c = c2;
762 }
763 c2 = sqlite3Utf8Read(&zPattern);
764 }
765 if( c2==0 || (seen ^ invert)==0 ){
drh698a01c2016-12-01 18:49:40 +0000766 return SQLITE_NOMATCH;
drh88b33222014-09-25 03:51:37 +0000767 }
768 continue;
769 }
770 }
drhb0870482015-06-17 13:20:54 +0000771 c2 = Utf8Read(zString);
drh88b33222014-09-25 03:51:37 +0000772 if( c==c2 ) continue;
drhc80937a2016-06-06 01:48:14 +0000773 if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){
drh9fdfdc82014-09-25 11:08:57 +0000774 continue;
775 }
776 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
drh698a01c2016-12-01 18:49:40 +0000777 return SQLITE_NOMATCH;
danielk197751ad0ec2004-05-24 12:39:02 +0000778 }
drh698a01c2016-12-01 18:49:40 +0000779 return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH;
drh0ac65892002-04-20 14:24:41 +0000780}
drh4e5ffc52004-08-31 00:52:37 +0000781
drh55ef4d92005-08-14 01:20:37 +0000782/*
drh698a01c2016-12-01 18:49:40 +0000783** The sqlite3_strglob() interface. Return 0 on a match (like strcmp()) and
784** non-zero if there is no match.
drh56282a52013-04-10 16:13:38 +0000785*/
786int sqlite3_strglob(const char *zGlobPattern, const char *zString){
drh698a01c2016-12-01 18:49:40 +0000787 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
drh56282a52013-04-10 16:13:38 +0000788}
789
790/*
drh698a01c2016-12-01 18:49:40 +0000791** The sqlite3_strlike() interface. Return 0 on a match and non-zero for
792** a miss - like strcmp().
drh8b4a94a2015-11-24 21:23:59 +0000793*/
794int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){
drh698a01c2016-12-01 18:49:40 +0000795 return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
drh8b4a94a2015-11-24 21:23:59 +0000796}
797
798/*
drh55ef4d92005-08-14 01:20:37 +0000799** Count the number of times that the LIKE operator (or GLOB which is
800** just a variation of LIKE) gets called. This is used for testing
801** only.
802*/
803#ifdef SQLITE_TEST
804int sqlite3_like_count = 0;
805#endif
806
danielk19773f6b0872004-06-17 05:36:44 +0000807
808/*
809** Implementation of the like() SQL function. This function implements
810** the build-in LIKE operator. The first argument to the function is the
811** pattern and the second argument is the string. So, the SQL statements:
812**
813** A LIKE B
814**
815** is implemented as like(B,A).
816**
drh55ef4d92005-08-14 01:20:37 +0000817** This same function (with a different compareInfo structure) computes
818** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000819*/
820static void likeFunc(
821 sqlite3_context *context,
822 int argc,
823 sqlite3_value **argv
824){
drhbeb818d2007-05-08 15:34:47 +0000825 const unsigned char *zA, *zB;
drh07e83472016-01-11 03:48:18 +0000826 u32 escape;
drh27e62db2009-04-02 10:16:17 +0000827 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000828 sqlite3 *db = sqlite3_context_db_handle(context);
drh07e83472016-01-11 03:48:18 +0000829 struct compareInfo *pInfo = sqlite3_user_data(context);
drhbeb818d2007-05-08 15:34:47 +0000830
drh41d2e662015-12-01 21:23:07 +0000831#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
832 if( sqlite3_value_type(argv[0])==SQLITE_BLOB
833 || sqlite3_value_type(argv[1])==SQLITE_BLOB
834 ){
835#ifdef SQLITE_TEST
836 sqlite3_like_count++;
837#endif
838 sqlite3_result_int(context, 0);
839 return;
840 }
841#endif
drh1f0feef2007-05-15 13:27:07 +0000842 zB = sqlite3_value_text(argv[0]);
843 zA = sqlite3_value_text(argv[1]);
844
drhbeb818d2007-05-08 15:34:47 +0000845 /* Limit the length of the LIKE or GLOB pattern to avoid problems
846 ** of deep recursion and N*N behavior in patternCompare().
847 */
drh27e62db2009-04-02 10:16:17 +0000848 nPat = sqlite3_value_bytes(argv[0]);
849 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
850 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
851 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000852 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
853 return;
854 }
drh1f0feef2007-05-15 13:27:07 +0000855 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000856
danielk19777c6303c2004-11-17 16:41:29 +0000857 if( argc==3 ){
858 /* The escape character string must consist of a single UTF-8 character.
859 ** Otherwise, return an error.
860 */
861 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000862 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000863 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000864 sqlite3_result_error(context,
865 "ESCAPE expression must be a single character", -1);
866 return;
867 }
drh42610962012-09-17 18:56:32 +0000868 escape = sqlite3Utf8Read(&zEsc);
drh07e83472016-01-11 03:48:18 +0000869 }else{
870 escape = pInfo->matchSet;
danielk19777c6303c2004-11-17 16:41:29 +0000871 }
danielk19773f6b0872004-06-17 05:36:44 +0000872 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000873#ifdef SQLITE_TEST
874 sqlite3_like_count++;
875#endif
drhf49759b2017-08-25 19:51:51 +0000876 sqlite3_result_int(context,
877 patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
danielk197751ad0ec2004-05-24 12:39:02 +0000878 }
drh8912d102002-05-26 21:34:58 +0000879}
880
881/*
882** Implementation of the NULLIF(x,y) function. The result is the first
883** argument if the arguments are different. The result is NULL if the
884** arguments are equal to each other.
885*/
drhf9b596e2004-05-26 16:54:42 +0000886static void nullifFunc(
887 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000888 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000889 sqlite3_value **argv
890){
danielk1977dc1bdc42004-06-11 10:51:27 +0000891 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000892 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000893 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000894 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000895 }
drh0ac65892002-04-20 14:24:41 +0000896}
897
drh647cb0e2002-11-04 19:32:25 +0000898/*
drh47baebc2009-08-14 16:01:24 +0000899** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000900** of the SQLite library that is running.
901*/
drhf9b596e2004-05-26 16:54:42 +0000902static void versionFunc(
903 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000904 int NotUsed,
905 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000906){
danielk197762c14b32008-11-19 09:05:26 +0000907 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000908 /* IMP: R-48699-48617 This function is an SQL wrapper around the
909 ** sqlite3_libversion() C-interface. */
910 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000911}
912
drh47baebc2009-08-14 16:01:24 +0000913/*
914** Implementation of the sqlite_source_id() function. The result is a string
915** that identifies the particular version of the source code used to build
916** SQLite.
917*/
918static void sourceidFunc(
919 sqlite3_context *context,
920 int NotUsed,
921 sqlite3_value **NotUsed2
922){
923 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000924 /* IMP: R-24470-31136 This function is an SQL wrapper around the
925 ** sqlite3_sourceid() C interface. */
926 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000927}
928
shanehbdea6d12010-02-23 04:19:54 +0000929/*
drh3ca84ef2011-04-25 18:03:10 +0000930** Implementation of the sqlite_log() function. This is a wrapper around
931** sqlite3_log(). The return value is NULL. The function exists purely for
932** its side-effects.
933*/
drh840561f2011-04-27 18:08:42 +0000934static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000935 sqlite3_context *context,
936 int argc,
937 sqlite3_value **argv
938){
939 UNUSED_PARAMETER(argc);
940 UNUSED_PARAMETER(context);
941 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
942}
943
944/*
shanehdc97a8c2010-02-23 20:08:35 +0000945** Implementation of the sqlite_compileoption_used() function.
946** The result is an integer that identifies if the compiler option
947** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000948*/
shanehdc97a8c2010-02-23 20:08:35 +0000949#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
950static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000951 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000952 int argc,
953 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000954){
shanehdc97a8c2010-02-23 20:08:35 +0000955 const char *zOptName;
956 assert( argc==1 );
957 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000958 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
959 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
960 ** function.
961 */
drh264a2d42010-02-25 15:28:41 +0000962 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000963 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000964 }
shanehbdea6d12010-02-23 04:19:54 +0000965}
shanehdc97a8c2010-02-23 20:08:35 +0000966#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
967
968/*
969** Implementation of the sqlite_compileoption_get() function.
970** The result is a string that identifies the compiler options
971** used to build SQLite.
972*/
973#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
974static void compileoptiongetFunc(
975 sqlite3_context *context,
976 int argc,
977 sqlite3_value **argv
978){
979 int n;
980 assert( argc==1 );
981 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000982 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
983 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
984 */
shanehdc97a8c2010-02-23 20:08:35 +0000985 n = sqlite3_value_int(argv[0]);
986 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
987}
988#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000989
drh137c7282007-01-29 17:58:28 +0000990/* Array for converting from half-bytes (nybbles) into ASCII hex
991** digits. */
992static const char hexdigits[] = {
993 '0', '1', '2', '3', '4', '5', '6', '7',
994 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
995};
danielk1977d641d642004-11-18 15:44:29 +0000996
drh47394702003-08-20 01:03:33 +0000997/*
drh47394702003-08-20 01:03:33 +0000998** Implementation of the QUOTE() function. This function takes a single
999** argument. If the argument is numeric, the return value is the same as
1000** the argument. If the argument is NULL, the return value is the string
1001** "NULL". Otherwise, the argument is enclosed in single quotes with
1002** single-quote escapes.
1003*/
danielk19770ae8b832004-05-25 12:05:56 +00001004static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +00001005 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +00001006 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +00001007 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +00001008 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +00001009 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +00001010 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +00001011 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +00001012 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
1013 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
1014 if( r1!=r2 ){
1015 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
1016 }
1017 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
1018 break;
1019 }
1020 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +00001021 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +00001022 break;
1023 }
danielk19773f41e972004-06-08 00:39:01 +00001024 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +00001025 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +00001026 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001027 int nBlob = sqlite3_value_bytes(argv[0]);
1028 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001029 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +00001030 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +00001031 int i;
1032 for(i=0; i<nBlob; i++){
1033 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
1034 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
1035 }
1036 zText[(nBlob*2)+2] = '\'';
1037 zText[(nBlob*2)+3] = '\0';
1038 zText[0] = 'X';
1039 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +00001040 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +00001041 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +00001042 }
1043 break;
1044 }
drh9c054832004-05-31 18:51:57 +00001045 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +00001046 int i,j;
1047 u64 n;
drh2646da72005-12-09 20:02:05 +00001048 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +00001049 char *z;
1050
drh7a521cf2007-04-25 18:23:52 +00001051 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +00001052 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +00001053 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +00001054 if( z ){
1055 z[0] = '\'';
1056 for(i=0, j=1; zArg[i]; i++){
1057 z[j++] = zArg[i];
1058 if( zArg[i]=='\'' ){
1059 z[j++] = '\'';
1060 }
drhf9b596e2004-05-26 16:54:42 +00001061 }
danielk1977a1644fd2007-08-29 12:31:25 +00001062 z[j++] = '\'';
1063 z[j] = 0;
1064 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +00001065 }
drha0df4cc2009-02-02 17:29:59 +00001066 break;
1067 }
1068 default: {
1069 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1070 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1071 break;
drhf9b596e2004-05-26 16:54:42 +00001072 }
drh47394702003-08-20 01:03:33 +00001073 }
1074}
1075
drh137c7282007-01-29 17:58:28 +00001076/*
drhd495d8c2013-02-22 19:34:25 +00001077** The unicode() function. Return the integer unicode code-point value
1078** for the first character of the input string.
1079*/
1080static void unicodeFunc(
1081 sqlite3_context *context,
1082 int argc,
1083 sqlite3_value **argv
1084){
1085 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001086 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001087 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1088}
1089
1090/*
1091** The char() function takes zero or more arguments, each of which is
1092** an integer. It constructs a string where each character of the string
1093** is the unicode character for the corresponding integer argument.
1094*/
1095static void charFunc(
1096 sqlite3_context *context,
1097 int argc,
1098 sqlite3_value **argv
1099){
1100 unsigned char *z, *zOut;
1101 int i;
drhf3cdcdc2015-04-29 16:50:28 +00001102 zOut = z = sqlite3_malloc64( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001103 if( z==0 ){
1104 sqlite3_result_error_nomem(context);
1105 return;
1106 }
1107 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001108 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001109 unsigned c;
1110 x = sqlite3_value_int64(argv[i]);
1111 if( x<0 || x>0x10ffff ) x = 0xfffd;
1112 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001113 if( c<0x00080 ){
1114 *zOut++ = (u8)(c&0xFF);
1115 }else if( c<0x00800 ){
1116 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1117 *zOut++ = 0x80 + (u8)(c & 0x3F);
1118 }else if( c<0x10000 ){
1119 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1120 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1121 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001122 }else{
drhfe7a5d12013-03-07 14:00:04 +00001123 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1124 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1125 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1126 *zOut++ = 0x80 + (u8)(c & 0x3F);
1127 } \
drhd495d8c2013-02-22 19:34:25 +00001128 }
drhbbf483f2014-09-09 20:30:24 +00001129 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001130}
1131
1132/*
drh137c7282007-01-29 17:58:28 +00001133** The hex() function. Interpret the argument as a blob. Return
1134** a hexadecimal rendering as text.
1135*/
1136static void hexFunc(
1137 sqlite3_context *context,
1138 int argc,
1139 sqlite3_value **argv
1140){
1141 int i, n;
1142 const unsigned char *pBlob;
1143 char *zHex, *z;
1144 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001145 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001146 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001147 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001148 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001149 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001150 if( zHex ){
1151 for(i=0; i<n; i++, pBlob++){
1152 unsigned char c = *pBlob;
1153 *(z++) = hexdigits[(c>>4)&0xf];
1154 *(z++) = hexdigits[c&0xf];
1155 }
1156 *z = 0;
1157 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001158 }
drh137c7282007-01-29 17:58:28 +00001159}
1160
drh26b6d902007-03-17 13:27:54 +00001161/*
drh8cff3822007-05-02 02:08:28 +00001162** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1163*/
1164static void zeroblobFunc(
1165 sqlite3_context *context,
1166 int argc,
1167 sqlite3_value **argv
1168){
drh98640a32007-06-07 19:08:32 +00001169 i64 n;
dana4d5ae82015-07-24 16:24:37 +00001170 int rc;
drh8cff3822007-05-02 02:08:28 +00001171 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001172 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001173 n = sqlite3_value_int64(argv[0]);
dana4d5ae82015-07-24 16:24:37 +00001174 if( n<0 ) n = 0;
1175 rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
1176 if( rc ){
1177 sqlite3_result_error_code(context, rc);
drh98640a32007-06-07 19:08:32 +00001178 }
drh8cff3822007-05-02 02:08:28 +00001179}
1180
1181/*
drh26b6d902007-03-17 13:27:54 +00001182** The replace() function. Three arguments are all strings: call
1183** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001184** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001185** must be exact. Collating sequences are not used.
1186*/
1187static void replaceFunc(
1188 sqlite3_context *context,
1189 int argc,
1190 sqlite3_value **argv
1191){
1192 const unsigned char *zStr; /* The input string A */
1193 const unsigned char *zPattern; /* The pattern string B */
1194 const unsigned char *zRep; /* The replacement string C */
1195 unsigned char *zOut; /* The output */
1196 int nStr; /* Size of zStr */
1197 int nPattern; /* Size of zPattern */
1198 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001199 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001200 int loopLimit; /* Last zStr[] that might match zPattern[] */
1201 int i, j; /* Loop counters */
drhf3139522018-02-09 23:25:14 +00001202 unsigned cntExpand; /* Number zOut expansions */
1203 sqlite3 *db = sqlite3_context_db_handle(context);
drh26b6d902007-03-17 13:27:54 +00001204
1205 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001206 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001207 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001208 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001209 nStr = sqlite3_value_bytes(argv[0]);
1210 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001211 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001212 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001213 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1214 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001215 return;
1216 }
1217 if( zPattern[0]==0 ){
1218 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1219 sqlite3_result_value(context, argv[0]);
1220 return;
1221 }
drh1f0feef2007-05-15 13:27:07 +00001222 nPattern = sqlite3_value_bytes(argv[1]);
1223 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001224 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001225 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001226 nRep = sqlite3_value_bytes(argv[2]);
1227 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001228 nOut = nStr + 1;
1229 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001230 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001231 if( zOut==0 ){
1232 return;
drh26b6d902007-03-17 13:27:54 +00001233 }
drh26b6d902007-03-17 13:27:54 +00001234 loopLimit = nStr - nPattern;
drhf3139522018-02-09 23:25:14 +00001235 cntExpand = 0;
drh26b6d902007-03-17 13:27:54 +00001236 for(i=j=0; i<=loopLimit; i++){
1237 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1238 zOut[j++] = zStr[i];
1239 }else{
drhf3139522018-02-09 23:25:14 +00001240 if( nRep>nPattern ){
1241 nOut += nRep - nPattern;
drhc86d82f2018-02-10 02:31:30 +00001242 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1243 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
drhf3139522018-02-09 23:25:14 +00001244 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1245 sqlite3_result_error_toobig(context);
1246 sqlite3_free(zOut);
1247 return;
1248 }
drhf3139522018-02-09 23:25:14 +00001249 cntExpand++;
1250 if( (cntExpand&(cntExpand-1))==0 ){
1251 /* Grow the size of the output buffer only on substitutions
1252 ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */
1253 u8 *zOld;
1254 zOld = zOut;
1255 zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1));
1256 if( zOut==0 ){
1257 sqlite3_result_error_nomem(context);
1258 sqlite3_free(zOld);
1259 return;
1260 }
1261 }
drh2e6400b2007-05-08 15:46:18 +00001262 }
drh26b6d902007-03-17 13:27:54 +00001263 memcpy(&zOut[j], zRep, nRep);
1264 j += nRep;
1265 i += nPattern-1;
1266 }
1267 }
drhf3139522018-02-09 23:25:14 +00001268 assert( j+nStr-i+1<=nOut );
drh26b6d902007-03-17 13:27:54 +00001269 memcpy(&zOut[j], &zStr[i], nStr-i);
1270 j += nStr - i;
1271 assert( j<=nOut );
1272 zOut[j] = 0;
1273 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1274}
1275
drh309b3382007-03-17 17:52:42 +00001276/*
1277** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1278** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1279*/
1280static void trimFunc(
1281 sqlite3_context *context,
1282 int argc,
1283 sqlite3_value **argv
1284){
1285 const unsigned char *zIn; /* Input string */
1286 const unsigned char *zCharSet; /* Set of characters to trim */
1287 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001288 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001289 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001290 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1291 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001292 int nChar; /* Number of characters in zCharSet */
1293
drh309b3382007-03-17 17:52:42 +00001294 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1295 return;
1296 }
1297 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001298 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001299 nIn = sqlite3_value_bytes(argv[0]);
1300 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001301 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001302 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001303 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001304 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001305 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001306 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001307 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001308 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001309 return;
drhd1e3a612007-04-27 21:59:52 +00001310 }else{
1311 const unsigned char *z;
1312 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001313 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001314 }
1315 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001316 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001317 if( azChar==0 ){
1318 return;
1319 }
1320 aLen = (unsigned char*)&azChar[nChar];
1321 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001322 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001323 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001324 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001325 }
1326 }
drh309b3382007-03-17 17:52:42 +00001327 }
drhd1e3a612007-04-27 21:59:52 +00001328 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001329 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001330 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001331 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001332 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001333 for(i=0; i<nChar; i++){
1334 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001335 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001336 }
1337 if( i>=nChar ) break;
1338 zIn += len;
1339 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001340 }
1341 }
1342 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001343 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001344 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001345 for(i=0; i<nChar; i++){
1346 len = aLen[i];
1347 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1348 }
1349 if( i>=nChar ) break;
1350 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001351 }
1352 }
drhd1e3a612007-04-27 21:59:52 +00001353 if( zCharSet ){
1354 sqlite3_free(azChar);
1355 }
drh309b3382007-03-17 17:52:42 +00001356 }
1357 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1358}
drh26b6d902007-03-17 13:27:54 +00001359
danielk1977a4de4532008-09-02 15:44:08 +00001360
drhcc153132016-08-04 12:35:17 +00001361#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1362/*
1363** The "unknown" function is automatically substituted in place of
1364** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
1365** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
1366** When the "sqlite3" command-line shell is built using this functionality,
1367** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
1368** involving application-defined functions to be examined in a generic
1369** sqlite3 shell.
1370*/
1371static void unknownFunc(
1372 sqlite3_context *context,
1373 int argc,
1374 sqlite3_value **argv
1375){
1376 /* no-op */
1377}
1378#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
1379
1380
drh2ba3ccc2009-12-08 02:06:08 +00001381/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1382** is only available if the SQLITE_SOUNDEX compile-time option is used
1383** when SQLite is built.
1384*/
drhd24cc422003-03-27 12:51:24 +00001385#ifdef SQLITE_SOUNDEX
1386/*
1387** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001388**
1389** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1390** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001391*/
drh137c7282007-01-29 17:58:28 +00001392static void soundexFunc(
1393 sqlite3_context *context,
1394 int argc,
1395 sqlite3_value **argv
1396){
drhd24cc422003-03-27 12:51:24 +00001397 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001398 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001399 int i, j;
1400 static const unsigned char iCode[] = {
1401 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1403 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1405 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1406 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1407 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1408 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1409 };
1410 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001411 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001412 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001413 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001414 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001415 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001416 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001417 for(j=1; j<4 && zIn[i]; i++){
1418 int code = iCode[zIn[i]&0x7f];
1419 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001420 if( code!=prevcode ){
1421 prevcode = code;
1422 zResult[j++] = code + '0';
1423 }
1424 }else{
1425 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001426 }
1427 }
1428 while( j<4 ){
1429 zResult[j++] = '0';
1430 }
1431 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001432 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001433 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001434 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1435 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001436 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001437 }
1438}
drh2ba3ccc2009-12-08 02:06:08 +00001439#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001440
drhfdb83b22006-06-17 14:12:47 +00001441#ifndef SQLITE_OMIT_LOAD_EXTENSION
1442/*
1443** A function that loads a shared-library extension then returns NULL.
1444*/
1445static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001446 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001447 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001448 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001449 char *zErrMsg = 0;
1450
drh191dd062016-04-21 01:30:09 +00001451 /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
drh1a55ded2016-04-20 00:30:05 +00001452 ** flag is set. See the sqlite3_enable_load_extension() API.
1453 */
drhf602a162016-04-21 01:58:21 +00001454 if( (db->flags & SQLITE_LoadExtFunc)==0 ){
1455 sqlite3_result_error(context, "not authorized", -1);
1456 return;
1457 }
drh1a55ded2016-04-20 00:30:05 +00001458
drhfdb83b22006-06-17 14:12:47 +00001459 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001460 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001461 }else{
1462 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001463 }
drh7a521cf2007-04-25 18:23:52 +00001464 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001465 sqlite3_result_error(context, zErrMsg, -1);
1466 sqlite3_free(zErrMsg);
1467 }
1468}
1469#endif
1470
danielk197701427a62005-01-11 13:02:33 +00001471
drh0ac65892002-04-20 14:24:41 +00001472/*
drhd3a149e2002-02-24 17:12:53 +00001473** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001474** sum() or avg() aggregate computation.
1475*/
1476typedef struct SumCtx SumCtx;
1477struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001478 double rSum; /* Floating point sum */
1479 i64 iSum; /* Integer sum */
1480 i64 cnt; /* Number of elements summed */
1481 u8 overflow; /* True if integer overflow seen */
1482 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001483};
1484
1485/*
drha97fdd32006-01-12 22:17:50 +00001486** Routines used to compute the sum, average, and total.
1487**
1488** The SUM() function follows the (broken) SQL standard which means
1489** that it returns NULL if it sums over no inputs. TOTAL returns
1490** 0.0 in that case. In addition, TOTAL always returns a float where
1491** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001492** value. TOTAL never fails, but SUM might through an exception if
1493** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001494*/
danielk19770ae8b832004-05-25 12:05:56 +00001495static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001496 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001497 int type;
drh3f219f42005-09-08 19:45:57 +00001498 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001499 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001500 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001501 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001502 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001503 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001504 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001505 i64 v = sqlite3_value_int64(argv[0]);
1506 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001507 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
drha546ef22018-07-07 20:55:16 +00001508 p->approx = p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001509 }
1510 }else{
drh8c08e862006-02-11 17:34:00 +00001511 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001512 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001513 }
drh739105c2002-05-29 23:22:23 +00001514 }
drhdd5baa92002-02-27 19:50:59 +00001515}
dan67a9b8e2018-06-22 20:51:35 +00001516#ifndef SQLITE_OMIT_WINDOWFUNC
danc3a20c12018-05-23 20:55:37 +00001517static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
1518 SumCtx *p;
1519 int type;
1520 assert( argc==1 );
1521 UNUSED_PARAMETER(argc);
1522 p = sqlite3_aggregate_context(context, sizeof(*p));
1523 type = sqlite3_value_numeric_type(argv[0]);
drhfd4b7282018-07-07 19:47:21 +00001524 /* p is always non-NULL because sumStep() will have been called first
1525 ** to initialize it */
1526 if( ALWAYS(p) && type!=SQLITE_NULL ){
drha546ef22018-07-07 20:55:16 +00001527 assert( p->cnt>0 );
danc3a20c12018-05-23 20:55:37 +00001528 p->cnt--;
drha546ef22018-07-07 20:55:16 +00001529 assert( type==SQLITE_INTEGER || p->approx );
1530 if( type==SQLITE_INTEGER && p->approx==0 ){
danc3a20c12018-05-23 20:55:37 +00001531 i64 v = sqlite3_value_int64(argv[0]);
1532 p->rSum -= v;
drha546ef22018-07-07 20:55:16 +00001533 p->iSum -= v;
danc3a20c12018-05-23 20:55:37 +00001534 }else{
dand7368292018-07-02 17:45:59 +00001535 p->rSum -= sqlite3_value_double(argv[0]);
danc3a20c12018-05-23 20:55:37 +00001536 }
1537 }
1538}
dan67a9b8e2018-06-22 20:51:35 +00001539#else
1540# define sumInverse 0
1541#endif /* SQLITE_OMIT_WINDOWFUNC */
danielk19770ae8b832004-05-25 12:05:56 +00001542static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001543 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001544 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001545 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001546 if( p->overflow ){
1547 sqlite3_result_error(context,"integer overflow",-1);
1548 }else if( p->approx ){
1549 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001550 }else{
drh8c08e862006-02-11 17:34:00 +00001551 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001552 }
drh3d1d95e2005-09-08 10:37:01 +00001553 }
drhdd5baa92002-02-27 19:50:59 +00001554}
danielk19770ae8b832004-05-25 12:05:56 +00001555static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001556 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001557 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001558 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001559 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001560 }
1561}
drha97fdd32006-01-12 22:17:50 +00001562static void totalFinalize(sqlite3_context *context){
1563 SumCtx *p;
1564 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001565 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1566 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001567}
drhdd5baa92002-02-27 19:50:59 +00001568
1569/*
drh0bce8352002-02-28 00:41:10 +00001570** The following structure keeps track of state information for the
1571** count() aggregate function.
1572*/
1573typedef struct CountCtx CountCtx;
1574struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001575 i64 n;
dan7262ca92018-07-02 12:07:32 +00001576#ifdef SQLITE_DEBUG
1577 int bInverse; /* True if xInverse() ever called */
1578#endif
drh0bce8352002-02-28 00:41:10 +00001579};
drhdd5baa92002-02-27 19:50:59 +00001580
drh0bce8352002-02-28 00:41:10 +00001581/*
1582** Routines to implement the count() aggregate function.
1583*/
danielk19770ae8b832004-05-25 12:05:56 +00001584static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001585 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001586 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001587 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001588 p->n++;
1589 }
drh2e79c3d2009-04-08 23:04:14 +00001590
drhd3264c72009-04-15 13:39:47 +00001591#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001592 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1593 ** sure it still operates correctly, verify that its count agrees with our
1594 ** internal count when using count(*) and when the total count can be
1595 ** expressed as a 32-bit integer. */
dan7262ca92018-07-02 12:07:32 +00001596 assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse
drh2e79c3d2009-04-08 23:04:14 +00001597 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001598#endif
drh0bce8352002-02-28 00:41:10 +00001599}
danielk19770ae8b832004-05-25 12:05:56 +00001600static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001601 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001602 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001603 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001604}
dan7262ca92018-07-02 12:07:32 +00001605#ifndef SQLITE_OMIT_WINDOWFUNC
1606static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){
1607 CountCtx *p;
1608 p = sqlite3_aggregate_context(ctx, sizeof(*p));
drhfd4b7282018-07-07 19:47:21 +00001609 /* p is always non-NULL since countStep() will have been called first */
1610 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
dan7262ca92018-07-02 12:07:32 +00001611 p->n--;
1612#ifdef SQLITE_DEBUG
1613 p->bInverse = 1;
1614#endif
1615 }
1616}
dan6b4b8822018-07-02 15:03:50 +00001617#else
1618# define countInverse 0
1619#endif /* SQLITE_OMIT_WINDOWFUNC */
drh0bce8352002-02-28 00:41:10 +00001620
1621/*
drh0bce8352002-02-28 00:41:10 +00001622** Routines to implement min() and max() aggregate functions.
1623*/
danielk197762c14b32008-11-19 09:05:26 +00001624static void minmaxStep(
1625 sqlite3_context *context,
1626 int NotUsed,
1627 sqlite3_value **argv
1628){
danielk197788208052004-05-25 01:13:20 +00001629 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001630 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001631 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001632
drh9eb516c2004-07-18 20:52:32 +00001633 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001634 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001635
dan6fb2b542018-06-19 17:13:11 +00001636 if( sqlite3_value_type(pArg)==SQLITE_NULL ){
drh94a6d992012-02-02 18:42:09 +00001637 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1638 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001639 int max;
1640 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001641 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001642 /* This step function is used for both the min() and max() aggregates,
1643 ** the only difference between the two being that the sense of the
1644 ** comparison is inverted. For the max() aggregate, the
1645 ** sqlite3_user_data() function returns (void *)-1. For min() it
1646 ** returns (void *)db, where db is the sqlite3* database pointer.
1647 ** Therefore the next statement sets variable 'max' to 1 for the max()
1648 ** aggregate, or 0 for min().
1649 */
drh309b3382007-03-17 17:52:42 +00001650 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001651 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001652 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001653 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001654 }else{
1655 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001656 }
drh268380c2004-02-25 13:47:31 +00001657 }else{
drh035e5632014-09-16 14:16:31 +00001658 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001659 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001660 }
1661}
dan6fb2b542018-06-19 17:13:11 +00001662static void minMaxValueFinalize(sqlite3_context *context, int bValue){
danielk197788208052004-05-25 01:13:20 +00001663 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001664 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1665 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001666 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001667 sqlite3_result_value(context, pRes);
1668 }
dan6fb2b542018-06-19 17:13:11 +00001669 if( bValue==0 ) sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001670 }
1671}
dan67a9b8e2018-06-22 20:51:35 +00001672#ifndef SQLITE_OMIT_WINDOWFUNC
dan6fb2b542018-06-19 17:13:11 +00001673static void minMaxValue(sqlite3_context *context){
drhc7bf5712018-07-09 22:49:01 +00001674 minMaxValueFinalize(context, 1);
dan6fb2b542018-06-19 17:13:11 +00001675}
dan67a9b8e2018-06-22 20:51:35 +00001676#else
1677# define minMaxValue 0
1678#endif /* SQLITE_OMIT_WINDOWFUNC */
dan6fb2b542018-06-19 17:13:11 +00001679static void minMaxFinalize(sqlite3_context *context){
drhc7bf5712018-07-09 22:49:01 +00001680 minMaxValueFinalize(context, 0);
dan6fb2b542018-06-19 17:13:11 +00001681}
drhdd5baa92002-02-27 19:50:59 +00001682
drhb0689692007-11-01 17:38:30 +00001683/*
1684** group_concat(EXPR, ?SEPARATOR?)
1685*/
1686static void groupConcatStep(
1687 sqlite3_context *context,
1688 int argc,
1689 sqlite3_value **argv
1690){
1691 const char *zVal;
drhade86482007-11-28 22:36:40 +00001692 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001693 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001694 int nVal, nSep;
1695 assert( argc==1 || argc==2 );
1696 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001697 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1698
1699 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001700 sqlite3 *db = sqlite3_context_db_handle(context);
dane3bf6322018-06-08 20:58:27 +00001701 int firstTerm = pAccum->mxAlloc==0;
drhbb4957f2008-03-20 14:03:29 +00001702 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001703 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001704 if( argc==2 ){
1705 zSep = (char*)sqlite3_value_text(argv[1]);
1706 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001707 }else{
1708 zSep = ",";
drhade86482007-11-28 22:36:40 +00001709 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001710 }
drh0cdbe1a2018-05-09 13:46:26 +00001711 if( zSep ) sqlite3_str_append(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001712 }
drh07d31172009-02-02 21:57:05 +00001713 zVal = (char*)sqlite3_value_text(argv[0]);
1714 nVal = sqlite3_value_bytes(argv[0]);
drh0cdbe1a2018-05-09 13:46:26 +00001715 if( zVal ) sqlite3_str_append(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001716 }
1717}
dan67a9b8e2018-06-22 20:51:35 +00001718#ifndef SQLITE_OMIT_WINDOWFUNC
dan03854d22018-06-08 11:45:28 +00001719static void groupConcatInverse(
1720 sqlite3_context *context,
1721 int argc,
1722 sqlite3_value **argv
1723){
1724 int n;
dan03854d22018-06-08 11:45:28 +00001725 StrAccum *pAccum;
drhc7bf5712018-07-09 22:49:01 +00001726 assert( argc==1 || argc==2 );
dan03854d22018-06-08 11:45:28 +00001727 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1728 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
drhfd4b7282018-07-07 19:47:21 +00001729 /* pAccum is always non-NULL since groupConcatStep() will have always
1730 ** run frist to initialize it */
1731 if( ALWAYS(pAccum) ){
dan03854d22018-06-08 11:45:28 +00001732 n = sqlite3_value_bytes(argv[0]);
1733 if( argc==2 ){
1734 n += sqlite3_value_bytes(argv[1]);
dan683b0ff2018-07-05 18:19:29 +00001735 }else{
1736 n++;
dan03854d22018-06-08 11:45:28 +00001737 }
drhc7bf5712018-07-09 22:49:01 +00001738 if( n>=(int)pAccum->nChar ){
dan03854d22018-06-08 11:45:28 +00001739 pAccum->nChar = 0;
1740 }else{
1741 pAccum->nChar -= n;
1742 memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar);
1743 }
dane3bf6322018-06-08 20:58:27 +00001744 if( pAccum->nChar==0 ) pAccum->mxAlloc = 0;
dan03854d22018-06-08 11:45:28 +00001745 }
1746}
dan67a9b8e2018-06-22 20:51:35 +00001747#else
1748# define groupConcatInverse 0
1749#endif /* SQLITE_OMIT_WINDOWFUNC */
drhb0689692007-11-01 17:38:30 +00001750static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001751 StrAccum *pAccum;
1752 pAccum = sqlite3_aggregate_context(context, 0);
1753 if( pAccum ){
drh0cdbe1a2018-05-09 13:46:26 +00001754 if( pAccum->accError==SQLITE_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001755 sqlite3_result_error_toobig(context);
drh0cdbe1a2018-05-09 13:46:26 +00001756 }else if( pAccum->accError==SQLITE_NOMEM ){
drhade86482007-11-28 22:36:40 +00001757 sqlite3_result_error_nomem(context);
1758 }else{
1759 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1760 sqlite3_free);
1761 }
drhb0689692007-11-01 17:38:30 +00001762 }
1763}
dan67a9b8e2018-06-22 20:51:35 +00001764#ifndef SQLITE_OMIT_WINDOWFUNC
dane2f781b2018-05-17 19:24:08 +00001765static void groupConcatValue(sqlite3_context *context){
1766 sqlite3_str *pAccum;
1767 pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0);
1768 if( pAccum ){
1769 if( pAccum->accError==SQLITE_TOOBIG ){
1770 sqlite3_result_error_toobig(context);
1771 }else if( pAccum->accError==SQLITE_NOMEM ){
1772 sqlite3_result_error_nomem(context);
1773 }else{
1774 const char *zText = sqlite3_str_value(pAccum);
1775 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
1776 }
1777 }
1778}
dan67a9b8e2018-06-22 20:51:35 +00001779#else
1780# define groupConcatValue 0
1781#endif /* SQLITE_OMIT_WINDOWFUNC */
drh4e5ffc52004-08-31 00:52:37 +00001782
drhd3a149e2002-02-24 17:12:53 +00001783/*
drha4741842010-04-25 20:58:37 +00001784** This routine does per-connection function registration. Most
1785** of the built-in functions above are part of the global function set.
1786** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001787*/
drh80738d92016-02-15 00:34:16 +00001788void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001789 int rc = sqlite3_overload_function(db, "MATCH", 2);
1790 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1791 if( rc==SQLITE_NOMEM ){
drh4a642b62016-02-05 01:55:27 +00001792 sqlite3OomFault(db);
danielk1977832a58a2007-06-22 15:21:15 +00001793 }
drh55ef4d92005-08-14 01:20:37 +00001794}
1795
1796/*
1797** Set the LIKEOPT flag on the 2-argument function with the given name.
1798*/
drh1bd10f82008-12-10 21:19:56 +00001799static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001800 FuncDef *pDef;
drh80738d92016-02-15 00:34:16 +00001801 pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001802 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001803 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001804 }
1805}
1806
1807/*
1808** Register the built-in LIKE and GLOB functions. The caseSensitive
1809** parameter determines whether or not the LIKE operator is case
1810** sensitive. GLOB is always case sensitive.
1811*/
1812void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1813 struct compareInfo *pInfo;
1814 if( caseSensitive ){
1815 pInfo = (struct compareInfo*)&likeInfoAlt;
1816 }else{
1817 pInfo = (struct compareInfo*)&likeInfoNorm;
1818 }
dan660af932018-06-18 16:55:22 +00001819 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1820 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
drh901e9942010-12-15 18:54:37 +00001821 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dan660af932018-06-18 16:55:22 +00001822 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001823 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1824 setLikeOptFlag(db, "like",
1825 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001826}
1827
1828/*
1829** pExpr points to an expression which implements a function. If
1830** it is appropriate to apply the LIKE optimization to that function
drh1d42ea72017-07-27 20:24:29 +00001831** then set aWc[0] through aWc[2] to the wildcard characters and the
1832** escape character and then return TRUE. If the function is not a
1833** LIKE-style function then return FALSE.
1834**
1835** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
1836** operator if c is a string literal that is exactly one byte in length.
1837** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is
1838** no ESCAPE clause.
drh16897072015-03-07 00:57:37 +00001839**
1840** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1841** the function (default for LIKE). If the function makes the distinction
1842** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1843** false.
drh55ef4d92005-08-14 01:20:37 +00001844*/
drhd64fe2f2005-08-28 17:00:23 +00001845int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001846 FuncDef *pDef;
drh1d42ea72017-07-27 20:24:29 +00001847 int nExpr;
1848 if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
drh55ef4d92005-08-14 01:20:37 +00001849 return 0;
1850 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001851 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh1d42ea72017-07-27 20:24:29 +00001852 nExpr = pExpr->x.pList->nExpr;
1853 pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001854 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001855 return 0;
1856 }
drh1d42ea72017-07-27 20:24:29 +00001857 if( nExpr<3 ){
1858 aWc[3] = 0;
1859 }else{
1860 Expr *pEscape = pExpr->x.pList->a[2].pExpr;
1861 char *zEscape;
1862 if( pEscape->op!=TK_STRING ) return 0;
1863 zEscape = pEscape->u.zToken;
1864 if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
1865 aWc[3] = zEscape[0];
1866 }
drh55ef4d92005-08-14 01:20:37 +00001867
1868 /* The memcpy() statement assumes that the wildcard characters are
1869 ** the first three statements in the compareInfo structure. The
1870 ** asserts() that follow verify that assumption
1871 */
1872 memcpy(aWc, pDef->pUserData, 3);
1873 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1874 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1875 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001876 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001877 return 1;
drhdc04c582002-02-24 01:55:15 +00001878}
danielk19778c0a7912008-08-20 14:49:23 +00001879
drh70a8ca32008-08-21 18:49:27 +00001880/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001881** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001882** to the global function hash table. This occurs at start-time (as
1883** a consequence of calling sqlite3_initialize()).
1884**
1885** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001886*/
drh80738d92016-02-15 00:34:16 +00001887void sqlite3RegisterBuiltinFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001888 /*
1889 ** The following array holds FuncDef structures for all of the functions
1890 ** defined in this file.
1891 **
1892 ** The array cannot be constant since changes are made to the
1893 ** FuncDef.pHash elements at start-time. The elements of this array
1894 ** are read-only after initialization is complete.
drh80738d92016-02-15 00:34:16 +00001895 **
1896 ** For peak efficiency, put the most frequently used function last.
danielk197793ce7412008-09-01 19:14:02 +00001897 */
drh80738d92016-02-15 00:34:16 +00001898 static FuncDef aBuiltinFunc[] = {
1899#ifdef SQLITE_SOUNDEX
1900 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1901#endif
1902#ifndef SQLITE_OMIT_LOAD_EXTENSION
1903 VFUNCTION(load_extension, 1, 0, 0, loadExt ),
1904 VFUNCTION(load_extension, 2, 0, 0, loadExt ),
1905#endif
1906#if SQLITE_USER_AUTHENTICATION
1907 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
1908#endif
1909#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1910 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1911 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
1912#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1913 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1914 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1915 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh54240752017-01-03 14:39:30 +00001916#ifdef SQLITE_DEBUG
drha1a523a2016-12-26 00:18:36 +00001917 FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY),
drh54240752017-01-03 14:39:30 +00001918#endif
drh092457b2017-12-29 15:04:49 +00001919#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
drh35100fb2018-01-04 19:20:37 +00001920 FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET|
drh2fc865c2017-12-16 20:20:37 +00001921 SQLITE_FUNC_TYPEOF),
drh092457b2017-12-29 15:04:49 +00001922#endif
danielk197793ce7412008-09-01 19:14:02 +00001923 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1924 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1925 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1926 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1927 FUNCTION(trim, 1, 3, 0, trimFunc ),
1928 FUNCTION(trim, 2, 3, 0, trimFunc ),
1929 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1930 FUNCTION(min, 0, 0, 1, 0 ),
dan6fb2b542018-06-19 17:13:11 +00001931 WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
drh9588ad92014-09-15 14:46:02 +00001932 SQLITE_FUNC_MINMAX ),
danielk197793ce7412008-09-01 19:14:02 +00001933 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1934 FUNCTION(max, 0, 1, 1, 0 ),
dan6fb2b542018-06-19 17:13:11 +00001935 WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
drh9588ad92014-09-15 14:46:02 +00001936 SQLITE_FUNC_MINMAX ),
drha748fdc2012-03-28 01:34:47 +00001937 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1938 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001939 FUNCTION(instr, 2, 0, 0, instrFunc ),
drha5c14162013-12-17 15:03:06 +00001940 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001941 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1942 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001943 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001944#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001945 FUNCTION(round, 1, 0, 0, roundFunc ),
1946 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001947#endif
danielk197793ce7412008-09-01 19:14:02 +00001948 FUNCTION(upper, 1, 0, 0, upperFunc ),
1949 FUNCTION(lower, 1, 0, 0, lowerFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001950 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001951 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
drhb1fba282013-11-21 14:33:48 +00001952 VFUNCTION(random, 0, 0, 0, randomFunc ),
1953 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001954 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
drh03bf26d2015-08-31 21:16:36 +00001955 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
1956 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001957 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001958 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001959 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1960 VFUNCTION(changes, 0, 0, 0, changes ),
1961 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001962 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1963 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
drh80738d92016-02-15 00:34:16 +00001964 FUNCTION(substr, 2, 0, 0, substrFunc ),
1965 FUNCTION(substr, 3, 0, 0, substrFunc ),
dan6fb2b542018-06-19 17:13:11 +00001966 WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0),
1967 WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0),
1968 WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0),
dan7262ca92018-07-02 12:07:32 +00001969 WAGGREGATE(count, 0,0,0, countStep,
1970 countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT ),
1971 WAGGREGATE(count, 1,0,0, countStep,
1972 countFinalize, countFinalize, countInverse, 0 ),
dan03854d22018-06-08 11:45:28 +00001973 WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep,
dan6fb2b542018-06-19 17:13:11 +00001974 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
dan03854d22018-06-08 11:45:28 +00001975 WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
dan6fb2b542018-06-19 17:13:11 +00001976 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
danielk197793ce7412008-09-01 19:14:02 +00001977
1978 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00001979#ifdef SQLITE_CASE_SENSITIVE_LIKE
danielk197793ce7412008-09-01 19:14:02 +00001980 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1981 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00001982#else
danielk197793ce7412008-09-01 19:14:02 +00001983 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1984 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
drhcc153132016-08-04 12:35:17 +00001985#endif
1986#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1987 FUNCTION(unknown, -1, 0, 0, unknownFunc ),
1988#endif
drh80738d92016-02-15 00:34:16 +00001989 FUNCTION(coalesce, 1, 0, 0, 0 ),
1990 FUNCTION(coalesce, 0, 0, 0, 0 ),
1991 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001992 };
drh545f5872010-04-24 14:02:59 +00001993#ifndef SQLITE_OMIT_ALTERTABLE
1994 sqlite3AlterFunctions();
1995#endif
dandfa552f2018-06-02 21:04:28 +00001996 sqlite3WindowFunctions();
dan0106e372013-08-12 16:34:32 +00001997#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1998 sqlite3AnalyzeFunctions();
1999#endif
drh80738d92016-02-15 00:34:16 +00002000 sqlite3RegisterDateTimeFunctions();
2001 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
2002
2003#if 0 /* Enable to print out how the built-in functions are hashed */
2004 {
2005 int i;
2006 FuncDef *p;
2007 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
2008 printf("FUNC-HASH %02d:", i);
2009 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
2010 int n = sqlite3Strlen30(p->zName);
2011 int h = p->zName[0] + n;
2012 printf(" %s(%d)", p->zName, h);
2013 }
2014 printf("\n");
2015 }
2016 }
2017#endif
drh70a8ca32008-08-21 18:49:27 +00002018}