blob: 00f20f6dc2d4b2a143f6c896cf06931e6ea52f20 [file] [log] [blame]
drh75897232000-05-29 14:26:00 +00001/*
drhb19a2bc2001-09-16 00:13:26 +00002** 2001 September 15
drh75897232000-05-29 14:26:00 +00003**
drhb19a2bc2001-09-16 00:13:26 +00004** The author disclaims copyright to this source code. In place of
5** a legal notice, here is a blessing:
drh75897232000-05-29 14:26:00 +00006**
drhb19a2bc2001-09-16 00:13:26 +00007** 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.
drh75897232000-05-29 14:26:00 +000010**
11*************************************************************************
12** Utility functions used throughout sqlite.
13**
14** This file contains functions for allocating memory, comparing
15** strings, and stuff like that.
16**
drhdf014892004-06-02 00:41:09 +000017** $Id: util.c,v 1.96 2004/06/02 00:41:10 drh Exp $
drh75897232000-05-29 14:26:00 +000018*/
19#include "sqliteInt.h"
20#include <stdarg.h>
21#include <ctype.h>
22
drh7c68d602000-10-11 19:28:51 +000023/*
drhdaffd0e2001-04-11 14:28:42 +000024** If malloc() ever fails, this global variable gets set to 1.
25** This causes the library to abort and never again function.
26*/
danielk19776f8a5032004-05-10 10:34:51 +000027int sqlite3_malloc_failed = 0;
drhdaffd0e2001-04-11 14:28:42 +000028
29/*
drh7c68d602000-10-11 19:28:51 +000030** If MEMORY_DEBUG is defined, then use versions of malloc() and
31** free() that track memory usage and check for buffer overruns.
32*/
drhdcc581c2000-05-30 13:44:19 +000033#ifdef MEMORY_DEBUG
34
drhdcc581c2000-05-30 13:44:19 +000035/*
drh8c82b352000-12-10 18:23:50 +000036** For keeping track of the number of mallocs and frees. This
37** is used to check for memory leaks.
38*/
danielk19776f8a5032004-05-10 10:34:51 +000039int sqlite3_nMalloc; /* Number of sqliteMalloc() calls */
40int sqlite3_nFree; /* Number of sqliteFree() calls */
41int sqlite3_iMallocFail; /* Fail sqliteMalloc() after this many calls */
drhd94a6692002-08-25 18:29:11 +000042#if MEMORY_DEBUG>1
43static int memcnt = 0;
44#endif
drh8c82b352000-12-10 18:23:50 +000045
drh4305d102003-07-30 12:34:12 +000046/*
47** Number of 32-bit guard words
48*/
49#define N_GUARD 1
drh8c82b352000-12-10 18:23:50 +000050
51/*
drhdcc581c2000-05-30 13:44:19 +000052** Allocate new memory and set it to zero. Return NULL if
53** no memory is available.
54*/
danielk19774adee202004-05-08 08:23:19 +000055void *sqlite3Malloc_(int n, int bZero, char *zFile, int line){
drhdcc581c2000-05-30 13:44:19 +000056 void *p;
57 int *pi;
drh4305d102003-07-30 12:34:12 +000058 int i, k;
danielk19776f8a5032004-05-10 10:34:51 +000059 if( sqlite3_iMallocFail>=0 ){
60 sqlite3_iMallocFail--;
61 if( sqlite3_iMallocFail==0 ){
62 sqlite3_malloc_failed++;
drh6d4abfb2001-10-22 02:58:08 +000063#if MEMORY_DEBUG>1
64 fprintf(stderr,"**** failed to allocate %d bytes at %s:%d\n",
65 n, zFile,line);
66#endif
danielk19776f8a5032004-05-10 10:34:51 +000067 sqlite3_iMallocFail--;
drhdaffd0e2001-04-11 14:28:42 +000068 return 0;
69 }
drh6e142f52000-06-08 13:36:40 +000070 }
drhb0729502001-03-14 12:35:57 +000071 if( n==0 ) return 0;
drhdcc581c2000-05-30 13:44:19 +000072 k = (n+sizeof(int)-1)/sizeof(int);
drh4305d102003-07-30 12:34:12 +000073 pi = malloc( (N_GUARD*2+1+k)*sizeof(int));
drhdaffd0e2001-04-11 14:28:42 +000074 if( pi==0 ){
danielk19776f8a5032004-05-10 10:34:51 +000075 sqlite3_malloc_failed++;
drhdaffd0e2001-04-11 14:28:42 +000076 return 0;
77 }
danielk19776f8a5032004-05-10 10:34:51 +000078 sqlite3_nMalloc++;
drh4305d102003-07-30 12:34:12 +000079 for(i=0; i<N_GUARD; i++) pi[i] = 0xdead1122;
80 pi[N_GUARD] = n;
81 for(i=0; i<N_GUARD; i++) pi[k+1+N_GUARD+i] = 0xdead3344;
82 p = &pi[N_GUARD+1];
drh8c1238a2003-01-02 14:43:55 +000083 memset(p, bZero==0, n);
drhc3c2fc92000-05-31 22:58:39 +000084#if MEMORY_DEBUG>1
drhd94a6692002-08-25 18:29:11 +000085 fprintf(stderr,"%06d malloc %d bytes at 0x%x from %s:%d\n",
86 ++memcnt, n, (int)p, zFile,line);
drhc3c2fc92000-05-31 22:58:39 +000087#endif
drhdcc581c2000-05-30 13:44:19 +000088 return p;
89}
90
91/*
drhed6c8672003-01-12 18:02:16 +000092** Check to see if the given pointer was obtained from sqliteMalloc()
93** and is able to hold at least N bytes. Raise an exception if this
94** is not the case.
95**
96** This routine is used for testing purposes only.
97*/
danielk19774adee202004-05-08 08:23:19 +000098void sqlite3CheckMemory(void *p, int N){
drhed6c8672003-01-12 18:02:16 +000099 int *pi = p;
drh4305d102003-07-30 12:34:12 +0000100 int n, i, k;
101 pi -= N_GUARD+1;
102 for(i=0; i<N_GUARD; i++){
103 assert( pi[i]==0xdead1122 );
104 }
105 n = pi[N_GUARD];
drhed6c8672003-01-12 18:02:16 +0000106 assert( N>=0 && N<n );
107 k = (n+sizeof(int)-1)/sizeof(int);
drh4305d102003-07-30 12:34:12 +0000108 for(i=0; i<N_GUARD; i++){
109 assert( pi[k+N_GUARD+1+i]==0xdead3344 );
110 }
drhed6c8672003-01-12 18:02:16 +0000111}
112
113/*
drhdcc581c2000-05-30 13:44:19 +0000114** Free memory previously obtained from sqliteMalloc()
115*/
danielk19774adee202004-05-08 08:23:19 +0000116void sqlite3Free_(void *p, char *zFile, int line){
drhdcc581c2000-05-30 13:44:19 +0000117 if( p ){
drh4305d102003-07-30 12:34:12 +0000118 int *pi, i, k, n;
drhdcc581c2000-05-30 13:44:19 +0000119 pi = p;
drh4305d102003-07-30 12:34:12 +0000120 pi -= N_GUARD+1;
danielk19776f8a5032004-05-10 10:34:51 +0000121 sqlite3_nFree++;
drh4305d102003-07-30 12:34:12 +0000122 for(i=0; i<N_GUARD; i++){
123 if( pi[i]!=0xdead1122 ){
124 fprintf(stderr,"Low-end memory corruption at 0x%x\n", (int)p);
125 return;
126 }
drhdcc581c2000-05-30 13:44:19 +0000127 }
drh4305d102003-07-30 12:34:12 +0000128 n = pi[N_GUARD];
drhdcc581c2000-05-30 13:44:19 +0000129 k = (n+sizeof(int)-1)/sizeof(int);
drh4305d102003-07-30 12:34:12 +0000130 for(i=0; i<N_GUARD; i++){
131 if( pi[k+N_GUARD+1+i]!=0xdead3344 ){
132 fprintf(stderr,"High-end memory corruption at 0x%x\n", (int)p);
133 return;
134 }
drhdcc581c2000-05-30 13:44:19 +0000135 }
drh4305d102003-07-30 12:34:12 +0000136 memset(pi, 0xff, (k+N_GUARD*2+1)*sizeof(int));
drhc3c2fc92000-05-31 22:58:39 +0000137#if MEMORY_DEBUG>1
drhd94a6692002-08-25 18:29:11 +0000138 fprintf(stderr,"%06d free %d bytes at 0x%x from %s:%d\n",
139 ++memcnt, n, (int)p, zFile,line);
drhc3c2fc92000-05-31 22:58:39 +0000140#endif
drhdcc581c2000-05-30 13:44:19 +0000141 free(pi);
142 }
143}
144
145/*
146** Resize a prior allocation. If p==0, then this routine
147** works just like sqliteMalloc(). If n==0, then this routine
148** works just like sqliteFree().
149*/
danielk19774adee202004-05-08 08:23:19 +0000150void *sqlite3Realloc_(void *oldP, int n, char *zFile, int line){
drh4305d102003-07-30 12:34:12 +0000151 int *oldPi, *pi, i, k, oldN, oldK;
drhdcc581c2000-05-30 13:44:19 +0000152 void *p;
153 if( oldP==0 ){
danielk19774adee202004-05-08 08:23:19 +0000154 return sqlite3Malloc_(n,1,zFile,line);
drhdcc581c2000-05-30 13:44:19 +0000155 }
156 if( n==0 ){
danielk19774adee202004-05-08 08:23:19 +0000157 sqlite3Free_(oldP,zFile,line);
drhdcc581c2000-05-30 13:44:19 +0000158 return 0;
159 }
160 oldPi = oldP;
drh4305d102003-07-30 12:34:12 +0000161 oldPi -= N_GUARD+1;
drhdcc581c2000-05-30 13:44:19 +0000162 if( oldPi[0]!=0xdead1122 ){
drh03ab7332003-08-26 11:29:07 +0000163 fprintf(stderr,"Low-end memory corruption in realloc at 0x%x\n", (int)oldP);
drh9bb61fe2000-06-05 16:01:39 +0000164 return 0;
drhdcc581c2000-05-30 13:44:19 +0000165 }
drh4305d102003-07-30 12:34:12 +0000166 oldN = oldPi[N_GUARD];
drhdcc581c2000-05-30 13:44:19 +0000167 oldK = (oldN+sizeof(int)-1)/sizeof(int);
drh4305d102003-07-30 12:34:12 +0000168 for(i=0; i<N_GUARD; i++){
169 if( oldPi[oldK+N_GUARD+1+i]!=0xdead3344 ){
drh03ab7332003-08-26 11:29:07 +0000170 fprintf(stderr,"High-end memory corruption in realloc at 0x%x\n",
171 (int)oldP);
drh4305d102003-07-30 12:34:12 +0000172 return 0;
173 }
drhdcc581c2000-05-30 13:44:19 +0000174 }
175 k = (n + sizeof(int) - 1)/sizeof(int);
drh4305d102003-07-30 12:34:12 +0000176 pi = malloc( (k+N_GUARD*2+1)*sizeof(int) );
drhdaffd0e2001-04-11 14:28:42 +0000177 if( pi==0 ){
danielk19776f8a5032004-05-10 10:34:51 +0000178 sqlite3_malloc_failed++;
drhdaffd0e2001-04-11 14:28:42 +0000179 return 0;
180 }
drh4305d102003-07-30 12:34:12 +0000181 for(i=0; i<N_GUARD; i++) pi[i] = 0xdead1122;
182 pi[N_GUARD] = n;
183 for(i=0; i<N_GUARD; i++) pi[k+N_GUARD+1+i] = 0xdead3344;
184 p = &pi[N_GUARD+1];
drhdcc581c2000-05-30 13:44:19 +0000185 memcpy(p, oldP, n>oldN ? oldN : n);
186 if( n>oldN ){
187 memset(&((char*)p)[oldN], 0, n-oldN);
188 }
drh4305d102003-07-30 12:34:12 +0000189 memset(oldPi, 0xab, (oldK+N_GUARD+2)*sizeof(int));
drhdcc581c2000-05-30 13:44:19 +0000190 free(oldPi);
drhc3c2fc92000-05-31 22:58:39 +0000191#if MEMORY_DEBUG>1
drhd94a6692002-08-25 18:29:11 +0000192 fprintf(stderr,"%06d realloc %d to %d bytes at 0x%x to 0x%x at %s:%d\n",
193 ++memcnt, oldN, n, (int)oldP, (int)p, zFile, line);
drhc3c2fc92000-05-31 22:58:39 +0000194#endif
drhdcc581c2000-05-30 13:44:19 +0000195 return p;
196}
drhc3c2fc92000-05-31 22:58:39 +0000197
198/*
199** Make a duplicate of a string into memory obtained from malloc()
200** Free the original string using sqliteFree().
drhdaffd0e2001-04-11 14:28:42 +0000201**
202** This routine is called on all strings that are passed outside of
203** the SQLite library. That way clients can free the string using free()
204** rather than having to call sqliteFree().
drhc3c2fc92000-05-31 22:58:39 +0000205*/
danielk19774adee202004-05-08 08:23:19 +0000206void sqlite3StrRealloc(char **pz){
drhc3c2fc92000-05-31 22:58:39 +0000207 char *zNew;
208 if( pz==0 || *pz==0 ) return;
209 zNew = malloc( strlen(*pz) + 1 );
drhdaffd0e2001-04-11 14:28:42 +0000210 if( zNew==0 ){
danielk19776f8a5032004-05-10 10:34:51 +0000211 sqlite3_malloc_failed++;
drhdaffd0e2001-04-11 14:28:42 +0000212 sqliteFree(*pz);
213 *pz = 0;
214 }
215 strcpy(zNew, *pz);
drhc3c2fc92000-05-31 22:58:39 +0000216 sqliteFree(*pz);
217 *pz = zNew;
218}
219
drh6e142f52000-06-08 13:36:40 +0000220/*
221** Make a copy of a string in memory obtained from sqliteMalloc()
222*/
danielk19774adee202004-05-08 08:23:19 +0000223char *sqlite3StrDup_(const char *z, char *zFile, int line){
drhff78bd22002-02-27 01:47:11 +0000224 char *zNew;
225 if( z==0 ) return 0;
danielk19774adee202004-05-08 08:23:19 +0000226 zNew = sqlite3Malloc_(strlen(z)+1, 0, zFile, line);
drh6e142f52000-06-08 13:36:40 +0000227 if( zNew ) strcpy(zNew, z);
228 return zNew;
229}
danielk19774adee202004-05-08 08:23:19 +0000230char *sqlite3StrNDup_(const char *z, int n, char *zFile, int line){
drhff78bd22002-02-27 01:47:11 +0000231 char *zNew;
232 if( z==0 ) return 0;
danielk19774adee202004-05-08 08:23:19 +0000233 zNew = sqlite3Malloc_(n+1, 0, zFile, line);
drh6e142f52000-06-08 13:36:40 +0000234 if( zNew ){
235 memcpy(zNew, z, n);
236 zNew[n] = 0;
237 }
238 return zNew;
239}
drh7c68d602000-10-11 19:28:51 +0000240#endif /* MEMORY_DEBUG */
drh6e142f52000-06-08 13:36:40 +0000241
drh7c68d602000-10-11 19:28:51 +0000242/*
243** The following versions of malloc() and free() are for use in a
244** normal build.
245*/
246#if !defined(MEMORY_DEBUG)
drh6e142f52000-06-08 13:36:40 +0000247
drh75897232000-05-29 14:26:00 +0000248/*
249** Allocate new memory and set it to zero. Return NULL if
drh8c1238a2003-01-02 14:43:55 +0000250** no memory is available. See also sqliteMallocRaw().
drh75897232000-05-29 14:26:00 +0000251*/
252void *sqliteMalloc(int n){
drh26780582002-10-20 15:46:22 +0000253 void *p;
drh8548a052003-10-22 22:15:27 +0000254 if( (p = malloc(n))==0 ){
danielk19776f8a5032004-05-10 10:34:51 +0000255 if( n>0 ) sqlite3_malloc_failed++;
drh8548a052003-10-22 22:15:27 +0000256 }else{
257 memset(p, 0, n);
drhdaffd0e2001-04-11 14:28:42 +0000258 }
drh75897232000-05-29 14:26:00 +0000259 return p;
260}
261
262/*
drh8c1238a2003-01-02 14:43:55 +0000263** Allocate new memory but do not set it to zero. Return NULL if
264** no memory is available. See also sqliteMalloc().
265*/
266void *sqliteMallocRaw(int n){
267 void *p;
drh8548a052003-10-22 22:15:27 +0000268 if( (p = malloc(n))==0 ){
danielk19776f8a5032004-05-10 10:34:51 +0000269 if( n>0 ) sqlite3_malloc_failed++;
drh8c1238a2003-01-02 14:43:55 +0000270 }
271 return p;
272}
273
274/*
drh75897232000-05-29 14:26:00 +0000275** Free memory previously obtained from sqliteMalloc()
276*/
277void sqliteFree(void *p){
drh305cea62000-05-29 17:44:25 +0000278 if( p ){
drh305cea62000-05-29 17:44:25 +0000279 free(p);
280 }
drh75897232000-05-29 14:26:00 +0000281}
282
283/*
284** Resize a prior allocation. If p==0, then this routine
285** works just like sqliteMalloc(). If n==0, then this routine
286** works just like sqliteFree().
287*/
288void *sqliteRealloc(void *p, int n){
drh6d4abfb2001-10-22 02:58:08 +0000289 void *p2;
drh75897232000-05-29 14:26:00 +0000290 if( p==0 ){
291 return sqliteMalloc(n);
292 }
293 if( n==0 ){
294 sqliteFree(p);
295 return 0;
296 }
drh6d4abfb2001-10-22 02:58:08 +0000297 p2 = realloc(p, n);
298 if( p2==0 ){
danielk19776f8a5032004-05-10 10:34:51 +0000299 sqlite3_malloc_failed++;
drhdaffd0e2001-04-11 14:28:42 +0000300 }
drh6d4abfb2001-10-22 02:58:08 +0000301 return p2;
drh75897232000-05-29 14:26:00 +0000302}
drh6e142f52000-06-08 13:36:40 +0000303
304/*
305** Make a copy of a string in memory obtained from sqliteMalloc()
306*/
307char *sqliteStrDup(const char *z){
drh567c6042002-02-28 04:10:29 +0000308 char *zNew;
309 if( z==0 ) return 0;
drh8c1238a2003-01-02 14:43:55 +0000310 zNew = sqliteMallocRaw(strlen(z)+1);
drh6e142f52000-06-08 13:36:40 +0000311 if( zNew ) strcpy(zNew, z);
312 return zNew;
313}
314char *sqliteStrNDup(const char *z, int n){
drh567c6042002-02-28 04:10:29 +0000315 char *zNew;
316 if( z==0 ) return 0;
drh8c1238a2003-01-02 14:43:55 +0000317 zNew = sqliteMallocRaw(n+1);
drh6e142f52000-06-08 13:36:40 +0000318 if( zNew ){
319 memcpy(zNew, z, n);
320 zNew[n] = 0;
321 }
322 return zNew;
323}
drh7c68d602000-10-11 19:28:51 +0000324#endif /* !defined(MEMORY_DEBUG) */
drh75897232000-05-29 14:26:00 +0000325
326/*
327** Create a string from the 2nd and subsequent arguments (up to the
328** first NULL argument), store the string in memory obtained from
329** sqliteMalloc() and make the pointer indicated by the 1st argument
jplyon02be20d2003-06-02 06:17:10 +0000330** point to that string. The 1st argument must either be NULL or
331** point to memory obtained from sqliteMalloc().
drh75897232000-05-29 14:26:00 +0000332*/
danielk19774adee202004-05-08 08:23:19 +0000333void sqlite3SetString(char **pz, const char *zFirst, ...){
drh75897232000-05-29 14:26:00 +0000334 va_list ap;
335 int nByte;
336 const char *z;
337 char *zResult;
338
339 if( pz==0 ) return;
340 nByte = strlen(zFirst) + 1;
341 va_start(ap, zFirst);
342 while( (z = va_arg(ap, const char*))!=0 ){
343 nByte += strlen(z);
344 }
345 va_end(ap);
346 sqliteFree(*pz);
drh8c1238a2003-01-02 14:43:55 +0000347 *pz = zResult = sqliteMallocRaw( nByte );
drh6d4abfb2001-10-22 02:58:08 +0000348 if( zResult==0 ){
349 return;
350 }
drh75897232000-05-29 14:26:00 +0000351 strcpy(zResult, zFirst);
352 zResult += strlen(zResult);
353 va_start(ap, zFirst);
354 while( (z = va_arg(ap, const char*))!=0 ){
355 strcpy(zResult, z);
356 zResult += strlen(zResult);
357 }
358 va_end(ap);
drh6e142f52000-06-08 13:36:40 +0000359#ifdef MEMORY_DEBUG
360#if MEMORY_DEBUG>1
361 fprintf(stderr,"string at 0x%x is %s\n", (int)*pz, *pz);
362#endif
363#endif
drh75897232000-05-29 14:26:00 +0000364}
365
366/*
danielk19774adee202004-05-08 08:23:19 +0000367** Works like sqlite3SetString, but each string is now followed by
drhe17a7e32001-04-04 21:10:18 +0000368** a length integer which specifies how much of the source string
jplyon02be20d2003-06-02 06:17:10 +0000369** to copy (in bytes). -1 means use the whole string. The 1st
370** argument must either be NULL or point to memory obtained from
371** sqliteMalloc().
drh75897232000-05-29 14:26:00 +0000372*/
danielk19774adee202004-05-08 08:23:19 +0000373void sqlite3SetNString(char **pz, ...){
drh75897232000-05-29 14:26:00 +0000374 va_list ap;
375 int nByte;
376 const char *z;
377 char *zResult;
378 int n;
379
380 if( pz==0 ) return;
381 nByte = 0;
382 va_start(ap, pz);
383 while( (z = va_arg(ap, const char*))!=0 ){
384 n = va_arg(ap, int);
385 if( n<=0 ) n = strlen(z);
386 nByte += n;
387 }
388 va_end(ap);
389 sqliteFree(*pz);
drh8c1238a2003-01-02 14:43:55 +0000390 *pz = zResult = sqliteMallocRaw( nByte + 1 );
drh75897232000-05-29 14:26:00 +0000391 if( zResult==0 ) return;
392 va_start(ap, pz);
393 while( (z = va_arg(ap, const char*))!=0 ){
394 n = va_arg(ap, int);
395 if( n<=0 ) n = strlen(z);
drh51846b52004-05-28 16:00:21 +0000396 memcpy(zResult, z, n);
drh75897232000-05-29 14:26:00 +0000397 zResult += n;
398 }
399 *zResult = 0;
drh6e142f52000-06-08 13:36:40 +0000400#ifdef MEMORY_DEBUG
401#if MEMORY_DEBUG>1
402 fprintf(stderr,"string at 0x%x is %s\n", (int)*pz, *pz);
403#endif
404#endif
drh75897232000-05-29 14:26:00 +0000405 va_end(ap);
406}
407
drh982cef72000-05-30 16:27:03 +0000408/*
danielk19776622cce2004-05-20 11:00:52 +0000409** Set the most recent error code and error string for the sqlite
410** handle "db". The error code is set to "err_code".
411**
412** If it is not NULL, string zFormat specifies the format of the
413** error string in the style of the printf functions: The following
414** format characters are allowed:
415**
416** %s Insert a string
417** %z A string that should be freed after use
418** %d Insert an integer
419** %T Insert a token
420** %S Insert the first element of a SrcList
421**
422** zFormat and any string tokens that follow it are assumed to be
423** encoded in UTF-8.
424**
425** To clear the most recent error for slqite handle "db", sqlite3Error
426** should be called with err_code set to SQLITE_OK and zFormat set
427** to NULL.
428*/
429void sqlite3Error(sqlite *db, int err_code, const char *zFormat, ...){
430 /* Free any existing error message. */
431 if( db->zErrMsg ){
432 sqliteFree(db->zErrMsg);
433 db->zErrMsg = 0;
434 }
435 if( db->zErrMsg16 ){
436 sqliteFree(db->zErrMsg16);
437 db->zErrMsg16 = 0;
438 }
439
440 /* Set the new error code and error message. */
441 db->errCode = err_code;
442 if( zFormat ){
443 va_list ap;
444 va_start(ap, zFormat);
445 db->zErrMsg = sqlite3VMPrintf(zFormat, ap);
446 va_end(ap);
447 }
448}
449
450/*
drhda93d232003-03-31 02:12:46 +0000451** Add an error message to pParse->zErrMsg and increment pParse->nErr.
452** The following formatting characters are allowed:
453**
454** %s Insert a string
455** %z A string that should be freed after use
456** %d Insert an integer
457** %T Insert a token
458** %S Insert the first element of a SrcList
459*/
danielk19774adee202004-05-08 08:23:19 +0000460void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
drhda93d232003-03-31 02:12:46 +0000461 va_list ap;
drhda93d232003-03-31 02:12:46 +0000462 pParse->nErr++;
drhda93d232003-03-31 02:12:46 +0000463 sqliteFree(pParse->zErrMsg);
drhda93d232003-03-31 02:12:46 +0000464 va_start(ap, zFormat);
danielk19774adee202004-05-08 08:23:19 +0000465 pParse->zErrMsg = sqlite3VMPrintf(zFormat, ap);
drhda93d232003-03-31 02:12:46 +0000466 va_end(ap);
drhda93d232003-03-31 02:12:46 +0000467}
468
469/*
drh982cef72000-05-30 16:27:03 +0000470** Convert an SQL-style quoted string into a normal string by removing
471** the quote characters. The conversion is done in-place. If the
472** input does not begin with a quote character, then this routine
473** is a no-op.
drh2f4392f2002-02-14 21:42:51 +0000474**
475** 2002-Feb-14: This routine is extended to remove MS-Access style
476** brackets from around identifers. For example: "[a-b-c]" becomes
477** "a-b-c".
drh982cef72000-05-30 16:27:03 +0000478*/
danielk19774adee202004-05-08 08:23:19 +0000479void sqlite3Dequote(char *z){
drh982cef72000-05-30 16:27:03 +0000480 int quote;
481 int i, j;
drhdaffd0e2001-04-11 14:28:42 +0000482 if( z==0 ) return;
drh982cef72000-05-30 16:27:03 +0000483 quote = z[0];
drh2f4392f2002-02-14 21:42:51 +0000484 switch( quote ){
485 case '\'': break;
486 case '"': break;
487 case '[': quote = ']'; break;
488 default: return;
489 }
drh982cef72000-05-30 16:27:03 +0000490 for(i=1, j=0; z[i]; i++){
491 if( z[i]==quote ){
492 if( z[i+1]==quote ){
493 z[j++] = quote;
494 i++;
495 }else{
496 z[j++] = 0;
497 break;
498 }
499 }else{
500 z[j++] = z[i];
501 }
502 }
503}
504
drh75897232000-05-29 14:26:00 +0000505/* An array to map all upper-case characters into their corresponding
506** lower-case character.
507*/
508static unsigned char UpperToLower[] = {
509 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
510 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
511 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
512 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
513 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
514 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
515 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
516 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
517 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
518 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
519 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
520 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
521 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
522 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
523 252,253,254,255
524};
525
526/*
527** This function computes a hash on the name of a keyword.
528** Case is not significant.
529*/
danielk19774adee202004-05-08 08:23:19 +0000530int sqlite3HashNoCase(const char *z, int n){
drh75897232000-05-29 14:26:00 +0000531 int h = 0;
drh75897232000-05-29 14:26:00 +0000532 if( n<=0 ) n = strlen(z);
drhdb5ed6d2001-09-18 22:17:44 +0000533 while( n > 0 ){
drh8cfbf082001-09-19 13:22:39 +0000534 h = (h<<3) ^ h ^ UpperToLower[(unsigned char)*z++];
drhdb5ed6d2001-09-18 22:17:44 +0000535 n--;
drh75897232000-05-29 14:26:00 +0000536 }
drh5364f602003-05-12 23:06:52 +0000537 return h & 0x7fffffff;
drh75897232000-05-29 14:26:00 +0000538}
539
540/*
drh967e8b72000-06-21 13:59:10 +0000541** Some systems have stricmp(). Others have strcasecmp(). Because
drh75897232000-05-29 14:26:00 +0000542** there is no consistency, we will define our own.
543*/
danielk19774adee202004-05-08 08:23:19 +0000544int sqlite3StrICmp(const char *zLeft, const char *zRight){
drh75897232000-05-29 14:26:00 +0000545 register unsigned char *a, *b;
546 a = (unsigned char *)zLeft;
547 b = (unsigned char *)zRight;
548 while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
549 return *a - *b;
550}
danielk19774adee202004-05-08 08:23:19 +0000551int sqlite3StrNICmp(const char *zLeft, const char *zRight, int N){
drh75897232000-05-29 14:26:00 +0000552 register unsigned char *a, *b;
553 a = (unsigned char *)zLeft;
554 b = (unsigned char *)zRight;
555 while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
drhbec2bf42000-05-29 23:48:22 +0000556 return N<0 ? 0 : *a - *b;
drh75897232000-05-29 14:26:00 +0000557}
558
drha5c2ad02000-09-14 01:21:10 +0000559/*
drh7a7c7392001-11-24 00:31:46 +0000560** Return TRUE if z is a pure numeric string. Return FALSE if the
danielk19773d1bfea2004-05-14 11:00:53 +0000561** string contains any character which is not part of a number. If
562** the string is numeric and contains the '.' character, set *realnum
563** to TRUE (otherwise FALSE).
drh7a7c7392001-11-24 00:31:46 +0000564**
drhbb07e9a2003-04-16 02:17:35 +0000565** Am empty string is considered non-numeric.
drha5c2ad02000-09-14 01:21:10 +0000566*/
danielk19778a6b5412004-05-24 07:04:25 +0000567int sqlite3IsNumber(const char *z, int *realnum, u8 enc){
568 int incr = (enc==TEXT_Utf8?1:2);
569 if( enc==TEXT_Utf16be ) z++;
570 if( *z=='-' || *z=='+' ) z += incr;
drh7a7c7392001-11-24 00:31:46 +0000571 if( !isdigit(*z) ){
drhbb07e9a2003-04-16 02:17:35 +0000572 return 0;
drha5c2ad02000-09-14 01:21:10 +0000573 }
danielk19778a6b5412004-05-24 07:04:25 +0000574 z += incr;
danielk19773d1bfea2004-05-14 11:00:53 +0000575 if( realnum ) *realnum = 0;
danielk19778a6b5412004-05-24 07:04:25 +0000576 while( isdigit(*z) ){ z += incr; }
drh7a7c7392001-11-24 00:31:46 +0000577 if( *z=='.' ){
danielk19778a6b5412004-05-24 07:04:25 +0000578 z += incr;
drh7a7c7392001-11-24 00:31:46 +0000579 if( !isdigit(*z) ) return 0;
danielk19778a6b5412004-05-24 07:04:25 +0000580 while( isdigit(*z) ){ z += incr; }
danielk19773d1bfea2004-05-14 11:00:53 +0000581 if( realnum ) *realnum = 1;
drhbb07e9a2003-04-16 02:17:35 +0000582 }
583 if( *z=='e' || *z=='E' ){
danielk19778a6b5412004-05-24 07:04:25 +0000584 z += incr;
585 if( *z=='+' || *z=='-' ) z += incr;
drhbb07e9a2003-04-16 02:17:35 +0000586 if( !isdigit(*z) ) return 0;
danielk19778a6b5412004-05-24 07:04:25 +0000587 while( isdigit(*z) ){ z += incr; }
danielk19773d1bfea2004-05-14 11:00:53 +0000588 if( realnum ) *realnum = 1;
drha5c2ad02000-09-14 01:21:10 +0000589 }
drh7a7c7392001-11-24 00:31:46 +0000590 return *z==0;
drha5c2ad02000-09-14 01:21:10 +0000591}
592
drh93a5c6b2003-12-23 02:17:35 +0000593/*
594** The string z[] is an ascii representation of a real number.
595** Convert this string to a double.
596**
597** This routine assumes that z[] really is a valid number. If it
598** is not, the result is undefined.
599**
600** This routine is used instead of the library atof() function because
601** the library atof() might want to use "," as the decimal point instead
602** of "." depending on how locale is set. But that would cause problems
603** for SQL. So this routine always uses "." regardless of locale.
604*/
danielk19774adee202004-05-08 08:23:19 +0000605double sqlite3AtoF(const char *z, const char **pzEnd){
drh93a5c6b2003-12-23 02:17:35 +0000606 int sign = 1;
drh384eef32004-01-07 03:04:27 +0000607 LONGDOUBLE_TYPE v1 = 0.0;
drh93a5c6b2003-12-23 02:17:35 +0000608 if( *z=='-' ){
609 sign = -1;
610 z++;
611 }else if( *z=='+' ){
612 z++;
613 }
614 while( isdigit(*z) ){
615 v1 = v1*10.0 + (*z - '0');
616 z++;
617 }
618 if( *z=='.' ){
drh384eef32004-01-07 03:04:27 +0000619 LONGDOUBLE_TYPE divisor = 1.0;
drh93a5c6b2003-12-23 02:17:35 +0000620 z++;
621 while( isdigit(*z) ){
622 v1 = v1*10.0 + (*z - '0');
623 divisor *= 10.0;
624 z++;
625 }
626 v1 /= divisor;
627 }
628 if( *z=='e' || *z=='E' ){
629 int esign = 1;
630 int eval = 0;
drh384eef32004-01-07 03:04:27 +0000631 LONGDOUBLE_TYPE scale = 1.0;
drh93a5c6b2003-12-23 02:17:35 +0000632 z++;
633 if( *z=='-' ){
634 esign = -1;
635 z++;
636 }else if( *z=='+' ){
637 z++;
638 }
639 while( isdigit(*z) ){
640 eval = eval*10 + *z - '0';
641 z++;
642 }
643 while( eval>=64 ){ scale *= 1.0e+64; eval -= 64; }
644 while( eval>=16 ){ scale *= 1.0e+16; eval -= 16; }
645 while( eval>=4 ){ scale *= 1.0e+4; eval -= 4; }
646 while( eval>=1 ){ scale *= 1.0e+1; eval -= 1; }
647 if( esign<0 ){
648 v1 /= scale;
649 }else{
650 v1 *= scale;
651 }
652 }
drheb9a9e82004-02-22 17:49:32 +0000653 if( pzEnd ) *pzEnd = z;
drh93a5c6b2003-12-23 02:17:35 +0000654 return sign<0 ? -v1 : v1;
655}
656
drh202b2df2004-01-06 01:13:46 +0000657/*
drhfec19aa2004-05-19 20:41:03 +0000658** Return TRUE if zNum is a 64-bit signed integer and write
659** the value of the integer into *pNum. If zNum is not an integer
660** or is an integer that is too large to be expressed with 64 bits,
661** then return false. If n>0 and the integer is string is not
662** exactly n bytes long, return false.
663**
664** When this routine was originally written it dealt with only
665** 32-bit numbers. At that time, it was much faster than the
666** atoi() library routine in RedHat 7.2.
667*/
drheb2e1762004-05-27 01:53:56 +0000668int sqlite3atoi64(const char *zNum, i64 *pNum){
drhfec19aa2004-05-19 20:41:03 +0000669 i64 v = 0;
670 int neg;
671 int i, c;
672 if( *zNum=='-' ){
673 neg = 1;
drheb2e1762004-05-27 01:53:56 +0000674 zNum++;
drhfec19aa2004-05-19 20:41:03 +0000675 }else if( *zNum=='+' ){
676 neg = 0;
drheb2e1762004-05-27 01:53:56 +0000677 zNum++;
drhfec19aa2004-05-19 20:41:03 +0000678 }else{
679 neg = 0;
680 }
drheb2e1762004-05-27 01:53:56 +0000681 for(i=0; (c=zNum[i])>='0' && c<='9'; i++){
drhfec19aa2004-05-19 20:41:03 +0000682 v = v*10 + c - '0';
683 }
684 *pNum = neg ? -v : v;
685 return c==0 && i>0 &&
686 (i<19 || (i==19 && memcmp(zNum,"9223372036854775807",19)<=0));
687}
688
689/*
drh202b2df2004-01-06 01:13:46 +0000690** The string zNum represents an integer. There might be some other
691** information following the integer too, but that part is ignored.
692** If the integer that the prefix of zNum represents will fit in a
693** 32-bit signed integer, return TRUE. Otherwise return FALSE.
694**
695** This routine returns FALSE for the string -2147483648 even that
696** that number will, in theory fit in a 32-bit integer. But positive
697** 2147483648 will not fit in 32 bits. So it seems safer to return
698** false.
699*/
drhfec19aa2004-05-19 20:41:03 +0000700static int sqlite3FitsIn32Bits(const char *zNum){
drh202b2df2004-01-06 01:13:46 +0000701 int i, c;
702 if( *zNum=='-' || *zNum=='+' ) zNum++;
703 for(i=0; (c=zNum[i])>='0' && c<='9'; i++){}
704 return i<10 || (i==10 && memcmp(zNum,"2147483647",10)<=0);
705}
706
drhfec19aa2004-05-19 20:41:03 +0000707/*
708** If zNum represents an integer that will fit in 32-bits, then set
709** *pValue to that integer and return true. Otherwise return false.
710*/
711int sqlite3GetInt32(const char *zNum, int *pValue){
712 if( sqlite3FitsIn32Bits(zNum) ){
713 *pValue = atoi(zNum);
714 return 1;
715 }
716 return 0;
717}
718
719/*
720** The string zNum represents an integer. There might be some other
721** information following the integer too, but that part is ignored.
722** If the integer that the prefix of zNum represents will fit in a
723** 64-bit signed integer, return TRUE. Otherwise return FALSE.
724**
725** This routine returns FALSE for the string -9223372036854775808 even that
726** that number will, in theory fit in a 64-bit integer. Positive
727** 9223373036854775808 will not fit in 64 bits. So it seems safer to return
728** false.
729*/
730int sqlite3FitsIn64Bits(const char *zNum){
731 int i, c;
732 if( *zNum=='-' || *zNum=='+' ) zNum++;
733 for(i=0; (c=zNum[i])>='0' && c<='9'; i++){}
734 return i<19 || (i==19 && memcmp(zNum,"9223372036854775807",19)<=0);
735}
736
737/*
738** If zNum represents an integer that will fit in 64-bits, then set
739** *pValue to that integer and return true. Otherwise return false.
740*/
741int sqlite3GetInt64(const char *zNum, i64 *pValue){
742 if( sqlite3FitsIn64Bits(zNum) ){
drhf4479502004-05-27 03:12:53 +0000743 sqlite3atoi64(zNum, pValue);
drhfec19aa2004-05-19 20:41:03 +0000744 return 1;
745 }
746 return 0;
747}
748
drh75897232000-05-29 14:26:00 +0000749/* This comparison routine is what we use for comparison operations
drha9e99ae2002-08-13 23:02:57 +0000750** between numeric values in an SQL expression. "Numeric" is a little
751** bit misleading here. What we mean is that the strings have a
752** type of "numeric" from the point of view of SQL. The strings
753** do not necessarily contain numbers. They could contain text.
drh7a7c7392001-11-24 00:31:46 +0000754**
drha9e99ae2002-08-13 23:02:57 +0000755** If the input strings both look like actual numbers then they
756** compare in numerical order. Numerical strings are always less
757** than non-numeric strings so if one input string looks like a
758** number and the other does not, then the one that looks like
759** a number is the smaller. Non-numeric strings compare in
760** lexigraphical order (the same order as strcmp()).
drh75897232000-05-29 14:26:00 +0000761*/
danielk19774adee202004-05-08 08:23:19 +0000762int sqlite3Compare(const char *atext, const char *btext){
drh75897232000-05-29 14:26:00 +0000763 int result;
drh0bce8352002-02-28 00:41:10 +0000764 int isNumA, isNumB;
765 if( atext==0 ){
drh8912d102002-05-26 21:34:58 +0000766 return -1;
drh0bce8352002-02-28 00:41:10 +0000767 }else if( btext==0 ){
768 return 1;
769 }
danielk19778a6b5412004-05-24 07:04:25 +0000770 isNumA = sqlite3IsNumber(atext, 0, TEXT_Utf8);
771 isNumB = sqlite3IsNumber(btext, 0, TEXT_Utf8);
drh7a7c7392001-11-24 00:31:46 +0000772 if( isNumA ){
773 if( !isNumB ){
774 result = -1;
775 }else{
776 double rA, rB;
danielk19774adee202004-05-08 08:23:19 +0000777 rA = sqlite3AtoF(atext, 0);
778 rB = sqlite3AtoF(btext, 0);
drh7a7c7392001-11-24 00:31:46 +0000779 if( rA<rB ){
780 result = -1;
781 }else if( rA>rB ){
782 result = +1;
783 }else{
784 result = 0;
drha5c2ad02000-09-14 01:21:10 +0000785 }
786 }
drh7a7c7392001-11-24 00:31:46 +0000787 }else if( isNumB ){
788 result = +1;
789 }else {
790 result = strcmp(atext, btext);
drha5c2ad02000-09-14 01:21:10 +0000791 }
drh7a7c7392001-11-24 00:31:46 +0000792 return result;
drh75897232000-05-29 14:26:00 +0000793}
drh75897232000-05-29 14:26:00 +0000794
795/*
drh16e59552000-07-31 11:57:37 +0000796** This routine is used for sorting. Each key is a list of one or more
drha9e99ae2002-08-13 23:02:57 +0000797** null-terminated elements. The list is terminated by two nulls in
798** a row. For example, the following text is a key with three elements
drh75897232000-05-29 14:26:00 +0000799**
drha9e99ae2002-08-13 23:02:57 +0000800** Aone\000Dtwo\000Athree\000\000
drh75897232000-05-29 14:26:00 +0000801**
drhda30d362002-08-26 19:55:07 +0000802** All elements begin with one of the characters "+-AD" and end with "\000"
803** with zero or more text elements in between. Except, NULL elements
804** consist of the special two-character sequence "N\000".
805**
drha9e99ae2002-08-13 23:02:57 +0000806** Both arguments will have the same number of elements. This routine
drh75897232000-05-29 14:26:00 +0000807** returns negative, zero, or positive if the first argument is less
808** than, equal to, or greater than the first. (Result is a-b).
809**
drha9e99ae2002-08-13 23:02:57 +0000810** Each element begins with one of the characters "+", "-", "A", "D".
drh38640e12002-07-05 21:42:36 +0000811** This character determines the sort order and collating sequence:
drh7a7c7392001-11-24 00:31:46 +0000812**
drh38640e12002-07-05 21:42:36 +0000813** + Sort numerically in ascending order
814** - Sort numerically in descending order
815** A Sort as strings in ascending order
816** D Sort as strings in descending order.
817**
818** For the "+" and "-" sorting, pure numeric strings (strings for which the
drh7a7c7392001-11-24 00:31:46 +0000819** isNum() function above returns TRUE) always compare less than strings
drha9e99ae2002-08-13 23:02:57 +0000820** that are not pure numerics. Non-numeric strings compare in memcmp()
danielk19774adee202004-05-08 08:23:19 +0000821** order. This is the same sort order as the sqlite3Compare() function
drha9e99ae2002-08-13 23:02:57 +0000822** above generates.
drh7a7c7392001-11-24 00:31:46 +0000823**
drha9e99ae2002-08-13 23:02:57 +0000824** The last point is a change from version 2.6.3 to version 2.7.0. In
825** version 2.6.3 and earlier, substrings of digits compare in numerical
826** and case was used only to break a tie.
827**
828** Elements that begin with 'A' or 'D' compare in memcmp() order regardless
829** of whether or not they look like a number.
830**
831** Note that the sort order imposed by the rules above is the same
drh7a7c7392001-11-24 00:31:46 +0000832** from the ordering defined by the "<", "<=", ">", and ">=" operators
drha9e99ae2002-08-13 23:02:57 +0000833** of expressions and for indices. This was not the case for version
834** 2.6.3 and earlier.
drh75897232000-05-29 14:26:00 +0000835*/
danielk19774adee202004-05-08 08:23:19 +0000836int sqlite3SortCompare(const char *a, const char *b){
drh75897232000-05-29 14:26:00 +0000837 int res = 0;
drh7a7c7392001-11-24 00:31:46 +0000838 int isNumA, isNumB;
drh294fb922002-09-30 01:31:21 +0000839 int dir = 0;
drh75897232000-05-29 14:26:00 +0000840
841 while( res==0 && *a && *b ){
drhda30d362002-08-26 19:55:07 +0000842 if( a[0]=='N' || b[0]=='N' ){
843 if( a[0]==b[0] ){
844 a += 2;
845 b += 2;
846 continue;
847 }
848 if( a[0]=='N' ){
849 dir = b[0];
850 res = -1;
851 }else{
852 dir = a[0];
853 res = +1;
854 }
drhf570f012002-05-31 15:51:25 +0000855 break;
856 }
drhda30d362002-08-26 19:55:07 +0000857 assert( a[0]==b[0] );
858 if( (dir=a[0])=='A' || a[0]=='D' ){
drh38640e12002-07-05 21:42:36 +0000859 res = strcmp(&a[1],&b[1]);
860 if( res ) break;
861 }else{
danielk19778a6b5412004-05-24 07:04:25 +0000862 isNumA = sqlite3IsNumber(&a[1], 0, TEXT_Utf8);
863 isNumB = sqlite3IsNumber(&b[1], 0, TEXT_Utf8);
drh38640e12002-07-05 21:42:36 +0000864 if( isNumA ){
865 double rA, rB;
866 if( !isNumB ){
867 res = -1;
868 break;
869 }
danielk19774adee202004-05-08 08:23:19 +0000870 rA = sqlite3AtoF(&a[1], 0);
871 rB = sqlite3AtoF(&b[1], 0);
drh38640e12002-07-05 21:42:36 +0000872 if( rA<rB ){
873 res = -1;
874 break;
875 }
876 if( rA>rB ){
877 res = +1;
878 break;
879 }
880 }else if( isNumB ){
drh7a7c7392001-11-24 00:31:46 +0000881 res = +1;
882 break;
drh38640e12002-07-05 21:42:36 +0000883 }else{
drha9e99ae2002-08-13 23:02:57 +0000884 res = strcmp(&a[1],&b[1]);
885 if( res ) break;
drh7a7c7392001-11-24 00:31:46 +0000886 }
drh75897232000-05-29 14:26:00 +0000887 }
drhcab20052003-04-18 17:45:14 +0000888 a += strlen(&a[1]) + 2;
889 b += strlen(&b[1]) + 2;
drh75897232000-05-29 14:26:00 +0000890 }
drhda30d362002-08-26 19:55:07 +0000891 if( dir=='-' || dir=='D' ) res = -res;
drh75897232000-05-29 14:26:00 +0000892 return res;
893}
drhdce2cbe2000-05-31 02:27:49 +0000894
drhdf014892004-06-02 00:41:09 +0000895#if 1 /* We are now always UTF-8 */
drhdce2cbe2000-05-31 02:27:49 +0000896/*
drh297ecf12001-04-05 15:57:13 +0000897** X is a pointer to the first byte of a UTF-8 character. Increment
898** X so that it points to the next character. This only works right
899** if X points to a well-formed UTF-8 string.
drhe17a7e32001-04-04 21:10:18 +0000900*/
drh297ecf12001-04-05 15:57:13 +0000901#define sqliteNextChar(X) while( (0xc0&*++(X))==0x80 ){}
drhdf014892004-06-02 00:41:09 +0000902#define sqliteCharVal(X) sqlite3ReadUtf8(X)
drhe17a7e32001-04-04 21:10:18 +0000903
drh297ecf12001-04-05 15:57:13 +0000904#else /* !defined(SQLITE_UTF8) */
drhe17a7e32001-04-04 21:10:18 +0000905/*
drh297ecf12001-04-05 15:57:13 +0000906** For iso8859 encoding, the next character is just the next byte.
drhe17a7e32001-04-04 21:10:18 +0000907*/
drh297ecf12001-04-05 15:57:13 +0000908#define sqliteNextChar(X) (++(X));
909#define sqliteCharVal(X) ((int)*(X))
drhe17a7e32001-04-04 21:10:18 +0000910
drh297ecf12001-04-05 15:57:13 +0000911#endif /* defined(SQLITE_UTF8) */
912
913
drhdf014892004-06-02 00:41:09 +0000914#if 1 /* We are now always UTF-8 */
drhe17a7e32001-04-04 21:10:18 +0000915/*
drh297ecf12001-04-05 15:57:13 +0000916** Convert the UTF-8 character to which z points into a 31-bit
917** UCS character. This only works right if z points to a well-formed
918** UTF-8 string.
drhe17a7e32001-04-04 21:10:18 +0000919*/
drhdf014892004-06-02 00:41:09 +0000920static int sqlite3ReadUtf8(const unsigned char *z){
drhe17a7e32001-04-04 21:10:18 +0000921 int c;
drh297ecf12001-04-05 15:57:13 +0000922 static const int initVal[] = {
923 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
924 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
925 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
926 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
927 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
928 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
929 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
930 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
931 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
932 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
933 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
934 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
935 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0, 1, 2,
936 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
937 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0,
938 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
939 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 254,
940 255,
941 };
942 c = initVal[*(z++)];
943 while( (0xc0&*z)==0x80 ){
944 c = (c<<6) | (0x3f&*(z++));
drhe17a7e32001-04-04 21:10:18 +0000945 }
946 return c;
947}
drh297ecf12001-04-05 15:57:13 +0000948#endif
drhe17a7e32001-04-04 21:10:18 +0000949
950/*
951** Compare two UTF-8 strings for equality where the first string can
drhdce2cbe2000-05-31 02:27:49 +0000952** potentially be a "glob" expression. Return true (1) if they
953** are the same and false (0) if they are different.
954**
955** Globbing rules:
956**
957** '*' Matches any sequence of zero or more characters.
958**
959** '?' Matches exactly one character.
960**
961** [...] Matches one character from the enclosed list of
962** characters.
963**
964** [^...] Matches one character not in the enclosed list.
965**
966** With the [...] and [^...] matching, a ']' character can be included
967** in the list by making it the first character after '[' or '^'. A
968** range of characters can be specified using '-'. Example:
969** "[a-z]" matches any single lower-case letter. To match a '-', make
970** it the last character in the list.
971**
972** This routine is usually quick, but can be N**2 in the worst case.
973**
974** Hints: to match '*' or '?', put them in "[]". Like this:
975**
976** abc[*]xyz Matches "abc*xyz" only
977*/
drhe17a7e32001-04-04 21:10:18 +0000978int
danielk19774adee202004-05-08 08:23:19 +0000979sqlite3GlobCompare(const unsigned char *zPattern, const unsigned char *zString){
drhe17a7e32001-04-04 21:10:18 +0000980 register int c;
drhdce2cbe2000-05-31 02:27:49 +0000981 int invert;
982 int seen;
drhe17a7e32001-04-04 21:10:18 +0000983 int c2;
drhdce2cbe2000-05-31 02:27:49 +0000984
985 while( (c = *zPattern)!=0 ){
986 switch( c ){
987 case '*':
drhe17a7e32001-04-04 21:10:18 +0000988 while( (c=zPattern[1]) == '*' || c == '?' ){
989 if( c=='?' ){
990 if( *zString==0 ) return 0;
drh297ecf12001-04-05 15:57:13 +0000991 sqliteNextChar(zString);
drhe17a7e32001-04-04 21:10:18 +0000992 }
993 zPattern++;
994 }
995 if( c==0 ) return 1;
drhe17a7e32001-04-04 21:10:18 +0000996 if( c=='[' ){
danielk19774adee202004-05-08 08:23:19 +0000997 while( *zString && sqlite3GlobCompare(&zPattern[1],zString)==0 ){
drh297ecf12001-04-05 15:57:13 +0000998 sqliteNextChar(zString);
drhdce2cbe2000-05-31 02:27:49 +0000999 }
1000 return *zString!=0;
1001 }else{
1002 while( (c2 = *zString)!=0 ){
1003 while( c2 != 0 && c2 != c ){ c2 = *++zString; }
drhc61053b2000-06-04 12:58:36 +00001004 if( c2==0 ) return 0;
danielk19774adee202004-05-08 08:23:19 +00001005 if( sqlite3GlobCompare(&zPattern[1],zString) ) return 1;
drh297ecf12001-04-05 15:57:13 +00001006 sqliteNextChar(zString);
drhdce2cbe2000-05-31 02:27:49 +00001007 }
1008 return 0;
1009 }
drhe17a7e32001-04-04 21:10:18 +00001010 case '?': {
drhdce2cbe2000-05-31 02:27:49 +00001011 if( *zString==0 ) return 0;
drh297ecf12001-04-05 15:57:13 +00001012 sqliteNextChar(zString);
drhe17a7e32001-04-04 21:10:18 +00001013 zPattern++;
drhdce2cbe2000-05-31 02:27:49 +00001014 break;
drhe17a7e32001-04-04 21:10:18 +00001015 }
1016 case '[': {
1017 int prior_c = 0;
drhdce2cbe2000-05-31 02:27:49 +00001018 seen = 0;
1019 invert = 0;
drh297ecf12001-04-05 15:57:13 +00001020 c = sqliteCharVal(zString);
drhdce2cbe2000-05-31 02:27:49 +00001021 if( c==0 ) return 0;
1022 c2 = *++zPattern;
1023 if( c2=='^' ){ invert = 1; c2 = *++zPattern; }
1024 if( c2==']' ){
1025 if( c==']' ) seen = 1;
1026 c2 = *++zPattern;
1027 }
drh297ecf12001-04-05 15:57:13 +00001028 while( (c2 = sqliteCharVal(zPattern))!=0 && c2!=']' ){
drhe17a7e32001-04-04 21:10:18 +00001029 if( c2=='-' && zPattern[1]!=']' && zPattern[1]!=0 && prior_c>0 ){
1030 zPattern++;
drh297ecf12001-04-05 15:57:13 +00001031 c2 = sqliteCharVal(zPattern);
drhe17a7e32001-04-04 21:10:18 +00001032 if( c>=prior_c && c<=c2 ) seen = 1;
1033 prior_c = 0;
drhdce2cbe2000-05-31 02:27:49 +00001034 }else if( c==c2 ){
1035 seen = 1;
drhe17a7e32001-04-04 21:10:18 +00001036 prior_c = c2;
1037 }else{
1038 prior_c = c2;
drhdce2cbe2000-05-31 02:27:49 +00001039 }
drh297ecf12001-04-05 15:57:13 +00001040 sqliteNextChar(zPattern);
drhdce2cbe2000-05-31 02:27:49 +00001041 }
1042 if( c2==0 || (seen ^ invert)==0 ) return 0;
drh297ecf12001-04-05 15:57:13 +00001043 sqliteNextChar(zString);
drhe17a7e32001-04-04 21:10:18 +00001044 zPattern++;
drhdce2cbe2000-05-31 02:27:49 +00001045 break;
drhe17a7e32001-04-04 21:10:18 +00001046 }
1047 default: {
drhdce2cbe2000-05-31 02:27:49 +00001048 if( c != *zString ) return 0;
drhe17a7e32001-04-04 21:10:18 +00001049 zPattern++;
1050 zString++;
drhdce2cbe2000-05-31 02:27:49 +00001051 break;
drhe17a7e32001-04-04 21:10:18 +00001052 }
drhdce2cbe2000-05-31 02:27:49 +00001053 }
drhdce2cbe2000-05-31 02:27:49 +00001054 }
1055 return *zString==0;
1056}
1057
1058/*
drhe17a7e32001-04-04 21:10:18 +00001059** Compare two UTF-8 strings for equality using the "LIKE" operator of
drhdce2cbe2000-05-31 02:27:49 +00001060** SQL. The '%' character matches any sequence of 0 or more
1061** characters and '_' matches any single character. Case is
1062** not significant.
1063**
danielk19774adee202004-05-08 08:23:19 +00001064** This routine is just an adaptation of the sqlite3GlobCompare()
drhdce2cbe2000-05-31 02:27:49 +00001065** routine above.
1066*/
1067int
danielk19774adee202004-05-08 08:23:19 +00001068sqlite3LikeCompare(const unsigned char *zPattern, const unsigned char *zString){
drhe17a7e32001-04-04 21:10:18 +00001069 register int c;
1070 int c2;
drhdce2cbe2000-05-31 02:27:49 +00001071
1072 while( (c = UpperToLower[*zPattern])!=0 ){
1073 switch( c ){
drhe17a7e32001-04-04 21:10:18 +00001074 case '%': {
1075 while( (c=zPattern[1]) == '%' || c == '_' ){
1076 if( c=='_' ){
1077 if( *zString==0 ) return 0;
drh297ecf12001-04-05 15:57:13 +00001078 sqliteNextChar(zString);
drhdce2cbe2000-05-31 02:27:49 +00001079 }
drhe17a7e32001-04-04 21:10:18 +00001080 zPattern++;
drhdce2cbe2000-05-31 02:27:49 +00001081 }
drhe17a7e32001-04-04 21:10:18 +00001082 if( c==0 ) return 1;
1083 c = UpperToLower[c];
1084 while( (c2=UpperToLower[*zString])!=0 ){
1085 while( c2 != 0 && c2 != c ){ c2 = UpperToLower[*++zString]; }
1086 if( c2==0 ) return 0;
danielk19774adee202004-05-08 08:23:19 +00001087 if( sqlite3LikeCompare(&zPattern[1],zString) ) return 1;
drh297ecf12001-04-05 15:57:13 +00001088 sqliteNextChar(zString);
drhe17a7e32001-04-04 21:10:18 +00001089 }
1090 return 0;
1091 }
1092 case '_': {
drhdce2cbe2000-05-31 02:27:49 +00001093 if( *zString==0 ) return 0;
drh297ecf12001-04-05 15:57:13 +00001094 sqliteNextChar(zString);
drhe17a7e32001-04-04 21:10:18 +00001095 zPattern++;
drhdce2cbe2000-05-31 02:27:49 +00001096 break;
drhe17a7e32001-04-04 21:10:18 +00001097 }
1098 default: {
drhdce2cbe2000-05-31 02:27:49 +00001099 if( c != UpperToLower[*zString] ) return 0;
drhe17a7e32001-04-04 21:10:18 +00001100 zPattern++;
1101 zString++;
drhdce2cbe2000-05-31 02:27:49 +00001102 break;
drhe17a7e32001-04-04 21:10:18 +00001103 }
drhdce2cbe2000-05-31 02:27:49 +00001104 }
drhdce2cbe2000-05-31 02:27:49 +00001105 }
1106 return *zString==0;
1107}
drh5e00f6c2001-09-13 13:46:56 +00001108
1109/*
drhc22bd472002-05-10 13:14:07 +00001110** Change the sqlite.magic from SQLITE_MAGIC_OPEN to SQLITE_MAGIC_BUSY.
1111** Return an error (non-zero) if the magic was not SQLITE_MAGIC_OPEN
1112** when this routine is called.
1113**
1114** This routine is a attempt to detect if two threads use the
1115** same sqlite* pointer at the same time. There is a race
1116** condition so it is possible that the error is not detected.
1117** But usually the problem will be seen. The result will be an
drhc27a1ce2002-06-14 20:58:45 +00001118** error which can be used to debug the application that is
drhc22bd472002-05-10 13:14:07 +00001119** using SQLite incorrectly.
drhe7e8bc72002-12-17 13:05:25 +00001120**
1121** Ticket #202: If db->magic is not a valid open value, take care not
1122** to modify the db structure at all. It could be that db is a stale
1123** pointer. In other words, it could be that there has been a prior
danielk19776f8a5032004-05-10 10:34:51 +00001124** call to sqlite3_close(db) and db has been deallocated. And we do
drhe7e8bc72002-12-17 13:05:25 +00001125** not want to write into deallocated memory.
drh5e00f6c2001-09-13 13:46:56 +00001126*/
danielk19774adee202004-05-08 08:23:19 +00001127int sqlite3SafetyOn(sqlite *db){
drhc22bd472002-05-10 13:14:07 +00001128 if( db->magic==SQLITE_MAGIC_OPEN ){
1129 db->magic = SQLITE_MAGIC_BUSY;
1130 return 0;
drh94e92032003-02-16 22:21:32 +00001131 }else if( db->magic==SQLITE_MAGIC_BUSY || db->magic==SQLITE_MAGIC_ERROR
1132 || db->want_to_close ){
drhc22bd472002-05-10 13:14:07 +00001133 db->magic = SQLITE_MAGIC_ERROR;
1134 db->flags |= SQLITE_Interrupt;
drh5e00f6c2001-09-13 13:46:56 +00001135 }
drhe7e8bc72002-12-17 13:05:25 +00001136 return 1;
drhc22bd472002-05-10 13:14:07 +00001137}
1138
1139/*
1140** Change the magic from SQLITE_MAGIC_BUSY to SQLITE_MAGIC_OPEN.
1141** Return an error (non-zero) if the magic was not SQLITE_MAGIC_BUSY
1142** when this routine is called.
1143*/
danielk19774adee202004-05-08 08:23:19 +00001144int sqlite3SafetyOff(sqlite *db){
drhc22bd472002-05-10 13:14:07 +00001145 if( db->magic==SQLITE_MAGIC_BUSY ){
1146 db->magic = SQLITE_MAGIC_OPEN;
1147 return 0;
drh94e92032003-02-16 22:21:32 +00001148 }else if( db->magic==SQLITE_MAGIC_OPEN || db->magic==SQLITE_MAGIC_ERROR
1149 || db->want_to_close ){
drhc22bd472002-05-10 13:14:07 +00001150 db->magic = SQLITE_MAGIC_ERROR;
1151 db->flags |= SQLITE_Interrupt;
drhc22bd472002-05-10 13:14:07 +00001152 }
drhe7e8bc72002-12-17 13:05:25 +00001153 return 1;
drhc22bd472002-05-10 13:14:07 +00001154}
1155
1156/*
danielk19776f8a5032004-05-10 10:34:51 +00001157** Check to make sure we are not currently executing an sqlite3_exec().
1158** If we are currently in an sqlite3_exec(), return true and set
drhc22bd472002-05-10 13:14:07 +00001159** sqlite.magic to SQLITE_MAGIC_ERROR. This will cause a complete
1160** shutdown of the database.
1161**
1162** This routine is used to try to detect when API routines are called
1163** at the wrong time or in the wrong sequence.
1164*/
danielk19774adee202004-05-08 08:23:19 +00001165int sqlite3SafetyCheck(sqlite *db){
drh326dce72003-01-29 14:06:07 +00001166 if( db->pVdbe!=0 ){
drhc22bd472002-05-10 13:14:07 +00001167 db->magic = SQLITE_MAGIC_ERROR;
1168 return 1;
1169 }
1170 return 0;
drh5e00f6c2001-09-13 13:46:56 +00001171}
danielk19774adee202004-05-08 08:23:19 +00001172
drh6d2fb152004-05-14 16:50:06 +00001173/*
drhd8820e82004-05-18 15:57:42 +00001174** The variable-length integer encoding is as follows:
1175**
1176** KEY:
1177** A = 0xxxxxxx 7 bits of data and one flag bit
1178** B = 1xxxxxxx 7 bits of data and one flag bit
1179** C = xxxxxxxx 8 bits of data
1180**
1181** 7 bits - A
1182** 14 bits - BA
1183** 21 bits - BBA
1184** 28 bits - BBBA
1185** 35 bits - BBBBA
1186** 42 bits - BBBBBA
1187** 49 bits - BBBBBBA
1188** 56 bits - BBBBBBBA
1189** 64 bits - BBBBBBBBC
1190*/
1191
1192/*
drh6d2fb152004-05-14 16:50:06 +00001193** Write a 64-bit variable-length integer to memory starting at p[0].
1194** The length of data write will be between 1 and 9 bytes. The number
1195** of bytes written is returned.
1196**
1197** A variable-length integer consists of the lower 7 bits of each byte
1198** for all bytes that have the 8th bit set and one byte with the 8th
drhd8820e82004-05-18 15:57:42 +00001199** bit clear. Except, if we get to the 9th byte, it stores the full
1200** 8 bits and is the last byte.
drh6d2fb152004-05-14 16:50:06 +00001201*/
danielk1977192ac1d2004-05-10 07:17:30 +00001202int sqlite3PutVarint(unsigned char *p, u64 v){
drh6d2fb152004-05-14 16:50:06 +00001203 int i, j, n;
1204 u8 buf[10];
drhd8820e82004-05-18 15:57:42 +00001205 if( v & 0xff00000000000000 ){
1206 p[8] = v;
1207 v >>= 8;
1208 for(i=7; i>=0; i--){
1209 p[i] = (v & 0x7f) | 0x80;
1210 v >>= 7;
1211 }
1212 return 9;
1213 }
drh6d2fb152004-05-14 16:50:06 +00001214 n = 0;
danielk1977192ac1d2004-05-10 07:17:30 +00001215 do{
drh6d2fb152004-05-14 16:50:06 +00001216 buf[n++] = (v & 0x7f) | 0x80;
danielk1977192ac1d2004-05-10 07:17:30 +00001217 v >>= 7;
1218 }while( v!=0 );
drh6d2fb152004-05-14 16:50:06 +00001219 buf[0] &= 0x7f;
drhd8820e82004-05-18 15:57:42 +00001220 assert( n<=9 );
drh6d2fb152004-05-14 16:50:06 +00001221 for(i=0, j=n-1; j>=0; j--, i++){
1222 p[i] = buf[j];
1223 }
1224 return n;
danielk1977192ac1d2004-05-10 07:17:30 +00001225}
danielk19774adee202004-05-08 08:23:19 +00001226
drh6d2fb152004-05-14 16:50:06 +00001227/*
1228** Read a 64-bit variable-length integer from memory starting at p[0].
1229** Return the number of bytes read. The value is stored in *v.
1230*/
danielk197790e4d952004-05-10 10:05:53 +00001231int sqlite3GetVarint(const unsigned char *p, u64 *v){
drh6d2fb152004-05-14 16:50:06 +00001232 u32 x;
1233 u64 x64;
1234 int n;
1235 unsigned char c;
drhe51c44f2004-05-30 20:46:09 +00001236 if( ((c = p[0]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +00001237 *v = c;
1238 return 1;
1239 }
1240 x = c & 0x7f;
drhe51c44f2004-05-30 20:46:09 +00001241 if( ((c = p[1]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +00001242 *v = (x<<7) | c;
1243 return 2;
1244 }
1245 x = (x<<7) | (c&0x7f);
drhe51c44f2004-05-30 20:46:09 +00001246 if( ((c = p[2]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +00001247 *v = (x<<7) | c;
1248 return 3;
1249 }
1250 x = (x<<7) | (c&0x7f);
drhe51c44f2004-05-30 20:46:09 +00001251 if( ((c = p[3]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +00001252 *v = (x<<7) | c;
1253 return 4;
1254 }
1255 x64 = (x<<7) | (c&0x7f);
1256 n = 4;
1257 do{
1258 c = p[n++];
drhd8820e82004-05-18 15:57:42 +00001259 if( n==9 ){
1260 x64 = (x64<<8) | c;
1261 break;
1262 }
drh6d2fb152004-05-14 16:50:06 +00001263 x64 = (x64<<7) | (c&0x7f);
1264 }while( (c & 0x80)!=0 );
1265 *v = x64;
1266 return n;
1267}
1268
1269/*
1270** Read a 32-bit variable-length integer from memory starting at p[0].
1271** Return the number of bytes read. The value is stored in *v.
1272*/
1273int sqlite3GetVarint32(const unsigned char *p, u32 *v){
drhe51c44f2004-05-30 20:46:09 +00001274 u32 x;
1275 int n;
1276 unsigned char c;
1277 if( ((c = p[0]) & 0x80)==0 ){
1278 *v = c;
1279 return 1;
danielk1977192ac1d2004-05-10 07:17:30 +00001280 }
drhe51c44f2004-05-30 20:46:09 +00001281 x = c & 0x7f;
1282 if( ((c = p[1]) & 0x80)==0 ){
1283 *v = (x<<7) | c;
1284 return 2;
1285 }
1286 x = (x<<7) | (c&0x7f);
1287 if( ((c = p[2]) & 0x80)==0 ){
1288 *v = (x<<7) | c;
1289 return 3;
1290 }
1291 x = (x<<7) | (c&0x7f);
1292 if( ((c = p[3]) & 0x80)==0 ){
1293 *v = (x<<7) | c;
1294 return 4;
1295 }
1296 n = 4;
1297 do{
1298 x = (x<<7) | ((c = p[n++])&0x7f);
1299 }while( (c & 0x80)!=0 && n<9 );
danielk1977192ac1d2004-05-10 07:17:30 +00001300 *v = x;
1301 return n;
1302}
1303
drh6d2fb152004-05-14 16:50:06 +00001304/*
1305** Return the number of bytes that will be needed to store the given
1306** 64-bit integer.
1307*/
danielk1977192ac1d2004-05-10 07:17:30 +00001308int sqlite3VarintLen(u64 v){
1309 int i = 0;
1310 do{
1311 i++;
1312 v >>= 7;
drhd8820e82004-05-18 15:57:42 +00001313 }while( v!=0 && i<9 );
danielk1977192ac1d2004-05-10 07:17:30 +00001314 return i;
1315}
danielk1977c572ef72004-05-27 09:28:41 +00001316
danielk1977cbb18d22004-05-28 11:37:27 +00001317void *sqlite3HexToBlob(const char *z){
danielk1977c572ef72004-05-27 09:28:41 +00001318 char *zBlob;
1319 int i;
1320 int n = strlen(z);
1321 if( n%2 ) return 0;
1322
1323 zBlob = (char *)sqliteMalloc(n/2);
1324
danielk19773fd0a732004-05-27 13:35:19 +00001325 for(i=0; i<n; i++){
danielk1977c572ef72004-05-27 09:28:41 +00001326 u8 c;
1327
1328 if ( z[i]>47 && z[i]<58 ) c = (z[i]-48)<<4;
1329 else if( z[i]>64 && z[i]<71 ) c = (z[i]-55)<<4;
1330 else if( z[i]>96 && z[i]<103 ) c = (z[i]-87)<<4;
1331 else {
1332 sqliteFree(zBlob);
1333 return 0;
1334 }
danielk19773fd0a732004-05-27 13:35:19 +00001335 i++;
danielk1977c572ef72004-05-27 09:28:41 +00001336 if ( z[i]>47 && z[i]<58 ) c += (z[i]-48);
1337 else if( z[i]>64 && z[i]<71 ) c += (z[i]-55);
1338 else if( z[i]>96 && z[i]<103 ) c += (z[i]-87);
1339 else {
1340 sqliteFree(zBlob);
1341 return 0;
1342 }
1343
1344 zBlob[i/2] = c;
1345 }
danielk19773fd0a732004-05-27 13:35:19 +00001346 return zBlob;
danielk1977c572ef72004-05-27 09:28:41 +00001347}