blob: f530d321220db9913c3abb32d40d4a9abb7c75cb [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**
danielk197726783a52007-08-29 14:06:22 +000019** $Id: func.c,v 1.171 2007/08/29 14:06:23 danielk1977 Exp $
drhdc04c582002-02-24 01:55:15 +000020*/
drhb659e9b2005-01-28 01:29:08 +000021#include "sqliteInt.h"
drhdc04c582002-02-24 01:55:15 +000022#include <ctype.h>
drhd3a149e2002-02-24 17:12:53 +000023#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000024#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000025#include "vdbeInt.h"
drh0bce8352002-02-28 00:41:10 +000026
drh66150952007-07-23 19:12:41 +000027
drh55ef4d92005-08-14 01:20:37 +000028/*
29** Return the collating function associated with a function.
30*/
danielk1977dc1bdc42004-06-11 10:51:27 +000031static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
32 return context->pColl;
33}
34
drh0bce8352002-02-28 00:41:10 +000035/*
36** Implementation of the non-aggregate min() and max() functions
37*/
drhf9b596e2004-05-26 16:54:42 +000038static void minmaxFunc(
39 sqlite3_context *context,
40 int argc,
41 sqlite3_value **argv
42){
drh0bce8352002-02-28 00:41:10 +000043 int i;
drh268380c2004-02-25 13:47:31 +000044 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000045 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000046 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000047
drh89425d52002-02-28 03:04:48 +000048 if( argc==0 ) return;
drhc44af712004-09-02 15:53:56 +000049 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000050 pColl = sqlite3GetFuncCollSeq(context);
51 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000052 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000053 iBest = 0;
drh9c054832004-05-31 18:51:57 +000054 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000055 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000056 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000057 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drhf9b596e2004-05-26 16:54:42 +000058 iBest = i;
drh0bce8352002-02-28 00:41:10 +000059 }
60 }
drhf4479502004-05-27 03:12:53 +000061 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000062}
drh0bce8352002-02-28 00:41:10 +000063
drh268380c2004-02-25 13:47:31 +000064/*
65** Return the type of the argument.
66*/
drhf9b596e2004-05-26 16:54:42 +000067static void typeofFunc(
68 sqlite3_context *context,
69 int argc,
70 sqlite3_value **argv
71){
danielk197735bb9d02004-05-24 12:55:54 +000072 const char *z = 0;
danielk197735bb9d02004-05-24 12:55:54 +000073 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000074 case SQLITE_NULL: z = "null"; break;
75 case SQLITE_INTEGER: z = "integer"; break;
76 case SQLITE_TEXT: z = "text"; break;
77 case SQLITE_FLOAT: z = "real"; break;
78 case SQLITE_BLOB: z = "blob"; 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 );
drhf9b596e2004-05-26 16:54:42 +000095 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000096 case SQLITE_BLOB:
97 case SQLITE_INTEGER:
98 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +000099 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000100 break;
101 }
drh9c054832004-05-31 18:51:57 +0000102 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000103 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000104 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000105 len = 0;
106 while( *z ){
107 len++;
108 SQLITE_SKIP_UTF8(z);
109 }
drhf4479502004-05-27 03:12:53 +0000110 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000111 break;
112 }
113 default: {
114 sqlite3_result_null(context);
115 break;
116 }
117 }
drh0bce8352002-02-28 00:41:10 +0000118}
119
120/*
121** Implementation of the abs() function
122*/
danielk19770ae8b832004-05-25 12:05:56 +0000123static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000124 assert( argc==1 );
drhf9b596e2004-05-26 16:54:42 +0000125 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000126 case SQLITE_INTEGER: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000127 i64 iVal = sqlite3_value_int64(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000128 if( iVal<0 ){
129 if( (iVal<<1)==0 ){
130 sqlite3_result_error(context, "integer overflow", -1);
131 return;
132 }
133 iVal = -iVal;
134 }
danielk1977f93bbbe2004-05-27 10:30:52 +0000135 sqlite3_result_int64(context, iVal);
drhf9b596e2004-05-26 16:54:42 +0000136 break;
137 }
drh9c054832004-05-31 18:51:57 +0000138 case SQLITE_NULL: {
drhf9b596e2004-05-26 16:54:42 +0000139 sqlite3_result_null(context);
140 break;
141 }
142 default: {
danielk1977f93bbbe2004-05-27 10:30:52 +0000143 double rVal = sqlite3_value_double(argv[0]);
drh52fc8492006-02-23 21:43:55 +0000144 if( rVal<0 ) rVal = -rVal;
danielk1977f93bbbe2004-05-27 10:30:52 +0000145 sqlite3_result_double(context, rVal);
drhf9b596e2004-05-26 16:54:42 +0000146 break;
147 }
148 }
drh0bce8352002-02-28 00:41:10 +0000149}
150
151/*
drhf764e6f2007-05-15 01:13:47 +0000152** Implementation of the substr() function.
153**
154** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
155** p1 is 1-indexed. So substr(x,1,1) returns the first character
156** of x. If x is text, then we actually count UTF-8 characters.
157** If x is a blob, then we count bytes.
158**
159** If p1 is negative, then we begin abs(p1) from the end of x[].
drh0bce8352002-02-28 00:41:10 +0000160*/
drhf9b596e2004-05-26 16:54:42 +0000161static void substrFunc(
162 sqlite3_context *context,
163 int argc,
164 sqlite3_value **argv
165){
drh2646da72005-12-09 20:02:05 +0000166 const unsigned char *z;
167 const unsigned char *z2;
drh023ae032007-05-08 12:12:16 +0000168 int len;
drhf764e6f2007-05-15 01:13:47 +0000169 int p0type;
drh023ae032007-05-08 12:12:16 +0000170 i64 p1, p2;
drhf9b596e2004-05-26 16:54:42 +0000171
drh0bce8352002-02-28 00:41:10 +0000172 assert( argc==3 );
drhf764e6f2007-05-15 01:13:47 +0000173 p0type = sqlite3_value_type(argv[0]);
174 if( p0type==SQLITE_BLOB ){
175 len = sqlite3_value_bytes(argv[0]);
176 z = sqlite3_value_blob(argv[0]);
177 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000178 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000179 }else{
180 z = sqlite3_value_text(argv[0]);
181 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000182 len = 0;
183 for(z2=z; *z2; len++){
184 SQLITE_SKIP_UTF8(z2);
185 }
drhf764e6f2007-05-15 01:13:47 +0000186 }
danielk197751ad0ec2004-05-24 12:39:02 +0000187 p1 = sqlite3_value_int(argv[1]);
188 p2 = sqlite3_value_int(argv[2]);
drh0bce8352002-02-28 00:41:10 +0000189 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000190 p1 += len;
drh653bc752002-02-28 03:31:10 +0000191 if( p1<0 ){
192 p2 += p1;
193 p1 = 0;
194 }
drh0bce8352002-02-28 00:41:10 +0000195 }else if( p1>0 ){
196 p1--;
197 }
198 if( p1+p2>len ){
199 p2 = len-p1;
200 }
drhf764e6f2007-05-15 01:13:47 +0000201 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000202 while( *z && p1 ){
203 SQLITE_SKIP_UTF8(z);
204 p1--;
drhf764e6f2007-05-15 01:13:47 +0000205 }
drh4a919112007-05-15 11:55:09 +0000206 for(z2=z; *z2 && p2; p2--){
207 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000208 }
drh4a919112007-05-15 11:55:09 +0000209 sqlite3_result_text(context, (char*)z, z2-z, SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000210 }else{
211 if( p2<0 ) p2 = 0;
212 sqlite3_result_blob(context, (char*)&z[p1], p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000213 }
drh0bce8352002-02-28 00:41:10 +0000214}
215
216/*
217** Implementation of the round() function
218*/
danielk19770ae8b832004-05-25 12:05:56 +0000219static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000220 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000221 double r;
drh592ac8c2005-08-13 03:07:47 +0000222 char zBuf[500]; /* larger than the %f representation of the largest double */
drh0bce8352002-02-28 00:41:10 +0000223 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000224 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000225 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000226 n = sqlite3_value_int(argv[1]);
227 if( n>30 ) n = 30;
228 if( n<0 ) n = 0;
229 }
drhd589a922006-03-02 03:02:48 +0000230 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000231 r = sqlite3_value_double(argv[0]);
drhe866fcb2005-07-09 02:38:06 +0000232 sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r);
drh502b9622006-04-07 13:26:42 +0000233 sqlite3AtoF(zBuf, &r);
234 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000235}
drhdc04c582002-02-24 01:55:15 +0000236
danielk197726783a52007-08-29 14:06:22 +0000237/*
238** Allocate nByte bytes of space using sqlite3_malloc(). If the
239** allocation fails, call sqlite3_result_error_nomem() to notify
240** the database handle that malloc() has failed.
241*/
danielk1977a1644fd2007-08-29 12:31:25 +0000242static void *contextMalloc(sqlite3_context *context, int nByte){
243 char *z = sqlite3_malloc(nByte);
244 if( !z && nByte>0 ){
245 sqlite3_result_error_nomem(context);
246 }
247 return z;
248}
249
drhdc04c582002-02-24 01:55:15 +0000250/*
251** Implementation of the upper() and lower() SQL functions.
252*/
danielk19770ae8b832004-05-25 12:05:56 +0000253static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000254 char *z1;
255 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000256 int i, n;
drh9c054832004-05-31 18:51:57 +0000257 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
drh7a521cf2007-04-25 18:23:52 +0000258 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000259 n = sqlite3_value_bytes(argv[0]);
260 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
261 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000262 if( z2 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000263 z1 = contextMalloc(context, n+1);
drh7a521cf2007-04-25 18:23:52 +0000264 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000265 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000266 for(i=0; z1[i]; i++){
267 z1[i] = toupper(z1[i]);
268 }
269 sqlite3_result_text(context, z1, -1, sqlite3_free);
270 }
drhdc04c582002-02-24 01:55:15 +0000271 }
272}
danielk19770ae8b832004-05-25 12:05:56 +0000273static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000274 char *z1;
275 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000276 int i, n;
drh9c054832004-05-31 18:51:57 +0000277 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
drh7a521cf2007-04-25 18:23:52 +0000278 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000279 n = sqlite3_value_bytes(argv[0]);
280 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
281 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000282 if( z2 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000283 z1 = contextMalloc(context, n+1);
drh7a521cf2007-04-25 18:23:52 +0000284 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000285 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000286 for(i=0; z1[i]; i++){
287 z1[i] = tolower(z1[i]);
288 }
289 sqlite3_result_text(context, z1, -1, sqlite3_free);
290 }
drhdc04c582002-02-24 01:55:15 +0000291 }
292}
293
294/*
drhfbc99082002-02-28 03:14:18 +0000295** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
jplyonb6c9e6e2004-01-19 04:53:24 +0000296** All three do the same thing. They return the first non-NULL
297** argument.
drh3212e182002-02-28 00:46:26 +0000298*/
drhf9b596e2004-05-26 16:54:42 +0000299static void ifnullFunc(
300 sqlite3_context *context,
301 int argc,
302 sqlite3_value **argv
303){
drhfbc99082002-02-28 03:14:18 +0000304 int i;
305 for(i=0; i<argc; i++){
drh9c054832004-05-31 18:51:57 +0000306 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
drhf4479502004-05-27 03:12:53 +0000307 sqlite3_result_value(context, argv[i]);
drhfbc99082002-02-28 03:14:18 +0000308 break;
309 }
310 }
drh3212e182002-02-28 00:46:26 +0000311}
312
313/*
drhf9ffac92002-03-02 19:00:31 +0000314** Implementation of random(). Return a random integer.
315*/
drhf9b596e2004-05-26 16:54:42 +0000316static void randomFunc(
317 sqlite3_context *context,
318 int argc,
319 sqlite3_value **argv
320){
drh52fc8492006-02-23 21:43:55 +0000321 sqlite_int64 r;
danielk19774adee202004-05-08 08:23:19 +0000322 sqlite3Randomness(sizeof(r), &r);
drh874abbe2006-02-23 21:51:12 +0000323 if( (r<<1)==0 ) r = 0; /* Prevent 0x8000.... as the result so that we */
324 /* can always do abs() of the result */
drh52fc8492006-02-23 21:43:55 +0000325 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000326}
327
328/*
drh137c7282007-01-29 17:58:28 +0000329** Implementation of randomblob(N). Return a random blob
330** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000331*/
drh137c7282007-01-29 17:58:28 +0000332static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000333 sqlite3_context *context,
334 int argc,
335 sqlite3_value **argv
336){
drh137c7282007-01-29 17:58:28 +0000337 int n;
338 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000339 assert( argc==1 );
340 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000341 if( n<1 ){
342 n = 1;
343 }
344 if( n>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000345 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000346 return;
347 }
danielk1977a1644fd2007-08-29 12:31:25 +0000348 p = contextMalloc(context, n);
drh02d85832007-05-07 19:31:15 +0000349 if( p ){
350 sqlite3Randomness(n, p);
drh17435752007-08-16 04:30:38 +0000351 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000352 }
drh63cf66f2007-01-29 15:50:05 +0000353}
354
355/*
drh6ed41ad2002-04-06 14:10:47 +0000356** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000357** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000358*/
danielk197751ad0ec2004-05-24 12:39:02 +0000359static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000360 sqlite3_context *context,
danielk197751ad0ec2004-05-24 12:39:02 +0000361 int arg,
362 sqlite3_value **argv
363){
drh9bb575f2004-09-06 17:24:11 +0000364 sqlite3 *db = sqlite3_user_data(context);
drhf9b596e2004-05-26 16:54:42 +0000365 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000366}
367
rdcf146a772004-02-25 22:51:06 +0000368/*
danielk1977b28af712004-06-21 06:50:26 +0000369** Implementation of the changes() SQL function. The return value is the
370** same as the sqlite3_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000371*/
danielk1977b28af712004-06-21 06:50:26 +0000372static void changes(
drhf9b596e2004-05-26 16:54:42 +0000373 sqlite3_context *context,
374 int arg,
375 sqlite3_value **argv
376){
drh9bb575f2004-09-06 17:24:11 +0000377 sqlite3 *db = sqlite3_user_data(context);
drhf4479502004-05-27 03:12:53 +0000378 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000379}
rdcf146a772004-02-25 22:51:06 +0000380
381/*
danielk1977b28af712004-06-21 06:50:26 +0000382** Implementation of the total_changes() SQL function. The return value is
383** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000384*/
danielk1977b28af712004-06-21 06:50:26 +0000385static void total_changes(
386 sqlite3_context *context,
danielk197751ad0ec2004-05-24 12:39:02 +0000387 int arg,
388 sqlite3_value **argv
389){
drh9bb575f2004-09-06 17:24:11 +0000390 sqlite3 *db = sqlite3_user_data(context);
danielk1977b28af712004-06-21 06:50:26 +0000391 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000392}
393
drh6ed41ad2002-04-06 14:10:47 +0000394/*
drh4e5ffc52004-08-31 00:52:37 +0000395** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000396*/
drh4e5ffc52004-08-31 00:52:37 +0000397struct compareInfo {
398 u8 matchAll;
399 u8 matchOne;
400 u8 matchSet;
401 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000402};
drh55ef4d92005-08-14 01:20:37 +0000403
drh4e5ffc52004-08-31 00:52:37 +0000404static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000405/* The correct SQL-92 behavior is for the LIKE operator to ignore
406** case. Thus 'a' LIKE 'A' would be true. */
407static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
408/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
409** is case sensitive causing 'a' LIKE 'A' to be false */
410static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000411
412/*
drh4e5ffc52004-08-31 00:52:37 +0000413** Compare two UTF-8 strings for equality where the first string can
414** potentially be a "glob" expression. Return true (1) if they
415** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000416**
drh4e5ffc52004-08-31 00:52:37 +0000417** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000418**
drh4e5ffc52004-08-31 00:52:37 +0000419** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000420**
drh4e5ffc52004-08-31 00:52:37 +0000421** '?' Matches exactly one character.
422**
423** [...] Matches one character from the enclosed list of
424** characters.
425**
426** [^...] Matches one character not in the enclosed list.
427**
428** With the [...] and [^...] matching, a ']' character can be included
429** in the list by making it the first character after '[' or '^'. A
430** range of characters can be specified using '-'. Example:
431** "[a-z]" matches any single lower-case letter. To match a '-', make
432** it the last character in the list.
433**
434** This routine is usually quick, but can be N**2 in the worst case.
435**
436** Hints: to match '*' or '?', put them in "[]". Like this:
437**
438** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000439*/
danielk19777c6303c2004-11-17 16:41:29 +0000440static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000441 const u8 *zPattern, /* The glob pattern */
442 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000443 const struct compareInfo *pInfo, /* Information about how to do the compare */
444 const int esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000445){
drh66150952007-07-23 19:12:41 +0000446 int c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000447 int invert;
448 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000449 u8 matchOne = pInfo->matchOne;
450 u8 matchAll = pInfo->matchAll;
451 u8 matchSet = pInfo->matchSet;
452 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000453 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000454
drh66150952007-07-23 19:12:41 +0000455 while( (c = sqlite3Utf8Read(zPattern,0,&zPattern))!=0 ){
danielk19777c6303c2004-11-17 16:41:29 +0000456 if( !prevEscape && c==matchAll ){
drh66150952007-07-23 19:12:41 +0000457 while( (c=sqlite3Utf8Read(zPattern,0,&zPattern)) == matchAll
458 || c == matchOne ){
459 if( c==matchOne && sqlite3Utf8Read(zString, 0, &zString)==0 ){
460 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000461 }
danielk1977ad7dd422004-06-06 12:41:49 +0000462 }
drh66150952007-07-23 19:12:41 +0000463 if( c==0 ){
464 return 1;
465 }else if( c==esc ){
466 c = sqlite3Utf8Read(zPattern, 0, &zPattern);
467 if( c==0 ){
468 return 0;
469 }
470 }else if( c==matchSet ){
471 assert( esc==0 ); /* This is GLOB, not LIKE */
472 assert( matchSet<0x80 ); /* '[' is a single-byte character */
473 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000474 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000475 }
476 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000477 }
478 while( (c2 = sqlite3Utf8Read(zString,0,&zString))!=0 ){
479 if( noCase ){
480 c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
481 c = c<0x80 ? sqlite3UpperToLower[c] : c;
482 while( c2 != 0 && c2 != c ){
483 c2 = sqlite3Utf8Read(zString, 0, &zString);
484 if( c2<0x80 ) c2 = sqlite3UpperToLower[c2];
drh4e5ffc52004-08-31 00:52:37 +0000485 }
drh66150952007-07-23 19:12:41 +0000486 }else{
487 while( c2 != 0 && c2 != c ){
488 c2 = sqlite3Utf8Read(zString, 0, &zString);
489 }
drh4e5ffc52004-08-31 00:52:37 +0000490 }
drh66150952007-07-23 19:12:41 +0000491 if( c2==0 ) return 0;
492 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
493 }
494 return 0;
495 }else if( !prevEscape && c==matchOne ){
496 if( sqlite3Utf8Read(zString, 0, &zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000497 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000498 }
drh4e5ffc52004-08-31 00:52:37 +0000499 }else if( c==matchSet ){
500 int prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000501 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000502 seen = 0;
503 invert = 0;
drh66150952007-07-23 19:12:41 +0000504 c = sqlite3Utf8Read(zString, 0, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000505 if( c==0 ) return 0;
drh66150952007-07-23 19:12:41 +0000506 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
507 if( c2=='^' ){
508 invert = 1;
509 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
510 }
drh4e5ffc52004-08-31 00:52:37 +0000511 if( c2==']' ){
512 if( c==']' ) seen = 1;
drh66150952007-07-23 19:12:41 +0000513 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000514 }
drh66150952007-07-23 19:12:41 +0000515 while( c2 && c2!=']' ){
516 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
517 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000518 if( c>=prior_c && c<=c2 ) seen = 1;
519 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000520 }else{
drh66150952007-07-23 19:12:41 +0000521 if( c==c2 ){
522 seen = 1;
523 }
drh4e5ffc52004-08-31 00:52:37 +0000524 prior_c = c2;
525 }
drh66150952007-07-23 19:12:41 +0000526 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000527 }
drh66150952007-07-23 19:12:41 +0000528 if( c2==0 || (seen ^ invert)==0 ){
529 return 0;
530 }
531 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000532 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000533 }else{
drh66150952007-07-23 19:12:41 +0000534 c2 = sqlite3Utf8Read(zString, 0, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000535 if( noCase ){
drh66150952007-07-23 19:12:41 +0000536 c = c<0x80 ? sqlite3UpperToLower[c] : c;
537 c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
drh4e5ffc52004-08-31 00:52:37 +0000538 }
drh66150952007-07-23 19:12:41 +0000539 if( c!=c2 ){
540 return 0;
541 }
danielk19777c6303c2004-11-17 16:41:29 +0000542 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000543 }
danielk197751ad0ec2004-05-24 12:39:02 +0000544 }
drh4e5ffc52004-08-31 00:52:37 +0000545 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000546}
drh4e5ffc52004-08-31 00:52:37 +0000547
drh55ef4d92005-08-14 01:20:37 +0000548/*
549** Count the number of times that the LIKE operator (or GLOB which is
550** just a variation of LIKE) gets called. This is used for testing
551** only.
552*/
553#ifdef SQLITE_TEST
554int sqlite3_like_count = 0;
555#endif
556
danielk19773f6b0872004-06-17 05:36:44 +0000557
558/*
559** Implementation of the like() SQL function. This function implements
560** the build-in LIKE operator. The first argument to the function is the
561** pattern and the second argument is the string. So, the SQL statements:
562**
563** A LIKE B
564**
565** is implemented as like(B,A).
566**
drh55ef4d92005-08-14 01:20:37 +0000567** This same function (with a different compareInfo structure) computes
568** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000569*/
570static void likeFunc(
571 sqlite3_context *context,
572 int argc,
573 sqlite3_value **argv
574){
drhbeb818d2007-05-08 15:34:47 +0000575 const unsigned char *zA, *zB;
drh85892bd2007-05-10 13:23:22 +0000576 int escape = 0;
drhbeb818d2007-05-08 15:34:47 +0000577
drh1f0feef2007-05-15 13:27:07 +0000578 zB = sqlite3_value_text(argv[0]);
579 zA = sqlite3_value_text(argv[1]);
580
drhbeb818d2007-05-08 15:34:47 +0000581 /* Limit the length of the LIKE or GLOB pattern to avoid problems
582 ** of deep recursion and N*N behavior in patternCompare().
583 */
danielk1977b56fe1f2007-05-09 08:24:44 +0000584 if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
drhbeb818d2007-05-08 15:34:47 +0000585 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
586 return;
587 }
drh1f0feef2007-05-15 13:27:07 +0000588 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000589
danielk19777c6303c2004-11-17 16:41:29 +0000590 if( argc==3 ){
591 /* The escape character string must consist of a single UTF-8 character.
592 ** Otherwise, return an error.
593 */
594 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000595 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000596 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000597 sqlite3_result_error(context,
598 "ESCAPE expression must be a single character", -1);
599 return;
600 }
drh66150952007-07-23 19:12:41 +0000601 escape = sqlite3Utf8Read(zEsc, 0, &zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000602 }
danielk19773f6b0872004-06-17 05:36:44 +0000603 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000604 struct compareInfo *pInfo = sqlite3_user_data(context);
605#ifdef SQLITE_TEST
606 sqlite3_like_count++;
607#endif
drhbeb818d2007-05-08 15:34:47 +0000608
danielk1977b56fe1f2007-05-09 08:24:44 +0000609 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000610 }
drh8912d102002-05-26 21:34:58 +0000611}
612
613/*
614** Implementation of the NULLIF(x,y) function. The result is the first
615** argument if the arguments are different. The result is NULL if the
616** arguments are equal to each other.
617*/
drhf9b596e2004-05-26 16:54:42 +0000618static void nullifFunc(
619 sqlite3_context *context,
620 int argc,
621 sqlite3_value **argv
622){
danielk1977dc1bdc42004-06-11 10:51:27 +0000623 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
624 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000625 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000626 }
drh0ac65892002-04-20 14:24:41 +0000627}
628
drh647cb0e2002-11-04 19:32:25 +0000629/*
630** Implementation of the VERSION(*) function. The result is the version
631** of the SQLite library that is running.
632*/
drhf9b596e2004-05-26 16:54:42 +0000633static void versionFunc(
634 sqlite3_context *context,
635 int argc,
636 sqlite3_value **argv
637){
danielk1977d8123362004-06-12 09:25:12 +0000638 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000639}
640
drh137c7282007-01-29 17:58:28 +0000641/* Array for converting from half-bytes (nybbles) into ASCII hex
642** digits. */
643static const char hexdigits[] = {
644 '0', '1', '2', '3', '4', '5', '6', '7',
645 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
646};
danielk1977d641d642004-11-18 15:44:29 +0000647
drh47394702003-08-20 01:03:33 +0000648/*
649** EXPERIMENTAL - This is not an official function. The interface may
650** change. This function may disappear. Do not write code that depends
651** on this function.
652**
653** Implementation of the QUOTE() function. This function takes a single
654** argument. If the argument is numeric, the return value is the same as
655** the argument. If the argument is NULL, the return value is the string
656** "NULL". Otherwise, the argument is enclosed in single quotes with
657** single-quote escapes.
658*/
danielk19770ae8b832004-05-25 12:05:56 +0000659static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh47394702003-08-20 01:03:33 +0000660 if( argc<1 ) return;
drhf9b596e2004-05-26 16:54:42 +0000661 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000662 case SQLITE_NULL: {
danielk1977d8123362004-06-12 09:25:12 +0000663 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
drhf9b596e2004-05-26 16:54:42 +0000664 break;
drh47394702003-08-20 01:03:33 +0000665 }
drh9c054832004-05-31 18:51:57 +0000666 case SQLITE_INTEGER:
667 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000668 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000669 break;
670 }
danielk19773f41e972004-06-08 00:39:01 +0000671 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000672 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000673 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000674 int nBlob = sqlite3_value_bytes(argv[0]);
675 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
danielk19773f41e972004-06-08 00:39:01 +0000676
drh023ae032007-05-08 12:12:16 +0000677 if( 2*nBlob+4>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000678 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000679 return;
680 }
danielk1977a1644fd2007-08-29 12:31:25 +0000681 zText = (char *)contextMalloc(context, (2*nBlob)+4);
682 if( zText ){
danielk19773f41e972004-06-08 00:39:01 +0000683 int i;
684 for(i=0; i<nBlob; i++){
685 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
686 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
687 }
688 zText[(nBlob*2)+2] = '\'';
689 zText[(nBlob*2)+3] = '\0';
690 zText[0] = 'X';
691 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000692 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000693 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000694 }
695 break;
696 }
drh9c054832004-05-31 18:51:57 +0000697 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000698 int i,j;
699 u64 n;
drh2646da72005-12-09 20:02:05 +0000700 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000701 char *z;
702
drh7a521cf2007-04-25 18:23:52 +0000703 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000704 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
705 if( i+n+3>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000706 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000707 return;
708 }
danielk1977a1644fd2007-08-29 12:31:25 +0000709 z = contextMalloc(context, i+n+3);
710 if( z ){
711 z[0] = '\'';
712 for(i=0, j=1; zArg[i]; i++){
713 z[j++] = zArg[i];
714 if( zArg[i]=='\'' ){
715 z[j++] = '\'';
716 }
drhf9b596e2004-05-26 16:54:42 +0000717 }
danielk1977a1644fd2007-08-29 12:31:25 +0000718 z[j++] = '\'';
719 z[j] = 0;
720 sqlite3_result_text(context, z, j, sqlite3_free);
drhf9b596e2004-05-26 16:54:42 +0000721 }
drhf9b596e2004-05-26 16:54:42 +0000722 }
drh47394702003-08-20 01:03:33 +0000723 }
724}
725
drh137c7282007-01-29 17:58:28 +0000726/*
727** The hex() function. Interpret the argument as a blob. Return
728** a hexadecimal rendering as text.
729*/
730static void hexFunc(
731 sqlite3_context *context,
732 int argc,
733 sqlite3_value **argv
734){
735 int i, n;
736 const unsigned char *pBlob;
737 char *zHex, *z;
738 assert( argc==1 );
drh1f0feef2007-05-15 13:27:07 +0000739 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +0000740 n = sqlite3_value_bytes(argv[0]);
drh023ae032007-05-08 12:12:16 +0000741 if( n*2+1>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000742 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000743 return;
744 }
drh1f0feef2007-05-15 13:27:07 +0000745 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
danielk1977a1644fd2007-08-29 12:31:25 +0000746 z = zHex = contextMalloc(context, n*2 + 1);
747 if( zHex ){
748 for(i=0; i<n; i++, pBlob++){
749 unsigned char c = *pBlob;
750 *(z++) = hexdigits[(c>>4)&0xf];
751 *(z++) = hexdigits[c&0xf];
752 }
753 *z = 0;
754 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
drh137c7282007-01-29 17:58:28 +0000755 }
drh137c7282007-01-29 17:58:28 +0000756}
757
drh26b6d902007-03-17 13:27:54 +0000758/*
drh8cff3822007-05-02 02:08:28 +0000759** The zeroblob(N) function returns a zero-filled blob of size N bytes.
760*/
761static void zeroblobFunc(
762 sqlite3_context *context,
763 int argc,
764 sqlite3_value **argv
765){
drh98640a32007-06-07 19:08:32 +0000766 i64 n;
drh8cff3822007-05-02 02:08:28 +0000767 assert( argc==1 );
drh98640a32007-06-07 19:08:32 +0000768 n = sqlite3_value_int64(argv[0]);
769 if( n>SQLITE_MAX_LENGTH ){
770 sqlite3_result_error_toobig(context);
771 }else{
772 sqlite3_result_zeroblob(context, n);
773 }
drh8cff3822007-05-02 02:08:28 +0000774}
775
776/*
drh26b6d902007-03-17 13:27:54 +0000777** The replace() function. Three arguments are all strings: call
778** them A, B, and C. The result is also a string which is derived
779** from A by replacing every occurance of B with C. The match
780** must be exact. Collating sequences are not used.
781*/
782static void replaceFunc(
783 sqlite3_context *context,
784 int argc,
785 sqlite3_value **argv
786){
787 const unsigned char *zStr; /* The input string A */
788 const unsigned char *zPattern; /* The pattern string B */
789 const unsigned char *zRep; /* The replacement string C */
790 unsigned char *zOut; /* The output */
791 int nStr; /* Size of zStr */
792 int nPattern; /* Size of zPattern */
793 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +0000794 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +0000795 int loopLimit; /* Last zStr[] that might match zPattern[] */
796 int i, j; /* Loop counters */
797
798 assert( argc==3 );
drh26b6d902007-03-17 13:27:54 +0000799 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000800 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000801 nStr = sqlite3_value_bytes(argv[0]);
802 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000803 zPattern = sqlite3_value_text(argv[1]);
drh709cff32007-04-27 01:18:02 +0000804 if( zPattern==0 || zPattern[0]==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000805 nPattern = sqlite3_value_bytes(argv[1]);
806 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000807 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000808 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000809 nRep = sqlite3_value_bytes(argv[2]);
810 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +0000811 nOut = nStr + 1;
812 assert( nOut<SQLITE_MAX_LENGTH );
danielk1977a1644fd2007-08-29 12:31:25 +0000813 zOut = contextMalloc(context, (int)nOut);
drh2e6400b2007-05-08 15:46:18 +0000814 if( zOut==0 ){
815 return;
drh26b6d902007-03-17 13:27:54 +0000816 }
drh26b6d902007-03-17 13:27:54 +0000817 loopLimit = nStr - nPattern;
818 for(i=j=0; i<=loopLimit; i++){
819 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
820 zOut[j++] = zStr[i];
821 }else{
drh4a50aac2007-08-23 02:47:53 +0000822 u8 *zOld;
drh2e6400b2007-05-08 15:46:18 +0000823 nOut += nRep - nPattern;
824 if( nOut>=SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000825 sqlite3_result_error_toobig(context);
danielk197717374e82007-05-08 14:39:04 +0000826 sqlite3_free(zOut);
827 return;
828 }
drh4a50aac2007-08-23 02:47:53 +0000829 zOld = zOut;
drh2e6400b2007-05-08 15:46:18 +0000830 zOut = sqlite3_realloc(zOut, (int)nOut);
831 if( zOut==0 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000832 sqlite3_result_error_nomem(context);
drh4a50aac2007-08-23 02:47:53 +0000833 sqlite3_free(zOld);
drh2e6400b2007-05-08 15:46:18 +0000834 return;
835 }
drh26b6d902007-03-17 13:27:54 +0000836 memcpy(&zOut[j], zRep, nRep);
837 j += nRep;
838 i += nPattern-1;
839 }
840 }
drh2e6400b2007-05-08 15:46:18 +0000841 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +0000842 memcpy(&zOut[j], &zStr[i], nStr-i);
843 j += nStr - i;
844 assert( j<=nOut );
845 zOut[j] = 0;
846 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
847}
848
drh309b3382007-03-17 17:52:42 +0000849/*
850** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
851** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
852*/
853static void trimFunc(
854 sqlite3_context *context,
855 int argc,
856 sqlite3_value **argv
857){
858 const unsigned char *zIn; /* Input string */
859 const unsigned char *zCharSet; /* Set of characters to trim */
860 int nIn; /* Number of bytes in input */
drhd1e3a612007-04-27 21:59:52 +0000861 int flags; /* 1: trimleft 2: trimright 3: trim */
862 int i; /* Loop counter */
863 unsigned char *aLen; /* Length of each character in zCharSet */
864 const unsigned char **azChar; /* Individual characters in zCharSet */
865 int nChar; /* Number of characters in zCharSet */
866
drh309b3382007-03-17 17:52:42 +0000867 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
868 return;
869 }
870 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000871 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000872 nIn = sqlite3_value_bytes(argv[0]);
873 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +0000874 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +0000875 static const unsigned char lenOne[] = { 1 };
drh8cff3822007-05-02 02:08:28 +0000876 static const unsigned char *azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +0000877 nChar = 1;
drh8cff3822007-05-02 02:08:28 +0000878 aLen = (u8*)lenOne;
879 azChar = azOne;
drhd1e3a612007-04-27 21:59:52 +0000880 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +0000881 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +0000882 return;
drhd1e3a612007-04-27 21:59:52 +0000883 }else{
884 const unsigned char *z;
885 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +0000886 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000887 }
888 if( nChar>0 ){
danielk1977a1644fd2007-08-29 12:31:25 +0000889 azChar = contextMalloc(context, nChar*(sizeof(char*)+1));
drhd1e3a612007-04-27 21:59:52 +0000890 if( azChar==0 ){
891 return;
892 }
893 aLen = (unsigned char*)&azChar[nChar];
894 for(z=zCharSet, nChar=0; *z; nChar++){
895 azChar[nChar] = z;
drh4a919112007-05-15 11:55:09 +0000896 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000897 aLen[nChar] = z - azChar[nChar];
898 }
899 }
drh309b3382007-03-17 17:52:42 +0000900 }
drhd1e3a612007-04-27 21:59:52 +0000901 if( nChar>0 ){
drh309b3382007-03-17 17:52:42 +0000902 flags = (int)sqlite3_user_data(context);
903 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +0000904 while( nIn>0 ){
905 int len;
906 for(i=0; i<nChar; i++){
907 len = aLen[i];
908 if( memcmp(zIn, azChar[i], len)==0 ) break;
909 }
910 if( i>=nChar ) break;
911 zIn += len;
912 nIn -= len;
drh309b3382007-03-17 17:52:42 +0000913 }
914 }
915 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +0000916 while( nIn>0 ){
917 int len;
918 for(i=0; i<nChar; i++){
919 len = aLen[i];
920 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
921 }
922 if( i>=nChar ) break;
923 nIn -= len;
drh309b3382007-03-17 17:52:42 +0000924 }
925 }
drhd1e3a612007-04-27 21:59:52 +0000926 if( zCharSet ){
927 sqlite3_free(azChar);
928 }
drh309b3382007-03-17 17:52:42 +0000929 }
930 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
931}
drh26b6d902007-03-17 13:27:54 +0000932
drhd24cc422003-03-27 12:51:24 +0000933#ifdef SQLITE_SOUNDEX
934/*
935** Compute the soundex encoding of a word.
936*/
drh137c7282007-01-29 17:58:28 +0000937static void soundexFunc(
938 sqlite3_context *context,
939 int argc,
940 sqlite3_value **argv
941){
drhd24cc422003-03-27 12:51:24 +0000942 char zResult[8];
drh4c755c02004-08-08 20:22:17 +0000943 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +0000944 int i, j;
945 static const unsigned char iCode[] = {
946 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
947 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
949 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
950 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
951 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
952 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
953 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
954 };
955 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +0000956 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +0000957 if( zIn==0 ) zIn = (u8*)"";
drhd24cc422003-03-27 12:51:24 +0000958 for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
959 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +0000960 u8 prevcode = iCode[zIn[i]&0x7f];
drhd24cc422003-03-27 12:51:24 +0000961 zResult[0] = toupper(zIn[i]);
962 for(j=1; j<4 && zIn[i]; i++){
963 int code = iCode[zIn[i]&0x7f];
964 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +0000965 if( code!=prevcode ){
966 prevcode = code;
967 zResult[j++] = code + '0';
968 }
969 }else{
970 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +0000971 }
972 }
973 while( j<4 ){
974 zResult[j++] = '0';
975 }
976 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +0000977 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +0000978 }else{
danielk1977d8123362004-06-12 09:25:12 +0000979 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +0000980 }
981}
982#endif
983
drhfdb83b22006-06-17 14:12:47 +0000984#ifndef SQLITE_OMIT_LOAD_EXTENSION
985/*
986** A function that loads a shared-library extension then returns NULL.
987*/
988static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +0000989 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000990 const char *zProc;
drhfdb83b22006-06-17 14:12:47 +0000991 sqlite3 *db = sqlite3_user_data(context);
992 char *zErrMsg = 0;
993
994 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +0000995 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +0000996 }else{
997 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +0000998 }
drh7a521cf2007-04-25 18:23:52 +0000999 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +00001000 sqlite3_result_error(context, zErrMsg, -1);
1001 sqlite3_free(zErrMsg);
1002 }
1003}
1004#endif
1005
drh193a6b42002-07-07 16:52:46 +00001006#ifdef SQLITE_TEST
1007/*
1008** This function generates a string of random characters. Used for
1009** generating test data.
1010*/
danielk19770ae8b832004-05-25 12:05:56 +00001011static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){
drhbbd82df2004-02-11 09:46:30 +00001012 static const unsigned char zSrc[] =
drh193a6b42002-07-07 16:52:46 +00001013 "abcdefghijklmnopqrstuvwxyz"
1014 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1015 "0123456789"
1016 ".-!,:*^+=_|?/<> ";
1017 int iMin, iMax, n, r, i;
drhbbd82df2004-02-11 09:46:30 +00001018 unsigned char zBuf[1000];
drh193a6b42002-07-07 16:52:46 +00001019 if( argc>=1 ){
drhf9b596e2004-05-26 16:54:42 +00001020 iMin = sqlite3_value_int(argv[0]);
drh193a6b42002-07-07 16:52:46 +00001021 if( iMin<0 ) iMin = 0;
1022 if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
1023 }else{
1024 iMin = 1;
1025 }
1026 if( argc>=2 ){
drhf9b596e2004-05-26 16:54:42 +00001027 iMax = sqlite3_value_int(argv[1]);
drh193a6b42002-07-07 16:52:46 +00001028 if( iMax<iMin ) iMax = iMin;
drh1dba7272004-01-16 13:58:18 +00001029 if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
drh193a6b42002-07-07 16:52:46 +00001030 }else{
1031 iMax = 50;
1032 }
1033 n = iMin;
1034 if( iMax>iMin ){
danielk19774adee202004-05-08 08:23:19 +00001035 sqlite3Randomness(sizeof(r), &r);
drhbbd82df2004-02-11 09:46:30 +00001036 r &= 0x7fffffff;
drh193a6b42002-07-07 16:52:46 +00001037 n += r%(iMax + 1 - iMin);
1038 }
drh1dba7272004-01-16 13:58:18 +00001039 assert( n<sizeof(zBuf) );
danielk19774adee202004-05-08 08:23:19 +00001040 sqlite3Randomness(n, zBuf);
drh193a6b42002-07-07 16:52:46 +00001041 for(i=0; i<n; i++){
drhbbd82df2004-02-11 09:46:30 +00001042 zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
drh193a6b42002-07-07 16:52:46 +00001043 }
1044 zBuf[n] = 0;
drh2646da72005-12-09 20:02:05 +00001045 sqlite3_result_text(context, (char*)zBuf, n, SQLITE_TRANSIENT);
danielk1977d8123362004-06-12 09:25:12 +00001046}
drh0e3d7472004-06-19 17:33:07 +00001047#endif /* SQLITE_TEST */
danielk1977d8123362004-06-12 09:25:12 +00001048
drh0e3d7472004-06-19 17:33:07 +00001049#ifdef SQLITE_TEST
danielk1977d8123362004-06-12 09:25:12 +00001050/*
1051** The following two SQL functions are used to test returning a text
1052** result with a destructor. Function 'test_destructor' takes one argument
1053** and returns the same argument interpreted as TEXT. A destructor is
1054** passed with the sqlite3_result_text() call.
1055**
1056** SQL function 'test_destructor_count' returns the number of outstanding
1057** allocations made by 'test_destructor';
1058**
1059** WARNING: Not threadsafe.
1060*/
1061static int test_destructor_count_var = 0;
1062static void destructor(void *p){
1063 char *zVal = (char *)p;
1064 assert(zVal);
1065 zVal--;
drh17435752007-08-16 04:30:38 +00001066 sqlite3_free(zVal);
danielk1977d8123362004-06-12 09:25:12 +00001067 test_destructor_count_var--;
1068}
1069static void test_destructor(
1070 sqlite3_context *pCtx,
1071 int nArg,
1072 sqlite3_value **argv
1073){
1074 char *zVal;
danielk1977f4618892004-06-28 13:09:11 +00001075 int len;
drh9bb575f2004-09-06 17:24:11 +00001076 sqlite3 *db = sqlite3_user_data(pCtx);
danielk1977f4618892004-06-28 13:09:11 +00001077
danielk1977d8123362004-06-12 09:25:12 +00001078 test_destructor_count_var++;
1079 assert( nArg==1 );
1080 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhb21c8cd2007-08-21 19:33:56 +00001081 len = sqlite3ValueBytes(argv[0], ENC(db));
danielk197726783a52007-08-29 14:06:22 +00001082 zVal = contextMalloc(pCtx, len+3);
1083 if( !zVal ){
1084 return;
1085 }
1086 zVal[len+1] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001087 zVal++;
drhb21c8cd2007-08-21 19:33:56 +00001088 memcpy(zVal, sqlite3ValueText(argv[0], ENC(db)), len);
danielk197714db2662006-01-09 16:12:04 +00001089 if( ENC(db)==SQLITE_UTF8 ){
danielk1977f4618892004-06-28 13:09:11 +00001090 sqlite3_result_text(pCtx, zVal, -1, destructor);
drh6c626082004-11-14 21:56:29 +00001091#ifndef SQLITE_OMIT_UTF16
danielk197714db2662006-01-09 16:12:04 +00001092 }else if( ENC(db)==SQLITE_UTF16LE ){
danielk1977f4618892004-06-28 13:09:11 +00001093 sqlite3_result_text16le(pCtx, zVal, -1, destructor);
1094 }else{
1095 sqlite3_result_text16be(pCtx, zVal, -1, destructor);
drh6c626082004-11-14 21:56:29 +00001096#endif /* SQLITE_OMIT_UTF16 */
danielk1977f4618892004-06-28 13:09:11 +00001097 }
danielk1977d8123362004-06-12 09:25:12 +00001098}
1099static void test_destructor_count(
1100 sqlite3_context *pCtx,
1101 int nArg,
1102 sqlite3_value **argv
1103){
1104 sqlite3_result_int(pCtx, test_destructor_count_var);
drh193a6b42002-07-07 16:52:46 +00001105}
drh0e3d7472004-06-19 17:33:07 +00001106#endif /* SQLITE_TEST */
danielk19773f6b0872004-06-17 05:36:44 +00001107
drh0e3d7472004-06-19 17:33:07 +00001108#ifdef SQLITE_TEST
1109/*
1110** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata()
1111** interface.
1112**
1113** The test_auxdata() SQL function attempts to register each of its arguments
1114** as auxiliary data. If there are no prior registrations of aux data for
1115** that argument (meaning the argument is not a constant or this is its first
1116** call) then the result for that argument is 0. If there is a prior
1117** registration, the result for that argument is 1. The overall result
1118** is the individual argument results separated by spaces.
1119*/
drh17435752007-08-16 04:30:38 +00001120static void free_test_auxdata(void *p) {sqlite3_free(p);}
danielk19773f6b0872004-06-17 05:36:44 +00001121static void test_auxdata(
1122 sqlite3_context *pCtx,
1123 int nArg,
1124 sqlite3_value **argv
1125){
1126 int i;
danielk1977a1644fd2007-08-29 12:31:25 +00001127 char *zRet = contextMalloc(pCtx, nArg*2);
danielk19773f6b0872004-06-17 05:36:44 +00001128 if( !zRet ) return;
danielk1977a1644fd2007-08-29 12:31:25 +00001129 memset(zRet, 0, nArg*2);
danielk19773f6b0872004-06-17 05:36:44 +00001130 for(i=0; i<nArg; i++){
drh2646da72005-12-09 20:02:05 +00001131 char const *z = (char*)sqlite3_value_text(argv[i]);
danielk19773f6b0872004-06-17 05:36:44 +00001132 if( z ){
1133 char *zAux = sqlite3_get_auxdata(pCtx, i);
1134 if( zAux ){
1135 zRet[i*2] = '1';
1136 if( strcmp(zAux, z) ){
danielk1977e0fc5262007-07-26 06:50:05 +00001137 free_test_auxdata((void *)zRet);
danielk19773f6b0872004-06-17 05:36:44 +00001138 sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
1139 return;
1140 }
1141 }else{
1142 zRet[i*2] = '0';
danielk1977a1644fd2007-08-29 12:31:25 +00001143 zAux = contextMalloc(pCtx, strlen(z)+1);
1144 if( zAux ){
1145 strcpy(zAux, z);
1146 sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata);
1147 }
danielk19773f6b0872004-06-17 05:36:44 +00001148 }
1149 zRet[i*2+1] = ' ';
1150 }
1151 }
1152 sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata);
1153}
drh0e3d7472004-06-19 17:33:07 +00001154#endif /* SQLITE_TEST */
drh193a6b42002-07-07 16:52:46 +00001155
danielk197701427a62005-01-11 13:02:33 +00001156#ifdef SQLITE_TEST
1157/*
1158** A function to test error reporting from user functions. This function
1159** returns a copy of it's first argument as an error.
1160*/
1161static void test_error(
1162 sqlite3_context *pCtx,
1163 int nArg,
1164 sqlite3_value **argv
1165){
drh2646da72005-12-09 20:02:05 +00001166 sqlite3_result_error(pCtx, (char*)sqlite3_value_text(argv[0]), 0);
danielk197701427a62005-01-11 13:02:33 +00001167}
1168#endif /* SQLITE_TEST */
1169
drh0ac65892002-04-20 14:24:41 +00001170/*
drhd3a149e2002-02-24 17:12:53 +00001171** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001172** sum() or avg() aggregate computation.
1173*/
1174typedef struct SumCtx SumCtx;
1175struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001176 double rSum; /* Floating point sum */
1177 i64 iSum; /* Integer sum */
1178 i64 cnt; /* Number of elements summed */
1179 u8 overflow; /* True if integer overflow seen */
1180 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001181};
1182
1183/*
drha97fdd32006-01-12 22:17:50 +00001184** Routines used to compute the sum, average, and total.
1185**
1186** The SUM() function follows the (broken) SQL standard which means
1187** that it returns NULL if it sums over no inputs. TOTAL returns
1188** 0.0 in that case. In addition, TOTAL always returns a float where
1189** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001190** value. TOTAL never fails, but SUM might through an exception if
1191** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001192*/
danielk19770ae8b832004-05-25 12:05:56 +00001193static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001194 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001195 int type;
drh3f219f42005-09-08 19:45:57 +00001196 assert( argc==1 );
drh4f26d6c2004-05-26 23:25:30 +00001197 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001198 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001199 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001200 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001201 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001202 i64 v = sqlite3_value_int64(argv[0]);
1203 p->rSum += v;
1204 if( (p->approx|p->overflow)==0 ){
1205 i64 iNewSum = p->iSum + v;
1206 int s1 = p->iSum >> (sizeof(i64)*8-1);
1207 int s2 = v >> (sizeof(i64)*8-1);
1208 int s3 = iNewSum >> (sizeof(i64)*8-1);
1209 p->overflow = (s1&s2&~s3) | (~s1&~s2&s3);
1210 p->iSum = iNewSum;
drh29d72102006-02-09 22:13:41 +00001211 }
1212 }else{
drh8c08e862006-02-11 17:34:00 +00001213 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001214 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001215 }
drh739105c2002-05-29 23:22:23 +00001216 }
drhdd5baa92002-02-27 19:50:59 +00001217}
danielk19770ae8b832004-05-25 12:05:56 +00001218static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001219 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001220 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001221 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001222 if( p->overflow ){
1223 sqlite3_result_error(context,"integer overflow",-1);
1224 }else if( p->approx ){
1225 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001226 }else{
drh8c08e862006-02-11 17:34:00 +00001227 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001228 }
drh3d1d95e2005-09-08 10:37:01 +00001229 }
drhdd5baa92002-02-27 19:50:59 +00001230}
danielk19770ae8b832004-05-25 12:05:56 +00001231static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001232 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001233 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001234 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001235 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001236 }
1237}
drha97fdd32006-01-12 22:17:50 +00001238static void totalFinalize(sqlite3_context *context){
1239 SumCtx *p;
1240 p = sqlite3_aggregate_context(context, 0);
drh8c08e862006-02-11 17:34:00 +00001241 sqlite3_result_double(context, p ? p->rSum : 0.0);
drha97fdd32006-01-12 22:17:50 +00001242}
drhdd5baa92002-02-27 19:50:59 +00001243
1244/*
drh0bce8352002-02-28 00:41:10 +00001245** The following structure keeps track of state information for the
1246** count() aggregate function.
1247*/
1248typedef struct CountCtx CountCtx;
1249struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001250 i64 n;
drh0bce8352002-02-28 00:41:10 +00001251};
drhdd5baa92002-02-27 19:50:59 +00001252
drh0bce8352002-02-28 00:41:10 +00001253/*
1254** Routines to implement the count() aggregate function.
1255*/
danielk19770ae8b832004-05-25 12:05:56 +00001256static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001257 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001258 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001259 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001260 p->n++;
1261 }
1262}
danielk19770ae8b832004-05-25 12:05:56 +00001263static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001264 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001265 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001266 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001267}
1268
1269/*
drh0bce8352002-02-28 00:41:10 +00001270** Routines to implement min() and max() aggregate functions.
1271*/
danielk19770ae8b832004-05-25 12:05:56 +00001272static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197788208052004-05-25 01:13:20 +00001273 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001274 Mem *pBest;
1275
1276 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1277 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001278 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001279
danielk197788208052004-05-25 01:13:20 +00001280 if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001281 int max;
1282 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001283 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001284 /* This step function is used for both the min() and max() aggregates,
1285 ** the only difference between the two being that the sense of the
1286 ** comparison is inverted. For the max() aggregate, the
1287 ** sqlite3_user_data() function returns (void *)-1. For min() it
1288 ** returns (void *)db, where db is the sqlite3* database pointer.
1289 ** Therefore the next statement sets variable 'max' to 1 for the max()
1290 ** aggregate, or 0 for min().
1291 */
drh309b3382007-03-17 17:52:42 +00001292 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001293 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001294 if( (max && cmp<0) || (!max && cmp>0) ){
drhb21c8cd2007-08-21 19:33:56 +00001295 sqlite3VdbeMemCopy(pBest, pArg);
danielk197788208052004-05-25 01:13:20 +00001296 }
drh268380c2004-02-25 13:47:31 +00001297 }else{
drhb21c8cd2007-08-21 19:33:56 +00001298 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001299 }
1300}
danielk19770ae8b832004-05-25 12:05:56 +00001301static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001302 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001303 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1304 if( pRes ){
1305 if( pRes->flags ){
1306 sqlite3_result_value(context, pRes);
1307 }
1308 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001309 }
1310}
drhdd5baa92002-02-27 19:50:59 +00001311
drh4e5ffc52004-08-31 00:52:37 +00001312
drhd3a149e2002-02-24 17:12:53 +00001313/*
drha2ed5602002-02-26 23:55:31 +00001314** This function registered all of the above C functions as SQL
1315** functions. This should be the only routine in this file with
1316** external linkage.
drhdc04c582002-02-24 01:55:15 +00001317*/
drh9bb575f2004-09-06 17:24:11 +00001318void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drh57196282004-10-06 15:41:16 +00001319 static const struct {
drh0bce8352002-02-28 00:41:10 +00001320 char *zName;
drh268380c2004-02-25 13:47:31 +00001321 signed char nArg;
drh309b3382007-03-17 17:52:42 +00001322 u8 argType; /* ff: db 1: 0, 2: 1, 3: 2,... N: N-1. */
danielk1977f4618892004-06-28 13:09:11 +00001323 u8 eTextRep; /* 1: UTF-16. 0: UTF-8 */
danielk1977dc1bdc42004-06-11 10:51:27 +00001324 u8 needCollSeq;
danielk19770ae8b832004-05-25 12:05:56 +00001325 void (*xFunc)(sqlite3_context*,int,sqlite3_value **);
drh0bce8352002-02-28 00:41:10 +00001326 } aFuncs[] = {
danielk1977f4618892004-06-28 13:09:11 +00001327 { "min", -1, 0, SQLITE_UTF8, 1, minmaxFunc },
1328 { "min", 0, 0, SQLITE_UTF8, 1, 0 },
drh309b3382007-03-17 17:52:42 +00001329 { "max", -1, 1, SQLITE_UTF8, 1, minmaxFunc },
1330 { "max", 0, 1, SQLITE_UTF8, 1, 0 },
danielk1977f4618892004-06-28 13:09:11 +00001331 { "typeof", 1, 0, SQLITE_UTF8, 0, typeofFunc },
1332 { "length", 1, 0, SQLITE_UTF8, 0, lengthFunc },
1333 { "substr", 3, 0, SQLITE_UTF8, 0, substrFunc },
danielk1977f4618892004-06-28 13:09:11 +00001334 { "abs", 1, 0, SQLITE_UTF8, 0, absFunc },
1335 { "round", 1, 0, SQLITE_UTF8, 0, roundFunc },
1336 { "round", 2, 0, SQLITE_UTF8, 0, roundFunc },
1337 { "upper", 1, 0, SQLITE_UTF8, 0, upperFunc },
1338 { "lower", 1, 0, SQLITE_UTF8, 0, lowerFunc },
1339 { "coalesce", -1, 0, SQLITE_UTF8, 0, ifnullFunc },
1340 { "coalesce", 0, 0, SQLITE_UTF8, 0, 0 },
1341 { "coalesce", 1, 0, SQLITE_UTF8, 0, 0 },
drh137c7282007-01-29 17:58:28 +00001342 { "hex", 1, 0, SQLITE_UTF8, 0, hexFunc },
danielk1977f4618892004-06-28 13:09:11 +00001343 { "ifnull", 2, 0, SQLITE_UTF8, 1, ifnullFunc },
1344 { "random", -1, 0, SQLITE_UTF8, 0, randomFunc },
drh137c7282007-01-29 17:58:28 +00001345 { "randomblob", 1, 0, SQLITE_UTF8, 0, randomBlob },
drh94a98362004-09-13 13:13:18 +00001346 { "nullif", 2, 0, SQLITE_UTF8, 1, nullifFunc },
danielk1977f4618892004-06-28 13:09:11 +00001347 { "sqlite_version", 0, 0, SQLITE_UTF8, 0, versionFunc},
1348 { "quote", 1, 0, SQLITE_UTF8, 0, quoteFunc },
drh309b3382007-03-17 17:52:42 +00001349 { "last_insert_rowid", 0, 0xff, SQLITE_UTF8, 0, last_insert_rowid },
1350 { "changes", 0, 0xff, SQLITE_UTF8, 0, changes },
1351 { "total_changes", 0, 0xff, SQLITE_UTF8, 0, total_changes },
drh26b6d902007-03-17 13:27:54 +00001352 { "replace", 3, 0, SQLITE_UTF8, 0, replaceFunc },
drh309b3382007-03-17 17:52:42 +00001353 { "ltrim", 1, 1, SQLITE_UTF8, 0, trimFunc },
1354 { "ltrim", 2, 1, SQLITE_UTF8, 0, trimFunc },
1355 { "rtrim", 1, 2, SQLITE_UTF8, 0, trimFunc },
1356 { "rtrim", 2, 2, SQLITE_UTF8, 0, trimFunc },
1357 { "trim", 1, 3, SQLITE_UTF8, 0, trimFunc },
1358 { "trim", 2, 3, SQLITE_UTF8, 0, trimFunc },
drh8cff3822007-05-02 02:08:28 +00001359 { "zeroblob", 1, 0, SQLITE_UTF8, 0, zeroblobFunc },
drhd24cc422003-03-27 12:51:24 +00001360#ifdef SQLITE_SOUNDEX
drh309b3382007-03-17 17:52:42 +00001361 { "soundex", 1, 0, SQLITE_UTF8, 0, soundexFunc},
drhd24cc422003-03-27 12:51:24 +00001362#endif
drhfdb83b22006-06-17 14:12:47 +00001363#ifndef SQLITE_OMIT_LOAD_EXTENSION
drh309b3382007-03-17 17:52:42 +00001364 { "load_extension", 1, 0xff, SQLITE_UTF8, 0, loadExt },
1365 { "load_extension", 2, 0xff, SQLITE_UTF8, 0, loadExt },
drhfdb83b22006-06-17 14:12:47 +00001366#endif
drh193a6b42002-07-07 16:52:46 +00001367#ifdef SQLITE_TEST
drh309b3382007-03-17 17:52:42 +00001368 { "randstr", 2, 0, SQLITE_UTF8, 0, randStr },
1369 { "test_destructor", 1, 0xff, SQLITE_UTF8, 0, test_destructor},
1370 { "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count},
1371 { "test_auxdata", -1, 0, SQLITE_UTF8, 0, test_auxdata},
1372 { "test_error", 1, 0, SQLITE_UTF8, 0, test_error},
drh193a6b42002-07-07 16:52:46 +00001373#endif
drh0bce8352002-02-28 00:41:10 +00001374 };
drh57196282004-10-06 15:41:16 +00001375 static const struct {
drh0bce8352002-02-28 00:41:10 +00001376 char *zName;
drh268380c2004-02-25 13:47:31 +00001377 signed char nArg;
drh268380c2004-02-25 13:47:31 +00001378 u8 argType;
danielk1977dc1bdc42004-06-11 10:51:27 +00001379 u8 needCollSeq;
danielk19770ae8b832004-05-25 12:05:56 +00001380 void (*xStep)(sqlite3_context*,int,sqlite3_value**);
1381 void (*xFinalize)(sqlite3_context*);
drh0bce8352002-02-28 00:41:10 +00001382 } aAggs[] = {
danielk1977dc1bdc42004-06-11 10:51:27 +00001383 { "min", 1, 0, 1, minmaxStep, minMaxFinalize },
drh309b3382007-03-17 17:52:42 +00001384 { "max", 1, 1, 1, minmaxStep, minMaxFinalize },
danielk1977dc1bdc42004-06-11 10:51:27 +00001385 { "sum", 1, 0, 0, sumStep, sumFinalize },
drha97fdd32006-01-12 22:17:50 +00001386 { "total", 1, 0, 0, sumStep, totalFinalize },
danielk1977dc1bdc42004-06-11 10:51:27 +00001387 { "avg", 1, 0, 0, sumStep, avgFinalize },
1388 { "count", 0, 0, 0, countStep, countFinalize },
1389 { "count", 1, 0, 0, countStep, countFinalize },
drh0bce8352002-02-28 00:41:10 +00001390 };
1391 int i;
1392
1393 for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
drh309b3382007-03-17 17:52:42 +00001394 void *pArg;
1395 u8 argType = aFuncs[i].argType;
1396 if( argType==0xff ){
1397 pArg = db;
1398 }else{
1399 pArg = (void*)(int)argType;
danielk1977c572ef72004-05-27 09:28:41 +00001400 }
danielk1977771151b2006-01-17 13:21:40 +00001401 sqlite3CreateFunc(db, aFuncs[i].zName, aFuncs[i].nArg,
danielk1977f9d64d22004-06-19 08:18:07 +00001402 aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0);
danielk1977dc1bdc42004-06-11 10:51:27 +00001403 if( aFuncs[i].needCollSeq ){
1404 FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName,
1405 strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0);
1406 if( pFunc && aFuncs[i].needCollSeq ){
1407 pFunc->needCollSeq = 1;
1408 }
1409 }
drh0bce8352002-02-28 00:41:10 +00001410 }
drh1f01ec12005-02-15 21:36:18 +00001411#ifndef SQLITE_OMIT_ALTERTABLE
1412 sqlite3AlterFunctions(db);
1413#endif
drh198bf392006-01-06 21:52:49 +00001414#ifndef SQLITE_OMIT_PARSER
danielk1977f744bb52005-12-06 17:19:11 +00001415 sqlite3AttachFunctions(db);
drh198bf392006-01-06 21:52:49 +00001416#endif
drh0bce8352002-02-28 00:41:10 +00001417 for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
drh309b3382007-03-17 17:52:42 +00001418 void *pArg = (void*)(int)aAggs[i].argType;
danielk1977771151b2006-01-17 13:21:40 +00001419 sqlite3CreateFunc(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8,
danielk1977f9d64d22004-06-19 08:18:07 +00001420 pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize);
danielk1977dc1bdc42004-06-11 10:51:27 +00001421 if( aAggs[i].needCollSeq ){
1422 FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName,
danielk1977d8123362004-06-12 09:25:12 +00001423 strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0);
danielk1977dc1bdc42004-06-11 10:51:27 +00001424 if( pFunc && aAggs[i].needCollSeq ){
1425 pFunc->needCollSeq = 1;
1426 }
1427 }
drh268380c2004-02-25 13:47:31 +00001428 }
danielk19774adee202004-05-08 08:23:19 +00001429 sqlite3RegisterDateTimeFunctions(db);
danielk19771e536952007-08-16 10:09:01 +00001430 if( !db->mallocFailed ){
danielk1977832a58a2007-06-22 15:21:15 +00001431 int rc = sqlite3_overload_function(db, "MATCH", 2);
1432 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1433 if( rc==SQLITE_NOMEM ){
danielk19771e536952007-08-16 10:09:01 +00001434 db->mallocFailed = 1;
danielk1977832a58a2007-06-22 15:21:15 +00001435 }
1436 }
danielk1977fd9e1f32005-05-22 10:44:34 +00001437#ifdef SQLITE_SSE
drh37527852006-03-16 16:19:56 +00001438 (void)sqlite3SseFunctions(db);
danielk1977fd9e1f32005-05-22 10:44:34 +00001439#endif
drh55ef4d92005-08-14 01:20:37 +00001440#ifdef SQLITE_CASE_SENSITIVE_LIKE
1441 sqlite3RegisterLikeFunctions(db, 1);
1442#else
1443 sqlite3RegisterLikeFunctions(db, 0);
1444#endif
1445}
1446
1447/*
1448** Set the LIKEOPT flag on the 2-argument function with the given name.
1449*/
drhd64fe2f2005-08-28 17:00:23 +00001450static void setLikeOptFlag(sqlite3 *db, const char *zName, int flagVal){
drh55ef4d92005-08-14 01:20:37 +00001451 FuncDef *pDef;
1452 pDef = sqlite3FindFunction(db, zName, strlen(zName), 2, SQLITE_UTF8, 0);
1453 if( pDef ){
drhd64fe2f2005-08-28 17:00:23 +00001454 pDef->flags = flagVal;
drh55ef4d92005-08-14 01:20:37 +00001455 }
1456}
1457
1458/*
1459** Register the built-in LIKE and GLOB functions. The caseSensitive
1460** parameter determines whether or not the LIKE operator is case
1461** sensitive. GLOB is always case sensitive.
1462*/
1463void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1464 struct compareInfo *pInfo;
1465 if( caseSensitive ){
1466 pInfo = (struct compareInfo*)&likeInfoAlt;
1467 }else{
1468 pInfo = (struct compareInfo*)&likeInfoNorm;
1469 }
danielk1977771151b2006-01-17 13:21:40 +00001470 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1471 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1472 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
drh55ef4d92005-08-14 01:20:37 +00001473 (struct compareInfo*)&globInfo, likeFunc, 0,0);
drhd64fe2f2005-08-28 17:00:23 +00001474 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1475 setLikeOptFlag(db, "like",
1476 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001477}
1478
1479/*
1480** pExpr points to an expression which implements a function. If
1481** it is appropriate to apply the LIKE optimization to that function
1482** then set aWc[0] through aWc[2] to the wildcard characters and
1483** return TRUE. If the function is not a LIKE-style function then
1484** return FALSE.
1485*/
drhd64fe2f2005-08-28 17:00:23 +00001486int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001487 FuncDef *pDef;
danielk1977cdbd8ef2007-05-12 06:11:12 +00001488 if( pExpr->op!=TK_FUNCTION || !pExpr->pList ){
drh55ef4d92005-08-14 01:20:37 +00001489 return 0;
1490 }
1491 if( pExpr->pList->nExpr!=2 ){
1492 return 0;
1493 }
drh2646da72005-12-09 20:02:05 +00001494 pDef = sqlite3FindFunction(db, (char*)pExpr->token.z, pExpr->token.n, 2,
drh55ef4d92005-08-14 01:20:37 +00001495 SQLITE_UTF8, 0);
drhd64fe2f2005-08-28 17:00:23 +00001496 if( pDef==0 || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001497 return 0;
1498 }
1499
1500 /* The memcpy() statement assumes that the wildcard characters are
1501 ** the first three statements in the compareInfo structure. The
1502 ** asserts() that follow verify that assumption
1503 */
1504 memcpy(aWc, pDef->pUserData, 3);
1505 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1506 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1507 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd64fe2f2005-08-28 17:00:23 +00001508 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001509 return 1;
drhdc04c582002-02-24 01:55:15 +00001510}