blob: 98d8a908b8343c1bb8382324248b2f184da2aec2 [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**
drh06fbb732008-04-11 19:37:55 +000017** $Id: util.c,v 1.220 2008/04/11 19:37:56 drh Exp $
drh75897232000-05-29 14:26:00 +000018*/
19#include "sqliteInt.h"
20#include <stdarg.h>
21#include <ctype.h>
22
drh75897232000-05-29 14:26:00 +000023
24/*
danielk19776622cce2004-05-20 11:00:52 +000025** Set the most recent error code and error string for the sqlite
26** handle "db". The error code is set to "err_code".
27**
28** If it is not NULL, string zFormat specifies the format of the
29** error string in the style of the printf functions: The following
30** format characters are allowed:
31**
32** %s Insert a string
33** %z A string that should be freed after use
34** %d Insert an integer
35** %T Insert a token
36** %S Insert the first element of a SrcList
37**
38** zFormat and any string tokens that follow it are assumed to be
39** encoded in UTF-8.
40**
danielk19770bb8f362005-05-23 13:00:57 +000041** To clear the most recent error for sqlite handle "db", sqlite3Error
danielk19776622cce2004-05-20 11:00:52 +000042** should be called with err_code set to SQLITE_OK and zFormat set
43** to NULL.
44*/
drh9bb575f2004-09-06 17:24:11 +000045void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
danielk19771e536952007-08-16 10:09:01 +000046 if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
danielk1977bfd6cce2004-06-18 04:24:54 +000047 db->errCode = err_code;
48 if( zFormat ){
49 char *z;
50 va_list ap;
51 va_start(ap, zFormat);
danielk19771e536952007-08-16 10:09:01 +000052 z = sqlite3VMPrintf(db, zFormat, ap);
danielk1977bfd6cce2004-06-18 04:24:54 +000053 va_end(ap);
drhb21c8cd2007-08-21 19:33:56 +000054 sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, sqlite3_free);
danielk1977bfd6cce2004-06-18 04:24:54 +000055 }else{
drhb21c8cd2007-08-21 19:33:56 +000056 sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);
danielk1977bfd6cce2004-06-18 04:24:54 +000057 }
danielk19776622cce2004-05-20 11:00:52 +000058 }
59}
60
61/*
drhda93d232003-03-31 02:12:46 +000062** Add an error message to pParse->zErrMsg and increment pParse->nErr.
63** The following formatting characters are allowed:
64**
65** %s Insert a string
66** %z A string that should be freed after use
67** %d Insert an integer
68** %T Insert a token
69** %S Insert the first element of a SrcList
danielk19779e6db7d2004-06-21 08:18:51 +000070**
71** This function should be used to report any error that occurs whilst
72** compiling an SQL statement (i.e. within sqlite3_prepare()). The
73** last thing the sqlite3_prepare() function does is copy the error
74** stored by this function into the database handle using sqlite3Error().
75** Function sqlite3Error() should be used during statement execution
76** (sqlite3_step() etc.).
drhda93d232003-03-31 02:12:46 +000077*/
danielk19774adee202004-05-08 08:23:19 +000078void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
drhda93d232003-03-31 02:12:46 +000079 va_list ap;
drhda93d232003-03-31 02:12:46 +000080 pParse->nErr++;
danielk19771e536952007-08-16 10:09:01 +000081 sqlite3_free(pParse->zErrMsg);
drhda93d232003-03-31 02:12:46 +000082 va_start(ap, zFormat);
danielk19771e536952007-08-16 10:09:01 +000083 pParse->zErrMsg = sqlite3VMPrintf(pParse->db, zFormat, ap);
drhda93d232003-03-31 02:12:46 +000084 va_end(ap);
drh7e326c02007-05-15 16:51:37 +000085 if( pParse->rc==SQLITE_OK ){
86 pParse->rc = SQLITE_ERROR;
87 }
drhda93d232003-03-31 02:12:46 +000088}
89
90/*
drha0733842005-12-29 01:11:36 +000091** Clear the error message in pParse, if any
92*/
93void sqlite3ErrorClear(Parse *pParse){
danielk19771e536952007-08-16 10:09:01 +000094 sqlite3_free(pParse->zErrMsg);
drha0733842005-12-29 01:11:36 +000095 pParse->zErrMsg = 0;
96 pParse->nErr = 0;
97}
98
99/*
drh982cef72000-05-30 16:27:03 +0000100** Convert an SQL-style quoted string into a normal string by removing
101** the quote characters. The conversion is done in-place. If the
102** input does not begin with a quote character, then this routine
103** is a no-op.
drh2f4392f2002-02-14 21:42:51 +0000104**
105** 2002-Feb-14: This routine is extended to remove MS-Access style
106** brackets from around identifers. For example: "[a-b-c]" becomes
107** "a-b-c".
drh982cef72000-05-30 16:27:03 +0000108*/
danielk19774adee202004-05-08 08:23:19 +0000109void sqlite3Dequote(char *z){
drh982cef72000-05-30 16:27:03 +0000110 int quote;
111 int i, j;
drhdaffd0e2001-04-11 14:28:42 +0000112 if( z==0 ) return;
drh982cef72000-05-30 16:27:03 +0000113 quote = z[0];
drh2f4392f2002-02-14 21:42:51 +0000114 switch( quote ){
115 case '\'': break;
116 case '"': break;
drh3d946622005-08-13 18:15:42 +0000117 case '`': break; /* For MySQL compatibility */
118 case '[': quote = ']'; break; /* For MS SqlServer compatibility */
drh2f4392f2002-02-14 21:42:51 +0000119 default: return;
120 }
drh982cef72000-05-30 16:27:03 +0000121 for(i=1, j=0; z[i]; i++){
122 if( z[i]==quote ){
123 if( z[i+1]==quote ){
124 z[j++] = quote;
125 i++;
126 }else{
127 z[j++] = 0;
128 break;
129 }
130 }else{
131 z[j++] = z[i];
132 }
133 }
134}
135
drh75897232000-05-29 14:26:00 +0000136/* An array to map all upper-case characters into their corresponding
137** lower-case character.
138*/
drh4e5ffc52004-08-31 00:52:37 +0000139const unsigned char sqlite3UpperToLower[] = {
drh9b8f4472006-04-04 01:54:55 +0000140#ifdef SQLITE_ASCII
drh75897232000-05-29 14:26:00 +0000141 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
142 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
143 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
144 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
145 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
146 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
147 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
148 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
149 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
150 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
151 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
152 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
153 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
154 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
155 252,253,254,255
drh9b8f4472006-04-04 01:54:55 +0000156#endif
157#ifdef SQLITE_EBCDIC
158 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 0x */
159 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 1x */
160 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 2x */
161 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 3x */
162 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 4x */
163 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 5x */
164 96, 97, 66, 67, 68, 69, 70, 71, 72, 73,106,107,108,109,110,111, /* 6x */
165 112, 81, 82, 83, 84, 85, 86, 87, 88, 89,122,123,124,125,126,127, /* 7x */
166 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 8x */
167 144,145,146,147,148,149,150,151,152,153,154,155,156,157,156,159, /* 9x */
168 160,161,162,163,164,165,166,167,168,169,170,171,140,141,142,175, /* Ax */
169 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, /* Bx */
170 192,129,130,131,132,133,134,135,136,137,202,203,204,205,206,207, /* Cx */
171 208,145,146,147,148,149,150,151,152,153,218,219,220,221,222,223, /* Dx */
172 224,225,162,163,164,165,166,167,168,169,232,203,204,205,206,207, /* Ex */
173 239,240,241,242,243,244,245,246,247,248,249,219,220,221,222,255, /* Fx */
174#endif
drh75897232000-05-29 14:26:00 +0000175};
drh4e5ffc52004-08-31 00:52:37 +0000176#define UpperToLower sqlite3UpperToLower
drh75897232000-05-29 14:26:00 +0000177
178/*
drh967e8b72000-06-21 13:59:10 +0000179** Some systems have stricmp(). Others have strcasecmp(). Because
drh75897232000-05-29 14:26:00 +0000180** there is no consistency, we will define our own.
181*/
danielk19774adee202004-05-08 08:23:19 +0000182int sqlite3StrICmp(const char *zLeft, const char *zRight){
drh75897232000-05-29 14:26:00 +0000183 register unsigned char *a, *b;
184 a = (unsigned char *)zLeft;
185 b = (unsigned char *)zRight;
186 while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
drh2b735012004-07-15 13:23:21 +0000187 return UpperToLower[*a] - UpperToLower[*b];
drh75897232000-05-29 14:26:00 +0000188}
danielk19774adee202004-05-08 08:23:19 +0000189int sqlite3StrNICmp(const char *zLeft, const char *zRight, int N){
drh75897232000-05-29 14:26:00 +0000190 register unsigned char *a, *b;
191 a = (unsigned char *)zLeft;
192 b = (unsigned char *)zRight;
193 while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
danielk19770202b292004-06-09 09:55:16 +0000194 return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
drh75897232000-05-29 14:26:00 +0000195}
196
drha5c2ad02000-09-14 01:21:10 +0000197/*
drh7a7c7392001-11-24 00:31:46 +0000198** Return TRUE if z is a pure numeric string. Return FALSE if the
danielk19773d1bfea2004-05-14 11:00:53 +0000199** string contains any character which is not part of a number. If
200** the string is numeric and contains the '.' character, set *realnum
201** to TRUE (otherwise FALSE).
drh7a7c7392001-11-24 00:31:46 +0000202**
drh873cdcb2004-09-05 23:23:41 +0000203** An empty string is considered non-numeric.
drha5c2ad02000-09-14 01:21:10 +0000204*/
danielk19778a6b5412004-05-24 07:04:25 +0000205int sqlite3IsNumber(const char *z, int *realnum, u8 enc){
danielk1977dc8453f2004-06-12 00:42:34 +0000206 int incr = (enc==SQLITE_UTF8?1:2);
danielk197793cd0392004-06-30 02:35:51 +0000207 if( enc==SQLITE_UTF16BE ) z++;
danielk19778a6b5412004-05-24 07:04:25 +0000208 if( *z=='-' || *z=='+' ) z += incr;
drh4c755c02004-08-08 20:22:17 +0000209 if( !isdigit(*(u8*)z) ){
drhbb07e9a2003-04-16 02:17:35 +0000210 return 0;
drha5c2ad02000-09-14 01:21:10 +0000211 }
danielk19778a6b5412004-05-24 07:04:25 +0000212 z += incr;
danielk19773d1bfea2004-05-14 11:00:53 +0000213 if( realnum ) *realnum = 0;
drh4c755c02004-08-08 20:22:17 +0000214 while( isdigit(*(u8*)z) ){ z += incr; }
drh7a7c7392001-11-24 00:31:46 +0000215 if( *z=='.' ){
danielk19778a6b5412004-05-24 07:04:25 +0000216 z += incr;
drh4c755c02004-08-08 20:22:17 +0000217 if( !isdigit(*(u8*)z) ) return 0;
218 while( isdigit(*(u8*)z) ){ z += incr; }
danielk19773d1bfea2004-05-14 11:00:53 +0000219 if( realnum ) *realnum = 1;
drhbb07e9a2003-04-16 02:17:35 +0000220 }
221 if( *z=='e' || *z=='E' ){
danielk19778a6b5412004-05-24 07:04:25 +0000222 z += incr;
223 if( *z=='+' || *z=='-' ) z += incr;
drh4c755c02004-08-08 20:22:17 +0000224 if( !isdigit(*(u8*)z) ) return 0;
225 while( isdigit(*(u8*)z) ){ z += incr; }
danielk19773d1bfea2004-05-14 11:00:53 +0000226 if( realnum ) *realnum = 1;
drha5c2ad02000-09-14 01:21:10 +0000227 }
drh7a7c7392001-11-24 00:31:46 +0000228 return *z==0;
drha5c2ad02000-09-14 01:21:10 +0000229}
230
drh93a5c6b2003-12-23 02:17:35 +0000231/*
232** The string z[] is an ascii representation of a real number.
233** Convert this string to a double.
234**
235** This routine assumes that z[] really is a valid number. If it
236** is not, the result is undefined.
237**
238** This routine is used instead of the library atof() function because
239** the library atof() might want to use "," as the decimal point instead
240** of "." depending on how locale is set. But that would cause problems
241** for SQL. So this routine always uses "." regardless of locale.
242*/
drh487e2622005-06-25 18:42:14 +0000243int sqlite3AtoF(const char *z, double *pResult){
drhb37df7b2005-10-13 02:09:49 +0000244#ifndef SQLITE_OMIT_FLOATING_POINT
drh93a5c6b2003-12-23 02:17:35 +0000245 int sign = 1;
drh487e2622005-06-25 18:42:14 +0000246 const char *zBegin = z;
drh384eef32004-01-07 03:04:27 +0000247 LONGDOUBLE_TYPE v1 = 0.0;
danielk19772be2be92007-05-16 17:50:45 +0000248 while( isspace(*(u8*)z) ) z++;
drh93a5c6b2003-12-23 02:17:35 +0000249 if( *z=='-' ){
250 sign = -1;
251 z++;
252 }else if( *z=='+' ){
253 z++;
254 }
drh4c755c02004-08-08 20:22:17 +0000255 while( isdigit(*(u8*)z) ){
drh93a5c6b2003-12-23 02:17:35 +0000256 v1 = v1*10.0 + (*z - '0');
257 z++;
258 }
259 if( *z=='.' ){
drh384eef32004-01-07 03:04:27 +0000260 LONGDOUBLE_TYPE divisor = 1.0;
drh93a5c6b2003-12-23 02:17:35 +0000261 z++;
drh4c755c02004-08-08 20:22:17 +0000262 while( isdigit(*(u8*)z) ){
drh93a5c6b2003-12-23 02:17:35 +0000263 v1 = v1*10.0 + (*z - '0');
264 divisor *= 10.0;
265 z++;
266 }
267 v1 /= divisor;
268 }
269 if( *z=='e' || *z=='E' ){
270 int esign = 1;
271 int eval = 0;
drh384eef32004-01-07 03:04:27 +0000272 LONGDOUBLE_TYPE scale = 1.0;
drh93a5c6b2003-12-23 02:17:35 +0000273 z++;
274 if( *z=='-' ){
275 esign = -1;
276 z++;
277 }else if( *z=='+' ){
278 z++;
279 }
drh4c755c02004-08-08 20:22:17 +0000280 while( isdigit(*(u8*)z) ){
drh93a5c6b2003-12-23 02:17:35 +0000281 eval = eval*10 + *z - '0';
282 z++;
283 }
284 while( eval>=64 ){ scale *= 1.0e+64; eval -= 64; }
285 while( eval>=16 ){ scale *= 1.0e+16; eval -= 16; }
286 while( eval>=4 ){ scale *= 1.0e+4; eval -= 4; }
287 while( eval>=1 ){ scale *= 1.0e+1; eval -= 1; }
288 if( esign<0 ){
289 v1 /= scale;
290 }else{
291 v1 *= scale;
292 }
293 }
drh487e2622005-06-25 18:42:14 +0000294 *pResult = sign<0 ? -v1 : v1;
295 return z - zBegin;
drhb37df7b2005-10-13 02:09:49 +0000296#else
drhee858132007-05-08 20:37:38 +0000297 return sqlite3Atoi64(z, pResult);
drhb37df7b2005-10-13 02:09:49 +0000298#endif /* SQLITE_OMIT_FLOATING_POINT */
drh93a5c6b2003-12-23 02:17:35 +0000299}
300
drh202b2df2004-01-06 01:13:46 +0000301/*
drh217f4902007-06-25 17:28:00 +0000302** Compare the 19-character string zNum against the text representation
303** value 2^63: 9223372036854775808. Return negative, zero, or positive
304** if zNum is less than, equal to, or greater than the string.
305**
306** Unlike memcmp() this routine is guaranteed to return the difference
307** in the values of the last digit if the only difference is in the
308** last digit. So, for example,
309**
310** compare2pow63("9223372036854775800")
311**
312** will return -8.
313*/
314static int compare2pow63(const char *zNum){
315 int c;
316 c = memcmp(zNum,"922337203685477580",18);
317 if( c==0 ){
318 c = zNum[18] - '8';
319 }
320 return c;
321}
322
323
324/*
drhfec19aa2004-05-19 20:41:03 +0000325** Return TRUE if zNum is a 64-bit signed integer and write
326** the value of the integer into *pNum. If zNum is not an integer
327** or is an integer that is too large to be expressed with 64 bits,
drh217f4902007-06-25 17:28:00 +0000328** then return false.
drhfec19aa2004-05-19 20:41:03 +0000329**
330** When this routine was originally written it dealt with only
331** 32-bit numbers. At that time, it was much faster than the
332** atoi() library routine in RedHat 7.2.
333*/
drhb6a9ece2007-06-26 00:37:27 +0000334int sqlite3Atoi64(const char *zNum, i64 *pNum){
drhfec19aa2004-05-19 20:41:03 +0000335 i64 v = 0;
336 int neg;
337 int i, c;
danielk19772be2be92007-05-16 17:50:45 +0000338 while( isspace(*(u8*)zNum) ) zNum++;
drhfec19aa2004-05-19 20:41:03 +0000339 if( *zNum=='-' ){
340 neg = 1;
drheb2e1762004-05-27 01:53:56 +0000341 zNum++;
drhfec19aa2004-05-19 20:41:03 +0000342 }else if( *zNum=='+' ){
343 neg = 0;
drheb2e1762004-05-27 01:53:56 +0000344 zNum++;
drhfec19aa2004-05-19 20:41:03 +0000345 }else{
346 neg = 0;
347 }
drh217f4902007-06-25 17:28:00 +0000348 while( zNum[0]=='0' ){ zNum++; } /* Skip over leading zeros. Ticket #2454 */
drheb2e1762004-05-27 01:53:56 +0000349 for(i=0; (c=zNum[i])>='0' && c<='9'; i++){
drhfec19aa2004-05-19 20:41:03 +0000350 v = v*10 + c - '0';
351 }
352 *pNum = neg ? -v : v;
drh217f4902007-06-25 17:28:00 +0000353 if( c!=0 || i==0 || i>19 ){
354 /* zNum is empty or contains non-numeric text or is longer
355 ** than 19 digits (thus guaranting that it is too large) */
356 return 0;
357 }else if( i<19 ){
358 /* Less than 19 digits, so we know that it fits in 64 bits */
drhfec19aa2004-05-19 20:41:03 +0000359 return 1;
drh217f4902007-06-25 17:28:00 +0000360 }else{
361 /* 19-digit numbers must be no larger than 9223372036854775807 if positive
362 ** or 9223372036854775808 if negative. Note that 9223372036854665808
363 ** is 2^63. */
364 return compare2pow63(zNum)<neg;
drhfec19aa2004-05-19 20:41:03 +0000365 }
drhfec19aa2004-05-19 20:41:03 +0000366}
367
368/*
369** The string zNum represents an integer. There might be some other
370** information following the integer too, but that part is ignored.
371** If the integer that the prefix of zNum represents will fit in a
372** 64-bit signed integer, return TRUE. Otherwise return FALSE.
373**
374** This routine returns FALSE for the string -9223372036854775808 even that
375** that number will, in theory fit in a 64-bit integer. Positive
376** 9223373036854775808 will not fit in 64 bits. So it seems safer to return
377** false.
378*/
drh598f1342007-10-23 15:39:45 +0000379int sqlite3FitsIn64Bits(const char *zNum, int negFlag){
drhfec19aa2004-05-19 20:41:03 +0000380 int i, c;
drh217f4902007-06-25 17:28:00 +0000381 int neg = 0;
382 if( *zNum=='-' ){
383 neg = 1;
384 zNum++;
385 }else if( *zNum=='+' ){
386 zNum++;
387 }
drh598f1342007-10-23 15:39:45 +0000388 if( negFlag ) neg = 1-neg;
drh217f4902007-06-25 17:28:00 +0000389 while( *zNum=='0' ){
390 zNum++; /* Skip leading zeros. Ticket #2454 */
391 }
drhfec19aa2004-05-19 20:41:03 +0000392 for(i=0; (c=zNum[i])>='0' && c<='9'; i++){}
drh217f4902007-06-25 17:28:00 +0000393 if( i<19 ){
394 /* Guaranteed to fit if less than 19 digits */
395 return 1;
396 }else if( i>19 ){
397 /* Guaranteed to be too big if greater than 19 digits */
398 return 0;
399 }else{
400 /* Compare against 2^63. */
401 return compare2pow63(zNum)<neg;
402 }
drhfec19aa2004-05-19 20:41:03 +0000403}
404
drh217f4902007-06-25 17:28:00 +0000405/*
406** If zNum represents an integer that will fit in 32-bits, then set
407** *pValue to that integer and return true. Otherwise return false.
408**
409** Any non-numeric characters that following zNum are ignored.
drhb6a9ece2007-06-26 00:37:27 +0000410** This is different from sqlite3Atoi64() which requires the
drh217f4902007-06-25 17:28:00 +0000411** input number to be zero-terminated.
412*/
413int sqlite3GetInt32(const char *zNum, int *pValue){
414 sqlite_int64 v = 0;
415 int i, c;
416 int neg = 0;
417 if( zNum[0]=='-' ){
418 neg = 1;
419 zNum++;
420 }else if( zNum[0]=='+' ){
421 zNum++;
422 }
423 while( zNum[0]=='0' ) zNum++;
danielk1977b8cdbec2007-09-01 10:01:12 +0000424 for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
drh217f4902007-06-25 17:28:00 +0000425 v = v*10 + c;
426 }
danielk1977b8cdbec2007-09-01 10:01:12 +0000427
428 /* The longest decimal representation of a 32 bit integer is 10 digits:
429 **
430 ** 1234567890
431 ** 2^31 -> 2147483648
432 */
433 if( i>10 ){
drh217f4902007-06-25 17:28:00 +0000434 return 0;
435 }
436 if( v-neg>2147483647 ){
437 return 0;
438 }
439 if( neg ){
440 v = -v;
441 }
442 *pValue = (int)v;
443 return 1;
444}
drhdce2cbe2000-05-31 02:27:49 +0000445
446/*
drhd8820e82004-05-18 15:57:42 +0000447** The variable-length integer encoding is as follows:
448**
449** KEY:
450** A = 0xxxxxxx 7 bits of data and one flag bit
451** B = 1xxxxxxx 7 bits of data and one flag bit
452** C = xxxxxxxx 8 bits of data
453**
454** 7 bits - A
455** 14 bits - BA
456** 21 bits - BBA
457** 28 bits - BBBA
458** 35 bits - BBBBA
459** 42 bits - BBBBBA
460** 49 bits - BBBBBBA
461** 56 bits - BBBBBBBA
462** 64 bits - BBBBBBBBC
463*/
464
465/*
drh6d2fb152004-05-14 16:50:06 +0000466** Write a 64-bit variable-length integer to memory starting at p[0].
467** The length of data write will be between 1 and 9 bytes. The number
468** of bytes written is returned.
469**
470** A variable-length integer consists of the lower 7 bits of each byte
471** for all bytes that have the 8th bit set and one byte with the 8th
drhd8820e82004-05-18 15:57:42 +0000472** bit clear. Except, if we get to the 9th byte, it stores the full
473** 8 bits and is the last byte.
drh6d2fb152004-05-14 16:50:06 +0000474*/
danielk1977192ac1d2004-05-10 07:17:30 +0000475int sqlite3PutVarint(unsigned char *p, u64 v){
drh6d2fb152004-05-14 16:50:06 +0000476 int i, j, n;
477 u8 buf[10];
drhfe2093d2005-01-20 22:48:47 +0000478 if( v & (((u64)0xff000000)<<32) ){
drhd8820e82004-05-18 15:57:42 +0000479 p[8] = v;
480 v >>= 8;
481 for(i=7; i>=0; i--){
482 p[i] = (v & 0x7f) | 0x80;
483 v >>= 7;
484 }
485 return 9;
486 }
drh6d2fb152004-05-14 16:50:06 +0000487 n = 0;
danielk1977192ac1d2004-05-10 07:17:30 +0000488 do{
drh6d2fb152004-05-14 16:50:06 +0000489 buf[n++] = (v & 0x7f) | 0x80;
danielk1977192ac1d2004-05-10 07:17:30 +0000490 v >>= 7;
491 }while( v!=0 );
drh6d2fb152004-05-14 16:50:06 +0000492 buf[0] &= 0x7f;
drhd8820e82004-05-18 15:57:42 +0000493 assert( n<=9 );
drh6d2fb152004-05-14 16:50:06 +0000494 for(i=0, j=n-1; j>=0; j--, i++){
495 p[i] = buf[j];
496 }
497 return n;
danielk1977192ac1d2004-05-10 07:17:30 +0000498}
danielk19774adee202004-05-08 08:23:19 +0000499
drh6d2fb152004-05-14 16:50:06 +0000500/*
drh35b5a332008-04-05 18:41:42 +0000501** This routine is a faster version of sqlite3PutVarint() that only
502** works for 32-bit positive integers and which is optimized for
503** the common case of small integers.
504*/
505int sqlite3PutVarint32(unsigned char *p, u32 v){
506 if( (v & ~0x7f)==0 ){
507 p[0] = v;
508 return 1;
509 }else if( (v & ~0x3fff)==0 ){
510 p[0] = (v>>7) | 0x80;
511 p[1] = v & 0x7f;
512 return 2;
513 }else{
514 return sqlite3PutVarint(p, v);
515 }
516}
517
518/*
drh6d2fb152004-05-14 16:50:06 +0000519** Read a 64-bit variable-length integer from memory starting at p[0].
520** Return the number of bytes read. The value is stored in *v.
521*/
danielk197790e4d952004-05-10 10:05:53 +0000522int sqlite3GetVarint(const unsigned char *p, u64 *v){
drh6d2fb152004-05-14 16:50:06 +0000523 u32 x;
524 u64 x64;
525 int n;
526 unsigned char c;
drhe51c44f2004-05-30 20:46:09 +0000527 if( ((c = p[0]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +0000528 *v = c;
529 return 1;
530 }
531 x = c & 0x7f;
drhe51c44f2004-05-30 20:46:09 +0000532 if( ((c = p[1]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +0000533 *v = (x<<7) | c;
534 return 2;
535 }
536 x = (x<<7) | (c&0x7f);
drhe51c44f2004-05-30 20:46:09 +0000537 if( ((c = p[2]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +0000538 *v = (x<<7) | c;
539 return 3;
540 }
541 x = (x<<7) | (c&0x7f);
drhe51c44f2004-05-30 20:46:09 +0000542 if( ((c = p[3]) & 0x80)==0 ){
drh6d2fb152004-05-14 16:50:06 +0000543 *v = (x<<7) | c;
544 return 4;
545 }
546 x64 = (x<<7) | (c&0x7f);
547 n = 4;
548 do{
549 c = p[n++];
drhd8820e82004-05-18 15:57:42 +0000550 if( n==9 ){
551 x64 = (x64<<8) | c;
552 break;
553 }
drh6d2fb152004-05-14 16:50:06 +0000554 x64 = (x64<<7) | (c&0x7f);
555 }while( (c & 0x80)!=0 );
556 *v = x64;
557 return n;
558}
559
560/*
561** Read a 32-bit variable-length integer from memory starting at p[0].
562** Return the number of bytes read. The value is stored in *v.
563*/
564int sqlite3GetVarint32(const unsigned char *p, u32 *v){
drhe51c44f2004-05-30 20:46:09 +0000565 u32 x;
566 int n;
567 unsigned char c;
drhe6f85e72004-12-25 01:03:13 +0000568 if( ((signed char*)p)[0]>=0 ){
569 *v = p[0];
570 return 1;
571 }
572 x = p[0] & 0x7f;
573 if( ((signed char*)p)[1]>=0 ){
574 *v = (x<<7) | p[1];
575 return 2;
576 }
577 x = (x<<7) | (p[1] & 0x7f);
drh9d213ef2004-06-30 04:02:11 +0000578 n = 2;
drhe51c44f2004-05-30 20:46:09 +0000579 do{
580 x = (x<<7) | ((c = p[n++])&0x7f);
581 }while( (c & 0x80)!=0 && n<9 );
danielk1977192ac1d2004-05-10 07:17:30 +0000582 *v = x;
583 return n;
584}
585
drh6d2fb152004-05-14 16:50:06 +0000586/*
587** Return the number of bytes that will be needed to store the given
588** 64-bit integer.
589*/
danielk1977192ac1d2004-05-10 07:17:30 +0000590int sqlite3VarintLen(u64 v){
591 int i = 0;
592 do{
593 i++;
594 v >>= 7;
drhd8820e82004-05-18 15:57:42 +0000595 }while( v!=0 && i<9 );
danielk1977192ac1d2004-05-10 07:17:30 +0000596 return i;
597}
danielk1977c572ef72004-05-27 09:28:41 +0000598
drha3152892007-05-05 11:48:52 +0000599
600/*
danielk19771cc5ed82007-05-16 17:28:43 +0000601** Read or write a four-byte big-endian integer value.
drha3152892007-05-05 11:48:52 +0000602*/
drha3152892007-05-05 11:48:52 +0000603u32 sqlite3Get4byte(const u8 *p){
604 return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
605}
drha3152892007-05-05 11:48:52 +0000606void sqlite3Put4byte(unsigned char *p, u32 v){
607 p[0] = v>>24;
608 p[1] = v>>16;
609 p[2] = v>>8;
610 p[3] = v;
611}
612
613
614
drh34533152008-03-19 13:03:33 +0000615#if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
drh9d213ef2004-06-30 04:02:11 +0000616/*
617** Translate a single byte of Hex into an integer.
drh335d29d2008-04-04 15:12:21 +0000618** This routinen only works if h really is a valid hexadecimal
619** character: 0..9a..fA..F
drh9d213ef2004-06-30 04:02:11 +0000620*/
621static int hexToInt(int h){
drh06fbb732008-04-11 19:37:55 +0000622 assert( (h>='0' && h<='9') || (h>='a' && h<='f') || (h>='A' && h<='F') );
drh335d29d2008-04-04 15:12:21 +0000623#if !defined(SQLITE_EBCDIC)
drh06fbb732008-04-11 19:37:55 +0000624 h += 9*(1&(h>>6));
drh335d29d2008-04-04 15:12:21 +0000625#else
drh06fbb732008-04-11 19:37:55 +0000626 h += 9*(1&~(h>>4));
drh335d29d2008-04-04 15:12:21 +0000627#endif
drh06fbb732008-04-11 19:37:55 +0000628 return h & 0xf;
drh9d213ef2004-06-30 04:02:11 +0000629}
drh34533152008-03-19 13:03:33 +0000630#endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
drh9d213ef2004-06-30 04:02:11 +0000631
drhbf8aa332004-11-04 04:34:14 +0000632#if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
drh9d213ef2004-06-30 04:02:11 +0000633/*
634** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
635** value. Return a pointer to its binary value. Space to hold the
636** binary value has been obtained from malloc and must be freed by
637** the calling routine.
638*/
drhca48c902008-01-18 14:08:24 +0000639void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
danielk1977c572ef72004-05-27 09:28:41 +0000640 char *zBlob;
641 int i;
danielk1977c572ef72004-05-27 09:28:41 +0000642
drhca48c902008-01-18 14:08:24 +0000643 zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
644 n--;
drh76f80792006-07-11 12:40:25 +0000645 if( zBlob ){
646 for(i=0; i<n; i+=2){
647 zBlob[i/2] = (hexToInt(z[i])<<4) | hexToInt(z[i+1]);
648 }
drhca48c902008-01-18 14:08:24 +0000649 zBlob[i/2] = 0;
danielk1977c572ef72004-05-27 09:28:41 +0000650 }
danielk19773fd0a732004-05-27 13:35:19 +0000651 return zBlob;
danielk1977c572ef72004-05-27 09:28:41 +0000652}
drhbf8aa332004-11-04 04:34:14 +0000653#endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
drhfe63d1c2004-09-08 20:13:04 +0000654
drha3152892007-05-05 11:48:52 +0000655
drhfe63d1c2004-09-08 20:13:04 +0000656/*
drha3152892007-05-05 11:48:52 +0000657** Change the sqlite.magic from SQLITE_MAGIC_OPEN to SQLITE_MAGIC_BUSY.
658** Return an error (non-zero) if the magic was not SQLITE_MAGIC_OPEN
659** when this routine is called.
660**
661** This routine is called when entering an SQLite API. The SQLITE_MAGIC_OPEN
662** value indicates that the database connection passed into the API is
663** open and is not being used by another thread. By changing the value
664** to SQLITE_MAGIC_BUSY we indicate that the connection is in use.
665** sqlite3SafetyOff() below will change the value back to SQLITE_MAGIC_OPEN
666** when the API exits.
667**
668** This routine is a attempt to detect if two threads use the
669** same sqlite* pointer at the same time. There is a race
670** condition so it is possible that the error is not detected.
671** But usually the problem will be seen. The result will be an
672** error which can be used to debug the application that is
673** using SQLite incorrectly.
674**
675** Ticket #202: If db->magic is not a valid open value, take care not
676** to modify the db structure at all. It could be that db is a stale
677** pointer. In other words, it could be that there has been a prior
678** call to sqlite3_close(db) and db has been deallocated. And we do
679** not want to write into deallocated memory.
drhfe63d1c2004-09-08 20:13:04 +0000680*/
drh7e8b8482008-01-23 03:03:05 +0000681#ifdef SQLITE_DEBUG
drha3152892007-05-05 11:48:52 +0000682int sqlite3SafetyOn(sqlite3 *db){
683 if( db->magic==SQLITE_MAGIC_OPEN ){
684 db->magic = SQLITE_MAGIC_BUSY;
685 return 0;
686 }else if( db->magic==SQLITE_MAGIC_BUSY ){
687 db->magic = SQLITE_MAGIC_ERROR;
688 db->u1.isInterrupted = 1;
drhfe63d1c2004-09-08 20:13:04 +0000689 }
drha3152892007-05-05 11:48:52 +0000690 return 1;
drhfe63d1c2004-09-08 20:13:04 +0000691}
drh7e8b8482008-01-23 03:03:05 +0000692#endif
drha3152892007-05-05 11:48:52 +0000693
694/*
695** Change the magic from SQLITE_MAGIC_BUSY to SQLITE_MAGIC_OPEN.
696** Return an error (non-zero) if the magic was not SQLITE_MAGIC_BUSY
697** when this routine is called.
698*/
drh7e8b8482008-01-23 03:03:05 +0000699#ifdef SQLITE_DEBUG
drha3152892007-05-05 11:48:52 +0000700int sqlite3SafetyOff(sqlite3 *db){
701 if( db->magic==SQLITE_MAGIC_BUSY ){
702 db->magic = SQLITE_MAGIC_OPEN;
703 return 0;
drh7e8b8482008-01-23 03:03:05 +0000704 }else{
drha3152892007-05-05 11:48:52 +0000705 db->magic = SQLITE_MAGIC_ERROR;
706 db->u1.isInterrupted = 1;
707 return 1;
708 }
709}
drh7e8b8482008-01-23 03:03:05 +0000710#endif
drh55176252008-01-22 14:50:16 +0000711
712/*
713** Check to make sure we have a valid db pointer. This test is not
714** foolproof but it does provide some measure of protection against
715** misuse of the interface such as passing in db pointers that are
716** NULL or which have been previously closed. If this routine returns
drh7e8b8482008-01-23 03:03:05 +0000717** 1 it means that the db pointer is valid and 0 if it should not be
drh55176252008-01-22 14:50:16 +0000718** dereferenced for any reason. The calling function should invoke
719** SQLITE_MISUSE immediately.
drh7e8b8482008-01-23 03:03:05 +0000720**
721** sqlite3SafetyCheckOk() requires that the db pointer be valid for
722** use. sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
723** open properly and is not fit for general use but which can be
724** used as an argument to sqlite3_errmsg() or sqlite3_close().
drh55176252008-01-22 14:50:16 +0000725*/
drh7e8b8482008-01-23 03:03:05 +0000726int sqlite3SafetyCheckOk(sqlite3 *db){
drh55176252008-01-22 14:50:16 +0000727 int magic;
drh7e8b8482008-01-23 03:03:05 +0000728 if( db==0 ) return 0;
drh55176252008-01-22 14:50:16 +0000729 magic = db->magic;
drh7e8b8482008-01-23 03:03:05 +0000730 if( magic!=SQLITE_MAGIC_OPEN &&
731 magic!=SQLITE_MAGIC_BUSY ) return 0;
732 return 1;
733}
734int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
735 int magic;
736 if( db==0 ) return 0;
737 magic = db->magic;
738 if( magic!=SQLITE_MAGIC_SICK &&
739 magic!=SQLITE_MAGIC_OPEN &&
740 magic!=SQLITE_MAGIC_BUSY ) return 0;
741 return 1;
drh55176252008-01-22 14:50:16 +0000742}