OpenCoverage

func.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/sqlite/src/src/func.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
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-language implementations for many of the SQL-
13** functions of SQLite. (Some function, and in particular the date and-
14** time functions, are implemented separately.)-
15*/-
16#include "sqliteInt.h"-
17#include <stdlib.h>-
18#include <assert.h>-
19#include "vdbeInt.h"-
20-
21/*-
22** Return the collating function associated with a function.-
23*/-
24static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){-
25 VdbeOp *pOp;-
26 assert( context->pVdbe!=0 );-
27 pOp = &context->pVdbe->aOp[context->iOp-1];-
28 assert( pOp->opcode==OP_CollSeq );-
29 assert( pOp->p4type==P4_COLLSEQ );-
30 return pOp->p4.pColl;
executed 458361 times by 1 test: return pOp->p4.pColl;
Executed by:
  • Self test (438)
458361
31}-
32-
33/*-
34** Indicate that the accumulator load should be skipped on this-
35** iteration of the aggregate loop.-
36*/-
37static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){-
38 assert( context->isError<=0 );-
39 context->isError = -1;-
40 context->skipFlag = 1;-
41}
executed 69306 times by 1 test: end of block
Executed by:
  • Self test (438)
69306
42-
43/*-
44** Implementation of the non-aggregate min() and max() functions-
45*/-
46static void minmaxFunc(-
47 sqlite3_context *context,-
48 int argc,-
49 sqlite3_value **argv-
50){-
51 int i;-
52 int mask; /* 0 for min() or 0xffffffff for max() */-
53 int iBest;-
54 CollSeq *pColl;-
55-
56 assert( argc>1 );-
57 mask = sqlite3_user_data(context)==0 ? 0 : -1;
sqlite3_user_data(context)==0Description
TRUEevaluated 44495 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 43060 times by 1 test
Evaluated by:
  • Self test (438)
43060-44495
58 pColl = sqlite3GetFuncCollSeq(context);-
59 assert( pColl );-
60 assert( mask==-1 || mask==0 );-
61 iBest = 0;-
62 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
executed 8 times by 1 test: return;
Executed by:
  • Self test (438)
sqlite3_value_type(argv[0])==5Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 87547 times by 1 test
Evaluated by:
  • Self test (438)
8-87547
63 for(i=1; i<argc; i++){
i<argcDescription
TRUEevaluated 87572 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 87545 times by 1 test
Evaluated by:
  • Self test (438)
87545-87572
64 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
executed 2 times by 1 test: return;
Executed by:
  • Self test (438)
sqlite3_value_type(argv[i])==5Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 87570 times by 1 test
Evaluated by:
  • Self test (438)
2-87570
65 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
(sqlite3MemCom...Coll)^mask)>=0Description
TRUEevaluated 43409 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 44161 times by 1 test
Evaluated by:
  • Self test (438)
43409-44161
66 testcase( mask==0 );-
67 iBest = i;-
68 }
executed 43409 times by 1 test: end of block
Executed by:
  • Self test (438)
43409
69 }
executed 87570 times by 1 test: end of block
Executed by:
  • Self test (438)
87570
70 sqlite3_result_value(context, argv[iBest]);-
71}
executed 87545 times by 1 test: end of block
Executed by:
  • Self test (438)
87545
72-
73/*-
74** Return the type of the argument.-
75*/-
76static void typeofFunc(-
77 sqlite3_context *context,-
78 int NotUsed,-
79 sqlite3_value **argv-
80){-
81 static const char *azType[] = { "integer", "real", "text", "blob", "null" };-
82 int i = sqlite3_value_type(argv[0]) - 1;-
83 UNUSED_PARAMETER(NotUsed);-
84 assert( i>=0 && i<ArraySize(azType) );-
85 assert( SQLITE_INTEGER==1 );-
86 assert( SQLITE_FLOAT==2 );-
87 assert( SQLITE_TEXT==3 );-
88 assert( SQLITE_BLOB==4 );-
89 assert( SQLITE_NULL==5 );-
90 /* EVIDENCE-OF: R-01470-60482 The sqlite3_value_type(V) interface returns-
91 ** the datatype code for the initial datatype of the sqlite3_value object-
92 ** V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT,-
93 ** SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL. */-
94 sqlite3_result_text(context, azType[i], -1, SQLITE_STATIC);-
95}
executed 6310 times by 1 test: end of block
Executed by:
  • Self test (438)
6310
96-
97-
98/*-
99** Implementation of the length() function-
100*/-
101static void lengthFunc(-
102 sqlite3_context *context,-
103 int argc,-
104 sqlite3_value **argv-
105){-
106 assert( argc==1 );-
107 UNUSED_PARAMETER(argc);-
108 switch( sqlite3_value_type(argv[0]) ){-
109 case SQLITE_BLOB:
executed 11509 times by 1 test: case 4:
Executed by:
  • Self test (438)
11509
110 case SQLITE_INTEGER:
executed 12 times by 1 test: case 1:
Executed by:
  • Self test (438)
12
111 case SQLITE_FLOAT: {
executed 2 times by 1 test: case 2:
Executed by:
  • Self test (438)
2
112 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));-
113 break;
executed 11523 times by 1 test: break;
Executed by:
  • Self test (438)
11523
114 }-
115 case SQLITE_TEXT: {
executed 19351 times by 1 test: case 3:
Executed by:
  • Self test (438)
19351
116 const unsigned char *z = sqlite3_value_text(argv[0]);-
117 const unsigned char *z0;-
118 unsigned char c;-
119 if( z==0 ) return;
never executed: return;
z==0Description
TRUEnever evaluated
FALSEevaluated 19351 times by 1 test
Evaluated by:
  • Self test (438)
0-19351
120 z0 = z;-
121 while( (c = *z)!=0 ){
(c = *z)!=0Description
TRUEevaluated 21462987 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 19351 times by 1 test
Evaluated by:
  • Self test (438)
19351-21462987
122 z++;-
123 if( c>=0xc0 ){
c>=0xc0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21462980 times by 1 test
Evaluated by:
  • Self test (438)
7-21462980
124 while( (*z & 0xc0)==0x80 ){ z++; z0++; }
executed 29 times by 1 test: end of block
Executed by:
  • Self test (438)
(*z & 0xc0)==0x80Description
TRUEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
7-29
125 }
executed 7 times by 1 test: end of block
Executed by:
  • Self test (438)
7
126 }
executed 21462987 times by 1 test: end of block
Executed by:
  • Self test (438)
21462987
127 sqlite3_result_int(context, (int)(z-z0));-
128 break;
executed 19351 times by 1 test: break;
Executed by:
  • Self test (438)
19351
129 }-
130 default: {
executed 10 times by 1 test: default:
Executed by:
  • Self test (438)
10
131 sqlite3_result_null(context);-
132 break;
executed 10 times by 1 test: break;
Executed by:
  • Self test (438)
10
133 }-
134 }-
135}-
136-
137/*-
138** Implementation of the abs() function.-
139**-
140** IMP: R-23979-26855 The abs(X) function returns the absolute value of-
141** the numeric argument X. -
142*/-
143static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){-
144 assert( argc==1 );-
145 UNUSED_PARAMETER(argc);-
146 switch( sqlite3_value_type(argv[0]) ){-
147 case SQLITE_INTEGER: {
executed 5280 times by 1 test: case 1:
Executed by:
  • Self test (438)
5280
148 i64 iVal = sqlite3_value_int64(argv[0]);-
149 if( iVal<0 ){
iVal<0Description
TRUEevaluated 641 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4639 times by 1 test
Evaluated by:
  • Self test (438)
641-4639
150 if( iVal==SMALLEST_INT64 ){
iVal==(((i64)-...ffffff)<<32)))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 640 times by 1 test
Evaluated by:
  • Self test (438)
1-640
151 /* IMP: R-31676-45509 If X is the integer -9223372036854775808-
152 ** then abs(X) throws an integer overflow error since there is no-
153 ** equivalent positive 64-bit two complement value. */-
154 sqlite3_result_error(context, "integer overflow", -1);-
155 return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
1
156 }-
157 iVal = -iVal;-
158 }
executed 640 times by 1 test: end of block
Executed by:
  • Self test (438)
640
159 sqlite3_result_int64(context, iVal);-
160 break;
executed 5279 times by 1 test: break;
Executed by:
  • Self test (438)
5279
161 }-
162 case SQLITE_NULL: {
executed 19 times by 1 test: case 5:
Executed by:
  • Self test (438)
19
163 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */-
164 sqlite3_result_null(context);-
165 break;
executed 19 times by 1 test: break;
Executed by:
  • Self test (438)
19
166 }-
167 default: {
executed 17 times by 1 test: default:
Executed by:
  • Self test (438)
17
168 /* Because sqlite3_value_double() returns 0.0 if the argument is not-
169 ** something that can be converted into a number, we have:-
170 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob-
171 ** that cannot be converted to a numeric value.-
172 */-
173 double rVal = sqlite3_value_double(argv[0]);-
174 if( rVal<0 ) rVal = -rVal;
executed 2 times by 1 test: rVal = -rVal;
Executed by:
  • Self test (438)
rVal<0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
2-15
175 sqlite3_result_double(context, rVal);-
176 break;
executed 17 times by 1 test: break;
Executed by:
  • Self test (438)
17
177 }-
178 }-
179}-
180-
181/*-
182** Implementation of the instr() function.-
183**-
184** instr(haystack,needle) finds the first occurrence of needle-
185** in haystack and returns the number of previous characters plus 1,-
186** or 0 if needle does not occur within haystack.-
187**-
188** If both haystack and needle are BLOBs, then the result is one more than-
189** the number of bytes in haystack prior to the first occurrence of needle,-
190** or 0 if needle never occurs in haystack.-
191*/-
192static void instrFunc(-
193 sqlite3_context *context,-
194 int argc,-
195 sqlite3_value **argv-
196){-
197 const unsigned char *zHaystack;-
198 const unsigned char *zNeedle;-
199 int nHaystack;-
200 int nNeedle;-
201 int typeHaystack, typeNeedle;-
202 int N = 1;-
203 int isText;-
204-
205 UNUSED_PARAMETER(argc);-
206 typeHaystack = sqlite3_value_type(argv[0]);-
207 typeNeedle = sqlite3_value_type(argv[1]);-
208 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
executed 5 times by 1 test: return;
Executed by:
  • Self test (438)
typeHaystack==5Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4705 times by 1 test
Evaluated by:
  • Self test (438)
typeNeedle==5Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4703 times by 1 test
Evaluated by:
  • Self test (438)
2-4705
209 nHaystack = sqlite3_value_bytes(argv[0]);-
210 nNeedle = sqlite3_value_bytes(argv[1]);-
211 if( nNeedle>0 ){
nNeedle>0Description
TRUEevaluated 4699 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-4699
212 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
typeHaystack==4Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4679 times by 1 test
Evaluated by:
  • Self test (438)
typeNeedle==4Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-4679
213 zHaystack = sqlite3_value_blob(argv[0]);-
214 zNeedle = sqlite3_value_blob(argv[1]);-
215 isText = 0;-
216 }else{
executed 15 times by 1 test: end of block
Executed by:
  • Self test (438)
15
217 zHaystack = sqlite3_value_text(argv[0]);-
218 zNeedle = sqlite3_value_text(argv[1]);-
219 isText = 1;-
220 }
executed 4684 times by 1 test: end of block
Executed by:
  • Self test (438)
4684
221 if( zNeedle==0 || (nHaystack && zHaystack==0) ) return;
never executed: return;
zNeedle==0Description
TRUEnever evaluated
FALSEevaluated 4699 times by 1 test
Evaluated by:
  • Self test (438)
nHaystackDescription
TRUEevaluated 4697 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
zHaystack==0Description
TRUEnever evaluated
FALSEevaluated 4697 times by 1 test
Evaluated by:
  • Self test (438)
0-4699
222 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
nNeedle<=nHaystackDescription
TRUEevaluated 1006645 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
memcmp(zHaysta...e, nNeedle)!=0Description
TRUEevaluated 1001967 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4678 times by 1 test
Evaluated by:
  • Self test (438)
21-1006645
223 N++;-
224 do{-
225 nHaystack--;-
226 zHaystack++;-
227 }while( isText && (zHaystack[0]&0xc0)==0x80 );
executed 1018369 times by 1 test: end of block
Executed by:
  • Self test (438)
isTextDescription
TRUEevaluated 1018329 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
(zHaystack[0]&0xc0)==0x80Description
TRUEevaluated 16402 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1001927 times by 1 test
Evaluated by:
  • Self test (438)
40-1018369
228 }
executed 1001967 times by 1 test: end of block
Executed by:
  • Self test (438)
1001967
229 if( nNeedle>nHaystack ) N = 0;
executed 21 times by 1 test: N = 0;
Executed by:
  • Self test (438)
nNeedle>nHaystackDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4678 times by 1 test
Evaluated by:
  • Self test (438)
21-4678
230 }
executed 4699 times by 1 test: end of block
Executed by:
  • Self test (438)
4699
231 sqlite3_result_int(context, N);-
232}
executed 4703 times by 1 test: end of block
Executed by:
  • Self test (438)
4703
233-
234/*-
235** Implementation of the printf() function.-
236*/-
237static void printfFunc(-
238 sqlite3_context *context,-
239 int argc,-
240 sqlite3_value **argv-
241){-
242 PrintfArguments x;-
243 StrAccum str;-
244 const char *zFormat;-
245 int n;-
246 sqlite3 *db = sqlite3_context_db_handle(context);-
247-
248 if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
argc>=1Description
TRUEevaluated 12013 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
(zFormat = (co...t(argv[0]))!=0Description
TRUEevaluated 12012 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-12013
249 x.nArg = argc-1;-
250 x.nUsed = 0;-
251 x.apArg = argv+1;-
252 sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]);-
253 str.printfFlags = SQLITE_PRINTF_SQLFUNC;-
254 sqlite3_str_appendf(&str, zFormat, &x);-
255 n = str.nChar;-
256 sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,-
257 SQLITE_DYNAMIC);-
258 }
executed 12012 times by 1 test: end of block
Executed by:
  • Self test (438)
12012
259}
executed 12014 times by 1 test: end of block
Executed by:
  • Self test (438)
12014
260-
261/*-
262** Implementation of the substr() function.-
263**-
264** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.-
265** p1 is 1-indexed. So substr(x,1,1) returns the first character-
266** of x. If x is text, then we actually count UTF-8 characters.-
267** If x is a blob, then we count bytes.-
268**-
269** If p1 is negative, then we begin abs(p1) from the end of x[].-
270**-
271** If p2 is negative, return the p2 characters preceding p1.-
272*/-
273static void substrFunc(-
274 sqlite3_context *context,-
275 int argc,-
276 sqlite3_value **argv-
277){-
278 const unsigned char *z;-
279 const unsigned char *z2;-
280 int len;-
281 int p0type;-
282 i64 p1, p2;-
283 int negP2 = 0;-
284-
285 assert( argc==3 || argc==2 );-
286 if( sqlite3_value_type(argv[1])==SQLITE_NULL
sqlite3_value_type(argv[1])==5Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433356 times by 1 test
Evaluated by:
  • Self test (438)
2-433356
287 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
argc==3Description
TRUEevaluated 423686 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9670 times by 1 test
Evaluated by:
  • Self test (438)
sqlite3_value_type(argv[2])==5Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 423685 times by 1 test
Evaluated by:
  • Self test (438)
1-423686
288 ){-
289 return;
executed 3 times by 1 test: return;
Executed by:
  • Self test (438)
3
290 }-
291 p0type = sqlite3_value_type(argv[0]);-
292 p1 = sqlite3_value_int(argv[1]);-
293 if( p0type==SQLITE_BLOB ){
p0type==4Description
TRUEevaluated 79 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433276 times by 1 test
Evaluated by:
  • Self test (438)
79-433276
294 len = sqlite3_value_bytes(argv[0]);-
295 z = sqlite3_value_blob(argv[0]);-
296 if( z==0 ) return;
never executed: return;
z==0Description
TRUEnever evaluated
FALSEevaluated 79 times by 1 test
Evaluated by:
  • Self test (438)
0-79
297 assert( len==sqlite3_value_bytes(argv[0]) );-
298 }else{
executed 79 times by 1 test: end of block
Executed by:
  • Self test (438)
79
299 z = sqlite3_value_text(argv[0]);-
300 if( z==0 ) return;
executed 6 times by 1 test: return;
Executed by:
  • Self test (438)
z==0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433270 times by 1 test
Evaluated by:
  • Self test (438)
6-433270
301 len = 0;-
302 if( p1<0 ){
p1<0Description
TRUEevaluated 165 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433105 times by 1 test
Evaluated by:
  • Self test (438)
165-433105
303 for(z2=z; *z2; len++){
*z2Description
TRUEevaluated 23024 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 165 times by 1 test
Evaluated by:
  • Self test (438)
165-23024
304 SQLITE_SKIP_UTF8(z2);
executed 50 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 25 times by 1 test: end of block
Executed by:
  • Self test (438)
(*(z2++))>=0xc0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22999 times by 1 test
Evaluated by:
  • Self test (438)
(*z2 & 0xc0)==0x80Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
25-22999
305 }
executed 23024 times by 1 test: end of block
Executed by:
  • Self test (438)
23024
306 }
executed 165 times by 1 test: end of block
Executed by:
  • Self test (438)
165
307 }
executed 433270 times by 1 test: end of block
Executed by:
  • Self test (438)
433270
308#ifdef SQLITE_SUBSTR_COMPATIBILITY-
309 /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as-
310 ** as substr(X,1,N) - it returns the first N characters of X. This-
311 ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]-
312 ** from 2009-02-02 for compatibility of applications that exploited the-
313 ** old buggy behavior. */-
314 if( p1==0 ) p1 = 1; /* <rdar://problem/6778339> */-
315#endif-
316 if( argc==3 ){
argc==3Description
TRUEevaluated 423680 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9669 times by 1 test
Evaluated by:
  • Self test (438)
9669-423680
317 p2 = sqlite3_value_int(argv[2]);-
318 if( p2<0 ){
p2<0Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 423644 times by 1 test
Evaluated by:
  • Self test (438)
36-423644
319 p2 = -p2;-
320 negP2 = 1;-
321 }
executed 36 times by 1 test: end of block
Executed by:
  • Self test (438)
36
322 }else{
executed 423680 times by 1 test: end of block
Executed by:
  • Self test (438)
423680
323 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];-
324 }
executed 9669 times by 1 test: end of block
Executed by:
  • Self test (438)
9669
325 if( p1<0 ){
p1<0Description
TRUEevaluated 196 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433153 times by 1 test
Evaluated by:
  • Self test (438)
196-433153
326 p1 += len;-
327 if( p1<0 ){
p1<0Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 181 times by 1 test
Evaluated by:
  • Self test (438)
15-181
328 p2 += p1;-
329 if( p2<0 ) p2 = 0;
executed 2 times by 1 test: p2 = 0;
Executed by:
  • Self test (438)
p2<0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
2-13
330 p1 = 0;-
331 }
executed 15 times by 1 test: end of block
Executed by:
  • Self test (438)
15
332 }else if( p1>0 ){
executed 196 times by 1 test: end of block
Executed by:
  • Self test (438)
p1>0Description
TRUEevaluated 433123 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
30-433123
333 p1--;-
334 }else if( p2>0 ){
executed 433123 times by 1 test: end of block
Executed by:
  • Self test (438)
p2>0Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-433123
335 p2--;-
336 }
executed 26 times by 1 test: end of block
Executed by:
  • Self test (438)
26
337 if( negP2 ){
negP2Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433313 times by 1 test
Evaluated by:
  • Self test (438)
36-433313
338 p1 -= p2;-
339 if( p1<0 ){
p1<0Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
14-22
340 p2 += p1;-
341 p1 = 0;-
342 }
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
343 }
executed 36 times by 1 test: end of block
Executed by:
  • Self test (438)
36
344 assert( p1>=0 && p2>=0 );-
345 if( p0type!=SQLITE_BLOB ){
p0type!=4Description
TRUEevaluated 433270 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 79 times by 1 test
Evaluated by:
  • Self test (438)
79-433270
346 while( *z && p1 ){
*zDescription
TRUEevaluated 12799701 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
p1Description
TRUEevaluated 12366447 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433254 times by 1 test
Evaluated by:
  • Self test (438)
16-12799701
347 SQLITE_SKIP_UTF8(z);
executed 36 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 22 times by 1 test: end of block
Executed by:
  • Self test (438)
(*(z++))>=0xc0Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12366425 times by 1 test
Evaluated by:
  • Self test (438)
(*z & 0xc0)==0x80Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
22-12366425
348 p1--;-
349 }
executed 12366447 times by 1 test: end of block
Executed by:
  • Self test (438)
12366447
350 for(z2=z; *z2 && p2; p2--){
*z2Description
TRUEevaluated 1702127 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10320 times by 1 test
Evaluated by:
  • Self test (438)
p2Description
TRUEevaluated 1279177 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 422950 times by 1 test
Evaluated by:
  • Self test (438)
10320-1702127
351 SQLITE_SKIP_UTF8(z2);
executed 78 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 41 times by 1 test: end of block
Executed by:
  • Self test (438)
(*(z2++))>=0xc0Description
TRUEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1279136 times by 1 test
Evaluated by:
  • Self test (438)
(*z2 & 0xc0)==0x80Description
TRUEevaluated 78 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
41-1279136
352 }
executed 1279177 times by 1 test: end of block
Executed by:
  • Self test (438)
1279177
353 sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,-
354 SQLITE_UTF8);-
355 }else{
executed 433270 times by 1 test: end of block
Executed by:
  • Self test (438)
433270
356 if( p1+p2>len ){
p1+p2>lenDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 67 times by 1 test
Evaluated by:
  • Self test (438)
12-67
357 p2 = len-p1;-
358 if( p2<0 ) p2 = 0;
executed 4 times by 1 test: p2 = 0;
Executed by:
  • Self test (438)
p2<0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
4-8
359 }
executed 12 times by 1 test: end of block
Executed by:
  • Self test (438)
12
360 sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);-
361 }
executed 79 times by 1 test: end of block
Executed by:
  • Self test (438)
79
362}-
363-
364/*-
365** Implementation of the round() function-
366*/-
367#ifndef SQLITE_OMIT_FLOATING_POINT-
368static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){-
369 int n = 0;-
370 double r;-
371 char *zBuf;-
372 assert( argc==1 || argc==2 );-
373 if( argc==2 ){
argc==2Description
TRUEevaluated 1129 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5297 times by 1 test
Evaluated by:
  • Self test (438)
1129-5297
374 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
never executed: return;
5==sqlite3_value_type(argv[1])Description
TRUEnever evaluated
FALSEevaluated 1129 times by 1 test
Evaluated by:
  • Self test (438)
0-1129
375 n = sqlite3_value_int(argv[1]);-
376 if( n>30 ) n = 30;
executed 3 times by 1 test: n = 30;
Executed by:
  • Self test (438)
n>30Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1126 times by 1 test
Evaluated by:
  • Self test (438)
3-1126
377 if( n<0 ) n = 0;
never executed: n = 0;
n<0Description
TRUEnever evaluated
FALSEevaluated 1129 times by 1 test
Evaluated by:
  • Self test (438)
0-1129
378 }
executed 1129 times by 1 test: end of block
Executed by:
  • Self test (438)
1129
379 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
executed 4 times by 1 test: return;
Executed by:
  • Self test (438)
sqlite3_value_type(argv[0])==5Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6422 times by 1 test
Evaluated by:
  • Self test (438)
4-6422
380 r = sqlite3_value_double(argv[0]);-
381 /* If Y==0 and X will fit in a 64-bit int,-
382 ** handle the rounding directly,-
383 ** otherwise use printf.-
384 */-
385 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
n==0Description
TRUEevaluated 5298 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1124 times by 1 test
Evaluated by:
  • Self test (438)
r>=0Description
TRUEevaluated 5295 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
r<(0xffffffff|...fffff)<<32))-1Description
TRUEevaluated 5295 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-5298
386 r = (double)((sqlite_int64)(r+0.5));-
387 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
executed 5295 times by 1 test: end of block
Executed by:
  • Self test (438)
n==0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1124 times by 1 test
Evaluated by:
  • Self test (438)
r<0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
(-r)<(0xffffff...fffff)<<32))-1Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-5295
388 r = -(double)((sqlite_int64)((-r)+0.5));-
389 }else{
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
390 zBuf = sqlite3_mprintf("%.*f",n,r);-
391 if( zBuf==0 ){
zBuf==0Description
TRUEnever evaluated
FALSEevaluated 1124 times by 1 test
Evaluated by:
  • Self test (438)
0-1124
392 sqlite3_result_error_nomem(context);-
393 return;
never executed: return;
0
394 }-
395 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);-
396 sqlite3_free(zBuf);-
397 }
executed 1124 times by 1 test: end of block
Executed by:
  • Self test (438)
1124
398 sqlite3_result_double(context, r);-
399}
executed 6422 times by 1 test: end of block
Executed by:
  • Self test (438)
6422
400#endif-
401-
402/*-
403** Allocate nByte bytes of space using sqlite3Malloc(). If the-
404** allocation fails, call sqlite3_result_error_nomem() to notify-
405** the database handle that malloc() has failed and return NULL.-
406** If nByte is larger than the maximum string or blob length, then-
407** raise an SQLITE_TOOBIG exception and return NULL.-
408*/-
409static void *contextMalloc(sqlite3_context *context, i64 nByte){-
410 char *z;-
411 sqlite3 *db = sqlite3_context_db_handle(context);-
412 assert( nByte>0 );-
413 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );-
414 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );-
415 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
nByte>db->aLimit[0]Description
TRUEnever evaluated
FALSEevaluated 1321545 times by 364 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
0-1321545
416 sqlite3_result_error_toobig(context);-
417 z = 0;-
418 }else{
never executed: end of block
0
419 z = sqlite3Malloc(nByte);-
420 if( !z ){
!zDescription
TRUEnever evaluated
FALSEevaluated 1321545 times by 364 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
0-1321545
421 sqlite3_result_error_nomem(context);-
422 }
never executed: end of block
0
423 }
executed 1321545 times by 364 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
1321545
424 return z;
executed 1321545 times by 364 tests: return z;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
1321545
425}-
426-
427/*-
428** Implementation of the upper() and lower() SQL functions.-
429*/-
430static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){-
431 char *z1;-
432 const char *z2;-
433 int i, n;-
434 UNUSED_PARAMETER(argc);-
435 z2 = (char*)sqlite3_value_text(argv[0]);-
436 n = sqlite3_value_bytes(argv[0]);-
437 /* Verify that the call to _bytes() does not invalidate the _text() pointer */-
438 assert( z2==(char*)sqlite3_value_text(argv[0]) );-
439 if( z2 ){
z2Description
TRUEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-45
440 z1 = contextMalloc(context, ((i64)n)+1);-
441 if( z1 ){
z1Description
TRUEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-45
442 for(i=0; i<n; i++){
i<nDescription
TRUEevaluated 136 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
45-136
443 z1[i] = (char)sqlite3Toupper(z2[i]);-
444 }
executed 136 times by 1 test: end of block
Executed by:
  • Self test (438)
136
445 sqlite3_result_text(context, z1, n, sqlite3_free);-
446 }
executed 45 times by 1 test: end of block
Executed by:
  • Self test (438)
45
447 }
executed 45 times by 1 test: end of block
Executed by:
  • Self test (438)
45
448}
executed 49 times by 1 test: end of block
Executed by:
  • Self test (438)
49
449static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){-
450 char *z1;-
451 const char *z2;-
452 int i, n;-
453 UNUSED_PARAMETER(argc);-
454 z2 = (char*)sqlite3_value_text(argv[0]);-
455 n = sqlite3_value_bytes(argv[0]);-
456 /* Verify that the call to _bytes() does not invalidate the _text() pointer */-
457 assert( z2==(char*)sqlite3_value_text(argv[0]) );-
458 if( z2 ){
z2Description
TRUEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
11-69
459 z1 = contextMalloc(context, ((i64)n)+1);-
460 if( z1 ){
z1Description
TRUEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-69
461 for(i=0; i<n; i++){
i<nDescription
TRUEevaluated 227 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
69-227
462 z1[i] = sqlite3Tolower(z2[i]);-
463 }
executed 227 times by 1 test: end of block
Executed by:
  • Self test (438)
227
464 sqlite3_result_text(context, z1, n, sqlite3_free);-
465 }
executed 69 times by 1 test: end of block
Executed by:
  • Self test (438)
69
466 }
executed 69 times by 1 test: end of block
Executed by:
  • Self test (438)
69
467}
executed 80 times by 1 test: end of block
Executed by:
  • Self test (438)
80
468-
469/*-
470** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented-
471** as VDBE code so that unused argument values do not have to be computed.-
472** However, we still need some kind of function implementation for this-
473** routines in the function table. The noopFunc macro provides this.-
474** noopFunc will never be called so it doesn't matter what the implementation-
475** is. We might as well use the "version()" function as a substitute.-
476*/-
477#define noopFunc versionFunc /* Substitute function - never called */-
478-
479/*-
480** Implementation of random(). Return a random integer. -
481*/-
482static void randomFunc(-
483 sqlite3_context *context,-
484 int NotUsed,-
485 sqlite3_value **NotUsed2-
486){-
487 sqlite_int64 r;-
488 UNUSED_PARAMETER2(NotUsed, NotUsed2);-
489 sqlite3_randomness(sizeof(r), &r);-
490 if( r<0 ){
r<0Description
TRUEevaluated 361308 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 361765 times by 1 test
Evaluated by:
  • Self test (438)
361308-361765
491 /* We need to prevent a random number of 0x8000000000000000 -
492 ** (or -9223372036854775808) since when you do abs() of that-
493 ** number of you get the same value back again. To do this-
494 ** in a way that is testable, mask the sign bit off of negative-
495 ** values, resulting in a positive value. Then take the -
496 ** 2s complement of that positive value. The end result can-
497 ** therefore be no less than -9223372036854775807.-
498 */-
499 r = -(r & LARGEST_INT64);-
500 }
executed 361308 times by 1 test: end of block
Executed by:
  • Self test (438)
361308
501 sqlite3_result_int64(context, r);-
502}
executed 723073 times by 1 test: end of block
Executed by:
  • Self test (438)
723073
503-
504/*-
505** Implementation of randomblob(N). Return a random blob-
506** that is N bytes long.-
507*/-
508static void randomBlob(-
509 sqlite3_context *context,-
510 int argc,-
511 sqlite3_value **argv-
512){-
513 int n;-
514 unsigned char *p;-
515 assert( argc==1 );-
516 UNUSED_PARAMETER(argc);-
517 n = sqlite3_value_int(argv[0]);-
518 if( n<1 ){
n<1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1282287 times by 363 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
1-1282287
519 n = 1;-
520 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
521 p = contextMalloc(context, n);-
522 if( p ){
pDescription
TRUEevaluated 1282288 times by 363 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEnever evaluated
0-1282288
523 sqlite3_randomness(n, p);-
524 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);-
525 }
executed 1282288 times by 363 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
1282288
526}
executed 1282288 times by 363 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
1282288
527-
528/*-
529** Implementation of the last_insert_rowid() SQL function. The return-
530** value is the same as the sqlite3_last_insert_rowid() API function.-
531*/-
532static void last_insert_rowid(-
533 sqlite3_context *context, -
534 int NotUsed, -
535 sqlite3_value **NotUsed2-
536){-
537 sqlite3 *db = sqlite3_context_db_handle(context);-
538 UNUSED_PARAMETER2(NotUsed, NotUsed2);-
539 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a-
540 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface-
541 ** function. */-
542 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));-
543}
executed 49 times by 1 test: end of block
Executed by:
  • Self test (438)
49
544-
545/*-
546** Implementation of the changes() SQL function.-
547**-
548** IMP: R-62073-11209 The changes() SQL function is a wrapper-
549** around the sqlite3_changes() C/C++ function and hence follows the same-
550** rules for counting changes.-
551*/-
552static void changes(-
553 sqlite3_context *context,-
554 int NotUsed,-
555 sqlite3_value **NotUsed2-
556){-
557 sqlite3 *db = sqlite3_context_db_handle(context);-
558 UNUSED_PARAMETER2(NotUsed, NotUsed2);-
559 sqlite3_result_int(context, sqlite3_changes(db));-
560}
executed 66 times by 1 test: end of block
Executed by:
  • Self test (438)
66
561-
562/*-
563** Implementation of the total_changes() SQL function. The return value is-
564** the same as the sqlite3_total_changes() API function.-
565*/-
566static void total_changes(-
567 sqlite3_context *context,-
568 int NotUsed,-
569 sqlite3_value **NotUsed2-
570){-
571 sqlite3 *db = sqlite3_context_db_handle(context);-
572 UNUSED_PARAMETER2(NotUsed, NotUsed2);-
573 /* IMP: R-52756-41993 This function is a wrapper around the-
574 ** sqlite3_total_changes() C/C++ interface. */-
575 sqlite3_result_int(context, sqlite3_total_changes(db));-
576}
executed 5 times by 1 test: end of block
Executed by:
  • Self test (438)
5
577-
578/*-
579** A structure defining how to do GLOB-style comparisons.-
580*/-
581struct compareInfo {-
582 u8 matchAll; /* "*" or "%" */-
583 u8 matchOne; /* "?" or "_" */-
584 u8 matchSet; /* "[" or 0 */-
585 u8 noCase; /* true to ignore case differences */-
586};-
587-
588/*-
589** For LIKE and GLOB matching on EBCDIC machines, assume that every-
590** character is exactly one byte in size. Also, provde the Utf8Read()-
591** macro for fast reading of the next character in the common case where-
592** the next character is ASCII.-
593*/-
594#if defined(SQLITE_EBCDIC)-
595# define sqlite3Utf8Read(A) (*((*A)++))-
596# define Utf8Read(A) (*(A++))-
597#else-
598# define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A))-
599#endif-
600-
601static const struct compareInfo globInfo = { '*', '?', '[', 0 };-
602/* The correct SQL-92 behavior is for the LIKE operator to ignore-
603** case. Thus 'a' LIKE 'A' would be true. */-
604static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };-
605/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator-
606** is case sensitive causing 'a' LIKE 'A' to be false */-
607static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };-
608-
609/*-
610** Possible error returns from patternMatch()-
611*/-
612#define SQLITE_MATCH 0-
613#define SQLITE_NOMATCH 1-
614#define SQLITE_NOWILDCARDMATCH 2-
615-
616/*-
617** Compare two UTF-8 strings for equality where the first string is-
618** a GLOB or LIKE expression. Return values:-
619**-
620** SQLITE_MATCH: Match-
621** SQLITE_NOMATCH: No match-
622** SQLITE_NOWILDCARDMATCH: No match in spite of having * or % wildcards.-
623**-
624** Globbing rules:-
625**-
626** '*' Matches any sequence of zero or more characters.-
627**-
628** '?' Matches exactly one character.-
629**-
630** [...] Matches one character from the enclosed list of-
631** characters.-
632**-
633** [^...] Matches one character not in the enclosed list.-
634**-
635** With the [...] and [^...] matching, a ']' character can be included-
636** in the list by making it the first character after '[' or '^'. A-
637** range of characters can be specified using '-'. Example:-
638** "[a-z]" matches any single lower-case letter. To match a '-', make-
639** it the last character in the list.-
640**-
641** Like matching rules:-
642** -
643** '%' Matches any sequence of zero or more characters-
644**-
645*** '_' Matches any one character-
646**-
647** Ec Where E is the "esc" character and c is any other-
648** character, including '%', '_', and esc, match exactly c.-
649**-
650** The comments within this routine usually assume glob matching.-
651**-
652** This routine is usually quick, but can be N**2 in the worst case.-
653*/-
654static int patternCompare(-
655 const u8 *zPattern, /* The glob pattern */-
656 const u8 *zString, /* The string to compare against the glob */-
657 const struct compareInfo *pInfo, /* Information about how to do the compare */-
658 u32 matchOther /* The escape char (LIKE) or '[' (GLOB) */-
659){-
660 u32 c, c2; /* Next pattern and input string chars */-
661 u32 matchOne = pInfo->matchOne; /* "?" or "_" */-
662 u32 matchAll = pInfo->matchAll; /* "*" or "%" */-
663 u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */-
664 const u8 *zEscaped = 0; /* One past the last escaped input char */-
665 -
666 while( (c = Utf8Read(zPattern))!=0 ){
(c = (zPattern...zPattern)))!=0Description
TRUEevaluated 64310 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1944 times by 1 test
Evaluated by:
  • Self test (438)
zPattern[0]<0x80Description
TRUEevaluated 66166 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 88 times by 1 test
Evaluated by:
  • Self test (438)
88-66166
667 if( c==matchAll ){ /* Match "*" */
c==matchAllDescription
TRUEevaluated 4344 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 59966 times by 1 test
Evaluated by:
  • Self test (438)
4344-59966
668 /* Skip over multiple "*" characters in the pattern. If there-
669 ** are also "?" characters, skip those as well, but consume a-
670 ** single character of the input string for each "?" skipped */-
671 while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
zPattern[0]<0x80Description
TRUEevaluated 4342 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
(c=(zPattern[0...)) == matchAllDescription
TRUEnever evaluated
FALSEevaluated 4354 times by 1 test
Evaluated by:
  • Self test (438)
c == matchOneDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4343 times by 1 test
Evaluated by:
  • Self test (438)
0-4354
672 if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
c==matchOneDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
sqlite3Utf8Read(&zString)==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
0-11
673 return SQLITE_NOWILDCARDMATCH;
executed 1 time by 1 test: return 2;
Executed by:
  • Self test (438)
1
674 }-
675 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test (438)
10
676 if( c==0 ){
c==0Description
TRUEevaluated 3823 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 520 times by 1 test
Evaluated by:
  • Self test (438)
520-3823
677 return SQLITE_MATCH; /* "*" at the end of the pattern matches */
executed 3823 times by 1 test: return 0;
Executed by:
  • Self test (438)
3823
678 }else if( c==matchOther ){
c==matchOtherDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 499 times by 1 test
Evaluated by:
  • Self test (438)
21-499
679 if( pInfo->matchSet==0 ){
pInfo->matchSet==0Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-13
680 c = sqlite3Utf8Read(&zPattern);-
681 if( c==0 ) return SQLITE_NOWILDCARDMATCH;
executed 1 time by 1 test: return 2;
Executed by:
  • Self test (438)
c==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
1-12
682 }else{
executed 12 times by 1 test: end of block
Executed by:
  • Self test (438)
12
683 /* "[...]" immediately follows the "*". We have to do a slow-
684 ** recursive search in this case, but it is an unusual case. */-
685 assert( matchOther<0x80 ); /* '[' is a single-byte character */-
686 while( *zString ){
*zStringDescription
TRUEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-44
687 int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther);-
688 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
executed 4 times by 1 test: return bMatch;
Executed by:
  • Self test (438)
bMatch!=1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
4-40
689 SQLITE_SKIP_UTF8(zString);
never executed: end of block
never executed: end of block
(*(zString++))>=0xc0Description
TRUEnever evaluated
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
(*zString & 0xc0)==0x80Description
TRUEnever evaluated
FALSEnever evaluated
0-40
690 }
executed 40 times by 1 test: end of block
Executed by:
  • Self test (438)
40
691 return SQLITE_NOWILDCARDMATCH;
executed 4 times by 1 test: return 2;
Executed by:
  • Self test (438)
4
692 }-
693 }-
694-
695 /* At this point variable c contains the first character of the-
696 ** pattern string past the "*". Search in the input string for the-
697 ** first matching character and recursively continue the match from-
698 ** that point.-
699 **-
700 ** For a case-insensitive search, set variable cx to be the same as-
701 ** c but in the other case and search the input string for either-
702 ** c or cx.-
703 */-
704 if( c<=0x80 ){
c<=0x80Description
TRUEevaluated 503 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-503
705 char zStop[3];-
706 int bMatch;-
707 if( noCase ){
noCaseDescription
TRUEevaluated 124 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 379 times by 1 test
Evaluated by:
  • Self test (438)
124-379
708 zStop[0] = sqlite3Toupper(c);-
709 zStop[1] = sqlite3Tolower(c);-
710 zStop[2] = 0;-
711 }else{
executed 124 times by 1 test: end of block
Executed by:
  • Self test (438)
124
712 zStop[0] = c;-
713 zStop[1] = 0;-
714 }
executed 379 times by 1 test: end of block
Executed by:
  • Self test (438)
379
715 while(1){-
716 zString += strcspn((const char*)zString, zStop);-
717 if( zString[0]==0 ) break;
executed 406 times by 1 test: break;
Executed by:
  • Self test (438)
zString[0]==0Description
TRUEevaluated 406 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 209 times by 1 test
Evaluated by:
  • Self test (438)
209-406
718 zString++;-
719 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);-
720 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
executed 97 times by 1 test: return bMatch;
Executed by:
  • Self test (438)
bMatch!=1Description
TRUEevaluated 97 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 112 times by 1 test
Evaluated by:
  • Self test (438)
97-112
721 }
executed 112 times by 1 test: end of block
Executed by:
  • Self test (438)
112
722 }else{
executed 406 times by 1 test: end of block
Executed by:
  • Self test (438)
406
723 int bMatch;-
724 while( (c2 = Utf8Read(zString))!=0 ){
(c2 = (zString...&zString)))!=0Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
zString[0]<0x80Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
0-24
725 if( c2!=c ) continue;
executed 13 times by 1 test: continue;
Executed by:
  • Self test (438)
c2!=cDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
11-13
726 bMatch = patternCompare(zPattern,zString,pInfo,matchOther);-
727 if( bMatch!=SQLITE_NOMATCH ) return bMatch;
executed 8 times by 1 test: return bMatch;
Executed by:
  • Self test (438)
bMatch!=1Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
3-8
728 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
729 }
never executed: end of block
0
730 return SQLITE_NOWILDCARDMATCH;
executed 406 times by 1 test: return 2;
Executed by:
  • Self test (438)
406
731 }-
732 if( c==matchOther ){
c==matchOtherDescription
TRUEevaluated 382 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 59584 times by 1 test
Evaluated by:
  • Self test (438)
382-59584
733 if( pInfo->matchSet==0 ){
pInfo->matchSet==0Description
TRUEevaluated 272 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 110 times by 1 test
Evaluated by:
  • Self test (438)
110-272
734 c = sqlite3Utf8Read(&zPattern);-
735 if( c==0 ) return SQLITE_NOMATCH;
executed 3 times by 1 test: return 1;
Executed by:
  • Self test (438)
c==0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 269 times by 1 test
Evaluated by:
  • Self test (438)
3-269
736 zEscaped = zPattern;-
737 }else{
executed 269 times by 1 test: end of block
Executed by:
  • Self test (438)
269
738 u32 prior_c = 0;-
739 int seen = 0;-
740 int invert = 0;-
741 c = sqlite3Utf8Read(&zString);-
742 if( c==0 ) return SQLITE_NOMATCH;
executed 1 time by 1 test: return 1;
Executed by:
  • Self test (438)
c==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 109 times by 1 test
Evaluated by:
  • Self test (438)
1-109
743 c2 = sqlite3Utf8Read(&zPattern);-
744 if( c2=='^' ){
c2=='^'Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 85 times by 1 test
Evaluated by:
  • Self test (438)
24-85
745 invert = 1;-
746 c2 = sqlite3Utf8Read(&zPattern);-
747 }
executed 24 times by 1 test: end of block
Executed by:
  • Self test (438)
24
748 if( c2==']' ){
c2==']'Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 102 times by 1 test
Evaluated by:
  • Self test (438)
7-102
749 if( c==']' ) seen = 1;
executed 2 times by 1 test: seen = 1;
Executed by:
  • Self test (438)
c==']'Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
2-5
750 c2 = sqlite3Utf8Read(&zPattern);-
751 }
executed 7 times by 1 test: end of block
Executed by:
  • Self test (438)
7
752 while( c2 && c2!=']' ){
c2Description
TRUEevaluated 348 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
c2!=']'Description
TRUEevaluated 239 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 109 times by 1 test
Evaluated by:
  • Self test (438)
0-348
753 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
c2=='-'Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 203 times by 1 test
Evaluated by:
  • Self test (438)
zPattern[0]!=']'Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
zPattern[0]!=0Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
prior_c>0Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-203
754 c2 = sqlite3Utf8Read(&zPattern);-
755 if( c>=prior_c && c<=c2 ) seen = 1;
executed 26 times by 1 test: seen = 1;
Executed by:
  • Self test (438)
c>=prior_cDescription
TRUEevaluated 31 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
c<=c2Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-31
756 prior_c = 0;-
757 }else{
executed 36 times by 1 test: end of block
Executed by:
  • Self test (438)
36
758 if( c==c2 ){
c==c2Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 166 times by 1 test
Evaluated by:
  • Self test (438)
37-166
759 seen = 1;-
760 }
executed 37 times by 1 test: end of block
Executed by:
  • Self test (438)
37
761 prior_c = c2;-
762 }
executed 203 times by 1 test: end of block
Executed by:
  • Self test (438)
203
763 c2 = sqlite3Utf8Read(&zPattern);-
764 }
executed 239 times by 1 test: end of block
Executed by:
  • Self test (438)
239
765 if( c2==0 || (seen ^ invert)==0 ){
c2==0Description
TRUEnever evaluated
FALSEevaluated 109 times by 1 test
Evaluated by:
  • Self test (438)
(seen ^ invert)==0Description
TRUEevaluated 47 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 62 times by 1 test
Evaluated by:
  • Self test (438)
0-109
766 return SQLITE_NOMATCH;
executed 47 times by 1 test: return 1;
Executed by:
  • Self test (438)
47
767 }-
768 continue;
executed 62 times by 1 test: continue;
Executed by:
  • Self test (438)
62
769 }-
770 }-
771 c2 = Utf8Read(zString);
zString[0]<0x80Description
TRUEevaluated 59799 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 54 times by 1 test
Evaluated by:
  • Self test (438)
54-59799
772 if( c==c2 ) continue;
executed 25102 times by 1 test: continue;
Executed by:
  • Self test (438)
c==c2Description
TRUEevaluated 25102 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 34751 times by 1 test
Evaluated by:
  • Self test (438)
25102-34751
773 if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){
noCaseDescription
TRUEevaluated 26651 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8100 times by 1 test
Evaluated by:
  • Self test (438)
(sqlite3UpperT...ed char)(c2)])Description
TRUEevaluated 5510 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21141 times by 1 test
Evaluated by:
  • Self test (438)
c<0x80Description
TRUEevaluated 5508 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
c2<0x80Description
TRUEevaluated 5507 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-26651
774 continue;
executed 5507 times by 1 test: continue;
Executed by:
  • Self test (438)
5507
775 }-
776 if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
executed 2057 times by 1 test: continue;
Executed by:
  • Self test (438)
c==matchOneDescription
TRUEevaluated 2087 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 27157 times by 1 test
Evaluated by:
  • Self test (438)
zPattern!=zEscapedDescription
TRUEevaluated 2070 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
c2!=0Description
TRUEevaluated 2057 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-27157
777 return SQLITE_NOMATCH;
executed 27187 times by 1 test: return 1;
Executed by:
  • Self test (438)
27187
778 }-
779 return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH;
executed 1944 times by 1 test: return *zString==0 ? 0 : 1;
Executed by:
  • Self test (438)
*zString==0Description
TRUEevaluated 1796 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 148 times by 1 test
Evaluated by:
  • Self test (438)
148-1944
780}-
781-
782/*-
783** The sqlite3_strglob() interface. Return 0 on a match (like strcmp()) and-
784** non-zero if there is no match.-
785*/-
786int sqlite3_strglob(const char *zGlobPattern, const char *zString){-
787 return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
executed 133 times by 1 test: return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '[');
Executed by:
  • Self test (438)
133
788}-
789-
790/*-
791** The sqlite3_strlike() interface. Return 0 on a match and non-zero for-
792** a miss - like strcmp().-
793*/-
794int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){-
795 return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
executed 472 times by 1 test: return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc);
Executed by:
  • Self test (438)
472
796}-
797-
798/*-
799** Count the number of times that the LIKE operator (or GLOB which is-
800** just a variation of LIKE) gets called. This is used for testing-
801** only.-
802*/-
803#ifdef SQLITE_TEST-
804int sqlite3_like_count = 0;-
805#endif-
806-
807-
808/*-
809** Implementation of the like() SQL function. This function implements-
810** the build-in LIKE operator. The first argument to the function is the-
811** pattern and the second argument is the string. So, the SQL statements:-
812**-
813** A LIKE B-
814**-
815** is implemented as like(B,A).-
816**-
817** This same function (with a different compareInfo structure) computes-
818** the GLOB operator.-
819*/-
820static void likeFunc(-
821 sqlite3_context *context, -
822 int argc, -
823 sqlite3_value **argv-
824){-
825 const unsigned char *zA, *zB;-
826 u32 escape;-
827 int nPat;-
828 sqlite3 *db = sqlite3_context_db_handle(context);-
829 struct compareInfo *pInfo = sqlite3_user_data(context);-
830-
831#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS-
832 if( sqlite3_value_type(argv[0])==SQLITE_BLOB-
833 || sqlite3_value_type(argv[1])==SQLITE_BLOB-
834 ){-
835#ifdef SQLITE_TEST-
836 sqlite3_like_count++;-
837#endif-
838 sqlite3_result_int(context, 0);-
839 return;-
840 }-
841#endif-
842 zB = sqlite3_value_text(argv[0]);-
843 zA = sqlite3_value_text(argv[1]);-
844-
845 /* Limit the length of the LIKE or GLOB pattern to avoid problems-
846 ** of deep recursion and N*N behavior in patternCompare().-
847 */-
848 nPat = sqlite3_value_bytes(argv[0]);-
849 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );-
850 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );-
851 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
nPat > db->aLimit[8]Description
TRUEnever evaluated
FALSEevaluated 32960 times by 1 test
Evaluated by:
  • Self test (438)
0-32960
852 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);-
853 return;
never executed: return;
0
854 }-
855 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */-
856-
857 if( argc==3 ){
argc==3Description
TRUEevaluated 787 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32173 times by 1 test
Evaluated by:
  • Self test (438)
787-32173
858 /* The escape character string must consist of a single UTF-8 character.-
859 ** Otherwise, return an error.-
860 */-
861 const unsigned char *zEsc = sqlite3_value_text(argv[2]);-
862 if( zEsc==0 ) return;
never executed: return;
zEsc==0Description
TRUEnever evaluated
FALSEevaluated 787 times by 1 test
Evaluated by:
  • Self test (438)
0-787
863 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
sqlite3Utf8Cha...*)zEsc, -1)!=1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 783 times by 1 test
Evaluated by:
  • Self test (438)
4-783
864 sqlite3_result_error(context, -
865 "ESCAPE expression must be a single character", -1);-
866 return;
executed 4 times by 1 test: return;
Executed by:
  • Self test (438)
4
867 }-
868 escape = sqlite3Utf8Read(&zEsc);-
869 }else{
executed 783 times by 1 test: end of block
Executed by:
  • Self test (438)
783
870 escape = pInfo->matchSet;-
871 }
executed 32173 times by 1 test: end of block
Executed by:
  • Self test (438)
32173
872 if( zA && zB ){
zADescription
TRUEevaluated 32744 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 212 times by 1 test
Evaluated by:
  • Self test (438)
zBDescription
TRUEevaluated 32657 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 87 times by 1 test
Evaluated by:
  • Self test (438)
87-32744
873#ifdef SQLITE_TEST-
874 sqlite3_like_count++;-
875#endif-
876 sqlite3_result_int(context,-
877 patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);-
878 }
executed 32657 times by 1 test: end of block
Executed by:
  • Self test (438)
32657
879}
executed 32956 times by 1 test: end of block
Executed by:
  • Self test (438)
32956
880-
881/*-
882** Implementation of the NULLIF(x,y) function. The result is the first-
883** argument if the arguments are different. The result is NULL if the-
884** arguments are equal to each other.-
885*/-
886static void nullifFunc(-
887 sqlite3_context *context,-
888 int NotUsed,-
889 sqlite3_value **argv-
890){-
891 CollSeq *pColl = sqlite3GetFuncCollSeq(context);-
892 UNUSED_PARAMETER(NotUsed);-
893 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
sqlite3MemComp...[1], pColl)!=0Description
TRUEevaluated 131129 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 609 times by 1 test
Evaluated by:
  • Self test (438)
609-131129
894 sqlite3_result_value(context, argv[0]);-
895 }
executed 131129 times by 1 test: end of block
Executed by:
  • Self test (438)
131129
896}
executed 131738 times by 1 test: end of block
Executed by:
  • Self test (438)
131738
897-
898/*-
899** Implementation of the sqlite_version() function. The result is the version-
900** of the SQLite library that is running.-
901*/-
902static void versionFunc(-
903 sqlite3_context *context,-
904 int NotUsed,-
905 sqlite3_value **NotUsed2-
906){-
907 UNUSED_PARAMETER2(NotUsed, NotUsed2);-
908 /* IMP: R-48699-48617 This function is an SQL wrapper around the-
909 ** sqlite3_libversion() C-interface. */-
910 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);-
911}
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
912-
913/*-
914** Implementation of the sqlite_source_id() function. The result is a string-
915** that identifies the particular version of the source code used to build-
916** SQLite.-
917*/-
918static void sourceidFunc(-
919 sqlite3_context *context,-
920 int NotUsed,-
921 sqlite3_value **NotUsed2-
922){-
923 UNUSED_PARAMETER2(NotUsed, NotUsed2);-
924 /* IMP: R-24470-31136 This function is an SQL wrapper around the-
925 ** sqlite3_sourceid() C interface. */-
926 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);-
927}
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
928-
929/*-
930** Implementation of the sqlite_log() function. This is a wrapper around-
931** sqlite3_log(). The return value is NULL. The function exists purely for-
932** its side-effects.-
933*/-
934static void errlogFunc(-
935 sqlite3_context *context,-
936 int argc,-
937 sqlite3_value **argv-
938){-
939 UNUSED_PARAMETER(argc);-
940 UNUSED_PARAMETER(context);-
941 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));-
942}
never executed: end of block
0
943-
944/*-
945** Implementation of the sqlite_compileoption_used() function.-
946** The result is an integer that identifies if the compiler option-
947** was used to build SQLite.-
948*/-
949#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS-
950static void compileoptionusedFunc(-
951 sqlite3_context *context,-
952 int argc,-
953 sqlite3_value **argv-
954){-
955 const char *zOptName;-
956 assert( argc==1 );-
957 UNUSED_PARAMETER(argc);-
958 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL-
959 ** function is a wrapper around the sqlite3_compileoption_used() C/C++-
960 ** function.-
961 */-
962 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
(zOptName = (c...t(argv[0]))!=0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-25
963 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));-
964 }
executed 25 times by 1 test: end of block
Executed by:
  • Self test (438)
25
965}
executed 26 times by 1 test: end of block
Executed by:
  • Self test (438)
26
966#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */-
967-
968/*-
969** Implementation of the sqlite_compileoption_get() function. -
970** The result is a string that identifies the compiler options -
971** used to build SQLite.-
972*/-
973#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS-
974static void compileoptiongetFunc(-
975 sqlite3_context *context,-
976 int argc,-
977 sqlite3_value **argv-
978){-
979 int n;-
980 assert( argc==1 );-
981 UNUSED_PARAMETER(argc);-
982 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function-
983 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.-
984 */-
985 n = sqlite3_value_int(argv[0]);-
986 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);-
987}
executed 12 times by 1 test: end of block
Executed by:
  • Self test (438)
12
988#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */-
989-
990/* Array for converting from half-bytes (nybbles) into ASCII hex-
991** digits. */-
992static const char hexdigits[] = {-
993 '0', '1', '2', '3', '4', '5', '6', '7',-
994 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' -
995};-
996-
997/*-
998** Implementation of the QUOTE() function. This function takes a single-
999** argument. If the argument is numeric, the return value is the same as-
1000** the argument. If the argument is NULL, the return value is the string-
1001** "NULL". Otherwise, the argument is enclosed in single quotes with-
1002** single-quote escapes.-
1003*/-
1004static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){-
1005 assert( argc==1 );-
1006 UNUSED_PARAMETER(argc);-
1007 switch( sqlite3_value_type(argv[0]) ){-
1008 case SQLITE_FLOAT: {
executed 20016 times by 1 test: case 2:
Executed by:
  • Self test (438)
20016
1009 double r1, r2;-
1010 char zBuf[50];-
1011 r1 = sqlite3_value_double(argv[0]);-
1012 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);-
1013 sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);-
1014 if( r1!=r2 ){
r1!=r2Description
TRUEevaluated 18645 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1371 times by 1 test
Evaluated by:
  • Self test (438)
1371-18645
1015 sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);-
1016 }
executed 18645 times by 1 test: end of block
Executed by:
  • Self test (438)
18645
1017 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);-
1018 break;
executed 20016 times by 1 test: break;
Executed by:
  • Self test (438)
20016
1019 }-
1020 case SQLITE_INTEGER: {
executed 53 times by 1 test: case 1:
Executed by:
  • Self test (438)
53
1021 sqlite3_result_value(context, argv[0]);-
1022 break;
executed 53 times by 1 test: break;
Executed by:
  • Self test (438)
53
1023 }-
1024 case SQLITE_BLOB: {
executed 123 times by 1 test: case 4:
Executed by:
  • Self test (438)
123
1025 char *zText = 0;-
1026 char const *zBlob = sqlite3_value_blob(argv[0]);-
1027 int nBlob = sqlite3_value_bytes(argv[0]);-
1028 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */-
1029 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); -
1030 if( zText ){
zTextDescription
TRUEevaluated 123 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-123
1031 int i;-
1032 for(i=0; i<nBlob; i++){
i<nBlobDescription
TRUEevaluated 757 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 123 times by 1 test
Evaluated by:
  • Self test (438)
123-757
1033 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];-
1034 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];-
1035 }
executed 757 times by 1 test: end of block
Executed by:
  • Self test (438)
757
1036 zText[(nBlob*2)+2] = '\'';-
1037 zText[(nBlob*2)+3] = '\0';-
1038 zText[0] = 'X';-
1039 zText[1] = '\'';-
1040 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);-
1041 sqlite3_free(zText);-
1042 }
executed 123 times by 1 test: end of block
Executed by:
  • Self test (438)
123
1043 break;
executed 123 times by 1 test: break;
Executed by:
  • Self test (438)
123
1044 }-
1045 case SQLITE_TEXT: {
executed 36958 times by 2 tests: case 3:
Executed by:
  • Self test (34)
  • Self test (438)
36958
1046 int i,j;-
1047 u64 n;-
1048 const unsigned char *zArg = sqlite3_value_text(argv[0]);-
1049 char *z;-
1050-
1051 if( zArg==0 ) return;
never executed: return;
zArg==0Description
TRUEnever evaluated
FALSEevaluated 36958 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
0-36958
1052 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
executed 1 time by 1 test: n++;
Executed by:
  • Self test (438)
executed 115356 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
zArg[i]=='\''Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 115355 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
zArg[i]Description
TRUEevaluated 115356 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 36958 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1-115356
1053 z = contextMalloc(context, ((i64)i)+((i64)n)+3);-
1054 if( z ){
zDescription
TRUEevaluated 36958 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEnever evaluated
0-36958
1055 z[0] = '\'';-
1056 for(i=0, j=1; zArg[i]; i++){
zArg[i]Description
TRUEevaluated 115356 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 36958 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
36958-115356
1057 z[j++] = zArg[i];-
1058 if( zArg[i]=='\'' ){
zArg[i]=='\''Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 115355 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1-115355
1059 z[j++] = '\'';-
1060 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
1061 }
executed 115356 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
115356
1062 z[j++] = '\'';-
1063 z[j] = 0;-
1064 sqlite3_result_text(context, z, j, sqlite3_free);-
1065 }
executed 36958 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
36958
1066 break;
executed 36958 times by 2 tests: break;
Executed by:
  • Self test (34)
  • Self test (438)
36958
1067 }-
1068 default: {
executed 25 times by 1 test: default:
Executed by:
  • Self test (438)
25
1069 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );-
1070 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);-
1071 break;
executed 25 times by 1 test: break;
Executed by:
  • Self test (438)
25
1072 }-
1073 }-
1074}-
1075-
1076/*-
1077** The unicode() function. Return the integer unicode code-point value-
1078** for the first character of the input string. -
1079*/-
1080static void unicodeFunc(-
1081 sqlite3_context *context,-
1082 int argc,-
1083 sqlite3_value **argv-
1084){-
1085 const unsigned char *z = sqlite3_value_text(argv[0]);-
1086 (void)argc;-
1087 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
executed 12283 times by 1 test: sqlite3_result_int(context, sqlite3Utf8Read(&z));
Executed by:
  • Self test (438)
zDescription
TRUEevaluated 12283 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
z[0]Description
TRUEevaluated 12283 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-12283
1088}
executed 12283 times by 1 test: end of block
Executed by:
  • Self test (438)
12283
1089-
1090/*-
1091** The char() function takes zero or more arguments, each of which is-
1092** an integer. It constructs a string where each character of the string-
1093** is the unicode character for the corresponding integer argument.-
1094*/-
1095static void charFunc(-
1096 sqlite3_context *context,-
1097 int argc,-
1098 sqlite3_value **argv-
1099){-
1100 unsigned char *z, *zOut;-
1101 int i;-
1102 zOut = z = sqlite3_malloc64( argc*4+1 );-
1103 if( z==0 ){
z==0Description
TRUEnever evaluated
FALSEevaluated 12345 times by 1 test
Evaluated by:
  • Self test (438)
0-12345
1104 sqlite3_result_error_nomem(context);-
1105 return;
never executed: return;
0
1106 }-
1107 for(i=0; i<argc; i++){
i<argcDescription
TRUEevaluated 12344 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12345 times by 1 test
Evaluated by:
  • Self test (438)
12344-12345
1108 sqlite3_int64 x;-
1109 unsigned c;-
1110 x = sqlite3_value_int64(argv[i]);-
1111 if( x<0 || x>0x10ffff ) x = 0xfffd;
never executed: x = 0xfffd;
x<0Description
TRUEnever evaluated
FALSEevaluated 12344 times by 1 test
Evaluated by:
  • Self test (438)
x>0x10ffffDescription
TRUEnever evaluated
FALSEevaluated 12344 times by 1 test
Evaluated by:
  • Self test (438)
0-12344
1112 c = (unsigned)(x & 0x1fffff);-
1113 if( c<0x00080 ){
c<0x00080Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12307 times by 1 test
Evaluated by:
  • Self test (438)
37-12307
1114 *zOut++ = (u8)(c&0xFF);-
1115 }else if( c<0x00800 ){
executed 37 times by 1 test: end of block
Executed by:
  • Self test (438)
c<0x00800Description
TRUEevaluated 155 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12152 times by 1 test
Evaluated by:
  • Self test (438)
37-12152
1116 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);-
1117 *zOut++ = 0x80 + (u8)(c & 0x3F);-
1118 }else if( c<0x10000 ){
executed 155 times by 1 test: end of block
Executed by:
  • Self test (438)
c<0x10000Description
TRUEevaluated 4585 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7567 times by 1 test
Evaluated by:
  • Self test (438)
155-7567
1119 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);-
1120 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);-
1121 *zOut++ = 0x80 + (u8)(c & 0x3F);-
1122 }else{
executed 4585 times by 1 test: end of block
Executed by:
  • Self test (438)
4585
1123 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);-
1124 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);-
1125 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);-
1126 *zOut++ = 0x80 + (u8)(c & 0x3F);-
1127 } \
executed 7567 times by 1 test: end of block
Executed by:
  • Self test (438)
7567
1128 }-
1129 sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);-
1130}
executed 12345 times by 1 test: end of block
Executed by:
  • Self test (438)
12345
1131-
1132/*-
1133** The hex() function. Interpret the argument as a blob. Return-
1134** a hexadecimal rendering as text.-
1135*/-
1136static void hexFunc(-
1137 sqlite3_context *context,-
1138 int argc,-
1139 sqlite3_value **argv-
1140){-
1141 int i, n;-
1142 const unsigned char *pBlob;-
1143 char *zHex, *z;-
1144 assert( argc==1 );-
1145 UNUSED_PARAMETER(argc);-
1146 pBlob = sqlite3_value_blob(argv[0]);-
1147 n = sqlite3_value_bytes(argv[0]);-
1148 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */-
1149 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);-
1150 if( zHex ){
zHexDescription
TRUEevaluated 959 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-959
1151 for(i=0; i<n; i++, pBlob++){
i<nDescription
TRUEevaluated 99236 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 959 times by 1 test
Evaluated by:
  • Self test (438)
959-99236
1152 unsigned char c = *pBlob;-
1153 *(z++) = hexdigits[(c>>4)&0xf];-
1154 *(z++) = hexdigits[c&0xf];-
1155 }
executed 99236 times by 1 test: end of block
Executed by:
  • Self test (438)
99236
1156 *z = 0;-
1157 sqlite3_result_text(context, zHex, n*2, sqlite3_free);-
1158 }
executed 959 times by 1 test: end of block
Executed by:
  • Self test (438)
959
1159}
executed 959 times by 1 test: end of block
Executed by:
  • Self test (438)
959
1160-
1161/*-
1162** The zeroblob(N) function returns a zero-filled blob of size N bytes.-
1163*/-
1164static void zeroblobFunc(-
1165 sqlite3_context *context,-
1166 int argc,-
1167 sqlite3_value **argv-
1168){-
1169 i64 n;-
1170 int rc;-
1171 assert( argc==1 );-
1172 UNUSED_PARAMETER(argc);-
1173 n = sqlite3_value_int64(argv[0]);-
1174 if( n<0 ) n = 0;
executed 9 times by 1 test: n = 0;
Executed by:
  • Self test (438)
n<0Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 867 times by 1 test
Evaluated by:
  • Self test (438)
9-867
1175 rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */-
1176 if( rc ){
rcDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 871 times by 1 test
Evaluated by:
  • Self test (438)
5-871
1177 sqlite3_result_error_code(context, rc);-
1178 }
executed 5 times by 1 test: end of block
Executed by:
  • Self test (438)
5
1179}
executed 876 times by 1 test: end of block
Executed by:
  • Self test (438)
876
1180-
1181/*-
1182** The replace() function. Three arguments are all strings: call-
1183** them A, B, and C. The result is also a string which is derived-
1184** from A by replacing every occurrence of B with C. The match-
1185** must be exact. Collating sequences are not used.-
1186*/-
1187static void replaceFunc(-
1188 sqlite3_context *context,-
1189 int argc,-
1190 sqlite3_value **argv-
1191){-
1192 const unsigned char *zStr; /* The input string A */-
1193 const unsigned char *zPattern; /* The pattern string B */-
1194 const unsigned char *zRep; /* The replacement string C */-
1195 unsigned char *zOut; /* The output */-
1196 int nStr; /* Size of zStr */-
1197 int nPattern; /* Size of zPattern */-
1198 int nRep; /* Size of zRep */-
1199 i64 nOut; /* Maximum size of zOut */-
1200 int loopLimit; /* Last zStr[] that might match zPattern[] */-
1201 int i, j; /* Loop counters */-
1202 unsigned cntExpand; /* Number zOut expansions */-
1203 sqlite3 *db = sqlite3_context_db_handle(context);-
1204-
1205 assert( argc==3 );-
1206 UNUSED_PARAMETER(argc);-
1207 zStr = sqlite3_value_text(argv[0]);-
1208 if( zStr==0 ) return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
zStr==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1085 times by 1 test
Evaluated by:
  • Self test (438)
1-1085
1209 nStr = sqlite3_value_bytes(argv[0]);-
1210 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */-
1211 zPattern = sqlite3_value_text(argv[1]);-
1212 if( zPattern==0 ){
zPattern==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1084 times by 1 test
Evaluated by:
  • Self test (438)
1-1084
1213 assert( sqlite3_value_type(argv[1])==SQLITE_NULL-
1214 || sqlite3_context_db_handle(context)->mallocFailed );-
1215 return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
1
1216 }-
1217 if( zPattern[0]==0 ){
zPattern[0]==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1083 times by 1 test
Evaluated by:
  • Self test (438)
1-1083
1218 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );-
1219 sqlite3_result_value(context, argv[0]);-
1220 return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
1
1221 }-
1222 nPattern = sqlite3_value_bytes(argv[1]);-
1223 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */-
1224 zRep = sqlite3_value_text(argv[2]);-
1225 if( zRep==0 ) return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
zRep==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1082 times by 1 test
Evaluated by:
  • Self test (438)
1-1082
1226 nRep = sqlite3_value_bytes(argv[2]);-
1227 assert( zRep==sqlite3_value_text(argv[2]) );-
1228 nOut = nStr + 1;-
1229 assert( nOut<SQLITE_MAX_LENGTH );-
1230 zOut = contextMalloc(context, (i64)nOut);-
1231 if( zOut==0 ){
zOut==0Description
TRUEnever evaluated
FALSEevaluated 1082 times by 1 test
Evaluated by:
  • Self test (438)
0-1082
1232 return;
never executed: return;
0
1233 }-
1234 loopLimit = nStr - nPattern; -
1235 cntExpand = 0;-
1236 for(i=j=0; i<=loopLimit; i++){
i<=loopLimitDescription
TRUEevaluated 613296 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1082 times by 1 test
Evaluated by:
  • Self test (438)
1082-613296
1237 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
zStr[i]!=zPattern[0]Description
TRUEevaluated 71925 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 541371 times by 1 test
Evaluated by:
  • Self test (438)
memcmp(&zStr[i...ern, nPattern)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 541370 times by 1 test
Evaluated by:
  • Self test (438)
1-541371
1238 zOut[j++] = zStr[i];-
1239 }else{
executed 71926 times by 1 test: end of block
Executed by:
  • Self test (438)
71926
1240 if( nRep>nPattern ){
nRep>nPatternDescription
TRUEevaluated 541333 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
37-541333
1241 nOut += nRep - nPattern;-
1242 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );-
1243 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );-
1244 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
nOut-1>db->aLimit[0]Description
TRUEnever evaluated
FALSEevaluated 541333 times by 1 test
Evaluated by:
  • Self test (438)
0-541333
1245 sqlite3_result_error_toobig(context);-
1246 sqlite3_free(zOut);-
1247 return;
never executed: return;
0
1248 }-
1249 cntExpand++;-
1250 if( (cntExpand&(cntExpand-1))==0 ){
(cntExpand&(cntExpand-1))==0Description
TRUEevaluated 9413 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 531920 times by 1 test
Evaluated by:
  • Self test (438)
9413-531920
1251 /* Grow the size of the output buffer only on substitutions-
1252 ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */-
1253 u8 *zOld;-
1254 zOld = zOut;-
1255 zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1));-
1256 if( zOut==0 ){
zOut==0Description
TRUEnever evaluated
FALSEevaluated 9413 times by 1 test
Evaluated by:
  • Self test (438)
0-9413
1257 sqlite3_result_error_nomem(context);-
1258 sqlite3_free(zOld);-
1259 return;
never executed: return;
0
1260 }-
1261 }
executed 9413 times by 1 test: end of block
Executed by:
  • Self test (438)
9413
1262 }
executed 541333 times by 1 test: end of block
Executed by:
  • Self test (438)
541333
1263 memcpy(&zOut[j], zRep, nRep);-
1264 j += nRep;-
1265 i += nPattern-1;-
1266 }
executed 541370 times by 1 test: end of block
Executed by:
  • Self test (438)
541370
1267 }-
1268 assert( j+nStr-i+1<=nOut );-
1269 memcpy(&zOut[j], &zStr[i], nStr-i);-
1270 j += nStr - i;-
1271 assert( j<=nOut );-
1272 zOut[j] = 0;-
1273 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);-
1274}
executed 1082 times by 1 test: end of block
Executed by:
  • Self test (438)
1082
1275-
1276/*-
1277** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.-
1278** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.-
1279*/-
1280static void trimFunc(-
1281 sqlite3_context *context,-
1282 int argc,-
1283 sqlite3_value **argv-
1284){-
1285 const unsigned char *zIn; /* Input string */-
1286 const unsigned char *zCharSet; /* Set of characters to trim */-
1287 int nIn; /* Number of bytes in input */-
1288 int flags; /* 1: trimleft 2: trimright 3: trim */-
1289 int i; /* Loop counter */-
1290 unsigned char *aLen = 0; /* Length of each character in zCharSet */-
1291 unsigned char **azChar = 0; /* Individual characters in zCharSet */-
1292 int nChar; /* Number of characters in zCharSet */-
1293-
1294 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
sqlite3_value_type(argv[0])==5Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
2-49
1295 return;
executed 2 times by 1 test: return;
Executed by:
  • Self test (438)
2
1296 }-
1297 zIn = sqlite3_value_text(argv[0]);-
1298 if( zIn==0 ) return;
never executed: return;
zIn==0Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
0-49
1299 nIn = sqlite3_value_bytes(argv[0]);-
1300 assert( zIn==sqlite3_value_text(argv[0]) );-
1301 if( argc==1 ){
argc==1Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
23-26
1302 static const unsigned char lenOne[] = { 1 };-
1303 static unsigned char * const azOne[] = { (u8*)" " };-
1304 nChar = 1;-
1305 aLen = (u8*)lenOne;-
1306 azChar = (unsigned char **)azOne;-
1307 zCharSet = 0;-
1308 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
executed 26 times by 1 test: end of block
Executed by:
  • Self test (438)
(zCharSet = sq...t(argv[1]))==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
1-26
1309 return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
1
1310 }else{-
1311 const unsigned char *z;-
1312 for(z=zCharSet, nChar=0; *z; nChar++){
*zDescription
TRUEevaluated 43 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
22-43
1313 SQLITE_SKIP_UTF8(z);
executed 15 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
(*(z++))>=0xc0Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
(*z & 0xc0)==0x80Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-30
1314 }
executed 43 times by 1 test: end of block
Executed by:
  • Self test (438)
43
1315 if( nChar>0 ){
nChar>0Description
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-21
1316 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));-
1317 if( azChar==0 ){
azChar==0Description
TRUEnever evaluated
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
0-21
1318 return;
never executed: return;
0
1319 }-
1320 aLen = (unsigned char*)&azChar[nChar];-
1321 for(z=zCharSet, nChar=0; *z; nChar++){
*zDescription
TRUEevaluated 43 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
21-43
1322 azChar[nChar] = (unsigned char *)z;-
1323 SQLITE_SKIP_UTF8(z);
executed 15 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
(*(z++))>=0xc0Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
(*z & 0xc0)==0x80Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-30
1324 aLen[nChar] = (u8)(z - azChar[nChar]);-
1325 }
executed 43 times by 1 test: end of block
Executed by:
  • Self test (438)
43
1326 }
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
21
1327 }
executed 22 times by 1 test: end of block
Executed by:
  • Self test (438)
22
1328 if( nChar>0 ){
nChar>0Description
TRUEevaluated 47 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-47
1329 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));-
1330 if( flags & 1 ){
flags & 1Description
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
21-26
1331 while( nIn>0 ){
nIn>0Description
TRUEevaluated 51 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-51
1332 int len = 0;-
1333 for(i=0; i<nChar; i++){
i<nCharDescription
TRUEevaluated 81 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
21-81
1334 len = aLen[i];-
1335 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
executed 30 times by 1 test: break;
Executed by:
  • Self test (438)
len<=nInDescription
TRUEevaluated 81 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
memcmp(zIn, azChar[i], len)==0Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 51 times by 1 test
Evaluated by:
  • Self test (438)
0-81
1336 }
executed 51 times by 1 test: end of block
Executed by:
  • Self test (438)
51
1337 if( i>=nChar ) break;
executed 21 times by 1 test: break;
Executed by:
  • Self test (438)
i>=nCharDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
21-30
1338 zIn += len;-
1339 nIn -= len;-
1340 }
executed 30 times by 1 test: end of block
Executed by:
  • Self test (438)
30
1341 }
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
21
1342 if( flags & 2 ){
flags & 2Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-42
1343 while( nIn>0 ){
nIn>0Description
TRUEevaluated 471 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-471
1344 int len = 0;-
1345 for(i=0; i<nChar; i++){
i<nCharDescription
TRUEevaluated 513 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
42-513
1346 len = aLen[i];-
1347 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
executed 429 times by 1 test: break;
Executed by:
  • Self test (438)
len<=nInDescription
TRUEevaluated 511 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
memcmp(&zIn[nI...har[i],len)==0Description
TRUEevaluated 429 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 82 times by 1 test
Evaluated by:
  • Self test (438)
2-511
1348 }
executed 84 times by 1 test: end of block
Executed by:
  • Self test (438)
84
1349 if( i>=nChar ) break;
executed 42 times by 1 test: break;
Executed by:
  • Self test (438)
i>=nCharDescription
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 429 times by 1 test
Evaluated by:
  • Self test (438)
42-429
1350 nIn -= len;-
1351 }
executed 429 times by 1 test: end of block
Executed by:
  • Self test (438)
429
1352 }
executed 42 times by 1 test: end of block
Executed by:
  • Self test (438)
42
1353 if( zCharSet ){
zCharSetDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
21-26
1354 sqlite3_free(azChar);-
1355 }
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
21
1356 }
executed 47 times by 1 test: end of block
Executed by:
  • Self test (438)
47
1357 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);-
1358}
executed 48 times by 1 test: end of block
Executed by:
  • Self test (438)
48
1359-
1360-
1361#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION-
1362/*-
1363** The "unknown" function is automatically substituted in place of-
1364** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN-
1365** when the SQLITE_ENABLE_UNKNOWN_FUNCTION compile-time option is used.-
1366** When the "sqlite3" command-line shell is built using this functionality,-
1367** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries-
1368** involving application-defined functions to be examined in a generic-
1369** sqlite3 shell.-
1370*/-
1371static void unknownFunc(-
1372 sqlite3_context *context,-
1373 int argc,-
1374 sqlite3_value **argv-
1375){-
1376 /* no-op */-
1377}-
1378#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/-
1379-
1380-
1381/* IMP: R-25361-16150 This function is omitted from SQLite by default. It-
1382** is only available if the SQLITE_SOUNDEX compile-time option is used-
1383** when SQLite is built.-
1384*/-
1385#ifdef SQLITE_SOUNDEX-
1386/*-
1387** Compute the soundex encoding of a word.-
1388**-
1389** IMP: R-59782-00072 The soundex(X) function returns a string that is the-
1390** soundex encoding of the string X. -
1391*/-
1392static void soundexFunc(-
1393 sqlite3_context *context,-
1394 int argc,-
1395 sqlite3_value **argv-
1396){-
1397 char zResult[8];-
1398 const u8 *zIn;-
1399 int i, j;-
1400 static const unsigned char iCode[] = {-
1401 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-
1402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-
1403 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-
1404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-
1405 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,-
1406 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,-
1407 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,-
1408 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,-
1409 };-
1410 assert( argc==1 );-
1411 zIn = (u8*)sqlite3_value_text(argv[0]);-
1412 if( zIn==0 ) zIn = (u8*)"";-
1413 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}-
1414 if( zIn[i] ){-
1415 u8 prevcode = iCode[zIn[i]&0x7f];-
1416 zResult[0] = sqlite3Toupper(zIn[i]);-
1417 for(j=1; j<4 && zIn[i]; i++){-
1418 int code = iCode[zIn[i]&0x7f];-
1419 if( code>0 ){-
1420 if( code!=prevcode ){-
1421 prevcode = code;-
1422 zResult[j++] = code + '0';-
1423 }-
1424 }else{-
1425 prevcode = 0;-
1426 }-
1427 }-
1428 while( j<4 ){-
1429 zResult[j++] = '0';-
1430 }-
1431 zResult[j] = 0;-
1432 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);-
1433 }else{-
1434 /* IMP: R-64894-50321 The string "?000" is returned if the argument-
1435 ** is NULL or contains no ASCII alphabetic characters. */-
1436 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);-
1437 }-
1438}-
1439#endif /* SQLITE_SOUNDEX */-
1440-
1441#ifndef SQLITE_OMIT_LOAD_EXTENSION-
1442/*-
1443** A function that loads a shared-library extension then returns NULL.-
1444*/-
1445static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){-
1446 const char *zFile = (const char *)sqlite3_value_text(argv[0]);-
1447 const char *zProc;-
1448 sqlite3 *db = sqlite3_context_db_handle(context);-
1449 char *zErrMsg = 0;-
1450-
1451 /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc-
1452 ** flag is set. See the sqlite3_enable_load_extension() API.-
1453 */-
1454 if( (db->flags & SQLITE_LoadExtFunc)==0 ){
(db->flags & 0x00020000)==0Description
TRUEnever evaluated
FALSEnever evaluated
0
1455 sqlite3_result_error(context, "not authorized", -1);-
1456 return;
never executed: return;
0
1457 }-
1458-
1459 if( argc==2 ){
argc==2Description
TRUEnever evaluated
FALSEnever evaluated
0
1460 zProc = (const char *)sqlite3_value_text(argv[1]);-
1461 }else{
never executed: end of block
0
1462 zProc = 0;-
1463 }
never executed: end of block
0
1464 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
zFileDescription
TRUEnever evaluated
FALSEnever evaluated
sqlite3_load_e...roc, &zErrMsg)Description
TRUEnever evaluated
FALSEnever evaluated
0
1465 sqlite3_result_error(context, zErrMsg, -1);-
1466 sqlite3_free(zErrMsg);-
1467 }
never executed: end of block
0
1468}
never executed: end of block
0
1469#endif-
1470-
1471-
1472/*-
1473** An instance of the following structure holds the context of a-
1474** sum() or avg() aggregate computation.-
1475*/-
1476typedef struct SumCtx SumCtx;-
1477struct SumCtx {-
1478 double rSum; /* Floating point sum */-
1479 i64 iSum; /* Integer sum */ -
1480 i64 cnt; /* Number of elements summed */-
1481 u8 overflow; /* True if integer overflow seen */-
1482 u8 approx; /* True if non-integer value was input to the sum */-
1483};-
1484-
1485/*-
1486** Routines used to compute the sum, average, and total.-
1487**-
1488** The SUM() function follows the (broken) SQL standard which means-
1489** that it returns NULL if it sums over no inputs. TOTAL returns-
1490** 0.0 in that case. In addition, TOTAL always returns a float where-
1491** SUM might return an integer if it never encounters a floating point-
1492** value. TOTAL never fails, but SUM might through an exception if-
1493** it overflows an integer.-
1494*/-
1495static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){-
1496 SumCtx *p;-
1497 int type;-
1498 assert( argc==1 );-
1499 UNUSED_PARAMETER(argc);-
1500 p = sqlite3_aggregate_context(context, sizeof(*p));-
1501 type = sqlite3_value_numeric_type(argv[0]);-
1502 if( p && type!=SQLITE_NULL ){
pDescription
TRUEevaluated 250700 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
type!=5Description
TRUEevaluated 250499 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 201 times by 1 test
Evaluated by:
  • Self test (438)
0-250700
1503 p->cnt++;-
1504 if( type==SQLITE_INTEGER ){
type==1Description
TRUEevaluated 250444 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 55 times by 1 test
Evaluated by:
  • Self test (438)
55-250444
1505 i64 v = sqlite3_value_int64(argv[0]);-
1506 p->rSum += v;-
1507 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
(p->approx|p->overflow)==0Description
TRUEevaluated 250436 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
sqlite3AddInt64(&p->iSum, v)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 250432 times by 1 test
Evaluated by:
  • Self test (438)
4-250436
1508 p->approx = p->overflow = 1;-
1509 }
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
1510 }else{
executed 250444 times by 1 test: end of block
Executed by:
  • Self test (438)
250444
1511 p->rSum += sqlite3_value_double(argv[0]);-
1512 p->approx = 1;-
1513 }
executed 55 times by 1 test: end of block
Executed by:
  • Self test (438)
55
1514 }-
1515}
executed 250700 times by 1 test: end of block
Executed by:
  • Self test (438)
250700
1516#ifndef SQLITE_OMIT_WINDOWFUNC-
1517static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){-
1518 SumCtx *p;-
1519 int type;-
1520 assert( argc==1 );-
1521 UNUSED_PARAMETER(argc);-
1522 p = sqlite3_aggregate_context(context, sizeof(*p));-
1523 type = sqlite3_value_numeric_type(argv[0]);-
1524 /* p is always non-NULL because sumStep() will have been called first-
1525 ** to initialize it */-
1526 if( ALWAYS(p) && type!=SQLITE_NULL ){
(p)Description
TRUEevaluated 1878 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
type!=5Description
TRUEevaluated 1878 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1878
1527 assert( p->cnt>0 );-
1528 p->cnt--;-
1529 assert( type==SQLITE_INTEGER || p->approx );-
1530 if( type==SQLITE_INTEGER && p->approx==0 ){
type==1Description
TRUEevaluated 1874 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
p->approx==0Description
TRUEevaluated 1874 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1874
1531 i64 v = sqlite3_value_int64(argv[0]);-
1532 p->rSum -= v;-
1533 p->iSum -= v;-
1534 }else{
executed 1874 times by 1 test: end of block
Executed by:
  • Self test (438)
1874
1535 p->rSum -= sqlite3_value_double(argv[0]);-
1536 }
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
1537 }-
1538}
executed 1878 times by 1 test: end of block
Executed by:
  • Self test (438)
1878
1539#else-
1540# define sumInverse 0-
1541#endif /* SQLITE_OMIT_WINDOWFUNC */-
1542static void sumFinalize(sqlite3_context *context){-
1543 SumCtx *p;-
1544 p = sqlite3_aggregate_context(context, 0);-
1545 if( p && p->cnt>0 ){
pDescription
TRUEevaluated 6330 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 328 times by 1 test
Evaluated by:
  • Self test (438)
p->cnt>0Description
TRUEevaluated 6253 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 77 times by 1 test
Evaluated by:
  • Self test (438)
77-6330
1546 if( p->overflow ){
p->overflowDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6250 times by 1 test
Evaluated by:
  • Self test (438)
3-6250
1547 sqlite3_result_error(context,"integer overflow",-1);-
1548 }else if( p->approx ){
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
p->approxDescription
TRUEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6222 times by 1 test
Evaluated by:
  • Self test (438)
3-6222
1549 sqlite3_result_double(context, p->rSum);-
1550 }else{
executed 28 times by 1 test: end of block
Executed by:
  • Self test (438)
28
1551 sqlite3_result_int64(context, p->iSum);-
1552 }
executed 6222 times by 1 test: end of block
Executed by:
  • Self test (438)
6222
1553 }-
1554}
executed 6658 times by 1 test: end of block
Executed by:
  • Self test (438)
6658
1555static void avgFinalize(sqlite3_context *context){-
1556 SumCtx *p;-
1557 p = sqlite3_aggregate_context(context, 0);-
1558 if( p && p->cnt>0 ){
pDescription
TRUEevaluated 2145 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
p->cnt>0Description
TRUEevaluated 2145 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-2145
1559 sqlite3_result_double(context, p->rSum/(double)p->cnt);-
1560 }
executed 2145 times by 1 test: end of block
Executed by:
  • Self test (438)
2145
1561}
executed 2147 times by 1 test: end of block
Executed by:
  • Self test (438)
2147
1562static void totalFinalize(sqlite3_context *context){-
1563 SumCtx *p;-
1564 p = sqlite3_aggregate_context(context, 0);-
1565 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */-
1566 sqlite3_result_double(context, p ? p->rSum : (double)0);-
1567}
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
6
1568-
1569/*-
1570** The following structure keeps track of state information for the-
1571** count() aggregate function.-
1572*/-
1573typedef struct CountCtx CountCtx;-
1574struct CountCtx {-
1575 i64 n;-
1576#ifdef SQLITE_DEBUG-
1577 int bInverse; /* True if xInverse() ever called */-
1578#endif-
1579};-
1580-
1581/*-
1582** Routines to implement the count() aggregate function.-
1583*/-
1584static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){-
1585 CountCtx *p;-
1586 p = sqlite3_aggregate_context(context, sizeof(*p));-
1587 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
argc==0Description
TRUEevaluated 1104853 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 404136 times by 1 test
Evaluated by:
  • Self test (438)
5!=sqlite3_value_type(argv[0])Description
TRUEevaluated 400828 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3308 times by 1 test
Evaluated by:
  • Self test (438)
pDescription
TRUEevaluated 1505681 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1505681
1588 p->n++;-
1589 }
executed 1505681 times by 1 test: end of block
Executed by:
  • Self test (438)
1505681
1590-
1591#ifndef SQLITE_OMIT_DEPRECATED-
1592 /* The sqlite3_aggregate_count() function is deprecated. But just to make-
1593 ** sure it still operates correctly, verify that its count agrees with our -
1594 ** internal count when using count(*) and when the total count can be-
1595 ** expressed as a 32-bit integer. */-
1596 assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse-
1597 || p->n==sqlite3_aggregate_count(context) );-
1598#endif-
1599}
executed 1508989 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 1508989 times by 1 test: end of block
Executed by:
  • Self test (438)
1508989
1600static void countFinalize(sqlite3_context *context){-
1601 CountCtx *p;-
1602 p = sqlite3_aggregate_context(context, 0);-
1603 sqlite3_result_int64(context, p ? p->n : 0);-
1604}
executed 19736 times by 1 test: end of block
Executed by:
  • Self test (438)
19736
1605#ifndef SQLITE_OMIT_WINDOWFUNC-
1606static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){-
1607 CountCtx *p;-
1608 p = sqlite3_aggregate_context(ctx, sizeof(*p));-
1609 /* p is always non-NULL since countStep() will have been called first */-
1610 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
argc==0Description
TRUEevaluated 7515 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
5!=sqlite3_value_type(argv[0])Description
TRUEnever evaluated
FALSEnever evaluated
(p)Description
TRUEevaluated 7515 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-7515
1611 p->n--;-
1612#ifdef SQLITE_DEBUG-
1613 p->bInverse = 1;-
1614#endif-
1615 }
executed 7515 times by 1 test: end of block
Executed by:
  • Self test (438)
7515
1616}
executed 7515 times by 1 test: end of block
Executed by:
  • Self test (438)
executed 7515 times by 1 test: end of block
Executed by:
  • Self test (438)
7515
1617#else-
1618# define countInverse 0-
1619#endif /* SQLITE_OMIT_WINDOWFUNC */-
1620-
1621/*-
1622** Routines to implement min() and max() aggregate functions.-
1623*/-
1624static void minmaxStep(-
1625 sqlite3_context *context, -
1626 int NotUsed, -
1627 sqlite3_value **argv-
1628){-
1629 Mem *pArg = (Mem *)argv[0];-
1630 Mem *pBest;-
1631 UNUSED_PARAMETER(NotUsed);-
1632-
1633 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));-
1634 if( !pBest ) return;
never executed: return;
!pBestDescription
TRUEnever evaluated
FALSEevaluated 263340 times by 1 test
Evaluated by:
  • Self test (438)
0-263340
1635-
1636 if( sqlite3_value_type(pArg)==SQLITE_NULL ){
sqlite3_value_type(pArg)==5Description
TRUEevaluated 4163 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 259177 times by 1 test
Evaluated by:
  • Self test (438)
4163-259177
1637 if( pBest->flags ) sqlite3SkipAccumulatorLoad(context);
executed 35 times by 1 test: sqlite3SkipAccumulatorLoad(context);
Executed by:
  • Self test (438)
pBest->flagsDescription
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4128 times by 1 test
Evaluated by:
  • Self test (438)
35-4128
1638 }else if( pBest->flags ){
executed 4163 times by 1 test: end of block
Executed by:
  • Self test (438)
pBest->flagsDescription
TRUEevaluated 239068 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 20109 times by 1 test
Evaluated by:
  • Self test (438)
4163-239068
1639 int max;-
1640 int cmp;-
1641 CollSeq *pColl = sqlite3GetFuncCollSeq(context);-
1642 /* This step function is used for both the min() and max() aggregates,-
1643 ** the only difference between the two being that the sense of the-
1644 ** comparison is inverted. For the max() aggregate, the-
1645 ** sqlite3_user_data() function returns (void *)-1. For min() it-
1646 ** returns (void *)db, where db is the sqlite3* database pointer.-
1647 ** Therefore the next statement sets variable 'max' to 1 for the max()-
1648 ** aggregate, or 0 for min().-
1649 */-
1650 max = sqlite3_user_data(context)!=0;-
1651 cmp = sqlite3MemCompare(pBest, pArg, pColl);-
1652 if( (max && cmp<0) || (!max && cmp>0) ){
maxDescription
TRUEevaluated 195255 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 43813 times by 1 test
Evaluated by:
  • Self test (438)
cmp<0Description
TRUEevaluated 162246 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 33009 times by 1 test
Evaluated by:
  • Self test (438)
!maxDescription
TRUEevaluated 43813 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 33009 times by 1 test
Evaluated by:
  • Self test (438)
cmp>0Description
TRUEevaluated 7551 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 36262 times by 1 test
Evaluated by:
  • Self test (438)
7551-195255
1653 sqlite3VdbeMemCopy(pBest, pArg);-
1654 }else{
executed 169797 times by 1 test: end of block
Executed by:
  • Self test (438)
169797
1655 sqlite3SkipAccumulatorLoad(context);-
1656 }
executed 69271 times by 1 test: end of block
Executed by:
  • Self test (438)
69271
1657 }else{-
1658 pBest->db = sqlite3_context_db_handle(context);-
1659 sqlite3VdbeMemCopy(pBest, pArg);-
1660 }
executed 20109 times by 1 test: end of block
Executed by:
  • Self test (438)
20109
1661}-
1662static void minMaxValueFinalize(sqlite3_context *context, int bValue){-
1663 sqlite3_value *pRes;-
1664 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);-
1665 if( pRes ){
pResDescription
TRUEevaluated 22713 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1137 times by 1 test
Evaluated by:
  • Self test (438)
1137-22713
1666 if( pRes->flags ){
pRes->flagsDescription
TRUEevaluated 22694 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
19-22694
1667 sqlite3_result_value(context, pRes);-
1668 }
executed 22694 times by 1 test: end of block
Executed by:
  • Self test (438)
22694
1669 if( bValue==0 ) sqlite3VdbeMemRelease(pRes);
executed 20127 times by 1 test: sqlite3VdbeMemRelease(pRes);
Executed by:
  • Self test (438)
bValue==0Description
TRUEevaluated 20127 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2586 times by 1 test
Evaluated by:
  • Self test (438)
2586-20127
1670 }
executed 22713 times by 1 test: end of block
Executed by:
  • Self test (438)
22713
1671}
executed 23850 times by 1 test: end of block
Executed by:
  • Self test (438)
23850
1672#ifndef SQLITE_OMIT_WINDOWFUNC-
1673static void minMaxValue(sqlite3_context *context){-
1674 minMaxValueFinalize(context, 1);-
1675}
executed 2624 times by 1 test: end of block
Executed by:
  • Self test (438)
2624
1676#else-
1677# define minMaxValue 0-
1678#endif /* SQLITE_OMIT_WINDOWFUNC */-
1679static void minMaxFinalize(sqlite3_context *context){-
1680 minMaxValueFinalize(context, 0);-
1681}
executed 21226 times by 1 test: end of block
Executed by:
  • Self test (438)
21226
1682-
1683/*-
1684** group_concat(EXPR, ?SEPARATOR?)-
1685*/-
1686static void groupConcatStep(-
1687 sqlite3_context *context,-
1688 int argc,-
1689 sqlite3_value **argv-
1690){-
1691 const char *zVal;-
1692 StrAccum *pAccum;-
1693 const char *zSep;-
1694 int nVal, nSep;-
1695 assert( argc==1 || argc==2 );-
1696 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
executed 11 times by 1 test: return;
Executed by:
  • Self test (438)
sqlite3_value_type(argv[0])==5Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 45192 times by 1 test
Evaluated by:
  • Self test (438)
11-45192
1697 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));-
1698-
1699 if( pAccum ){
pAccumDescription
TRUEevaluated 45192 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-45192
1700 sqlite3 *db = sqlite3_context_db_handle(context);-
1701 int firstTerm = pAccum->mxAlloc==0;-
1702 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];-
1703 if( !firstTerm ){
!firstTermDescription
TRUEevaluated 30654 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14538 times by 1 test
Evaluated by:
  • Self test (438)
14538-30654
1704 if( argc==2 ){
argc==2Description
TRUEevaluated 21980 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8674 times by 1 test
Evaluated by:
  • Self test (438)
8674-21980
1705 zSep = (char*)sqlite3_value_text(argv[1]);-
1706 nSep = sqlite3_value_bytes(argv[1]);-
1707 }else{
executed 21980 times by 1 test: end of block
Executed by:
  • Self test (438)
21980
1708 zSep = ",";-
1709 nSep = 1;-
1710 }
executed 8674 times by 1 test: end of block
Executed by:
  • Self test (438)
8674
1711 if( zSep ) sqlite3_str_append(pAccum, zSep, nSep);
executed 30650 times by 1 test: sqlite3_str_append(pAccum, zSep, nSep);
Executed by:
  • Self test (438)
zSepDescription
TRUEevaluated 30650 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-30650
1712 }
executed 30654 times by 1 test: end of block
Executed by:
  • Self test (438)
30654
1713 zVal = (char*)sqlite3_value_text(argv[0]);-
1714 nVal = sqlite3_value_bytes(argv[0]);-
1715 if( zVal ) sqlite3_str_append(pAccum, zVal, nVal);
executed 45192 times by 1 test: sqlite3_str_append(pAccum, zVal, nVal);
Executed by:
  • Self test (438)
zValDescription
TRUEevaluated 45192 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-45192
1716 }
executed 45192 times by 1 test: end of block
Executed by:
  • Self test (438)
45192
1717}
executed 45192 times by 1 test: end of block
Executed by:
  • Self test (438)
45192
1718#ifndef SQLITE_OMIT_WINDOWFUNC-
1719static void groupConcatInverse(-
1720 sqlite3_context *context,-
1721 int argc,-
1722 sqlite3_value **argv-
1723){-
1724 int n;-
1725 StrAccum *pAccum;-
1726 assert( argc==1 || argc==2 );-
1727 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
never executed: return;
sqlite3_value_type(argv[0])==5Description
TRUEnever evaluated
FALSEevaluated 11783 times by 1 test
Evaluated by:
  • Self test (438)
0-11783
1728 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));-
1729 /* pAccum is always non-NULL since groupConcatStep() will have always-
1730 ** run frist to initialize it */-
1731 if( ALWAYS(pAccum) ){
(pAccum)Description
TRUEevaluated 11783 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-11783
1732 n = sqlite3_value_bytes(argv[0]);-
1733 if( argc==2 ){
argc==2Description
TRUEevaluated 11781 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-11781
1734 n += sqlite3_value_bytes(argv[1]);-
1735 }else{
executed 11781 times by 1 test: end of block
Executed by:
  • Self test (438)
11781
1736 n++;-
1737 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
1738 if( n>=(int)pAccum->nChar ){
n>=(int)pAccum->nCharDescription
TRUEevaluated 1640 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10143 times by 1 test
Evaluated by:
  • Self test (438)
1640-10143
1739 pAccum->nChar = 0;-
1740 }else{
executed 1640 times by 1 test: end of block
Executed by:
  • Self test (438)
1640
1741 pAccum->nChar -= n;-
1742 memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar);-
1743 }
executed 10143 times by 1 test: end of block
Executed by:
  • Self test (438)
10143
1744 if( pAccum->nChar==0 ) pAccum->mxAlloc = 0;
executed 1640 times by 1 test: pAccum->mxAlloc = 0;
Executed by:
  • Self test (438)
pAccum->nChar==0Description
TRUEevaluated 1640 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10143 times by 1 test
Evaluated by:
  • Self test (438)
1640-10143
1745 }
executed 11783 times by 1 test: end of block
Executed by:
  • Self test (438)
11783
1746}
executed 11783 times by 1 test: end of block
Executed by:
  • Self test (438)
11783
1747#else-
1748# define groupConcatInverse 0-
1749#endif /* SQLITE_OMIT_WINDOWFUNC */-
1750static void groupConcatFinalize(sqlite3_context *context){-
1751 StrAccum *pAccum;-
1752 pAccum = sqlite3_aggregate_context(context, 0);-
1753 if( pAccum ){
pAccumDescription
TRUEevaluated 13362 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 694 times by 1 test
Evaluated by:
  • Self test (438)
694-13362
1754 if( pAccum->accError==SQLITE_TOOBIG ){
pAccum->accError==18Description
TRUEnever evaluated
FALSEevaluated 13362 times by 1 test
Evaluated by:
  • Self test (438)
0-13362
1755 sqlite3_result_error_toobig(context);-
1756 }else if( pAccum->accError==SQLITE_NOMEM ){
never executed: end of block
pAccum->accError==7Description
TRUEnever evaluated
FALSEevaluated 13362 times by 1 test
Evaluated by:
  • Self test (438)
0-13362
1757 sqlite3_result_error_nomem(context);-
1758 }else{
never executed: end of block
0
1759 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, -
1760 sqlite3_free);-
1761 }
executed 13362 times by 1 test: end of block
Executed by:
  • Self test (438)
13362
1762 }-
1763}
executed 14056 times by 1 test: end of block
Executed by:
  • Self test (438)
14056
1764#ifndef SQLITE_OMIT_WINDOWFUNC-
1765static void groupConcatValue(sqlite3_context *context){-
1766 sqlite3_str *pAccum;-
1767 pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0);-
1768 if( pAccum ){
pAccumDescription
TRUEevaluated 21797 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8129 times by 1 test
Evaluated by:
  • Self test (438)
8129-21797
1769 if( pAccum->accError==SQLITE_TOOBIG ){
pAccum->accError==18Description
TRUEnever evaluated
FALSEevaluated 21797 times by 1 test
Evaluated by:
  • Self test (438)
0-21797
1770 sqlite3_result_error_toobig(context);-
1771 }else if( pAccum->accError==SQLITE_NOMEM ){
never executed: end of block
pAccum->accError==7Description
TRUEnever evaluated
FALSEevaluated 21797 times by 1 test
Evaluated by:
  • Self test (438)
0-21797
1772 sqlite3_result_error_nomem(context);-
1773 }else{
never executed: end of block
0
1774 const char *zText = sqlite3_str_value(pAccum);-
1775 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);-
1776 }
executed 21797 times by 1 test: end of block
Executed by:
  • Self test (438)
21797
1777 }-
1778}
executed 29926 times by 1 test: end of block
Executed by:
  • Self test (438)
29926
1779#else-
1780# define groupConcatValue 0-
1781#endif /* SQLITE_OMIT_WINDOWFUNC */-
1782-
1783/*-
1784** This routine does per-connection function registration. Most-
1785** of the built-in functions above are part of the global function set.-
1786** This routine only deals with those that are not global.-
1787*/-
1788void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){-
1789 int rc = sqlite3_overload_function(db, "MATCH", 2);-
1790 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );-
1791 if( rc==SQLITE_NOMEM ){
rc==7Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 31743 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32-31743
1792 sqlite3OomFault(db);-
1793 }
executed 32 times by 1 test: end of block
Executed by:
  • Self test (438)
32
1794}
executed 31775 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
31775
1795-
1796/*-
1797** Set the LIKEOPT flag on the 2-argument function with the given name.-
1798*/-
1799static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){-
1800 FuncDef *pDef;-
1801 pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);-
1802 if( ALWAYS(pDef) ){
(pDef)Description
TRUEevaluated 58 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-58
1803 pDef->funcFlags |= flagVal;-
1804 }
executed 58 times by 1 test: end of block
Executed by:
  • Self test (438)
58
1805}
executed 58 times by 1 test: end of block
Executed by:
  • Self test (438)
58
1806-
1807/*-
1808** Register the built-in LIKE and GLOB functions. The caseSensitive-
1809** parameter determines whether or not the LIKE operator is case-
1810** sensitive. GLOB is always case sensitive.-
1811*/-
1812void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){-
1813 struct compareInfo *pInfo;-
1814 if( caseSensitive ){
caseSensitiveDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
14-15
1815 pInfo = (struct compareInfo*)&likeInfoAlt;-
1816 }else{
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
1817 pInfo = (struct compareInfo*)&likeInfoNorm;-
1818 }
executed 15 times by 1 test: end of block
Executed by:
  • Self test (438)
15
1819 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);-
1820 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);-
1821 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, -
1822 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0);-
1823 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);-
1824 setLikeOptFlag(db, "like", -
1825 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);-
1826}
executed 29 times by 1 test: end of block
Executed by:
  • Self test (438)
29
1827-
1828/*-
1829** pExpr points to an expression which implements a function. If-
1830** it is appropriate to apply the LIKE optimization to that function-
1831** then set aWc[0] through aWc[2] to the wildcard characters and the-
1832** escape character and then return TRUE. If the function is not a -
1833** LIKE-style function then return FALSE.-
1834**-
1835** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE-
1836** operator if c is a string literal that is exactly one byte in length.-
1837** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is-
1838** no ESCAPE clause.-
1839**-
1840** *pIsNocase is set to true if uppercase and lowercase are equivalent for-
1841** the function (default for LIKE). If the function makes the distinction-
1842** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to-
1843** false.-
1844*/-
1845int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){-
1846 FuncDef *pDef;-
1847 int nExpr;-
1848 if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
pExpr->op!=157Description
TRUEevaluated 236797 times by 368 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 11590 times by 1 test
Evaluated by:
  • Self test (438)
!pExpr->x.pListDescription
TRUEnever evaluated
FALSEevaluated 11590 times by 1 test
Evaluated by:
  • Self test (438)
0-236797
1849 return 0;
executed 236797 times by 368 tests: return 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
236797
1850 }-
1851 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );-
1852 nExpr = pExpr->x.pList->nExpr;-
1853 pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);-
1854 if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
(pDef==0)Description
TRUEnever evaluated
FALSEevaluated 11590 times by 1 test
Evaluated by:
  • Self test (438)
(pDef->funcFlags & 0x0004)==0Description
TRUEevaluated 130 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11460 times by 1 test
Evaluated by:
  • Self test (438)
0-11590
1855 return 0;
executed 130 times by 1 test: return 0;
Executed by:
  • Self test (438)
130
1856 }-
1857 if( nExpr<3 ){
nExpr<3Description
TRUEevaluated 11445 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
15-11445
1858 aWc[3] = 0;-
1859 }else{
executed 11445 times by 1 test: end of block
Executed by:
  • Self test (438)
11445
1860 Expr *pEscape = pExpr->x.pList->a[2].pExpr;-
1861 char *zEscape;-
1862 if( pEscape->op!=TK_STRING ) return 0;
never executed: return 0;
pEscape->op!=106Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
0-15
1863 zEscape = pEscape->u.zToken;-
1864 if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • Self test (438)
zEscape[0]==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
zEscape[1]!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
1-14
1865 aWc[3] = zEscape[0];-
1866 }
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
13
1867-
1868 /* The memcpy() statement assumes that the wildcard characters are-
1869 ** the first three statements in the compareInfo structure. The-
1870 ** asserts() that follow verify that assumption-
1871 */-
1872 memcpy(aWc, pDef->pUserData, 3);-
1873 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );-
1874 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );-
1875 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );-
1876 *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0;-
1877 return 1;
executed 11458 times by 1 test: return 1;
Executed by:
  • Self test (438)
11458
1878}-
1879-
1880/*-
1881** All of the FuncDef structures in the aBuiltinFunc[] array above-
1882** to the global function hash table. This occurs at start-time (as-
1883** a consequence of calling sqlite3_initialize()).-
1884**-
1885** After this routine runs-
1886*/-
1887void sqlite3RegisterBuiltinFunctions(void){-
1888 /*-
1889 ** The following array holds FuncDef structures for all of the functions-
1890 ** defined in this file.-
1891 **-
1892 ** The array cannot be constant since changes are made to the-
1893 ** FuncDef.pHash elements at start-time. The elements of this array-
1894 ** are read-only after initialization is complete.-
1895 **-
1896 ** For peak efficiency, put the most frequently used function last.-
1897 */-
1898 static FuncDef aBuiltinFunc[] = {-
1899#ifdef SQLITE_SOUNDEX-
1900 FUNCTION(soundex, 1, 0, 0, soundexFunc ),-
1901#endif-
1902#ifndef SQLITE_OMIT_LOAD_EXTENSION-
1903 VFUNCTION(load_extension, 1, 0, 0, loadExt ),-
1904 VFUNCTION(load_extension, 2, 0, 0, loadExt ),-
1905#endif-
1906#if SQLITE_USER_AUTHENTICATION-
1907 FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),-
1908#endif-
1909#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS-
1910 DFUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),-
1911 DFUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),-
1912#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */-
1913 FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),-
1914 FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),-
1915 FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY),-
1916#ifdef SQLITE_DEBUG-
1917 FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY),-
1918#endif-
1919#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC-
1920 FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET|-
1921 SQLITE_FUNC_TYPEOF),-
1922#endif-
1923 FUNCTION(ltrim, 1, 1, 0, trimFunc ),-
1924 FUNCTION(ltrim, 2, 1, 0, trimFunc ),-
1925 FUNCTION(rtrim, 1, 2, 0, trimFunc ),-
1926 FUNCTION(rtrim, 2, 2, 0, trimFunc ),-
1927 FUNCTION(trim, 1, 3, 0, trimFunc ),-
1928 FUNCTION(trim, 2, 3, 0, trimFunc ),-
1929 FUNCTION(min, -1, 0, 1, minmaxFunc ),-
1930 FUNCTION(min, 0, 0, 1, 0 ),-
1931 WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,-
1932 SQLITE_FUNC_MINMAX ),-
1933 FUNCTION(max, -1, 1, 1, minmaxFunc ),-
1934 FUNCTION(max, 0, 1, 1, 0 ),-
1935 WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,-
1936 SQLITE_FUNC_MINMAX ),-
1937 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),-
1938 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),-
1939 FUNCTION(instr, 2, 0, 0, instrFunc ),-
1940 FUNCTION(printf, -1, 0, 0, printfFunc ),-
1941 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),-
1942 FUNCTION(char, -1, 0, 0, charFunc ),-
1943 FUNCTION(abs, 1, 0, 0, absFunc ),-
1944#ifndef SQLITE_OMIT_FLOATING_POINT-
1945 FUNCTION(round, 1, 0, 0, roundFunc ),-
1946 FUNCTION(round, 2, 0, 0, roundFunc ),-
1947#endif-
1948 FUNCTION(upper, 1, 0, 0, upperFunc ),-
1949 FUNCTION(lower, 1, 0, 0, lowerFunc ),-
1950 FUNCTION(hex, 1, 0, 0, hexFunc ),-
1951 FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),-
1952 VFUNCTION(random, 0, 0, 0, randomFunc ),-
1953 VFUNCTION(randomblob, 1, 0, 0, randomBlob ),-
1954 FUNCTION(nullif, 2, 0, 1, nullifFunc ),-
1955 DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ),-
1956 DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),-
1957 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),-
1958 FUNCTION(quote, 1, 0, 0, quoteFunc ),-
1959 VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),-
1960 VFUNCTION(changes, 0, 0, 0, changes ),-
1961 VFUNCTION(total_changes, 0, 0, 0, total_changes ),-
1962 FUNCTION(replace, 3, 0, 0, replaceFunc ),-
1963 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),-
1964 FUNCTION(substr, 2, 0, 0, substrFunc ),-
1965 FUNCTION(substr, 3, 0, 0, substrFunc ),-
1966 WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0),-
1967 WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0),-
1968 WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0),-
1969 WAGGREGATE(count, 0,0,0, countStep, -
1970 countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT ),-
1971 WAGGREGATE(count, 1,0,0, countStep, -
1972 countFinalize, countFinalize, countInverse, 0 ),-
1973 WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep, -
1974 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),-
1975 WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep, -
1976 groupConcatFinalize, groupConcatValue, groupConcatInverse, 0),-
1977 -
1978 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),-
1979#ifdef SQLITE_CASE_SENSITIVE_LIKE-
1980 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),-
1981 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),-
1982#else-
1983 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),-
1984 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),-
1985#endif-
1986#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION-
1987 FUNCTION(unknown, -1, 0, 0, unknownFunc ),-
1988#endif-
1989 FUNCTION(coalesce, 1, 0, 0, 0 ),-
1990 FUNCTION(coalesce, 0, 0, 0, 0 ),-
1991 FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQLITE_FUNC_COALESCE),-
1992 };-
1993#ifndef SQLITE_OMIT_ALTERTABLE-
1994 sqlite3AlterFunctions();-
1995#endif-
1996 sqlite3WindowFunctions();-
1997#if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4)-
1998 sqlite3AnalyzeFunctions();-
1999#endif-
2000 sqlite3RegisterDateTimeFunctions();-
2001 sqlite3InsertBuiltinFuncs(aBuiltinFunc, ArraySize(aBuiltinFunc));-
2002-
2003#if 0 /* Enable to print out how the built-in functions are hashed */-
2004 {-
2005 int i;-
2006 FuncDef *p;-
2007 for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){-
2008 printf("FUNC-HASH %02d:", i);-
2009 for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash){-
2010 int n = sqlite3Strlen30(p->zName);-
2011 int h = p->zName[0] + n;-
2012 printf(" %s(%d)", p->zName, h);-
2013 }-
2014 printf("\n");-
2015 }-
2016 }-
2017#endif-
2018}
executed 534 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
534
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2