blob: 03595b70d225a07a6ab16b56e8e07b37fcd089ba [file] [log] [blame]
drhdc04c582002-02-24 01:55:15 +00001/*
2** 2002 February 23
3**
4** The author disclaims copyright to this source code. In place of
5** a legal notice, here is a blessing:
6**
7** May you do good and not evil.
8** May you find forgiveness for yourself and forgive others.
9** May you share freely, never taking more than you give.
10**
11*************************************************************************
peter.d.reid60ec9142014-09-06 16:39:46 +000012** This file contains the C-language implementations for many of the SQL
drhede7ae32014-08-06 11:58:40 +000013** functions of SQLite. (Some function, and in particular the date and
14** time functions, are implemented separately.)
drhdc04c582002-02-24 01:55:15 +000015*/
drhb659e9b2005-01-28 01:29:08 +000016#include "sqliteInt.h"
drhd3a149e2002-02-24 17:12:53 +000017#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000018#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000019#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000020
drh55ef4d92005-08-14 01:20:37 +000021/*
22** Return the collating function associated with a function.
23*/
danielk1977dc1bdc42004-06-11 10:51:27 +000024static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
drha9e03b12015-03-12 06:46:52 +000025 VdbeOp *pOp;
26 assert( context->pVdbe!=0 );
27 pOp = &context->pVdbe->aOp[context->iOp-1];
drha15cc472014-09-25 13:17:30 +000028 assert( pOp->opcode==OP_CollSeq );
29 assert( pOp->p4type==P4_COLLSEQ );
30 return pOp->p4.pColl;
danielk1977dc1bdc42004-06-11 10:51:27 +000031}
32
drh0bce8352002-02-28 00:41:10 +000033/*
drh7a957892012-02-02 17:35:43 +000034** Indicate that the accumulator load should be skipped on this
35** iteration of the aggregate loop.
36*/
37static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
drh21d59782018-01-23 19:24:54 +000038 assert( context->isError<=0 );
39 context->isError = -1;
drh7a957892012-02-02 17:35:43 +000040 context->skipFlag = 1;
41}
42
43/*
drh0bce8352002-02-28 00:41:10 +000044** Implementation of the non-aggregate min() and max() functions
45*/
drhf9b596e2004-05-26 16:54:42 +000046static void minmaxFunc(
47 sqlite3_context *context,
48 int argc,
49 sqlite3_value **argv
50){
drh0bce8352002-02-28 00:41:10 +000051 int i;
drh268380c2004-02-25 13:47:31 +000052 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000053 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000054 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000055
drh65595cd2009-02-02 16:32:55 +000056 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000057 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000058 pColl = sqlite3GetFuncCollSeq(context);
59 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000060 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000061 iBest = 0;
drh9c054832004-05-31 18:51:57 +000062 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000063 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000064 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000065 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000066 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000067 iBest = i;
drh0bce8352002-02-28 00:41:10 +000068 }
69 }
drhf4479502004-05-27 03:12:53 +000070 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000071}
drh0bce8352002-02-28 00:41:10 +000072
drh268380c2004-02-25 13:47:31 +000073/*
74** Return the type of the argument.
75*/
drhf9b596e2004-05-26 16:54:42 +000076static void typeofFunc(
77 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000078 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000079 sqlite3_value **argv
80){
drh9d8e4012017-07-06 13:51:50 +000081 static const char *azType[] = { "integer", "real", "text", "blob", "null" };
82 int i = sqlite3_value_type(argv[0]) - 1;
danielk197762c14b32008-11-19 09:05:26 +000083 UNUSED_PARAMETER(NotUsed);
drh9d8e4012017-07-06 13:51:50 +000084 assert( i>=0 && i<ArraySize(azType) );
85 assert( SQLITE_INTEGER==1 );
86 assert( SQLITE_FLOAT==2 );
87 assert( SQLITE_TEXT==3 );
88 assert( SQLITE_BLOB==4 );
89 assert( SQLITE_NULL==5 );
drh3cef3642017-07-14 19:22:08 +000090 /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns
91 ** the datatype code for the initial datatype of the sqlite3_value object
92 ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT,
93 ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */
drh9d8e4012017-07-06 13:51:50 +000094 sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000095}
96
drh5708d2d2005-06-22 10:53:59 +000097
98/*
drh0bce8352002-02-28 00:41:10 +000099** Implementation of the length() function
100*/
drhf9b596e2004-05-26 16:54:42 +0000101static void lengthFunc(
102 sqlite3_context *context,
103 int argc,
104 sqlite3_value **argv
105){
drh0bce8352002-02-28 00:41:10 +0000106 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000107 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000108 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000109 case SQLITE_BLOB:
110 case SQLITE_INTEGER:
111 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000112 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000113 break;
114 }
drh9c054832004-05-31 18:51:57 +0000115 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000116 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7ea34692018-01-23 04:22:33 +0000117 const unsigned char *z0;
118 unsigned char c;
drh7a521cf2007-04-25 18:23:52 +0000119 if( z==0 ) return;
drh7ea34692018-01-23 04:22:33 +0000120 z0 = z;
121 while( (c = *z)!=0 ){
122 z++;
123 if( c>=0xc0 ){
124 while( (*z & 0xc0)==0x80 ){ z++; z0++; }
125 }
drh4a919112007-05-15 11:55:09 +0000126 }
drh7ea34692018-01-23 04:22:33 +0000127 sqlite3_result_int(context, (int)(z-z0));
drhf9b596e2004-05-26 16:54:42 +0000128 break;
129 }
130 default: {
131 sqlite3_result_null(context);
132 break;
133 }
134 }
drh0bce8352002-02-28 00:41:10 +0000135}
136
137/*
drh2ba3ccc2009-12-08 02:06:08 +0000138** Implementation of the abs() function.
139**
140** IMP: R-23979-26855 The abs(X) function returns the absolute value of
141** the numeric argument X.
drh0bce8352002-02-28 00:41:10 +0000142*/
danielk19770ae8b832004-05-25 12:05:56 +0000143static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000144 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000145 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000146 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000147 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000148 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000149 if( iVal<0 ){
drh693e6712014-01-24 22:58:00 +0000150 if( iVal==SMALLEST_INT64 ){
drheb091cd2013-11-09 19:47:15 +0000151 /* IMP: R-31676-45509 If X is the integer -9223372036854775808
152 ** then abs(X) throws an integer overflow error since there is no
drh2ba3ccc2009-12-08 02:06:08 +0000153 ** equivalent positive 64-bit two complement value. */
drh52fc8492006-02-23 21:43:55 +0000154 sqlite3_result_error(context, "integer overflow", -1);
155 return;
156 }
157 iVal = -iVal;
158 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000159 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000160 break;
161 }
drh9c054832004-05-31 18:51:57 +0000162 case SQLITE_NULL: {
drh2ba3ccc2009-12-08 02:06:08 +0000163 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
drhf9b596e2004-05-26 16:54:42 +0000164 sqlite3_result_null(context);
165 break;
166 }
167 default: {
drh2ba3ccc2009-12-08 02:06:08 +0000168 /* Because sqlite3_value_double() returns 0.0 if the argument is not
169 ** something that can be converted into a number, we have:
drh643091f2014-11-20 23:21:23 +0000170 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
171 ** that cannot be converted to a numeric value.
drh2ba3ccc2009-12-08 02:06:08 +0000172 */
danielk1977f93bbbe2004-05-27 10:30:52 +0000173 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000174 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000175 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000176 break;
177 }
178 }
drh0bce8352002-02-28 00:41:10 +0000179}
180
181/*
drhd55e0722012-10-25 03:07:29 +0000182** Implementation of the instr() function.
183**
184** instr(haystack,needle) finds the first occurrence of needle
185** in haystack and returns the number of previous characters plus 1,
186** or 0 if needle does not occur within haystack.
187**
188** If both haystack and needle are BLOBs, then the result is one more than
189** the number of bytes in haystack prior to the first occurrence of needle,
190** or 0 if needle never occurs in haystack.
191*/
192static void instrFunc(
193 sqlite3_context *context,
194 int argc,
195 sqlite3_value **argv
196){
197 const unsigned char *zHaystack;
198 const unsigned char *zNeedle;
199 int nHaystack;
200 int nNeedle;
201 int typeHaystack, typeNeedle;
202 int N = 1;
203 int isText;
drhc930b402019-01-08 15:18:24 +0000204 unsigned char firstChar;
drhd55e0722012-10-25 03:07:29 +0000205
drh68c804b2012-12-04 11:03:11 +0000206 UNUSED_PARAMETER(argc);
drhd55e0722012-10-25 03:07:29 +0000207 typeHaystack = sqlite3_value_type(argv[0]);
208 typeNeedle = sqlite3_value_type(argv[1]);
209 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
210 nHaystack = sqlite3_value_bytes(argv[0]);
211 nNeedle = sqlite3_value_bytes(argv[1]);
dan895decf2016-12-30 14:15:56 +0000212 if( nNeedle>0 ){
213 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
214 zHaystack = sqlite3_value_blob(argv[0]);
215 zNeedle = sqlite3_value_blob(argv[1]);
216 isText = 0;
217 }else{
218 zHaystack = sqlite3_value_text(argv[0]);
219 zNeedle = sqlite3_value_text(argv[1]);
220 isText = 1;
dan895decf2016-12-30 14:15:56 +0000221 }
drhb30574b2017-03-16 14:28:52 +0000222 if( zNeedle==0 || (nHaystack && zHaystack==0) ) return;
drhc930b402019-01-08 15:18:24 +0000223 firstChar = zNeedle[0];
224 while( nNeedle<=nHaystack
225 && (zHaystack[0]!=firstChar || memcmp(zHaystack, zNeedle, nNeedle)!=0)
226 ){
dan895decf2016-12-30 14:15:56 +0000227 N++;
228 do{
229 nHaystack--;
230 zHaystack++;
231 }while( isText && (zHaystack[0]&0xc0)==0x80 );
232 }
233 if( nNeedle>nHaystack ) N = 0;
drhd55e0722012-10-25 03:07:29 +0000234 }
drhd55e0722012-10-25 03:07:29 +0000235 sqlite3_result_int(context, N);
236}
237
238/*
drha5c14162013-12-17 15:03:06 +0000239** Implementation of the printf() function.
240*/
241static void printfFunc(
242 sqlite3_context *context,
243 int argc,
244 sqlite3_value **argv
245){
246 PrintfArguments x;
247 StrAccum str;
248 const char *zFormat;
249 int n;
drhc0490572015-05-02 11:45:53 +0000250 sqlite3 *db = sqlite3_context_db_handle(context);
drha5c14162013-12-17 15:03:06 +0000251
252 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
253 x.nArg = argc-1;
254 x.nUsed = 0;
255 x.apArg = argv+1;
drhc0490572015-05-02 11:45:53 +0000256 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);
drh5f4a6862016-01-30 12:50:25 +0000257 str.printfFlags = SQLITE_PRINTF_SQLFUNC;
drh0cdbe1a2018-05-09 13:46:26 +0000258 sqlite3_str_appendf(&str, zFormat, &x);
drha5c14162013-12-17 15:03:06 +0000259 n = str.nChar;
260 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
261 SQLITE_DYNAMIC);
262 }
263}
264
265/*
drhf764e6f2007-05-15 01:13:47 +0000266** Implementation of the substr() function.
267**
268** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
269** p1 is 1-indexed. So substr(x,1,1) returns the first character
270** of x. If x is text, then we actually count UTF-8 characters.
271** If x is a blob, then we count bytes.
272**
273** If p1 is negative, then we begin abs(p1) from the end of x[].
shaneh779b8f12009-11-12 05:04:50 +0000274**
drhf7b54962013-05-28 12:11:54 +0000275** If p2 is negative, return the p2 characters preceding p1.
drh0bce8352002-02-28 00:41:10 +0000276*/
drhf9b596e2004-05-26 16:54:42 +0000277static void substrFunc(
278 sqlite3_context *context,
279 int argc,
280 sqlite3_value **argv
281){
drh2646da72005-12-09 20:02:05 +0000282 const unsigned char *z;
283 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000284 int len;
drhf764e6f2007-05-15 01:13:47 +0000285 int p0type;
drh023ae032007-05-08 12:12:16 +0000286 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000287 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000288
drh64f31512007-10-12 19:11:55 +0000289 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000290 if( sqlite3_value_type(argv[1])==SQLITE_NULL
291 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
292 ){
293 return;
294 }
drhf764e6f2007-05-15 01:13:47 +0000295 p0type = sqlite3_value_type(argv[0]);
drh4adc4cb2009-11-11 20:53:31 +0000296 p1 = sqlite3_value_int(argv[1]);
drhf764e6f2007-05-15 01:13:47 +0000297 if( p0type==SQLITE_BLOB ){
298 len = sqlite3_value_bytes(argv[0]);
299 z = sqlite3_value_blob(argv[0]);
300 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000301 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000302 }else{
303 z = sqlite3_value_text(argv[0]);
304 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000305 len = 0;
drh4adc4cb2009-11-11 20:53:31 +0000306 if( p1<0 ){
307 for(z2=z; *z2; len++){
308 SQLITE_SKIP_UTF8(z2);
309 }
drh4a919112007-05-15 11:55:09 +0000310 }
drhf764e6f2007-05-15 01:13:47 +0000311 }
drh883ad042015-02-19 00:29:11 +0000312#ifdef SQLITE_SUBSTR_COMPATIBILITY
313 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
314 ** as substr(X,1,N) - it returns the first N characters of X. This
315 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
316 ** from 2009-02-02 for compatibility of applications that exploited the
317 ** old buggy behavior. */
318 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */
319#endif
drh64f31512007-10-12 19:11:55 +0000320 if( argc==3 ){
321 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000322 if( p2<0 ){
323 p2 = -p2;
324 negP2 = 1;
325 }
drh64f31512007-10-12 19:11:55 +0000326 }else{
drhbb4957f2008-03-20 14:03:29 +0000327 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000328 }
drh0bce8352002-02-28 00:41:10 +0000329 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000330 p1 += len;
drh653bc752002-02-28 03:31:10 +0000331 if( p1<0 ){
332 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000333 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000334 p1 = 0;
335 }
drh0bce8352002-02-28 00:41:10 +0000336 }else if( p1>0 ){
337 p1--;
drh65595cd2009-02-02 16:32:55 +0000338 }else if( p2>0 ){
339 p2--;
drh0bce8352002-02-28 00:41:10 +0000340 }
drh65595cd2009-02-02 16:32:55 +0000341 if( negP2 ){
342 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000343 if( p1<0 ){
344 p2 += p1;
345 p1 = 0;
346 }
347 }
drh65595cd2009-02-02 16:32:55 +0000348 assert( p1>=0 && p2>=0 );
drhf764e6f2007-05-15 01:13:47 +0000349 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000350 while( *z && p1 ){
351 SQLITE_SKIP_UTF8(z);
352 p1--;
drhf764e6f2007-05-15 01:13:47 +0000353 }
drh4a919112007-05-15 11:55:09 +0000354 for(z2=z; *z2 && p2; p2--){
355 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000356 }
drhbbf483f2014-09-09 20:30:24 +0000357 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
358 SQLITE_UTF8);
drhf764e6f2007-05-15 01:13:47 +0000359 }else{
drh4adc4cb2009-11-11 20:53:31 +0000360 if( p1+p2>len ){
361 p2 = len-p1;
362 if( p2<0 ) p2 = 0;
363 }
drhbbf483f2014-09-09 20:30:24 +0000364 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000365 }
drh0bce8352002-02-28 00:41:10 +0000366}
367
368/*
369** Implementation of the round() function
370*/
shanefbd60f82009-02-04 03:59:25 +0000371#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000372static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000373 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000374 double r;
drh50d654d2009-06-03 01:24:54 +0000375 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000376 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000377 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000378 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000379 n = sqlite3_value_int(argv[1]);
380 if( n>30 ) n = 30;
381 if( n<0 ) n = 0;
382 }
drhd589a922006-03-02 03:02:48 +0000383 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000384 r = sqlite3_value_double(argv[0]);
shaneh147e1762010-02-17 04:19:27 +0000385 /* If Y==0 and X will fit in a 64-bit int,
386 ** handle the rounding directly,
387 ** otherwise use printf.
388 */
389 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
390 r = (double)((sqlite_int64)(r+0.5));
391 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
392 r = -(double)((sqlite_int64)((-r)+0.5));
drh50d654d2009-06-03 01:24:54 +0000393 }else{
shaneh147e1762010-02-17 04:19:27 +0000394 zBuf = sqlite3_mprintf("%.*f",n,r);
395 if( zBuf==0 ){
396 sqlite3_result_error_nomem(context);
397 return;
398 }
drh9339da12010-09-30 00:50:49 +0000399 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
drh50d654d2009-06-03 01:24:54 +0000400 sqlite3_free(zBuf);
drh50d654d2009-06-03 01:24:54 +0000401 }
shaneh147e1762010-02-17 04:19:27 +0000402 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000403}
shanefbd60f82009-02-04 03:59:25 +0000404#endif
drhdc04c582002-02-24 01:55:15 +0000405
danielk197726783a52007-08-29 14:06:22 +0000406/*
drhf3cdcdc2015-04-29 16:50:28 +0000407** Allocate nByte bytes of space using sqlite3Malloc(). If the
danielk197726783a52007-08-29 14:06:22 +0000408** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000409** the database handle that malloc() has failed and return NULL.
410** If nByte is larger than the maximum string or blob length, then
411** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000412*/
drhb1a6c3c2008-03-20 16:30:17 +0000413static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000414 char *z;
drh27e62db2009-04-02 10:16:17 +0000415 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000416 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000417 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
418 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
419 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000420 sqlite3_result_error_toobig(context);
421 z = 0;
422 }else{
drhda4ca9d2014-09-09 17:27:35 +0000423 z = sqlite3Malloc(nByte);
drhef31c6a2009-04-02 09:07:12 +0000424 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000425 sqlite3_result_error_nomem(context);
426 }
danielk1977a1644fd2007-08-29 12:31:25 +0000427 }
428 return z;
429}
430
drhdc04c582002-02-24 01:55:15 +0000431/*
432** Implementation of the upper() and lower() SQL functions.
433*/
danielk19770ae8b832004-05-25 12:05:56 +0000434static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000435 char *z1;
436 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000437 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000438 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000439 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000440 n = sqlite3_value_bytes(argv[0]);
441 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
442 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000443 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000444 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000445 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000446 for(i=0; i<n; i++){
447 z1[i] = (char)sqlite3Toupper(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000448 }
drhdf901d32011-10-13 18:00:11 +0000449 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000450 }
drhdc04c582002-02-24 01:55:15 +0000451 }
452}
danielk19770ae8b832004-05-25 12:05:56 +0000453static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdf901d32011-10-13 18:00:11 +0000454 char *z1;
drh7a521cf2007-04-25 18:23:52 +0000455 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000456 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000457 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000458 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000459 n = sqlite3_value_bytes(argv[0]);
460 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
461 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000462 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000463 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000464 if( z1 ){
drhdf901d32011-10-13 18:00:11 +0000465 for(i=0; i<n; i++){
466 z1[i] = sqlite3Tolower(z2[i]);
drh7a521cf2007-04-25 18:23:52 +0000467 }
drhdf901d32011-10-13 18:00:11 +0000468 sqlite3_result_text(context, z1, n, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000469 }
drhdc04c582002-02-24 01:55:15 +0000470 }
471}
472
drhae6bb952009-11-11 00:24:31 +0000473/*
drhcca9f3d2013-09-06 15:23:29 +0000474** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
475** as VDBE code so that unused argument values do not have to be computed.
476** However, we still need some kind of function implementation for this
477** routines in the function table. The noopFunc macro provides this.
478** noopFunc will never be called so it doesn't matter what the implementation
479** is. We might as well use the "version()" function as a substitute.
drhae6bb952009-11-11 00:24:31 +0000480*/
drhcca9f3d2013-09-06 15:23:29 +0000481#define noopFunc versionFunc /* Substitute function - never called */
drh3212e182002-02-28 00:46:26 +0000482
483/*
drhf9ffac92002-03-02 19:00:31 +0000484** Implementation of random(). Return a random integer.
485*/
drhf9b596e2004-05-26 16:54:42 +0000486static void randomFunc(
487 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000488 int NotUsed,
489 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000490){
drh52fc8492006-02-23 21:43:55 +0000491 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000492 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000493 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000494 if( r<0 ){
495 /* We need to prevent a random number of 0x8000000000000000
496 ** (or -9223372036854775808) since when you do abs() of that
497 ** number of you get the same value back again. To do this
498 ** in a way that is testable, mask the sign bit off of negative
499 ** values, resulting in a positive value. Then take the
500 ** 2s complement of that positive value. The end result can
501 ** therefore be no less than -9223372036854775807.
502 */
drhaf8001b2012-02-11 19:53:24 +0000503 r = -(r & LARGEST_INT64);
drh3034e3d2009-04-02 14:05:21 +0000504 }
drh52fc8492006-02-23 21:43:55 +0000505 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000506}
507
508/*
drh137c7282007-01-29 17:58:28 +0000509** Implementation of randomblob(N). Return a random blob
510** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000511*/
drh137c7282007-01-29 17:58:28 +0000512static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000513 sqlite3_context *context,
514 int argc,
515 sqlite3_value **argv
516){
drh3cb79202019-01-18 14:53:15 +0000517 sqlite3_int64 n;
drh137c7282007-01-29 17:58:28 +0000518 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000519 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000520 UNUSED_PARAMETER(argc);
drh3cb79202019-01-18 14:53:15 +0000521 n = sqlite3_value_int64(argv[0]);
drh023ae032007-05-08 12:12:16 +0000522 if( n<1 ){
523 n = 1;
524 }
danielk1977a1644fd2007-08-29 12:31:25 +0000525 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000526 if( p ){
drh2fa18682008-03-19 14:15:34 +0000527 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000528 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000529 }
drh63cf66f2007-01-29 15:50:05 +0000530}
531
532/*
drh6ed41ad2002-04-06 14:10:47 +0000533** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000534** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000535*/
danielk197751ad0ec2004-05-24 12:39:02 +0000536static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000537 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000538 int NotUsed,
539 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000540){
drhfa4a4b92008-03-19 21:45:51 +0000541 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000542 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000543 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
544 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
545 ** function. */
drhf9b596e2004-05-26 16:54:42 +0000546 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000547}
548
rdcf146a772004-02-25 22:51:06 +0000549/*
drhab2f1f92010-01-11 18:26:42 +0000550** Implementation of the changes() SQL function.
551**
552** IMP: R-62073-11209 The changes() SQL function is a wrapper
553** around the sqlite3_changes() C/C++ function and hence follows the same
554** rules for counting changes.
rdcf146a772004-02-25 22:51:06 +0000555*/
danielk1977b28af712004-06-21 06:50:26 +0000556static void changes(
drhf9b596e2004-05-26 16:54:42 +0000557 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000558 int NotUsed,
559 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000560){
drhfa4a4b92008-03-19 21:45:51 +0000561 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000562 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000563 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000564}
rdcf146a772004-02-25 22:51:06 +0000565
566/*
danielk1977b28af712004-06-21 06:50:26 +0000567** Implementation of the total_changes() SQL function. The return value is
568** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000569*/
danielk1977b28af712004-06-21 06:50:26 +0000570static void total_changes(
571 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000572 int NotUsed,
573 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000574){
drhfa4a4b92008-03-19 21:45:51 +0000575 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000576 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000577 /* IMP: R-52756-41993 This function is a wrapper around the
578 ** sqlite3_total_changes() C/C++ interface. */
danielk1977b28af712004-06-21 06:50:26 +0000579 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000580}
581
drh6ed41ad2002-04-06 14:10:47 +0000582/*
drh4e5ffc52004-08-31 00:52:37 +0000583** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000584*/
drh4e5ffc52004-08-31 00:52:37 +0000585struct compareInfo {
drh07e83472016-01-11 03:48:18 +0000586 u8 matchAll; /* "*" or "%" */
587 u8 matchOne; /* "?" or "_" */
588 u8 matchSet; /* "[" or 0 */
589 u8 noCase; /* true to ignore case differences */
danielk1977d02eb1f2004-06-06 09:44:03 +0000590};
drh55ef4d92005-08-14 01:20:37 +0000591
drhb9175ae2007-12-07 18:39:04 +0000592/*
593** For LIKE and GLOB matching on EBCDIC machines, assume that every
drhb0870482015-06-17 13:20:54 +0000594** character is exactly one byte in size. Also, provde the Utf8Read()
595** macro for fast reading of the next character in the common case where
596** the next character is ASCII.
drhb9175ae2007-12-07 18:39:04 +0000597*/
598#if defined(SQLITE_EBCDIC)
drh88b33222014-09-25 03:51:37 +0000599# define sqlite3Utf8Read(A) (*((*A)++))
drhb0870482015-06-17 13:20:54 +0000600# define Utf8Read(A) (*(A++))
drhb9175ae2007-12-07 18:39:04 +0000601#else
drhb0870482015-06-17 13:20:54 +0000602# define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))
drhb9175ae2007-12-07 18:39:04 +0000603#endif
604
drh4e5ffc52004-08-31 00:52:37 +0000605static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000606/* The correct SQL-92 behavior is for the LIKE operator to ignore
607** case. Thus 'a' LIKE 'A' would be true. */
608static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
609/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
610** is case sensitive causing 'a' LIKE 'A' to be false */
611static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000612
613/*
drh698a01c2016-12-01 18:49:40 +0000614** Possible error returns from patternMatch()
615*/
616#define SQLITE_MATCH 0
617#define SQLITE_NOMATCH 1
618#define SQLITE_NOWILDCARDMATCH 2
619
620/*
621** Compare two UTF-8 strings for equality where the first string is
622** a GLOB or LIKE expression. Return values:
623**
624** SQLITE_MATCH: Match
625** SQLITE_NOMATCH: No match
626** SQLITE_NOWILDCARDMATCH: No match in spite of having * or % wildcards.
drh0ac65892002-04-20 14:24:41 +0000627**
drh4e5ffc52004-08-31 00:52:37 +0000628** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000629**
drh4e5ffc52004-08-31 00:52:37 +0000630** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000631**
drh4e5ffc52004-08-31 00:52:37 +0000632** '?' Matches exactly one character.
633**
634** [...] Matches one character from the enclosed list of
635** characters.
636**
637** [^...] Matches one character not in the enclosed list.
638**
639** With the [...] and [^...] matching, a ']' character can be included
640** in the list by making it the first character after '[' or '^'. A
641** range of characters can be specified using '-'. Example:
642** "[a-z]" matches any single lower-case letter. To match a '-', make
643** it the last character in the list.
644**
drh9fdfdc82014-09-25 11:08:57 +0000645** Like matching rules:
646**
647** '%' Matches any sequence of zero or more characters
648**
649*** '_' Matches any one character
650**
651** Ec Where E is the "esc" character and c is any other
652** character, including '%', '_', and esc, match exactly c.
653**
drhb0870482015-06-17 13:20:54 +0000654** The comments within this routine usually assume glob matching.
drh9fdfdc82014-09-25 11:08:57 +0000655**
drh4e5ffc52004-08-31 00:52:37 +0000656** This routine is usually quick, but can be N**2 in the worst case.
drh0ac65892002-04-20 14:24:41 +0000657*/
danielk19777c6303c2004-11-17 16:41:29 +0000658static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000659 const u8 *zPattern, /* The glob pattern */
660 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000661 const struct compareInfo *pInfo, /* Information about how to do the compare */
drh698a01c2016-12-01 18:49:40 +0000662 u32 matchOther /* The escape char (LIKE) or '[' (GLOB) */
danielk197751ad0ec2004-05-24 12:39:02 +0000663){
drh9fdfdc82014-09-25 11:08:57 +0000664 u32 c, c2; /* Next pattern and input string chars */
665 u32 matchOne = pInfo->matchOne; /* "?" or "_" */
666 u32 matchAll = pInfo->matchAll; /* "*" or "%" */
drh9fdfdc82014-09-25 11:08:57 +0000667 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
668 const u8 *zEscaped = 0; /* One past the last escaped input char */
drh88b33222014-09-25 03:51:37 +0000669
drhb0870482015-06-17 13:20:54 +0000670 while( (c = Utf8Read(zPattern))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000671 if( c==matchAll ){ /* Match "*" */
672 /* Skip over multiple "*" characters in the pattern. If there
673 ** are also "?" characters, skip those as well, but consume a
674 ** single character of the input string for each "?" skipped */
drhb0870482015-06-17 13:20:54 +0000675 while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
drh42610962012-09-17 18:56:32 +0000676 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
drh698a01c2016-12-01 18:49:40 +0000677 return SQLITE_NOWILDCARDMATCH;
drh4e5ffc52004-08-31 00:52:37 +0000678 }
danielk1977ad7dd422004-06-06 12:41:49 +0000679 }
drh66150952007-07-23 19:12:41 +0000680 if( c==0 ){
drh698a01c2016-12-01 18:49:40 +0000681 return SQLITE_MATCH; /* "*" at the end of the pattern matches */
drh88b33222014-09-25 03:51:37 +0000682 }else if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000683 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000684 c = sqlite3Utf8Read(&zPattern);
drh698a01c2016-12-01 18:49:40 +0000685 if( c==0 ) return SQLITE_NOWILDCARDMATCH;
drh88b33222014-09-25 03:51:37 +0000686 }else{
drh9fdfdc82014-09-25 11:08:57 +0000687 /* "[...]" immediately follows the "*". We have to do a slow
688 ** recursive search in this case, but it is an unusual case. */
drh88b33222014-09-25 03:51:37 +0000689 assert( matchOther<0x80 ); /* '[' is a single-byte character */
drh698a01c2016-12-01 18:49:40 +0000690 while( *zString ){
691 int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther);
692 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh88b33222014-09-25 03:51:37 +0000693 SQLITE_SKIP_UTF8(zString);
694 }
drh698a01c2016-12-01 18:49:40 +0000695 return SQLITE_NOWILDCARDMATCH;
drh66150952007-07-23 19:12:41 +0000696 }
drh66150952007-07-23 19:12:41 +0000697 }
drh9fdfdc82014-09-25 11:08:57 +0000698
699 /* At this point variable c contains the first character of the
700 ** pattern string past the "*". Search in the input string for the
dan1a4a7372016-12-01 17:34:59 +0000701 ** first matching character and recursively continue the match from
drh9fdfdc82014-09-25 11:08:57 +0000702 ** that point.
703 **
704 ** For a case-insensitive search, set variable cx to be the same as
705 ** c but in the other case and search the input string for either
706 ** c or cx.
707 */
708 if( c<=0x80 ){
drheba21f92017-10-30 18:49:11 +0000709 char zStop[3];
drh698a01c2016-12-01 18:49:40 +0000710 int bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000711 if( noCase ){
drheba21f92017-10-30 18:49:11 +0000712 zStop[0] = sqlite3Toupper(c);
713 zStop[1] = sqlite3Tolower(c);
714 zStop[2] = 0;
drh66150952007-07-23 19:12:41 +0000715 }else{
drheba21f92017-10-30 18:49:11 +0000716 zStop[0] = c;
717 zStop[1] = 0;
drh4e5ffc52004-08-31 00:52:37 +0000718 }
drheba21f92017-10-30 18:49:11 +0000719 while(1){
720 zString += strcspn((const char*)zString, zStop);
721 if( zString[0]==0 ) break;
722 zString++;
drh698a01c2016-12-01 18:49:40 +0000723 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
724 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000725 }
726 }else{
drh698a01c2016-12-01 18:49:40 +0000727 int bMatch;
drhb0870482015-06-17 13:20:54 +0000728 while( (c2 = Utf8Read(zString))!=0 ){
drh9fdfdc82014-09-25 11:08:57 +0000729 if( c2!=c ) continue;
drh698a01c2016-12-01 18:49:40 +0000730 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
731 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
drh9fdfdc82014-09-25 11:08:57 +0000732 }
drh66150952007-07-23 19:12:41 +0000733 }
drh698a01c2016-12-01 18:49:40 +0000734 return SQLITE_NOWILDCARDMATCH;
drh88b33222014-09-25 03:51:37 +0000735 }
drh88b33222014-09-25 03:51:37 +0000736 if( c==matchOther ){
drh07e83472016-01-11 03:48:18 +0000737 if( pInfo->matchSet==0 ){
drh88b33222014-09-25 03:51:37 +0000738 c = sqlite3Utf8Read(&zPattern);
drh698a01c2016-12-01 18:49:40 +0000739 if( c==0 ) return SQLITE_NOMATCH;
drh9fdfdc82014-09-25 11:08:57 +0000740 zEscaped = zPattern;
drh88b33222014-09-25 03:51:37 +0000741 }else{
742 u32 prior_c = 0;
drh9fdfdc82014-09-25 11:08:57 +0000743 int seen = 0;
744 int invert = 0;
drh88b33222014-09-25 03:51:37 +0000745 c = sqlite3Utf8Read(&zString);
drh698a01c2016-12-01 18:49:40 +0000746 if( c==0 ) return SQLITE_NOMATCH;
drh88b33222014-09-25 03:51:37 +0000747 c2 = sqlite3Utf8Read(&zPattern);
748 if( c2=='^' ){
749 invert = 1;
750 c2 = sqlite3Utf8Read(&zPattern);
751 }
752 if( c2==']' ){
753 if( c==']' ) seen = 1;
754 c2 = sqlite3Utf8Read(&zPattern);
755 }
756 while( c2 && c2!=']' ){
757 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
758 c2 = sqlite3Utf8Read(&zPattern);
759 if( c>=prior_c && c<=c2 ) seen = 1;
760 prior_c = 0;
761 }else{
762 if( c==c2 ){
763 seen = 1;
764 }
765 prior_c = c2;
766 }
767 c2 = sqlite3Utf8Read(&zPattern);
768 }
769 if( c2==0 || (seen ^ invert)==0 ){
drh698a01c2016-12-01 18:49:40 +0000770 return SQLITE_NOMATCH;
drh88b33222014-09-25 03:51:37 +0000771 }
772 continue;
773 }
774 }
drhb0870482015-06-17 13:20:54 +0000775 c2 = Utf8Read(zString);
drh88b33222014-09-25 03:51:37 +0000776 if( c==c2 ) continue;
drhc80937a2016-06-06 01:48:14 +0000777 if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){
drh9fdfdc82014-09-25 11:08:57 +0000778 continue;
779 }
780 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
drh698a01c2016-12-01 18:49:40 +0000781 return SQLITE_NOMATCH;
danielk197751ad0ec2004-05-24 12:39:02 +0000782 }
drh698a01c2016-12-01 18:49:40 +0000783 return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH;
drh0ac65892002-04-20 14:24:41 +0000784}
drh4e5ffc52004-08-31 00:52:37 +0000785
drh55ef4d92005-08-14 01:20:37 +0000786/*
drh698a01c2016-12-01 18:49:40 +0000787** The sqlite3_strglob() interface. Return 0 on a match (like strcmp()) and
788** non-zero if there is no match.
drh56282a52013-04-10 16:13:38 +0000789*/
790int sqlite3_strglob(const char *zGlobPattern, const char *zString){
drh698a01c2016-12-01 18:49:40 +0000791 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
drh56282a52013-04-10 16:13:38 +0000792}
793
794/*
drh698a01c2016-12-01 18:49:40 +0000795** The sqlite3_strlike() interface. Return 0 on a match and non-zero for
796** a miss - like strcmp().
drh8b4a94a2015-11-24 21:23:59 +0000797*/
798int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){
drh698a01c2016-12-01 18:49:40 +0000799 return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
drh8b4a94a2015-11-24 21:23:59 +0000800}
801
802/*
drh55ef4d92005-08-14 01:20:37 +0000803** Count the number of times that the LIKE operator (or GLOB which is
804** just a variation of LIKE) gets called. This is used for testing
805** only.
806*/
807#ifdef SQLITE_TEST
808int sqlite3_like_count = 0;
809#endif
810
danielk19773f6b0872004-06-17 05:36:44 +0000811
812/*
813** Implementation of the like() SQL function. This function implements
814** the build-in LIKE operator. The first argument to the function is the
815** pattern and the second argument is the string. So, the SQL statements:
816**
817** A LIKE B
818**
819** is implemented as like(B,A).
820**
drh55ef4d92005-08-14 01:20:37 +0000821** This same function (with a different compareInfo structure) computes
822** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000823*/
824static void likeFunc(
825 sqlite3_context *context,
826 int argc,
827 sqlite3_value **argv
828){
drhbeb818d2007-05-08 15:34:47 +0000829 const unsigned char *zA, *zB;
drh07e83472016-01-11 03:48:18 +0000830 u32 escape;
drh27e62db2009-04-02 10:16:17 +0000831 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000832 sqlite3 *db = sqlite3_context_db_handle(context);
drh07e83472016-01-11 03:48:18 +0000833 struct compareInfo *pInfo = sqlite3_user_data(context);
drhbeb818d2007-05-08 15:34:47 +0000834
drh41d2e662015-12-01 21:23:07 +0000835#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
836 if( sqlite3_value_type(argv[0])==SQLITE_BLOB
837 || sqlite3_value_type(argv[1])==SQLITE_BLOB
838 ){
839#ifdef SQLITE_TEST
840 sqlite3_like_count++;
841#endif
842 sqlite3_result_int(context, 0);
843 return;
844 }
845#endif
drh1f0feef2007-05-15 13:27:07 +0000846 zB = sqlite3_value_text(argv[0]);
847 zA = sqlite3_value_text(argv[1]);
848
drhbeb818d2007-05-08 15:34:47 +0000849 /* Limit the length of the LIKE or GLOB pattern to avoid problems
850 ** of deep recursion and N*N behavior in patternCompare().
851 */
drh27e62db2009-04-02 10:16:17 +0000852 nPat = sqlite3_value_bytes(argv[0]);
853 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
854 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
855 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000856 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
857 return;
858 }
drh1f0feef2007-05-15 13:27:07 +0000859 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000860
danielk19777c6303c2004-11-17 16:41:29 +0000861 if( argc==3 ){
862 /* The escape character string must consist of a single UTF-8 character.
863 ** Otherwise, return an error.
864 */
865 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000866 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000867 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000868 sqlite3_result_error(context,
869 "ESCAPE expression must be a single character", -1);
870 return;
871 }
drh42610962012-09-17 18:56:32 +0000872 escape = sqlite3Utf8Read(&zEsc);
drh07e83472016-01-11 03:48:18 +0000873 }else{
874 escape = pInfo->matchSet;
danielk19777c6303c2004-11-17 16:41:29 +0000875 }
danielk19773f6b0872004-06-17 05:36:44 +0000876 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000877#ifdef SQLITE_TEST
878 sqlite3_like_count++;
879#endif
drhf49759b2017-08-25 19:51:51 +0000880 sqlite3_result_int(context,
881 patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
danielk197751ad0ec2004-05-24 12:39:02 +0000882 }
drh8912d102002-05-26 21:34:58 +0000883}
884
885/*
886** Implementation of the NULLIF(x,y) function. The result is the first
887** argument if the arguments are different. The result is NULL if the
888** arguments are equal to each other.
889*/
drhf9b596e2004-05-26 16:54:42 +0000890static void nullifFunc(
891 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000892 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000893 sqlite3_value **argv
894){
danielk1977dc1bdc42004-06-11 10:51:27 +0000895 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000896 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000897 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000898 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000899 }
drh0ac65892002-04-20 14:24:41 +0000900}
901
drh647cb0e2002-11-04 19:32:25 +0000902/*
drh47baebc2009-08-14 16:01:24 +0000903** Implementation of the sqlite_version() function. The result is the version
drh647cb0e2002-11-04 19:32:25 +0000904** of the SQLite library that is running.
905*/
drhf9b596e2004-05-26 16:54:42 +0000906static void versionFunc(
907 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000908 int NotUsed,
909 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000910){
danielk197762c14b32008-11-19 09:05:26 +0000911 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000912 /* IMP: R-48699-48617 This function is an SQL wrapper around the
913 ** sqlite3_libversion() C-interface. */
914 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000915}
916
drh47baebc2009-08-14 16:01:24 +0000917/*
918** Implementation of the sqlite_source_id() function. The result is a string
919** that identifies the particular version of the source code used to build
920** SQLite.
921*/
922static void sourceidFunc(
923 sqlite3_context *context,
924 int NotUsed,
925 sqlite3_value **NotUsed2
926){
927 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhab2f1f92010-01-11 18:26:42 +0000928 /* IMP: R-24470-31136 This function is an SQL wrapper around the
929 ** sqlite3_sourceid() C interface. */
930 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
drh47baebc2009-08-14 16:01:24 +0000931}
932
shanehbdea6d12010-02-23 04:19:54 +0000933/*
drh3ca84ef2011-04-25 18:03:10 +0000934** Implementation of the sqlite_log() function. This is a wrapper around
935** sqlite3_log(). The return value is NULL. The function exists purely for
936** its side-effects.
937*/
drh840561f2011-04-27 18:08:42 +0000938static void errlogFunc(
drh3ca84ef2011-04-25 18:03:10 +0000939 sqlite3_context *context,
940 int argc,
941 sqlite3_value **argv
942){
943 UNUSED_PARAMETER(argc);
944 UNUSED_PARAMETER(context);
945 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
946}
947
948/*
shanehdc97a8c2010-02-23 20:08:35 +0000949** Implementation of the sqlite_compileoption_used() function.
950** The result is an integer that identifies if the compiler option
951** was used to build SQLite.
shanehbdea6d12010-02-23 04:19:54 +0000952*/
shanehdc97a8c2010-02-23 20:08:35 +0000953#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
954static void compileoptionusedFunc(
shanehbdea6d12010-02-23 04:19:54 +0000955 sqlite3_context *context,
shanehdc97a8c2010-02-23 20:08:35 +0000956 int argc,
957 sqlite3_value **argv
shanehbdea6d12010-02-23 04:19:54 +0000958){
shanehdc97a8c2010-02-23 20:08:35 +0000959 const char *zOptName;
960 assert( argc==1 );
961 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000962 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
963 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
964 ** function.
965 */
drh264a2d42010-02-25 15:28:41 +0000966 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
shanehdc97a8c2010-02-23 20:08:35 +0000967 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
shanehdc97a8c2010-02-23 20:08:35 +0000968 }
shanehbdea6d12010-02-23 04:19:54 +0000969}
shanehdc97a8c2010-02-23 20:08:35 +0000970#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
971
972/*
973** Implementation of the sqlite_compileoption_get() function.
974** The result is a string that identifies the compiler options
975** used to build SQLite.
976*/
977#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
978static void compileoptiongetFunc(
979 sqlite3_context *context,
980 int argc,
981 sqlite3_value **argv
982){
983 int n;
984 assert( argc==1 );
985 UNUSED_PARAMETER(argc);
drha3e414c2010-08-03 18:06:25 +0000986 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
987 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
988 */
shanehdc97a8c2010-02-23 20:08:35 +0000989 n = sqlite3_value_int(argv[0]);
990 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
991}
992#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
shanehbdea6d12010-02-23 04:19:54 +0000993
drh137c7282007-01-29 17:58:28 +0000994/* Array for converting from half-bytes (nybbles) into ASCII hex
995** digits. */
996static const char hexdigits[] = {
997 '0', '1', '2', '3', '4', '5', '6', '7',
998 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
999};
danielk1977d641d642004-11-18 15:44:29 +00001000
drh47394702003-08-20 01:03:33 +00001001/*
drh47394702003-08-20 01:03:33 +00001002** Implementation of the QUOTE() function. This function takes a single
1003** argument. If the argument is numeric, the return value is the same as
1004** the argument. If the argument is NULL, the return value is the string
1005** "NULL". Otherwise, the argument is enclosed in single quotes with
1006** single-quote escapes.
1007*/
danielk19770ae8b832004-05-25 12:05:56 +00001008static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +00001009 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +00001010 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +00001011 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +00001012 case SQLITE_FLOAT: {
drh72b3fbc2012-06-19 03:11:25 +00001013 double r1, r2;
drh72b3fbc2012-06-19 03:11:25 +00001014 char zBuf[50];
mistachkin2b434a72012-06-19 04:36:48 +00001015 r1 = sqlite3_value_double(argv[0]);
drh72b3fbc2012-06-19 03:11:25 +00001016 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
1017 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
1018 if( r1!=r2 ){
1019 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
1020 }
1021 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
1022 break;
1023 }
1024 case SQLITE_INTEGER: {
drhf4479502004-05-27 03:12:53 +00001025 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +00001026 break;
1027 }
danielk19773f41e972004-06-08 00:39:01 +00001028 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +00001029 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +00001030 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001031 int nBlob = sqlite3_value_bytes(argv[0]);
1032 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001033 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +00001034 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +00001035 int i;
1036 for(i=0; i<nBlob; i++){
1037 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
1038 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
1039 }
1040 zText[(nBlob*2)+2] = '\'';
1041 zText[(nBlob*2)+3] = '\0';
1042 zText[0] = 'X';
1043 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +00001044 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +00001045 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +00001046 }
1047 break;
1048 }
drh9c054832004-05-31 18:51:57 +00001049 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +00001050 int i,j;
1051 u64 n;
drh2646da72005-12-09 20:02:05 +00001052 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +00001053 char *z;
1054
drh7a521cf2007-04-25 18:23:52 +00001055 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +00001056 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +00001057 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +00001058 if( z ){
1059 z[0] = '\'';
1060 for(i=0, j=1; zArg[i]; i++){
1061 z[j++] = zArg[i];
1062 if( zArg[i]=='\'' ){
1063 z[j++] = '\'';
1064 }
drhf9b596e2004-05-26 16:54:42 +00001065 }
danielk1977a1644fd2007-08-29 12:31:25 +00001066 z[j++] = '\'';
1067 z[j] = 0;
1068 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +00001069 }
drha0df4cc2009-02-02 17:29:59 +00001070 break;
1071 }
1072 default: {
1073 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
1074 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
1075 break;
drhf9b596e2004-05-26 16:54:42 +00001076 }
drh47394702003-08-20 01:03:33 +00001077 }
1078}
1079
drh137c7282007-01-29 17:58:28 +00001080/*
drhd495d8c2013-02-22 19:34:25 +00001081** The unicode() function. Return the integer unicode code-point value
1082** for the first character of the input string.
1083*/
1084static void unicodeFunc(
1085 sqlite3_context *context,
1086 int argc,
1087 sqlite3_value **argv
1088){
1089 const unsigned char *z = sqlite3_value_text(argv[0]);
drh1d59d032013-03-01 23:40:26 +00001090 (void)argc;
drhd495d8c2013-02-22 19:34:25 +00001091 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
1092}
1093
1094/*
1095** The char() function takes zero or more arguments, each of which is
1096** an integer. It constructs a string where each character of the string
1097** is the unicode character for the corresponding integer argument.
1098*/
1099static void charFunc(
1100 sqlite3_context *context,
1101 int argc,
1102 sqlite3_value **argv
1103){
1104 unsigned char *z, *zOut;
1105 int i;
drhf3cdcdc2015-04-29 16:50:28 +00001106 zOut = z = sqlite3_malloc64( argc*4+1 );
drhd495d8c2013-02-22 19:34:25 +00001107 if( z==0 ){
1108 sqlite3_result_error_nomem(context);
1109 return;
1110 }
1111 for(i=0; i<argc; i++){
mistachkinc9545442013-02-26 05:42:30 +00001112 sqlite3_int64 x;
drhd495d8c2013-02-22 19:34:25 +00001113 unsigned c;
1114 x = sqlite3_value_int64(argv[i]);
1115 if( x<0 || x>0x10ffff ) x = 0xfffd;
1116 c = (unsigned)(x & 0x1fffff);
drhfe7a5d12013-03-07 14:00:04 +00001117 if( c<0x00080 ){
1118 *zOut++ = (u8)(c&0xFF);
1119 }else if( c<0x00800 ){
1120 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);
1121 *zOut++ = 0x80 + (u8)(c & 0x3F);
1122 }else if( c<0x10000 ){
1123 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);
1124 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1125 *zOut++ = 0x80 + (u8)(c & 0x3F);
drhd495d8c2013-02-22 19:34:25 +00001126 }else{
drhfe7a5d12013-03-07 14:00:04 +00001127 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);
1128 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);
1129 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);
1130 *zOut++ = 0x80 + (u8)(c & 0x3F);
1131 } \
drhd495d8c2013-02-22 19:34:25 +00001132 }
drhbbf483f2014-09-09 20:30:24 +00001133 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
drhd495d8c2013-02-22 19:34:25 +00001134}
1135
1136/*
drh137c7282007-01-29 17:58:28 +00001137** The hex() function. Interpret the argument as a blob. Return
1138** a hexadecimal rendering as text.
1139*/
1140static void hexFunc(
1141 sqlite3_context *context,
1142 int argc,
1143 sqlite3_value **argv
1144){
1145 int i, n;
1146 const unsigned char *pBlob;
1147 char *zHex, *z;
1148 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001149 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +00001150 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +00001151 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +00001152 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +00001153 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +00001154 if( zHex ){
1155 for(i=0; i<n; i++, pBlob++){
1156 unsigned char c = *pBlob;
1157 *(z++) = hexdigits[(c>>4)&0xf];
1158 *(z++) = hexdigits[c&0xf];
1159 }
1160 *z = 0;
1161 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +00001162 }
drh137c7282007-01-29 17:58:28 +00001163}
1164
drh26b6d902007-03-17 13:27:54 +00001165/*
drh8cff3822007-05-02 02:08:28 +00001166** The zeroblob(N) function returns a zero-filled blob of size N bytes.
1167*/
1168static void zeroblobFunc(
1169 sqlite3_context *context,
1170 int argc,
1171 sqlite3_value **argv
1172){
drh98640a32007-06-07 19:08:32 +00001173 i64 n;
dana4d5ae82015-07-24 16:24:37 +00001174 int rc;
drh8cff3822007-05-02 02:08:28 +00001175 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001176 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +00001177 n = sqlite3_value_int64(argv[0]);
dana4d5ae82015-07-24 16:24:37 +00001178 if( n<0 ) n = 0;
1179 rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
1180 if( rc ){
1181 sqlite3_result_error_code(context, rc);
drh98640a32007-06-07 19:08:32 +00001182 }
drh8cff3822007-05-02 02:08:28 +00001183}
1184
1185/*
drh26b6d902007-03-17 13:27:54 +00001186** The replace() function. Three arguments are all strings: call
1187** them A, B, and C. The result is also a string which is derived
drhf7b54962013-05-28 12:11:54 +00001188** from A by replacing every occurrence of B with C. The match
drh26b6d902007-03-17 13:27:54 +00001189** must be exact. Collating sequences are not used.
1190*/
1191static void replaceFunc(
1192 sqlite3_context *context,
1193 int argc,
1194 sqlite3_value **argv
1195){
1196 const unsigned char *zStr; /* The input string A */
1197 const unsigned char *zPattern; /* The pattern string B */
1198 const unsigned char *zRep; /* The replacement string C */
1199 unsigned char *zOut; /* The output */
1200 int nStr; /* Size of zStr */
1201 int nPattern; /* Size of zPattern */
1202 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +00001203 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +00001204 int loopLimit; /* Last zStr[] that might match zPattern[] */
1205 int i, j; /* Loop counters */
drhf3139522018-02-09 23:25:14 +00001206 unsigned cntExpand; /* Number zOut expansions */
1207 sqlite3 *db = sqlite3_context_db_handle(context);
drh26b6d902007-03-17 13:27:54 +00001208
1209 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +00001210 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +00001211 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001212 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001213 nStr = sqlite3_value_bytes(argv[0]);
1214 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001215 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +00001216 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +00001217 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
1218 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +00001219 return;
1220 }
1221 if( zPattern[0]==0 ){
1222 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
1223 sqlite3_result_value(context, argv[0]);
1224 return;
1225 }
drh1f0feef2007-05-15 13:27:07 +00001226 nPattern = sqlite3_value_bytes(argv[1]);
1227 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +00001228 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +00001229 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001230 nRep = sqlite3_value_bytes(argv[2]);
1231 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +00001232 nOut = nStr + 1;
1233 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +00001234 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +00001235 if( zOut==0 ){
1236 return;
drh26b6d902007-03-17 13:27:54 +00001237 }
drh26b6d902007-03-17 13:27:54 +00001238 loopLimit = nStr - nPattern;
drhf3139522018-02-09 23:25:14 +00001239 cntExpand = 0;
drh26b6d902007-03-17 13:27:54 +00001240 for(i=j=0; i<=loopLimit; i++){
1241 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
1242 zOut[j++] = zStr[i];
1243 }else{
drhf3139522018-02-09 23:25:14 +00001244 if( nRep>nPattern ){
1245 nOut += nRep - nPattern;
drhc86d82f2018-02-10 02:31:30 +00001246 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
1247 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
drhf3139522018-02-09 23:25:14 +00001248 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1249 sqlite3_result_error_toobig(context);
1250 sqlite3_free(zOut);
1251 return;
1252 }
drhf3139522018-02-09 23:25:14 +00001253 cntExpand++;
1254 if( (cntExpand&(cntExpand-1))==0 ){
1255 /* Grow the size of the output buffer only on substitutions
1256 ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */
1257 u8 *zOld;
1258 zOld = zOut;
1259 zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1));
1260 if( zOut==0 ){
1261 sqlite3_result_error_nomem(context);
1262 sqlite3_free(zOld);
1263 return;
1264 }
1265 }
drh2e6400b2007-05-08 15:46:18 +00001266 }
drh26b6d902007-03-17 13:27:54 +00001267 memcpy(&zOut[j], zRep, nRep);
1268 j += nRep;
1269 i += nPattern-1;
1270 }
1271 }
drhf3139522018-02-09 23:25:14 +00001272 assert( j+nStr-i+1<=nOut );
drh26b6d902007-03-17 13:27:54 +00001273 memcpy(&zOut[j], &zStr[i], nStr-i);
1274 j += nStr - i;
1275 assert( j<=nOut );
1276 zOut[j] = 0;
1277 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
1278}
1279
drh309b3382007-03-17 17:52:42 +00001280/*
1281** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
1282** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
1283*/
1284static void trimFunc(
1285 sqlite3_context *context,
1286 int argc,
1287 sqlite3_value **argv
1288){
1289 const unsigned char *zIn; /* Input string */
1290 const unsigned char *zCharSet; /* Set of characters to trim */
1291 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +00001292 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +00001293 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +00001294 unsigned char *aLen = 0; /* Length of each character in zCharSet */
1295 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +00001296 int nChar; /* Number of characters in zCharSet */
1297
drh309b3382007-03-17 17:52:42 +00001298 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
1299 return;
1300 }
1301 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001302 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +00001303 nIn = sqlite3_value_bytes(argv[0]);
1304 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +00001305 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +00001306 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +00001307 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +00001308 nChar = 1;
drh8cff3822007-05-02 02:08:28 +00001309 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +00001310 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +00001311 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +00001312 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +00001313 return;
drhd1e3a612007-04-27 21:59:52 +00001314 }else{
1315 const unsigned char *z;
1316 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +00001317 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +00001318 }
1319 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +00001320 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +00001321 if( azChar==0 ){
1322 return;
1323 }
1324 aLen = (unsigned char*)&azChar[nChar];
1325 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +00001326 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +00001327 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +00001328 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +00001329 }
1330 }
drh309b3382007-03-17 17:52:42 +00001331 }
drhd1e3a612007-04-27 21:59:52 +00001332 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +00001333 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +00001334 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +00001335 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001336 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001337 for(i=0; i<nChar; i++){
1338 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +00001339 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +00001340 }
1341 if( i>=nChar ) break;
1342 zIn += len;
1343 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001344 }
1345 }
1346 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001347 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001348 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001349 for(i=0; i<nChar; i++){
1350 len = aLen[i];
1351 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1352 }
1353 if( i>=nChar ) break;
1354 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001355 }
1356 }
drhd1e3a612007-04-27 21:59:52 +00001357 if( zCharSet ){
1358 sqlite3_free(azChar);
1359 }
drh309b3382007-03-17 17:52:42 +00001360 }
1361 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1362}
drh26b6d902007-03-17 13:27:54 +00001363
danielk1977a4de4532008-09-02 15:44:08 +00001364
drhcc153132016-08-04 12:35:17 +00001365#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1366/*
1367** The "unknown" function is automatically substituted in place of
1368** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
1369** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
1370** When the "sqlite3" command-line shell is built using this functionality,
1371** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
1372** involving application-defined functions to be examined in a generic
1373** sqlite3 shell.
1374*/
1375static void unknownFunc(
1376 sqlite3_context *context,
1377 int argc,
1378 sqlite3_value **argv
1379){
1380 /* no-op */
1381}
1382#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
1383
1384
drh2ba3ccc2009-12-08 02:06:08 +00001385/* IMP: R-25361-16150 This function is omitted from SQLite by default. It
1386** is only available if the SQLITE_SOUNDEX compile-time option is used
1387** when SQLite is built.
1388*/
drhd24cc422003-03-27 12:51:24 +00001389#ifdef SQLITE_SOUNDEX
1390/*
1391** Compute the soundex encoding of a word.
drh2ba3ccc2009-12-08 02:06:08 +00001392**
1393** IMP: R-59782-00072 The soundex(X) function returns a string that is the
1394** soundex encoding of the string X.
drhd24cc422003-03-27 12:51:24 +00001395*/
drh137c7282007-01-29 17:58:28 +00001396static void soundexFunc(
1397 sqlite3_context *context,
1398 int argc,
1399 sqlite3_value **argv
1400){
drhd24cc422003-03-27 12:51:24 +00001401 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001402 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001403 int i, j;
1404 static const unsigned char iCode[] = {
1405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1406 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1407 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1409 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1410 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1411 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1412 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1413 };
1414 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001415 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001416 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001417 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001418 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001419 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001420 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001421 for(j=1; j<4 && zIn[i]; i++){
1422 int code = iCode[zIn[i]&0x7f];
1423 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001424 if( code!=prevcode ){
1425 prevcode = code;
1426 zResult[j++] = code + '0';
1427 }
1428 }else{
1429 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001430 }
1431 }
1432 while( j<4 ){
1433 zResult[j++] = '0';
1434 }
1435 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001436 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001437 }else{
drh2ba3ccc2009-12-08 02:06:08 +00001438 /* IMP: R-64894-50321 The string "?000" is returned if the argument
1439 ** is NULL or contains no ASCII alphabetic characters. */
danielk1977d8123362004-06-12 09:25:12 +00001440 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001441 }
1442}
drh2ba3ccc2009-12-08 02:06:08 +00001443#endif /* SQLITE_SOUNDEX */
drhd24cc422003-03-27 12:51:24 +00001444
drhfdb83b22006-06-17 14:12:47 +00001445#ifndef SQLITE_OMIT_LOAD_EXTENSION
1446/*
1447** A function that loads a shared-library extension then returns NULL.
1448*/
1449static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001450 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001451 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001452 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001453 char *zErrMsg = 0;
1454
drh191dd062016-04-21 01:30:09 +00001455 /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc
drh1a55ded2016-04-20 00:30:05 +00001456 ** flag is set. See the sqlite3_enable_load_extension() API.
1457 */
drhf602a162016-04-21 01:58:21 +00001458 if( (db->flags & SQLITE_LoadExtFunc)==0 ){
1459 sqlite3_result_error(context, "not authorized", -1);
1460 return;
1461 }
drh1a55ded2016-04-20 00:30:05 +00001462
drhfdb83b22006-06-17 14:12:47 +00001463 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001464 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001465 }else{
1466 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001467 }
drh7a521cf2007-04-25 18:23:52 +00001468 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001469 sqlite3_result_error(context, zErrMsg, -1);
1470 sqlite3_free(zErrMsg);
1471 }
1472}
1473#endif
1474
danielk197701427a62005-01-11 13:02:33 +00001475
drh0ac65892002-04-20 14:24:41 +00001476/*
drhd3a149e2002-02-24 17:12:53 +00001477** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001478** sum() or avg() aggregate computation.
1479*/
1480typedef struct SumCtx SumCtx;
1481struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001482 double rSum; /* Floating point sum */
1483 i64 iSum; /* Integer sum */
1484 i64 cnt; /* Number of elements summed */
1485 u8 overflow; /* True if integer overflow seen */
1486 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001487};
1488
1489/*
drha97fdd32006-01-12 22:17:50 +00001490** Routines used to compute the sum, average, and total.
1491**
1492** The SUM() function follows the (broken) SQL standard which means
1493** that it returns NULL if it sums over no inputs. TOTAL returns
1494** 0.0 in that case. In addition, TOTAL always returns a float where
1495** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001496** value. TOTAL never fails, but SUM might through an exception if
1497** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001498*/
danielk19770ae8b832004-05-25 12:05:56 +00001499static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001500 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001501 int type;
drh3f219f42005-09-08 19:45:57 +00001502 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001503 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001504 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001505 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001506 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001507 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001508 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001509 i64 v = sqlite3_value_int64(argv[0]);
1510 p->rSum += v;
drh158b9cb2011-03-05 20:59:46 +00001511 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
drha546ef22018-07-07 20:55:16 +00001512 p->approx = p->overflow = 1;
drh29d72102006-02-09 22:13:41 +00001513 }
1514 }else{
drh8c08e862006-02-11 17:34:00 +00001515 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001516 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001517 }
drh739105c2002-05-29 23:22:23 +00001518 }
drhdd5baa92002-02-27 19:50:59 +00001519}
dan67a9b8e2018-06-22 20:51:35 +00001520#ifndef SQLITE_OMIT_WINDOWFUNC
danc3a20c12018-05-23 20:55:37 +00001521static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
1522 SumCtx *p;
1523 int type;
1524 assert( argc==1 );
1525 UNUSED_PARAMETER(argc);
1526 p = sqlite3_aggregate_context(context, sizeof(*p));
1527 type = sqlite3_value_numeric_type(argv[0]);
drhfd4b7282018-07-07 19:47:21 +00001528 /* p is always non-NULL because sumStep() will have been called first
1529 ** to initialize it */
1530 if( ALWAYS(p) && type!=SQLITE_NULL ){
drha546ef22018-07-07 20:55:16 +00001531 assert( p->cnt>0 );
danc3a20c12018-05-23 20:55:37 +00001532 p->cnt--;
drha546ef22018-07-07 20:55:16 +00001533 assert( type==SQLITE_INTEGER || p->approx );
1534 if( type==SQLITE_INTEGER && p->approx==0 ){
danc3a20c12018-05-23 20:55:37 +00001535 i64 v = sqlite3_value_int64(argv[0]);
1536 p->rSum -= v;
drha546ef22018-07-07 20:55:16 +00001537 p->iSum -= v;
danc3a20c12018-05-23 20:55:37 +00001538 }else{
dand7368292018-07-02 17:45:59 +00001539 p->rSum -= sqlite3_value_double(argv[0]);
danc3a20c12018-05-23 20:55:37 +00001540 }
1541 }
1542}
dan67a9b8e2018-06-22 20:51:35 +00001543#else
1544# define sumInverse 0
1545#endif /* SQLITE_OMIT_WINDOWFUNC */
danielk19770ae8b832004-05-25 12:05:56 +00001546static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001547 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001548 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001549 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001550 if( p->overflow ){
1551 sqlite3_result_error(context,"integer overflow",-1);
1552 }else if( p->approx ){
1553 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001554 }else{
drh8c08e862006-02-11 17:34:00 +00001555 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001556 }
drh3d1d95e2005-09-08 10:37:01 +00001557 }
drhdd5baa92002-02-27 19:50:59 +00001558}
danielk19770ae8b832004-05-25 12:05:56 +00001559static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001560 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001561 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001562 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001563 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001564 }
1565}
drha97fdd32006-01-12 22:17:50 +00001566static void totalFinalize(sqlite3_context *context){
1567 SumCtx *p;
1568 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001569 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1570 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001571}
drhdd5baa92002-02-27 19:50:59 +00001572
1573/*
drh0bce8352002-02-28 00:41:10 +00001574** The following structure keeps track of state information for the
1575** count() aggregate function.
1576*/
1577typedef struct CountCtx CountCtx;
1578struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001579 i64 n;
dan7262ca92018-07-02 12:07:32 +00001580#ifdef SQLITE_DEBUG
1581 int bInverse; /* True if xInverse() ever called */
1582#endif
drh0bce8352002-02-28 00:41:10 +00001583};
drhdd5baa92002-02-27 19:50:59 +00001584
drh0bce8352002-02-28 00:41:10 +00001585/*
1586** Routines to implement the count() aggregate function.
1587*/
danielk19770ae8b832004-05-25 12:05:56 +00001588static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001589 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001590 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001591 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001592 p->n++;
1593 }
drh2e79c3d2009-04-08 23:04:14 +00001594
drhd3264c72009-04-15 13:39:47 +00001595#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001596 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1597 ** sure it still operates correctly, verify that its count agrees with our
1598 ** internal count when using count(*) and when the total count can be
1599 ** expressed as a 32-bit integer. */
dan7262ca92018-07-02 12:07:32 +00001600 assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse
drh2e79c3d2009-04-08 23:04:14 +00001601 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001602#endif
drh0bce8352002-02-28 00:41:10 +00001603}
danielk19770ae8b832004-05-25 12:05:56 +00001604static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001605 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001606 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001607 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001608}
dan7262ca92018-07-02 12:07:32 +00001609#ifndef SQLITE_OMIT_WINDOWFUNC
1610static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){
1611 CountCtx *p;
1612 p = sqlite3_aggregate_context(ctx, sizeof(*p));
drhfd4b7282018-07-07 19:47:21 +00001613 /* p is always non-NULL since countStep() will have been called first */
1614 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
dan7262ca92018-07-02 12:07:32 +00001615 p->n--;
1616#ifdef SQLITE_DEBUG
1617 p->bInverse = 1;
1618#endif
1619 }
1620}
dan6b4b8822018-07-02 15:03:50 +00001621#else
1622# define countInverse 0
1623#endif /* SQLITE_OMIT_WINDOWFUNC */
drh0bce8352002-02-28 00:41:10 +00001624
1625/*
drh0bce8352002-02-28 00:41:10 +00001626** Routines to implement min() and max() aggregate functions.
1627*/
danielk197762c14b32008-11-19 09:05:26 +00001628static void minmaxStep(
1629 sqlite3_context *context,
1630 int NotUsed,
1631 sqlite3_value **argv
1632){
danielk197788208052004-05-25 01:13:20 +00001633 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001634 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001635 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001636
drh9eb516c2004-07-18 20:52:32 +00001637 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001638 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001639
dan6fb2b542018-06-19 17:13:11 +00001640 if( sqlite3_value_type(pArg)==SQLITE_NULL ){
drh94a6d992012-02-02 18:42:09 +00001641 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
1642 }else if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001643 int max;
1644 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001645 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001646 /* This step function is used for both the min() and max() aggregates,
1647 ** the only difference between the two being that the sense of the
1648 ** comparison is inverted. For the max() aggregate, the
1649 ** sqlite3_user_data() function returns (void *)-1. For min() it
1650 ** returns (void *)db, where db is the sqlite3* database pointer.
1651 ** Therefore the next statement sets variable 'max' to 1 for the max()
1652 ** aggregate, or 0 for min().
1653 */
drh309b3382007-03-17 17:52:42 +00001654 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001655 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001656 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001657 sqlite3VdbeMemCopy(pBest, pArg);
drh7a957892012-02-02 17:35:43 +00001658 }else{
1659 sqlite3SkipAccumulatorLoad(context);
danielk197788208052004-05-25 01:13:20 +00001660 }
drh268380c2004-02-25 13:47:31 +00001661 }else{
drh035e5632014-09-16 14:16:31 +00001662 pBest->db = sqlite3_context_db_handle(context);
drhb21c8cd2007-08-21 19:33:56 +00001663 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001664 }
1665}
dan6fb2b542018-06-19 17:13:11 +00001666static void minMaxValueFinalize(sqlite3_context *context, int bValue){
danielk197788208052004-05-25 01:13:20 +00001667 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001668 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1669 if( pRes ){
drh94a6d992012-02-02 18:42:09 +00001670 if( pRes->flags ){
drhabfcea22005-09-06 20:36:48 +00001671 sqlite3_result_value(context, pRes);
1672 }
dan6fb2b542018-06-19 17:13:11 +00001673 if( bValue==0 ) sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001674 }
1675}
dan67a9b8e2018-06-22 20:51:35 +00001676#ifndef SQLITE_OMIT_WINDOWFUNC
dan6fb2b542018-06-19 17:13:11 +00001677static void minMaxValue(sqlite3_context *context){
drhc7bf5712018-07-09 22:49:01 +00001678 minMaxValueFinalize(context, 1);
dan6fb2b542018-06-19 17:13:11 +00001679}
dan67a9b8e2018-06-22 20:51:35 +00001680#else
1681# define minMaxValue 0
1682#endif /* SQLITE_OMIT_WINDOWFUNC */
dan6fb2b542018-06-19 17:13:11 +00001683static void minMaxFinalize(sqlite3_context *context){
drhc7bf5712018-07-09 22:49:01 +00001684 minMaxValueFinalize(context, 0);
dan6fb2b542018-06-19 17:13:11 +00001685}
drhdd5baa92002-02-27 19:50:59 +00001686
drhb0689692007-11-01 17:38:30 +00001687/*
1688** group_concat(EXPR, ?SEPARATOR?)
1689*/
1690static void groupConcatStep(
1691 sqlite3_context *context,
1692 int argc,
1693 sqlite3_value **argv
1694){
1695 const char *zVal;
drhade86482007-11-28 22:36:40 +00001696 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001697 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001698 int nVal, nSep;
1699 assert( argc==1 || argc==2 );
1700 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001701 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1702
1703 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001704 sqlite3 *db = sqlite3_context_db_handle(context);
dane3bf6322018-06-08 20:58:27 +00001705 int firstTerm = pAccum->mxAlloc==0;
drhbb4957f2008-03-20 14:03:29 +00001706 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001707 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001708 if( argc==2 ){
1709 zSep = (char*)sqlite3_value_text(argv[1]);
1710 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001711 }else{
1712 zSep = ",";
drhade86482007-11-28 22:36:40 +00001713 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001714 }
drh0cdbe1a2018-05-09 13:46:26 +00001715 if( zSep ) sqlite3_str_append(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001716 }
drh07d31172009-02-02 21:57:05 +00001717 zVal = (char*)sqlite3_value_text(argv[0]);
1718 nVal = sqlite3_value_bytes(argv[0]);
drh0cdbe1a2018-05-09 13:46:26 +00001719 if( zVal ) sqlite3_str_append(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001720 }
1721}
dan67a9b8e2018-06-22 20:51:35 +00001722#ifndef SQLITE_OMIT_WINDOWFUNC
dan03854d22018-06-08 11:45:28 +00001723static void groupConcatInverse(
1724 sqlite3_context *context,
1725 int argc,
1726 sqlite3_value **argv
1727){
1728 int n;
dan03854d22018-06-08 11:45:28 +00001729 StrAccum *pAccum;
drhc7bf5712018-07-09 22:49:01 +00001730 assert( argc==1 || argc==2 );
dan03854d22018-06-08 11:45:28 +00001731 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1732 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
drhfd4b7282018-07-07 19:47:21 +00001733 /* pAccum is always non-NULL since groupConcatStep() will have always
1734 ** run frist to initialize it */
1735 if( ALWAYS(pAccum) ){
dan03854d22018-06-08 11:45:28 +00001736 n = sqlite3_value_bytes(argv[0]);
1737 if( argc==2 ){
1738 n += sqlite3_value_bytes(argv[1]);
dan683b0ff2018-07-05 18:19:29 +00001739 }else{
1740 n++;
dan03854d22018-06-08 11:45:28 +00001741 }
drhc7bf5712018-07-09 22:49:01 +00001742 if( n>=(int)pAccum->nChar ){
dan03854d22018-06-08 11:45:28 +00001743 pAccum->nChar = 0;
1744 }else{
1745 pAccum->nChar -= n;
1746 memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar);
1747 }
dane3bf6322018-06-08 20:58:27 +00001748 if( pAccum->nChar==0 ) pAccum->mxAlloc = 0;
dan03854d22018-06-08 11:45:28 +00001749 }
1750}
dan67a9b8e2018-06-22 20:51:35 +00001751#else
1752# define groupConcatInverse 0
1753#endif /* SQLITE_OMIT_WINDOWFUNC */
drhb0689692007-11-01 17:38:30 +00001754static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001755 StrAccum *pAccum;
1756 pAccum = sqlite3_aggregate_context(context, 0);
1757 if( pAccum ){
drh0cdbe1a2018-05-09 13:46:26 +00001758 if( pAccum->accError==SQLITE_TOOBIG ){
drhade86482007-11-28 22:36:40 +00001759 sqlite3_result_error_toobig(context);
drh0cdbe1a2018-05-09 13:46:26 +00001760 }else if( pAccum->accError==SQLITE_NOMEM ){
drhade86482007-11-28 22:36:40 +00001761 sqlite3_result_error_nomem(context);
1762 }else{
1763 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1764 sqlite3_free);
1765 }
drhb0689692007-11-01 17:38:30 +00001766 }
1767}
dan67a9b8e2018-06-22 20:51:35 +00001768#ifndef SQLITE_OMIT_WINDOWFUNC
dane2f781b2018-05-17 19:24:08 +00001769static void groupConcatValue(sqlite3_context *context){
1770 sqlite3_str *pAccum;
1771 pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0);
1772 if( pAccum ){
1773 if( pAccum->accError==SQLITE_TOOBIG ){
1774 sqlite3_result_error_toobig(context);
1775 }else if( pAccum->accError==SQLITE_NOMEM ){
1776 sqlite3_result_error_nomem(context);
1777 }else{
1778 const char *zText = sqlite3_str_value(pAccum);
1779 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
1780 }
1781 }
1782}
dan67a9b8e2018-06-22 20:51:35 +00001783#else
1784# define groupConcatValue 0
1785#endif /* SQLITE_OMIT_WINDOWFUNC */
drh4e5ffc52004-08-31 00:52:37 +00001786
drhd3a149e2002-02-24 17:12:53 +00001787/*
drha4741842010-04-25 20:58:37 +00001788** This routine does per-connection function registration. Most
1789** of the built-in functions above are part of the global function set.
1790** This routine only deals with those that are not global.
drhdc04c582002-02-24 01:55:15 +00001791*/
drh80738d92016-02-15 00:34:16 +00001792void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
drha4741842010-04-25 20:58:37 +00001793 int rc = sqlite3_overload_function(db, "MATCH", 2);
1794 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1795 if( rc==SQLITE_NOMEM ){
drh4a642b62016-02-05 01:55:27 +00001796 sqlite3OomFault(db);
danielk1977832a58a2007-06-22 15:21:15 +00001797 }
drh55ef4d92005-08-14 01:20:37 +00001798}
1799
1800/*
1801** Set the LIKEOPT flag on the 2-argument function with the given name.
1802*/
drh1bd10f82008-12-10 21:19:56 +00001803static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001804 FuncDef *pDef;
drh80738d92016-02-15 00:34:16 +00001805 pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001806 if( ALWAYS(pDef) ){
drhd36e1042013-09-06 13:10:12 +00001807 pDef->funcFlags |= flagVal;
drh55ef4d92005-08-14 01:20:37 +00001808 }
drh8e0f7942019-02-27 23:05:14 +00001809 pDef = sqlite3FindFunction(db, zName, 3, SQLITE_UTF8, 0);
1810 if( pDef ){
1811 pDef->funcFlags |= flagVal;
1812 }
drh55ef4d92005-08-14 01:20:37 +00001813}
1814
1815/*
1816** Register the built-in LIKE and GLOB functions. The caseSensitive
1817** parameter determines whether or not the LIKE operator is case
1818** sensitive. GLOB is always case sensitive.
1819*/
1820void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1821 struct compareInfo *pInfo;
1822 if( caseSensitive ){
1823 pInfo = (struct compareInfo*)&likeInfoAlt;
1824 }else{
1825 pInfo = (struct compareInfo*)&likeInfoNorm;
1826 }
dan660af932018-06-18 16:55:22 +00001827 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
1828 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
drh901e9942010-12-15 18:54:37 +00001829 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
dan660af932018-06-18 16:55:22 +00001830 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0);
drhd64fe2f2005-08-28 17:00:23 +00001831 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1832 setLikeOptFlag(db, "like",
1833 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001834}
1835
1836/*
1837** pExpr points to an expression which implements a function. If
1838** it is appropriate to apply the LIKE optimization to that function
drh1d42ea72017-07-27 20:24:29 +00001839** then set aWc[0] through aWc[2] to the wildcard characters and the
1840** escape character and then return TRUE. If the function is not a
1841** LIKE-style function then return FALSE.
1842**
1843** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
1844** operator if c is a string literal that is exactly one byte in length.
1845** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is
1846** no ESCAPE clause.
drh16897072015-03-07 00:57:37 +00001847**
1848** *pIsNocase is set to true if uppercase and lowercase are equivalent for
1849** the function (default for LIKE). If the function makes the distinction
1850** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
1851** false.
drh55ef4d92005-08-14 01:20:37 +00001852*/
drhd64fe2f2005-08-28 17:00:23 +00001853int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001854 FuncDef *pDef;
drh1d42ea72017-07-27 20:24:29 +00001855 int nExpr;
1856 if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
drh55ef4d92005-08-14 01:20:37 +00001857 return 0;
1858 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001859 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh1d42ea72017-07-27 20:24:29 +00001860 nExpr = pExpr->x.pList->nExpr;
1861 pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
drhd36e1042013-09-06 13:10:12 +00001862 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001863 return 0;
1864 }
drh1d42ea72017-07-27 20:24:29 +00001865 if( nExpr<3 ){
1866 aWc[3] = 0;
1867 }else{
1868 Expr *pEscape = pExpr->x.pList->a[2].pExpr;
1869 char *zEscape;
1870 if( pEscape->op!=TK_STRING ) return 0;
1871 zEscape = pEscape->u.zToken;
1872 if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
1873 aWc[3] = zEscape[0];
1874 }
drh55ef4d92005-08-14 01:20:37 +00001875
1876 /* The memcpy() statement assumes that the wildcard characters are
1877 ** the first three statements in the compareInfo structure. The
1878 ** asserts() that follow verify that assumption
1879 */
1880 memcpy(aWc, pDef->pUserData, 3);
1881 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1882 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1883 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd36e1042013-09-06 13:10:12 +00001884 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001885 return 1;
drhdc04c582002-02-24 01:55:15 +00001886}
danielk19778c0a7912008-08-20 14:49:23 +00001887
drh70a8ca32008-08-21 18:49:27 +00001888/*
peter.d.reid60ec9142014-09-06 16:39:46 +00001889** All of the FuncDef structures in the aBuiltinFunc[] array above
drh777c5382008-08-21 20:21:34 +00001890** to the global function hash table. This occurs at start-time (as
1891** a consequence of calling sqlite3_initialize()).
1892**
1893** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001894*/
drh80738d92016-02-15 00:34:16 +00001895void sqlite3RegisterBuiltinFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001896 /*
1897 ** The following array holds FuncDef structures for all of the functions
1898 ** defined in this file.
1899 **
1900 ** The array cannot be constant since changes are made to the
1901 ** FuncDef.pHash elements at start-time. The elements of this array
1902 ** are read-only after initialization is complete.
drh80738d92016-02-15 00:34:16 +00001903 **
1904 ** For peak efficiency, put the most frequently used function last.
danielk197793ce7412008-09-01 19:14:02 +00001905 */
drh80738d92016-02-15 00:34:16 +00001906 static FuncDef aBuiltinFunc[] = {
1907#ifdef SQLITE_SOUNDEX
1908 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1909#endif
1910#ifndef SQLITE_OMIT_LOAD_EXTENSION
1911 VFUNCTION(load_extension, 1, 0, 0, loadExt ),
1912 VFUNCTION(load_extension, 2, 0, 0, loadExt ),
1913#endif
1914#if SQLITE_USER_AUTHENTICATION
1915 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
1916#endif
1917#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
1918 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
1919 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
1920#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
1921 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1922 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
1923 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),
drh54240752017-01-03 14:39:30 +00001924#ifdef SQLITE_DEBUG
drha1a523a2016-12-26 00:18:36 +00001925 FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY),
drh54240752017-01-03 14:39:30 +00001926#endif
drh092457b2017-12-29 15:04:49 +00001927#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
drh35100fb2018-01-04 19:20:37 +00001928 FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET|
drh2fc865c2017-12-16 20:20:37 +00001929 SQLITE_FUNC_TYPEOF),
drh092457b2017-12-29 15:04:49 +00001930#endif
danielk197793ce7412008-09-01 19:14:02 +00001931 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1932 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1933 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1934 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1935 FUNCTION(trim, 1, 3, 0, trimFunc ),
1936 FUNCTION(trim, 2, 3, 0, trimFunc ),
1937 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1938 FUNCTION(min, 0, 0, 1, 0 ),
dan6fb2b542018-06-19 17:13:11 +00001939 WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
drh9588ad92014-09-15 14:46:02 +00001940 SQLITE_FUNC_MINMAX ),
danielk197793ce7412008-09-01 19:14:02 +00001941 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1942 FUNCTION(max, 0, 1, 1, 0 ),
dan6fb2b542018-06-19 17:13:11 +00001943 WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
drh9588ad92014-09-15 14:46:02 +00001944 SQLITE_FUNC_MINMAX ),
drha748fdc2012-03-28 01:34:47 +00001945 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
1946 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
drhd55e0722012-10-25 03:07:29 +00001947 FUNCTION(instr, 2, 0, 0, instrFunc ),
drha5c14162013-12-17 15:03:06 +00001948 FUNCTION(printf, -1, 0, 0, printfFunc ),
drhd495d8c2013-02-22 19:34:25 +00001949 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
1950 FUNCTION(char, -1, 0, 0, charFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001951 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001952#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001953 FUNCTION(round, 1, 0, 0, roundFunc ),
1954 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001955#endif
danielk197793ce7412008-09-01 19:14:02 +00001956 FUNCTION(upper, 1, 0, 0, upperFunc ),
1957 FUNCTION(lower, 1, 0, 0, lowerFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001958 FUNCTION(hex, 1, 0, 0, hexFunc ),
drhcca9f3d2013-09-06 15:23:29 +00001959 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
drhb1fba282013-11-21 14:33:48 +00001960 VFUNCTION(random, 0, 0, 0, randomFunc ),
1961 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
danielk197793ce7412008-09-01 19:14:02 +00001962 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
drh03bf26d2015-08-31 21:16:36 +00001963 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
1964 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
drh840561f2011-04-27 18:08:42 +00001965 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001966 FUNCTION(quote, 1, 0, 0, quoteFunc ),
drhb1fba282013-11-21 14:33:48 +00001967 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1968 VFUNCTION(changes, 0, 0, 0, changes ),
1969 VFUNCTION(total_changes, 0, 0, 0, total_changes ),
danielk197793ce7412008-09-01 19:14:02 +00001970 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1971 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
drh80738d92016-02-15 00:34:16 +00001972 FUNCTION(substr, 2, 0, 0, substrFunc ),
1973 FUNCTION(substr, 3, 0, 0, substrFunc ),
dan6fb2b542018-06-19 17:13:11 +00001974 WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0),
1975 WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0),
1976 WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0),
dan7262ca92018-07-02 12:07:32 +00001977 WAGGREGATE(count, 0,0,0, countStep,
1978 countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT ),
1979 WAGGREGATE(count, 1,0,0, countStep,
1980 countFinalize, countFinalize, countInverse, 0 ),
dan03854d22018-06-08 11:45:28 +00001981 WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep,
dan6fb2b542018-06-19 17:13:11 +00001982 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
dan03854d22018-06-08 11:45:28 +00001983 WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
dan6fb2b542018-06-19 17:13:11 +00001984 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),
danielk197793ce7412008-09-01 19:14:02 +00001985
1986 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00001987#ifdef SQLITE_CASE_SENSITIVE_LIKE
danielk197793ce7412008-09-01 19:14:02 +00001988 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1989 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
drhcc153132016-08-04 12:35:17 +00001990#else
danielk197793ce7412008-09-01 19:14:02 +00001991 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1992 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
drhcc153132016-08-04 12:35:17 +00001993#endif
1994#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
1995 FUNCTION(unknown, -1, 0, 0, unknownFunc ),
1996#endif
drh80738d92016-02-15 00:34:16 +00001997 FUNCTION(coalesce, 1, 0, 0, 0 ),
1998 FUNCTION(coalesce, 0, 0, 0, 0 ),
1999 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),
danielk197793ce7412008-09-01 19:14:02 +00002000 };
drh545f5872010-04-24 14:02:59 +00002001#ifndef SQLITE_OMIT_ALTERTABLE
2002 sqlite3AlterFunctions();
2003#endif
dandfa552f2018-06-02 21:04:28 +00002004 sqlite3WindowFunctions();
dan0106e372013-08-12 16:34:32 +00002005#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)
2006 sqlite3AnalyzeFunctions();
2007#endif
drh80738d92016-02-15 00:34:16 +00002008 sqlite3RegisterDateTimeFunctions();
2009 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));
2010
2011#if 0 /* Enable to print out how the built-in functions are hashed */
2012 {
2013 int i;
2014 FuncDef *p;
2015 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
2016 printf("FUNC-HASH %02d:", i);
2017 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){
2018 int n = sqlite3Strlen30(p->zName);
2019 int h = p->zName[0] + n;
2020 printf(" %s(%d)", p->zName, h);
2021 }
2022 printf("\n");
2023 }
2024 }
2025#endif
drh70a8ca32008-08-21 18:49:27 +00002026}