blob: 2f46fb423de137d8a1ed3d545afe7d2f2f61c20c [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>
drhef9f7192020-01-17 19:14:08 +000019#ifndef SQLITE_OMIT_FLOATING_POINT
drh05d7bfd2019-05-10 12:06:47 +000020#include <math.h>
drhef9f7192020-01-17 19:14:08 +000021#endif
danielk197788208052004-05-25 01:13:20 +000022#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000023
drh55ef4d92005-08-14 01:20:37 +000024/*
25** Return the collating function associated with a function.
26*/
danielk1977dc1bdc42004-06-11 10:51:27 +000027static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
drha9e03b12015-03-12 06:46:52 +000028 VdbeOp *pOp;
29 assert( context->pVdbe!=0 );
30 pOp = &context->pVdbe->aOp[context->iOp-1];
drha15cc472014-09-25 13:17:30 +000031 assert( pOp->opcode==OP_CollSeq );
32 assert( pOp->p4type==P4_COLLSEQ );
33 return pOp->p4.pColl;
danielk1977dc1bdc42004-06-11 10:51:27 +000034}
35
drh0bce8352002-02-28 00:41:10 +000036/*
drh7a957892012-02-02 17:35:43 +000037** Indicate that the accumulator load should be skipped on this
38** iteration of the aggregate loop.
39*/
40static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
drh21d59782018-01-23 19:24:54 +000041 assert( context->isError<=0 );
42 context->isError = -1;
drh7a957892012-02-02 17:35:43 +000043 context->skipFlag = 1;
44}
45
46/*
drh0bce8352002-02-28 00:41:10 +000047** Implementation of the non-aggregate min() and max() functions
48*/
drhf9b596e2004-05-26 16:54:42 +000049static void minmaxFunc(
50 sqlite3_context *context,
51 int argc,
52 sqlite3_value **argv
53){
drh0bce8352002-02-28 00:41:10 +000054 int i;
drh268380c2004-02-25 13:47:31 +000055 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000056 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000057 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000058
drh65595cd2009-02-02 16:32:55 +000059 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000060 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000061 pColl = sqlite3GetFuncCollSeq(context);
62 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000063 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000064 iBest = 0;
drh9c054832004-05-31 18:51:57 +000065 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000066 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000067 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000068 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000069 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000070 iBest = i;
drh0bce8352002-02-28 00:41:10 +000071 }
72 }
drhf4479502004-05-27 03:12:53 +000073 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000074}
drh0bce8352002-02-28 00:41:10 +000075
drh268380c2004-02-25 13:47:31 +000076/*
77** Return the type of the argument.
78*/
drhf9b596e2004-05-26 16:54:42 +000079static void typeofFunc(
80 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000081 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000082 sqlite3_value **argv
83){
drh9d8e4012017-07-06 13:51:50 +000084 static const char *azType[] = { "integer", "real", "text", "blob", "null" };
85 int i = sqlite3_value_type(argv[0]) - 1;
danielk197762c14b32008-11-19 09:05:26 +000086 UNUSED_PARAMETER(NotUsed);
drh9d8e4012017-07-06 13:51:50 +000087 assert( i>=0 && i<ArraySize(azType) );
88 assert( SQLITE_INTEGER==1 );
89 assert( SQLITE_FLOAT==2 );
90 assert( SQLITE_TEXT==3 );
91 assert( SQLITE_BLOB==4 );
92 assert( SQLITE_NULL==5 );
drh3cef3642017-07-14 19:22:08 +000093 /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns
94 ** the datatype code for the initial datatype of the sqlite3_value object
95 ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT,
96 ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */
drh9d8e4012017-07-06 13:51:50 +000097 sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000098}
99
drh9d44f182022-01-09 16:54:02 +0000100/* subtype(X)
101**
102** Return the subtype of X
103*/
104static void subtypeFunc(
105 sqlite3_context *context,
106 int argc,
107 sqlite3_value **argv
108){
drh69b0ce32022-02-04 13:15:01 +0000109 UNUSED_PARAMETER(argc);
drh9d44f182022-01-09 16:54:02 +0000110 sqlite3_result_int(context, sqlite3_value_subtype(argv[0]));
111}
drh5708d2d2005-06-22 10:53:59 +0000112
113/*
drh0bce8352002-02-28 00:41:10 +0000114** Implementation of the length() function
115*/
drhf9b596e2004-05-26 16:54:42 +0000116static void lengthFunc(
117 sqlite3_context *context,
118 int argc,
119 sqlite3_value **argv
120){
drh0bce8352002-02-28 00:41:10 +0000121 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000122 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000123 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000124 case SQLITE_BLOB:
125 case SQLITE_INTEGER:
126 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000127 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000128 break;
129 }
drh9c054832004-05-31 18:51:57 +0000130 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000131 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7ea34692018-01-23 04:22:33 +0000132 const unsigned char *z0;
133 unsigned char c;
drh7a521cf2007-04-25 18:23:52 +0000134 if( z==0 ) return;
drh7ea34692018-01-23 04:22:33 +0000135 z0 = z;
136 while( (c = *z)!=0 ){
137 z++;
138 if( c>=0xc0 ){
139 while( (*z & 0xc0)==0x80 ){ z++; z0++; }
140 }
drh4a919112007-05-15 11:55:09 +0000141 }
drh7ea34692018-01-23 04:22:33 +0000142 sqlite3_result_int(context, (int)(z-z0));
drhf9b596e2004-05-26 16:54:42 +0000143 break;
144 }
145 default: {
146 sqlite3_result_null(context);
147 break;
148 }
149 }
drh0bce8352002-02-28 00:41:10 +0000150}
151
152/*
drh2ba3ccc2009-12-08 02:06:08 +0000153** Implementation of the abs() function.
154**
155** IMP: R-23979-26855 The abs(X) function returns the absolute value of
156** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000157*/
danielk19770ae8b832004-05-25 12:05:56 +0000158static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000159 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000160 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000161 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000162 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000163 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000164 if( iVal<0 ){
drh693e6712014-01-24 22:58:00 +0000165 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000166 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
167 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000168 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000169 sqlite3_result_error(context, "integer overflow", -1);
170 return;
171 }
172 iVal = -iVal;
173 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000174 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000175 break;
176 }
drh9c054832004-05-31 18:51:57 +0000177 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000178 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000179 sqlite3_result_null(context);
180 break;
181 }
182 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000183 /* Because sqlite3_value_double() returns 0.0 if the argument is not
184 ** something that can be converted into a number, we have:
drh643091f2014-11-20 23:21:23 +0000185 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
186 ** that cannot be converted to a numeric value.
drh2ba3ccc2009-12-08 02:06:08 +0000187 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000188 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000189 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000190 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000191 break;
192 }
193 }
drh0bce8352002-02-28 00:41:10 +0000194}
195
196/*
drhd55e0722012-10-25 03:07:29 +0000197** Implementation of the instr() function.
198**
199** instr(haystack,needle) finds the first occurrence of needle
200** in haystack and returns the number of previous characters plus 1,
201** or 0 if needle does not occur within haystack.
202**
203** If both haystack and needle are BLOBs, then the result is one more than
204** the number of bytes in haystack prior to the first occurrence of needle,
205** or 0 if needle never occurs in haystack.
206*/
207static void instrFunc(
208 sqlite3_context *context,
209 int argc,
210 sqlite3_value **argv
211){
212 const unsigned char *zHaystack;
213 const unsigned char *zNeedle;
214 int nHaystack;
215 int nNeedle;
216 int typeHaystack, typeNeedle;
217 int N = 1;
218 int isText;
drhc930b402019-01-08 15:18:24 +0000219 unsigned char firstChar;
drh97b02502019-09-17 03:16:29 +0000220 sqlite3_value *pC1 = 0;
221 sqlite3_value *pC2 = 0;
drhd55e0722012-10-25 03:07:29 +0000222
drh68c804b2012-12-04 11:03:11 +0000223 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000224 typeHaystack = sqlite3_value_type(argv[0]);
225 typeNeedle = sqlite3_value_type(argv[1]);
226 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
227 nHaystack = sqlite3_value_bytes(argv[0]);
228 nNeedle = sqlite3_value_bytes(argv[1]);
dan895decf2016-12-30 14:15:56 +0000229 if( nNeedle>0 ){
230 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
231 zHaystack = sqlite3_value_blob(argv[0]);
232 zNeedle = sqlite3_value_blob(argv[1]);
233 isText = 0;
drh97b02502019-09-17 03:16:29 +0000234 }else if( typeHaystack!=SQLITE_BLOB && typeNeedle!=SQLITE_BLOB ){
dan895decf2016-12-30 14:15:56 +0000235 zHaystack = sqlite3_value_text(argv[0]);
236 zNeedle = sqlite3_value_text(argv[1]);
237 isText = 1;
drh97b02502019-09-17 03:16:29 +0000238 }else{
239 pC1 = sqlite3_value_dup(argv[0]);
240 zHaystack = sqlite3_value_text(pC1);
drh9d702842019-09-18 11:16:46 +0000241 if( zHaystack==0 ) goto endInstrOOM;
242 nHaystack = sqlite3_value_bytes(pC1);
drh97b02502019-09-17 03:16:29 +0000243 pC2 = sqlite3_value_dup(argv[1]);
244 zNeedle = sqlite3_value_text(pC2);
drh9d702842019-09-18 11:16:46 +0000245 if( zNeedle==0 ) goto endInstrOOM;
246 nNeedle = sqlite3_value_bytes(pC2);
drh97b02502019-09-17 03:16:29 +0000247 isText = 1;
dan895decf2016-12-30 14:15:56 +0000248 }
drh9d702842019-09-18 11:16:46 +0000249 if( zNeedle==0 || (nHaystack && zHaystack==0) ) goto endInstrOOM;
drhc930b402019-01-08 15:18:24 +0000250 firstChar = zNeedle[0];
251 while( nNeedle<=nHaystack
252 && (zHaystack[0]!=firstChar || memcmp(zHaystack, zNeedle, nNeedle)!=0)
253 ){
dan895decf2016-12-30 14:15:56 +0000254 N++;
255 do{
256 nHaystack--;
257 zHaystack++;
258 }while( isText && (zHaystack[0]&0xc0)==0x80 );
259 }
260 if( nNeedle>nHaystack ) N = 0;
drhd55e0722012-10-25 03:07:29 +0000261 }
drhd55e0722012-10-25 03:07:29 +0000262 sqlite3_result_int(context, N);
drh97b02502019-09-17 03:16:29 +0000263endInstr:
264 sqlite3_value_free(pC1);
265 sqlite3_value_free(pC2);
drh9d702842019-09-18 11:16:46 +0000266 return;
267endInstrOOM:
268 sqlite3_result_error_nomem(context);
269 goto endInstr;
drhd55e0722012-10-25 03:07:29 +0000270}
271
272/*
drh6bcd5852022-01-08 21:00:38 +0000273** Implementation of the printf() (a.k.a. format()) SQL function.
drha5c14162013-12-17 15:03:06 +0000274*/
275static void printfFunc(
276 sqlite3_context *context,
277 int argc,
278 sqlite3_value **argv
279){
280 PrintfArguments x;
281 StrAccum str;
282 const char *zFormat;
283 int n;
drhc0490572015-05-02 11:45:53 +0000284 sqlite3 *db = sqlite3_context_db_handle(context);
drha5c14162013-12-17 15:03:06 +0000285
286 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
287 x.nArg = argc-1;
288 x.nUsed = 0;
289 x.apArg = argv+1;
drhc0490572015-05-02 11:45:53 +0000290 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
drh5f4a6862016-01-30 12:50:25 +0000291 str.printfFlags = SQLITE_PRINTF_SQLFUNC;
drh0cdbe1a2018-05-09 13:46:26 +0000292 sqlite3_str_appendf(&str, zFormat, &x);
drha5c14162013-12-17 15:03:06 +0000293 n = str.nChar;
294 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
295 SQLITE_DYNAMIC);
296 }
297}
298
299/*
drhf764e6f2007-05-15 01:13:47 +0000300** Implementation of the substr() function.
301**
302** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
303** p1 is 1-indexed. So substr(x,1,1) returns the first character
304** of x. If x is text, then we actually count UTF-8 characters.
305** If x is a blob, then we count bytes.
306**
307** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000308**
drhf7b54962013-05-28 12:11:54 +0000309** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000310*/
drhf9b596e2004-05-26 16:54:42 +0000311static void substrFunc(
312 sqlite3_context *context,
313 int argc,
314 sqlite3_value **argv
315){
drh2646da72005-12-09 20:02:05 +0000316 const unsigned char *z;
317 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000318 int len;
drhf764e6f2007-05-15 01:13:47 +0000319 int p0type;
drh023ae032007-05-08 12:12:16 +0000320 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000321 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000322
drh64f31512007-10-12 19:11:55 +0000323 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000324 if( sqlite3_value_type(argv[1])==SQLITE_NULL
325 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
326 ){
327 return;
328 }
drhf764e6f2007-05-15 01:13:47 +0000329 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000330 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000331 if( p0type==SQLITE_BLOB ){
332 len = sqlite3_value_bytes(argv[0]);
333 z = sqlite3_value_blob(argv[0]);
334 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000335 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000336 }else{
337 z = sqlite3_value_text(argv[0]);
338 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000339 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000340 if( p1<0 ){
341 for(z2=z; *z2; len++){
342 SQLITE_SKIP_UTF8(z2);
343 }
drh4a919112007-05-15 11:55:09 +0000344 }
drhf764e6f2007-05-15 01:13:47 +0000345 }
drh883ad042015-02-19 00:29:11 +0000346#ifdef SQLITE_SUBSTR_COMPATIBILITY
347 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
348 ** as substr(X,1,N) - it returns the first N characters of X. This
349 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
350 ** from 2009-02-02 for compatibility of applications that exploited the
351 ** old buggy behavior. */
352 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
353#endif
drh64f31512007-10-12 19:11:55 +0000354 if( argc==3 ){
355 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000356 if( p2<0 ){
357 p2 = -p2;
358 negP2 = 1;
359 }
drh64f31512007-10-12 19:11:55 +0000360 }else{
drhbb4957f2008-03-20 14:03:29 +0000361 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000362 }
drh0bce8352002-02-28 00:41:10 +0000363 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000364 p1 += len;
drh653bc752002-02-28 03:31:10 +0000365 if( p1<0 ){
366 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000367 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000368 p1 = 0;
369 }
drh0bce8352002-02-28 00:41:10 +0000370 }else if( p1>0 ){
371 p1--;
drh65595cd2009-02-02 16:32:55 +0000372 }else if( p2>0 ){
373 p2--;
drh0bce8352002-02-28 00:41:10 +0000374 }
drh65595cd2009-02-02 16:32:55 +0000375 if( negP2 ){
376 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000377 if( p1<0 ){
378 p2 += p1;
379 p1 = 0;
380 }
381 }
drh65595cd2009-02-02 16:32:55 +0000382 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000383 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000384 while( *z && p1 ){
385 SQLITE_SKIP_UTF8(z);
386 p1--;
drhf764e6f2007-05-15 01:13:47 +0000387 }
drh4a919112007-05-15 11:55:09 +0000388 for(z2=z; *z2 && p2; p2--){
389 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000390 }
drhbbf483f2014-09-09 20:30:24 +0000391 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
392 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000393 }else{
drh4adc4cb2009-11-11 20:53:31 +0000394 if( p1+p2>len ){
395 p2 = len-p1;
396 if( p2<0 ) p2 = 0;
397 }
drhbbf483f2014-09-09 20:30:24 +0000398 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000399 }
drh0bce8352002-02-28 00:41:10 +0000400}
401
402/*
403** Implementation of the round() function
404*/
shanefbd60f82009-02-04 03:59:25 +0000405#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000406static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000407 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000408 double r;
drh50d654d2009-06-03 01:24:54 +0000409 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000410 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000411 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000412 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000413 n = sqlite3_value_int(argv[1]);
414 if( n>30 ) n = 30;
415 if( n<0 ) n = 0;
416 }
drhd589a922006-03-02 03:02:48 +0000417 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000418 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000419 /* If Y==0 and X will fit in a 64-bit int,
420 ** handle the rounding directly,
421 ** otherwise use printf.
422 */
drh84422db2019-05-30 13:47:10 +0000423 if( r<-4503599627370496.0 || r>+4503599627370496.0 ){
424 /* The value has no fractional part so there is nothing to round */
425 }else if( n==0 ){
426 r = (double)((sqlite_int64)(r+(r<0?-0.5:+0.5)));
drh50d654d2009-06-03 01:24:54 +0000427 }else{
shaneh147e1762010-02-17 04:19:27 +0000428 zBuf = sqlite3_mprintf("%.*f",n,r);
429 if( zBuf==0 ){
430 sqlite3_result_error_nomem(context);
431 return;
432 }
drh55700bc2019-06-07 22:51:13 +0000433 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000434 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000435 }
shaneh147e1762010-02-17 04:19:27 +0000436 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000437}
shanefbd60f82009-02-04 03:59:25 +0000438#endif
drhdc04c582002-02-24 01:55:15 +0000439
danielk197726783a52007-08-29 14:06:22 +0000440/*
drhf3cdcdc2015-04-29 16:50:28 +0000441** Allocate nByte bytes of space using sqlite3Malloc(). If the
danielk197726783a52007-08-29 14:06:22 +0000442** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000443** the database handle that malloc() has failed and return NULL.
444** If nByte is larger than the maximum string or blob length, then
445** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000446*/
drhb1a6c3c2008-03-20 16:30:17 +0000447static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000448 char *z;
drh27e62db2009-04-02 10:16:17 +0000449 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000450 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000451 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
452 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
453 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000454 sqlite3_result_error_toobig(context);
455 z = 0;
456 }else{
drhda4ca9d2014-09-09 17:27:35 +0000457 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000458 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000459 sqlite3_result_error_nomem(context);
460 }
danielk1977a1644fd2007-08-29 12:31:25 +0000461 }
462 return z;
463}
464
drhdc04c582002-02-24 01:55:15 +0000465/*
466** Implementation of the upper() and lower() SQL functions.
467*/
danielk19770ae8b832004-05-25 12:05:56 +0000468static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000469 char *z1;
470 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000471 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000472 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000473 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000474 n = sqlite3_value_bytes(argv[0]);
475 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
476 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000477 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000478 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000479 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000480 for(i=0; i<n; i++){
481 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000482 }
drhdf901d32011-10-13 18:00:11 +0000483 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000484 }
drhdc04c582002-02-24 01:55:15 +0000485 }
486}
danielk19770ae8b832004-05-25 12:05:56 +0000487static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000488 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000489 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000490 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000491 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000492 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000493 n = sqlite3_value_bytes(argv[0]);
494 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
495 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000496 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000497 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000498 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000499 for(i=0; i<n; i++){
500 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000501 }
drhdf901d32011-10-13 18:00:11 +0000502 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000503 }
drhdc04c582002-02-24 01:55:15 +0000504 }
505}
506
drhae6bb952009-11-11 00:24:31 +0000507/*
drhcca9f3d2013-09-06 15:23:29 +0000508** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
509** as VDBE code so that unused argument values do not have to be computed.
510** However, we still need some kind of function implementation for this
511** routines in the function table. The noopFunc macro provides this.
512** noopFunc will never be called so it doesn't matter what the implementation
513** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000514*/
drhcca9f3d2013-09-06 15:23:29 +0000515#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000516
517/*
drhf9ffac92002-03-02 19:00:31 +0000518** Implementation of random(). Return a random integer.
519*/
drhf9b596e2004-05-26 16:54:42 +0000520static void randomFunc(
521 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000522 int NotUsed,
523 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000524){
drh52fc8492006-02-23 21:43:55 +0000525 sqlite_int64 r;
dan9b5c67f2018-11-30 16:26:39 +0000526 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000527 UNUSED_PARAMETER2(NotUsed, NotUsed2);
dan9b5c67f2018-11-30 16:26:39 +0000528 sqlite3FastRandomness(&db->sPrng, sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000529 if( r<0 ){
530 /* We need to prevent a random number of 0x8000000000000000
531 ** (or -9223372036854775808) since when you do abs() of that
532 ** number of you get the same value back again. To do this
533 ** in a way that is testable, mask the sign bit off of negative
534 ** values, resulting in a positive value. Then take the
535 ** 2s complement of that positive value. The end result can
536 ** therefore be no less than -9223372036854775807.
537 */
drhaf8001b2012-02-11 19:53:24 +0000538 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000539 }
drh52fc8492006-02-23 21:43:55 +0000540 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000541}
542
543/*
drh137c7282007-01-29 17:58:28 +0000544** Implementation of randomblob(N). Return a random blob
545** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000546*/
drh137c7282007-01-29 17:58:28 +0000547static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000548 sqlite3_context *context,
549 int argc,
550 sqlite3_value **argv
551){
drh3cb79202019-01-18 14:53:15 +0000552 sqlite3_int64 n;
drh137c7282007-01-29 17:58:28 +0000553 unsigned char *p;
dan9b5c67f2018-11-30 16:26:39 +0000554 sqlite3 *db = sqlite3_context_db_handle(context);
drh63cf66f2007-01-29 15:50:05 +0000555 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000556 UNUSED_PARAMETER(argc);
drh3cb79202019-01-18 14:53:15 +0000557 n = sqlite3_value_int64(argv[0]);
drh023ae032007-05-08 12:12:16 +0000558 if( n<1 ){
559 n = 1;
560 }
danielk1977a1644fd2007-08-29 12:31:25 +0000561 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000562 if( p ){
dan9b5c67f2018-11-30 16:26:39 +0000563 sqlite3FastRandomness(&db->sPrng, n, p);
drh17435752007-08-16 04:30:38 +0000564 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000565 }
drh63cf66f2007-01-29 15:50:05 +0000566}
567
568/*
drh6ed41ad2002-04-06 14:10:47 +0000569** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000570** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000571*/
danielk197751ad0ec2004-05-24 12:39:02 +0000572static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000573 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000574 int NotUsed,
575 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000576){
drhfa4a4b92008-03-19 21:45:51 +0000577 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000578 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000579 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
580 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
581 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000582 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000583}
584
rdcf146a772004-02-25 22:51:06 +0000585/*
drhab2f1f92010-01-11 18:26:42 +0000586** Implementation of the changes() SQL function.
587**
drhc0bd26a2021-09-14 18:57:30 +0000588** IMP: R-32760-32347 The changes() SQL function is a wrapper
589** around the sqlite3_changes64() C/C++ function and hence follows the
590** same rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000591*/
danielk1977b28af712004-06-21 06:50:26 +0000592static void changes(
drhf9b596e2004-05-26 16:54:42 +0000593 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000594 int NotUsed,
595 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000596){
drhfa4a4b92008-03-19 21:45:51 +0000597 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000598 UNUSED_PARAMETER2(NotUsed, NotUsed2);
dan2c718872021-06-22 18:32:05 +0000599 sqlite3_result_int64(context, sqlite3_changes64(db));
rdcb0c374f2004-02-20 22:53:38 +0000600}
rdcf146a772004-02-25 22:51:06 +0000601
602/*
danielk1977b28af712004-06-21 06:50:26 +0000603** Implementation of the total_changes() SQL function. The return value is
larrybr10496f72021-06-23 16:07:20 +0000604** the same as the sqlite3_total_changes64() API function.
rdcf146a772004-02-25 22:51:06 +0000605*/
danielk1977b28af712004-06-21 06:50:26 +0000606static void total_changes(
607 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000608 int NotUsed,
609 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000610){
drhfa4a4b92008-03-19 21:45:51 +0000611 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000612 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhc0bd26a2021-09-14 18:57:30 +0000613 /* IMP: R-11217-42568 This function is a wrapper around the
614 ** sqlite3_total_changes64() C/C++ interface. */
larrybr10496f72021-06-23 16:07:20 +0000615 sqlite3_result_int64(context, sqlite3_total_changes64(db));
rdcb0c374f2004-02-20 22:53:38 +0000616}
617
drh6ed41ad2002-04-06 14:10:47 +0000618/*
drh4e5ffc52004-08-31 00:52:37 +0000619** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000620*/
drh4e5ffc52004-08-31 00:52:37 +0000621struct compareInfo {
drh07e83472016-01-11 03:48:18 +0000622 u8 matchAll; /* "*" or "%" */
623 u8 matchOne; /* "?" or "_" */
624 u8 matchSet; /* "[" or 0 */
625 u8 noCase; /* true to ignore case differences */
danielk1977d02eb1f2004-06-06 09:44:03 +0000626};
drh55ef4d92005-08-14 01:20:37 +0000627
drhb9175ae2007-12-07 18:39:04 +0000628/*
629** For LIKE and GLOB matching on EBCDIC machines, assume that every
drhb0870482015-06-17 13:20:54 +0000630** character is exactly one byte in size. Also, provde the Utf8Read()
631** macro for fast reading of the next character in the common case where
632** the next character is ASCII.
drhb9175ae2007-12-07 18:39:04 +0000633*/
634#if defined(SQLITE_EBCDIC)
drh88b33222014-09-25 03:51:37 +0000635# define sqlite3Utf8Read(A) (*((*A)++))
drhb0870482015-06-17 13:20:54 +0000636# define Utf8Read(A) (*(A++))
drhb9175ae2007-12-07 18:39:04 +0000637#else
drhb0870482015-06-17 13:20:54 +0000638# define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))
drhb9175ae2007-12-07 18:39:04 +0000639#endif
640
drh4e5ffc52004-08-31 00:52:37 +0000641static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000642/* The correct SQL-92 behavior is for the LIKE operator to ignore
643** case. Thus 'a' LIKE 'A' would be true. */
644static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
645/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
646** is case sensitive causing 'a' LIKE 'A' to be false */
647static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000648
649/*
drh698a01c2016-12-01 18:49:40 +0000650** Possible error returns from patternMatch()
651*/
652#define SQLITE_MATCH 0
653#define SQLITE_NOMATCH 1
654#define SQLITE_NOWILDCARDMATCH 2
655
656/*
657** Compare two UTF-8 strings for equality where the first string is
658** a GLOB or LIKE expression. Return values:
659**
660** SQLITE_MATCH: Match
661** SQLITE_NOMATCH: No match
662** SQLITE_NOWILDCARDMATCH: No match in spite of having * or % wildcards.
drh0ac65892002-04-20 14:24:41 +0000663**
drh4e5ffc52004-08-31 00:52:37 +0000664** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000665**
drh4e5ffc52004-08-31 00:52:37 +0000666** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000667**
drh4e5ffc52004-08-31 00:52:37 +0000668** '?' Matches exactly one character.
669**
670** [...] Matches one character from the enclosed list of
671** characters.
672**
673** [^...] Matches one character not in the enclosed list.
674**
675** With the [...] and [^...] matching, a ']' character can be included
676** in the list by making it the first character after '[' or '^'. A
677** range of characters can be specified using '-'. Example:
678** "[a-z]" matches any single lower-case letter. To match a '-', make
679** it the last character in the list.
680**
drh9fdfdc82014-09-25 11:08:57 +0000681** Like matching rules:
682**
683** '%' Matches any sequence of zero or more characters
684**
685*** '_' Matches any one character
686**
687** Ec Where E is the "esc" character and c is any other
688** character, including '%', '_', and esc, match exactly c.
689**
drhb0870482015-06-17 13:20:54 +0000690** The comments within this routine usually assume glob matching.
drh9fdfdc82014-09-25 11:08:57 +0000691**
drh4e5ffc52004-08-31 00:52:37 +0000692** This routine is usually quick, but can be N**2 in the worst case.
drh0ac65892002-04-20 14:24:41 +0000693*/
danielk19777c6303c2004-11-17 16:41:29 +0000694static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000695 const u8 *zPattern, /* The glob pattern */
696 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000697 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh698a01c2016-12-01 18:49:40 +0000698 u32 matchOther /* The escape char (LIKE) or '[' (GLOB) */
danielk197751ad0ec2004-05-24 12:39:02 +0000699){
drh9fdfdc82014-09-25 11:08:57 +0000700 u32 c, c2; /* Next pattern and input string chars */
701 u32 matchOne = pInfo->matchOne; /* "?" or "_" */
702 u32 matchAll = pInfo->matchAll; /* "*" or "%" */
drh9fdfdc82014-09-25 11:08:57 +0000703 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
704 const u8 *zEscaped = 0; /* One past the last escaped input char */
drh88b33222014-09-25 03:51:37 +0000705
drhb0870482015-06-17 13:20:54 +0000706 while( (c = Utf8Read(zPattern))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000707 if( c==matchAll ){ /* Match "*" */
708 /* Skip over multiple "*" characters in the pattern. If there
709 ** are also "?" characters, skip those as well, but consume a
710 ** single character of the input string for each "?" skipped */
drh33941692021-02-15 17:02:01 +0000711 while( (c=Utf8Read(zPattern)) == matchAll
712 || (c == matchOne && matchOne!=0) ){
drh42610962012-09-17 18:56:32 +0000713 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh698a01c2016-12-01 18:49:40 +0000714 return SQLITE_NOWILDCARDMATCH;
drh4e5ffc52004-08-31 00:52:37 +0000715 }
danielk1977ad7dd422004-06-06 12:41:49 +0000716 }
drh66150952007-07-23 19:12:41 +0000717 if( c==0 ){
drh698a01c2016-12-01 18:49:40 +0000718 return SQLITE_MATCH; /* "*" at the end of the pattern matches */
drh88b33222014-09-25 03:51:37 +0000719 }else if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000720 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000721 c = sqlite3Utf8Read(&zPattern);
drh698a01c2016-12-01 18:49:40 +0000722 if( c==0 ) return SQLITE_NOWILDCARDMATCH;
drh88b33222014-09-25 03:51:37 +0000723 }else{
drh9fdfdc82014-09-25 11:08:57 +0000724 /* "[...]" immediately follows the "*". We have to do a slow
725 ** recursive search in this case, but it is an unusual case. */
drh88b33222014-09-25 03:51:37 +0000726 assert( matchOther<0x80 ); /* '[' is a single-byte character */
drh698a01c2016-12-01 18:49:40 +0000727 while( *zString ){
728 int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther);
729 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh88b33222014-09-25 03:51:37 +0000730 SQLITE_SKIP_UTF8(zString);
731 }
drh698a01c2016-12-01 18:49:40 +0000732 return SQLITE_NOWILDCARDMATCH;
drh66150952007-07-23 19:12:41 +0000733 }
drh66150952007-07-23 19:12:41 +0000734 }
drh9fdfdc82014-09-25 11:08:57 +0000735
736 /* At this point variable c contains the first character of the
737 ** pattern string past the "*". Search in the input string for the
dan1a4a7372016-12-01 17:34:59 +0000738 ** first matching character and recursively continue the match from
drh9fdfdc82014-09-25 11:08:57 +0000739 ** that point.
740 **
741 ** For a case-insensitive search, set variable cx to be the same as
742 ** c but in the other case and search the input string for either
743 ** c or cx.
744 */
745 if( c<=0x80 ){
drheba21f92017-10-30 18:49:11 +0000746 char zStop[3];
drh698a01c2016-12-01 18:49:40 +0000747 int bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000748 if( noCase ){
drheba21f92017-10-30 18:49:11 +0000749 zStop[0] = sqlite3Toupper(c);
750 zStop[1] = sqlite3Tolower(c);
751 zStop[2] = 0;
drh66150952007-07-23 19:12:41 +0000752 }else{
drheba21f92017-10-30 18:49:11 +0000753 zStop[0] = c;
754 zStop[1] = 0;
drh4e5ffc52004-08-31 00:52:37 +0000755 }
drheba21f92017-10-30 18:49:11 +0000756 while(1){
757 zString += strcspn((const char*)zString, zStop);
758 if( zString[0]==0 ) break;
759 zString++;
drh698a01c2016-12-01 18:49:40 +0000760 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
761 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000762 }
763 }else{
drh698a01c2016-12-01 18:49:40 +0000764 int bMatch;
drhb0870482015-06-17 13:20:54 +0000765 while( (c2 = Utf8Read(zString))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000766 if( c2!=c ) continue;
drh698a01c2016-12-01 18:49:40 +0000767 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
768 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000769 }
drh66150952007-07-23 19:12:41 +0000770 }
drh698a01c2016-12-01 18:49:40 +0000771 return SQLITE_NOWILDCARDMATCH;
drh88b33222014-09-25 03:51:37 +0000772 }
drh88b33222014-09-25 03:51:37 +0000773 if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000774 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000775 c = sqlite3Utf8Read(&zPattern);
drh698a01c2016-12-01 18:49:40 +0000776 if( c==0 ) return SQLITE_NOMATCH;
drh9fdfdc82014-09-25 11:08:57 +0000777 zEscaped = zPattern;
drh88b33222014-09-25 03:51:37 +0000778 }else{
779 u32 prior_c = 0;
drh9fdfdc82014-09-25 11:08:57 +0000780 int seen = 0;
781 int invert = 0;
drh88b33222014-09-25 03:51:37 +0000782 c = sqlite3Utf8Read(&zString);
drh698a01c2016-12-01 18:49:40 +0000783 if( c==0 ) return SQLITE_NOMATCH;
drh88b33222014-09-25 03:51:37 +0000784 c2 = sqlite3Utf8Read(&zPattern);
785 if( c2=='^' ){
786 invert = 1;
787 c2 = sqlite3Utf8Read(&zPattern);
788 }
789 if( c2==']' ){
790 if( c==']' ) seen = 1;
791 c2 = sqlite3Utf8Read(&zPattern);
792 }
793 while( c2 && c2!=']' ){
794 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
795 c2 = sqlite3Utf8Read(&zPattern);
796 if( c>=prior_c && c<=c2 ) seen = 1;
797 prior_c = 0;
798 }else{
799 if( c==c2 ){
800 seen = 1;
801 }
802 prior_c = c2;
803 }
804 c2 = sqlite3Utf8Read(&zPattern);
805 }
806 if( c2==0 || (seen ^ invert)==0 ){
drh698a01c2016-12-01 18:49:40 +0000807 return SQLITE_NOMATCH;
drh88b33222014-09-25 03:51:37 +0000808 }
809 continue;
810 }
811 }
drhb0870482015-06-17 13:20:54 +0000812 c2 = Utf8Read(zString);
drh88b33222014-09-25 03:51:37 +0000813 if( c==c2 ) continue;
drhc80937a2016-06-06 01:48:14 +0000814 if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){
drh9fdfdc82014-09-25 11:08:57 +0000815 continue;
816 }
817 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
drh698a01c2016-12-01 18:49:40 +0000818 return SQLITE_NOMATCH;
danielk197751ad0ec2004-05-24 12:39:02 +0000819 }
drh698a01c2016-12-01 18:49:40 +0000820 return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH;
drh0ac65892002-04-20 14:24:41 +0000821}
drh4e5ffc52004-08-31 00:52:37 +0000822
drh55ef4d92005-08-14 01:20:37 +0000823/*
drh698a01c2016-12-01 18:49:40 +0000824** The sqlite3_strglob() interface. Return 0 on a match (like strcmp()) and
825** non-zero if there is no match.
drh56282a52013-04-10 16:13:38 +0000826*/
827int sqlite3_strglob(const char *zGlobPattern, const char *zString){
drh698a01c2016-12-01 18:49:40 +0000828 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
drh56282a52013-04-10 16:13:38 +0000829}
830
831/*
drh698a01c2016-12-01 18:49:40 +0000832** The sqlite3_strlike() interface. Return 0 on a match and non-zero for
833** a miss - like strcmp().
drh8b4a94a2015-11-24 21:23:59 +0000834*/
835int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){
drh698a01c2016-12-01 18:49:40 +0000836 return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
drh8b4a94a2015-11-24 21:23:59 +0000837}
838
839/*
drh55ef4d92005-08-14 01:20:37 +0000840** Count the number of times that the LIKE operator (or GLOB which is
841** just a variation of LIKE) gets called. This is used for testing
842** only.
843*/
844#ifdef SQLITE_TEST
845int sqlite3_like_count = 0;
846#endif
847
danielk19773f6b0872004-06-17 05:36:44 +0000848
849/*
850** Implementation of the like() SQL function. This function implements
851** the build-in LIKE operator. The first argument to the function is the
852** pattern and the second argument is the string. So, the SQL statements:
853**
854** A LIKE B
855**
856** is implemented as like(B,A).
857**
drh55ef4d92005-08-14 01:20:37 +0000858** This same function (with a different compareInfo structure) computes
859** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000860*/
861static void likeFunc(
862 sqlite3_context *context,
863 int argc,
864 sqlite3_value **argv
865){
drhbeb818d2007-05-08 15:34:47 +0000866 const unsigned char *zA, *zB;
drh07e83472016-01-11 03:48:18 +0000867 u32 escape;
drh27e62db2009-04-02 10:16:17 +0000868 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000869 sqlite3 *db = sqlite3_context_db_handle(context);
drh07e83472016-01-11 03:48:18 +0000870 struct compareInfo *pInfo = sqlite3_user_data(context);
drh589c7872020-03-19 18:13:28 +0000871 struct compareInfo backupInfo;
drhbeb818d2007-05-08 15:34:47 +0000872
drh41d2e662015-12-01 21:23:07 +0000873#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
874 if( sqlite3_value_type(argv[0])==SQLITE_BLOB
875 || sqlite3_value_type(argv[1])==SQLITE_BLOB
876 ){
877#ifdef SQLITE_TEST
878 sqlite3_like_count++;
879#endif
880 sqlite3_result_int(context, 0);
881 return;
882 }
883#endif
drh1f0feef2007-05-15 13:27:07 +0000884
drhbeb818d2007-05-08 15:34:47 +0000885 /* Limit the length of the LIKE or GLOB pattern to avoid problems
886 ** of deep recursion and N*N behavior in patternCompare().
887 */
drh27e62db2009-04-02 10:16:17 +0000888 nPat = sqlite3_value_bytes(argv[0]);
889 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
890 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
891 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000892 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
893 return;
894 }
danielk19777c6303c2004-11-17 16:41:29 +0000895 if( argc==3 ){
896 /* The escape character string must consist of a single UTF-8 character.
897 ** Otherwise, return an error.
898 */
899 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000900 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000901 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000902 sqlite3_result_error(context,
903 "ESCAPE expression must be a single character", -1);
904 return;
905 }
drh42610962012-09-17 18:56:32 +0000906 escape = sqlite3Utf8Read(&zEsc);
drh589c7872020-03-19 18:13:28 +0000907 if( escape==pInfo->matchAll || escape==pInfo->matchOne ){
908 memcpy(&backupInfo, pInfo, sizeof(backupInfo));
909 pInfo = &backupInfo;
910 if( escape==pInfo->matchAll ) pInfo->matchAll = 0;
911 if( escape==pInfo->matchOne ) pInfo->matchOne = 0;
912 }
drh07e83472016-01-11 03:48:18 +0000913 }else{
914 escape = pInfo->matchSet;
danielk19777c6303c2004-11-17 16:41:29 +0000915 }
drhcf833232019-04-30 11:54:36 +0000916 zB = sqlite3_value_text(argv[0]);
917 zA = sqlite3_value_text(argv[1]);
danielk19773f6b0872004-06-17 05:36:44 +0000918 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000919#ifdef SQLITE_TEST
920 sqlite3_like_count++;
921#endif
drhf49759b2017-08-25 19:51:51 +0000922 sqlite3_result_int(context,
923 patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
danielk197751ad0ec2004-05-24 12:39:02 +0000924 }
drh8912d102002-05-26 21:34:58 +0000925}
926
927/*
928** Implementation of the NULLIF(x,y) function. The result is the first
929** argument if the arguments are different. The result is NULL if the
930** arguments are equal to each other.
931*/
drhf9b596e2004-05-26 16:54:42 +0000932static void nullifFunc(
933 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000934 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000935 sqlite3_value **argv
936){
danielk1977dc1bdc42004-06-11 10:51:27 +0000937 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000938 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000939 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000940 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000941 }
drh0ac65892002-04-20 14:24:41 +0000942}
943
drh647cb0e2002-11-04 19:32:25 +0000944/*
drh47baebc2009-08-14 16:01:24 +0000945** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000946** of the SQLite library that is running.
947*/
drhf9b596e2004-05-26 16:54:42 +0000948static void versionFunc(
949 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000950 int NotUsed,
951 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000952){
danielk197762c14b32008-11-19 09:05:26 +0000953 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000954 /* IMP: R-48699-48617 This function is an SQL wrapper around the
955 ** sqlite3_libversion() C-interface. */
956 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000957}
958
drh47baebc2009-08-14 16:01:24 +0000959/*
960** Implementation of the sqlite_source_id() function. The result is a string
961** that identifies the particular version of the source code used to build
962** SQLite.
963*/
964static void sourceidFunc(
965 sqlite3_context *context,
966 int NotUsed,
967 sqlite3_value **NotUsed2
968){
969 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000970 /* IMP: R-24470-31136 This function is an SQL wrapper around the
971 ** sqlite3_sourceid() C interface. */
972 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000973}
974
shanehbdea6d12010-02-23 04:19:54 +0000975/*
drh3ca84ef2011-04-25 18:03:10 +0000976** Implementation of the sqlite_log() function. This is a wrapper around
977** sqlite3_log(). The return value is NULL. The function exists purely for
978** its side-effects.
979*/
drh840561f2011-04-27 18:08:42 +0000980static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000981 sqlite3_context *context,
982 int argc,
983 sqlite3_value **argv
984){
985 UNUSED_PARAMETER(argc);
986 UNUSED_PARAMETER(context);
987 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
988}
989
990/*
shanehdc97a8c2010-02-23 20:08:35 +0000991** Implementation of the sqlite_compileoption_used() function.
992** The result is an integer that identifies if the compiler option
993** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000994*/
shanehdc97a8c2010-02-23 20:08:35 +0000995#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
996static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000997 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000998 int argc,
999 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +00001000){
shanehdc97a8c2010-02-23 20:08:35 +00001001 const char *zOptName;
1002 assert( argc==1 );
1003 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +00001004 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
1005 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
1006 ** function.
1007 */
drh264a2d42010-02-25 15:28:41 +00001008 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +00001009 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +00001010 }
shanehbdea6d12010-02-23 04:19:54 +00001011}
shanehdc97a8c2010-02-23 20:08:35 +00001012#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1013
1014/*
1015** Implementation of the sqlite_compileoption_get() function.
1016** The result is a string that identifies the compiler options
1017** used to build SQLite.
1018*/
1019#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1020static void compileoptiongetFunc(
1021 sqlite3_context *context,
1022 int argc,
1023 sqlite3_value **argv
1024){
1025 int n;
1026 assert( argc==1 );
1027 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +00001028 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
1029 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
1030 */
shanehdc97a8c2010-02-23 20:08:35 +00001031 n = sqlite3_value_int(argv[0]);
1032 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
1033}
1034#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +00001035
drh137c7282007-01-29 17:58:28 +00001036/* Array for converting from half-bytes (nybbles) into ASCII hex
1037** digits. */
1038static const char hexdigits[] = {
1039 '0', '1', '2', '3', '4', '5', '6', '7',
1040 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
1041};
danielk1977d641d642004-11-18 15:44:29 +00001042
drh47394702003-08-20 01:03:33 +00001043/*
drhef95d552021-12-10 21:01:24 +00001044** Append to pStr text that is the SQL literal representation of the
1045** value contained in pValue.
drh47394702003-08-20 01:03:33 +00001046*/
drhef95d552021-12-10 21:01:24 +00001047void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue){
1048 /* As currently implemented, the string must be initially empty.
1049 ** we might relax this requirement in the future, but that will
1050 ** require enhancements to the implementation. */
1051 assert( pStr!=0 && pStr->nChar==0 );
1052
1053 switch( sqlite3_value_type(pValue) ){
drh9c054832004-05-31 18:51:57 +00001054 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +00001055 double r1, r2;
drhef95d552021-12-10 21:01:24 +00001056 const char *zVal;
1057 r1 = sqlite3_value_double(pValue);
1058 sqlite3_str_appendf(pStr, "%!.15g", r1);
1059 zVal = sqlite3_str_value(pStr);
1060 if( zVal ){
1061 sqlite3AtoF(zVal, &r2, pStr->nChar, SQLITE_UTF8);
1062 if( r1!=r2 ){
1063 sqlite3_str_reset(pStr);
1064 sqlite3_str_appendf(pStr, "%!.20e", r1);
1065 }
drh72b3fbc2012-06-19 03:11:25 +00001066 }
drh72b3fbc2012-06-19 03:11:25 +00001067 break;
1068 }
1069 case SQLITE_INTEGER: {
drhef95d552021-12-10 21:01:24 +00001070 sqlite3_str_appendf(pStr, "%lld", sqlite3_value_int64(pValue));
drhf9b596e2004-05-26 16:54:42 +00001071 break;
1072 }
danielk19773f41e972004-06-08 00:39:01 +00001073 case SQLITE_BLOB: {
drhef95d552021-12-10 21:01:24 +00001074 char const *zBlob = sqlite3_value_blob(pValue);
1075 int nBlob = sqlite3_value_bytes(pValue);
1076 assert( zBlob==sqlite3_value_blob(pValue) ); /* No encoding change */
1077 sqlite3StrAccumEnlarge(pStr, nBlob*2 + 4);
1078 if( pStr->accError==0 ){
1079 char *zText = pStr->zText;
danielk19773f41e972004-06-08 00:39:01 +00001080 int i;
1081 for(i=0; i<nBlob; i++){
1082 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
1083 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
1084 }
1085 zText[(nBlob*2)+2] = '\'';
1086 zText[(nBlob*2)+3] = '\0';
1087 zText[0] = 'X';
1088 zText[1] = '\'';
drhef95d552021-12-10 21:01:24 +00001089 pStr->nChar = nBlob*2 + 3;
danielk19773f41e972004-06-08 00:39:01 +00001090 }
1091 break;
1092 }
drh9c054832004-05-31 18:51:57 +00001093 case SQLITE_TEXT: {
drhef95d552021-12-10 21:01:24 +00001094 const unsigned char *zArg = sqlite3_value_text(pValue);
1095 sqlite3_str_appendf(pStr, "%Q", zArg);
drha0df4cc2009-02-02 17:29:59 +00001096 break;
1097 }
1098 default: {
drhef95d552021-12-10 21:01:24 +00001099 assert( sqlite3_value_type(pValue)==SQLITE_NULL );
1100 sqlite3_str_append(pStr, "NULL", 4);
drha0df4cc2009-02-02 17:29:59 +00001101 break;
drhf9b596e2004-05-26 16:54:42 +00001102 }
drh47394702003-08-20 01:03:33 +00001103 }
1104}
1105
drh137c7282007-01-29 17:58:28 +00001106/*
drhef95d552021-12-10 21:01:24 +00001107** Implementation of the QUOTE() function.
1108**
1109** The quote(X) function returns the text of an SQL literal which is the
1110** value of its argument suitable for inclusion into an SQL statement.
1111** Strings are surrounded by single-quotes with escapes on interior quotes
1112** as needed. BLOBs are encoded as hexadecimal literals. Strings with
1113** embedded NUL characters cannot be represented as string literals in SQL
1114** and hence the returned string literal is truncated prior to the first NUL.
1115*/
1116static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
1117 sqlite3_str str;
1118 sqlite3 *db = sqlite3_context_db_handle(context);
1119 assert( argc==1 );
1120 UNUSED_PARAMETER(argc);
1121 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
1122 sqlite3QuoteValue(&str,argv[0]);
1123 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), str.nChar,
1124 SQLITE_DYNAMIC);
danaf7b8dc2022-02-12 13:37:27 +00001125 if( str.accError!=SQLITE_OK ){
1126 sqlite3_result_null(context);
1127 sqlite3_result_error_code(context, str.accError);
drhef95d552021-12-10 21:01:24 +00001128 }
1129}
1130
1131/*
drhd495d8c2013-02-22 19:34:25 +00001132** The unicode() function. Return the integer unicode code-point value
1133** for the first character of the input string.
1134*/
1135static void unicodeFunc(
1136 sqlite3_context *context,
1137 int argc,
1138 sqlite3_value **argv
1139){
1140 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001141 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001142 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1143}
1144
1145/*
1146** The char() function takes zero or more arguments, each of which is
1147** an integer. It constructs a string where each character of the string
1148** is the unicode character for the corresponding integer argument.
1149*/
1150static void charFunc(
1151 sqlite3_context *context,
1152 int argc,
1153 sqlite3_value **argv
1154){
1155 unsigned char *z, *zOut;
1156 int i;
drhf3cdcdc2015-04-29 16:50:28 +00001157 zOut = z = sqlite3_malloc64( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001158 if( z==0 ){
1159 sqlite3_result_error_nomem(context);
1160 return;
1161 }
1162 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001163 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001164 unsigned c;
1165 x = sqlite3_value_int64(argv[i]);
1166 if( x<0 || x>0x10ffff ) x = 0xfffd;
1167 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001168 if( c<0x00080 ){
1169 *zOut++ = (u8)(c&0xFF);
1170 }else if( c<0x00800 ){
1171 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1172 *zOut++ = 0x80 + (u8)(c & 0x3F);
1173 }else if( c<0x10000 ){
1174 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1175 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1176 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001177 }else{
drhfe7a5d12013-03-07 14:00:04 +00001178 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1179 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1180 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1181 *zOut++ = 0x80 + (u8)(c & 0x3F);
1182 } \
drhd495d8c2013-02-22 19:34:25 +00001183 }
drhbbf483f2014-09-09 20:30:24 +00001184 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001185}
1186
1187/*
drh137c7282007-01-29 17:58:28 +00001188** The hex() function. Interpret the argument as a blob. Return
1189** a hexadecimal rendering as text.
1190*/
1191static void hexFunc(
1192 sqlite3_context *context,
1193 int argc,
1194 sqlite3_value **argv
1195){
1196 int i, n;
1197 const unsigned char *pBlob;
1198 char *zHex, *z;
1199 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001200 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001201 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001202 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001203 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001204 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001205 if( zHex ){
1206 for(i=0; i<n; i++, pBlob++){
1207 unsigned char c = *pBlob;
1208 *(z++) = hexdigits[(c>>4)&0xf];
1209 *(z++) = hexdigits[c&0xf];
1210 }
1211 *z = 0;
1212 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001213 }
drh137c7282007-01-29 17:58:28 +00001214}
1215
drh26b6d902007-03-17 13:27:54 +00001216/*
drh8cff3822007-05-02 02:08:28 +00001217** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1218*/
1219static void zeroblobFunc(
1220 sqlite3_context *context,
1221 int argc,
1222 sqlite3_value **argv
1223){
drh98640a32007-06-07 19:08:32 +00001224 i64 n;
dana4d5ae82015-07-24 16:24:37 +00001225 int rc;
drh8cff3822007-05-02 02:08:28 +00001226 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001227 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001228 n = sqlite3_value_int64(argv[0]);
dana4d5ae82015-07-24 16:24:37 +00001229 if( n<0 ) n = 0;
1230 rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
1231 if( rc ){
1232 sqlite3_result_error_code(context, rc);
drh98640a32007-06-07 19:08:32 +00001233 }
drh8cff3822007-05-02 02:08:28 +00001234}
1235
1236/*
drh26b6d902007-03-17 13:27:54 +00001237** The replace() function. Three arguments are all strings: call
1238** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001239** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001240** must be exact. Collating sequences are not used.
1241*/
1242static void replaceFunc(
1243 sqlite3_context *context,
1244 int argc,
1245 sqlite3_value **argv
1246){
1247 const unsigned char *zStr; /* The input string A */
1248 const unsigned char *zPattern; /* The pattern string B */
1249 const unsigned char *zRep; /* The replacement string C */
1250 unsigned char *zOut; /* The output */
1251 int nStr; /* Size of zStr */
1252 int nPattern; /* Size of zPattern */
1253 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001254 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001255 int loopLimit; /* Last zStr[] that might match zPattern[] */
1256 int i, j; /* Loop counters */
drhf3139522018-02-09 23:25:14 +00001257 unsigned cntExpand; /* Number zOut expansions */
1258 sqlite3 *db = sqlite3_context_db_handle(context);
drh26b6d902007-03-17 13:27:54 +00001259
1260 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001261 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001262 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001263 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001264 nStr = sqlite3_value_bytes(argv[0]);
1265 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001266 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001267 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001268 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1269 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001270 return;
1271 }
1272 if( zPattern[0]==0 ){
1273 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1274 sqlite3_result_value(context, argv[0]);
1275 return;
1276 }
drh1f0feef2007-05-15 13:27:07 +00001277 nPattern = sqlite3_value_bytes(argv[1]);
1278 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001279 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001280 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001281 nRep = sqlite3_value_bytes(argv[2]);
1282 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001283 nOut = nStr + 1;
1284 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001285 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001286 if( zOut==0 ){
1287 return;
drh26b6d902007-03-17 13:27:54 +00001288 }
drh26b6d902007-03-17 13:27:54 +00001289 loopLimit = nStr - nPattern;
drhf3139522018-02-09 23:25:14 +00001290 cntExpand = 0;
drh26b6d902007-03-17 13:27:54 +00001291 for(i=j=0; i<=loopLimit; i++){
1292 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1293 zOut[j++] = zStr[i];
1294 }else{
drhf3139522018-02-09 23:25:14 +00001295 if( nRep>nPattern ){
1296 nOut += nRep - nPattern;
drhc86d82f2018-02-10 02:31:30 +00001297 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1298 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
drhf3139522018-02-09 23:25:14 +00001299 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1300 sqlite3_result_error_toobig(context);
1301 sqlite3_free(zOut);
1302 return;
1303 }
drhf3139522018-02-09 23:25:14 +00001304 cntExpand++;
1305 if( (cntExpand&(cntExpand-1))==0 ){
1306 /* Grow the size of the output buffer only on substitutions
1307 ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */
1308 u8 *zOld;
1309 zOld = zOut;
drhd924e7b2020-05-17 00:26:44 +00001310 zOut = sqlite3Realloc(zOut, (int)nOut + (nOut - nStr - 1));
drhf3139522018-02-09 23:25:14 +00001311 if( zOut==0 ){
1312 sqlite3_result_error_nomem(context);
1313 sqlite3_free(zOld);
1314 return;
1315 }
1316 }
drh2e6400b2007-05-08 15:46:18 +00001317 }
drh26b6d902007-03-17 13:27:54 +00001318 memcpy(&zOut[j], zRep, nRep);
1319 j += nRep;
1320 i += nPattern-1;
1321 }
1322 }
drhf3139522018-02-09 23:25:14 +00001323 assert( j+nStr-i+1<=nOut );
drh26b6d902007-03-17 13:27:54 +00001324 memcpy(&zOut[j], &zStr[i], nStr-i);
1325 j += nStr - i;
1326 assert( j<=nOut );
1327 zOut[j] = 0;
1328 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1329}
1330
drh309b3382007-03-17 17:52:42 +00001331/*
1332** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1333** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1334*/
1335static void trimFunc(
1336 sqlite3_context *context,
1337 int argc,
1338 sqlite3_value **argv
1339){
1340 const unsigned char *zIn; /* Input string */
1341 const unsigned char *zCharSet; /* Set of characters to trim */
drh972da422021-06-15 14:34:21 +00001342 unsigned int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001343 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001344 int i; /* Loop counter */
drh972da422021-06-15 14:34:21 +00001345 unsigned int *aLen = 0; /* Length of each character in zCharSet */
drh1bd10f82008-12-10 21:19:56 +00001346 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001347 int nChar; /* Number of characters in zCharSet */
1348
drh309b3382007-03-17 17:52:42 +00001349 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1350 return;
1351 }
1352 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001353 if( zIn==0 ) return;
drh972da422021-06-15 14:34:21 +00001354 nIn = (unsigned)sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001355 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001356 if( argc==1 ){
drh972da422021-06-15 14:34:21 +00001357 static const unsigned lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001358 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001359 nChar = 1;
drh972da422021-06-15 14:34:21 +00001360 aLen = (unsigned*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001361 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001362 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001363 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001364 return;
drhd1e3a612007-04-27 21:59:52 +00001365 }else{
1366 const unsigned char *z;
1367 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001368 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001369 }
1370 if( nChar>0 ){
drh972da422021-06-15 14:34:21 +00001371 azChar = contextMalloc(context,
1372 ((i64)nChar)*(sizeof(char*)+sizeof(unsigned)));
drhd1e3a612007-04-27 21:59:52 +00001373 if( azChar==0 ){
1374 return;
1375 }
drh972da422021-06-15 14:34:21 +00001376 aLen = (unsigned*)&azChar[nChar];
drhd1e3a612007-04-27 21:59:52 +00001377 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001378 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001379 SQLITE_SKIP_UTF8(z);
drh972da422021-06-15 14:34:21 +00001380 aLen[nChar] = (unsigned)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001381 }
1382 }
drh309b3382007-03-17 17:52:42 +00001383 }
drhd1e3a612007-04-27 21:59:52 +00001384 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001385 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001386 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001387 while( nIn>0 ){
drh972da422021-06-15 14:34:21 +00001388 unsigned int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001389 for(i=0; i<nChar; i++){
1390 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001391 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001392 }
1393 if( i>=nChar ) break;
1394 zIn += len;
1395 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001396 }
1397 }
1398 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001399 while( nIn>0 ){
drh972da422021-06-15 14:34:21 +00001400 unsigned int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001401 for(i=0; i<nChar; i++){
1402 len = aLen[i];
1403 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1404 }
1405 if( i>=nChar ) break;
1406 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001407 }
1408 }
drhd1e3a612007-04-27 21:59:52 +00001409 if( zCharSet ){
1410 sqlite3_free(azChar);
1411 }
drh309b3382007-03-17 17:52:42 +00001412 }
1413 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1414}
drh26b6d902007-03-17 13:27:54 +00001415
danielk1977a4de4532008-09-02 15:44:08 +00001416
drhcc153132016-08-04 12:35:17 +00001417#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1418/*
1419** The "unknown" function is automatically substituted in place of
1420** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
1421** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
1422** When the "sqlite3" command-line shell is built using this functionality,
1423** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
1424** involving application-defined functions to be examined in a generic
1425** sqlite3 shell.
1426*/
1427static void unknownFunc(
1428 sqlite3_context *context,
1429 int argc,
1430 sqlite3_value **argv
1431){
1432 /* no-op */
1433}
1434#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
1435
1436
drh2ba3ccc2009-12-08 02:06:08 +00001437/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1438** is only available if the SQLITE_SOUNDEX compile-time option is used
1439** when SQLite is built.
1440*/
drhd24cc422003-03-27 12:51:24 +00001441#ifdef SQLITE_SOUNDEX
1442/*
1443** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001444**
1445** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1446** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001447*/
drh137c7282007-01-29 17:58:28 +00001448static void soundexFunc(
1449 sqlite3_context *context,
1450 int argc,
1451 sqlite3_value **argv
1452){
drhd24cc422003-03-27 12:51:24 +00001453 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001454 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001455 int i, j;
1456 static const unsigned char iCode[] = {
1457 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1458 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1459 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1460 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1461 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1462 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1463 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1464 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1465 };
1466 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001467 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001468 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001469 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001470 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001471 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001472 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001473 for(j=1; j<4 && zIn[i]; i++){
1474 int code = iCode[zIn[i]&0x7f];
1475 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001476 if( code!=prevcode ){
1477 prevcode = code;
1478 zResult[j++] = code + '0';
1479 }
1480 }else{
1481 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001482 }
1483 }
1484 while( j<4 ){
1485 zResult[j++] = '0';
1486 }
1487 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001488 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001489 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001490 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1491 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001492 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001493 }
1494}
drh2ba3ccc2009-12-08 02:06:08 +00001495#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001496
drhfdb83b22006-06-17 14:12:47 +00001497#ifndef SQLITE_OMIT_LOAD_EXTENSION
1498/*
1499** A function that loads a shared-library extension then returns NULL.
1500*/
1501static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001502 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001503 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001504 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001505 char *zErrMsg = 0;
1506
drh191dd062016-04-21 01:30:09 +00001507 /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
drh1a55ded2016-04-20 00:30:05 +00001508 ** flag is set. See the sqlite3_enable_load_extension() API.
1509 */
drhf602a162016-04-21 01:58:21 +00001510 if( (db->flags & SQLITE_LoadExtFunc)==0 ){
1511 sqlite3_result_error(context, "not authorized", -1);
1512 return;
1513 }
drh1a55ded2016-04-20 00:30:05 +00001514
drhfdb83b22006-06-17 14:12:47 +00001515 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001516 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001517 }else{
1518 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001519 }
drh7a521cf2007-04-25 18:23:52 +00001520 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001521 sqlite3_result_error(context, zErrMsg, -1);
1522 sqlite3_free(zErrMsg);
1523 }
1524}
1525#endif
1526
danielk197701427a62005-01-11 13:02:33 +00001527
drh0ac65892002-04-20 14:24:41 +00001528/*
drhd3a149e2002-02-24 17:12:53 +00001529** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001530** sum() or avg() aggregate computation.
1531*/
1532typedef struct SumCtx SumCtx;
1533struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001534 double rSum; /* Floating point sum */
1535 i64 iSum; /* Integer sum */
1536 i64 cnt; /* Number of elements summed */
1537 u8 overflow; /* True if integer overflow seen */
1538 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001539};
1540
1541/*
drha97fdd32006-01-12 22:17:50 +00001542** Routines used to compute the sum, average, and total.
1543**
1544** The SUM() function follows the (broken) SQL standard which means
1545** that it returns NULL if it sums over no inputs. TOTAL returns
1546** 0.0 in that case. In addition, TOTAL always returns a float where
1547** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001548** value. TOTAL never fails, but SUM might through an exception if
1549** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001550*/
danielk19770ae8b832004-05-25 12:05:56 +00001551static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001552 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001553 int type;
drh3f219f42005-09-08 19:45:57 +00001554 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001555 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001556 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001557 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001558 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001559 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001560 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001561 i64 v = sqlite3_value_int64(argv[0]);
1562 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001563 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
drha546ef22018-07-07 20:55:16 +00001564 p->approx = p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001565 }
1566 }else{
drh8c08e862006-02-11 17:34:00 +00001567 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001568 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001569 }
drh739105c2002-05-29 23:22:23 +00001570 }
drhdd5baa92002-02-27 19:50:59 +00001571}
dan67a9b8e2018-06-22 20:51:35 +00001572#ifndef SQLITE_OMIT_WINDOWFUNC
danc3a20c12018-05-23 20:55:37 +00001573static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
1574 SumCtx *p;
1575 int type;
1576 assert( argc==1 );
1577 UNUSED_PARAMETER(argc);
1578 p = sqlite3_aggregate_context(context, sizeof(*p));
1579 type = sqlite3_value_numeric_type(argv[0]);
drhfd4b7282018-07-07 19:47:21 +00001580 /* p is always non-NULL because sumStep() will have been called first
1581 ** to initialize it */
1582 if( ALWAYS(p) && type!=SQLITE_NULL ){
drha546ef22018-07-07 20:55:16 +00001583 assert( p->cnt>0 );
danc3a20c12018-05-23 20:55:37 +00001584 p->cnt--;
drha546ef22018-07-07 20:55:16 +00001585 assert( type==SQLITE_INTEGER || p->approx );
1586 if( type==SQLITE_INTEGER && p->approx==0 ){
danc3a20c12018-05-23 20:55:37 +00001587 i64 v = sqlite3_value_int64(argv[0]);
1588 p->rSum -= v;
drha546ef22018-07-07 20:55:16 +00001589 p->iSum -= v;
danc3a20c12018-05-23 20:55:37 +00001590 }else{
dand7368292018-07-02 17:45:59 +00001591 p->rSum -= sqlite3_value_double(argv[0]);
danc3a20c12018-05-23 20:55:37 +00001592 }
1593 }
1594}
dan67a9b8e2018-06-22 20:51:35 +00001595#else
1596# define sumInverse 0
1597#endif /* SQLITE_OMIT_WINDOWFUNC */
danielk19770ae8b832004-05-25 12:05:56 +00001598static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001599 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001600 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001601 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001602 if( p->overflow ){
1603 sqlite3_result_error(context,"integer overflow",-1);
1604 }else if( p->approx ){
1605 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001606 }else{
drh8c08e862006-02-11 17:34:00 +00001607 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001608 }
drh3d1d95e2005-09-08 10:37:01 +00001609 }
drhdd5baa92002-02-27 19:50:59 +00001610}
danielk19770ae8b832004-05-25 12:05:56 +00001611static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001612 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001613 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001614 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001615 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001616 }
1617}
drha97fdd32006-01-12 22:17:50 +00001618static void totalFinalize(sqlite3_context *context){
1619 SumCtx *p;
1620 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001621 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1622 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001623}
drhdd5baa92002-02-27 19:50:59 +00001624
1625/*
drh0bce8352002-02-28 00:41:10 +00001626** The following structure keeps track of state information for the
1627** count() aggregate function.
1628*/
1629typedef struct CountCtx CountCtx;
1630struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001631 i64 n;
dan7262ca92018-07-02 12:07:32 +00001632#ifdef SQLITE_DEBUG
1633 int bInverse; /* True if xInverse() ever called */
1634#endif
drh0bce8352002-02-28 00:41:10 +00001635};
drhdd5baa92002-02-27 19:50:59 +00001636
drh0bce8352002-02-28 00:41:10 +00001637/*
1638** Routines to implement the count() aggregate function.
1639*/
danielk19770ae8b832004-05-25 12:05:56 +00001640static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001641 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001642 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001643 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001644 p->n++;
1645 }
drh2e79c3d2009-04-08 23:04:14 +00001646
drhd3264c72009-04-15 13:39:47 +00001647#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001648 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1649 ** sure it still operates correctly, verify that its count agrees with our
1650 ** internal count when using count(*) and when the total count can be
1651 ** expressed as a 32-bit integer. */
dan7262ca92018-07-02 12:07:32 +00001652 assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse
drh2e79c3d2009-04-08 23:04:14 +00001653 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001654#endif
drh0bce8352002-02-28 00:41:10 +00001655}
danielk19770ae8b832004-05-25 12:05:56 +00001656static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001657 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001658 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001659 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001660}
dan7262ca92018-07-02 12:07:32 +00001661#ifndef SQLITE_OMIT_WINDOWFUNC
1662static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){
1663 CountCtx *p;
1664 p = sqlite3_aggregate_context(ctx, sizeof(*p));
drhfd4b7282018-07-07 19:47:21 +00001665 /* p is always non-NULL since countStep() will have been called first */
1666 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
dan7262ca92018-07-02 12:07:32 +00001667 p->n--;
1668#ifdef SQLITE_DEBUG
1669 p->bInverse = 1;
1670#endif
1671 }
1672}
dan6b4b8822018-07-02 15:03:50 +00001673#else
1674# define countInverse 0
1675#endif /* SQLITE_OMIT_WINDOWFUNC */
drh0bce8352002-02-28 00:41:10 +00001676
1677/*
drh0bce8352002-02-28 00:41:10 +00001678** Routines to implement min() and max() aggregate functions.
1679*/
danielk197762c14b32008-11-19 09:05:26 +00001680static void minmaxStep(
1681 sqlite3_context *context,
1682 int NotUsed,
1683 sqlite3_value **argv
1684){
danielk197788208052004-05-25 01:13:20 +00001685 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001686 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001687 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001688
drh9eb516c2004-07-18 20:52:32 +00001689 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001690 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001691
dan6fb2b542018-06-19 17:13:11 +00001692 if( sqlite3_value_type(pArg)==SQLITE_NULL ){
drh94a6d992012-02-02 18:42:09 +00001693 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1694 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001695 int max;
1696 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001697 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001698 /* This step function is used for both the min() and max() aggregates,
1699 ** the only difference between the two being that the sense of the
1700 ** comparison is inverted. For the max() aggregate, the
1701 ** sqlite3_user_data() function returns (void *)-1. For min() it
1702 ** returns (void *)db, where db is the sqlite3* database pointer.
1703 ** Therefore the next statement sets variable 'max' to 1 for the max()
1704 ** aggregate, or 0 for min().
1705 */
drh309b3382007-03-17 17:52:42 +00001706 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001707 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001708 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001709 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001710 }else{
1711 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001712 }
drh268380c2004-02-25 13:47:31 +00001713 }else{
drh035e5632014-09-16 14:16:31 +00001714 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001715 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001716 }
1717}
dan6fb2b542018-06-19 17:13:11 +00001718static void minMaxValueFinalize(sqlite3_context *context, int bValue){
danielk197788208052004-05-25 01:13:20 +00001719 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001720 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1721 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001722 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001723 sqlite3_result_value(context, pRes);
1724 }
dan6fb2b542018-06-19 17:13:11 +00001725 if( bValue==0 ) sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001726 }
1727}
dan67a9b8e2018-06-22 20:51:35 +00001728#ifndef SQLITE_OMIT_WINDOWFUNC
dan6fb2b542018-06-19 17:13:11 +00001729static void minMaxValue(sqlite3_context *context){
drhc7bf5712018-07-09 22:49:01 +00001730 minMaxValueFinalize(context, 1);
dan6fb2b542018-06-19 17:13:11 +00001731}
dan67a9b8e2018-06-22 20:51:35 +00001732#else
1733# define minMaxValue 0
1734#endif /* SQLITE_OMIT_WINDOWFUNC */
dan6fb2b542018-06-19 17:13:11 +00001735static void minMaxFinalize(sqlite3_context *context){
drhc7bf5712018-07-09 22:49:01 +00001736 minMaxValueFinalize(context, 0);
dan6fb2b542018-06-19 17:13:11 +00001737}
drhdd5baa92002-02-27 19:50:59 +00001738
drhb0689692007-11-01 17:38:30 +00001739/*
1740** group_concat(EXPR, ?SEPARATOR?)
drhf06db3e2021-10-01 00:25:06 +00001741**
1742** The SEPARATOR goes before the EXPR string. This is tragic. The
1743** groupConcatInverse() implementation would have been easier if the
1744** SEPARATOR were appended after EXPR. And the order is undocumented,
1745** so we could change it, in theory. But the old behavior has been
1746** around for so long that we dare not, for fear of breaking something.
drhb0689692007-11-01 17:38:30 +00001747*/
larrybrdde13e62021-09-29 00:32:13 +00001748typedef struct {
1749 StrAccum str; /* The accumulated concatenation */
1750#ifndef SQLITE_OMIT_WINDOWFUNC
1751 int nAccum; /* Number of strings presently concatenated */
drhf06db3e2021-10-01 00:25:06 +00001752 int nFirstSepLength; /* Used to detect separator length change */
larrybrdde13e62021-09-29 00:32:13 +00001753 /* If pnSepLengths!=0, refs an array of inter-string separator lengths,
drhf06db3e2021-10-01 00:25:06 +00001754 ** stored as actually incorporated into presently accumulated result.
1755 ** (Hence, its slots in use number nAccum-1 between method calls.)
1756 ** If pnSepLengths==0, nFirstSepLength is the length used throughout.
1757 */
larrybrdde13e62021-09-29 00:32:13 +00001758 int *pnSepLengths;
1759#endif
1760} GroupConcatCtx;
1761
drhb0689692007-11-01 17:38:30 +00001762static void groupConcatStep(
1763 sqlite3_context *context,
1764 int argc,
1765 sqlite3_value **argv
1766){
1767 const char *zVal;
larrybrdde13e62021-09-29 00:32:13 +00001768 GroupConcatCtx *pGCC;
drhb0689692007-11-01 17:38:30 +00001769 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001770 int nVal, nSep;
1771 assert( argc==1 || argc==2 );
1772 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
larrybrdde13e62021-09-29 00:32:13 +00001773 pGCC = (GroupConcatCtx*)sqlite3_aggregate_context(context, sizeof(*pGCC));
1774 if( pGCC ){
drhbb4957f2008-03-20 14:03:29 +00001775 sqlite3 *db = sqlite3_context_db_handle(context);
larrybrdde13e62021-09-29 00:32:13 +00001776 int firstTerm = pGCC->str.mxAlloc==0;
1777 pGCC->str.mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drhf06db3e2021-10-01 00:25:06 +00001778 if( argc==1 ){
1779 if( !firstTerm ){
1780 sqlite3_str_appendchar(&pGCC->str, 1, ',');
drhb0689692007-11-01 17:38:30 +00001781 }
larrybrdde13e62021-09-29 00:32:13 +00001782#ifndef SQLITE_OMIT_WINDOWFUNC
drhf06db3e2021-10-01 00:25:06 +00001783 else{
1784 pGCC->nFirstSepLength = 1;
1785 }
1786#endif
1787 }else if( !firstTerm ){
1788 zSep = (char*)sqlite3_value_text(argv[1]);
1789 nSep = sqlite3_value_bytes(argv[1]);
1790 if( zSep ){
1791 sqlite3_str_append(&pGCC->str, zSep, nSep);
1792 }
1793#ifndef SQLITE_OMIT_WINDOWFUNC
1794 else{
1795 nSep = 0;
1796 }
larrybrdde13e62021-09-29 00:32:13 +00001797 if( nSep != pGCC->nFirstSepLength || pGCC->pnSepLengths != 0 ){
drhf06db3e2021-10-01 00:25:06 +00001798 int *pnsl = pGCC->pnSepLengths;
1799 if( pnsl == 0 ){
1800 /* First separator length variation seen, start tracking them. */
1801 pnsl = (int*)sqlite3_malloc64((pGCC->nAccum+1) * sizeof(int));
1802 if( pnsl!=0 ){
1803 int i = 0, nA = pGCC->nAccum-1;
1804 while( i<nA ) pnsl[i++] = pGCC->nFirstSepLength;
1805 }
1806 }else{
1807 pnsl = (int*)sqlite3_realloc64(pnsl, pGCC->nAccum * sizeof(int));
1808 }
1809 if( pnsl!=0 ){
drh3dd01112021-10-01 02:45:48 +00001810 if( ALWAYS(pGCC->nAccum>0) ){
drhf06db3e2021-10-01 00:25:06 +00001811 pnsl[pGCC->nAccum-1] = nSep;
1812 }
1813 pGCC->pnSepLengths = pnsl;
1814 }else{
1815 sqlite3StrAccumSetError(&pGCC->str, SQLITE_NOMEM);
1816 }
larrybrdde13e62021-09-29 00:32:13 +00001817 }
1818#endif
drhb0689692007-11-01 17:38:30 +00001819 }
larrybrdde13e62021-09-29 00:32:13 +00001820#ifndef SQLITE_OMIT_WINDOWFUNC
1821 else{
drh3dd01112021-10-01 02:45:48 +00001822 pGCC->nFirstSepLength = sqlite3_value_bytes(argv[1]);
larrybrdde13e62021-09-29 00:32:13 +00001823 }
1824 pGCC->nAccum += 1;
1825#endif
drh07d31172009-02-02 21:57:05 +00001826 zVal = (char*)sqlite3_value_text(argv[0]);
1827 nVal = sqlite3_value_bytes(argv[0]);
larrybrdde13e62021-09-29 00:32:13 +00001828 if( zVal ) sqlite3_str_append(&pGCC->str, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001829 }
1830}
larrybrdde13e62021-09-29 00:32:13 +00001831
dan67a9b8e2018-06-22 20:51:35 +00001832#ifndef SQLITE_OMIT_WINDOWFUNC
dan03854d22018-06-08 11:45:28 +00001833static void groupConcatInverse(
1834 sqlite3_context *context,
1835 int argc,
1836 sqlite3_value **argv
1837){
larrybrdde13e62021-09-29 00:32:13 +00001838 GroupConcatCtx *pGCC;
drhc7bf5712018-07-09 22:49:01 +00001839 assert( argc==1 || argc==2 );
drh260ff082021-10-01 22:48:52 +00001840 (void)argc; /* Suppress unused parameter warning */
dan03854d22018-06-08 11:45:28 +00001841 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
larrybrdde13e62021-09-29 00:32:13 +00001842 pGCC = (GroupConcatCtx*)sqlite3_aggregate_context(context, sizeof(*pGCC));
1843 /* pGCC is always non-NULL since groupConcatStep() will have always
drhfd4b7282018-07-07 19:47:21 +00001844 ** run frist to initialize it */
larrybrdde13e62021-09-29 00:32:13 +00001845 if( ALWAYS(pGCC) ){
drh4fc80672021-10-12 22:55:04 +00001846 int nVS;
1847 /* Must call sqlite3_value_text() to convert the argument into text prior
1848 ** to invoking sqlite3_value_bytes(), in case the text encoding is UTF16 */
1849 (void)sqlite3_value_text(argv[0]);
1850 nVS = sqlite3_value_bytes(argv[0]);
larrybrdde13e62021-09-29 00:32:13 +00001851 pGCC->nAccum -= 1;
1852 if( pGCC->pnSepLengths!=0 ){
1853 assert(pGCC->nAccum >= 0);
1854 if( pGCC->nAccum>0 ){
drhf06db3e2021-10-01 00:25:06 +00001855 nVS += *pGCC->pnSepLengths;
1856 memmove(pGCC->pnSepLengths, pGCC->pnSepLengths+1,
1857 (pGCC->nAccum-1)*sizeof(int));
larrybrdde13e62021-09-29 00:32:13 +00001858 }
dan683b0ff2018-07-05 18:19:29 +00001859 }else{
larrybrdde13e62021-09-29 00:32:13 +00001860 /* If removing single accumulated string, harmlessly over-do. */
1861 nVS += pGCC->nFirstSepLength;
dan03854d22018-06-08 11:45:28 +00001862 }
larrybrdde13e62021-09-29 00:32:13 +00001863 if( nVS>=(int)pGCC->str.nChar ){
1864 pGCC->str.nChar = 0;
dan03854d22018-06-08 11:45:28 +00001865 }else{
larrybrdde13e62021-09-29 00:32:13 +00001866 pGCC->str.nChar -= nVS;
1867 memmove(pGCC->str.zText, &pGCC->str.zText[nVS], pGCC->str.nChar);
dan03854d22018-06-08 11:45:28 +00001868 }
larrybrdde13e62021-09-29 00:32:13 +00001869 if( pGCC->str.nChar==0 ){
1870 pGCC->str.mxAlloc = 0;
1871 sqlite3_free(pGCC->pnSepLengths);
1872 pGCC->pnSepLengths = 0;
1873 }
dan03854d22018-06-08 11:45:28 +00001874 }
1875}
dan67a9b8e2018-06-22 20:51:35 +00001876#else
1877# define groupConcatInverse 0
1878#endif /* SQLITE_OMIT_WINDOWFUNC */
drhb0689692007-11-01 17:38:30 +00001879static void groupConcatFinalize(sqlite3_context *context){
larrybrdde13e62021-09-29 00:32:13 +00001880 GroupConcatCtx *pGCC
1881 = (GroupConcatCtx*)sqlite3_aggregate_context(context, 0);
1882 if( pGCC ){
drh5bf47152021-10-03 00:12:43 +00001883 sqlite3ResultStrAccum(context, &pGCC->str);
larrybrdde13e62021-09-29 00:32:13 +00001884#ifndef SQLITE_OMIT_WINDOWFUNC
1885 sqlite3_free(pGCC->pnSepLengths);
1886#endif
drhb0689692007-11-01 17:38:30 +00001887 }
1888}
dan67a9b8e2018-06-22 20:51:35 +00001889#ifndef SQLITE_OMIT_WINDOWFUNC
dane2f781b2018-05-17 19:24:08 +00001890static void groupConcatValue(sqlite3_context *context){
larrybrdde13e62021-09-29 00:32:13 +00001891 GroupConcatCtx *pGCC
1892 = (GroupConcatCtx*)sqlite3_aggregate_context(context, 0);
1893 if( pGCC ){
1894 StrAccum *pAccum = &pGCC->str;
dane2f781b2018-05-17 19:24:08 +00001895 if( pAccum->accError==SQLITE_TOOBIG ){
1896 sqlite3_result_error_toobig(context);
1897 }else if( pAccum->accError==SQLITE_NOMEM ){
1898 sqlite3_result_error_nomem(context);
1899 }else{
1900 const char *zText = sqlite3_str_value(pAccum);
drhf06db3e2021-10-01 00:25:06 +00001901 sqlite3_result_text(context, zText, pAccum->nChar, SQLITE_TRANSIENT);
dane2f781b2018-05-17 19:24:08 +00001902 }
1903 }
1904}
dan67a9b8e2018-06-22 20:51:35 +00001905#else
1906# define groupConcatValue 0
1907#endif /* SQLITE_OMIT_WINDOWFUNC */
drh4e5ffc52004-08-31 00:52:37 +00001908
drhd3a149e2002-02-24 17:12:53 +00001909/*
drha4741842010-04-25 20:58:37 +00001910** This routine does per-connection function registration. Most
1911** of the built-in functions above are part of the global function set.
1912** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001913*/
drh80738d92016-02-15 00:34:16 +00001914void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001915 int rc = sqlite3_overload_function(db, "MATCH", 2);
1916 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1917 if( rc==SQLITE_NOMEM ){
drh4a642b62016-02-05 01:55:27 +00001918 sqlite3OomFault(db);
danielk1977832a58a2007-06-22 15:21:15 +00001919 }
drh55ef4d92005-08-14 01:20:37 +00001920}
1921
1922/*
drh08652b52019-05-08 17:27:18 +00001923** Re-register the built-in LIKE functions. The caseSensitive
drh55ef4d92005-08-14 01:20:37 +00001924** parameter determines whether or not the LIKE operator is case
drh08652b52019-05-08 17:27:18 +00001925** sensitive.
drh55ef4d92005-08-14 01:20:37 +00001926*/
1927void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1928 struct compareInfo *pInfo;
drhea5c0402019-05-08 19:32:33 +00001929 int flags;
drh55ef4d92005-08-14 01:20:37 +00001930 if( caseSensitive ){
1931 pInfo = (struct compareInfo*)&likeInfoAlt;
drhea5c0402019-05-08 19:32:33 +00001932 flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE;
drh55ef4d92005-08-14 01:20:37 +00001933 }else{
1934 pInfo = (struct compareInfo*)&likeInfoNorm;
drhea5c0402019-05-08 19:32:33 +00001935 flags = SQLITE_FUNC_LIKE;
drh55ef4d92005-08-14 01:20:37 +00001936 }
dan660af932018-06-18 16:55:22 +00001937 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1938 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
drhea5c0402019-05-08 19:32:33 +00001939 sqlite3FindFunction(db, "like", 2, SQLITE_UTF8, 0)->funcFlags |= flags;
1940 sqlite3FindFunction(db, "like", 3, SQLITE_UTF8, 0)->funcFlags |= flags;
drh55ef4d92005-08-14 01:20:37 +00001941}
1942
1943/*
1944** pExpr points to an expression which implements a function. If
1945** it is appropriate to apply the LIKE optimization to that function
drh1d42ea72017-07-27 20:24:29 +00001946** then set aWc[0] through aWc[2] to the wildcard characters and the
1947** escape character and then return TRUE. If the function is not a
1948** LIKE-style function then return FALSE.
1949**
1950** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
1951** operator if c is a string literal that is exactly one byte in length.
1952** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is
1953** no ESCAPE clause.
drh16897072015-03-07 00:57:37 +00001954**
1955** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1956** the function (default for LIKE). If the function makes the distinction
1957** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1958** false.
drh55ef4d92005-08-14 01:20:37 +00001959*/
drhd64fe2f2005-08-28 17:00:23 +00001960int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001961 FuncDef *pDef;
drh1d42ea72017-07-27 20:24:29 +00001962 int nExpr;
drh17988aa2021-01-22 20:28:30 +00001963 assert( pExpr!=0 );
1964 assert( pExpr->op==TK_FUNCTION );
drha4eeccd2021-10-07 17:43:30 +00001965 assert( ExprUseXList(pExpr) );
drh17988aa2021-01-22 20:28:30 +00001966 if( !pExpr->x.pList ){
drh55ef4d92005-08-14 01:20:37 +00001967 return 0;
1968 }
drh1d42ea72017-07-27 20:24:29 +00001969 nExpr = pExpr->x.pList->nExpr;
drhf9751072021-10-07 13:40:29 +00001970 assert( !ExprHasProperty(pExpr, EP_IntValue) );
drh1d42ea72017-07-27 20:24:29 +00001971 pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
drh78b52202020-01-22 23:08:19 +00001972#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1973 if( pDef==0 ) return 0;
1974#endif
drhd36e1042013-09-06 13:10:12 +00001975 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001976 return 0;
1977 }
1978
1979 /* The memcpy() statement assumes that the wildcard characters are
1980 ** the first three statements in the compareInfo structure. The
1981 ** asserts() that follow verify that assumption
1982 */
1983 memcpy(aWc, pDef->pUserData, 3);
1984 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1985 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1986 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drh589c7872020-03-19 18:13:28 +00001987
1988 if( nExpr<3 ){
1989 aWc[3] = 0;
1990 }else{
1991 Expr *pEscape = pExpr->x.pList->a[2].pExpr;
1992 char *zEscape;
1993 if( pEscape->op!=TK_STRING ) return 0;
drhf9751072021-10-07 13:40:29 +00001994 assert( !ExprHasProperty(pEscape, EP_IntValue) );
drh589c7872020-03-19 18:13:28 +00001995 zEscape = pEscape->u.zToken;
1996 if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
1997 if( zEscape[0]==aWc[0] ) return 0;
1998 if( zEscape[0]==aWc[1] ) return 0;
1999 aWc[3] = zEscape[0];
2000 }
2001
drhd36e1042013-09-06 13:10:12 +00002002 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00002003 return 1;
drhdc04c582002-02-24 01:55:15 +00002004}
danielk19778c0a7912008-08-20 14:49:23 +00002005
drh63f8f982020-12-07 21:13:06 +00002006/* Mathematical Constants */
2007#ifndef M_PI
2008# define M_PI 3.141592653589793238462643383279502884
2009#endif
2010#ifndef M_LN10
2011# define M_LN10 2.302585092994045684017991454684364208
2012#endif
2013#ifndef M_LN2
2014# define M_LN2 0.693147180559945309417232121458176568
2015#endif
2016
2017
drhf6e904b2020-12-07 17:15:32 +00002018/* Extra math functions that require linking with -lm
2019*/
2020#ifdef SQLITE_ENABLE_MATH_FUNCTIONS
2021/*
2022** Implementation SQL functions:
2023**
2024** ceil(X)
2025** ceiling(X)
2026** floor(X)
2027**
2028** The sqlite3_user_data() pointer is a pointer to the libm implementation
2029** of the underlying C function.
2030*/
2031static void ceilingFunc(
2032 sqlite3_context *context,
2033 int argc,
2034 sqlite3_value **argv
2035){
2036 assert( argc==1 );
drh63f8f982020-12-07 21:13:06 +00002037 switch( sqlite3_value_numeric_type(argv[0]) ){
2038 case SQLITE_INTEGER: {
drhf6e904b2020-12-07 17:15:32 +00002039 sqlite3_result_int64(context, sqlite3_value_int64(argv[0]));
2040 break;
drh63f8f982020-12-07 21:13:06 +00002041 }
2042 case SQLITE_FLOAT: {
drhf6e904b2020-12-07 17:15:32 +00002043 double (*x)(double) = (double(*)(double))sqlite3_user_data(context);
2044 sqlite3_result_double(context, x(sqlite3_value_double(argv[0])));
2045 break;
2046 }
drh63f8f982020-12-07 21:13:06 +00002047 default: {
2048 break;
2049 }
drhf6e904b2020-12-07 17:15:32 +00002050 }
2051}
2052
2053/*
drh4fd4a7a2021-01-01 01:44:06 +00002054** On some systems, ceil() and floor() are intrinsic function. You are
drhc2dbf352021-01-07 16:10:14 +00002055** unable to take a pointer to these functions. Hence, we here wrap them
drh4fd4a7a2021-01-01 01:44:06 +00002056** in our own actual functions.
2057*/
2058static double xCeil(double x){ return ceil(x); }
2059static double xFloor(double x){ return floor(x); }
2060
2061/*
drhf6e904b2020-12-07 17:15:32 +00002062** Implementation of SQL functions:
2063**
2064** ln(X) - natural logarithm
drh63f8f982020-12-07 21:13:06 +00002065** log(X) - log X base 10
2066** log10(X) - log X base 10
2067** log(B,X) - log X base B
drhf6e904b2020-12-07 17:15:32 +00002068*/
2069static void logFunc(
2070 sqlite3_context *context,
2071 int argc,
2072 sqlite3_value **argv
2073){
drh63f8f982020-12-07 21:13:06 +00002074 double x, b, ans;
drhf6e904b2020-12-07 17:15:32 +00002075 assert( argc==1 || argc==2 );
drh63f8f982020-12-07 21:13:06 +00002076 switch( sqlite3_value_numeric_type(argv[0]) ){
2077 case SQLITE_INTEGER:
2078 case SQLITE_FLOAT:
2079 x = sqlite3_value_double(argv[0]);
drh02d6f9b2021-01-29 16:20:16 +00002080 if( x<=0.0 ) return;
drh63f8f982020-12-07 21:13:06 +00002081 break;
2082 default:
2083 return;
drhf6e904b2020-12-07 17:15:32 +00002084 }
drhf6e904b2020-12-07 17:15:32 +00002085 if( argc==2 ){
drh63f8f982020-12-07 21:13:06 +00002086 switch( sqlite3_value_numeric_type(argv[0]) ){
2087 case SQLITE_INTEGER:
2088 case SQLITE_FLOAT:
drh02d6f9b2021-01-29 16:20:16 +00002089 b = log(x);
2090 if( b<=0.0 ) return;
drh63f8f982020-12-07 21:13:06 +00002091 x = sqlite3_value_double(argv[1]);
drh02d6f9b2021-01-29 16:20:16 +00002092 if( x<=0.0 ) return;
drh63f8f982020-12-07 21:13:06 +00002093 break;
2094 default:
2095 return;
drhf6e904b2020-12-07 17:15:32 +00002096 }
drh02d6f9b2021-01-29 16:20:16 +00002097 ans = log(x)/b;
drh63f8f982020-12-07 21:13:06 +00002098 }else{
2099 ans = log(x);
2100 switch( SQLITE_PTR_TO_INT(sqlite3_user_data(context)) ){
2101 case 1:
2102 /* Convert from natural logarithm to log base 10 */
drh724e2982022-05-25 13:10:29 +00002103 ans /= M_LN10;
drh63f8f982020-12-07 21:13:06 +00002104 break;
2105 case 2:
2106 /* Convert from natural logarithm to log base 2 */
drh724e2982022-05-25 13:10:29 +00002107 ans /= M_LN2;
drh63f8f982020-12-07 21:13:06 +00002108 break;
2109 default:
2110 break;
2111 }
drhf6e904b2020-12-07 17:15:32 +00002112 }
2113 sqlite3_result_double(context, ans);
2114}
drh63f8f982020-12-07 21:13:06 +00002115
2116/*
2117** Functions to converts degrees to radians and radians to degrees.
2118*/
2119static double degToRad(double x){ return x*(M_PI/180.0); }
2120static double radToDeg(double x){ return x*(180.0/M_PI); }
2121
2122/*
2123** Implementation of 1-argument SQL math functions:
2124**
2125** exp(X) - Compute e to the X-th power
2126*/
2127static void math1Func(
2128 sqlite3_context *context,
2129 int argc,
2130 sqlite3_value **argv
2131){
drh63f8f982020-12-07 21:13:06 +00002132 int type0;
2133 double v0, ans;
2134 double (*x)(double);
mistachkind97a4c02020-12-09 23:35:51 +00002135 assert( argc==1 );
drh63f8f982020-12-07 21:13:06 +00002136 type0 = sqlite3_value_numeric_type(argv[0]);
2137 if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return;
2138 v0 = sqlite3_value_double(argv[0]);
2139 x = (double(*)(double))sqlite3_user_data(context);
2140 ans = x(v0);
2141 sqlite3_result_double(context, ans);
2142}
2143
2144/*
2145** Implementation of 2-argument SQL math functions:
2146**
2147** power(X,Y) - Compute X to the Y-th power
2148*/
2149static void math2Func(
2150 sqlite3_context *context,
2151 int argc,
2152 sqlite3_value **argv
2153){
drh63f8f982020-12-07 21:13:06 +00002154 int type0, type1;
2155 double v0, v1, ans;
2156 double (*x)(double,double);
mistachkind97a4c02020-12-09 23:35:51 +00002157 assert( argc==2 );
drh63f8f982020-12-07 21:13:06 +00002158 type0 = sqlite3_value_numeric_type(argv[0]);
2159 if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return;
2160 type1 = sqlite3_value_numeric_type(argv[1]);
2161 if( type1!=SQLITE_INTEGER && type1!=SQLITE_FLOAT ) return;
2162 v0 = sqlite3_value_double(argv[0]);
2163 v1 = sqlite3_value_double(argv[1]);
2164 x = (double(*)(double,double))sqlite3_user_data(context);
2165 ans = x(v0, v1);
2166 sqlite3_result_double(context, ans);
2167}
2168
2169/*
drh81e5a9a2021-04-16 11:05:19 +00002170** Implementation of 0-argument pi() function.
drh63f8f982020-12-07 21:13:06 +00002171*/
2172static void piFunc(
2173 sqlite3_context *context,
2174 int argc,
2175 sqlite3_value **argv
2176){
2177 assert( argc==0 );
2178 sqlite3_result_double(context, M_PI);
2179}
2180
drhf6e904b2020-12-07 17:15:32 +00002181#endif /* SQLITE_ENABLE_MATH_FUNCTIONS */
2182
drh70a8ca32008-08-21 18:49:27 +00002183/*
drh63f8f982020-12-07 21:13:06 +00002184** Implementation of sign(X) function.
2185*/
2186static void signFunc(
2187 sqlite3_context *context,
2188 int argc,
2189 sqlite3_value **argv
2190){
drh63f8f982020-12-07 21:13:06 +00002191 int type0;
2192 double x;
drhe5baf5c2020-12-16 14:20:45 +00002193 UNUSED_PARAMETER(argc);
mistachkind97a4c02020-12-09 23:35:51 +00002194 assert( argc==1 );
drh63f8f982020-12-07 21:13:06 +00002195 type0 = sqlite3_value_numeric_type(argv[0]);
2196 if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return;
2197 x = sqlite3_value_double(argv[0]);
2198 sqlite3_result_int(context, x<0.0 ? -1 : x>0.0 ? +1 : 0);
2199}
2200
drh70a8ca32008-08-21 18:49:27 +00002201/*
peter.d.reid60ec9142014-09-06 16:39:46 +00002202** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00002203** to the global function hash table. This occurs at start-time (as
2204** a consequence of calling sqlite3_initialize()).
2205**
2206** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00002207*/
drh80738d92016-02-15 00:34:16 +00002208void sqlite3RegisterBuiltinFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00002209 /*
2210 ** The following array holds FuncDef structures for all of the functions
2211 ** defined in this file.
2212 **
2213 ** The array cannot be constant since changes are made to the
2214 ** FuncDef.pHash elements at start-time. The elements of this array
2215 ** are read-only after initialization is complete.
drh80738d92016-02-15 00:34:16 +00002216 **
2217 ** For peak efficiency, put the most frequently used function last.
danielk197793ce7412008-09-01 19:14:02 +00002218 */
drh80738d92016-02-15 00:34:16 +00002219 static FuncDef aBuiltinFunc[] = {
drh171c50e2020-01-01 15:43:30 +00002220/***** Functions only available with SQLITE_TESTCTRL_INTERNAL_FUNCTIONS *****/
drh3780f9a2021-09-17 13:07:15 +00002221#if !defined(SQLITE_UNTESTABLE)
drh171c50e2020-01-01 15:43:30 +00002222 TEST_FUNC(implies_nonnull_row, 2, INLINEFUNC_implies_nonnull_row, 0),
2223 TEST_FUNC(expr_compare, 2, INLINEFUNC_expr_compare, 0),
2224 TEST_FUNC(expr_implies_expr, 2, INLINEFUNC_expr_implies_expr, 0),
drh3780f9a2021-09-17 13:07:15 +00002225 TEST_FUNC(affinity, 1, INLINEFUNC_affinity, 0),
2226#endif /* !defined(SQLITE_UNTESTABLE) */
drh171c50e2020-01-01 15:43:30 +00002227/***** Regular functions *****/
drh80738d92016-02-15 00:34:16 +00002228#ifdef SQLITE_SOUNDEX
2229 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
2230#endif
2231#ifndef SQLITE_OMIT_LOAD_EXTENSION
drh64de2a52019-12-31 18:39:23 +00002232 SFUNCTION(load_extension, 1, 0, 0, loadExt ),
2233 SFUNCTION(load_extension, 2, 0, 0, loadExt ),
drh80738d92016-02-15 00:34:16 +00002234#endif
2235#if SQLITE_USER_AUTHENTICATION
2236 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
2237#endif
2238#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
2239 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
2240 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
2241#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
drh25c42962020-01-01 13:55:08 +00002242 INLINE_FUNC(unlikely, 1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
2243 INLINE_FUNC(likelihood, 2, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
2244 INLINE_FUNC(likely, 1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
drh092457b2017-12-29 15:04:49 +00002245#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
drh645682a2022-06-01 11:05:59 +00002246 INLINE_FUNC(sqlite_offset, 1, INLINEFUNC_sqlite_offset, 0 ),
drh092457b2017-12-29 15:04:49 +00002247#endif
danielk197793ce7412008-09-01 19:14:02 +00002248 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
2249 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
2250 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
2251 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
2252 FUNCTION(trim, 1, 3, 0, trimFunc ),
2253 FUNCTION(trim, 2, 3, 0, trimFunc ),
2254 FUNCTION(min, -1, 0, 1, minmaxFunc ),
2255 FUNCTION(min, 0, 0, 1, 0 ),
dan6fb2b542018-06-19 17:13:11 +00002256 WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
drhbb301232021-07-15 19:29:43 +00002257 SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER ),
danielk197793ce7412008-09-01 19:14:02 +00002258 FUNCTION(max, -1, 1, 1, minmaxFunc ),
2259 FUNCTION(max, 0, 1, 1, 0 ),
dan6fb2b542018-06-19 17:13:11 +00002260 WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
drhbb301232021-07-15 19:29:43 +00002261 SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER ),
drha748fdc2012-03-28 01:34:47 +00002262 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
drh9d44f182022-01-09 16:54:02 +00002263 FUNCTION2(subtype, 1, 0, 0, subtypeFunc, SQLITE_FUNC_TYPEOF),
drha748fdc2012-03-28 01:34:47 +00002264 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00002265 FUNCTION(instr, 2, 0, 0, instrFunc ),
drha5c14162013-12-17 15:03:06 +00002266 FUNCTION(printf, -1, 0, 0, printfFunc ),
drh6bcd5852022-01-08 21:00:38 +00002267 FUNCTION(format, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00002268 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
2269 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00002270 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00002271#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00002272 FUNCTION(round, 1, 0, 0, roundFunc ),
2273 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00002274#endif
danielk197793ce7412008-09-01 19:14:02 +00002275 FUNCTION(upper, 1, 0, 0, upperFunc ),
2276 FUNCTION(lower, 1, 0, 0, lowerFunc ),
danielk197793ce7412008-09-01 19:14:02 +00002277 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhffe421c2020-05-13 17:26:38 +00002278 INLINE_FUNC(ifnull, 2, INLINEFUNC_coalesce, 0 ),
drhb1fba282013-11-21 14:33:48 +00002279 VFUNCTION(random, 0, 0, 0, randomFunc ),
2280 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00002281 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
drh03bf26d2015-08-31 21:16:36 +00002282 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
2283 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00002284 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
danielk197793ce7412008-09-01 19:14:02 +00002285 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00002286 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
2287 VFUNCTION(changes, 0, 0, 0, changes ),
2288 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00002289 FUNCTION(replace, 3, 0, 0, replaceFunc ),
2290 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
drh80738d92016-02-15 00:34:16 +00002291 FUNCTION(substr, 2, 0, 0, substrFunc ),
2292 FUNCTION(substr, 3, 0, 0, substrFunc ),
drh1335ec72020-11-23 14:50:43 +00002293 FUNCTION(substring, 2, 0, 0, substrFunc ),
2294 FUNCTION(substring, 3, 0, 0, substrFunc ),
dan6fb2b542018-06-19 17:13:11 +00002295 WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0),
2296 WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0),
2297 WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0),
dan7262ca92018-07-02 12:07:32 +00002298 WAGGREGATE(count, 0,0,0, countStep,
drhbb301232021-07-15 19:29:43 +00002299 countFinalize, countFinalize, countInverse,
2300 SQLITE_FUNC_COUNT|SQLITE_FUNC_ANYORDER ),
dan7262ca92018-07-02 12:07:32 +00002301 WAGGREGATE(count, 1,0,0, countStep,
drhbb301232021-07-15 19:29:43 +00002302 countFinalize, countFinalize, countInverse, SQLITE_FUNC_ANYORDER ),
dan03854d22018-06-08 11:45:28 +00002303 WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep,
dan6fb2b542018-06-19 17:13:11 +00002304 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
dan03854d22018-06-08 11:45:28 +00002305 WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
dan6fb2b542018-06-19 17:13:11 +00002306 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
danielk197793ce7412008-09-01 19:14:02 +00002307
2308 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00002309#ifdef SQLITE_CASE_SENSITIVE_LIKE
danielk197793ce7412008-09-01 19:14:02 +00002310 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
2311 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00002312#else
danielk197793ce7412008-09-01 19:14:02 +00002313 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
2314 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
drhcc153132016-08-04 12:35:17 +00002315#endif
2316#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
2317 FUNCTION(unknown, -1, 0, 0, unknownFunc ),
2318#endif
drh80738d92016-02-15 00:34:16 +00002319 FUNCTION(coalesce, 1, 0, 0, 0 ),
2320 FUNCTION(coalesce, 0, 0, 0, 0 ),
drhf6e904b2020-12-07 17:15:32 +00002321#ifdef SQLITE_ENABLE_MATH_FUNCTIONS
drh4fd4a7a2021-01-01 01:44:06 +00002322 MFUNCTION(ceil, 1, xCeil, ceilingFunc ),
2323 MFUNCTION(ceiling, 1, xCeil, ceilingFunc ),
2324 MFUNCTION(floor, 1, xFloor, ceilingFunc ),
mistachkind97a4c02020-12-09 23:35:51 +00002325#if SQLITE_HAVE_C99_MATH_FUNCS
drh63f8f982020-12-07 21:13:06 +00002326 MFUNCTION(trunc, 1, trunc, ceilingFunc ),
mistachkind97a4c02020-12-09 23:35:51 +00002327#endif
drhf6e904b2020-12-07 17:15:32 +00002328 FUNCTION(ln, 1, 0, 0, logFunc ),
2329 FUNCTION(log, 1, 1, 0, logFunc ),
2330 FUNCTION(log10, 1, 1, 0, logFunc ),
drh63f8f982020-12-07 21:13:06 +00002331 FUNCTION(log2, 1, 2, 0, logFunc ),
drhf6e904b2020-12-07 17:15:32 +00002332 FUNCTION(log, 2, 0, 0, logFunc ),
drh63f8f982020-12-07 21:13:06 +00002333 MFUNCTION(exp, 1, exp, math1Func ),
2334 MFUNCTION(pow, 2, pow, math2Func ),
2335 MFUNCTION(power, 2, pow, math2Func ),
2336 MFUNCTION(mod, 2, fmod, math2Func ),
2337 MFUNCTION(acos, 1, acos, math1Func ),
2338 MFUNCTION(asin, 1, asin, math1Func ),
2339 MFUNCTION(atan, 1, atan, math1Func ),
2340 MFUNCTION(atan2, 2, atan2, math2Func ),
2341 MFUNCTION(cos, 1, cos, math1Func ),
2342 MFUNCTION(sin, 1, sin, math1Func ),
2343 MFUNCTION(tan, 1, tan, math1Func ),
2344 MFUNCTION(cosh, 1, cosh, math1Func ),
2345 MFUNCTION(sinh, 1, sinh, math1Func ),
2346 MFUNCTION(tanh, 1, tanh, math1Func ),
mistachkind97a4c02020-12-09 23:35:51 +00002347#if SQLITE_HAVE_C99_MATH_FUNCS
drh63f8f982020-12-07 21:13:06 +00002348 MFUNCTION(acosh, 1, acosh, math1Func ),
2349 MFUNCTION(asinh, 1, asinh, math1Func ),
2350 MFUNCTION(atanh, 1, atanh, math1Func ),
mistachkind97a4c02020-12-09 23:35:51 +00002351#endif
drh63f8f982020-12-07 21:13:06 +00002352 MFUNCTION(sqrt, 1, sqrt, math1Func ),
2353 MFUNCTION(radians, 1, degToRad, math1Func ),
2354 MFUNCTION(degrees, 1, radToDeg, math1Func ),
2355 FUNCTION(pi, 0, 0, 0, piFunc ),
drhf6e904b2020-12-07 17:15:32 +00002356#endif /* SQLITE_ENABLE_MATH_FUNCTIONS */
drh63f8f982020-12-07 21:13:06 +00002357 FUNCTION(sign, 1, 0, 0, signFunc ),
drhffe421c2020-05-13 17:26:38 +00002358 INLINE_FUNC(coalesce, -1, INLINEFUNC_coalesce, 0 ),
drh3c0e6062020-05-13 18:03:34 +00002359 INLINE_FUNC(iif, 3, INLINEFUNC_iif, 0 ),
danielk197793ce7412008-09-01 19:14:02 +00002360 };
drh545f5872010-04-24 14:02:59 +00002361#ifndef SQLITE_OMIT_ALTERTABLE
2362 sqlite3AlterFunctions();
2363#endif
dandfa552f2018-06-02 21:04:28 +00002364 sqlite3WindowFunctions();
drh80738d92016-02-15 00:34:16 +00002365 sqlite3RegisterDateTimeFunctions();
drh9dbf96b2022-01-06 01:40:09 +00002366 sqlite3RegisterJsonFunctions();
drh80738d92016-02-15 00:34:16 +00002367 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
2368
2369#if 0 /* Enable to print out how the built-in functions are hashed */
2370 {
2371 int i;
2372 FuncDef *p;
2373 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
2374 printf("FUNC-HASH %02d:", i);
2375 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
2376 int n = sqlite3Strlen30(p->zName);
2377 int h = p->zName[0] + n;
drhf9751072021-10-07 13:40:29 +00002378 assert( p->funcFlags & SQLITE_FUNC_BUILTIN );
drh80738d92016-02-15 00:34:16 +00002379 printf(" %s(%d)", p->zName, h);
2380 }
2381 printf("\n");
2382 }
2383 }
2384#endif
drh70a8ca32008-08-21 18:49:27 +00002385}