blob: 18cd74a1f0bfd0cd60b2bd84e1fc4e750b1f829a [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**
drh17435752007-08-16 04:30:38 +000019** $Id: func.c,v 1.164 2007/08/16 04:30:40 drh 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>
drhb37df7b2005-10-13 02:09:49 +000023/* #include <math.h> */
drhd3a149e2002-02-24 17:12:53 +000024#include <stdlib.h>
drh0bce8352002-02-28 00:41:10 +000025#include <assert.h>
danielk197788208052004-05-25 01:13:20 +000026#include "vdbeInt.h"
drh771d8c32003-08-09 21:32:28 +000027#include "os.h"
drh0bce8352002-02-28 00:41:10 +000028
drh66150952007-07-23 19:12:41 +000029
drh55ef4d92005-08-14 01:20:37 +000030/*
31** Return the collating function associated with a function.
32*/
danielk1977dc1bdc42004-06-11 10:51:27 +000033static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
34 return context->pColl;
35}
36
drh0bce8352002-02-28 00:41:10 +000037/*
38** Implementation of the non-aggregate min() and max() functions
39*/
drhf9b596e2004-05-26 16:54:42 +000040static void minmaxFunc(
41 sqlite3_context *context,
42 int argc,
43 sqlite3_value **argv
44){
drh0bce8352002-02-28 00:41:10 +000045 int i;
drh268380c2004-02-25 13:47:31 +000046 int mask; /* 0 for min() or 0xffffffff for max() */
drhf9b596e2004-05-26 16:54:42 +000047 int iBest;
danielk1977dc1bdc42004-06-11 10:51:27 +000048 CollSeq *pColl;
drh0bce8352002-02-28 00:41:10 +000049
drh89425d52002-02-28 03:04:48 +000050 if( argc==0 ) return;
drhc44af712004-09-02 15:53:56 +000051 mask = sqlite3_user_data(context)==0 ? 0 : -1;
danielk1977dc1bdc42004-06-11 10:51:27 +000052 pColl = sqlite3GetFuncCollSeq(context);
53 assert( pColl );
danielk1977c572ef72004-05-27 09:28:41 +000054 assert( mask==-1 || mask==0 );
drhf9b596e2004-05-26 16:54:42 +000055 iBest = 0;
drh9c054832004-05-31 18:51:57 +000056 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drhf9b596e2004-05-26 16:54:42 +000057 for(i=1; i<argc; i++){
drh9c054832004-05-31 18:51:57 +000058 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
danielk1977dc1bdc42004-06-11 10:51:27 +000059 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
drhf9b596e2004-05-26 16:54:42 +000060 iBest = i;
drh0bce8352002-02-28 00:41:10 +000061 }
62 }
drhf4479502004-05-27 03:12:53 +000063 sqlite3_result_value(context, argv[iBest]);
drh0bce8352002-02-28 00:41:10 +000064}
drh0bce8352002-02-28 00:41:10 +000065
drh268380c2004-02-25 13:47:31 +000066/*
67** Return the type of the argument.
68*/
drhf9b596e2004-05-26 16:54:42 +000069static void typeofFunc(
70 sqlite3_context *context,
71 int argc,
72 sqlite3_value **argv
73){
danielk197735bb9d02004-05-24 12:55:54 +000074 const char *z = 0;
danielk197735bb9d02004-05-24 12:55:54 +000075 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000076 case SQLITE_NULL: z = "null"; break;
77 case SQLITE_INTEGER: z = "integer"; break;
78 case SQLITE_TEXT: z = "text"; break;
79 case SQLITE_FLOAT: z = "real"; break;
80 case SQLITE_BLOB: z = "blob"; break;
danielk197735bb9d02004-05-24 12:55:54 +000081 }
danielk1977d8123362004-06-12 09:25:12 +000082 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
drh0bce8352002-02-28 00:41:10 +000083}
84
drh5708d2d2005-06-22 10:53:59 +000085
86/*
drh0bce8352002-02-28 00:41:10 +000087** Implementation of the length() function
88*/
drhf9b596e2004-05-26 16:54:42 +000089static void lengthFunc(
90 sqlite3_context *context,
91 int argc,
92 sqlite3_value **argv
93){
drh0bce8352002-02-28 00:41:10 +000094 int len;
95
96 assert( argc==1 );
drhf9b596e2004-05-26 16:54:42 +000097 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +000098 case SQLITE_BLOB:
99 case SQLITE_INTEGER:
100 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000101 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
drhf9b596e2004-05-26 16:54:42 +0000102 break;
103 }
drh9c054832004-05-31 18:51:57 +0000104 case SQLITE_TEXT: {
drh2646da72005-12-09 20:02:05 +0000105 const unsigned char *z = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000106 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000107 len = 0;
108 while( *z ){
109 len++;
110 SQLITE_SKIP_UTF8(z);
111 }
drhf4479502004-05-27 03:12:53 +0000112 sqlite3_result_int(context, len);
drhf9b596e2004-05-26 16:54:42 +0000113 break;
114 }
115 default: {
116 sqlite3_result_null(context);
117 break;
118 }
119 }
drh0bce8352002-02-28 00:41:10 +0000120}
121
122/*
123** Implementation of the abs() function
124*/
danielk19770ae8b832004-05-25 12:05:56 +0000125static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +0000126 assert( argc==1 );
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;
drhf9b596e2004-05-26 16:54:42 +0000173
drh0bce8352002-02-28 00:41:10 +0000174 assert( argc==3 );
drhf764e6f2007-05-15 01:13:47 +0000175 p0type = sqlite3_value_type(argv[0]);
176 if( p0type==SQLITE_BLOB ){
177 len = sqlite3_value_bytes(argv[0]);
178 z = sqlite3_value_blob(argv[0]);
179 if( z==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000180 assert( len==sqlite3_value_bytes(argv[0]) );
drhf764e6f2007-05-15 01:13:47 +0000181 }else{
182 z = sqlite3_value_text(argv[0]);
183 if( z==0 ) return;
drh4a919112007-05-15 11:55:09 +0000184 len = 0;
185 for(z2=z; *z2; len++){
186 SQLITE_SKIP_UTF8(z2);
187 }
drhf764e6f2007-05-15 01:13:47 +0000188 }
danielk197751ad0ec2004-05-24 12:39:02 +0000189 p1 = sqlite3_value_int(argv[1]);
190 p2 = sqlite3_value_int(argv[2]);
drh0bce8352002-02-28 00:41:10 +0000191 if( p1<0 ){
drh89425d52002-02-28 03:04:48 +0000192 p1 += len;
drh653bc752002-02-28 03:31:10 +0000193 if( p1<0 ){
194 p2 += p1;
195 p1 = 0;
196 }
drh0bce8352002-02-28 00:41:10 +0000197 }else if( p1>0 ){
198 p1--;
199 }
200 if( p1+p2>len ){
201 p2 = len-p1;
202 }
drhf764e6f2007-05-15 01:13:47 +0000203 if( p0type!=SQLITE_BLOB ){
drh4a919112007-05-15 11:55:09 +0000204 while( *z && p1 ){
205 SQLITE_SKIP_UTF8(z);
206 p1--;
drhf764e6f2007-05-15 01:13:47 +0000207 }
drh4a919112007-05-15 11:55:09 +0000208 for(z2=z; *z2 && p2; p2--){
209 SQLITE_SKIP_UTF8(z2);
drhf764e6f2007-05-15 01:13:47 +0000210 }
drh4a919112007-05-15 11:55:09 +0000211 sqlite3_result_text(context, (char*)z, z2-z, SQLITE_TRANSIENT);
drhf764e6f2007-05-15 01:13:47 +0000212 }else{
213 if( p2<0 ) p2 = 0;
214 sqlite3_result_blob(context, (char*)&z[p1], p2, SQLITE_TRANSIENT);
drh0bce8352002-02-28 00:41:10 +0000215 }
drh0bce8352002-02-28 00:41:10 +0000216}
217
218/*
219** Implementation of the round() function
220*/
danielk19770ae8b832004-05-25 12:05:56 +0000221static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197751ad0ec2004-05-24 12:39:02 +0000222 int n = 0;
drh0bce8352002-02-28 00:41:10 +0000223 double r;
drh592ac8c2005-08-13 03:07:47 +0000224 char zBuf[500]; /* larger than the %f representation of the largest double */
drh0bce8352002-02-28 00:41:10 +0000225 assert( argc==1 || argc==2 );
danielk197751ad0ec2004-05-24 12:39:02 +0000226 if( argc==2 ){
drh9c054832004-05-31 18:51:57 +0000227 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
danielk197751ad0ec2004-05-24 12:39:02 +0000228 n = sqlite3_value_int(argv[1]);
229 if( n>30 ) n = 30;
230 if( n<0 ) n = 0;
231 }
drhd589a922006-03-02 03:02:48 +0000232 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
drh4f26d6c2004-05-26 23:25:30 +0000233 r = sqlite3_value_double(argv[0]);
drhe866fcb2005-07-09 02:38:06 +0000234 sqlite3_snprintf(sizeof(zBuf),zBuf,"%.*f",n,r);
drh502b9622006-04-07 13:26:42 +0000235 sqlite3AtoF(zBuf, &r);
236 sqlite3_result_double(context, r);
drh0bce8352002-02-28 00:41:10 +0000237}
drhdc04c582002-02-24 01:55:15 +0000238
239/*
240** Implementation of the upper() and lower() SQL functions.
241*/
danielk19770ae8b832004-05-25 12:05:56 +0000242static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000243 char *z1;
244 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000245 int i, n;
drh9c054832004-05-31 18:51:57 +0000246 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
drh7a521cf2007-04-25 18:23:52 +0000247 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000248 n = sqlite3_value_bytes(argv[0]);
249 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
250 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000251 if( z2 ){
drh9310ef22007-04-27 17:16:20 +0000252 z1 = sqlite3_malloc(n+1);
drh7a521cf2007-04-25 18:23:52 +0000253 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000254 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000255 for(i=0; z1[i]; i++){
256 z1[i] = toupper(z1[i]);
257 }
258 sqlite3_result_text(context, z1, -1, sqlite3_free);
259 }
drhdc04c582002-02-24 01:55:15 +0000260 }
261}
danielk19770ae8b832004-05-25 12:05:56 +0000262static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh7a521cf2007-04-25 18:23:52 +0000263 char *z1;
264 const char *z2;
drh9310ef22007-04-27 17:16:20 +0000265 int i, n;
drh9c054832004-05-31 18:51:57 +0000266 if( argc<1 || SQLITE_NULL==sqlite3_value_type(argv[0]) ) return;
drh7a521cf2007-04-25 18:23:52 +0000267 z2 = (char*)sqlite3_value_text(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000268 n = sqlite3_value_bytes(argv[0]);
269 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
270 assert( z2==(char*)sqlite3_value_text(argv[0]) );
drh7a521cf2007-04-25 18:23:52 +0000271 if( z2 ){
drh9310ef22007-04-27 17:16:20 +0000272 z1 = sqlite3_malloc(n+1);
drh7a521cf2007-04-25 18:23:52 +0000273 if( z1 ){
drh5bb3eb92007-05-04 13:15:55 +0000274 memcpy(z1, z2, n+1);
drh7a521cf2007-04-25 18:23:52 +0000275 for(i=0; z1[i]; i++){
276 z1[i] = tolower(z1[i]);
277 }
278 sqlite3_result_text(context, z1, -1, sqlite3_free);
279 }
drhdc04c582002-02-24 01:55:15 +0000280 }
281}
282
283/*
drhfbc99082002-02-28 03:14:18 +0000284** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
jplyonb6c9e6e2004-01-19 04:53:24 +0000285** All three do the same thing. They return the first non-NULL
286** argument.
drh3212e182002-02-28 00:46:26 +0000287*/
drhf9b596e2004-05-26 16:54:42 +0000288static void ifnullFunc(
289 sqlite3_context *context,
290 int argc,
291 sqlite3_value **argv
292){
drhfbc99082002-02-28 03:14:18 +0000293 int i;
294 for(i=0; i<argc; i++){
drh9c054832004-05-31 18:51:57 +0000295 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
drhf4479502004-05-27 03:12:53 +0000296 sqlite3_result_value(context, argv[i]);
drhfbc99082002-02-28 03:14:18 +0000297 break;
298 }
299 }
drh3212e182002-02-28 00:46:26 +0000300}
301
302/*
drhf9ffac92002-03-02 19:00:31 +0000303** Implementation of random(). Return a random integer.
304*/
drhf9b596e2004-05-26 16:54:42 +0000305static void randomFunc(
306 sqlite3_context *context,
307 int argc,
308 sqlite3_value **argv
309){
drh52fc8492006-02-23 21:43:55 +0000310 sqlite_int64 r;
danielk19774adee202004-05-08 08:23:19 +0000311 sqlite3Randomness(sizeof(r), &r);
drh874abbe2006-02-23 21:51:12 +0000312 if( (r<<1)==0 ) r = 0; /* Prevent 0x8000.... as the result so that we */
313 /* can always do abs() of the result */
drh52fc8492006-02-23 21:43:55 +0000314 sqlite3_result_int64(context, r);
drhf9ffac92002-03-02 19:00:31 +0000315}
316
317/*
drh137c7282007-01-29 17:58:28 +0000318** Implementation of randomblob(N). Return a random blob
319** that is N bytes long.
drh63cf66f2007-01-29 15:50:05 +0000320*/
drh137c7282007-01-29 17:58:28 +0000321static void randomBlob(
drh63cf66f2007-01-29 15:50:05 +0000322 sqlite3_context *context,
323 int argc,
324 sqlite3_value **argv
325){
drh137c7282007-01-29 17:58:28 +0000326 int n;
327 unsigned char *p;
drh63cf66f2007-01-29 15:50:05 +0000328 assert( argc==1 );
329 n = sqlite3_value_int(argv[0]);
drh023ae032007-05-08 12:12:16 +0000330 if( n<1 ){
331 n = 1;
332 }
333 if( n>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000334 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000335 return;
336 }
drh17435752007-08-16 04:30:38 +0000337 p = sqlite3_malloc(n);
drh02d85832007-05-07 19:31:15 +0000338 if( p ){
339 sqlite3Randomness(n, p);
drh17435752007-08-16 04:30:38 +0000340 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
drh02d85832007-05-07 19:31:15 +0000341 }
drh63cf66f2007-01-29 15:50:05 +0000342}
343
344/*
drh6ed41ad2002-04-06 14:10:47 +0000345** Implementation of the last_insert_rowid() SQL function. The return
danielk197724b03fd2004-05-10 10:34:34 +0000346** value is the same as the sqlite3_last_insert_rowid() API function.
drh6ed41ad2002-04-06 14:10:47 +0000347*/
danielk197751ad0ec2004-05-24 12:39:02 +0000348static void last_insert_rowid(
danielk19770ae8b832004-05-25 12:05:56 +0000349 sqlite3_context *context,
danielk197751ad0ec2004-05-24 12:39:02 +0000350 int arg,
351 sqlite3_value **argv
352){
drh9bb575f2004-09-06 17:24:11 +0000353 sqlite3 *db = sqlite3_user_data(context);
drhf9b596e2004-05-26 16:54:42 +0000354 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
drh6ed41ad2002-04-06 14:10:47 +0000355}
356
rdcf146a772004-02-25 22:51:06 +0000357/*
danielk1977b28af712004-06-21 06:50:26 +0000358** Implementation of the changes() SQL function. The return value is the
359** same as the sqlite3_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000360*/
danielk1977b28af712004-06-21 06:50:26 +0000361static void changes(
drhf9b596e2004-05-26 16:54:42 +0000362 sqlite3_context *context,
363 int arg,
364 sqlite3_value **argv
365){
drh9bb575f2004-09-06 17:24:11 +0000366 sqlite3 *db = sqlite3_user_data(context);
drhf4479502004-05-27 03:12:53 +0000367 sqlite3_result_int(context, sqlite3_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000368}
rdcf146a772004-02-25 22:51:06 +0000369
370/*
danielk1977b28af712004-06-21 06:50:26 +0000371** Implementation of the total_changes() SQL function. The return value is
372** the same as the sqlite3_total_changes() API function.
rdcf146a772004-02-25 22:51:06 +0000373*/
danielk1977b28af712004-06-21 06:50:26 +0000374static void total_changes(
375 sqlite3_context *context,
danielk197751ad0ec2004-05-24 12:39:02 +0000376 int arg,
377 sqlite3_value **argv
378){
drh9bb575f2004-09-06 17:24:11 +0000379 sqlite3 *db = sqlite3_user_data(context);
danielk1977b28af712004-06-21 06:50:26 +0000380 sqlite3_result_int(context, sqlite3_total_changes(db));
rdcb0c374f2004-02-20 22:53:38 +0000381}
382
drh6ed41ad2002-04-06 14:10:47 +0000383/*
drh4e5ffc52004-08-31 00:52:37 +0000384** A structure defining how to do GLOB-style comparisons.
danielk1977d02eb1f2004-06-06 09:44:03 +0000385*/
drh4e5ffc52004-08-31 00:52:37 +0000386struct compareInfo {
387 u8 matchAll;
388 u8 matchOne;
389 u8 matchSet;
390 u8 noCase;
danielk1977d02eb1f2004-06-06 09:44:03 +0000391};
drh55ef4d92005-08-14 01:20:37 +0000392
drh4e5ffc52004-08-31 00:52:37 +0000393static const struct compareInfo globInfo = { '*', '?', '[', 0 };
drh55ef4d92005-08-14 01:20:37 +0000394/* The correct SQL-92 behavior is for the LIKE operator to ignore
395** case. Thus 'a' LIKE 'A' would be true. */
396static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
397/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
398** is case sensitive causing 'a' LIKE 'A' to be false */
399static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
danielk1977d02eb1f2004-06-06 09:44:03 +0000400
401/*
drh4e5ffc52004-08-31 00:52:37 +0000402** Compare two UTF-8 strings for equality where the first string can
403** potentially be a "glob" expression. Return true (1) if they
404** are the same and false (0) if they are different.
drh0ac65892002-04-20 14:24:41 +0000405**
drh4e5ffc52004-08-31 00:52:37 +0000406** Globbing rules:
drh0ac65892002-04-20 14:24:41 +0000407**
drh4e5ffc52004-08-31 00:52:37 +0000408** '*' Matches any sequence of zero or more characters.
danielk1977d02eb1f2004-06-06 09:44:03 +0000409**
drh4e5ffc52004-08-31 00:52:37 +0000410** '?' Matches exactly one character.
411**
412** [...] Matches one character from the enclosed list of
413** characters.
414**
415** [^...] Matches one character not in the enclosed list.
416**
417** With the [...] and [^...] matching, a ']' character can be included
418** in the list by making it the first character after '[' or '^'. A
419** range of characters can be specified using '-'. Example:
420** "[a-z]" matches any single lower-case letter. To match a '-', make
421** it the last character in the list.
422**
423** This routine is usually quick, but can be N**2 in the worst case.
424**
425** Hints: to match '*' or '?', put them in "[]". Like this:
426**
427** abc[*]xyz Matches "abc*xyz" only
drh0ac65892002-04-20 14:24:41 +0000428*/
danielk19777c6303c2004-11-17 16:41:29 +0000429static int patternCompare(
drh4e5ffc52004-08-31 00:52:37 +0000430 const u8 *zPattern, /* The glob pattern */
431 const u8 *zString, /* The string to compare against the glob */
danielk19777c6303c2004-11-17 16:41:29 +0000432 const struct compareInfo *pInfo, /* Information about how to do the compare */
433 const int esc /* The escape character */
danielk197751ad0ec2004-05-24 12:39:02 +0000434){
drh66150952007-07-23 19:12:41 +0000435 int c, c2;
drh4e5ffc52004-08-31 00:52:37 +0000436 int invert;
437 int seen;
drh4e5ffc52004-08-31 00:52:37 +0000438 u8 matchOne = pInfo->matchOne;
439 u8 matchAll = pInfo->matchAll;
440 u8 matchSet = pInfo->matchSet;
441 u8 noCase = pInfo->noCase;
danielk19777c6303c2004-11-17 16:41:29 +0000442 int prevEscape = 0; /* True if the previous character was 'escape' */
danielk1977d02eb1f2004-06-06 09:44:03 +0000443
drh66150952007-07-23 19:12:41 +0000444 while( (c = sqlite3Utf8Read(zPattern,0,&zPattern))!=0 ){
danielk19777c6303c2004-11-17 16:41:29 +0000445 if( !prevEscape && c==matchAll ){
drh66150952007-07-23 19:12:41 +0000446 while( (c=sqlite3Utf8Read(zPattern,0,&zPattern)) == matchAll
447 || c == matchOne ){
448 if( c==matchOne && sqlite3Utf8Read(zString, 0, &zString)==0 ){
449 return 0;
drh4e5ffc52004-08-31 00:52:37 +0000450 }
danielk1977ad7dd422004-06-06 12:41:49 +0000451 }
drh66150952007-07-23 19:12:41 +0000452 if( c==0 ){
453 return 1;
454 }else if( c==esc ){
455 c = sqlite3Utf8Read(zPattern, 0, &zPattern);
456 if( c==0 ){
457 return 0;
458 }
459 }else if( c==matchSet ){
460 assert( esc==0 ); /* This is GLOB, not LIKE */
461 assert( matchSet<0x80 ); /* '[' is a single-byte character */
462 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
drh4a919112007-05-15 11:55:09 +0000463 SQLITE_SKIP_UTF8(zString);
drh4e5ffc52004-08-31 00:52:37 +0000464 }
465 return *zString!=0;
drh66150952007-07-23 19:12:41 +0000466 }
467 while( (c2 = sqlite3Utf8Read(zString,0,&zString))!=0 ){
468 if( noCase ){
469 c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
470 c = c<0x80 ? sqlite3UpperToLower[c] : c;
471 while( c2 != 0 && c2 != c ){
472 c2 = sqlite3Utf8Read(zString, 0, &zString);
473 if( c2<0x80 ) c2 = sqlite3UpperToLower[c2];
drh4e5ffc52004-08-31 00:52:37 +0000474 }
drh66150952007-07-23 19:12:41 +0000475 }else{
476 while( c2 != 0 && c2 != c ){
477 c2 = sqlite3Utf8Read(zString, 0, &zString);
478 }
drh4e5ffc52004-08-31 00:52:37 +0000479 }
drh66150952007-07-23 19:12:41 +0000480 if( c2==0 ) return 0;
481 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
482 }
483 return 0;
484 }else if( !prevEscape && c==matchOne ){
485 if( sqlite3Utf8Read(zString, 0, &zString)==0 ){
drh4e5ffc52004-08-31 00:52:37 +0000486 return 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000487 }
drh4e5ffc52004-08-31 00:52:37 +0000488 }else if( c==matchSet ){
489 int prior_c = 0;
danielk19777c6303c2004-11-17 16:41:29 +0000490 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
drh4e5ffc52004-08-31 00:52:37 +0000491 seen = 0;
492 invert = 0;
drh66150952007-07-23 19:12:41 +0000493 c = sqlite3Utf8Read(zString, 0, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000494 if( c==0 ) return 0;
drh66150952007-07-23 19:12:41 +0000495 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
496 if( c2=='^' ){
497 invert = 1;
498 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
499 }
drh4e5ffc52004-08-31 00:52:37 +0000500 if( c2==']' ){
501 if( c==']' ) seen = 1;
drh66150952007-07-23 19:12:41 +0000502 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000503 }
drh66150952007-07-23 19:12:41 +0000504 while( c2 && c2!=']' ){
505 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
506 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000507 if( c>=prior_c && c<=c2 ) seen = 1;
508 prior_c = 0;
drh4e5ffc52004-08-31 00:52:37 +0000509 }else{
drh66150952007-07-23 19:12:41 +0000510 if( c==c2 ){
511 seen = 1;
512 }
drh4e5ffc52004-08-31 00:52:37 +0000513 prior_c = c2;
514 }
drh66150952007-07-23 19:12:41 +0000515 c2 = sqlite3Utf8Read(zPattern, 0, &zPattern);
drh4e5ffc52004-08-31 00:52:37 +0000516 }
drh66150952007-07-23 19:12:41 +0000517 if( c2==0 || (seen ^ invert)==0 ){
518 return 0;
519 }
520 }else if( esc==c && !prevEscape ){
danielk19777c6303c2004-11-17 16:41:29 +0000521 prevEscape = 1;
drh4e5ffc52004-08-31 00:52:37 +0000522 }else{
drh66150952007-07-23 19:12:41 +0000523 c2 = sqlite3Utf8Read(zString, 0, &zString);
drh4e5ffc52004-08-31 00:52:37 +0000524 if( noCase ){
drh66150952007-07-23 19:12:41 +0000525 c = c<0x80 ? sqlite3UpperToLower[c] : c;
526 c2 = c2<0x80 ? sqlite3UpperToLower[c2] : c2;
drh4e5ffc52004-08-31 00:52:37 +0000527 }
drh66150952007-07-23 19:12:41 +0000528 if( c!=c2 ){
529 return 0;
530 }
danielk19777c6303c2004-11-17 16:41:29 +0000531 prevEscape = 0;
danielk1977d02eb1f2004-06-06 09:44:03 +0000532 }
danielk197751ad0ec2004-05-24 12:39:02 +0000533 }
drh4e5ffc52004-08-31 00:52:37 +0000534 return *zString==0;
drh0ac65892002-04-20 14:24:41 +0000535}
drh4e5ffc52004-08-31 00:52:37 +0000536
drh55ef4d92005-08-14 01:20:37 +0000537/*
538** Count the number of times that the LIKE operator (or GLOB which is
539** just a variation of LIKE) gets called. This is used for testing
540** only.
541*/
542#ifdef SQLITE_TEST
543int sqlite3_like_count = 0;
544#endif
545
danielk19773f6b0872004-06-17 05:36:44 +0000546
547/*
548** Implementation of the like() SQL function. This function implements
549** the build-in LIKE operator. The first argument to the function is the
550** pattern and the second argument is the string. So, the SQL statements:
551**
552** A LIKE B
553**
554** is implemented as like(B,A).
555**
drh55ef4d92005-08-14 01:20:37 +0000556** This same function (with a different compareInfo structure) computes
557** the GLOB operator.
danielk19773f6b0872004-06-17 05:36:44 +0000558*/
559static void likeFunc(
560 sqlite3_context *context,
561 int argc,
562 sqlite3_value **argv
563){
drhbeb818d2007-05-08 15:34:47 +0000564 const unsigned char *zA, *zB;
drh85892bd2007-05-10 13:23:22 +0000565 int escape = 0;
drhbeb818d2007-05-08 15:34:47 +0000566
drh1f0feef2007-05-15 13:27:07 +0000567 zB = sqlite3_value_text(argv[0]);
568 zA = sqlite3_value_text(argv[1]);
569
drhbeb818d2007-05-08 15:34:47 +0000570 /* Limit the length of the LIKE or GLOB pattern to avoid problems
571 ** of deep recursion and N*N behavior in patternCompare().
572 */
danielk1977b56fe1f2007-05-09 08:24:44 +0000573 if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
drhbeb818d2007-05-08 15:34:47 +0000574 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
575 return;
576 }
drh1f0feef2007-05-15 13:27:07 +0000577 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
drhbeb818d2007-05-08 15:34:47 +0000578
danielk19777c6303c2004-11-17 16:41:29 +0000579 if( argc==3 ){
580 /* The escape character string must consist of a single UTF-8 character.
581 ** Otherwise, return an error.
582 */
583 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000584 if( zEsc==0 ) return;
drhee858132007-05-08 20:37:38 +0000585 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
danielk19777c6303c2004-11-17 16:41:29 +0000586 sqlite3_result_error(context,
587 "ESCAPE expression must be a single character", -1);
588 return;
589 }
drh66150952007-07-23 19:12:41 +0000590 escape = sqlite3Utf8Read(zEsc, 0, &zEsc);
danielk19777c6303c2004-11-17 16:41:29 +0000591 }
danielk19773f6b0872004-06-17 05:36:44 +0000592 if( zA && zB ){
drh55ef4d92005-08-14 01:20:37 +0000593 struct compareInfo *pInfo = sqlite3_user_data(context);
594#ifdef SQLITE_TEST
595 sqlite3_like_count++;
596#endif
drhbeb818d2007-05-08 15:34:47 +0000597
danielk1977b56fe1f2007-05-09 08:24:44 +0000598 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
danielk197751ad0ec2004-05-24 12:39:02 +0000599 }
drh8912d102002-05-26 21:34:58 +0000600}
601
602/*
603** Implementation of the NULLIF(x,y) function. The result is the first
604** argument if the arguments are different. The result is NULL if the
605** arguments are equal to each other.
606*/
drhf9b596e2004-05-26 16:54:42 +0000607static void nullifFunc(
608 sqlite3_context *context,
609 int argc,
610 sqlite3_value **argv
611){
danielk1977dc1bdc42004-06-11 10:51:27 +0000612 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
613 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
drhf4479502004-05-27 03:12:53 +0000614 sqlite3_result_value(context, argv[0]);
drh8912d102002-05-26 21:34:58 +0000615 }
drh0ac65892002-04-20 14:24:41 +0000616}
617
drh647cb0e2002-11-04 19:32:25 +0000618/*
619** Implementation of the VERSION(*) function. The result is the version
620** of the SQLite library that is running.
621*/
drhf9b596e2004-05-26 16:54:42 +0000622static void versionFunc(
623 sqlite3_context *context,
624 int argc,
625 sqlite3_value **argv
626){
danielk1977d8123362004-06-12 09:25:12 +0000627 sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
drh647cb0e2002-11-04 19:32:25 +0000628}
629
drh137c7282007-01-29 17:58:28 +0000630/* Array for converting from half-bytes (nybbles) into ASCII hex
631** digits. */
632static const char hexdigits[] = {
633 '0', '1', '2', '3', '4', '5', '6', '7',
634 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
635};
danielk1977d641d642004-11-18 15:44:29 +0000636
drh47394702003-08-20 01:03:33 +0000637/*
638** EXPERIMENTAL - This is not an official function. The interface may
639** change. This function may disappear. Do not write code that depends
640** on this function.
641**
642** Implementation of the QUOTE() function. This function takes a single
643** argument. If the argument is numeric, the return value is the same as
644** the argument. If the argument is NULL, the return value is the string
645** "NULL". Otherwise, the argument is enclosed in single quotes with
646** single-quote escapes.
647*/
danielk19770ae8b832004-05-25 12:05:56 +0000648static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
drh47394702003-08-20 01:03:33 +0000649 if( argc<1 ) return;
drhf9b596e2004-05-26 16:54:42 +0000650 switch( sqlite3_value_type(argv[0]) ){
drh9c054832004-05-31 18:51:57 +0000651 case SQLITE_NULL: {
danielk1977d8123362004-06-12 09:25:12 +0000652 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
drhf9b596e2004-05-26 16:54:42 +0000653 break;
drh47394702003-08-20 01:03:33 +0000654 }
drh9c054832004-05-31 18:51:57 +0000655 case SQLITE_INTEGER:
656 case SQLITE_FLOAT: {
drhf4479502004-05-27 03:12:53 +0000657 sqlite3_result_value(context, argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000658 break;
659 }
danielk19773f41e972004-06-08 00:39:01 +0000660 case SQLITE_BLOB: {
danielk19773f41e972004-06-08 00:39:01 +0000661 char *zText = 0;
danielk19773f41e972004-06-08 00:39:01 +0000662 char const *zBlob = sqlite3_value_blob(argv[0]);
drh1f0feef2007-05-15 13:27:07 +0000663 int nBlob = sqlite3_value_bytes(argv[0]);
664 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
danielk19773f41e972004-06-08 00:39:01 +0000665
drh023ae032007-05-08 12:12:16 +0000666 if( 2*nBlob+4>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000667 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000668 return;
669 }
drh17435752007-08-16 04:30:38 +0000670 zText = (char *)sqlite3_malloc((2*nBlob)+4);
danielk19773f41e972004-06-08 00:39:01 +0000671 if( !zText ){
672 sqlite3_result_error(context, "out of memory", -1);
673 }else{
674 int i;
675 for(i=0; i<nBlob; i++){
676 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
677 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
678 }
679 zText[(nBlob*2)+2] = '\'';
680 zText[(nBlob*2)+3] = '\0';
681 zText[0] = 'X';
682 zText[1] = '\'';
danielk1977d8123362004-06-12 09:25:12 +0000683 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000684 sqlite3_free(zText);
danielk19773f41e972004-06-08 00:39:01 +0000685 }
686 break;
687 }
drh9c054832004-05-31 18:51:57 +0000688 case SQLITE_TEXT: {
drh023ae032007-05-08 12:12:16 +0000689 int i,j;
690 u64 n;
drh2646da72005-12-09 20:02:05 +0000691 const unsigned char *zArg = sqlite3_value_text(argv[0]);
drhf9b596e2004-05-26 16:54:42 +0000692 char *z;
693
drh7a521cf2007-04-25 18:23:52 +0000694 if( zArg==0 ) return;
drh023ae032007-05-08 12:12:16 +0000695 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
696 if( i+n+3>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000697 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000698 return;
699 }
drh17435752007-08-16 04:30:38 +0000700 z = sqlite3_malloc( i+n+3 );
drhf9b596e2004-05-26 16:54:42 +0000701 if( z==0 ) return;
702 z[0] = '\'';
703 for(i=0, j=1; zArg[i]; i++){
704 z[j++] = zArg[i];
705 if( zArg[i]=='\'' ){
706 z[j++] = '\'';
707 }
708 }
709 z[j++] = '\'';
710 z[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +0000711 sqlite3_result_text(context, z, j, SQLITE_TRANSIENT);
drh17435752007-08-16 04:30:38 +0000712 sqlite3_free(z);
drhf9b596e2004-05-26 16:54:42 +0000713 }
drh47394702003-08-20 01:03:33 +0000714 }
715}
716
drh137c7282007-01-29 17:58:28 +0000717/*
718** The hex() function. Interpret the argument as a blob. Return
719** a hexadecimal rendering as text.
720*/
721static void hexFunc(
722 sqlite3_context *context,
723 int argc,
724 sqlite3_value **argv
725){
726 int i, n;
727 const unsigned char *pBlob;
728 char *zHex, *z;
729 assert( argc==1 );
drh1f0feef2007-05-15 13:27:07 +0000730 pBlob = sqlite3_value_blob(argv[0]);
drh137c7282007-01-29 17:58:28 +0000731 n = sqlite3_value_bytes(argv[0]);
drh023ae032007-05-08 12:12:16 +0000732 if( n*2+1>SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000733 sqlite3_result_error_toobig(context);
drh023ae032007-05-08 12:12:16 +0000734 return;
735 }
drh1f0feef2007-05-15 13:27:07 +0000736 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
drh137c7282007-01-29 17:58:28 +0000737 z = zHex = sqlite3_malloc(n*2 + 1);
738 if( zHex==0 ) return;
739 for(i=0; i<n; i++, pBlob++){
740 unsigned char c = *pBlob;
741 *(z++) = hexdigits[(c>>4)&0xf];
742 *(z++) = hexdigits[c&0xf];
743 }
744 *z = 0;
745 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
746}
747
drh26b6d902007-03-17 13:27:54 +0000748/*
drh8cff3822007-05-02 02:08:28 +0000749** The zeroblob(N) function returns a zero-filled blob of size N bytes.
750*/
751static void zeroblobFunc(
752 sqlite3_context *context,
753 int argc,
754 sqlite3_value **argv
755){
drh98640a32007-06-07 19:08:32 +0000756 i64 n;
drh8cff3822007-05-02 02:08:28 +0000757 assert( argc==1 );
drh98640a32007-06-07 19:08:32 +0000758 n = sqlite3_value_int64(argv[0]);
759 if( n>SQLITE_MAX_LENGTH ){
760 sqlite3_result_error_toobig(context);
761 }else{
762 sqlite3_result_zeroblob(context, n);
763 }
drh8cff3822007-05-02 02:08:28 +0000764}
765
766/*
drh26b6d902007-03-17 13:27:54 +0000767** The replace() function. Three arguments are all strings: call
768** them A, B, and C. The result is also a string which is derived
769** from A by replacing every occurance of B with C. The match
770** must be exact. Collating sequences are not used.
771*/
772static void replaceFunc(
773 sqlite3_context *context,
774 int argc,
775 sqlite3_value **argv
776){
777 const unsigned char *zStr; /* The input string A */
778 const unsigned char *zPattern; /* The pattern string B */
779 const unsigned char *zRep; /* The replacement string C */
780 unsigned char *zOut; /* The output */
781 int nStr; /* Size of zStr */
782 int nPattern; /* Size of zPattern */
783 int nRep; /* Size of zRep */
drh2e6400b2007-05-08 15:46:18 +0000784 i64 nOut; /* Maximum size of zOut */
drh26b6d902007-03-17 13:27:54 +0000785 int loopLimit; /* Last zStr[] that might match zPattern[] */
786 int i, j; /* Loop counters */
787
788 assert( argc==3 );
drh26b6d902007-03-17 13:27:54 +0000789 zStr = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000790 if( zStr==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000791 nStr = sqlite3_value_bytes(argv[0]);
792 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000793 zPattern = sqlite3_value_text(argv[1]);
drh709cff32007-04-27 01:18:02 +0000794 if( zPattern==0 || zPattern[0]==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000795 nPattern = sqlite3_value_bytes(argv[1]);
796 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
drh26b6d902007-03-17 13:27:54 +0000797 zRep = sqlite3_value_text(argv[2]);
drh7a521cf2007-04-25 18:23:52 +0000798 if( zRep==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000799 nRep = sqlite3_value_bytes(argv[2]);
800 assert( zRep==sqlite3_value_text(argv[2]) );
drh2e6400b2007-05-08 15:46:18 +0000801 nOut = nStr + 1;
802 assert( nOut<SQLITE_MAX_LENGTH );
803 zOut = sqlite3_malloc((int)nOut);
804 if( zOut==0 ){
805 return;
drh26b6d902007-03-17 13:27:54 +0000806 }
drh26b6d902007-03-17 13:27:54 +0000807 loopLimit = nStr - nPattern;
808 for(i=j=0; i<=loopLimit; i++){
809 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
810 zOut[j++] = zStr[i];
811 }else{
drh2e6400b2007-05-08 15:46:18 +0000812 nOut += nRep - nPattern;
813 if( nOut>=SQLITE_MAX_LENGTH ){
drha0206bc2007-05-08 15:15:02 +0000814 sqlite3_result_error_toobig(context);
danielk197717374e82007-05-08 14:39:04 +0000815 sqlite3_free(zOut);
816 return;
817 }
drh2e6400b2007-05-08 15:46:18 +0000818 zOut = sqlite3_realloc(zOut, (int)nOut);
819 if( zOut==0 ){
820 return;
821 }
drh26b6d902007-03-17 13:27:54 +0000822 memcpy(&zOut[j], zRep, nRep);
823 j += nRep;
824 i += nPattern-1;
825 }
826 }
drh2e6400b2007-05-08 15:46:18 +0000827 assert( j+nStr-i+1==nOut );
drh26b6d902007-03-17 13:27:54 +0000828 memcpy(&zOut[j], &zStr[i], nStr-i);
829 j += nStr - i;
830 assert( j<=nOut );
831 zOut[j] = 0;
832 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
833}
834
drh309b3382007-03-17 17:52:42 +0000835/*
836** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
837** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
838*/
839static void trimFunc(
840 sqlite3_context *context,
841 int argc,
842 sqlite3_value **argv
843){
844 const unsigned char *zIn; /* Input string */
845 const unsigned char *zCharSet; /* Set of characters to trim */
846 int nIn; /* Number of bytes in input */
drhd1e3a612007-04-27 21:59:52 +0000847 int flags; /* 1: trimleft 2: trimright 3: trim */
848 int i; /* Loop counter */
849 unsigned char *aLen; /* Length of each character in zCharSet */
850 const unsigned char **azChar; /* Individual characters in zCharSet */
851 int nChar; /* Number of characters in zCharSet */
852
drh309b3382007-03-17 17:52:42 +0000853 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
854 return;
855 }
856 zIn = sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000857 if( zIn==0 ) return;
drh1f0feef2007-05-15 13:27:07 +0000858 nIn = sqlite3_value_bytes(argv[0]);
859 assert( zIn==sqlite3_value_text(argv[0]) );
drh309b3382007-03-17 17:52:42 +0000860 if( argc==1 ){
drhd1e3a612007-04-27 21:59:52 +0000861 static const unsigned char lenOne[] = { 1 };
drh8cff3822007-05-02 02:08:28 +0000862 static const unsigned char *azOne[] = { (u8*)" " };
drhd1e3a612007-04-27 21:59:52 +0000863 nChar = 1;
drh8cff3822007-05-02 02:08:28 +0000864 aLen = (u8*)lenOne;
865 azChar = azOne;
drhd1e3a612007-04-27 21:59:52 +0000866 zCharSet = 0;
drh7a521cf2007-04-25 18:23:52 +0000867 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
drh309b3382007-03-17 17:52:42 +0000868 return;
drhd1e3a612007-04-27 21:59:52 +0000869 }else{
870 const unsigned char *z;
871 for(z=zCharSet, nChar=0; *z; nChar++){
drh4a919112007-05-15 11:55:09 +0000872 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000873 }
874 if( nChar>0 ){
875 azChar = sqlite3_malloc( nChar*(sizeof(char*)+1) );
876 if( azChar==0 ){
877 return;
878 }
879 aLen = (unsigned char*)&azChar[nChar];
880 for(z=zCharSet, nChar=0; *z; nChar++){
881 azChar[nChar] = z;
drh4a919112007-05-15 11:55:09 +0000882 SQLITE_SKIP_UTF8(z);
drhd1e3a612007-04-27 21:59:52 +0000883 aLen[nChar] = z - azChar[nChar];
884 }
885 }
drh309b3382007-03-17 17:52:42 +0000886 }
drhd1e3a612007-04-27 21:59:52 +0000887 if( nChar>0 ){
drh309b3382007-03-17 17:52:42 +0000888 flags = (int)sqlite3_user_data(context);
889 if( flags & 1 ){
drhd1e3a612007-04-27 21:59:52 +0000890 while( nIn>0 ){
891 int len;
892 for(i=0; i<nChar; i++){
893 len = aLen[i];
894 if( memcmp(zIn, azChar[i], len)==0 ) break;
895 }
896 if( i>=nChar ) break;
897 zIn += len;
898 nIn -= len;
drh309b3382007-03-17 17:52:42 +0000899 }
900 }
901 if( flags & 2 ){
drhd1e3a612007-04-27 21:59:52 +0000902 while( nIn>0 ){
903 int len;
904 for(i=0; i<nChar; i++){
905 len = aLen[i];
906 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
907 }
908 if( i>=nChar ) break;
909 nIn -= len;
drh309b3382007-03-17 17:52:42 +0000910 }
911 }
drhd1e3a612007-04-27 21:59:52 +0000912 if( zCharSet ){
913 sqlite3_free(azChar);
914 }
drh309b3382007-03-17 17:52:42 +0000915 }
916 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
917}
drh26b6d902007-03-17 13:27:54 +0000918
drhd24cc422003-03-27 12:51:24 +0000919#ifdef SQLITE_SOUNDEX
920/*
921** Compute the soundex encoding of a word.
922*/
drh137c7282007-01-29 17:58:28 +0000923static void soundexFunc(
924 sqlite3_context *context,
925 int argc,
926 sqlite3_value **argv
927){
drhd24cc422003-03-27 12:51:24 +0000928 char zResult[8];
drh4c755c02004-08-08 20:22:17 +0000929 const u8 *zIn;
drhd24cc422003-03-27 12:51:24 +0000930 int i, j;
931 static const unsigned char iCode[] = {
932 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
933 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
934 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
935 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
936 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
937 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
938 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
939 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
940 };
941 assert( argc==1 );
drh4c755c02004-08-08 20:22:17 +0000942 zIn = (u8*)sqlite3_value_text(argv[0]);
drhbdf67e02006-08-19 11:34:01 +0000943 if( zIn==0 ) zIn = (u8*)"";
drhd24cc422003-03-27 12:51:24 +0000944 for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
945 if( zIn[i] ){
drhbdf67e02006-08-19 11:34:01 +0000946 u8 prevcode = iCode[zIn[i]&0x7f];
drhd24cc422003-03-27 12:51:24 +0000947 zResult[0] = toupper(zIn[i]);
948 for(j=1; j<4 && zIn[i]; i++){
949 int code = iCode[zIn[i]&0x7f];
950 if( code>0 ){
drhbdf67e02006-08-19 11:34:01 +0000951 if( code!=prevcode ){
952 prevcode = code;
953 zResult[j++] = code + '0';
954 }
955 }else{
956 prevcode = 0;
drhd24cc422003-03-27 12:51:24 +0000957 }
958 }
959 while( j<4 ){
960 zResult[j++] = '0';
961 }
962 zResult[j] = 0;
danielk1977d8123362004-06-12 09:25:12 +0000963 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
drhd24cc422003-03-27 12:51:24 +0000964 }else{
danielk1977d8123362004-06-12 09:25:12 +0000965 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
drhd24cc422003-03-27 12:51:24 +0000966 }
967}
968#endif
969
drhfdb83b22006-06-17 14:12:47 +0000970#ifndef SQLITE_OMIT_LOAD_EXTENSION
971/*
972** A function that loads a shared-library extension then returns NULL.
973*/
974static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197765fd59f2006-06-24 11:51:33 +0000975 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
drh7a521cf2007-04-25 18:23:52 +0000976 const char *zProc;
drhfdb83b22006-06-17 14:12:47 +0000977 sqlite3 *db = sqlite3_user_data(context);
978 char *zErrMsg = 0;
979
980 if( argc==2 ){
danielk197765fd59f2006-06-24 11:51:33 +0000981 zProc = (const char *)sqlite3_value_text(argv[1]);
drh7a521cf2007-04-25 18:23:52 +0000982 }else{
983 zProc = 0;
drhfdb83b22006-06-17 14:12:47 +0000984 }
drh7a521cf2007-04-25 18:23:52 +0000985 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
drhfdb83b22006-06-17 14:12:47 +0000986 sqlite3_result_error(context, zErrMsg, -1);
987 sqlite3_free(zErrMsg);
988 }
989}
990#endif
991
drh193a6b42002-07-07 16:52:46 +0000992#ifdef SQLITE_TEST
993/*
994** This function generates a string of random characters. Used for
995** generating test data.
996*/
danielk19770ae8b832004-05-25 12:05:56 +0000997static void randStr(sqlite3_context *context, int argc, sqlite3_value **argv){
drhbbd82df2004-02-11 09:46:30 +0000998 static const unsigned char zSrc[] =
drh193a6b42002-07-07 16:52:46 +0000999 "abcdefghijklmnopqrstuvwxyz"
1000 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1001 "0123456789"
1002 ".-!,:*^+=_|?/<> ";
1003 int iMin, iMax, n, r, i;
drhbbd82df2004-02-11 09:46:30 +00001004 unsigned char zBuf[1000];
drh193a6b42002-07-07 16:52:46 +00001005 if( argc>=1 ){
drhf9b596e2004-05-26 16:54:42 +00001006 iMin = sqlite3_value_int(argv[0]);
drh193a6b42002-07-07 16:52:46 +00001007 if( iMin<0 ) iMin = 0;
1008 if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
1009 }else{
1010 iMin = 1;
1011 }
1012 if( argc>=2 ){
drhf9b596e2004-05-26 16:54:42 +00001013 iMax = sqlite3_value_int(argv[1]);
drh193a6b42002-07-07 16:52:46 +00001014 if( iMax<iMin ) iMax = iMin;
drh1dba7272004-01-16 13:58:18 +00001015 if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
drh193a6b42002-07-07 16:52:46 +00001016 }else{
1017 iMax = 50;
1018 }
1019 n = iMin;
1020 if( iMax>iMin ){
danielk19774adee202004-05-08 08:23:19 +00001021 sqlite3Randomness(sizeof(r), &r);
drhbbd82df2004-02-11 09:46:30 +00001022 r &= 0x7fffffff;
drh193a6b42002-07-07 16:52:46 +00001023 n += r%(iMax + 1 - iMin);
1024 }
drh1dba7272004-01-16 13:58:18 +00001025 assert( n<sizeof(zBuf) );
danielk19774adee202004-05-08 08:23:19 +00001026 sqlite3Randomness(n, zBuf);
drh193a6b42002-07-07 16:52:46 +00001027 for(i=0; i<n; i++){
drhbbd82df2004-02-11 09:46:30 +00001028 zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
drh193a6b42002-07-07 16:52:46 +00001029 }
1030 zBuf[n] = 0;
drh2646da72005-12-09 20:02:05 +00001031 sqlite3_result_text(context, (char*)zBuf, n, SQLITE_TRANSIENT);
danielk1977d8123362004-06-12 09:25:12 +00001032}
drh0e3d7472004-06-19 17:33:07 +00001033#endif /* SQLITE_TEST */
danielk1977d8123362004-06-12 09:25:12 +00001034
drh0e3d7472004-06-19 17:33:07 +00001035#ifdef SQLITE_TEST
danielk1977d8123362004-06-12 09:25:12 +00001036/*
1037** The following two SQL functions are used to test returning a text
1038** result with a destructor. Function 'test_destructor' takes one argument
1039** and returns the same argument interpreted as TEXT. A destructor is
1040** passed with the sqlite3_result_text() call.
1041**
1042** SQL function 'test_destructor_count' returns the number of outstanding
1043** allocations made by 'test_destructor';
1044**
1045** WARNING: Not threadsafe.
1046*/
1047static int test_destructor_count_var = 0;
1048static void destructor(void *p){
1049 char *zVal = (char *)p;
1050 assert(zVal);
1051 zVal--;
drh17435752007-08-16 04:30:38 +00001052 sqlite3_free(zVal);
danielk1977d8123362004-06-12 09:25:12 +00001053 test_destructor_count_var--;
1054}
1055static void test_destructor(
1056 sqlite3_context *pCtx,
1057 int nArg,
1058 sqlite3_value **argv
1059){
1060 char *zVal;
danielk1977f4618892004-06-28 13:09:11 +00001061 int len;
drh9bb575f2004-09-06 17:24:11 +00001062 sqlite3 *db = sqlite3_user_data(pCtx);
danielk1977f4618892004-06-28 13:09:11 +00001063
danielk1977d8123362004-06-12 09:25:12 +00001064 test_destructor_count_var++;
1065 assert( nArg==1 );
1066 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
danielk197714db2662006-01-09 16:12:04 +00001067 len = sqlite3ValueBytes(argv[0], ENC(db));
danielk1977f4618892004-06-28 13:09:11 +00001068 zVal = sqliteMalloc(len+3);
1069 zVal[len] = 0;
1070 zVal[len-1] = 0;
danielk1977d8123362004-06-12 09:25:12 +00001071 assert( zVal );
1072 zVal++;
danielk197714db2662006-01-09 16:12:04 +00001073 memcpy(zVal, sqlite3ValueText(argv[0], ENC(db)), len);
1074 if( ENC(db)==SQLITE_UTF8 ){
danielk1977f4618892004-06-28 13:09:11 +00001075 sqlite3_result_text(pCtx, zVal, -1, destructor);
drh6c626082004-11-14 21:56:29 +00001076#ifndef SQLITE_OMIT_UTF16
danielk197714db2662006-01-09 16:12:04 +00001077 }else if( ENC(db)==SQLITE_UTF16LE ){
danielk1977f4618892004-06-28 13:09:11 +00001078 sqlite3_result_text16le(pCtx, zVal, -1, destructor);
1079 }else{
1080 sqlite3_result_text16be(pCtx, zVal, -1, destructor);
drh6c626082004-11-14 21:56:29 +00001081#endif /* SQLITE_OMIT_UTF16 */
danielk1977f4618892004-06-28 13:09:11 +00001082 }
danielk1977d8123362004-06-12 09:25:12 +00001083}
1084static void test_destructor_count(
1085 sqlite3_context *pCtx,
1086 int nArg,
1087 sqlite3_value **argv
1088){
1089 sqlite3_result_int(pCtx, test_destructor_count_var);
drh193a6b42002-07-07 16:52:46 +00001090}
drh0e3d7472004-06-19 17:33:07 +00001091#endif /* SQLITE_TEST */
danielk19773f6b0872004-06-17 05:36:44 +00001092
drh0e3d7472004-06-19 17:33:07 +00001093#ifdef SQLITE_TEST
1094/*
1095** Routines for testing the sqlite3_get_auxdata() and sqlite3_set_auxdata()
1096** interface.
1097**
1098** The test_auxdata() SQL function attempts to register each of its arguments
1099** as auxiliary data. If there are no prior registrations of aux data for
1100** that argument (meaning the argument is not a constant or this is its first
1101** call) then the result for that argument is 0. If there is a prior
1102** registration, the result for that argument is 1. The overall result
1103** is the individual argument results separated by spaces.
1104*/
drh17435752007-08-16 04:30:38 +00001105static void free_test_auxdata(void *p) {sqlite3_free(p);}
danielk19773f6b0872004-06-17 05:36:44 +00001106static void test_auxdata(
1107 sqlite3_context *pCtx,
1108 int nArg,
1109 sqlite3_value **argv
1110){
1111 int i;
1112 char *zRet = sqliteMalloc(nArg*2);
1113 if( !zRet ) return;
1114 for(i=0; i<nArg; i++){
drh2646da72005-12-09 20:02:05 +00001115 char const *z = (char*)sqlite3_value_text(argv[i]);
danielk19773f6b0872004-06-17 05:36:44 +00001116 if( z ){
1117 char *zAux = sqlite3_get_auxdata(pCtx, i);
1118 if( zAux ){
1119 zRet[i*2] = '1';
1120 if( strcmp(zAux, z) ){
danielk1977e0fc5262007-07-26 06:50:05 +00001121 free_test_auxdata((void *)zRet);
danielk19773f6b0872004-06-17 05:36:44 +00001122 sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
1123 return;
1124 }
1125 }else{
1126 zRet[i*2] = '0';
drh17435752007-08-16 04:30:38 +00001127 zAux = sqlite3StrDup(z);
danielk19773f6b0872004-06-17 05:36:44 +00001128 sqlite3_set_auxdata(pCtx, i, zAux, free_test_auxdata);
1129 }
1130 zRet[i*2+1] = ' ';
1131 }
1132 }
1133 sqlite3_result_text(pCtx, zRet, 2*nArg-1, free_test_auxdata);
1134}
drh0e3d7472004-06-19 17:33:07 +00001135#endif /* SQLITE_TEST */
drh193a6b42002-07-07 16:52:46 +00001136
danielk197701427a62005-01-11 13:02:33 +00001137#ifdef SQLITE_TEST
1138/*
1139** A function to test error reporting from user functions. This function
1140** returns a copy of it's first argument as an error.
1141*/
1142static void test_error(
1143 sqlite3_context *pCtx,
1144 int nArg,
1145 sqlite3_value **argv
1146){
drh2646da72005-12-09 20:02:05 +00001147 sqlite3_result_error(pCtx, (char*)sqlite3_value_text(argv[0]), 0);
danielk197701427a62005-01-11 13:02:33 +00001148}
1149#endif /* SQLITE_TEST */
1150
drh0ac65892002-04-20 14:24:41 +00001151/*
drhd3a149e2002-02-24 17:12:53 +00001152** An instance of the following structure holds the context of a
drhdd5baa92002-02-27 19:50:59 +00001153** sum() or avg() aggregate computation.
1154*/
1155typedef struct SumCtx SumCtx;
1156struct SumCtx {
drh8c08e862006-02-11 17:34:00 +00001157 double rSum; /* Floating point sum */
1158 i64 iSum; /* Integer sum */
1159 i64 cnt; /* Number of elements summed */
1160 u8 overflow; /* True if integer overflow seen */
1161 u8 approx; /* True if non-integer value was input to the sum */
drhdd5baa92002-02-27 19:50:59 +00001162};
1163
1164/*
drha97fdd32006-01-12 22:17:50 +00001165** Routines used to compute the sum, average, and total.
1166**
1167** The SUM() function follows the (broken) SQL standard which means
1168** that it returns NULL if it sums over no inputs. TOTAL returns
1169** 0.0 in that case. In addition, TOTAL always returns a float where
1170** SUM might return an integer if it never encounters a floating point
drhc806d852006-05-11 13:25:39 +00001171** value. TOTAL never fails, but SUM might through an exception if
1172** it overflows an integer.
drhdd5baa92002-02-27 19:50:59 +00001173*/
danielk19770ae8b832004-05-25 12:05:56 +00001174static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drhdd5baa92002-02-27 19:50:59 +00001175 SumCtx *p;
drh3d1d95e2005-09-08 10:37:01 +00001176 int type;
drh3f219f42005-09-08 19:45:57 +00001177 assert( argc==1 );
drh4f26d6c2004-05-26 23:25:30 +00001178 p = sqlite3_aggregate_context(context, sizeof(*p));
drh29d72102006-02-09 22:13:41 +00001179 type = sqlite3_value_numeric_type(argv[0]);
drh3d1d95e2005-09-08 10:37:01 +00001180 if( p && type!=SQLITE_NULL ){
drh739105c2002-05-29 23:22:23 +00001181 p->cnt++;
drh29d72102006-02-09 22:13:41 +00001182 if( type==SQLITE_INTEGER ){
drh8c08e862006-02-11 17:34:00 +00001183 i64 v = sqlite3_value_int64(argv[0]);
1184 p->rSum += v;
1185 if( (p->approx|p->overflow)==0 ){
1186 i64 iNewSum = p->iSum + v;
1187 int s1 = p->iSum >> (sizeof(i64)*8-1);
1188 int s2 = v >> (sizeof(i64)*8-1);
1189 int s3 = iNewSum >> (sizeof(i64)*8-1);
1190 p->overflow = (s1&s2&~s3) | (~s1&~s2&s3);
1191 p->iSum = iNewSum;
drh29d72102006-02-09 22:13:41 +00001192 }
1193 }else{
drh8c08e862006-02-11 17:34:00 +00001194 p->rSum += sqlite3_value_double(argv[0]);
drh29d72102006-02-09 22:13:41 +00001195 p->approx = 1;
drh3f219f42005-09-08 19:45:57 +00001196 }
drh739105c2002-05-29 23:22:23 +00001197 }
drhdd5baa92002-02-27 19:50:59 +00001198}
danielk19770ae8b832004-05-25 12:05:56 +00001199static void sumFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001200 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001201 p = sqlite3_aggregate_context(context, 0);
drhc2bd9132005-09-08 20:37:43 +00001202 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001203 if( p->overflow ){
1204 sqlite3_result_error(context,"integer overflow",-1);
1205 }else if( p->approx ){
1206 sqlite3_result_double(context, p->rSum);
drhc2bd9132005-09-08 20:37:43 +00001207 }else{
drh8c08e862006-02-11 17:34:00 +00001208 sqlite3_result_int64(context, p->iSum);
drhc2bd9132005-09-08 20:37:43 +00001209 }
drh3d1d95e2005-09-08 10:37:01 +00001210 }
drhdd5baa92002-02-27 19:50:59 +00001211}
danielk19770ae8b832004-05-25 12:05:56 +00001212static void avgFinalize(sqlite3_context *context){
drhdd5baa92002-02-27 19:50:59 +00001213 SumCtx *p;
drhabfcea22005-09-06 20:36:48 +00001214 p = sqlite3_aggregate_context(context, 0);
drh739105c2002-05-29 23:22:23 +00001215 if( p && p->cnt>0 ){
drh8c08e862006-02-11 17:34:00 +00001216 sqlite3_result_double(context, p->rSum/(double)p->cnt);
drhdd5baa92002-02-27 19:50:59 +00001217 }
1218}
drha97fdd32006-01-12 22:17:50 +00001219static void totalFinalize(sqlite3_context *context){
1220 SumCtx *p;
1221 p = sqlite3_aggregate_context(context, 0);
drh8c08e862006-02-11 17:34:00 +00001222 sqlite3_result_double(context, p ? p->rSum : 0.0);
drha97fdd32006-01-12 22:17:50 +00001223}
drhdd5baa92002-02-27 19:50:59 +00001224
1225/*
drh0bce8352002-02-28 00:41:10 +00001226** The following structure keeps track of state information for the
1227** count() aggregate function.
1228*/
1229typedef struct CountCtx CountCtx;
1230struct CountCtx {
drhfc6ad392006-02-09 13:38:19 +00001231 i64 n;
drh0bce8352002-02-28 00:41:10 +00001232};
drhdd5baa92002-02-27 19:50:59 +00001233
drh0bce8352002-02-28 00:41:10 +00001234/*
1235** Routines to implement the count() aggregate function.
1236*/
danielk19770ae8b832004-05-25 12:05:56 +00001237static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
drh0bce8352002-02-28 00:41:10 +00001238 CountCtx *p;
drh4f26d6c2004-05-26 23:25:30 +00001239 p = sqlite3_aggregate_context(context, sizeof(*p));
drh9c054832004-05-31 18:51:57 +00001240 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
drh0bce8352002-02-28 00:41:10 +00001241 p->n++;
1242 }
1243}
danielk19770ae8b832004-05-25 12:05:56 +00001244static void countFinalize(sqlite3_context *context){
drh0bce8352002-02-28 00:41:10 +00001245 CountCtx *p;
drhabfcea22005-09-06 20:36:48 +00001246 p = sqlite3_aggregate_context(context, 0);
drhfc6ad392006-02-09 13:38:19 +00001247 sqlite3_result_int64(context, p ? p->n : 0);
drh0bce8352002-02-28 00:41:10 +00001248}
1249
1250/*
drh0bce8352002-02-28 00:41:10 +00001251** Routines to implement min() and max() aggregate functions.
1252*/
danielk19770ae8b832004-05-25 12:05:56 +00001253static void minmaxStep(sqlite3_context *context, int argc, sqlite3_value **argv){
danielk197788208052004-05-25 01:13:20 +00001254 Mem *pArg = (Mem *)argv[0];
drh9eb516c2004-07-18 20:52:32 +00001255 Mem *pBest;
1256
1257 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
1258 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
danielk19773aeab9e2004-06-24 00:20:04 +00001259 if( !pBest ) return;
drh268380c2004-02-25 13:47:31 +00001260
danielk197788208052004-05-25 01:13:20 +00001261 if( pBest->flags ){
drh9eb516c2004-07-18 20:52:32 +00001262 int max;
1263 int cmp;
danielk1977dc1bdc42004-06-11 10:51:27 +00001264 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
danielk19777e18c252004-05-25 11:47:24 +00001265 /* This step function is used for both the min() and max() aggregates,
1266 ** the only difference between the two being that the sense of the
1267 ** comparison is inverted. For the max() aggregate, the
1268 ** sqlite3_user_data() function returns (void *)-1. For min() it
1269 ** returns (void *)db, where db is the sqlite3* database pointer.
1270 ** Therefore the next statement sets variable 'max' to 1 for the max()
1271 ** aggregate, or 0 for min().
1272 */
drh309b3382007-03-17 17:52:42 +00001273 max = sqlite3_user_data(context)!=0;
danielk1977dc1bdc42004-06-11 10:51:27 +00001274 cmp = sqlite3MemCompare(pBest, pArg, pColl);
danielk197788208052004-05-25 01:13:20 +00001275 if( (max && cmp<0) || (!max && cmp>0) ){
danielk19777e18c252004-05-25 11:47:24 +00001276 sqlite3VdbeMemCopy(pBest, pArg);
danielk197788208052004-05-25 01:13:20 +00001277 }
drh268380c2004-02-25 13:47:31 +00001278 }else{
danielk19777e18c252004-05-25 11:47:24 +00001279 sqlite3VdbeMemCopy(pBest, pArg);
drh0bce8352002-02-28 00:41:10 +00001280 }
1281}
danielk19770ae8b832004-05-25 12:05:56 +00001282static void minMaxFinalize(sqlite3_context *context){
danielk197788208052004-05-25 01:13:20 +00001283 sqlite3_value *pRes;
drhabfcea22005-09-06 20:36:48 +00001284 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
1285 if( pRes ){
1286 if( pRes->flags ){
1287 sqlite3_result_value(context, pRes);
1288 }
1289 sqlite3VdbeMemRelease(pRes);
drh0bce8352002-02-28 00:41:10 +00001290 }
1291}
drhdd5baa92002-02-27 19:50:59 +00001292
drh4e5ffc52004-08-31 00:52:37 +00001293
drhd3a149e2002-02-24 17:12:53 +00001294/*
drha2ed5602002-02-26 23:55:31 +00001295** This function registered all of the above C functions as SQL
1296** functions. This should be the only routine in this file with
1297** external linkage.
drhdc04c582002-02-24 01:55:15 +00001298*/
drh9bb575f2004-09-06 17:24:11 +00001299void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
drh57196282004-10-06 15:41:16 +00001300 static const struct {
drh0bce8352002-02-28 00:41:10 +00001301 char *zName;
drh268380c2004-02-25 13:47:31 +00001302 signed char nArg;
drh309b3382007-03-17 17:52:42 +00001303 u8 argType; /* ff: db 1: 0, 2: 1, 3: 2,... N: N-1. */
danielk1977f4618892004-06-28 13:09:11 +00001304 u8 eTextRep; /* 1: UTF-16. 0: UTF-8 */
danielk1977dc1bdc42004-06-11 10:51:27 +00001305 u8 needCollSeq;
danielk19770ae8b832004-05-25 12:05:56 +00001306 void (*xFunc)(sqlite3_context*,int,sqlite3_value **);
drh0bce8352002-02-28 00:41:10 +00001307 } aFuncs[] = {
danielk1977f4618892004-06-28 13:09:11 +00001308 { "min", -1, 0, SQLITE_UTF8, 1, minmaxFunc },
1309 { "min", 0, 0, SQLITE_UTF8, 1, 0 },
drh309b3382007-03-17 17:52:42 +00001310 { "max", -1, 1, SQLITE_UTF8, 1, minmaxFunc },
1311 { "max", 0, 1, SQLITE_UTF8, 1, 0 },
danielk1977f4618892004-06-28 13:09:11 +00001312 { "typeof", 1, 0, SQLITE_UTF8, 0, typeofFunc },
1313 { "length", 1, 0, SQLITE_UTF8, 0, lengthFunc },
1314 { "substr", 3, 0, SQLITE_UTF8, 0, substrFunc },
danielk1977f4618892004-06-28 13:09:11 +00001315 { "abs", 1, 0, SQLITE_UTF8, 0, absFunc },
1316 { "round", 1, 0, SQLITE_UTF8, 0, roundFunc },
1317 { "round", 2, 0, SQLITE_UTF8, 0, roundFunc },
1318 { "upper", 1, 0, SQLITE_UTF8, 0, upperFunc },
1319 { "lower", 1, 0, SQLITE_UTF8, 0, lowerFunc },
1320 { "coalesce", -1, 0, SQLITE_UTF8, 0, ifnullFunc },
1321 { "coalesce", 0, 0, SQLITE_UTF8, 0, 0 },
1322 { "coalesce", 1, 0, SQLITE_UTF8, 0, 0 },
drh137c7282007-01-29 17:58:28 +00001323 { "hex", 1, 0, SQLITE_UTF8, 0, hexFunc },
danielk1977f4618892004-06-28 13:09:11 +00001324 { "ifnull", 2, 0, SQLITE_UTF8, 1, ifnullFunc },
1325 { "random", -1, 0, SQLITE_UTF8, 0, randomFunc },
drh137c7282007-01-29 17:58:28 +00001326 { "randomblob", 1, 0, SQLITE_UTF8, 0, randomBlob },
drh94a98362004-09-13 13:13:18 +00001327 { "nullif", 2, 0, SQLITE_UTF8, 1, nullifFunc },
danielk1977f4618892004-06-28 13:09:11 +00001328 { "sqlite_version", 0, 0, SQLITE_UTF8, 0, versionFunc},
1329 { "quote", 1, 0, SQLITE_UTF8, 0, quoteFunc },
drh309b3382007-03-17 17:52:42 +00001330 { "last_insert_rowid", 0, 0xff, SQLITE_UTF8, 0, last_insert_rowid },
1331 { "changes", 0, 0xff, SQLITE_UTF8, 0, changes },
1332 { "total_changes", 0, 0xff, SQLITE_UTF8, 0, total_changes },
drh26b6d902007-03-17 13:27:54 +00001333 { "replace", 3, 0, SQLITE_UTF8, 0, replaceFunc },
drh309b3382007-03-17 17:52:42 +00001334 { "ltrim", 1, 1, SQLITE_UTF8, 0, trimFunc },
1335 { "ltrim", 2, 1, SQLITE_UTF8, 0, trimFunc },
1336 { "rtrim", 1, 2, SQLITE_UTF8, 0, trimFunc },
1337 { "rtrim", 2, 2, SQLITE_UTF8, 0, trimFunc },
1338 { "trim", 1, 3, SQLITE_UTF8, 0, trimFunc },
1339 { "trim", 2, 3, SQLITE_UTF8, 0, trimFunc },
drh8cff3822007-05-02 02:08:28 +00001340 { "zeroblob", 1, 0, SQLITE_UTF8, 0, zeroblobFunc },
drhd24cc422003-03-27 12:51:24 +00001341#ifdef SQLITE_SOUNDEX
drh309b3382007-03-17 17:52:42 +00001342 { "soundex", 1, 0, SQLITE_UTF8, 0, soundexFunc},
drhd24cc422003-03-27 12:51:24 +00001343#endif
drhfdb83b22006-06-17 14:12:47 +00001344#ifndef SQLITE_OMIT_LOAD_EXTENSION
drh309b3382007-03-17 17:52:42 +00001345 { "load_extension", 1, 0xff, SQLITE_UTF8, 0, loadExt },
1346 { "load_extension", 2, 0xff, SQLITE_UTF8, 0, loadExt },
drhfdb83b22006-06-17 14:12:47 +00001347#endif
drh193a6b42002-07-07 16:52:46 +00001348#ifdef SQLITE_TEST
drh309b3382007-03-17 17:52:42 +00001349 { "randstr", 2, 0, SQLITE_UTF8, 0, randStr },
1350 { "test_destructor", 1, 0xff, SQLITE_UTF8, 0, test_destructor},
1351 { "test_destructor_count", 0, 0, SQLITE_UTF8, 0, test_destructor_count},
1352 { "test_auxdata", -1, 0, SQLITE_UTF8, 0, test_auxdata},
1353 { "test_error", 1, 0, SQLITE_UTF8, 0, test_error},
drh193a6b42002-07-07 16:52:46 +00001354#endif
drh0bce8352002-02-28 00:41:10 +00001355 };
drh57196282004-10-06 15:41:16 +00001356 static const struct {
drh0bce8352002-02-28 00:41:10 +00001357 char *zName;
drh268380c2004-02-25 13:47:31 +00001358 signed char nArg;
drh268380c2004-02-25 13:47:31 +00001359 u8 argType;
danielk1977dc1bdc42004-06-11 10:51:27 +00001360 u8 needCollSeq;
danielk19770ae8b832004-05-25 12:05:56 +00001361 void (*xStep)(sqlite3_context*,int,sqlite3_value**);
1362 void (*xFinalize)(sqlite3_context*);
drh0bce8352002-02-28 00:41:10 +00001363 } aAggs[] = {
danielk1977dc1bdc42004-06-11 10:51:27 +00001364 { "min", 1, 0, 1, minmaxStep, minMaxFinalize },
drh309b3382007-03-17 17:52:42 +00001365 { "max", 1, 1, 1, minmaxStep, minMaxFinalize },
danielk1977dc1bdc42004-06-11 10:51:27 +00001366 { "sum", 1, 0, 0, sumStep, sumFinalize },
drha97fdd32006-01-12 22:17:50 +00001367 { "total", 1, 0, 0, sumStep, totalFinalize },
danielk1977dc1bdc42004-06-11 10:51:27 +00001368 { "avg", 1, 0, 0, sumStep, avgFinalize },
1369 { "count", 0, 0, 0, countStep, countFinalize },
1370 { "count", 1, 0, 0, countStep, countFinalize },
drh0bce8352002-02-28 00:41:10 +00001371 };
1372 int i;
1373
1374 for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
drh309b3382007-03-17 17:52:42 +00001375 void *pArg;
1376 u8 argType = aFuncs[i].argType;
1377 if( argType==0xff ){
1378 pArg = db;
1379 }else{
1380 pArg = (void*)(int)argType;
danielk1977c572ef72004-05-27 09:28:41 +00001381 }
danielk1977771151b2006-01-17 13:21:40 +00001382 sqlite3CreateFunc(db, aFuncs[i].zName, aFuncs[i].nArg,
danielk1977f9d64d22004-06-19 08:18:07 +00001383 aFuncs[i].eTextRep, pArg, aFuncs[i].xFunc, 0, 0);
danielk1977dc1bdc42004-06-11 10:51:27 +00001384 if( aFuncs[i].needCollSeq ){
1385 FuncDef *pFunc = sqlite3FindFunction(db, aFuncs[i].zName,
1386 strlen(aFuncs[i].zName), aFuncs[i].nArg, aFuncs[i].eTextRep, 0);
1387 if( pFunc && aFuncs[i].needCollSeq ){
1388 pFunc->needCollSeq = 1;
1389 }
1390 }
drh0bce8352002-02-28 00:41:10 +00001391 }
drh1f01ec12005-02-15 21:36:18 +00001392#ifndef SQLITE_OMIT_ALTERTABLE
1393 sqlite3AlterFunctions(db);
1394#endif
drh198bf392006-01-06 21:52:49 +00001395#ifndef SQLITE_OMIT_PARSER
danielk1977f744bb52005-12-06 17:19:11 +00001396 sqlite3AttachFunctions(db);
drh198bf392006-01-06 21:52:49 +00001397#endif
drh0bce8352002-02-28 00:41:10 +00001398 for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
drh309b3382007-03-17 17:52:42 +00001399 void *pArg = (void*)(int)aAggs[i].argType;
danielk1977771151b2006-01-17 13:21:40 +00001400 sqlite3CreateFunc(db, aAggs[i].zName, aAggs[i].nArg, SQLITE_UTF8,
danielk1977f9d64d22004-06-19 08:18:07 +00001401 pArg, 0, aAggs[i].xStep, aAggs[i].xFinalize);
danielk1977dc1bdc42004-06-11 10:51:27 +00001402 if( aAggs[i].needCollSeq ){
1403 FuncDef *pFunc = sqlite3FindFunction( db, aAggs[i].zName,
danielk1977d8123362004-06-12 09:25:12 +00001404 strlen(aAggs[i].zName), aAggs[i].nArg, SQLITE_UTF8, 0);
danielk1977dc1bdc42004-06-11 10:51:27 +00001405 if( pFunc && aAggs[i].needCollSeq ){
1406 pFunc->needCollSeq = 1;
1407 }
1408 }
drh268380c2004-02-25 13:47:31 +00001409 }
danielk19774adee202004-05-08 08:23:19 +00001410 sqlite3RegisterDateTimeFunctions(db);
danielk1977832a58a2007-06-22 15:21:15 +00001411 if( !sqlite3MallocFailed() ){
1412 int rc = sqlite3_overload_function(db, "MATCH", 2);
1413 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
1414 if( rc==SQLITE_NOMEM ){
1415 sqlite3FailedMalloc();
1416 }
1417 }
danielk1977fd9e1f32005-05-22 10:44:34 +00001418#ifdef SQLITE_SSE
drh37527852006-03-16 16:19:56 +00001419 (void)sqlite3SseFunctions(db);
danielk1977fd9e1f32005-05-22 10:44:34 +00001420#endif
drh55ef4d92005-08-14 01:20:37 +00001421#ifdef SQLITE_CASE_SENSITIVE_LIKE
1422 sqlite3RegisterLikeFunctions(db, 1);
1423#else
1424 sqlite3RegisterLikeFunctions(db, 0);
1425#endif
1426}
1427
1428/*
1429** Set the LIKEOPT flag on the 2-argument function with the given name.
1430*/
drhd64fe2f2005-08-28 17:00:23 +00001431static void setLikeOptFlag(sqlite3 *db, const char *zName, int flagVal){
drh55ef4d92005-08-14 01:20:37 +00001432 FuncDef *pDef;
1433 pDef = sqlite3FindFunction(db, zName, strlen(zName), 2, SQLITE_UTF8, 0);
1434 if( pDef ){
drhd64fe2f2005-08-28 17:00:23 +00001435 pDef->flags = flagVal;
drh55ef4d92005-08-14 01:20:37 +00001436 }
1437}
1438
1439/*
1440** Register the built-in LIKE and GLOB functions. The caseSensitive
1441** parameter determines whether or not the LIKE operator is case
1442** sensitive. GLOB is always case sensitive.
1443*/
1444void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
1445 struct compareInfo *pInfo;
1446 if( caseSensitive ){
1447 pInfo = (struct compareInfo*)&likeInfoAlt;
1448 }else{
1449 pInfo = (struct compareInfo*)&likeInfoNorm;
1450 }
danielk1977771151b2006-01-17 13:21:40 +00001451 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1452 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0);
1453 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
drh55ef4d92005-08-14 01:20:37 +00001454 (struct compareInfo*)&globInfo, likeFunc, 0,0);
drhd64fe2f2005-08-28 17:00:23 +00001455 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
1456 setLikeOptFlag(db, "like",
1457 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
drh55ef4d92005-08-14 01:20:37 +00001458}
1459
1460/*
1461** pExpr points to an expression which implements a function. If
1462** it is appropriate to apply the LIKE optimization to that function
1463** then set aWc[0] through aWc[2] to the wildcard characters and
1464** return TRUE. If the function is not a LIKE-style function then
1465** return FALSE.
1466*/
drhd64fe2f2005-08-28 17:00:23 +00001467int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
drh55ef4d92005-08-14 01:20:37 +00001468 FuncDef *pDef;
danielk1977cdbd8ef2007-05-12 06:11:12 +00001469 if( pExpr->op!=TK_FUNCTION || !pExpr->pList ){
drh55ef4d92005-08-14 01:20:37 +00001470 return 0;
1471 }
1472 if( pExpr->pList->nExpr!=2 ){
1473 return 0;
1474 }
drh2646da72005-12-09 20:02:05 +00001475 pDef = sqlite3FindFunction(db, (char*)pExpr->token.z, pExpr->token.n, 2,
drh55ef4d92005-08-14 01:20:37 +00001476 SQLITE_UTF8, 0);
drhd64fe2f2005-08-28 17:00:23 +00001477 if( pDef==0 || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
drh55ef4d92005-08-14 01:20:37 +00001478 return 0;
1479 }
1480
1481 /* The memcpy() statement assumes that the wildcard characters are
1482 ** the first three statements in the compareInfo structure. The
1483 ** asserts() that follow verify that assumption
1484 */
1485 memcpy(aWc, pDef->pUserData, 3);
1486 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
1487 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
1488 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
drhd64fe2f2005-08-28 17:00:23 +00001489 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
drh55ef4d92005-08-14 01:20:37 +00001490 return 1;
drhdc04c582002-02-24 01:55:15 +00001491}