blob: 6243536cba11b9e174ce468fdca9f30da2087f21 [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*************************************************************************
12** This file contains the C functions that implement various SQL
13** functions of SQLite.
14**
15** There is only one exported symbol in this file - the function
16** sqliteRegisterBuildinFunctions() found at the bottom of the file.
17** All other code has file scope.
18**
drh8bfd7192009-06-19 16:44:41 +000019** $Id: func.c,v 1.239 2009/06/19 16:44:41 drh Exp $
drhdc04c582002-02-24 01:55:15 +000020*/
drhb659e9b2005-01-28 01:29:08 +000021#include "sqliteInt.h"
drhd3a149e2002-02-24 17:12:53 +000022#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000023#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000024#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000025
drh55ef4d92005-08-14 01:20:37 +000026/*
27** Return the collating function associated with a function.
28*/
danielk1977dc1bdc42004-06-11 10:51:27 +000029static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
30 return context->pColl;
31}
32
drh0bce8352002-02-28 00:41:10 +000033/*
34** Implementation of the non-aggregate min() and max() functions
35*/
drhf9b596e2004-05-26 16:54:42 +000036static void minmaxFunc(
37 sqlite3_context *context,
38 int argc,
39 sqlite3_value **argv
40){
drh0bce8352002-02-28 00:41:10 +000041 int i;
drh268380c2004-02-25 13:47:31 +000042 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000043 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000044 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000045
drh65595cd2009-02-02 16:32:55 +000046 assert( argc>1 );
drhc44af712004-09-02 15:53:56 +000047 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000048 pColl = sqlite3GetFuncCollSeq(context);
49 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000050 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000051 iBest = 0;
drh9c054832004-05-31 18:51:57 +000052 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000053 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000054 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000055 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drh65595cd2009-02-02 16:32:55 +000056 testcase( mask==0 );
drhf9b596e2004-05-26 16:54:42 +000057 iBest = i;
drh0bce8352002-02-28 00:41:10 +000058 }
59 }
drhf4479502004-05-27 03:12:53 +000060 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000061}
drh0bce8352002-02-28 00:41:10 +000062
drh268380c2004-02-25 13:47:31 +000063/*
64** Return the type of the argument.
65*/
drhf9b596e2004-05-26 16:54:42 +000066static void typeofFunc(
67 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +000068 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +000069 sqlite3_value **argv
70){
danielk197735bb9d02004-05-24 12:55:54 +000071 const char *z = 0;
danielk197762c14b32008-11-19 09:05:26 +000072 UNUSED_PARAMETER(NotUsed);
danielk197735bb9d02004-05-24 12:55:54 +000073 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000074 case SQLITE_INTEGER: z = "integer"; break;
75 case SQLITE_TEXT: z = "text"; break;
76 case SQLITE_FLOAT: z = "real"; break;
77 case SQLITE_BLOB: z = "blob"; break;
drh65595cd2009-02-02 16:32:55 +000078 default: z = "null"; break;
danielk197735bb9d02004-05-24 12:55:54 +000079 }
danielk1977d8123362004-06-12 09:25:12 +000080 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000081}
82
drh5708d2d2005-06-22 10:53:59 +000083
84/*
drh0bce8352002-02-28 00:41:10 +000085** Implementation of the length() function
86*/
drhf9b596e2004-05-26 16:54:42 +000087static void lengthFunc(
88 sqlite3_context *context,
89 int argc,
90 sqlite3_value **argv
91){
drh0bce8352002-02-28 00:41:10 +000092 int len;
93
94 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +000095 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +000096 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000097 case SQLITE_BLOB:
98 case SQLITE_INTEGER:
99 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000100 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000101 break;
102 }
drh9c054832004-05-31 18:51:57 +0000103 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000104 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000105 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000106 len = 0;
107 while( *z ){
108 len++;
109 SQLITE_SKIP_UTF8(z);
110 }
drhf4479502004-05-27 03:12:53 +0000111 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000112 break;
113 }
114 default: {
115 sqlite3_result_null(context);
116 break;
117 }
118 }
drh0bce8352002-02-28 00:41:10 +0000119}
120
121/*
122** Implementation of the abs() function
123*/
danielk19770ae8b832004-05-25 12:05:56 +0000124static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000125 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000126 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000127 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000128 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000129 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000130 if( iVal<0 ){
131 if( (iVal<<1)==0 ){
132 sqlite3_result_error(context, "integer overflow", -1);
133 return;
134 }
135 iVal = -iVal;
136 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000137 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000138 break;
139 }
drh9c054832004-05-31 18:51:57 +0000140 case SQLITE_NULL: {
drhf9b596e2004-05-26 16:54:42 +0000141 sqlite3_result_null(context);
142 break;
143 }
144 default: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000145 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000146 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000147 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000148 break;
149 }
150 }
drh0bce8352002-02-28 00:41:10 +0000151}
152
153/*
drhf764e6f2007-05-15 01:13:47 +0000154** Implementation of the substr() function.
155**
156** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
157** p1 is 1-indexed. So substr(x,1,1) returns the first character
158** of x. If x is text, then we actually count UTF-8 characters.
159** If x is a blob, then we count bytes.
160**
161** If p1 is negative, then we begin abs(p1) from the end of x[].
drh0bce8352002-02-28 00:41:10 +0000162*/
drhf9b596e2004-05-26 16:54:42 +0000163static void substrFunc(
164 sqlite3_context *context,
165 int argc,
166 sqlite3_value **argv
167){
drh2646da72005-12-09 20:02:05 +0000168 const unsigned char *z;
169 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000170 int len;
drhf764e6f2007-05-15 01:13:47 +0000171 int p0type;
drh023ae032007-05-08 12:12:16 +0000172 i64 p1, p2;
drh65595cd2009-02-02 16:32:55 +0000173 int negP2 = 0;
drhf9b596e2004-05-26 16:54:42 +0000174
drh64f31512007-10-12 19:11:55 +0000175 assert( argc==3 || argc==2 );
drh8198d252009-02-01 19:42:37 +0000176 if( sqlite3_value_type(argv[1])==SQLITE_NULL
177 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
178 ){
179 return;
180 }
drhf764e6f2007-05-15 01:13:47 +0000181 p0type = sqlite3_value_type(argv[0]);
182 if( p0type==SQLITE_BLOB ){
183 len = sqlite3_value_bytes(argv[0]);
184 z = sqlite3_value_blob(argv[0]);
185 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000186 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000187 }else{
188 z = sqlite3_value_text(argv[0]);
189 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000190 len = 0;
191 for(z2=z; *z2; len++){
192 SQLITE_SKIP_UTF8(z2);
193 }
drhf764e6f2007-05-15 01:13:47 +0000194 }
danielk197751ad0ec2004-05-24 12:39:02 +0000195 p1 = sqlite3_value_int(argv[1]);
drh64f31512007-10-12 19:11:55 +0000196 if( argc==3 ){
197 p2 = sqlite3_value_int(argv[2]);
drh65595cd2009-02-02 16:32:55 +0000198 if( p2<0 ){
199 p2 = -p2;
200 negP2 = 1;
201 }
drh64f31512007-10-12 19:11:55 +0000202 }else{
drhbb4957f2008-03-20 14:03:29 +0000203 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
drh64f31512007-10-12 19:11:55 +0000204 }
drh0bce8352002-02-28 00:41:10 +0000205 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000206 p1 += len;
drh653bc752002-02-28 03:31:10 +0000207 if( p1<0 ){
208 p2 += p1;
drh65595cd2009-02-02 16:32:55 +0000209 if( p2<0 ) p2 = 0;
drh653bc752002-02-28 03:31:10 +0000210 p1 = 0;
211 }
drh0bce8352002-02-28 00:41:10 +0000212 }else if( p1>0 ){
213 p1--;
drh65595cd2009-02-02 16:32:55 +0000214 }else if( p2>0 ){
215 p2--;
drh0bce8352002-02-28 00:41:10 +0000216 }
drh65595cd2009-02-02 16:32:55 +0000217 if( negP2 ){
218 p1 -= p2;
drh4e79c592009-02-01 19:23:32 +0000219 if( p1<0 ){
220 p2 += p1;
221 p1 = 0;
222 }
223 }
drh65595cd2009-02-02 16:32:55 +0000224 assert( p1>=0 && p2>=0 );
drh0bce8352002-02-28 00:41:10 +0000225 if( p1+p2>len ){
226 p2 = len-p1;
drh478000c2009-02-03 13:10:54 +0000227 if( p2<0 ) p2 = 0;
drh0bce8352002-02-28 00:41:10 +0000228 }
drhf764e6f2007-05-15 01:13:47 +0000229 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000230 while( *z && p1 ){
231 SQLITE_SKIP_UTF8(z);
232 p1--;
drhf764e6f2007-05-15 01:13:47 +0000233 }
drh4a919112007-05-15 11:55:09 +0000234 for(z2=z; *z2 && p2; p2--){
235 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000236 }
drh1bd10f82008-12-10 21:19:56 +0000237 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000238 }else{
drh1bd10f82008-12-10 21:19:56 +0000239 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000240 }
drh0bce8352002-02-28 00:41:10 +0000241}
242
243/*
244** Implementation of the round() function
245*/
shanefbd60f82009-02-04 03:59:25 +0000246#ifndef SQLITE_OMIT_FLOATING_POINT
danielk19770ae8b832004-05-25 12:05:56 +0000247static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000248 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000249 double r;
drh50d654d2009-06-03 01:24:54 +0000250 char *zBuf;
drh0bce8352002-02-28 00:41:10 +0000251 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000252 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000253 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000254 n = sqlite3_value_int(argv[1]);
255 if( n>30 ) n = 30;
256 if( n<0 ) n = 0;
257 }
drhd589a922006-03-02 03:02:48 +0000258 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000259 r = sqlite3_value_double(argv[0]);
drh50d654d2009-06-03 01:24:54 +0000260 zBuf = sqlite3_mprintf("%.*f",n,r);
261 if( zBuf==0 ){
262 sqlite3_result_error_nomem(context);
263 }else{
264 sqlite3AtoF(zBuf, &r);
265 sqlite3_free(zBuf);
266 sqlite3_result_double(context, r);
267 }
drh0bce8352002-02-28 00:41:10 +0000268}
shanefbd60f82009-02-04 03:59:25 +0000269#endif
drhdc04c582002-02-24 01:55:15 +0000270
danielk197726783a52007-08-29 14:06:22 +0000271/*
272** Allocate nByte bytes of space using sqlite3_malloc(). If the
273** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000274** the database handle that malloc() has failed and return NULL.
275** If nByte is larger than the maximum string or blob length, then
276** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000277*/
drhb1a6c3c2008-03-20 16:30:17 +0000278static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000279 char *z;
drh27e62db2009-04-02 10:16:17 +0000280 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000281 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000282 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
283 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
284 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000285 sqlite3_result_error_toobig(context);
286 z = 0;
287 }else{
drh1bd10f82008-12-10 21:19:56 +0000288 z = sqlite3Malloc((int)nByte);
drhef31c6a2009-04-02 09:07:12 +0000289 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000290 sqlite3_result_error_nomem(context);
291 }
danielk1977a1644fd2007-08-29 12:31:25 +0000292 }
293 return z;
294}
295
drhdc04c582002-02-24 01:55:15 +0000296/*
297** Implementation of the upper() and lower() SQL functions.
298*/
danielk19770ae8b832004-05-25 12:05:56 +0000299static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000300 char *z1;
301 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000302 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000303 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000304 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000305 n = sqlite3_value_bytes(argv[0]);
306 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
307 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000308 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000309 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000310 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000311 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000312 for(i=0; z1[i]; i++){
danielk197778ca0e72009-01-20 16:53:39 +0000313 z1[i] = (char)sqlite3Toupper(z1[i]);
drh7a521cf2007-04-25 18:23:52 +0000314 }
315 sqlite3_result_text(context, z1, -1, sqlite3_free);
316 }
drhdc04c582002-02-24 01:55:15 +0000317 }
318}
danielk19770ae8b832004-05-25 12:05:56 +0000319static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197778ca0e72009-01-20 16:53:39 +0000320 u8 *z1;
drh7a521cf2007-04-25 18:23:52 +0000321 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000322 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000323 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000324 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000325 n = sqlite3_value_bytes(argv[0]);
326 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
327 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000328 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000329 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000330 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000331 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000332 for(i=0; z1[i]; i++){
danielk197778ca0e72009-01-20 16:53:39 +0000333 z1[i] = sqlite3Tolower(z1[i]);
drh7a521cf2007-04-25 18:23:52 +0000334 }
danielk197778ca0e72009-01-20 16:53:39 +0000335 sqlite3_result_text(context, (char *)z1, -1, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000336 }
drhdc04c582002-02-24 01:55:15 +0000337 }
338}
339
340/*
drhfbc99082002-02-28 03:14:18 +0000341** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
jplyonb6c9e6e2004-01-19 04:53:24 +0000342** All three do the same thing. They return the first non-NULL
343** argument.
drh3212e182002-02-28 00:46:26 +0000344*/
drhf9b596e2004-05-26 16:54:42 +0000345static void ifnullFunc(
346 sqlite3_context *context,
347 int argc,
348 sqlite3_value **argv
349){
drhfbc99082002-02-28 03:14:18 +0000350 int i;
351 for(i=0; i<argc; i++){
drh9c054832004-05-31 18:51:57 +0000352 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
drhf4479502004-05-27 03:12:53 +0000353 sqlite3_result_value(context, argv[i]);
drhfbc99082002-02-28 03:14:18 +0000354 break;
355 }
356 }
drh3212e182002-02-28 00:46:26 +0000357}
358
359/*
drhf9ffac92002-03-02 19:00:31 +0000360** Implementation of random(). Return a random integer.
361*/
drhf9b596e2004-05-26 16:54:42 +0000362static void randomFunc(
363 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000364 int NotUsed,
365 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000366){
drh52fc8492006-02-23 21:43:55 +0000367 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000368 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000369 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000370 if( r<0 ){
371 /* We need to prevent a random number of 0x8000000000000000
372 ** (or -9223372036854775808) since when you do abs() of that
373 ** number of you get the same value back again. To do this
374 ** in a way that is testable, mask the sign bit off of negative
375 ** values, resulting in a positive value. Then take the
376 ** 2s complement of that positive value. The end result can
377 ** therefore be no less than -9223372036854775807.
378 */
379 r = -(r ^ (((sqlite3_int64)1)<<63));
380 }
drh52fc8492006-02-23 21:43:55 +0000381 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000382}
383
384/*
drh137c7282007-01-29 17:58:28 +0000385** Implementation of randomblob(N). Return a random blob
386** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000387*/
drh137c7282007-01-29 17:58:28 +0000388static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000389 sqlite3_context *context,
390 int argc,
391 sqlite3_value **argv
392){
drh137c7282007-01-29 17:58:28 +0000393 int n;
394 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000395 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000396 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000397 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000398 if( n<1 ){
399 n = 1;
400 }
danielk1977a1644fd2007-08-29 12:31:25 +0000401 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000402 if( p ){
drh2fa18682008-03-19 14:15:34 +0000403 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000404 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000405 }
drh63cf66f2007-01-29 15:50:05 +0000406}
407
408/*
drh6ed41ad2002-04-06 14:10:47 +0000409** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000410** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000411*/
danielk197751ad0ec2004-05-24 12:39:02 +0000412static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000413 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000414 int NotUsed,
415 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000416){
drhfa4a4b92008-03-19 21:45:51 +0000417 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000418 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf9b596e2004-05-26 16:54:42 +0000419 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000420}
421
rdcf146a772004-02-25 22:51:06 +0000422/*
danielk1977b28af712004-06-21 06:50:26 +0000423** Implementation of the changes() SQL function. The return value is the
424** same as the sqlite3_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000425*/
danielk1977b28af712004-06-21 06:50:26 +0000426static void changes(
drhf9b596e2004-05-26 16:54:42 +0000427 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000428 int NotUsed,
429 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000430){
drhfa4a4b92008-03-19 21:45:51 +0000431 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000432 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000433 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000434}
rdcf146a772004-02-25 22:51:06 +0000435
436/*
danielk1977b28af712004-06-21 06:50:26 +0000437** Implementation of the total_changes() SQL function. The return value is
438** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000439*/
danielk1977b28af712004-06-21 06:50:26 +0000440static void total_changes(
441 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000442 int NotUsed,
443 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000444){
drhfa4a4b92008-03-19 21:45:51 +0000445 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000446 UNUSED_PARAMETER2(NotUsed, NotUsed2);
danielk1977b28af712004-06-21 06:50:26 +0000447 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000448}
449
drh6ed41ad2002-04-06 14:10:47 +0000450/*
drh4e5ffc52004-08-31 00:52:37 +0000451** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000452*/
drh4e5ffc52004-08-31 00:52:37 +0000453struct compareInfo {
454 u8 matchAll;
455 u8 matchOne;
456 u8 matchSet;
457 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000458};
drh55ef4d92005-08-14 01:20:37 +0000459
drhb9175ae2007-12-07 18:39:04 +0000460/*
461** For LIKE and GLOB matching on EBCDIC machines, assume that every
462** character is exactly one byte in size. Also, all characters are
463** able to participate in upper-case-to-lower-case mappings in EBCDIC
464** whereas only characters less than 0x80 do in ASCII.
465*/
466#if defined(SQLITE_EBCDIC)
drh769e97e2009-04-01 16:33:37 +0000467# define sqlite3Utf8Read(A,C) (*(A++))
drh6ed4b782007-12-10 18:07:20 +0000468# define GlogUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000469#else
drh6ed4b782007-12-10 18:07:20 +0000470# define GlogUpperToLower(A) if( A<0x80 ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000471#endif
472
drh4e5ffc52004-08-31 00:52:37 +0000473static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000474/* The correct SQL-92 behavior is for the LIKE operator to ignore
475** case. Thus 'a' LIKE 'A' would be true. */
476static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
477/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
478** is case sensitive causing 'a' LIKE 'A' to be false */
479static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000480
481/*
drh4e5ffc52004-08-31 00:52:37 +0000482** Compare two UTF-8 strings for equality where the first string can
483** potentially be a "glob" expression. Return true (1) if they
484** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000485**
drh4e5ffc52004-08-31 00:52:37 +0000486** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000487**
drh4e5ffc52004-08-31 00:52:37 +0000488** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000489**
drh4e5ffc52004-08-31 00:52:37 +0000490** '?' Matches exactly one character.
491**
492** [...] Matches one character from the enclosed list of
493** characters.
494**
495** [^...] Matches one character not in the enclosed list.
496**
497** With the [...] and [^...] matching, a ']' character can be included
498** in the list by making it the first character after '[' or '^'. A
499** range of characters can be specified using '-'. Example:
500** "[a-z]" matches any single lower-case letter. To match a '-', make
501** it the last character in the list.
502**
503** This routine is usually quick, but can be N**2 in the worst case.
504**
505** Hints: to match '*' or '?', put them in "[]". Like this:
506**
507** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000508*/
danielk19777c6303c2004-11-17 16:41:29 +0000509static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000510 const u8 *zPattern, /* The glob pattern */
511 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000512 const struct compareInfo *pInfo, /* Information about how to do the compare */
513 const int esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000514){
drh66150952007-07-23 19:12:41 +0000515 int c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000516 int invert;
517 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000518 u8 matchOne = pInfo->matchOne;
519 u8 matchAll = pInfo->matchAll;
520 u8 matchSet = pInfo->matchSet;
521 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000522 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000523
drh769e97e2009-04-01 16:33:37 +0000524 while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
danielk19777c6303c2004-11-17 16:41:29 +0000525 if( !prevEscape && c==matchAll ){
drh769e97e2009-04-01 16:33:37 +0000526 while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000527 || c == matchOne ){
drh769e97e2009-04-01 16:33:37 +0000528 if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
drh66150952007-07-23 19:12:41 +0000529 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000530 }
danielk1977ad7dd422004-06-06 12:41:49 +0000531 }
drh66150952007-07-23 19:12:41 +0000532 if( c==0 ){
533 return 1;
534 }else if( c==esc ){
drh769e97e2009-04-01 16:33:37 +0000535 c = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000536 if( c==0 ){
537 return 0;
538 }
539 }else if( c==matchSet ){
540 assert( esc==0 ); /* This is GLOB, not LIKE */
541 assert( matchSet<0x80 ); /* '[' is a single-byte character */
542 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000543 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000544 }
545 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000546 }
drh769e97e2009-04-01 16:33:37 +0000547 while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000548 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000549 GlogUpperToLower(c2);
550 GlogUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000551 while( c2 != 0 && c2 != c ){
drh769e97e2009-04-01 16:33:37 +0000552 c2 = sqlite3Utf8Read(zString, &zString);
drh6ed4b782007-12-10 18:07:20 +0000553 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000554 }
drh66150952007-07-23 19:12:41 +0000555 }else{
556 while( c2 != 0 && c2 != c ){
drh769e97e2009-04-01 16:33:37 +0000557 c2 = sqlite3Utf8Read(zString, &zString);
drh66150952007-07-23 19:12:41 +0000558 }
drh4e5ffc52004-08-31 00:52:37 +0000559 }
drh66150952007-07-23 19:12:41 +0000560 if( c2==0 ) return 0;
561 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
562 }
563 return 0;
564 }else if( !prevEscape && c==matchOne ){
drh769e97e2009-04-01 16:33:37 +0000565 if( sqlite3Utf8Read(zString, &zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000566 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000567 }
drh4e5ffc52004-08-31 00:52:37 +0000568 }else if( c==matchSet ){
569 int prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000570 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000571 seen = 0;
572 invert = 0;
drh769e97e2009-04-01 16:33:37 +0000573 c = sqlite3Utf8Read(zString, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000574 if( c==0 ) return 0;
drh769e97e2009-04-01 16:33:37 +0000575 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000576 if( c2=='^' ){
577 invert = 1;
drh769e97e2009-04-01 16:33:37 +0000578 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000579 }
drh4e5ffc52004-08-31 00:52:37 +0000580 if( c2==']' ){
581 if( c==']' ) seen = 1;
drh769e97e2009-04-01 16:33:37 +0000582 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000583 }
drh66150952007-07-23 19:12:41 +0000584 while( c2 && c2!=']' ){
585 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh769e97e2009-04-01 16:33:37 +0000586 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000587 if( c>=prior_c && c<=c2 ) seen = 1;
588 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000589 }else{
drh66150952007-07-23 19:12:41 +0000590 if( c==c2 ){
591 seen = 1;
592 }
drh4e5ffc52004-08-31 00:52:37 +0000593 prior_c = c2;
594 }
drh769e97e2009-04-01 16:33:37 +0000595 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000596 }
drh66150952007-07-23 19:12:41 +0000597 if( c2==0 || (seen ^ invert)==0 ){
598 return 0;
599 }
600 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000601 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000602 }else{
drh769e97e2009-04-01 16:33:37 +0000603 c2 = sqlite3Utf8Read(zString, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000604 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000605 GlogUpperToLower(c);
606 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000607 }
drh66150952007-07-23 19:12:41 +0000608 if( c!=c2 ){
609 return 0;
610 }
danielk19777c6303c2004-11-17 16:41:29 +0000611 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000612 }
danielk197751ad0ec2004-05-24 12:39:02 +0000613 }
drh4e5ffc52004-08-31 00:52:37 +0000614 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000615}
drh4e5ffc52004-08-31 00:52:37 +0000616
drh55ef4d92005-08-14 01:20:37 +0000617/*
618** Count the number of times that the LIKE operator (or GLOB which is
619** just a variation of LIKE) gets called. This is used for testing
620** only.
621*/
622#ifdef SQLITE_TEST
623int sqlite3_like_count = 0;
624#endif
625
danielk19773f6b0872004-06-17 05:36:44 +0000626
627/*
628** Implementation of the like() SQL function. This function implements
629** the build-in LIKE operator. The first argument to the function is the
630** pattern and the second argument is the string. So, the SQL statements:
631**
632** A LIKE B
633**
634** is implemented as like(B,A).
635**
drh55ef4d92005-08-14 01:20:37 +0000636** This same function (with a different compareInfo structure) computes
637** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000638*/
639static void likeFunc(
640 sqlite3_context *context,
641 int argc,
642 sqlite3_value **argv
643){
drhbeb818d2007-05-08 15:34:47 +0000644 const unsigned char *zA, *zB;
drh85892bd2007-05-10 13:23:22 +0000645 int escape = 0;
drh27e62db2009-04-02 10:16:17 +0000646 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000647 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000648
drh1f0feef2007-05-15 13:27:07 +0000649 zB = sqlite3_value_text(argv[0]);
650 zA = sqlite3_value_text(argv[1]);
651
drhbeb818d2007-05-08 15:34:47 +0000652 /* Limit the length of the LIKE or GLOB pattern to avoid problems
653 ** of deep recursion and N*N behavior in patternCompare().
654 */
drh27e62db2009-04-02 10:16:17 +0000655 nPat = sqlite3_value_bytes(argv[0]);
656 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
657 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
658 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000659 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
660 return;
661 }
drh1f0feef2007-05-15 13:27:07 +0000662 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000663
danielk19777c6303c2004-11-17 16:41:29 +0000664 if( argc==3 ){
665 /* The escape character string must consist of a single UTF-8 character.
666 ** Otherwise, return an error.
667 */
668 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000669 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000670 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000671 sqlite3_result_error(context,
672 "ESCAPE expression must be a single character", -1);
673 return;
674 }
drh769e97e2009-04-01 16:33:37 +0000675 escape = sqlite3Utf8Read(zEsc, &zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000676 }
danielk19773f6b0872004-06-17 05:36:44 +0000677 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000678 struct compareInfo *pInfo = sqlite3_user_data(context);
679#ifdef SQLITE_TEST
680 sqlite3_like_count++;
681#endif
drhbeb818d2007-05-08 15:34:47 +0000682
danielk1977b56fe1f2007-05-09 08:24:44 +0000683 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000684 }
drh8912d102002-05-26 21:34:58 +0000685}
686
687/*
688** Implementation of the NULLIF(x,y) function. The result is the first
689** argument if the arguments are different. The result is NULL if the
690** arguments are equal to each other.
691*/
drhf9b596e2004-05-26 16:54:42 +0000692static void nullifFunc(
693 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000694 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000695 sqlite3_value **argv
696){
danielk1977dc1bdc42004-06-11 10:51:27 +0000697 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000698 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000699 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000700 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000701 }
drh0ac65892002-04-20 14:24:41 +0000702}
703
drh647cb0e2002-11-04 19:32:25 +0000704/*
705** Implementation of the VERSION(*) function. The result is the version
706** of the SQLite library that is running.
707*/
drhf9b596e2004-05-26 16:54:42 +0000708static void versionFunc(
709 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000710 int NotUsed,
711 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000712){
danielk197762c14b32008-11-19 09:05:26 +0000713 UNUSED_PARAMETER2(NotUsed, NotUsed2);
danielk1977d8123362004-06-12 09:25:12 +0000714 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000715}
716
drh137c7282007-01-29 17:58:28 +0000717/* Array for converting from half-bytes (nybbles) into ASCII hex
718** digits. */
719static const char hexdigits[] = {
720 '0', '1', '2', '3', '4', '5', '6', '7',
721 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
722};
danielk1977d641d642004-11-18 15:44:29 +0000723
drh47394702003-08-20 01:03:33 +0000724/*
725** EXPERIMENTAL - This is not an official function. The interface may
726** change. This function may disappear. Do not write code that depends
727** on this function.
728**
729** Implementation of the QUOTE() function. This function takes a single
730** argument. If the argument is numeric, the return value is the same as
731** the argument. If the argument is NULL, the return value is the string
732** "NULL". Otherwise, the argument is enclosed in single quotes with
733** single-quote escapes.
734*/
danielk19770ae8b832004-05-25 12:05:56 +0000735static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000736 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000737 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000738 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000739 case SQLITE_INTEGER:
740 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000741 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000742 break;
743 }
danielk19773f41e972004-06-08 00:39:01 +0000744 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000745 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000746 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000747 int nBlob = sqlite3_value_bytes(argv[0]);
748 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000749 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000750 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000751 int i;
752 for(i=0; i<nBlob; i++){
753 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
754 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
755 }
756 zText[(nBlob*2)+2] = '\'';
757 zText[(nBlob*2)+3] = '\0';
758 zText[0] = 'X';
759 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000760 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000761 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000762 }
763 break;
764 }
drh9c054832004-05-31 18:51:57 +0000765 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000766 int i,j;
767 u64 n;
drh2646da72005-12-09 20:02:05 +0000768 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000769 char *z;
770
drh7a521cf2007-04-25 18:23:52 +0000771 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000772 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000773 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000774 if( z ){
775 z[0] = '\'';
776 for(i=0, j=1; zArg[i]; i++){
777 z[j++] = zArg[i];
778 if( zArg[i]=='\'' ){
779 z[j++] = '\'';
780 }
drhf9b596e2004-05-26 16:54:42 +0000781 }
danielk1977a1644fd2007-08-29 12:31:25 +0000782 z[j++] = '\'';
783 z[j] = 0;
784 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000785 }
drha0df4cc2009-02-02 17:29:59 +0000786 break;
787 }
788 default: {
789 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
790 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
791 break;
drhf9b596e2004-05-26 16:54:42 +0000792 }
drh47394702003-08-20 01:03:33 +0000793 }
794}
795
drh137c7282007-01-29 17:58:28 +0000796/*
797** The hex() function. Interpret the argument as a blob. Return
798** a hexadecimal rendering as text.
799*/
800static void hexFunc(
801 sqlite3_context *context,
802 int argc,
803 sqlite3_value **argv
804){
805 int i, n;
806 const unsigned char *pBlob;
807 char *zHex, *z;
808 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000809 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +0000810 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +0000811 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000812 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000813 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +0000814 if( zHex ){
815 for(i=0; i<n; i++, pBlob++){
816 unsigned char c = *pBlob;
817 *(z++) = hexdigits[(c>>4)&0xf];
818 *(z++) = hexdigits[c&0xf];
819 }
820 *z = 0;
821 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +0000822 }
drh137c7282007-01-29 17:58:28 +0000823}
824
drh26b6d902007-03-17 13:27:54 +0000825/*
drh8cff3822007-05-02 02:08:28 +0000826** The zeroblob(N) function returns a zero-filled blob of size N bytes.
827*/
828static void zeroblobFunc(
829 sqlite3_context *context,
830 int argc,
831 sqlite3_value **argv
832){
drh98640a32007-06-07 19:08:32 +0000833 i64 n;
drh27e62db2009-04-02 10:16:17 +0000834 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +0000835 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000836 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +0000837 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +0000838 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
839 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
840 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +0000841 sqlite3_result_error_toobig(context);
842 }else{
drh1bd10f82008-12-10 21:19:56 +0000843 sqlite3_result_zeroblob(context, (int)n);
drh98640a32007-06-07 19:08:32 +0000844 }
drh8cff3822007-05-02 02:08:28 +0000845}
846
847/*
drh26b6d902007-03-17 13:27:54 +0000848** The replace() function. Three arguments are all strings: call
849** them A, B, and C. The result is also a string which is derived
850** from A by replacing every occurance of B with C. The match
851** must be exact. Collating sequences are not used.
852*/
853static void replaceFunc(
854 sqlite3_context *context,
855 int argc,
856 sqlite3_value **argv
857){
858 const unsigned char *zStr; /* The input string A */
859 const unsigned char *zPattern; /* The pattern string B */
860 const unsigned char *zRep; /* The replacement string C */
861 unsigned char *zOut; /* The output */
862 int nStr; /* Size of zStr */
863 int nPattern; /* Size of zPattern */
864 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +0000865 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +0000866 int loopLimit; /* Last zStr[] that might match zPattern[] */
867 int i, j; /* Loop counters */
868
869 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +0000870 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +0000871 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000872 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000873 nStr = sqlite3_value_bytes(argv[0]);
874 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000875 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +0000876 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +0000877 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
878 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +0000879 return;
880 }
881 if( zPattern[0]==0 ){
882 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
883 sqlite3_result_value(context, argv[0]);
884 return;
885 }
drh1f0feef2007-05-15 13:27:07 +0000886 nPattern = sqlite3_value_bytes(argv[1]);
887 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000888 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000889 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000890 nRep = sqlite3_value_bytes(argv[2]);
891 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +0000892 nOut = nStr + 1;
893 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +0000894 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +0000895 if( zOut==0 ){
896 return;
drh26b6d902007-03-17 13:27:54 +0000897 }
drh26b6d902007-03-17 13:27:54 +0000898 loopLimit = nStr - nPattern;
899 for(i=j=0; i<=loopLimit; i++){
900 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
901 zOut[j++] = zStr[i];
902 }else{
drh4a50aac2007-08-23 02:47:53 +0000903 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +0000904 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +0000905 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +0000906 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
907 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
908 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +0000909 sqlite3_result_error_toobig(context);
drh633e6d52008-07-28 19:34:53 +0000910 sqlite3DbFree(db, zOut);
danielk197717374e82007-05-08 14:39:04 +0000911 return;
912 }
drh4a50aac2007-08-23 02:47:53 +0000913 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +0000914 zOut = sqlite3_realloc(zOut, (int)nOut);
915 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000916 sqlite3_result_error_nomem(context);
drh633e6d52008-07-28 19:34:53 +0000917 sqlite3DbFree(db, zOld);
drh2e6400b2007-05-08 15:46:18 +0000918 return;
919 }
drh26b6d902007-03-17 13:27:54 +0000920 memcpy(&zOut[j], zRep, nRep);
921 j += nRep;
922 i += nPattern-1;
923 }
924 }
drh2e6400b2007-05-08 15:46:18 +0000925 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +0000926 memcpy(&zOut[j], &zStr[i], nStr-i);
927 j += nStr - i;
928 assert( j<=nOut );
929 zOut[j] = 0;
930 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
931}
932
drh309b3382007-03-17 17:52:42 +0000933/*
934** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
935** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
936*/
937static void trimFunc(
938 sqlite3_context *context,
939 int argc,
940 sqlite3_value **argv
941){
942 const unsigned char *zIn; /* Input string */
943 const unsigned char *zCharSet; /* Set of characters to trim */
944 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +0000945 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +0000946 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +0000947 unsigned char *aLen = 0; /* Length of each character in zCharSet */
948 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +0000949 int nChar; /* Number of characters in zCharSet */
950
drh309b3382007-03-17 17:52:42 +0000951 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
952 return;
953 }
954 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000955 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000956 nIn = sqlite3_value_bytes(argv[0]);
957 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +0000958 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +0000959 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +0000960 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +0000961 nChar = 1;
drh8cff3822007-05-02 02:08:28 +0000962 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +0000963 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +0000964 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +0000965 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +0000966 return;
drhd1e3a612007-04-27 21:59:52 +0000967 }else{
968 const unsigned char *z;
969 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +0000970 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000971 }
972 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +0000973 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +0000974 if( azChar==0 ){
975 return;
976 }
977 aLen = (unsigned char*)&azChar[nChar];
978 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +0000979 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +0000980 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +0000981 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +0000982 }
983 }
drh309b3382007-03-17 17:52:42 +0000984 }
drhd1e3a612007-04-27 21:59:52 +0000985 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +0000986 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +0000987 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +0000988 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +0000989 int len = 0;
drhd1e3a612007-04-27 21:59:52 +0000990 for(i=0; i<nChar; i++){
991 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +0000992 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +0000993 }
994 if( i>=nChar ) break;
995 zIn += len;
996 nIn -= len;
drh309b3382007-03-17 17:52:42 +0000997 }
998 }
999 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +00001000 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +00001001 int len = 0;
drhd1e3a612007-04-27 21:59:52 +00001002 for(i=0; i<nChar; i++){
1003 len = aLen[i];
1004 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1005 }
1006 if( i>=nChar ) break;
1007 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001008 }
1009 }
drhd1e3a612007-04-27 21:59:52 +00001010 if( zCharSet ){
1011 sqlite3_free(azChar);
1012 }
drh309b3382007-03-17 17:52:42 +00001013 }
1014 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1015}
drh26b6d902007-03-17 13:27:54 +00001016
danielk1977a4de4532008-09-02 15:44:08 +00001017
drhd24cc422003-03-27 12:51:24 +00001018#ifdef SQLITE_SOUNDEX
1019/*
1020** Compute the soundex encoding of a word.
1021*/
drh137c7282007-01-29 17:58:28 +00001022static void soundexFunc(
1023 sqlite3_context *context,
1024 int argc,
1025 sqlite3_value **argv
1026){
drhd24cc422003-03-27 12:51:24 +00001027 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001028 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001029 int i, j;
1030 static const unsigned char iCode[] = {
1031 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1032 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1033 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1034 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1035 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1036 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1037 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1038 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1039 };
1040 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001041 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001042 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001043 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001044 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001045 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001046 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001047 for(j=1; j<4 && zIn[i]; i++){
1048 int code = iCode[zIn[i]&0x7f];
1049 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001050 if( code!=prevcode ){
1051 prevcode = code;
1052 zResult[j++] = code + '0';
1053 }
1054 }else{
1055 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001056 }
1057 }
1058 while( j<4 ){
1059 zResult[j++] = '0';
1060 }
1061 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001062 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001063 }else{
danielk1977d8123362004-06-12 09:25:12 +00001064 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001065 }
1066}
1067#endif
1068
drhfdb83b22006-06-17 14:12:47 +00001069#ifndef SQLITE_OMIT_LOAD_EXTENSION
1070/*
1071** A function that loads a shared-library extension then returns NULL.
1072*/
1073static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001074 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001075 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001076 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001077 char *zErrMsg = 0;
1078
1079 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001080 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001081 }else{
1082 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001083 }
drh7a521cf2007-04-25 18:23:52 +00001084 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001085 sqlite3_result_error(context, zErrMsg, -1);
1086 sqlite3_free(zErrMsg);
1087 }
1088}
1089#endif
1090
danielk197701427a62005-01-11 13:02:33 +00001091
drh0ac65892002-04-20 14:24:41 +00001092/*
drhd3a149e2002-02-24 17:12:53 +00001093** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001094** sum() or avg() aggregate computation.
1095*/
1096typedef struct SumCtx SumCtx;
1097struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001098 double rSum; /* Floating point sum */
1099 i64 iSum; /* Integer sum */
1100 i64 cnt; /* Number of elements summed */
1101 u8 overflow; /* True if integer overflow seen */
1102 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001103};
1104
1105/*
drha97fdd32006-01-12 22:17:50 +00001106** Routines used to compute the sum, average, and total.
1107**
1108** The SUM() function follows the (broken) SQL standard which means
1109** that it returns NULL if it sums over no inputs. TOTAL returns
1110** 0.0 in that case. In addition, TOTAL always returns a float where
1111** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001112** value. TOTAL never fails, but SUM might through an exception if
1113** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001114*/
danielk19770ae8b832004-05-25 12:05:56 +00001115static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001116 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001117 int type;
drh3f219f42005-09-08 19:45:57 +00001118 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001119 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001120 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001121 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001122 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001123 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001124 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001125 i64 v = sqlite3_value_int64(argv[0]);
1126 p->rSum += v;
1127 if( (p->approx|p->overflow)==0 ){
1128 i64 iNewSum = p->iSum + v;
drh1bd10f82008-12-10 21:19:56 +00001129 int s1 = (int)(p->iSum >> (sizeof(i64)*8-1));
1130 int s2 = (int)(v >> (sizeof(i64)*8-1));
1131 int s3 = (int)(iNewSum >> (sizeof(i64)*8-1));
1132 p->overflow = ((s1&s2&~s3) | (~s1&~s2&s3))?1:0;
drh8c08e862006-02-11 17:34:00 +00001133 p->iSum = iNewSum;
drh29d72102006-02-09 22:13:41 +00001134 }
1135 }else{
drh8c08e862006-02-11 17:34:00 +00001136 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001137 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001138 }
drh739105c2002-05-29 23:22:23 +00001139 }
drhdd5baa92002-02-27 19:50:59 +00001140}
danielk19770ae8b832004-05-25 12:05:56 +00001141static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001142 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001143 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001144 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001145 if( p->overflow ){
1146 sqlite3_result_error(context,"integer overflow",-1);
1147 }else if( p->approx ){
1148 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001149 }else{
drh8c08e862006-02-11 17:34:00 +00001150 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001151 }
drh3d1d95e2005-09-08 10:37:01 +00001152 }
drhdd5baa92002-02-27 19:50:59 +00001153}
danielk19770ae8b832004-05-25 12:05:56 +00001154static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001155 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001156 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001157 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001158 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001159 }
1160}
drha97fdd32006-01-12 22:17:50 +00001161static void totalFinalize(sqlite3_context *context){
1162 SumCtx *p;
1163 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001164 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1165 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001166}
drhdd5baa92002-02-27 19:50:59 +00001167
1168/*
drh0bce8352002-02-28 00:41:10 +00001169** The following structure keeps track of state information for the
1170** count() aggregate function.
1171*/
1172typedef struct CountCtx CountCtx;
1173struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001174 i64 n;
drh0bce8352002-02-28 00:41:10 +00001175};
drhdd5baa92002-02-27 19:50:59 +00001176
drh0bce8352002-02-28 00:41:10 +00001177/*
1178** Routines to implement the count() aggregate function.
1179*/
danielk19770ae8b832004-05-25 12:05:56 +00001180static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001181 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001182 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001183 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001184 p->n++;
1185 }
drh2e79c3d2009-04-08 23:04:14 +00001186
drhd3264c72009-04-15 13:39:47 +00001187#ifndef SQLITE_OMIT_DEPRECATED
drh2e79c3d2009-04-08 23:04:14 +00001188 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1189 ** sure it still operates correctly, verify that its count agrees with our
1190 ** internal count when using count(*) and when the total count can be
1191 ** expressed as a 32-bit integer. */
1192 assert( argc==1 || p==0 || p->n>0x7fffffff
1193 || p->n==sqlite3_aggregate_count(context) );
drhd3264c72009-04-15 13:39:47 +00001194#endif
drh0bce8352002-02-28 00:41:10 +00001195}
danielk19770ae8b832004-05-25 12:05:56 +00001196static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001197 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001198 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001199 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001200}
1201
1202/*
drh0bce8352002-02-28 00:41:10 +00001203** Routines to implement min() and max() aggregate functions.
1204*/
danielk197762c14b32008-11-19 09:05:26 +00001205static void minmaxStep(
1206 sqlite3_context *context,
1207 int NotUsed,
1208 sqlite3_value **argv
1209){
danielk197788208052004-05-25 01:13:20 +00001210 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001211 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001212 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001213
1214 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1215 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001216 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001217
danielk197788208052004-05-25 01:13:20 +00001218 if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001219 int max;
1220 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001221 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001222 /* This step function is used for both the min() and max() aggregates,
1223 ** the only difference between the two being that the sense of the
1224 ** comparison is inverted. For the max() aggregate, the
1225 ** sqlite3_user_data() function returns (void *)-1. For min() it
1226 ** returns (void *)db, where db is the sqlite3* database pointer.
1227 ** Therefore the next statement sets variable 'max' to 1 for the max()
1228 ** aggregate, or 0 for min().
1229 */
drh309b3382007-03-17 17:52:42 +00001230 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001231 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001232 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001233 sqlite3VdbeMemCopy(pBest, pArg);
danielk197788208052004-05-25 01:13:20 +00001234 }
drh268380c2004-02-25 13:47:31 +00001235 }else{
drhb21c8cd2007-08-21 19:33:56 +00001236 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001237 }
1238}
danielk19770ae8b832004-05-25 12:05:56 +00001239static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001240 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001241 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1242 if( pRes ){
drhd27135a2009-04-02 13:36:37 +00001243 if( ALWAYS(pRes->flags) ){
drhabfcea22005-09-06 20:36:48 +00001244 sqlite3_result_value(context, pRes);
1245 }
1246 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001247 }
1248}
drhdd5baa92002-02-27 19:50:59 +00001249
drhb0689692007-11-01 17:38:30 +00001250/*
1251** group_concat(EXPR, ?SEPARATOR?)
1252*/
1253static void groupConcatStep(
1254 sqlite3_context *context,
1255 int argc,
1256 sqlite3_value **argv
1257){
1258 const char *zVal;
drhade86482007-11-28 22:36:40 +00001259 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001260 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001261 int nVal, nSep;
1262 assert( argc==1 || argc==2 );
1263 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001264 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1265
1266 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001267 sqlite3 *db = sqlite3_context_db_handle(context);
drh8bfd7192009-06-19 16:44:41 +00001268 int firstTerm = pAccum->useMalloc==0;
drhade86482007-11-28 22:36:40 +00001269 pAccum->useMalloc = 1;
drhbb4957f2008-03-20 14:03:29 +00001270 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drh8bfd7192009-06-19 16:44:41 +00001271 if( !firstTerm ){
drh07d31172009-02-02 21:57:05 +00001272 if( argc==2 ){
1273 zSep = (char*)sqlite3_value_text(argv[1]);
1274 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001275 }else{
1276 zSep = ",";
drhade86482007-11-28 22:36:40 +00001277 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001278 }
drhade86482007-11-28 22:36:40 +00001279 sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001280 }
drh07d31172009-02-02 21:57:05 +00001281 zVal = (char*)sqlite3_value_text(argv[0]);
1282 nVal = sqlite3_value_bytes(argv[0]);
1283 sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001284 }
1285}
1286static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001287 StrAccum *pAccum;
1288 pAccum = sqlite3_aggregate_context(context, 0);
1289 if( pAccum ){
1290 if( pAccum->tooBig ){
1291 sqlite3_result_error_toobig(context);
1292 }else if( pAccum->mallocFailed ){
1293 sqlite3_result_error_nomem(context);
1294 }else{
1295 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1296 sqlite3_free);
1297 }
drhb0689692007-11-01 17:38:30 +00001298 }
1299}
drh4e5ffc52004-08-31 00:52:37 +00001300
drhd3a149e2002-02-24 17:12:53 +00001301/*
drha2ed5602002-02-26 23:55:31 +00001302** This function registered all of the above C functions as SQL
1303** functions. This should be the only routine in this file with
1304** external linkage.
drhdc04c582002-02-24 01:55:15 +00001305*/
drh9bb575f2004-09-06 17:24:11 +00001306void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drh1f01ec12005-02-15 21:36:18 +00001307#ifndef SQLITE_OMIT_ALTERTABLE
1308 sqlite3AlterFunctions(db);
1309#endif
danielk19771e536952007-08-16 10:09:01 +00001310 if( !db->mallocFailed ){
danielk1977832a58a2007-06-22 15:21:15 +00001311 int rc = sqlite3_overload_function(db, "MATCH", 2);
1312 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1313 if( rc==SQLITE_NOMEM ){
danielk19771e536952007-08-16 10:09:01 +00001314 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001315 }
1316 }
drh55ef4d92005-08-14 01:20:37 +00001317}
1318
1319/*
1320** Set the LIKEOPT flag on the 2-argument function with the given name.
1321*/
drh1bd10f82008-12-10 21:19:56 +00001322static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001323 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001324 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1325 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001326 if( ALWAYS(pDef) ){
drhd64fe2f2005-08-28 17:00:23 +00001327 pDef->flags = flagVal;
drh55ef4d92005-08-14 01:20:37 +00001328 }
1329}
1330
1331/*
1332** Register the built-in LIKE and GLOB functions. The caseSensitive
1333** parameter determines whether or not the LIKE operator is case
1334** sensitive. GLOB is always case sensitive.
1335*/
1336void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1337 struct compareInfo *pInfo;
1338 if( caseSensitive ){
1339 pInfo = (struct compareInfo*)&likeInfoAlt;
1340 }else{
1341 pInfo = (struct compareInfo*)&likeInfoNorm;
1342 }
danielk1977717811c2009-03-27 15:26:03 +00001343 sqlite3CreateFunc(db, "like", 2, SQLITE_ANY, pInfo, likeFunc, 0, 0);
1344 sqlite3CreateFunc(db, "like", 3, SQLITE_ANY, pInfo, likeFunc, 0, 0);
1345 sqlite3CreateFunc(db, "glob", 2, SQLITE_ANY,
drh55ef4d92005-08-14 01:20:37 +00001346 (struct compareInfo*)&globInfo, likeFunc, 0,0);
drhd64fe2f2005-08-28 17:00:23 +00001347 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1348 setLikeOptFlag(db, "like",
1349 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001350}
1351
1352/*
1353** pExpr points to an expression which implements a function. If
1354** it is appropriate to apply the LIKE optimization to that function
1355** then set aWc[0] through aWc[2] to the wildcard characters and
1356** return TRUE. If the function is not a LIKE-style function then
1357** return FALSE.
1358*/
drhd64fe2f2005-08-28 17:00:23 +00001359int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001360 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001361 if( pExpr->op!=TK_FUNCTION
1362 || !pExpr->x.pList
1363 || pExpr->x.pList->nExpr!=2
1364 ){
drh55ef4d92005-08-14 01:20:37 +00001365 return 0;
1366 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001367 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh33e619f2009-05-28 01:00:55 +00001368 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
1369 sqlite3Strlen30(pExpr->u.zToken),
drhb7916a72009-05-27 10:31:29 +00001370 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001371 if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001372 return 0;
1373 }
1374
1375 /* The memcpy() statement assumes that the wildcard characters are
1376 ** the first three statements in the compareInfo structure. The
1377 ** asserts() that follow verify that assumption
1378 */
1379 memcpy(aWc, pDef->pUserData, 3);
1380 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1381 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1382 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd64fe2f2005-08-28 17:00:23 +00001383 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001384 return 1;
drhdc04c582002-02-24 01:55:15 +00001385}
danielk19778c0a7912008-08-20 14:49:23 +00001386
drh70a8ca32008-08-21 18:49:27 +00001387/*
drh777c5382008-08-21 20:21:34 +00001388** All all of the FuncDef structures in the aBuiltinFunc[] array above
1389** to the global function hash table. This occurs at start-time (as
1390** a consequence of calling sqlite3_initialize()).
1391**
1392** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001393*/
1394void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001395 /*
1396 ** The following array holds FuncDef structures for all of the functions
1397 ** defined in this file.
1398 **
1399 ** The array cannot be constant since changes are made to the
1400 ** FuncDef.pHash elements at start-time. The elements of this array
1401 ** are read-only after initialization is complete.
1402 */
1403 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1404 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1405 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1406 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1407 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1408 FUNCTION(trim, 1, 3, 0, trimFunc ),
1409 FUNCTION(trim, 2, 3, 0, trimFunc ),
1410 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1411 FUNCTION(min, 0, 0, 1, 0 ),
1412 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1413 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1414 FUNCTION(max, 0, 1, 1, 0 ),
1415 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
1416 FUNCTION(typeof, 1, 0, 0, typeofFunc ),
1417 FUNCTION(length, 1, 0, 0, lengthFunc ),
1418 FUNCTION(substr, 2, 0, 0, substrFunc ),
1419 FUNCTION(substr, 3, 0, 0, substrFunc ),
1420 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001421#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001422 FUNCTION(round, 1, 0, 0, roundFunc ),
1423 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001424#endif
danielk197793ce7412008-09-01 19:14:02 +00001425 FUNCTION(upper, 1, 0, 0, upperFunc ),
1426 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1427 FUNCTION(coalesce, 1, 0, 0, 0 ),
1428 FUNCTION(coalesce, -1, 0, 0, ifnullFunc ),
1429 FUNCTION(coalesce, 0, 0, 0, 0 ),
1430 FUNCTION(hex, 1, 0, 0, hexFunc ),
1431 FUNCTION(ifnull, 2, 0, 1, ifnullFunc ),
drh9373b012009-02-02 01:50:39 +00001432 FUNCTION(random, 0, 0, 0, randomFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001433 FUNCTION(randomblob, 1, 0, 0, randomBlob ),
1434 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1435 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
1436 FUNCTION(quote, 1, 0, 0, quoteFunc ),
1437 FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1438 FUNCTION(changes, 0, 0, 0, changes ),
1439 FUNCTION(total_changes, 0, 0, 0, total_changes ),
1440 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1441 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1442 #ifdef SQLITE_SOUNDEX
1443 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1444 #endif
1445 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1446 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1447 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1448 #endif
1449 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1450 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1451 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001452 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
1453 {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0},
danielk197793ce7412008-09-01 19:14:02 +00001454 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001455 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1456 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001457
1458 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1459 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1460 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1461 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1462 #else
1463 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1464 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1465 #endif
1466 };
1467
drh70a8ca32008-08-21 18:49:27 +00001468 int i;
danielk197793ce7412008-09-01 19:14:02 +00001469 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001470 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001471
drh70a8ca32008-08-21 18:49:27 +00001472 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001473 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001474 }
drh777c5382008-08-21 20:21:34 +00001475 sqlite3RegisterDateTimeFunctions();
drh70a8ca32008-08-21 18:49:27 +00001476}