blob: 4e80535e813ffa330fe9cbb9d57938b116fd50c8 [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;
254 sqlite3XPrintf(&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 */
1202
1203 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001204 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001205 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001206 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001207 nStr = sqlite3_value_bytes(argv[0]);
1208 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001209 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001210 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001211 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1212 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001213 return;
1214 }
1215 if( zPattern[0]==0 ){
1216 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1217 sqlite3_result_value(context, argv[0]);
1218 return;
1219 }
drh1f0feef2007-05-15 13:27:07 +00001220 nPattern = sqlite3_value_bytes(argv[1]);
1221 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001222 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001223 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001224 nRep = sqlite3_value_bytes(argv[2]);
1225 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001226 nOut = nStr + 1;
1227 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001228 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001229 if( zOut==0 ){
1230 return;
drh26b6d902007-03-17 13:27:54 +00001231 }
drh26b6d902007-03-17 13:27:54 +00001232 loopLimit = nStr - nPattern;
1233 for(i=j=0; i<=loopLimit; i++){
1234 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1235 zOut[j++] = zStr[i];
1236 }else{
drh4a50aac2007-08-23 02:47:53 +00001237 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +00001238 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +00001239 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +00001240 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1241 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
1242 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +00001243 sqlite3_result_error_toobig(context);
drhb9755982010-07-24 16:34:37 +00001244 sqlite3_free(zOut);
danielk197717374e82007-05-08 14:39:04 +00001245 return;
1246 }
drh4a50aac2007-08-23 02:47:53 +00001247 zOld = zOut;
drhf3cdcdc2015-04-29 16:50:28 +00001248 zOut = sqlite3_realloc64(zOut, (int)nOut);
drh2e6400b2007-05-08 15:46:18 +00001249 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +00001250 sqlite3_result_error_nomem(context);
drhb9755982010-07-24 16:34:37 +00001251 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +00001252 return;
1253 }
drh26b6d902007-03-17 13:27:54 +00001254 memcpy(&zOut[j], zRep, nRep);
1255 j += nRep;
1256 i += nPattern-1;
1257 }
1258 }
drh2e6400b2007-05-08 15:46:18 +00001259 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +00001260 memcpy(&zOut[j], &zStr[i], nStr-i);
1261 j += nStr - i;
1262 assert( j<=nOut );
1263 zOut[j] = 0;
1264 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1265}
1266
drh309b3382007-03-17 17:52:42 +00001267/*
1268** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1269** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1270*/
1271static void trimFunc(
1272 sqlite3_context *context,
1273 int argc,
1274 sqlite3_value **argv
1275){
1276 const unsigned char *zIn; /* Input string */
1277 const unsigned char *zCharSet; /* Set of characters to trim */
1278 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001279 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001280 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001281 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1282 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001283 int nChar; /* Number of characters in zCharSet */
1284
drh309b3382007-03-17 17:52:42 +00001285 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1286 return;
1287 }
1288 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001289 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001290 nIn = sqlite3_value_bytes(argv[0]);
1291 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001292 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001293 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001294 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001295 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001296 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001297 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001298 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001299 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001300 return;
drhd1e3a612007-04-27 21:59:52 +00001301 }else{
1302 const unsigned char *z;
1303 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001304 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001305 }
1306 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001307 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001308 if( azChar==0 ){
1309 return;
1310 }
1311 aLen = (unsigned char*)&azChar[nChar];
1312 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001313 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001314 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001315 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001316 }
1317 }
drh309b3382007-03-17 17:52:42 +00001318 }
drhd1e3a612007-04-27 21:59:52 +00001319 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001320 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001321 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001322 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001323 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001324 for(i=0; i<nChar; i++){
1325 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001326 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001327 }
1328 if( i>=nChar ) break;
1329 zIn += len;
1330 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001331 }
1332 }
1333 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001334 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001335 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001336 for(i=0; i<nChar; i++){
1337 len = aLen[i];
1338 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1339 }
1340 if( i>=nChar ) break;
1341 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001342 }
1343 }
drhd1e3a612007-04-27 21:59:52 +00001344 if( zCharSet ){
1345 sqlite3_free(azChar);
1346 }
drh309b3382007-03-17 17:52:42 +00001347 }
1348 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1349}
drh26b6d902007-03-17 13:27:54 +00001350
danielk1977a4de4532008-09-02 15:44:08 +00001351
drhcc153132016-08-04 12:35:17 +00001352#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1353/*
1354** The "unknown" function is automatically substituted in place of
1355** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
1356** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
1357** When the "sqlite3" command-line shell is built using this functionality,
1358** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
1359** involving application-defined functions to be examined in a generic
1360** sqlite3 shell.
1361*/
1362static void unknownFunc(
1363 sqlite3_context *context,
1364 int argc,
1365 sqlite3_value **argv
1366){
1367 /* no-op */
1368}
1369#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
1370
1371
drh2ba3ccc2009-12-08 02:06:08 +00001372/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1373** is only available if the SQLITE_SOUNDEX compile-time option is used
1374** when SQLite is built.
1375*/
drhd24cc422003-03-27 12:51:24 +00001376#ifdef SQLITE_SOUNDEX
1377/*
1378** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001379**
1380** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1381** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001382*/
drh137c7282007-01-29 17:58:28 +00001383static void soundexFunc(
1384 sqlite3_context *context,
1385 int argc,
1386 sqlite3_value **argv
1387){
drhd24cc422003-03-27 12:51:24 +00001388 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001389 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001390 int i, j;
1391 static const unsigned char iCode[] = {
1392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1393 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1394 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1395 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1396 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1397 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1398 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1399 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1400 };
1401 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001402 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001403 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001404 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001405 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001406 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001407 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001408 for(j=1; j<4 && zIn[i]; i++){
1409 int code = iCode[zIn[i]&0x7f];
1410 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001411 if( code!=prevcode ){
1412 prevcode = code;
1413 zResult[j++] = code + '0';
1414 }
1415 }else{
1416 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001417 }
1418 }
1419 while( j<4 ){
1420 zResult[j++] = '0';
1421 }
1422 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001423 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001424 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001425 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1426 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001427 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001428 }
1429}
drh2ba3ccc2009-12-08 02:06:08 +00001430#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001431
drhfdb83b22006-06-17 14:12:47 +00001432#ifndef SQLITE_OMIT_LOAD_EXTENSION
1433/*
1434** A function that loads a shared-library extension then returns NULL.
1435*/
1436static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001437 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001438 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001439 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001440 char *zErrMsg = 0;
1441
drh191dd062016-04-21 01:30:09 +00001442 /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
drh1a55ded2016-04-20 00:30:05 +00001443 ** flag is set. See the sqlite3_enable_load_extension() API.
1444 */
drhf602a162016-04-21 01:58:21 +00001445 if( (db->flags & SQLITE_LoadExtFunc)==0 ){
1446 sqlite3_result_error(context, "not authorized", -1);
1447 return;
1448 }
drh1a55ded2016-04-20 00:30:05 +00001449
drhfdb83b22006-06-17 14:12:47 +00001450 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001451 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001452 }else{
1453 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001454 }
drh7a521cf2007-04-25 18:23:52 +00001455 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001456 sqlite3_result_error(context, zErrMsg, -1);
1457 sqlite3_free(zErrMsg);
1458 }
1459}
1460#endif
1461
danielk197701427a62005-01-11 13:02:33 +00001462
drh0ac65892002-04-20 14:24:41 +00001463/*
drhd3a149e2002-02-24 17:12:53 +00001464** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001465** sum() or avg() aggregate computation.
1466*/
1467typedef struct SumCtx SumCtx;
1468struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001469 double rSum; /* Floating point sum */
1470 i64 iSum; /* Integer sum */
1471 i64 cnt; /* Number of elements summed */
1472 u8 overflow; /* True if integer overflow seen */
1473 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001474};
1475
1476/*
drha97fdd32006-01-12 22:17:50 +00001477** Routines used to compute the sum, average, and total.
1478**
1479** The SUM() function follows the (broken) SQL standard which means
1480** that it returns NULL if it sums over no inputs. TOTAL returns
1481** 0.0 in that case. In addition, TOTAL always returns a float where
1482** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001483** value. TOTAL never fails, but SUM might through an exception if
1484** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001485*/
danielk19770ae8b832004-05-25 12:05:56 +00001486static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001487 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001488 int type;
drh3f219f42005-09-08 19:45:57 +00001489 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001490 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001491 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001492 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001493 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001494 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001495 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001496 i64 v = sqlite3_value_int64(argv[0]);
1497 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001498 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
1499 p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001500 }
1501 }else{
drh8c08e862006-02-11 17:34:00 +00001502 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001503 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001504 }
drh739105c2002-05-29 23:22:23 +00001505 }
drhdd5baa92002-02-27 19:50:59 +00001506}
danielk19770ae8b832004-05-25 12:05:56 +00001507static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001508 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001509 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001510 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001511 if( p->overflow ){
1512 sqlite3_result_error(context,"integer overflow",-1);
1513 }else if( p->approx ){
1514 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001515 }else{
drh8c08e862006-02-11 17:34:00 +00001516 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001517 }
drh3d1d95e2005-09-08 10:37:01 +00001518 }
drhdd5baa92002-02-27 19:50:59 +00001519}
danielk19770ae8b832004-05-25 12:05:56 +00001520static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001521 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001522 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001523 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001524 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001525 }
1526}
drha97fdd32006-01-12 22:17:50 +00001527static void totalFinalize(sqlite3_context *context){
1528 SumCtx *p;
1529 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001530 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1531 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001532}
drhdd5baa92002-02-27 19:50:59 +00001533
1534/*
drh0bce8352002-02-28 00:41:10 +00001535** The following structure keeps track of state information for the
1536** count() aggregate function.
1537*/
1538typedef struct CountCtx CountCtx;
1539struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001540 i64 n;
drh0bce8352002-02-28 00:41:10 +00001541};
drhdd5baa92002-02-27 19:50:59 +00001542
drh0bce8352002-02-28 00:41:10 +00001543/*
1544** Routines to implement the count() aggregate function.
1545*/
danielk19770ae8b832004-05-25 12:05:56 +00001546static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001547 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001548 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001549 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001550 p->n++;
1551 }
drh2e79c3d2009-04-08 23:04:14 +00001552
drhd3264c72009-04-15 13:39:47 +00001553#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001554 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1555 ** sure it still operates correctly, verify that its count agrees with our
1556 ** internal count when using count(*) and when the total count can be
1557 ** expressed as a 32-bit integer. */
1558 assert( argc==1 || p==0 || p->n>0x7fffffff
1559 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001560#endif
drh0bce8352002-02-28 00:41:10 +00001561}
danielk19770ae8b832004-05-25 12:05:56 +00001562static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001563 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001564 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001565 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001566}
1567
1568/*
drh0bce8352002-02-28 00:41:10 +00001569** Routines to implement min() and max() aggregate functions.
1570*/
danielk197762c14b32008-11-19 09:05:26 +00001571static void minmaxStep(
1572 sqlite3_context *context,
1573 int NotUsed,
1574 sqlite3_value **argv
1575){
danielk197788208052004-05-25 01:13:20 +00001576 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001577 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001578 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001579
drh9eb516c2004-07-18 20:52:32 +00001580 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001581 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001582
drh94a6d992012-02-02 18:42:09 +00001583 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1584 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1585 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001586 int max;
1587 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001588 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001589 /* This step function is used for both the min() and max() aggregates,
1590 ** the only difference between the two being that the sense of the
1591 ** comparison is inverted. For the max() aggregate, the
1592 ** sqlite3_user_data() function returns (void *)-1. For min() it
1593 ** returns (void *)db, where db is the sqlite3* database pointer.
1594 ** Therefore the next statement sets variable 'max' to 1 for the max()
1595 ** aggregate, or 0 for min().
1596 */
drh309b3382007-03-17 17:52:42 +00001597 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001598 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001599 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001600 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001601 }else{
1602 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001603 }
drh268380c2004-02-25 13:47:31 +00001604 }else{
drh035e5632014-09-16 14:16:31 +00001605 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001606 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001607 }
1608}
danielk19770ae8b832004-05-25 12:05:56 +00001609static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001610 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001611 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1612 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001613 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001614 sqlite3_result_value(context, pRes);
1615 }
1616 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001617 }
1618}
drhdd5baa92002-02-27 19:50:59 +00001619
drhb0689692007-11-01 17:38:30 +00001620/*
1621** group_concat(EXPR, ?SEPARATOR?)
1622*/
1623static void groupConcatStep(
1624 sqlite3_context *context,
1625 int argc,
1626 sqlite3_value **argv
1627){
1628 const char *zVal;
drhade86482007-11-28 22:36:40 +00001629 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001630 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001631 int nVal, nSep;
1632 assert( argc==1 || argc==2 );
1633 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001634 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1635
1636 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001637 sqlite3 *db = sqlite3_context_db_handle(context);
drhc0490572015-05-02 11:45:53 +00001638 int firstTerm = pAccum->mxAlloc==0;
drhbb4957f2008-03-20 14:03:29 +00001639 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001640 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001641 if( argc==2 ){
1642 zSep = (char*)sqlite3_value_text(argv[1]);
1643 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001644 }else{
1645 zSep = ",";
drhade86482007-11-28 22:36:40 +00001646 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001647 }
dan3043b532016-12-30 17:40:14 +00001648 if( zSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001649 }
drh07d31172009-02-02 21:57:05 +00001650 zVal = (char*)sqlite3_value_text(argv[0]);
1651 nVal = sqlite3_value_bytes(argv[0]);
drh8009c9b2014-05-07 20:24:00 +00001652 if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001653 }
1654}
1655static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001656 StrAccum *pAccum;
1657 pAccum = sqlite3_aggregate_context(context, 0);
1658 if( pAccum ){
drhb49bc862013-08-21 21:12:10 +00001659 if( pAccum->accError==STRACCUM_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001660 sqlite3_result_error_toobig(context);
drhb49bc862013-08-21 21:12:10 +00001661 }else if( pAccum->accError==STRACCUM_NOMEM ){
drhade86482007-11-28 22:36:40 +00001662 sqlite3_result_error_nomem(context);
1663 }else{
1664 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1665 sqlite3_free);
1666 }
drhb0689692007-11-01 17:38:30 +00001667 }
1668}
drh4e5ffc52004-08-31 00:52:37 +00001669
drhd3a149e2002-02-24 17:12:53 +00001670/*
drha4741842010-04-25 20:58:37 +00001671** This routine does per-connection function registration. Most
1672** of the built-in functions above are part of the global function set.
1673** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001674*/
drh80738d92016-02-15 00:34:16 +00001675void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001676 int rc = sqlite3_overload_function(db, "MATCH", 2);
1677 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1678 if( rc==SQLITE_NOMEM ){
drh4a642b62016-02-05 01:55:27 +00001679 sqlite3OomFault(db);
danielk1977832a58a2007-06-22 15:21:15 +00001680 }
drh55ef4d92005-08-14 01:20:37 +00001681}
1682
1683/*
1684** Set the LIKEOPT flag on the 2-argument function with the given name.
1685*/
drh1bd10f82008-12-10 21:19:56 +00001686static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001687 FuncDef *pDef;
drh80738d92016-02-15 00:34:16 +00001688 pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001689 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001690 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001691 }
1692}
1693
1694/*
1695** Register the built-in LIKE and GLOB functions. The caseSensitive
1696** parameter determines whether or not the LIKE operator is case
1697** sensitive. GLOB is always case sensitive.
1698*/
1699void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1700 struct compareInfo *pInfo;
1701 if( caseSensitive ){
1702 pInfo = (struct compareInfo*)&likeInfoAlt;
1703 }else{
1704 pInfo = (struct compareInfo*)&likeInfoNorm;
1705 }
drh901e9942010-12-15 18:54:37 +00001706 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1707 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
1708 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dand2199f02010-08-27 17:48:52 +00001709 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001710 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1711 setLikeOptFlag(db, "like",
1712 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001713}
1714
1715/*
1716** pExpr points to an expression which implements a function. If
1717** it is appropriate to apply the LIKE optimization to that function
drh1d42ea72017-07-27 20:24:29 +00001718** then set aWc[0] through aWc[2] to the wildcard characters and the
1719** escape character and then return TRUE. If the function is not a
1720** LIKE-style function then return FALSE.
1721**
1722** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
1723** operator if c is a string literal that is exactly one byte in length.
1724** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is
1725** no ESCAPE clause.
drh16897072015-03-07 00:57:37 +00001726**
1727** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1728** the function (default for LIKE). If the function makes the distinction
1729** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1730** false.
drh55ef4d92005-08-14 01:20:37 +00001731*/
drhd64fe2f2005-08-28 17:00:23 +00001732int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001733 FuncDef *pDef;
drh1d42ea72017-07-27 20:24:29 +00001734 int nExpr;
1735 if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
drh55ef4d92005-08-14 01:20:37 +00001736 return 0;
1737 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001738 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh1d42ea72017-07-27 20:24:29 +00001739 nExpr = pExpr->x.pList->nExpr;
1740 pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001741 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001742 return 0;
1743 }
drh1d42ea72017-07-27 20:24:29 +00001744 if( nExpr<3 ){
1745 aWc[3] = 0;
1746 }else{
1747 Expr *pEscape = pExpr->x.pList->a[2].pExpr;
1748 char *zEscape;
1749 if( pEscape->op!=TK_STRING ) return 0;
1750 zEscape = pEscape->u.zToken;
1751 if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
1752 aWc[3] = zEscape[0];
1753 }
drh55ef4d92005-08-14 01:20:37 +00001754
1755 /* The memcpy() statement assumes that the wildcard characters are
1756 ** the first three statements in the compareInfo structure. The
1757 ** asserts() that follow verify that assumption
1758 */
1759 memcpy(aWc, pDef->pUserData, 3);
1760 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1761 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1762 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001763 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001764 return 1;
drhdc04c582002-02-24 01:55:15 +00001765}
danielk19778c0a7912008-08-20 14:49:23 +00001766
drh70a8ca32008-08-21 18:49:27 +00001767/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001768** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001769** to the global function hash table. This occurs at start-time (as
1770** a consequence of calling sqlite3_initialize()).
1771**
1772** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001773*/
drh80738d92016-02-15 00:34:16 +00001774void sqlite3RegisterBuiltinFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001775 /*
1776 ** The following array holds FuncDef structures for all of the functions
1777 ** defined in this file.
1778 **
1779 ** The array cannot be constant since changes are made to the
1780 ** FuncDef.pHash elements at start-time. The elements of this array
1781 ** are read-only after initialization is complete.
drh80738d92016-02-15 00:34:16 +00001782 **
1783 ** For peak efficiency, put the most frequently used function last.
danielk197793ce7412008-09-01 19:14:02 +00001784 */
drh80738d92016-02-15 00:34:16 +00001785 static FuncDef aBuiltinFunc[] = {
1786#ifdef SQLITE_SOUNDEX
1787 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1788#endif
1789#ifndef SQLITE_OMIT_LOAD_EXTENSION
1790 VFUNCTION(load_extension, 1, 0, 0, loadExt ),
1791 VFUNCTION(load_extension, 2, 0, 0, loadExt ),
1792#endif
1793#if SQLITE_USER_AUTHENTICATION
1794 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
1795#endif
1796#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1797 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1798 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
1799#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1800 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1801 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1802 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh54240752017-01-03 14:39:30 +00001803#ifdef SQLITE_DEBUG
drha1a523a2016-12-26 00:18:36 +00001804 FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY),
drh54240752017-01-03 14:39:30 +00001805#endif
drh092457b2017-12-29 15:04:49 +00001806#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
drh35100fb2018-01-04 19:20:37 +00001807 FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET|
drh2fc865c2017-12-16 20:20:37 +00001808 SQLITE_FUNC_TYPEOF),
drh092457b2017-12-29 15:04:49 +00001809#endif
danielk197793ce7412008-09-01 19:14:02 +00001810 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1811 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1812 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1813 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1814 FUNCTION(trim, 1, 3, 0, trimFunc ),
1815 FUNCTION(trim, 2, 3, 0, trimFunc ),
1816 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1817 FUNCTION(min, 0, 0, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001818 AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize,
1819 SQLITE_FUNC_MINMAX ),
danielk197793ce7412008-09-01 19:14:02 +00001820 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1821 FUNCTION(max, 0, 1, 1, 0 ),
drh9588ad92014-09-15 14:46:02 +00001822 AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize,
1823 SQLITE_FUNC_MINMAX ),
drha748fdc2012-03-28 01:34:47 +00001824 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1825 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001826 FUNCTION(instr, 2, 0, 0, instrFunc ),
drha5c14162013-12-17 15:03:06 +00001827 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001828 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1829 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001830 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001831#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001832 FUNCTION(round, 1, 0, 0, roundFunc ),
1833 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001834#endif
danielk197793ce7412008-09-01 19:14:02 +00001835 FUNCTION(upper, 1, 0, 0, upperFunc ),
1836 FUNCTION(lower, 1, 0, 0, lowerFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001837 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001838 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
drhb1fba282013-11-21 14:33:48 +00001839 VFUNCTION(random, 0, 0, 0, randomFunc ),
1840 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001841 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
drh03bf26d2015-08-31 21:16:36 +00001842 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
1843 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001844 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001845 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001846 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1847 VFUNCTION(changes, 0, 0, 0, changes ),
1848 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001849 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1850 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
drh80738d92016-02-15 00:34:16 +00001851 FUNCTION(substr, 2, 0, 0, substrFunc ),
1852 FUNCTION(substr, 3, 0, 0, substrFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001853 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1854 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1855 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
drh9588ad92014-09-15 14:46:02 +00001856 AGGREGATE2(count, 0, 0, 0, countStep, countFinalize,
1857 SQLITE_FUNC_COUNT ),
danielk197793ce7412008-09-01 19:14:02 +00001858 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001859 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1860 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001861
1862 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00001863#ifdef SQLITE_CASE_SENSITIVE_LIKE
danielk197793ce7412008-09-01 19:14:02 +00001864 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1865 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00001866#else
danielk197793ce7412008-09-01 19:14:02 +00001867 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1868 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
drhcc153132016-08-04 12:35:17 +00001869#endif
1870#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1871 FUNCTION(unknown, -1, 0, 0, unknownFunc ),
1872#endif
drh80738d92016-02-15 00:34:16 +00001873 FUNCTION(coalesce, 1, 0, 0, 0 ),
1874 FUNCTION(coalesce, 0, 0, 0, 0 ),
1875 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00001876 };
drh545f5872010-04-24 14:02:59 +00001877#ifndef SQLITE_OMIT_ALTERTABLE
1878 sqlite3AlterFunctions();
1879#endif
dan0106e372013-08-12 16:34:32 +00001880#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
1881 sqlite3AnalyzeFunctions();
1882#endif
drh80738d92016-02-15 00:34:16 +00001883 sqlite3RegisterDateTimeFunctions();
1884 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
1885
1886#if 0 /* Enable to print out how the built-in functions are hashed */
1887 {
1888 int i;
1889 FuncDef *p;
1890 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
1891 printf("FUNC-HASH %02d:", i);
1892 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
1893 int n = sqlite3Strlen30(p->zName);
1894 int h = p->zName[0] + n;
1895 printf(" %s(%d)", p->zName, h);
1896 }
1897 printf("\n");
1898 }
1899 }
1900#endif
drh70a8ca32008-08-21 18:49:27 +00001901}