blob: 058b1580c0f9e2d03f3ea860b6ac907e34c94644 [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**
drh2e79c3d2009-04-08 23:04:14 +000019** $Id: func.c,v 1.231 2009/04/08 23:04:14 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;
drh592ac8c2005-08-13 03:07:47 +0000250 char zBuf[500]; /* larger than the %f representation of the largest double */
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]);
drhe866fcb2005-07-09 02:38:06 +0000260 sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r);
drh502b9622006-04-07 13:26:42 +0000261 sqlite3AtoF(zBuf, &r);
262 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000263}
shanefbd60f82009-02-04 03:59:25 +0000264#endif
drhdc04c582002-02-24 01:55:15 +0000265
danielk197726783a52007-08-29 14:06:22 +0000266/*
267** Allocate nByte bytes of space using sqlite3_malloc(). If the
268** allocation fails, call sqlite3_result_error_nomem() to notify
drh27e62db2009-04-02 10:16:17 +0000269** the database handle that malloc() has failed and return NULL.
270** If nByte is larger than the maximum string or blob length, then
271** raise an SQLITE_TOOBIG exception and return NULL.
danielk197726783a52007-08-29 14:06:22 +0000272*/
drhb1a6c3c2008-03-20 16:30:17 +0000273static void *contextMalloc(sqlite3_context *context, i64 nByte){
drhbb4957f2008-03-20 14:03:29 +0000274 char *z;
drh27e62db2009-04-02 10:16:17 +0000275 sqlite3 *db = sqlite3_context_db_handle(context);
drhef31c6a2009-04-02 09:07:12 +0000276 assert( nByte>0 );
drh27e62db2009-04-02 10:16:17 +0000277 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
278 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
279 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drhbb4957f2008-03-20 14:03:29 +0000280 sqlite3_result_error_toobig(context);
281 z = 0;
282 }else{
drh1bd10f82008-12-10 21:19:56 +0000283 z = sqlite3Malloc((int)nByte);
drhef31c6a2009-04-02 09:07:12 +0000284 if( !z ){
drhbb4957f2008-03-20 14:03:29 +0000285 sqlite3_result_error_nomem(context);
286 }
danielk1977a1644fd2007-08-29 12:31:25 +0000287 }
288 return z;
289}
290
drhdc04c582002-02-24 01:55:15 +0000291/*
292** Implementation of the upper() and lower() SQL functions.
293*/
danielk19770ae8b832004-05-25 12:05:56 +0000294static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000295 char *z1;
296 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000297 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000298 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000299 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000300 n = sqlite3_value_bytes(argv[0]);
301 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
302 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000303 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000304 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000305 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000306 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000307 for(i=0; z1[i]; i++){
danielk197778ca0e72009-01-20 16:53:39 +0000308 z1[i] = (char)sqlite3Toupper(z1[i]);
drh7a521cf2007-04-25 18:23:52 +0000309 }
310 sqlite3_result_text(context, z1, -1, sqlite3_free);
311 }
drhdc04c582002-02-24 01:55:15 +0000312 }
313}
danielk19770ae8b832004-05-25 12:05:56 +0000314static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197778ca0e72009-01-20 16:53:39 +0000315 u8 *z1;
drh7a521cf2007-04-25 18:23:52 +0000316 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000317 int i, n;
drh1d34fde2009-02-03 15:50:33 +0000318 UNUSED_PARAMETER(argc);
drh7a521cf2007-04-25 18:23:52 +0000319 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000320 n = sqlite3_value_bytes(argv[0]);
321 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
322 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000323 if( z2 ){
drhb1a6c3c2008-03-20 16:30:17 +0000324 z1 = contextMalloc(context, ((i64)n)+1);
drh7a521cf2007-04-25 18:23:52 +0000325 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000326 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000327 for(i=0; z1[i]; i++){
danielk197778ca0e72009-01-20 16:53:39 +0000328 z1[i] = sqlite3Tolower(z1[i]);
drh7a521cf2007-04-25 18:23:52 +0000329 }
danielk197778ca0e72009-01-20 16:53:39 +0000330 sqlite3_result_text(context, (char *)z1, -1, sqlite3_free);
drh7a521cf2007-04-25 18:23:52 +0000331 }
drhdc04c582002-02-24 01:55:15 +0000332 }
333}
334
335/*
drhfbc99082002-02-28 03:14:18 +0000336** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
jplyonb6c9e6e2004-01-19 04:53:24 +0000337** All three do the same thing. They return the first non-NULL
338** argument.
drh3212e182002-02-28 00:46:26 +0000339*/
drhf9b596e2004-05-26 16:54:42 +0000340static void ifnullFunc(
341 sqlite3_context *context,
342 int argc,
343 sqlite3_value **argv
344){
drhfbc99082002-02-28 03:14:18 +0000345 int i;
346 for(i=0; i<argc; i++){
drh9c054832004-05-31 18:51:57 +0000347 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
drhf4479502004-05-27 03:12:53 +0000348 sqlite3_result_value(context, argv[i]);
drhfbc99082002-02-28 03:14:18 +0000349 break;
350 }
351 }
drh3212e182002-02-28 00:46:26 +0000352}
353
354/*
drhf9ffac92002-03-02 19:00:31 +0000355** Implementation of random(). Return a random integer.
356*/
drhf9b596e2004-05-26 16:54:42 +0000357static void randomFunc(
358 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000359 int NotUsed,
360 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000361){
drh52fc8492006-02-23 21:43:55 +0000362 sqlite_int64 r;
danielk197762c14b32008-11-19 09:05:26 +0000363 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drh2fa18682008-03-19 14:15:34 +0000364 sqlite3_randomness(sizeof(r), &r);
drh3034e3d2009-04-02 14:05:21 +0000365 if( r<0 ){
366 /* We need to prevent a random number of 0x8000000000000000
367 ** (or -9223372036854775808) since when you do abs() of that
368 ** number of you get the same value back again. To do this
369 ** in a way that is testable, mask the sign bit off of negative
370 ** values, resulting in a positive value. Then take the
371 ** 2s complement of that positive value. The end result can
372 ** therefore be no less than -9223372036854775807.
373 */
374 r = -(r ^ (((sqlite3_int64)1)<<63));
375 }
drh52fc8492006-02-23 21:43:55 +0000376 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000377}
378
379/*
drh137c7282007-01-29 17:58:28 +0000380** Implementation of randomblob(N). Return a random blob
381** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000382*/
drh137c7282007-01-29 17:58:28 +0000383static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000384 sqlite3_context *context,
385 int argc,
386 sqlite3_value **argv
387){
drh137c7282007-01-29 17:58:28 +0000388 int n;
389 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000390 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000391 UNUSED_PARAMETER(argc);
drh63cf66f2007-01-29 15:50:05 +0000392 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000393 if( n<1 ){
394 n = 1;
395 }
danielk1977a1644fd2007-08-29 12:31:25 +0000396 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000397 if( p ){
drh2fa18682008-03-19 14:15:34 +0000398 sqlite3_randomness(n, p);
drh17435752007-08-16 04:30:38 +0000399 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000400 }
drh63cf66f2007-01-29 15:50:05 +0000401}
402
403/*
drh6ed41ad2002-04-06 14:10:47 +0000404** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000405** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000406*/
danielk197751ad0ec2004-05-24 12:39:02 +0000407static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000408 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000409 int NotUsed,
410 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000411){
drhfa4a4b92008-03-19 21:45:51 +0000412 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000413 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf9b596e2004-05-26 16:54:42 +0000414 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000415}
416
rdcf146a772004-02-25 22:51:06 +0000417/*
danielk1977b28af712004-06-21 06:50:26 +0000418** Implementation of the changes() SQL function. The return value is the
419** same as the sqlite3_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000420*/
danielk1977b28af712004-06-21 06:50:26 +0000421static void changes(
drhf9b596e2004-05-26 16:54:42 +0000422 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000423 int NotUsed,
424 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000425){
drhfa4a4b92008-03-19 21:45:51 +0000426 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000427 UNUSED_PARAMETER2(NotUsed, NotUsed2);
drhf4479502004-05-27 03:12:53 +0000428 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000429}
rdcf146a772004-02-25 22:51:06 +0000430
431/*
danielk1977b28af712004-06-21 06:50:26 +0000432** Implementation of the total_changes() SQL function. The return value is
433** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000434*/
danielk1977b28af712004-06-21 06:50:26 +0000435static void total_changes(
436 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000437 int NotUsed,
438 sqlite3_value **NotUsed2
danielk197751ad0ec2004-05-24 12:39:02 +0000439){
drhfa4a4b92008-03-19 21:45:51 +0000440 sqlite3 *db = sqlite3_context_db_handle(context);
danielk197762c14b32008-11-19 09:05:26 +0000441 UNUSED_PARAMETER2(NotUsed, NotUsed2);
danielk1977b28af712004-06-21 06:50:26 +0000442 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000443}
444
drh6ed41ad2002-04-06 14:10:47 +0000445/*
drh4e5ffc52004-08-31 00:52:37 +0000446** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000447*/
drh4e5ffc52004-08-31 00:52:37 +0000448struct compareInfo {
449 u8 matchAll;
450 u8 matchOne;
451 u8 matchSet;
452 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000453};
drh55ef4d92005-08-14 01:20:37 +0000454
drhb9175ae2007-12-07 18:39:04 +0000455/*
456** For LIKE and GLOB matching on EBCDIC machines, assume that every
457** character is exactly one byte in size. Also, all characters are
458** able to participate in upper-case-to-lower-case mappings in EBCDIC
459** whereas only characters less than 0x80 do in ASCII.
460*/
461#if defined(SQLITE_EBCDIC)
drh769e97e2009-04-01 16:33:37 +0000462# define sqlite3Utf8Read(A,C) (*(A++))
drh6ed4b782007-12-10 18:07:20 +0000463# define GlogUpperToLower(A) A = sqlite3UpperToLower[A]
drhb9175ae2007-12-07 18:39:04 +0000464#else
drh6ed4b782007-12-10 18:07:20 +0000465# define GlogUpperToLower(A) if( A<0x80 ){ A = sqlite3UpperToLower[A]; }
drhb9175ae2007-12-07 18:39:04 +0000466#endif
467
drh4e5ffc52004-08-31 00:52:37 +0000468static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000469/* The correct SQL-92 behavior is for the LIKE operator to ignore
470** case. Thus 'a' LIKE 'A' would be true. */
471static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
472/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
473** is case sensitive causing 'a' LIKE 'A' to be false */
474static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000475
476/*
drh4e5ffc52004-08-31 00:52:37 +0000477** Compare two UTF-8 strings for equality where the first string can
478** potentially be a "glob" expression. Return true (1) if they
479** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000480**
drh4e5ffc52004-08-31 00:52:37 +0000481** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000482**
drh4e5ffc52004-08-31 00:52:37 +0000483** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000484**
drh4e5ffc52004-08-31 00:52:37 +0000485** '?' Matches exactly one character.
486**
487** [...] Matches one character from the enclosed list of
488** characters.
489**
490** [^...] Matches one character not in the enclosed list.
491**
492** With the [...] and [^...] matching, a ']' character can be included
493** in the list by making it the first character after '[' or '^'. A
494** range of characters can be specified using '-'. Example:
495** "[a-z]" matches any single lower-case letter. To match a '-', make
496** it the last character in the list.
497**
498** This routine is usually quick, but can be N**2 in the worst case.
499**
500** Hints: to match '*' or '?', put them in "[]". Like this:
501**
502** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000503*/
danielk19777c6303c2004-11-17 16:41:29 +0000504static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000505 const u8 *zPattern, /* The glob pattern */
506 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000507 const struct compareInfo *pInfo, /* Information about how to do the compare */
508 const int esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000509){
drh66150952007-07-23 19:12:41 +0000510 int c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000511 int invert;
512 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000513 u8 matchOne = pInfo->matchOne;
514 u8 matchAll = pInfo->matchAll;
515 u8 matchSet = pInfo->matchSet;
516 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000517 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000518
drh769e97e2009-04-01 16:33:37 +0000519 while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
danielk19777c6303c2004-11-17 16:41:29 +0000520 if( !prevEscape && c==matchAll ){
drh769e97e2009-04-01 16:33:37 +0000521 while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
drh66150952007-07-23 19:12:41 +0000522 || c == matchOne ){
drh769e97e2009-04-01 16:33:37 +0000523 if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
drh66150952007-07-23 19:12:41 +0000524 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000525 }
danielk1977ad7dd422004-06-06 12:41:49 +0000526 }
drh66150952007-07-23 19:12:41 +0000527 if( c==0 ){
528 return 1;
529 }else if( c==esc ){
drh769e97e2009-04-01 16:33:37 +0000530 c = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000531 if( c==0 ){
532 return 0;
533 }
534 }else if( c==matchSet ){
535 assert( esc==0 ); /* This is GLOB, not LIKE */
536 assert( matchSet<0x80 ); /* '[' is a single-byte character */
537 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000538 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000539 }
540 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000541 }
drh769e97e2009-04-01 16:33:37 +0000542 while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
drh66150952007-07-23 19:12:41 +0000543 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000544 GlogUpperToLower(c2);
545 GlogUpperToLower(c);
drh66150952007-07-23 19:12:41 +0000546 while( c2 != 0 && c2 != c ){
drh769e97e2009-04-01 16:33:37 +0000547 c2 = sqlite3Utf8Read(zString, &zString);
drh6ed4b782007-12-10 18:07:20 +0000548 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000549 }
drh66150952007-07-23 19:12:41 +0000550 }else{
551 while( c2 != 0 && c2 != c ){
drh769e97e2009-04-01 16:33:37 +0000552 c2 = sqlite3Utf8Read(zString, &zString);
drh66150952007-07-23 19:12:41 +0000553 }
drh4e5ffc52004-08-31 00:52:37 +0000554 }
drh66150952007-07-23 19:12:41 +0000555 if( c2==0 ) return 0;
556 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
557 }
558 return 0;
559 }else if( !prevEscape && c==matchOne ){
drh769e97e2009-04-01 16:33:37 +0000560 if( sqlite3Utf8Read(zString, &zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000561 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000562 }
drh4e5ffc52004-08-31 00:52:37 +0000563 }else if( c==matchSet ){
564 int prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000565 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000566 seen = 0;
567 invert = 0;
drh769e97e2009-04-01 16:33:37 +0000568 c = sqlite3Utf8Read(zString, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000569 if( c==0 ) return 0;
drh769e97e2009-04-01 16:33:37 +0000570 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000571 if( c2=='^' ){
572 invert = 1;
drh769e97e2009-04-01 16:33:37 +0000573 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh66150952007-07-23 19:12:41 +0000574 }
drh4e5ffc52004-08-31 00:52:37 +0000575 if( c2==']' ){
576 if( c==']' ) seen = 1;
drh769e97e2009-04-01 16:33:37 +0000577 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000578 }
drh66150952007-07-23 19:12:41 +0000579 while( c2 && c2!=']' ){
580 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
drh769e97e2009-04-01 16:33:37 +0000581 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000582 if( c>=prior_c && c<=c2 ) seen = 1;
583 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000584 }else{
drh66150952007-07-23 19:12:41 +0000585 if( c==c2 ){
586 seen = 1;
587 }
drh4e5ffc52004-08-31 00:52:37 +0000588 prior_c = c2;
589 }
drh769e97e2009-04-01 16:33:37 +0000590 c2 = sqlite3Utf8Read(zPattern, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000591 }
drh66150952007-07-23 19:12:41 +0000592 if( c2==0 || (seen ^ invert)==0 ){
593 return 0;
594 }
595 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000596 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000597 }else{
drh769e97e2009-04-01 16:33:37 +0000598 c2 = sqlite3Utf8Read(zString, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000599 if( noCase ){
drh6ed4b782007-12-10 18:07:20 +0000600 GlogUpperToLower(c);
601 GlogUpperToLower(c2);
drh4e5ffc52004-08-31 00:52:37 +0000602 }
drh66150952007-07-23 19:12:41 +0000603 if( c!=c2 ){
604 return 0;
605 }
danielk19777c6303c2004-11-17 16:41:29 +0000606 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000607 }
danielk197751ad0ec2004-05-24 12:39:02 +0000608 }
drh4e5ffc52004-08-31 00:52:37 +0000609 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000610}
drh4e5ffc52004-08-31 00:52:37 +0000611
drh55ef4d92005-08-14 01:20:37 +0000612/*
613** Count the number of times that the LIKE operator (or GLOB which is
614** just a variation of LIKE) gets called. This is used for testing
615** only.
616*/
617#ifdef SQLITE_TEST
618int sqlite3_like_count = 0;
619#endif
620
danielk19773f6b0872004-06-17 05:36:44 +0000621
622/*
623** Implementation of the like() SQL function. This function implements
624** the build-in LIKE operator. The first argument to the function is the
625** pattern and the second argument is the string. So, the SQL statements:
626**
627** A LIKE B
628**
629** is implemented as like(B,A).
630**
drh55ef4d92005-08-14 01:20:37 +0000631** This same function (with a different compareInfo structure) computes
632** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000633*/
634static void likeFunc(
635 sqlite3_context *context,
636 int argc,
637 sqlite3_value **argv
638){
drhbeb818d2007-05-08 15:34:47 +0000639 const unsigned char *zA, *zB;
drh85892bd2007-05-10 13:23:22 +0000640 int escape = 0;
drh27e62db2009-04-02 10:16:17 +0000641 int nPat;
drhbb4957f2008-03-20 14:03:29 +0000642 sqlite3 *db = sqlite3_context_db_handle(context);
drhbeb818d2007-05-08 15:34:47 +0000643
drh1f0feef2007-05-15 13:27:07 +0000644 zB = sqlite3_value_text(argv[0]);
645 zA = sqlite3_value_text(argv[1]);
646
drhbeb818d2007-05-08 15:34:47 +0000647 /* Limit the length of the LIKE or GLOB pattern to avoid problems
648 ** of deep recursion and N*N behavior in patternCompare().
649 */
drh27e62db2009-04-02 10:16:17 +0000650 nPat = sqlite3_value_bytes(argv[0]);
651 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
652 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
653 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
drhbeb818d2007-05-08 15:34:47 +0000654 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
655 return;
656 }
drh1f0feef2007-05-15 13:27:07 +0000657 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000658
danielk19777c6303c2004-11-17 16:41:29 +0000659 if( argc==3 ){
660 /* The escape character string must consist of a single UTF-8 character.
661 ** Otherwise, return an error.
662 */
663 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000664 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000665 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000666 sqlite3_result_error(context,
667 "ESCAPE expression must be a single character", -1);
668 return;
669 }
drh769e97e2009-04-01 16:33:37 +0000670 escape = sqlite3Utf8Read(zEsc, &zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000671 }
danielk19773f6b0872004-06-17 05:36:44 +0000672 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000673 struct compareInfo *pInfo = sqlite3_user_data(context);
674#ifdef SQLITE_TEST
675 sqlite3_like_count++;
676#endif
drhbeb818d2007-05-08 15:34:47 +0000677
danielk1977b56fe1f2007-05-09 08:24:44 +0000678 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000679 }
drh8912d102002-05-26 21:34:58 +0000680}
681
682/*
683** Implementation of the NULLIF(x,y) function. The result is the first
684** argument if the arguments are different. The result is NULL if the
685** arguments are equal to each other.
686*/
drhf9b596e2004-05-26 16:54:42 +0000687static void nullifFunc(
688 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000689 int NotUsed,
drhf9b596e2004-05-26 16:54:42 +0000690 sqlite3_value **argv
691){
danielk1977dc1bdc42004-06-11 10:51:27 +0000692 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk197762c14b32008-11-19 09:05:26 +0000693 UNUSED_PARAMETER(NotUsed);
danielk1977dc1bdc42004-06-11 10:51:27 +0000694 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000695 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000696 }
drh0ac65892002-04-20 14:24:41 +0000697}
698
drh647cb0e2002-11-04 19:32:25 +0000699/*
700** Implementation of the VERSION(*) function. The result is the version
701** of the SQLite library that is running.
702*/
drhf9b596e2004-05-26 16:54:42 +0000703static void versionFunc(
704 sqlite3_context *context,
danielk197762c14b32008-11-19 09:05:26 +0000705 int NotUsed,
706 sqlite3_value **NotUsed2
drhf9b596e2004-05-26 16:54:42 +0000707){
danielk197762c14b32008-11-19 09:05:26 +0000708 UNUSED_PARAMETER2(NotUsed, NotUsed2);
danielk1977d8123362004-06-12 09:25:12 +0000709 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000710}
711
drh137c7282007-01-29 17:58:28 +0000712/* Array for converting from half-bytes (nybbles) into ASCII hex
713** digits. */
714static const char hexdigits[] = {
715 '0', '1', '2', '3', '4', '5', '6', '7',
716 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
717};
danielk1977d641d642004-11-18 15:44:29 +0000718
drh47394702003-08-20 01:03:33 +0000719/*
720** EXPERIMENTAL - This is not an official function. The interface may
721** change. This function may disappear. Do not write code that depends
722** on this function.
723**
724** Implementation of the QUOTE() function. This function takes a single
725** argument. If the argument is numeric, the return value is the same as
726** the argument. If the argument is NULL, the return value is the string
727** "NULL". Otherwise, the argument is enclosed in single quotes with
728** single-quote escapes.
729*/
danielk19770ae8b832004-05-25 12:05:56 +0000730static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drha0df4cc2009-02-02 17:29:59 +0000731 assert( argc==1 );
drh1d34fde2009-02-03 15:50:33 +0000732 UNUSED_PARAMETER(argc);
drhf9b596e2004-05-26 16:54:42 +0000733 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000734 case SQLITE_INTEGER:
735 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000736 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000737 break;
738 }
danielk19773f41e972004-06-08 00:39:01 +0000739 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000740 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000741 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000742 int nBlob = sqlite3_value_bytes(argv[0]);
743 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000744 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
danielk1977a1644fd2007-08-29 12:31:25 +0000745 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000746 int i;
747 for(i=0; i<nBlob; i++){
748 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
749 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
750 }
751 zText[(nBlob*2)+2] = '\'';
752 zText[(nBlob*2)+3] = '\0';
753 zText[0] = 'X';
754 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000755 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000756 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000757 }
758 break;
759 }
drh9c054832004-05-31 18:51:57 +0000760 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000761 int i,j;
762 u64 n;
drh2646da72005-12-09 20:02:05 +0000763 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000764 char *z;
765
drh7a521cf2007-04-25 18:23:52 +0000766 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000767 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
drhb1a6c3c2008-03-20 16:30:17 +0000768 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
danielk1977a1644fd2007-08-29 12:31:25 +0000769 if( z ){
770 z[0] = '\'';
771 for(i=0, j=1; zArg[i]; i++){
772 z[j++] = zArg[i];
773 if( zArg[i]=='\'' ){
774 z[j++] = '\'';
775 }
drhf9b596e2004-05-26 16:54:42 +0000776 }
danielk1977a1644fd2007-08-29 12:31:25 +0000777 z[j++] = '\'';
778 z[j] = 0;
779 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000780 }
drha0df4cc2009-02-02 17:29:59 +0000781 break;
782 }
783 default: {
784 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
785 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
786 break;
drhf9b596e2004-05-26 16:54:42 +0000787 }
drh47394702003-08-20 01:03:33 +0000788 }
789}
790
drh137c7282007-01-29 17:58:28 +0000791/*
792** The hex() function. Interpret the argument as a blob. Return
793** a hexadecimal rendering as text.
794*/
795static void hexFunc(
796 sqlite3_context *context,
797 int argc,
798 sqlite3_value **argv
799){
800 int i, n;
801 const unsigned char *pBlob;
802 char *zHex, *z;
803 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000804 UNUSED_PARAMETER(argc);
drh1f0feef2007-05-15 13:27:07 +0000805 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +0000806 n = sqlite3_value_bytes(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000807 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drhb1a6c3c2008-03-20 16:30:17 +0000808 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
danielk1977a1644fd2007-08-29 12:31:25 +0000809 if( zHex ){
810 for(i=0; i<n; i++, pBlob++){
811 unsigned char c = *pBlob;
812 *(z++) = hexdigits[(c>>4)&0xf];
813 *(z++) = hexdigits[c&0xf];
814 }
815 *z = 0;
816 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +0000817 }
drh137c7282007-01-29 17:58:28 +0000818}
819
drh26b6d902007-03-17 13:27:54 +0000820/*
drh8cff3822007-05-02 02:08:28 +0000821** The zeroblob(N) function returns a zero-filled blob of size N bytes.
822*/
823static void zeroblobFunc(
824 sqlite3_context *context,
825 int argc,
826 sqlite3_value **argv
827){
drh98640a32007-06-07 19:08:32 +0000828 i64 n;
drh27e62db2009-04-02 10:16:17 +0000829 sqlite3 *db = sqlite3_context_db_handle(context);
drh8cff3822007-05-02 02:08:28 +0000830 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +0000831 UNUSED_PARAMETER(argc);
drh98640a32007-06-07 19:08:32 +0000832 n = sqlite3_value_int64(argv[0]);
drh27e62db2009-04-02 10:16:17 +0000833 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
834 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
835 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drh98640a32007-06-07 19:08:32 +0000836 sqlite3_result_error_toobig(context);
837 }else{
drh1bd10f82008-12-10 21:19:56 +0000838 sqlite3_result_zeroblob(context, (int)n);
drh98640a32007-06-07 19:08:32 +0000839 }
drh8cff3822007-05-02 02:08:28 +0000840}
841
842/*
drh26b6d902007-03-17 13:27:54 +0000843** The replace() function. Three arguments are all strings: call
844** them A, B, and C. The result is also a string which is derived
845** from A by replacing every occurance of B with C. The match
846** must be exact. Collating sequences are not used.
847*/
848static void replaceFunc(
849 sqlite3_context *context,
850 int argc,
851 sqlite3_value **argv
852){
853 const unsigned char *zStr; /* The input string A */
854 const unsigned char *zPattern; /* The pattern string B */
855 const unsigned char *zRep; /* The replacement string C */
856 unsigned char *zOut; /* The output */
857 int nStr; /* Size of zStr */
858 int nPattern; /* Size of zPattern */
859 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +0000860 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +0000861 int loopLimit; /* Last zStr[] that might match zPattern[] */
862 int i, j; /* Loop counters */
863
864 assert( argc==3 );
danielk1977f3d3c272008-11-19 16:52:44 +0000865 UNUSED_PARAMETER(argc);
drh26b6d902007-03-17 13:27:54 +0000866 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000867 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000868 nStr = sqlite3_value_bytes(argv[0]);
869 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000870 zPattern = sqlite3_value_text(argv[1]);
drha605fe82009-02-01 18:08:40 +0000871 if( zPattern==0 ){
drh23336062009-02-03 13:19:12 +0000872 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
873 || sqlite3_context_db_handle(context)->mallocFailed );
drha605fe82009-02-01 18:08:40 +0000874 return;
875 }
876 if( zPattern[0]==0 ){
877 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
878 sqlite3_result_value(context, argv[0]);
879 return;
880 }
drh1f0feef2007-05-15 13:27:07 +0000881 nPattern = sqlite3_value_bytes(argv[1]);
882 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000883 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000884 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000885 nRep = sqlite3_value_bytes(argv[2]);
886 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +0000887 nOut = nStr + 1;
888 assert( nOut<SQLITE_MAX_LENGTH );
drhb1a6c3c2008-03-20 16:30:17 +0000889 zOut = contextMalloc(context, (i64)nOut);
drh2e6400b2007-05-08 15:46:18 +0000890 if( zOut==0 ){
891 return;
drh26b6d902007-03-17 13:27:54 +0000892 }
drh26b6d902007-03-17 13:27:54 +0000893 loopLimit = nStr - nPattern;
894 for(i=j=0; i<=loopLimit; i++){
895 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
896 zOut[j++] = zStr[i];
897 }else{
drh4a50aac2007-08-23 02:47:53 +0000898 u8 *zOld;
drhbb4957f2008-03-20 14:03:29 +0000899 sqlite3 *db = sqlite3_context_db_handle(context);
drh2e6400b2007-05-08 15:46:18 +0000900 nOut += nRep - nPattern;
drh27e62db2009-04-02 10:16:17 +0000901 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
902 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
903 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
drha0206bc2007-05-08 15:15:02 +0000904 sqlite3_result_error_toobig(context);
drh633e6d52008-07-28 19:34:53 +0000905 sqlite3DbFree(db, zOut);
danielk197717374e82007-05-08 14:39:04 +0000906 return;
907 }
drh4a50aac2007-08-23 02:47:53 +0000908 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +0000909 zOut = sqlite3_realloc(zOut, (int)nOut);
910 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000911 sqlite3_result_error_nomem(context);
drh633e6d52008-07-28 19:34:53 +0000912 sqlite3DbFree(db, zOld);
drh2e6400b2007-05-08 15:46:18 +0000913 return;
914 }
drh26b6d902007-03-17 13:27:54 +0000915 memcpy(&zOut[j], zRep, nRep);
916 j += nRep;
917 i += nPattern-1;
918 }
919 }
drh2e6400b2007-05-08 15:46:18 +0000920 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +0000921 memcpy(&zOut[j], &zStr[i], nStr-i);
922 j += nStr - i;
923 assert( j<=nOut );
924 zOut[j] = 0;
925 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
926}
927
drh309b3382007-03-17 17:52:42 +0000928/*
929** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
930** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
931*/
932static void trimFunc(
933 sqlite3_context *context,
934 int argc,
935 sqlite3_value **argv
936){
937 const unsigned char *zIn; /* Input string */
938 const unsigned char *zCharSet; /* Set of characters to trim */
939 int nIn; /* Number of bytes in input */
drh7209c692008-04-27 18:40:11 +0000940 int flags; /* 1: trimleft 2: trimright 3: trim */
drhd1e3a612007-04-27 21:59:52 +0000941 int i; /* Loop counter */
drh1bd10f82008-12-10 21:19:56 +0000942 unsigned char *aLen = 0; /* Length of each character in zCharSet */
943 unsigned char **azChar = 0; /* Individual characters in zCharSet */
drhd1e3a612007-04-27 21:59:52 +0000944 int nChar; /* Number of characters in zCharSet */
945
drh309b3382007-03-17 17:52:42 +0000946 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
947 return;
948 }
949 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000950 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000951 nIn = sqlite3_value_bytes(argv[0]);
952 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +0000953 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +0000954 static const unsigned char lenOne[] = { 1 };
danielk1977a4de4532008-09-02 15:44:08 +0000955 static unsigned char * const azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +0000956 nChar = 1;
drh8cff3822007-05-02 02:08:28 +0000957 aLen = (u8*)lenOne;
danielk1977bc67da42007-12-11 04:23:19 +0000958 azChar = (unsigned char **)azOne;
drhd1e3a612007-04-27 21:59:52 +0000959 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +0000960 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +0000961 return;
drhd1e3a612007-04-27 21:59:52 +0000962 }else{
963 const unsigned char *z;
964 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +0000965 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000966 }
967 if( nChar>0 ){
drhb1a6c3c2008-03-20 16:30:17 +0000968 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +0000969 if( azChar==0 ){
970 return;
971 }
972 aLen = (unsigned char*)&azChar[nChar];
973 for(z=zCharSet, nChar=0; *z; nChar++){
danielk1977bc67da42007-12-11 04:23:19 +0000974 azChar[nChar] = (unsigned char *)z;
drh4a919112007-05-15 11:55:09 +0000975 SQLITE_SKIP_UTF8(z);
drh3abbd392008-12-10 23:04:13 +0000976 aLen[nChar] = (u8)(z - azChar[nChar]);
drhd1e3a612007-04-27 21:59:52 +0000977 }
978 }
drh309b3382007-03-17 17:52:42 +0000979 }
drhd1e3a612007-04-27 21:59:52 +0000980 if( nChar>0 ){
shane1fc41292008-07-08 22:28:48 +0000981 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
drh309b3382007-03-17 17:52:42 +0000982 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +0000983 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +0000984 int len = 0;
drhd1e3a612007-04-27 21:59:52 +0000985 for(i=0; i<nChar; i++){
986 len = aLen[i];
drh27e62db2009-04-02 10:16:17 +0000987 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
drhd1e3a612007-04-27 21:59:52 +0000988 }
989 if( i>=nChar ) break;
990 zIn += len;
991 nIn -= len;
drh309b3382007-03-17 17:52:42 +0000992 }
993 }
994 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +0000995 while( nIn>0 ){
drh1bd10f82008-12-10 21:19:56 +0000996 int len = 0;
drhd1e3a612007-04-27 21:59:52 +0000997 for(i=0; i<nChar; i++){
998 len = aLen[i];
999 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
1000 }
1001 if( i>=nChar ) break;
1002 nIn -= len;
drh309b3382007-03-17 17:52:42 +00001003 }
1004 }
drhd1e3a612007-04-27 21:59:52 +00001005 if( zCharSet ){
1006 sqlite3_free(azChar);
1007 }
drh309b3382007-03-17 17:52:42 +00001008 }
1009 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
1010}
drh26b6d902007-03-17 13:27:54 +00001011
danielk1977a4de4532008-09-02 15:44:08 +00001012
drhd24cc422003-03-27 12:51:24 +00001013#ifdef SQLITE_SOUNDEX
1014/*
1015** Compute the soundex encoding of a word.
1016*/
drh137c7282007-01-29 17:58:28 +00001017static void soundexFunc(
1018 sqlite3_context *context,
1019 int argc,
1020 sqlite3_value **argv
1021){
drhd24cc422003-03-27 12:51:24 +00001022 char zResult[8];
drh4c755c02004-08-08 20:22:17 +00001023 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +00001024 int i, j;
1025 static const unsigned char iCode[] = {
1026 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1027 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1028 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1029 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1030 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1031 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1032 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
1033 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
1034 };
1035 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +00001036 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +00001037 if( zIn==0 ) zIn = (u8*)"";
drhdc86e2b2009-01-24 11:30:42 +00001038 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
drhd24cc422003-03-27 12:51:24 +00001039 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +00001040 u8 prevcode = iCode[zIn[i]&0x7f];
danielk197778ca0e72009-01-20 16:53:39 +00001041 zResult[0] = sqlite3Toupper(zIn[i]);
drhd24cc422003-03-27 12:51:24 +00001042 for(j=1; j<4 && zIn[i]; i++){
1043 int code = iCode[zIn[i]&0x7f];
1044 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +00001045 if( code!=prevcode ){
1046 prevcode = code;
1047 zResult[j++] = code + '0';
1048 }
1049 }else{
1050 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +00001051 }
1052 }
1053 while( j<4 ){
1054 zResult[j++] = '0';
1055 }
1056 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001057 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +00001058 }else{
danielk1977d8123362004-06-12 09:25:12 +00001059 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +00001060 }
1061}
1062#endif
1063
drhfdb83b22006-06-17 14:12:47 +00001064#ifndef SQLITE_OMIT_LOAD_EXTENSION
1065/*
1066** A function that loads a shared-library extension then returns NULL.
1067*/
1068static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +00001069 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +00001070 const char *zProc;
drhfa4a4b92008-03-19 21:45:51 +00001071 sqlite3 *db = sqlite3_context_db_handle(context);
drhfdb83b22006-06-17 14:12:47 +00001072 char *zErrMsg = 0;
1073
1074 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +00001075 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +00001076 }else{
1077 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +00001078 }
drh7a521cf2007-04-25 18:23:52 +00001079 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001080 sqlite3_result_error(context, zErrMsg, -1);
1081 sqlite3_free(zErrMsg);
1082 }
1083}
1084#endif
1085
danielk197701427a62005-01-11 13:02:33 +00001086
drh0ac65892002-04-20 14:24:41 +00001087/*
drhd3a149e2002-02-24 17:12:53 +00001088** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001089** sum() or avg() aggregate computation.
1090*/
1091typedef struct SumCtx SumCtx;
1092struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001093 double rSum; /* Floating point sum */
1094 i64 iSum; /* Integer sum */
1095 i64 cnt; /* Number of elements summed */
1096 u8 overflow; /* True if integer overflow seen */
1097 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001098};
1099
1100/*
drha97fdd32006-01-12 22:17:50 +00001101** Routines used to compute the sum, average, and total.
1102**
1103** The SUM() function follows the (broken) SQL standard which means
1104** that it returns NULL if it sums over no inputs. TOTAL returns
1105** 0.0 in that case. In addition, TOTAL always returns a float where
1106** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001107** value. TOTAL never fails, but SUM might through an exception if
1108** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001109*/
danielk19770ae8b832004-05-25 12:05:56 +00001110static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001111 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001112 int type;
drh3f219f42005-09-08 19:45:57 +00001113 assert( argc==1 );
danielk1977f3d3c272008-11-19 16:52:44 +00001114 UNUSED_PARAMETER(argc);
drh4f26d6c2004-05-26 23:25:30 +00001115 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001116 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001117 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001118 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001119 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001120 i64 v = sqlite3_value_int64(argv[0]);
1121 p->rSum += v;
1122 if( (p->approx|p->overflow)==0 ){
1123 i64 iNewSum = p->iSum + v;
drh1bd10f82008-12-10 21:19:56 +00001124 int s1 = (int)(p->iSum >> (sizeof(i64)*8-1));
1125 int s2 = (int)(v >> (sizeof(i64)*8-1));
1126 int s3 = (int)(iNewSum >> (sizeof(i64)*8-1));
1127 p->overflow = ((s1&s2&~s3) | (~s1&~s2&s3))?1:0;
drh8c08e862006-02-11 17:34:00 +00001128 p->iSum = iNewSum;
drh29d72102006-02-09 22:13:41 +00001129 }
1130 }else{
drh8c08e862006-02-11 17:34:00 +00001131 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001132 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001133 }
drh739105c2002-05-29 23:22:23 +00001134 }
drhdd5baa92002-02-27 19:50:59 +00001135}
danielk19770ae8b832004-05-25 12:05:56 +00001136static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001137 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001138 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001139 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001140 if( p->overflow ){
1141 sqlite3_result_error(context,"integer overflow",-1);
1142 }else if( p->approx ){
1143 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001144 }else{
drh8c08e862006-02-11 17:34:00 +00001145 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001146 }
drh3d1d95e2005-09-08 10:37:01 +00001147 }
drhdd5baa92002-02-27 19:50:59 +00001148}
danielk19770ae8b832004-05-25 12:05:56 +00001149static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001150 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001151 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001152 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001153 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001154 }
1155}
drha97fdd32006-01-12 22:17:50 +00001156static void totalFinalize(sqlite3_context *context){
1157 SumCtx *p;
1158 p = sqlite3_aggregate_context(context, 0);
shanefbd60f82009-02-04 03:59:25 +00001159 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1160 sqlite3_result_double(context, p ? p->rSum : (double)0);
drha97fdd32006-01-12 22:17:50 +00001161}
drhdd5baa92002-02-27 19:50:59 +00001162
1163/*
drh0bce8352002-02-28 00:41:10 +00001164** The following structure keeps track of state information for the
1165** count() aggregate function.
1166*/
1167typedef struct CountCtx CountCtx;
1168struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001169 i64 n;
drh0bce8352002-02-28 00:41:10 +00001170};
drhdd5baa92002-02-27 19:50:59 +00001171
drh0bce8352002-02-28 00:41:10 +00001172/*
1173** Routines to implement the count() aggregate function.
1174*/
danielk19770ae8b832004-05-25 12:05:56 +00001175static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001176 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001177 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001178 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001179 p->n++;
1180 }
drh2e79c3d2009-04-08 23:04:14 +00001181
1182 /* The sqlite3_aggregate_count() function is deprecated. But just to make
1183 ** sure it still operates correctly, verify that its count agrees with our
1184 ** internal count when using count(*) and when the total count can be
1185 ** expressed as a 32-bit integer. */
1186 assert( argc==1 || p==0 || p->n>0x7fffffff
1187 || p->n==sqlite3_aggregate_count(context) );
drh0bce8352002-02-28 00:41:10 +00001188}
danielk19770ae8b832004-05-25 12:05:56 +00001189static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001190 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001191 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001192 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001193}
1194
1195/*
drh0bce8352002-02-28 00:41:10 +00001196** Routines to implement min() and max() aggregate functions.
1197*/
danielk197762c14b32008-11-19 09:05:26 +00001198static void minmaxStep(
1199 sqlite3_context *context,
1200 int NotUsed,
1201 sqlite3_value **argv
1202){
danielk197788208052004-05-25 01:13:20 +00001203 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001204 Mem *pBest;
danielk197762c14b32008-11-19 09:05:26 +00001205 UNUSED_PARAMETER(NotUsed);
drh9eb516c2004-07-18 20:52:32 +00001206
1207 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1208 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001209 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001210
danielk197788208052004-05-25 01:13:20 +00001211 if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001212 int max;
1213 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001214 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001215 /* This step function is used for both the min() and max() aggregates,
1216 ** the only difference between the two being that the sense of the
1217 ** comparison is inverted. For the max() aggregate, the
1218 ** sqlite3_user_data() function returns (void *)-1. For min() it
1219 ** returns (void *)db, where db is the sqlite3* database pointer.
1220 ** Therefore the next statement sets variable 'max' to 1 for the max()
1221 ** aggregate, or 0 for min().
1222 */
drh309b3382007-03-17 17:52:42 +00001223 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001224 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001225 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001226 sqlite3VdbeMemCopy(pBest, pArg);
danielk197788208052004-05-25 01:13:20 +00001227 }
drh268380c2004-02-25 13:47:31 +00001228 }else{
drhb21c8cd2007-08-21 19:33:56 +00001229 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001230 }
1231}
danielk19770ae8b832004-05-25 12:05:56 +00001232static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001233 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001234 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1235 if( pRes ){
drhd27135a2009-04-02 13:36:37 +00001236 if( ALWAYS(pRes->flags) ){
drhabfcea22005-09-06 20:36:48 +00001237 sqlite3_result_value(context, pRes);
1238 }
1239 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001240 }
1241}
drhdd5baa92002-02-27 19:50:59 +00001242
drhb0689692007-11-01 17:38:30 +00001243/*
1244** group_concat(EXPR, ?SEPARATOR?)
1245*/
1246static void groupConcatStep(
1247 sqlite3_context *context,
1248 int argc,
1249 sqlite3_value **argv
1250){
1251 const char *zVal;
drhade86482007-11-28 22:36:40 +00001252 StrAccum *pAccum;
drhb0689692007-11-01 17:38:30 +00001253 const char *zSep;
drh07d31172009-02-02 21:57:05 +00001254 int nVal, nSep;
1255 assert( argc==1 || argc==2 );
1256 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhade86482007-11-28 22:36:40 +00001257 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
1258
1259 if( pAccum ){
drhbb4957f2008-03-20 14:03:29 +00001260 sqlite3 *db = sqlite3_context_db_handle(context);
drhade86482007-11-28 22:36:40 +00001261 pAccum->useMalloc = 1;
drhbb4957f2008-03-20 14:03:29 +00001262 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
drhade86482007-11-28 22:36:40 +00001263 if( pAccum->nChar ){
drh07d31172009-02-02 21:57:05 +00001264 if( argc==2 ){
1265 zSep = (char*)sqlite3_value_text(argv[1]);
1266 nSep = sqlite3_value_bytes(argv[1]);
drhb0689692007-11-01 17:38:30 +00001267 }else{
1268 zSep = ",";
drhade86482007-11-28 22:36:40 +00001269 nSep = 1;
drhb0689692007-11-01 17:38:30 +00001270 }
drhade86482007-11-28 22:36:40 +00001271 sqlite3StrAccumAppend(pAccum, zSep, nSep);
drhb0689692007-11-01 17:38:30 +00001272 }
drh07d31172009-02-02 21:57:05 +00001273 zVal = (char*)sqlite3_value_text(argv[0]);
1274 nVal = sqlite3_value_bytes(argv[0]);
1275 sqlite3StrAccumAppend(pAccum, zVal, nVal);
drhb0689692007-11-01 17:38:30 +00001276 }
1277}
1278static void groupConcatFinalize(sqlite3_context *context){
drhade86482007-11-28 22:36:40 +00001279 StrAccum *pAccum;
1280 pAccum = sqlite3_aggregate_context(context, 0);
1281 if( pAccum ){
1282 if( pAccum->tooBig ){
1283 sqlite3_result_error_toobig(context);
1284 }else if( pAccum->mallocFailed ){
1285 sqlite3_result_error_nomem(context);
1286 }else{
1287 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
1288 sqlite3_free);
1289 }
drhb0689692007-11-01 17:38:30 +00001290 }
1291}
drh4e5ffc52004-08-31 00:52:37 +00001292
drhd3a149e2002-02-24 17:12:53 +00001293/*
drha2ed5602002-02-26 23:55:31 +00001294** This function registered all of the above C functions as SQL
1295** functions. This should be the only routine in this file with
1296** external linkage.
drhdc04c582002-02-24 01:55:15 +00001297*/
drh9bb575f2004-09-06 17:24:11 +00001298void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drh1f01ec12005-02-15 21:36:18 +00001299#ifndef SQLITE_OMIT_ALTERTABLE
1300 sqlite3AlterFunctions(db);
1301#endif
danielk19771e536952007-08-16 10:09:01 +00001302 if( !db->mallocFailed ){
danielk1977832a58a2007-06-22 15:21:15 +00001303 int rc = sqlite3_overload_function(db, "MATCH", 2);
1304 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1305 if( rc==SQLITE_NOMEM ){
danielk19771e536952007-08-16 10:09:01 +00001306 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001307 }
1308 }
danielk1977fd9e1f32005-05-22 10:44:34 +00001309#ifdef SQLITE_SSE
drh37527852006-03-16 16:19:56 +00001310 (void)sqlite3SseFunctions(db);
danielk1977fd9e1f32005-05-22 10:44:34 +00001311#endif
drh55ef4d92005-08-14 01:20:37 +00001312}
1313
1314/*
1315** Set the LIKEOPT flag on the 2-argument function with the given name.
1316*/
drh1bd10f82008-12-10 21:19:56 +00001317static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
drh55ef4d92005-08-14 01:20:37 +00001318 FuncDef *pDef;
drhea678832008-12-10 19:26:22 +00001319 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
1320 2, SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001321 if( ALWAYS(pDef) ){
drhd64fe2f2005-08-28 17:00:23 +00001322 pDef->flags = flagVal;
drh55ef4d92005-08-14 01:20:37 +00001323 }
1324}
1325
1326/*
1327** Register the built-in LIKE and GLOB functions. The caseSensitive
1328** parameter determines whether or not the LIKE operator is case
1329** sensitive. GLOB is always case sensitive.
1330*/
1331void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1332 struct compareInfo *pInfo;
1333 if( caseSensitive ){
1334 pInfo = (struct compareInfo*)&likeInfoAlt;
1335 }else{
1336 pInfo = (struct compareInfo*)&likeInfoNorm;
1337 }
danielk1977717811c2009-03-27 15:26:03 +00001338 sqlite3CreateFunc(db, "like", 2, SQLITE_ANY, pInfo, likeFunc, 0, 0);
1339 sqlite3CreateFunc(db, "like", 3, SQLITE_ANY, pInfo, likeFunc, 0, 0);
1340 sqlite3CreateFunc(db, "glob", 2, SQLITE_ANY,
drh55ef4d92005-08-14 01:20:37 +00001341 (struct compareInfo*)&globInfo, likeFunc, 0,0);
drhd64fe2f2005-08-28 17:00:23 +00001342 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1343 setLikeOptFlag(db, "like",
1344 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001345}
1346
1347/*
1348** pExpr points to an expression which implements a function. If
1349** it is appropriate to apply the LIKE optimization to that function
1350** then set aWc[0] through aWc[2] to the wildcard characters and
1351** return TRUE. If the function is not a LIKE-style function then
1352** return FALSE.
1353*/
drhd64fe2f2005-08-28 17:00:23 +00001354int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001355 FuncDef *pDef;
danielk19776ab3a2e2009-02-19 14:39:25 +00001356 if( pExpr->op!=TK_FUNCTION
1357 || !pExpr->x.pList
1358 || pExpr->x.pList->nExpr!=2
1359 ){
drh55ef4d92005-08-14 01:20:37 +00001360 return 0;
1361 }
danielk19776ab3a2e2009-02-19 14:39:25 +00001362 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
drh2646da72005-12-09 20:02:05 +00001363 pDef = sqlite3FindFunction(db, (char*)pExpr->token.z, pExpr->token.n, 2,
drh55ef4d92005-08-14 01:20:37 +00001364 SQLITE_UTF8, 0);
drhd27135a2009-04-02 13:36:37 +00001365 if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001366 return 0;
1367 }
1368
1369 /* The memcpy() statement assumes that the wildcard characters are
1370 ** the first three statements in the compareInfo structure. The
1371 ** asserts() that follow verify that assumption
1372 */
1373 memcpy(aWc, pDef->pUserData, 3);
1374 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1375 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1376 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd64fe2f2005-08-28 17:00:23 +00001377 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001378 return 1;
drhdc04c582002-02-24 01:55:15 +00001379}
danielk19778c0a7912008-08-20 14:49:23 +00001380
drh70a8ca32008-08-21 18:49:27 +00001381/*
drh777c5382008-08-21 20:21:34 +00001382** All all of the FuncDef structures in the aBuiltinFunc[] array above
1383** to the global function hash table. This occurs at start-time (as
1384** a consequence of calling sqlite3_initialize()).
1385**
1386** After this routine runs
drh70a8ca32008-08-21 18:49:27 +00001387*/
1388void sqlite3RegisterGlobalFunctions(void){
danielk197793ce7412008-09-01 19:14:02 +00001389 /*
1390 ** The following array holds FuncDef structures for all of the functions
1391 ** defined in this file.
1392 **
1393 ** The array cannot be constant since changes are made to the
1394 ** FuncDef.pHash elements at start-time. The elements of this array
1395 ** are read-only after initialization is complete.
1396 */
1397 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
1398 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
1399 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
1400 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
1401 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
1402 FUNCTION(trim, 1, 3, 0, trimFunc ),
1403 FUNCTION(trim, 2, 3, 0, trimFunc ),
1404 FUNCTION(min, -1, 0, 1, minmaxFunc ),
1405 FUNCTION(min, 0, 0, 1, 0 ),
1406 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
1407 FUNCTION(max, -1, 1, 1, minmaxFunc ),
1408 FUNCTION(max, 0, 1, 1, 0 ),
1409 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
1410 FUNCTION(typeof, 1, 0, 0, typeofFunc ),
1411 FUNCTION(length, 1, 0, 0, lengthFunc ),
1412 FUNCTION(substr, 2, 0, 0, substrFunc ),
1413 FUNCTION(substr, 3, 0, 0, substrFunc ),
1414 FUNCTION(abs, 1, 0, 0, absFunc ),
shanefbd60f82009-02-04 03:59:25 +00001415#ifndef SQLITE_OMIT_FLOATING_POINT
danielk197793ce7412008-09-01 19:14:02 +00001416 FUNCTION(round, 1, 0, 0, roundFunc ),
1417 FUNCTION(round, 2, 0, 0, roundFunc ),
shanefbd60f82009-02-04 03:59:25 +00001418#endif
danielk197793ce7412008-09-01 19:14:02 +00001419 FUNCTION(upper, 1, 0, 0, upperFunc ),
1420 FUNCTION(lower, 1, 0, 0, lowerFunc ),
1421 FUNCTION(coalesce, 1, 0, 0, 0 ),
1422 FUNCTION(coalesce, -1, 0, 0, ifnullFunc ),
1423 FUNCTION(coalesce, 0, 0, 0, 0 ),
1424 FUNCTION(hex, 1, 0, 0, hexFunc ),
1425 FUNCTION(ifnull, 2, 0, 1, ifnullFunc ),
drh9373b012009-02-02 01:50:39 +00001426 FUNCTION(random, 0, 0, 0, randomFunc ),
danielk197793ce7412008-09-01 19:14:02 +00001427 FUNCTION(randomblob, 1, 0, 0, randomBlob ),
1428 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
1429 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
1430 FUNCTION(quote, 1, 0, 0, quoteFunc ),
1431 FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
1432 FUNCTION(changes, 0, 0, 0, changes ),
1433 FUNCTION(total_changes, 0, 0, 0, total_changes ),
1434 FUNCTION(replace, 3, 0, 0, replaceFunc ),
1435 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
1436 #ifdef SQLITE_SOUNDEX
1437 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
1438 #endif
1439 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1440 FUNCTION(load_extension, 1, 0, 0, loadExt ),
1441 FUNCTION(load_extension, 2, 0, 0, loadExt ),
1442 #endif
1443 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
1444 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
1445 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
danielk1977a5533162009-02-24 10:01:51 +00001446 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
1447 {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0},
danielk197793ce7412008-09-01 19:14:02 +00001448 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
drh07d31172009-02-02 21:57:05 +00001449 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
1450 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
danielk197793ce7412008-09-01 19:14:02 +00001451
1452 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1453 #ifdef SQLITE_CASE_SENSITIVE_LIKE
1454 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1455 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
1456 #else
1457 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
1458 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
1459 #endif
1460 };
1461
drh70a8ca32008-08-21 18:49:27 +00001462 int i;
danielk197793ce7412008-09-01 19:14:02 +00001463 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
drh106cee52008-09-03 17:11:16 +00001464 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
danielk197793ce7412008-09-01 19:14:02 +00001465
drh70a8ca32008-08-21 18:49:27 +00001466 for(i=0; i<ArraySize(aBuiltinFunc); i++){
danielk197793ce7412008-09-01 19:14:02 +00001467 sqlite3FuncDefInsert(pHash, &aFunc[i]);
drh70a8ca32008-08-21 18:49:27 +00001468 }
drh777c5382008-08-21 20:21:34 +00001469 sqlite3RegisterDateTimeFunctions();
drh70a8ca32008-08-21 18:49:27 +00001470}