Annotation of embedaddon/sqlite3/src/util.c, revision 1.1.1.1
1.1 misho 1: /*
2: ** 2001 September 15
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: ** Utility functions used throughout sqlite.
13: **
14: ** This file contains functions for allocating memory, comparing
15: ** strings, and stuff like that.
16: **
17: */
18: #include "sqliteInt.h"
19: #include <stdarg.h>
20: #ifdef SQLITE_HAVE_ISNAN
21: # include <math.h>
22: #endif
23:
24: /*
25: ** Routine needed to support the testcase() macro.
26: */
27: #ifdef SQLITE_COVERAGE_TEST
28: void sqlite3Coverage(int x){
29: static unsigned dummy = 0;
30: dummy += (unsigned)x;
31: }
32: #endif
33:
34: #ifndef SQLITE_OMIT_FLOATING_POINT
35: /*
36: ** Return true if the floating point value is Not a Number (NaN).
37: **
38: ** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN.
39: ** Otherwise, we have our own implementation that works on most systems.
40: */
41: int sqlite3IsNaN(double x){
42: int rc; /* The value return */
43: #if !defined(SQLITE_HAVE_ISNAN)
44: /*
45: ** Systems that support the isnan() library function should probably
46: ** make use of it by compiling with -DSQLITE_HAVE_ISNAN. But we have
47: ** found that many systems do not have a working isnan() function so
48: ** this implementation is provided as an alternative.
49: **
50: ** This NaN test sometimes fails if compiled on GCC with -ffast-math.
51: ** On the other hand, the use of -ffast-math comes with the following
52: ** warning:
53: **
54: ** This option [-ffast-math] should never be turned on by any
55: ** -O option since it can result in incorrect output for programs
56: ** which depend on an exact implementation of IEEE or ISO
57: ** rules/specifications for math functions.
58: **
59: ** Under MSVC, this NaN test may fail if compiled with a floating-
60: ** point precision mode other than /fp:precise. From the MSDN
61: ** documentation:
62: **
63: ** The compiler [with /fp:precise] will properly handle comparisons
64: ** involving NaN. For example, x != x evaluates to true if x is NaN
65: ** ...
66: */
67: #ifdef __FAST_MATH__
68: # error SQLite will not work correctly with the -ffast-math option of GCC.
69: #endif
70: volatile double y = x;
71: volatile double z = y;
72: rc = (y!=z);
73: #else /* if defined(SQLITE_HAVE_ISNAN) */
74: rc = isnan(x);
75: #endif /* SQLITE_HAVE_ISNAN */
76: testcase( rc );
77: return rc;
78: }
79: #endif /* SQLITE_OMIT_FLOATING_POINT */
80:
81: /*
82: ** Compute a string length that is limited to what can be stored in
83: ** lower 30 bits of a 32-bit signed integer.
84: **
85: ** The value returned will never be negative. Nor will it ever be greater
86: ** than the actual length of the string. For very long strings (greater
87: ** than 1GiB) the value returned might be less than the true string length.
88: */
89: int sqlite3Strlen30(const char *z){
90: const char *z2 = z;
91: if( z==0 ) return 0;
92: while( *z2 ){ z2++; }
93: return 0x3fffffff & (int)(z2 - z);
94: }
95:
96: /*
97: ** Set the most recent error code and error string for the sqlite
98: ** handle "db". The error code is set to "err_code".
99: **
100: ** If it is not NULL, string zFormat specifies the format of the
101: ** error string in the style of the printf functions: The following
102: ** format characters are allowed:
103: **
104: ** %s Insert a string
105: ** %z A string that should be freed after use
106: ** %d Insert an integer
107: ** %T Insert a token
108: ** %S Insert the first element of a SrcList
109: **
110: ** zFormat and any string tokens that follow it are assumed to be
111: ** encoded in UTF-8.
112: **
113: ** To clear the most recent error for sqlite handle "db", sqlite3Error
114: ** should be called with err_code set to SQLITE_OK and zFormat set
115: ** to NULL.
116: */
117: void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
118: if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
119: db->errCode = err_code;
120: if( zFormat ){
121: char *z;
122: va_list ap;
123: va_start(ap, zFormat);
124: z = sqlite3VMPrintf(db, zFormat, ap);
125: va_end(ap);
126: sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
127: }else{
128: sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);
129: }
130: }
131: }
132:
133: /*
134: ** Add an error message to pParse->zErrMsg and increment pParse->nErr.
135: ** The following formatting characters are allowed:
136: **
137: ** %s Insert a string
138: ** %z A string that should be freed after use
139: ** %d Insert an integer
140: ** %T Insert a token
141: ** %S Insert the first element of a SrcList
142: **
143: ** This function should be used to report any error that occurs whilst
144: ** compiling an SQL statement (i.e. within sqlite3_prepare()). The
145: ** last thing the sqlite3_prepare() function does is copy the error
146: ** stored by this function into the database handle using sqlite3Error().
147: ** Function sqlite3Error() should be used during statement execution
148: ** (sqlite3_step() etc.).
149: */
150: void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
151: char *zMsg;
152: va_list ap;
153: sqlite3 *db = pParse->db;
154: va_start(ap, zFormat);
155: zMsg = sqlite3VMPrintf(db, zFormat, ap);
156: va_end(ap);
157: if( db->suppressErr ){
158: sqlite3DbFree(db, zMsg);
159: }else{
160: pParse->nErr++;
161: sqlite3DbFree(db, pParse->zErrMsg);
162: pParse->zErrMsg = zMsg;
163: pParse->rc = SQLITE_ERROR;
164: }
165: }
166:
167: /*
168: ** Convert an SQL-style quoted string into a normal string by removing
169: ** the quote characters. The conversion is done in-place. If the
170: ** input does not begin with a quote character, then this routine
171: ** is a no-op.
172: **
173: ** The input string must be zero-terminated. A new zero-terminator
174: ** is added to the dequoted string.
175: **
176: ** The return value is -1 if no dequoting occurs or the length of the
177: ** dequoted string, exclusive of the zero terminator, if dequoting does
178: ** occur.
179: **
180: ** 2002-Feb-14: This routine is extended to remove MS-Access style
181: ** brackets from around identifers. For example: "[a-b-c]" becomes
182: ** "a-b-c".
183: */
184: int sqlite3Dequote(char *z){
185: char quote;
186: int i, j;
187: if( z==0 ) return -1;
188: quote = z[0];
189: switch( quote ){
190: case '\'': break;
191: case '"': break;
192: case '`': break; /* For MySQL compatibility */
193: case '[': quote = ']'; break; /* For MS SqlServer compatibility */
194: default: return -1;
195: }
196: for(i=1, j=0; ALWAYS(z[i]); i++){
197: if( z[i]==quote ){
198: if( z[i+1]==quote ){
199: z[j++] = quote;
200: i++;
201: }else{
202: break;
203: }
204: }else{
205: z[j++] = z[i];
206: }
207: }
208: z[j] = 0;
209: return j;
210: }
211:
212: /* Convenient short-hand */
213: #define UpperToLower sqlite3UpperToLower
214:
215: /*
216: ** Some systems have stricmp(). Others have strcasecmp(). Because
217: ** there is no consistency, we will define our own.
218: **
219: ** IMPLEMENTATION-OF: R-20522-24639 The sqlite3_strnicmp() API allows
220: ** applications and extensions to compare the contents of two buffers
221: ** containing UTF-8 strings in a case-independent fashion, using the same
222: ** definition of case independence that SQLite uses internally when
223: ** comparing identifiers.
224: */
225: int sqlite3StrICmp(const char *zLeft, const char *zRight){
226: register unsigned char *a, *b;
227: a = (unsigned char *)zLeft;
228: b = (unsigned char *)zRight;
229: while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
230: return UpperToLower[*a] - UpperToLower[*b];
231: }
232: int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
233: register unsigned char *a, *b;
234: a = (unsigned char *)zLeft;
235: b = (unsigned char *)zRight;
236: while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
237: return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
238: }
239:
240: /*
241: ** The string z[] is an text representation of a real number.
242: ** Convert this string to a double and write it into *pResult.
243: **
244: ** The string z[] is length bytes in length (bytes, not characters) and
245: ** uses the encoding enc. The string is not necessarily zero-terminated.
246: **
247: ** Return TRUE if the result is a valid real number (or integer) and FALSE
248: ** if the string is empty or contains extraneous text. Valid numbers
249: ** are in one of these formats:
250: **
251: ** [+-]digits[E[+-]digits]
252: ** [+-]digits.[digits][E[+-]digits]
253: ** [+-].digits[E[+-]digits]
254: **
255: ** Leading and trailing whitespace is ignored for the purpose of determining
256: ** validity.
257: **
258: ** If some prefix of the input string is a valid number, this routine
259: ** returns FALSE but it still converts the prefix and writes the result
260: ** into *pResult.
261: */
262: int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
263: #ifndef SQLITE_OMIT_FLOATING_POINT
264: int incr = (enc==SQLITE_UTF8?1:2);
265: const char *zEnd = z + length;
266: /* sign * significand * (10 ^ (esign * exponent)) */
267: int sign = 1; /* sign of significand */
268: i64 s = 0; /* significand */
269: int d = 0; /* adjust exponent for shifting decimal point */
270: int esign = 1; /* sign of exponent */
271: int e = 0; /* exponent */
272: int eValid = 1; /* True exponent is either not used or is well-formed */
273: double result;
274: int nDigits = 0;
275:
276: *pResult = 0.0; /* Default return value, in case of an error */
277:
278: if( enc==SQLITE_UTF16BE ) z++;
279:
280: /* skip leading spaces */
281: while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
282: if( z>=zEnd ) return 0;
283:
284: /* get sign of significand */
285: if( *z=='-' ){
286: sign = -1;
287: z+=incr;
288: }else if( *z=='+' ){
289: z+=incr;
290: }
291:
292: /* skip leading zeroes */
293: while( z<zEnd && z[0]=='0' ) z+=incr, nDigits++;
294:
295: /* copy max significant digits to significand */
296: while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
297: s = s*10 + (*z - '0');
298: z+=incr, nDigits++;
299: }
300:
301: /* skip non-significant significand digits
302: ** (increase exponent by d to shift decimal left) */
303: while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
304: if( z>=zEnd ) goto do_atof_calc;
305:
306: /* if decimal point is present */
307: if( *z=='.' ){
308: z+=incr;
309: /* copy digits from after decimal to significand
310: ** (decrease exponent by d to shift decimal right) */
311: while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
312: s = s*10 + (*z - '0');
313: z+=incr, nDigits++, d--;
314: }
315: /* skip non-significant digits */
316: while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++;
317: }
318: if( z>=zEnd ) goto do_atof_calc;
319:
320: /* if exponent is present */
321: if( *z=='e' || *z=='E' ){
322: z+=incr;
323: eValid = 0;
324: if( z>=zEnd ) goto do_atof_calc;
325: /* get sign of exponent */
326: if( *z=='-' ){
327: esign = -1;
328: z+=incr;
329: }else if( *z=='+' ){
330: z+=incr;
331: }
332: /* copy digits to exponent */
333: while( z<zEnd && sqlite3Isdigit(*z) ){
334: e = e<10000 ? (e*10 + (*z - '0')) : 10000;
335: z+=incr;
336: eValid = 1;
337: }
338: }
339:
340: /* skip trailing spaces */
341: if( nDigits && eValid ){
342: while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
343: }
344:
345: do_atof_calc:
346: /* adjust exponent by d, and update sign */
347: e = (e*esign) + d;
348: if( e<0 ) {
349: esign = -1;
350: e *= -1;
351: } else {
352: esign = 1;
353: }
354:
355: /* if 0 significand */
356: if( !s ) {
357: /* In the IEEE 754 standard, zero is signed.
358: ** Add the sign if we've seen at least one digit */
359: result = (sign<0 && nDigits) ? -(double)0 : (double)0;
360: } else {
361: /* attempt to reduce exponent */
362: if( esign>0 ){
363: while( s<(LARGEST_INT64/10) && e>0 ) e--,s*=10;
364: }else{
365: while( !(s%10) && e>0 ) e--,s/=10;
366: }
367:
368: /* adjust the sign of significand */
369: s = sign<0 ? -s : s;
370:
371: /* if exponent, scale significand as appropriate
372: ** and store in result. */
373: if( e ){
374: double scale = 1.0;
375: /* attempt to handle extremely small/large numbers better */
376: if( e>307 && e<342 ){
377: while( e%308 ) { scale *= 1.0e+1; e -= 1; }
378: if( esign<0 ){
379: result = s / scale;
380: result /= 1.0e+308;
381: }else{
382: result = s * scale;
383: result *= 1.0e+308;
384: }
385: }else if( e>=342 ){
386: if( esign<0 ){
387: result = 0.0*s;
388: }else{
389: result = 1e308*1e308*s; /* Infinity */
390: }
391: }else{
392: /* 1.0e+22 is the largest power of 10 than can be
393: ** represented exactly. */
394: while( e%22 ) { scale *= 1.0e+1; e -= 1; }
395: while( e>0 ) { scale *= 1.0e+22; e -= 22; }
396: if( esign<0 ){
397: result = s / scale;
398: }else{
399: result = s * scale;
400: }
401: }
402: } else {
403: result = (double)s;
404: }
405: }
406:
407: /* store the result */
408: *pResult = result;
409:
410: /* return true if number and no extra non-whitespace chracters after */
411: return z>=zEnd && nDigits>0 && eValid;
412: #else
413: return !sqlite3Atoi64(z, pResult, length, enc);
414: #endif /* SQLITE_OMIT_FLOATING_POINT */
415: }
416:
417: /*
418: ** Compare the 19-character string zNum against the text representation
419: ** value 2^63: 9223372036854775808. Return negative, zero, or positive
420: ** if zNum is less than, equal to, or greater than the string.
421: ** Note that zNum must contain exactly 19 characters.
422: **
423: ** Unlike memcmp() this routine is guaranteed to return the difference
424: ** in the values of the last digit if the only difference is in the
425: ** last digit. So, for example,
426: **
427: ** compare2pow63("9223372036854775800", 1)
428: **
429: ** will return -8.
430: */
431: static int compare2pow63(const char *zNum, int incr){
432: int c = 0;
433: int i;
434: /* 012345678901234567 */
435: const char *pow63 = "922337203685477580";
436: for(i=0; c==0 && i<18; i++){
437: c = (zNum[i*incr]-pow63[i])*10;
438: }
439: if( c==0 ){
440: c = zNum[18*incr] - '8';
441: testcase( c==(-1) );
442: testcase( c==0 );
443: testcase( c==(+1) );
444: }
445: return c;
446: }
447:
448:
449: /*
450: ** Convert zNum to a 64-bit signed integer.
451: **
452: ** If the zNum value is representable as a 64-bit twos-complement
453: ** integer, then write that value into *pNum and return 0.
454: **
455: ** If zNum is exactly 9223372036854665808, return 2. This special
456: ** case is broken out because while 9223372036854665808 cannot be a
457: ** signed 64-bit integer, its negative -9223372036854665808 can be.
458: **
459: ** If zNum is too big for a 64-bit integer and is not
460: ** 9223372036854665808 then return 1.
461: **
462: ** length is the number of bytes in the string (bytes, not characters).
463: ** The string is not necessarily zero-terminated. The encoding is
464: ** given by enc.
465: */
466: int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
467: int incr = (enc==SQLITE_UTF8?1:2);
468: u64 u = 0;
469: int neg = 0; /* assume positive */
470: int i;
471: int c = 0;
472: const char *zStart;
473: const char *zEnd = zNum + length;
474: if( enc==SQLITE_UTF16BE ) zNum++;
475: while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
476: if( zNum<zEnd ){
477: if( *zNum=='-' ){
478: neg = 1;
479: zNum+=incr;
480: }else if( *zNum=='+' ){
481: zNum+=incr;
482: }
483: }
484: zStart = zNum;
485: while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
486: for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
487: u = u*10 + c - '0';
488: }
489: if( u>LARGEST_INT64 ){
490: *pNum = SMALLEST_INT64;
491: }else if( neg ){
492: *pNum = -(i64)u;
493: }else{
494: *pNum = (i64)u;
495: }
496: testcase( i==18 );
497: testcase( i==19 );
498: testcase( i==20 );
499: if( (c!=0 && &zNum[i]<zEnd) || (i==0 && zStart==zNum) || i>19*incr ){
500: /* zNum is empty or contains non-numeric text or is longer
501: ** than 19 digits (thus guaranteeing that it is too large) */
502: return 1;
503: }else if( i<19*incr ){
504: /* Less than 19 digits, so we know that it fits in 64 bits */
505: assert( u<=LARGEST_INT64 );
506: return 0;
507: }else{
508: /* zNum is a 19-digit numbers. Compare it against 9223372036854775808. */
509: c = compare2pow63(zNum, incr);
510: if( c<0 ){
511: /* zNum is less than 9223372036854775808 so it fits */
512: assert( u<=LARGEST_INT64 );
513: return 0;
514: }else if( c>0 ){
515: /* zNum is greater than 9223372036854775808 so it overflows */
516: return 1;
517: }else{
518: /* zNum is exactly 9223372036854775808. Fits if negative. The
519: ** special case 2 overflow if positive */
520: assert( u-1==LARGEST_INT64 );
521: assert( (*pNum)==SMALLEST_INT64 );
522: return neg ? 0 : 2;
523: }
524: }
525: }
526:
527: /*
528: ** If zNum represents an integer that will fit in 32-bits, then set
529: ** *pValue to that integer and return true. Otherwise return false.
530: **
531: ** Any non-numeric characters that following zNum are ignored.
532: ** This is different from sqlite3Atoi64() which requires the
533: ** input number to be zero-terminated.
534: */
535: int sqlite3GetInt32(const char *zNum, int *pValue){
536: sqlite_int64 v = 0;
537: int i, c;
538: int neg = 0;
539: if( zNum[0]=='-' ){
540: neg = 1;
541: zNum++;
542: }else if( zNum[0]=='+' ){
543: zNum++;
544: }
545: while( zNum[0]=='0' ) zNum++;
546: for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
547: v = v*10 + c;
548: }
549:
550: /* The longest decimal representation of a 32 bit integer is 10 digits:
551: **
552: ** 1234567890
553: ** 2^31 -> 2147483648
554: */
555: testcase( i==10 );
556: if( i>10 ){
557: return 0;
558: }
559: testcase( v-neg==2147483647 );
560: if( v-neg>2147483647 ){
561: return 0;
562: }
563: if( neg ){
564: v = -v;
565: }
566: *pValue = (int)v;
567: return 1;
568: }
569:
570: /*
571: ** Return a 32-bit integer value extracted from a string. If the
572: ** string is not an integer, just return 0.
573: */
574: int sqlite3Atoi(const char *z){
575: int x = 0;
576: if( z ) sqlite3GetInt32(z, &x);
577: return x;
578: }
579:
580: /*
581: ** The variable-length integer encoding is as follows:
582: **
583: ** KEY:
584: ** A = 0xxxxxxx 7 bits of data and one flag bit
585: ** B = 1xxxxxxx 7 bits of data and one flag bit
586: ** C = xxxxxxxx 8 bits of data
587: **
588: ** 7 bits - A
589: ** 14 bits - BA
590: ** 21 bits - BBA
591: ** 28 bits - BBBA
592: ** 35 bits - BBBBA
593: ** 42 bits - BBBBBA
594: ** 49 bits - BBBBBBA
595: ** 56 bits - BBBBBBBA
596: ** 64 bits - BBBBBBBBC
597: */
598:
599: /*
600: ** Write a 64-bit variable-length integer to memory starting at p[0].
601: ** The length of data write will be between 1 and 9 bytes. The number
602: ** of bytes written is returned.
603: **
604: ** A variable-length integer consists of the lower 7 bits of each byte
605: ** for all bytes that have the 8th bit set and one byte with the 8th
606: ** bit clear. Except, if we get to the 9th byte, it stores the full
607: ** 8 bits and is the last byte.
608: */
609: int sqlite3PutVarint(unsigned char *p, u64 v){
610: int i, j, n;
611: u8 buf[10];
612: if( v & (((u64)0xff000000)<<32) ){
613: p[8] = (u8)v;
614: v >>= 8;
615: for(i=7; i>=0; i--){
616: p[i] = (u8)((v & 0x7f) | 0x80);
617: v >>= 7;
618: }
619: return 9;
620: }
621: n = 0;
622: do{
623: buf[n++] = (u8)((v & 0x7f) | 0x80);
624: v >>= 7;
625: }while( v!=0 );
626: buf[0] &= 0x7f;
627: assert( n<=9 );
628: for(i=0, j=n-1; j>=0; j--, i++){
629: p[i] = buf[j];
630: }
631: return n;
632: }
633:
634: /*
635: ** This routine is a faster version of sqlite3PutVarint() that only
636: ** works for 32-bit positive integers and which is optimized for
637: ** the common case of small integers. A MACRO version, putVarint32,
638: ** is provided which inlines the single-byte case. All code should use
639: ** the MACRO version as this function assumes the single-byte case has
640: ** already been handled.
641: */
642: int sqlite3PutVarint32(unsigned char *p, u32 v){
643: #ifndef putVarint32
644: if( (v & ~0x7f)==0 ){
645: p[0] = v;
646: return 1;
647: }
648: #endif
649: if( (v & ~0x3fff)==0 ){
650: p[0] = (u8)((v>>7) | 0x80);
651: p[1] = (u8)(v & 0x7f);
652: return 2;
653: }
654: return sqlite3PutVarint(p, v);
655: }
656:
657: /*
658: ** Bitmasks used by sqlite3GetVarint(). These precomputed constants
659: ** are defined here rather than simply putting the constant expressions
660: ** inline in order to work around bugs in the RVT compiler.
661: **
662: ** SLOT_2_0 A mask for (0x7f<<14) | 0x7f
663: **
664: ** SLOT_4_2_0 A mask for (0x7f<<28) | SLOT_2_0
665: */
666: #define SLOT_2_0 0x001fc07f
667: #define SLOT_4_2_0 0xf01fc07f
668:
669:
670: /*
671: ** Read a 64-bit variable-length integer from memory starting at p[0].
672: ** Return the number of bytes read. The value is stored in *v.
673: */
674: u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
675: u32 a,b,s;
676:
677: a = *p;
678: /* a: p0 (unmasked) */
679: if (!(a&0x80))
680: {
681: *v = a;
682: return 1;
683: }
684:
685: p++;
686: b = *p;
687: /* b: p1 (unmasked) */
688: if (!(b&0x80))
689: {
690: a &= 0x7f;
691: a = a<<7;
692: a |= b;
693: *v = a;
694: return 2;
695: }
696:
697: /* Verify that constants are precomputed correctly */
698: assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
699: assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
700:
701: p++;
702: a = a<<14;
703: a |= *p;
704: /* a: p0<<14 | p2 (unmasked) */
705: if (!(a&0x80))
706: {
707: a &= SLOT_2_0;
708: b &= 0x7f;
709: b = b<<7;
710: a |= b;
711: *v = a;
712: return 3;
713: }
714:
715: /* CSE1 from below */
716: a &= SLOT_2_0;
717: p++;
718: b = b<<14;
719: b |= *p;
720: /* b: p1<<14 | p3 (unmasked) */
721: if (!(b&0x80))
722: {
723: b &= SLOT_2_0;
724: /* moved CSE1 up */
725: /* a &= (0x7f<<14)|(0x7f); */
726: a = a<<7;
727: a |= b;
728: *v = a;
729: return 4;
730: }
731:
732: /* a: p0<<14 | p2 (masked) */
733: /* b: p1<<14 | p3 (unmasked) */
734: /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
735: /* moved CSE1 up */
736: /* a &= (0x7f<<14)|(0x7f); */
737: b &= SLOT_2_0;
738: s = a;
739: /* s: p0<<14 | p2 (masked) */
740:
741: p++;
742: a = a<<14;
743: a |= *p;
744: /* a: p0<<28 | p2<<14 | p4 (unmasked) */
745: if (!(a&0x80))
746: {
747: /* we can skip these cause they were (effectively) done above in calc'ing s */
748: /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
749: /* b &= (0x7f<<14)|(0x7f); */
750: b = b<<7;
751: a |= b;
752: s = s>>18;
753: *v = ((u64)s)<<32 | a;
754: return 5;
755: }
756:
757: /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
758: s = s<<7;
759: s |= b;
760: /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
761:
762: p++;
763: b = b<<14;
764: b |= *p;
765: /* b: p1<<28 | p3<<14 | p5 (unmasked) */
766: if (!(b&0x80))
767: {
768: /* we can skip this cause it was (effectively) done above in calc'ing s */
769: /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
770: a &= SLOT_2_0;
771: a = a<<7;
772: a |= b;
773: s = s>>18;
774: *v = ((u64)s)<<32 | a;
775: return 6;
776: }
777:
778: p++;
779: a = a<<14;
780: a |= *p;
781: /* a: p2<<28 | p4<<14 | p6 (unmasked) */
782: if (!(a&0x80))
783: {
784: a &= SLOT_4_2_0;
785: b &= SLOT_2_0;
786: b = b<<7;
787: a |= b;
788: s = s>>11;
789: *v = ((u64)s)<<32 | a;
790: return 7;
791: }
792:
793: /* CSE2 from below */
794: a &= SLOT_2_0;
795: p++;
796: b = b<<14;
797: b |= *p;
798: /* b: p3<<28 | p5<<14 | p7 (unmasked) */
799: if (!(b&0x80))
800: {
801: b &= SLOT_4_2_0;
802: /* moved CSE2 up */
803: /* a &= (0x7f<<14)|(0x7f); */
804: a = a<<7;
805: a |= b;
806: s = s>>4;
807: *v = ((u64)s)<<32 | a;
808: return 8;
809: }
810:
811: p++;
812: a = a<<15;
813: a |= *p;
814: /* a: p4<<29 | p6<<15 | p8 (unmasked) */
815:
816: /* moved CSE2 up */
817: /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */
818: b &= SLOT_2_0;
819: b = b<<8;
820: a |= b;
821:
822: s = s<<4;
823: b = p[-4];
824: b &= 0x7f;
825: b = b>>3;
826: s |= b;
827:
828: *v = ((u64)s)<<32 | a;
829:
830: return 9;
831: }
832:
833: /*
834: ** Read a 32-bit variable-length integer from memory starting at p[0].
835: ** Return the number of bytes read. The value is stored in *v.
836: **
837: ** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned
838: ** integer, then set *v to 0xffffffff.
839: **
840: ** A MACRO version, getVarint32, is provided which inlines the
841: ** single-byte case. All code should use the MACRO version as
842: ** this function assumes the single-byte case has already been handled.
843: */
844: u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
845: u32 a,b;
846:
847: /* The 1-byte case. Overwhelmingly the most common. Handled inline
848: ** by the getVarin32() macro */
849: a = *p;
850: /* a: p0 (unmasked) */
851: #ifndef getVarint32
852: if (!(a&0x80))
853: {
854: /* Values between 0 and 127 */
855: *v = a;
856: return 1;
857: }
858: #endif
859:
860: /* The 2-byte case */
861: p++;
862: b = *p;
863: /* b: p1 (unmasked) */
864: if (!(b&0x80))
865: {
866: /* Values between 128 and 16383 */
867: a &= 0x7f;
868: a = a<<7;
869: *v = a | b;
870: return 2;
871: }
872:
873: /* The 3-byte case */
874: p++;
875: a = a<<14;
876: a |= *p;
877: /* a: p0<<14 | p2 (unmasked) */
878: if (!(a&0x80))
879: {
880: /* Values between 16384 and 2097151 */
881: a &= (0x7f<<14)|(0x7f);
882: b &= 0x7f;
883: b = b<<7;
884: *v = a | b;
885: return 3;
886: }
887:
888: /* A 32-bit varint is used to store size information in btrees.
889: ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
890: ** A 3-byte varint is sufficient, for example, to record the size
891: ** of a 1048569-byte BLOB or string.
892: **
893: ** We only unroll the first 1-, 2-, and 3- byte cases. The very
894: ** rare larger cases can be handled by the slower 64-bit varint
895: ** routine.
896: */
897: #if 1
898: {
899: u64 v64;
900: u8 n;
901:
902: p -= 2;
903: n = sqlite3GetVarint(p, &v64);
904: assert( n>3 && n<=9 );
905: if( (v64 & SQLITE_MAX_U32)!=v64 ){
906: *v = 0xffffffff;
907: }else{
908: *v = (u32)v64;
909: }
910: return n;
911: }
912:
913: #else
914: /* For following code (kept for historical record only) shows an
915: ** unrolling for the 3- and 4-byte varint cases. This code is
916: ** slightly faster, but it is also larger and much harder to test.
917: */
918: p++;
919: b = b<<14;
920: b |= *p;
921: /* b: p1<<14 | p3 (unmasked) */
922: if (!(b&0x80))
923: {
924: /* Values between 2097152 and 268435455 */
925: b &= (0x7f<<14)|(0x7f);
926: a &= (0x7f<<14)|(0x7f);
927: a = a<<7;
928: *v = a | b;
929: return 4;
930: }
931:
932: p++;
933: a = a<<14;
934: a |= *p;
935: /* a: p0<<28 | p2<<14 | p4 (unmasked) */
936: if (!(a&0x80))
937: {
938: /* Values between 268435456 and 34359738367 */
939: a &= SLOT_4_2_0;
940: b &= SLOT_4_2_0;
941: b = b<<7;
942: *v = a | b;
943: return 5;
944: }
945:
946: /* We can only reach this point when reading a corrupt database
947: ** file. In that case we are not in any hurry. Use the (relatively
948: ** slow) general-purpose sqlite3GetVarint() routine to extract the
949: ** value. */
950: {
951: u64 v64;
952: u8 n;
953:
954: p -= 4;
955: n = sqlite3GetVarint(p, &v64);
956: assert( n>5 && n<=9 );
957: *v = (u32)v64;
958: return n;
959: }
960: #endif
961: }
962:
963: /*
964: ** Return the number of bytes that will be needed to store the given
965: ** 64-bit integer.
966: */
967: int sqlite3VarintLen(u64 v){
968: int i = 0;
969: do{
970: i++;
971: v >>= 7;
972: }while( v!=0 && ALWAYS(i<9) );
973: return i;
974: }
975:
976:
977: /*
978: ** Read or write a four-byte big-endian integer value.
979: */
980: u32 sqlite3Get4byte(const u8 *p){
981: return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
982: }
983: void sqlite3Put4byte(unsigned char *p, u32 v){
984: p[0] = (u8)(v>>24);
985: p[1] = (u8)(v>>16);
986: p[2] = (u8)(v>>8);
987: p[3] = (u8)v;
988: }
989:
990:
991:
992: /*
993: ** Translate a single byte of Hex into an integer.
994: ** This routine only works if h really is a valid hexadecimal
995: ** character: 0..9a..fA..F
996: */
997: u8 sqlite3HexToInt(int h){
998: assert( (h>='0' && h<='9') || (h>='a' && h<='f') || (h>='A' && h<='F') );
999: #ifdef SQLITE_ASCII
1000: h += 9*(1&(h>>6));
1001: #endif
1002: #ifdef SQLITE_EBCDIC
1003: h += 9*(1&~(h>>4));
1004: #endif
1005: return (u8)(h & 0xf);
1006: }
1007:
1008: #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
1009: /*
1010: ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
1011: ** value. Return a pointer to its binary value. Space to hold the
1012: ** binary value has been obtained from malloc and must be freed by
1013: ** the calling routine.
1014: */
1015: void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
1016: char *zBlob;
1017: int i;
1018:
1019: zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
1020: n--;
1021: if( zBlob ){
1022: for(i=0; i<n; i+=2){
1023: zBlob[i/2] = (sqlite3HexToInt(z[i])<<4) | sqlite3HexToInt(z[i+1]);
1024: }
1025: zBlob[i/2] = 0;
1026: }
1027: return zBlob;
1028: }
1029: #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
1030:
1031: /*
1032: ** Log an error that is an API call on a connection pointer that should
1033: ** not have been used. The "type" of connection pointer is given as the
1034: ** argument. The zType is a word like "NULL" or "closed" or "invalid".
1035: */
1036: static void logBadConnection(const char *zType){
1037: sqlite3_log(SQLITE_MISUSE,
1038: "API call with %s database connection pointer",
1039: zType
1040: );
1041: }
1042:
1043: /*
1044: ** Check to make sure we have a valid db pointer. This test is not
1045: ** foolproof but it does provide some measure of protection against
1046: ** misuse of the interface such as passing in db pointers that are
1047: ** NULL or which have been previously closed. If this routine returns
1048: ** 1 it means that the db pointer is valid and 0 if it should not be
1049: ** dereferenced for any reason. The calling function should invoke
1050: ** SQLITE_MISUSE immediately.
1051: **
1052: ** sqlite3SafetyCheckOk() requires that the db pointer be valid for
1053: ** use. sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
1054: ** open properly and is not fit for general use but which can be
1055: ** used as an argument to sqlite3_errmsg() or sqlite3_close().
1056: */
1057: int sqlite3SafetyCheckOk(sqlite3 *db){
1058: u32 magic;
1059: if( db==0 ){
1060: logBadConnection("NULL");
1061: return 0;
1062: }
1063: magic = db->magic;
1064: if( magic!=SQLITE_MAGIC_OPEN ){
1065: if( sqlite3SafetyCheckSickOrOk(db) ){
1066: testcase( sqlite3GlobalConfig.xLog!=0 );
1067: logBadConnection("unopened");
1068: }
1069: return 0;
1070: }else{
1071: return 1;
1072: }
1073: }
1074: int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
1075: u32 magic;
1076: magic = db->magic;
1077: if( magic!=SQLITE_MAGIC_SICK &&
1078: magic!=SQLITE_MAGIC_OPEN &&
1079: magic!=SQLITE_MAGIC_BUSY ){
1080: testcase( sqlite3GlobalConfig.xLog!=0 );
1081: logBadConnection("invalid");
1082: return 0;
1083: }else{
1084: return 1;
1085: }
1086: }
1087:
1088: /*
1089: ** Attempt to add, substract, or multiply the 64-bit signed value iB against
1090: ** the other 64-bit signed integer at *pA and store the result in *pA.
1091: ** Return 0 on success. Or if the operation would have resulted in an
1092: ** overflow, leave *pA unchanged and return 1.
1093: */
1094: int sqlite3AddInt64(i64 *pA, i64 iB){
1095: i64 iA = *pA;
1096: testcase( iA==0 ); testcase( iA==1 );
1097: testcase( iB==-1 ); testcase( iB==0 );
1098: if( iB>=0 ){
1099: testcase( iA>0 && LARGEST_INT64 - iA == iB );
1100: testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
1101: if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
1102: *pA += iB;
1103: }else{
1104: testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
1105: testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
1106: if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
1107: *pA += iB;
1108: }
1109: return 0;
1110: }
1111: int sqlite3SubInt64(i64 *pA, i64 iB){
1112: testcase( iB==SMALLEST_INT64+1 );
1113: if( iB==SMALLEST_INT64 ){
1114: testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
1115: if( (*pA)>=0 ) return 1;
1116: *pA -= iB;
1117: return 0;
1118: }else{
1119: return sqlite3AddInt64(pA, -iB);
1120: }
1121: }
1122: #define TWOPOWER32 (((i64)1)<<32)
1123: #define TWOPOWER31 (((i64)1)<<31)
1124: int sqlite3MulInt64(i64 *pA, i64 iB){
1125: i64 iA = *pA;
1126: i64 iA1, iA0, iB1, iB0, r;
1127:
1128: iA1 = iA/TWOPOWER32;
1129: iA0 = iA % TWOPOWER32;
1130: iB1 = iB/TWOPOWER32;
1131: iB0 = iB % TWOPOWER32;
1132: if( iA1*iB1 != 0 ) return 1;
1133: assert( iA1*iB0==0 || iA0*iB1==0 );
1134: r = iA1*iB0 + iA0*iB1;
1135: testcase( r==(-TWOPOWER31)-1 );
1136: testcase( r==(-TWOPOWER31) );
1137: testcase( r==TWOPOWER31 );
1138: testcase( r==TWOPOWER31-1 );
1139: if( r<(-TWOPOWER31) || r>=TWOPOWER31 ) return 1;
1140: r *= TWOPOWER32;
1141: if( sqlite3AddInt64(&r, iA0*iB0) ) return 1;
1142: *pA = r;
1143: return 0;
1144: }
1145:
1146: /*
1147: ** Compute the absolute value of a 32-bit signed integer, of possible. Or
1148: ** if the integer has a value of -2147483648, return +2147483647
1149: */
1150: int sqlite3AbsInt32(int x){
1151: if( x>=0 ) return x;
1152: if( x==(int)0x80000000 ) return 0x7fffffff;
1153: return -x;
1154: }
1155:
1156: #ifdef SQLITE_ENABLE_8_3_NAMES
1157: /*
1158: ** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database
1159: ** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
1160: ** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
1161: ** three characters, then shorten the suffix on z[] to be the last three
1162: ** characters of the original suffix.
1163: **
1164: ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always
1165: ** do the suffix shortening regardless of URI parameter.
1166: **
1167: ** Examples:
1168: **
1169: ** test.db-journal => test.nal
1170: ** test.db-wal => test.wal
1171: ** test.db-shm => test.shm
1172: ** test.db-mj7f3319fa => test.9fa
1173: */
1174: void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
1175: #if SQLITE_ENABLE_8_3_NAMES<2
1176: if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) )
1177: #endif
1178: {
1179: int i, sz;
1180: sz = sqlite3Strlen30(z);
1181: for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
1182: if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4);
1183: }
1184: }
1185: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>