xref: /sqlite-3.40.0/src/util.c (revision af94adf0)
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 #include <math.h>
21 
22 /*
23 ** Routine needed to support the testcase() macro.
24 */
25 #ifdef SQLITE_COVERAGE_TEST
26 void sqlite3Coverage(int x){
27   static unsigned dummy = 0;
28   dummy += (unsigned)x;
29 }
30 #endif
31 
32 /*
33 ** Calls to sqlite3FaultSim() are used to simulate a failure during testing,
34 ** or to bypass normal error detection during testing in order to let
35 ** execute proceed futher downstream.
36 **
37 ** In deployment, sqlite3FaultSim() *always* return SQLITE_OK (0).  The
38 ** sqlite3FaultSim() function only returns non-zero during testing.
39 **
40 ** During testing, if the test harness has set a fault-sim callback using
41 ** a call to sqlite3_test_control(SQLITE_TESTCTRL_FAULT_INSTALL), then
42 ** each call to sqlite3FaultSim() is relayed to that application-supplied
43 ** callback and the integer return value form the application-supplied
44 ** callback is returned by sqlite3FaultSim().
45 **
46 ** The integer argument to sqlite3FaultSim() is a code to identify which
47 ** sqlite3FaultSim() instance is being invoked. Each call to sqlite3FaultSim()
48 ** should have a unique code.  To prevent legacy testing applications from
49 ** breaking, the codes should not be changed or reused.
50 */
51 #ifndef SQLITE_UNTESTABLE
52 int sqlite3FaultSim(int iTest){
53   int (*xCallback)(int) = sqlite3GlobalConfig.xTestCallback;
54   return xCallback ? xCallback(iTest) : SQLITE_OK;
55 }
56 #endif
57 
58 #ifndef SQLITE_OMIT_FLOATING_POINT
59 /*
60 ** Return true if the floating point value is Not a Number (NaN).
61 */
62 int sqlite3IsNaN(double x){
63   u64 y;
64   memcpy(&y,&x,sizeof(y));
65   return IsNaN(y);
66 }
67 #endif /* SQLITE_OMIT_FLOATING_POINT */
68 
69 /*
70 ** Compute a string length that is limited to what can be stored in
71 ** lower 30 bits of a 32-bit signed integer.
72 **
73 ** The value returned will never be negative.  Nor will it ever be greater
74 ** than the actual length of the string.  For very long strings (greater
75 ** than 1GiB) the value returned might be less than the true string length.
76 */
77 int sqlite3Strlen30(const char *z){
78   if( z==0 ) return 0;
79   return 0x3fffffff & (int)strlen(z);
80 }
81 
82 /*
83 ** Return the declared type of a column.  Or return zDflt if the column
84 ** has no declared type.
85 **
86 ** The column type is an extra string stored after the zero-terminator on
87 ** the column name if and only if the COLFLAG_HASTYPE flag is set.
88 */
89 char *sqlite3ColumnType(Column *pCol, char *zDflt){
90   if( (pCol->colFlags & COLFLAG_HASTYPE)==0 ) return zDflt;
91   return pCol->zName + strlen(pCol->zName) + 1;
92 }
93 
94 /*
95 ** Helper function for sqlite3Error() - called rarely.  Broken out into
96 ** a separate routine to avoid unnecessary register saves on entry to
97 ** sqlite3Error().
98 */
99 static SQLITE_NOINLINE void  sqlite3ErrorFinish(sqlite3 *db, int err_code){
100   if( db->pErr ) sqlite3ValueSetNull(db->pErr);
101   sqlite3SystemError(db, err_code);
102 }
103 
104 /*
105 ** Set the current error code to err_code and clear any prior error message.
106 ** Also set iSysErrno (by calling sqlite3System) if the err_code indicates
107 ** that would be appropriate.
108 */
109 void sqlite3Error(sqlite3 *db, int err_code){
110   assert( db!=0 );
111   db->errCode = err_code;
112   if( err_code || db->pErr ) sqlite3ErrorFinish(db, err_code);
113 }
114 
115 /*
116 ** Load the sqlite3.iSysErrno field if that is an appropriate thing
117 ** to do based on the SQLite error code in rc.
118 */
119 void sqlite3SystemError(sqlite3 *db, int rc){
120   if( rc==SQLITE_IOERR_NOMEM ) return;
121   rc &= 0xff;
122   if( rc==SQLITE_CANTOPEN || rc==SQLITE_IOERR ){
123     db->iSysErrno = sqlite3OsGetLastError(db->pVfs);
124   }
125 }
126 
127 /*
128 ** Set the most recent error code and error string for the sqlite
129 ** handle "db". The error code is set to "err_code".
130 **
131 ** If it is not NULL, string zFormat specifies the format of the
132 ** error string in the style of the printf functions: The following
133 ** format characters are allowed:
134 **
135 **      %s      Insert a string
136 **      %z      A string that should be freed after use
137 **      %d      Insert an integer
138 **      %T      Insert a token
139 **      %S      Insert the first element of a SrcList
140 **
141 ** zFormat and any string tokens that follow it are assumed to be
142 ** encoded in UTF-8.
143 **
144 ** To clear the most recent error for sqlite handle "db", sqlite3Error
145 ** should be called with err_code set to SQLITE_OK and zFormat set
146 ** to NULL.
147 */
148 void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const char *zFormat, ...){
149   assert( db!=0 );
150   db->errCode = err_code;
151   sqlite3SystemError(db, err_code);
152   if( zFormat==0 ){
153     sqlite3Error(db, err_code);
154   }else if( db->pErr || (db->pErr = sqlite3ValueNew(db))!=0 ){
155     char *z;
156     va_list ap;
157     va_start(ap, zFormat);
158     z = sqlite3VMPrintf(db, zFormat, ap);
159     va_end(ap);
160     sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
161   }
162 }
163 
164 /*
165 ** Add an error message to pParse->zErrMsg and increment pParse->nErr.
166 ** The following formatting characters are allowed:
167 **
168 **      %s      Insert a string
169 **      %z      A string that should be freed after use
170 **      %d      Insert an integer
171 **      %T      Insert a token
172 **      %S      Insert the first element of a SrcList
173 **
174 ** This function should be used to report any error that occurs while
175 ** compiling an SQL statement (i.e. within sqlite3_prepare()). The
176 ** last thing the sqlite3_prepare() function does is copy the error
177 ** stored by this function into the database handle using sqlite3Error().
178 ** Functions sqlite3Error() or sqlite3ErrorWithMsg() should be used
179 ** during statement execution (sqlite3_step() etc.).
180 */
181 void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
182   char *zMsg;
183   va_list ap;
184   sqlite3 *db = pParse->db;
185   va_start(ap, zFormat);
186   zMsg = sqlite3VMPrintf(db, zFormat, ap);
187   va_end(ap);
188   if( db->suppressErr ){
189     sqlite3DbFree(db, zMsg);
190   }else{
191     pParse->nErr++;
192     sqlite3DbFree(db, pParse->zErrMsg);
193     pParse->zErrMsg = zMsg;
194     pParse->rc = SQLITE_ERROR;
195   }
196 }
197 
198 /*
199 ** If database connection db is currently parsing SQL, then transfer
200 ** error code errCode to that parser if the parser has not already
201 ** encountered some other kind of error.
202 */
203 int sqlite3ErrorToParser(sqlite3 *db, int errCode){
204   Parse *pParse;
205   if( db==0 || (pParse = db->pParse)==0 ) return errCode;
206   pParse->rc = errCode;
207   pParse->nErr++;
208   return errCode;
209 }
210 
211 /*
212 ** Convert an SQL-style quoted string into a normal string by removing
213 ** the quote characters.  The conversion is done in-place.  If the
214 ** input does not begin with a quote character, then this routine
215 ** is a no-op.
216 **
217 ** The input string must be zero-terminated.  A new zero-terminator
218 ** is added to the dequoted string.
219 **
220 ** The return value is -1 if no dequoting occurs or the length of the
221 ** dequoted string, exclusive of the zero terminator, if dequoting does
222 ** occur.
223 **
224 ** 2002-02-14: This routine is extended to remove MS-Access style
225 ** brackets from around identifiers.  For example:  "[a-b-c]" becomes
226 ** "a-b-c".
227 */
228 void sqlite3Dequote(char *z){
229   char quote;
230   int i, j;
231   if( z==0 ) return;
232   quote = z[0];
233   if( !sqlite3Isquote(quote) ) return;
234   if( quote=='[' ) quote = ']';
235   for(i=1, j=0;; i++){
236     assert( z[i] );
237     if( z[i]==quote ){
238       if( z[i+1]==quote ){
239         z[j++] = quote;
240         i++;
241       }else{
242         break;
243       }
244     }else{
245       z[j++] = z[i];
246     }
247   }
248   z[j] = 0;
249 }
250 void sqlite3DequoteExpr(Expr *p){
251   assert( sqlite3Isquote(p->u.zToken[0]) );
252   p->flags |= p->u.zToken[0]=='"' ? EP_Quoted|EP_DblQuoted : EP_Quoted;
253   sqlite3Dequote(p->u.zToken);
254 }
255 
256 /*
257 ** Generate a Token object from a string
258 */
259 void sqlite3TokenInit(Token *p, char *z){
260   p->z = z;
261   p->n = sqlite3Strlen30(z);
262 }
263 
264 /* Convenient short-hand */
265 #define UpperToLower sqlite3UpperToLower
266 
267 /*
268 ** Some systems have stricmp().  Others have strcasecmp().  Because
269 ** there is no consistency, we will define our own.
270 **
271 ** IMPLEMENTATION-OF: R-30243-02494 The sqlite3_stricmp() and
272 ** sqlite3_strnicmp() APIs allow applications and extensions to compare
273 ** the contents of two buffers containing UTF-8 strings in a
274 ** case-independent fashion, using the same definition of "case
275 ** independence" that SQLite uses internally when comparing identifiers.
276 */
277 int sqlite3_stricmp(const char *zLeft, const char *zRight){
278   if( zLeft==0 ){
279     return zRight ? -1 : 0;
280   }else if( zRight==0 ){
281     return 1;
282   }
283   return sqlite3StrICmp(zLeft, zRight);
284 }
285 int sqlite3StrICmp(const char *zLeft, const char *zRight){
286   unsigned char *a, *b;
287   int c, x;
288   a = (unsigned char *)zLeft;
289   b = (unsigned char *)zRight;
290   for(;;){
291     c = *a;
292     x = *b;
293     if( c==x ){
294       if( c==0 ) break;
295     }else{
296       c = (int)UpperToLower[c] - (int)UpperToLower[x];
297       if( c ) break;
298     }
299     a++;
300     b++;
301   }
302   return c;
303 }
304 int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
305   register unsigned char *a, *b;
306   if( zLeft==0 ){
307     return zRight ? -1 : 0;
308   }else if( zRight==0 ){
309     return 1;
310   }
311   a = (unsigned char *)zLeft;
312   b = (unsigned char *)zRight;
313   while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
314   return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
315 }
316 
317 /*
318 ** Compute 10 to the E-th power.  Examples:  E==1 results in 10.
319 ** E==2 results in 100.  E==50 results in 1.0e50.
320 **
321 ** This routine only works for values of E between 1 and 341.
322 */
323 static LONGDOUBLE_TYPE sqlite3Pow10(int E){
324 #if defined(_MSC_VER)
325   static const LONGDOUBLE_TYPE x[] = {
326     1.0e+001L,
327     1.0e+002L,
328     1.0e+004L,
329     1.0e+008L,
330     1.0e+016L,
331     1.0e+032L,
332     1.0e+064L,
333     1.0e+128L,
334     1.0e+256L
335   };
336   LONGDOUBLE_TYPE r = 1.0;
337   int i;
338   assert( E>=0 && E<=307 );
339   for(i=0; E!=0; i++, E >>=1){
340     if( E & 1 ) r *= x[i];
341   }
342   return r;
343 #else
344   LONGDOUBLE_TYPE x = 10.0;
345   LONGDOUBLE_TYPE r = 1.0;
346   while(1){
347     if( E & 1 ) r *= x;
348     E >>= 1;
349     if( E==0 ) break;
350     x *= x;
351   }
352   return r;
353 #endif
354 }
355 
356 /*
357 ** The string z[] is an text representation of a real number.
358 ** Convert this string to a double and write it into *pResult.
359 **
360 ** The string z[] is length bytes in length (bytes, not characters) and
361 ** uses the encoding enc.  The string is not necessarily zero-terminated.
362 **
363 ** Return TRUE if the result is a valid real number (or integer) and FALSE
364 ** if the string is empty or contains extraneous text.  More specifically
365 ** return
366 **      1          =>  The input string is a pure integer
367 **      2 or more  =>  The input has a decimal point or eNNN clause
368 **      0 or less  =>  The input string is not a valid number
369 **     -1          =>  Not a valid number, but has a valid prefix which
370 **                     includes a decimal point and/or an eNNN clause
371 **
372 ** Valid numbers are in one of these formats:
373 **
374 **    [+-]digits[E[+-]digits]
375 **    [+-]digits.[digits][E[+-]digits]
376 **    [+-].digits[E[+-]digits]
377 **
378 ** Leading and trailing whitespace is ignored for the purpose of determining
379 ** validity.
380 **
381 ** If some prefix of the input string is a valid number, this routine
382 ** returns FALSE but it still converts the prefix and writes the result
383 ** into *pResult.
384 */
385 #if defined(_MSC_VER)
386 #pragma warning(disable : 4756)
387 #endif
388 int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
389 #ifndef SQLITE_OMIT_FLOATING_POINT
390   int incr;
391   const char *zEnd = z + length;
392   /* sign * significand * (10 ^ (esign * exponent)) */
393   int sign = 1;    /* sign of significand */
394   i64 s = 0;       /* significand */
395   int d = 0;       /* adjust exponent for shifting decimal point */
396   int esign = 1;   /* sign of exponent */
397   int e = 0;       /* exponent */
398   int eValid = 1;  /* True exponent is either not used or is well-formed */
399   double result;
400   int nDigit = 0;  /* Number of digits processed */
401   int eType = 1;   /* 1: pure integer,  2+: fractional  -1 or less: bad UTF16 */
402 
403   assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
404   *pResult = 0.0;   /* Default return value, in case of an error */
405 
406   if( enc==SQLITE_UTF8 ){
407     incr = 1;
408   }else{
409     int i;
410     incr = 2;
411     assert( SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
412     testcase( enc==SQLITE_UTF16LE );
413     testcase( enc==SQLITE_UTF16BE );
414     for(i=3-enc; i<length && z[i]==0; i+=2){}
415     if( i<length ) eType = -100;
416     zEnd = &z[i^1];
417     z += (enc&1);
418   }
419 
420   /* skip leading spaces */
421   while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
422   if( z>=zEnd ) return 0;
423 
424   /* get sign of significand */
425   if( *z=='-' ){
426     sign = -1;
427     z+=incr;
428   }else if( *z=='+' ){
429     z+=incr;
430   }
431 
432   /* copy max significant digits to significand */
433   while( z<zEnd && sqlite3Isdigit(*z) ){
434     s = s*10 + (*z - '0');
435     z+=incr; nDigit++;
436     if( s>=((LARGEST_INT64-9)/10) ){
437       /* skip non-significant significand digits
438       ** (increase exponent by d to shift decimal left) */
439       while( z<zEnd && sqlite3Isdigit(*z) ){ z+=incr; d++; }
440     }
441   }
442   if( z>=zEnd ) goto do_atof_calc;
443 
444   /* if decimal point is present */
445   if( *z=='.' ){
446     z+=incr;
447     eType++;
448     /* copy digits from after decimal to significand
449     ** (decrease exponent by d to shift decimal right) */
450     while( z<zEnd && sqlite3Isdigit(*z) ){
451       if( s<((LARGEST_INT64-9)/10) ){
452         s = s*10 + (*z - '0');
453         d--;
454         nDigit++;
455       }
456       z+=incr;
457     }
458   }
459   if( z>=zEnd ) goto do_atof_calc;
460 
461   /* if exponent is present */
462   if( *z=='e' || *z=='E' ){
463     z+=incr;
464     eValid = 0;
465     eType++;
466 
467     /* This branch is needed to avoid a (harmless) buffer overread.  The
468     ** special comment alerts the mutation tester that the correct answer
469     ** is obtained even if the branch is omitted */
470     if( z>=zEnd ) goto do_atof_calc;              /*PREVENTS-HARMLESS-OVERREAD*/
471 
472     /* get sign of exponent */
473     if( *z=='-' ){
474       esign = -1;
475       z+=incr;
476     }else if( *z=='+' ){
477       z+=incr;
478     }
479     /* copy digits to exponent */
480     while( z<zEnd && sqlite3Isdigit(*z) ){
481       e = e<10000 ? (e*10 + (*z - '0')) : 10000;
482       z+=incr;
483       eValid = 1;
484     }
485   }
486 
487   /* skip trailing spaces */
488   while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
489 
490 do_atof_calc:
491   /* adjust exponent by d, and update sign */
492   e = (e*esign) + d;
493   if( e<0 ) {
494     esign = -1;
495     e *= -1;
496   } else {
497     esign = 1;
498   }
499 
500   if( s==0 ) {
501     /* In the IEEE 754 standard, zero is signed. */
502     result = sign<0 ? -(double)0 : (double)0;
503   } else {
504     /* Attempt to reduce exponent.
505     **
506     ** Branches that are not required for the correct answer but which only
507     ** help to obtain the correct answer faster are marked with special
508     ** comments, as a hint to the mutation tester.
509     */
510     while( e>0 ){                                       /*OPTIMIZATION-IF-TRUE*/
511       if( esign>0 ){
512         if( s>=(LARGEST_INT64/10) ) break;             /*OPTIMIZATION-IF-FALSE*/
513         s *= 10;
514       }else{
515         if( s%10!=0 ) break;                           /*OPTIMIZATION-IF-FALSE*/
516         s /= 10;
517       }
518       e--;
519     }
520 
521     /* adjust the sign of significand */
522     s = sign<0 ? -s : s;
523 
524     if( e==0 ){                                         /*OPTIMIZATION-IF-TRUE*/
525       result = (double)s;
526     }else{
527       /* attempt to handle extremely small/large numbers better */
528       if( e>307 ){                                      /*OPTIMIZATION-IF-TRUE*/
529         if( e<342 ){                                    /*OPTIMIZATION-IF-TRUE*/
530           LONGDOUBLE_TYPE scale = sqlite3Pow10(e-308);
531           if( esign<0 ){
532             result = s / scale;
533             result /= 1.0e+308;
534           }else{
535             result = s * scale;
536             result *= 1.0e+308;
537           }
538         }else{ assert( e>=342 );
539           if( esign<0 ){
540             result = 0.0*s;
541           }else{
542 #ifdef INFINITY
543             result = INFINITY*s;
544 #else
545             result = 1e308*1e308*s;  /* Infinity */
546 #endif
547           }
548         }
549       }else{
550         LONGDOUBLE_TYPE scale = sqlite3Pow10(e);
551         if( esign<0 ){
552           result = s / scale;
553         }else{
554           result = s * scale;
555         }
556       }
557     }
558   }
559 
560   /* store the result */
561   *pResult = result;
562 
563   /* return true if number and no extra non-whitespace chracters after */
564   if( z==zEnd && nDigit>0 && eValid && eType>0 ){
565     return eType;
566   }else if( eType>=2 && (eType==3 || eValid) && nDigit>0 ){
567     return -1;
568   }else{
569     return 0;
570   }
571 #else
572   return !sqlite3Atoi64(z, pResult, length, enc);
573 #endif /* SQLITE_OMIT_FLOATING_POINT */
574 }
575 #if defined(_MSC_VER)
576 #pragma warning(default : 4756)
577 #endif
578 
579 /*
580 ** Compare the 19-character string zNum against the text representation
581 ** value 2^63:  9223372036854775808.  Return negative, zero, or positive
582 ** if zNum is less than, equal to, or greater than the string.
583 ** Note that zNum must contain exactly 19 characters.
584 **
585 ** Unlike memcmp() this routine is guaranteed to return the difference
586 ** in the values of the last digit if the only difference is in the
587 ** last digit.  So, for example,
588 **
589 **      compare2pow63("9223372036854775800", 1)
590 **
591 ** will return -8.
592 */
593 static int compare2pow63(const char *zNum, int incr){
594   int c = 0;
595   int i;
596                     /* 012345678901234567 */
597   const char *pow63 = "922337203685477580";
598   for(i=0; c==0 && i<18; i++){
599     c = (zNum[i*incr]-pow63[i])*10;
600   }
601   if( c==0 ){
602     c = zNum[18*incr] - '8';
603     testcase( c==(-1) );
604     testcase( c==0 );
605     testcase( c==(+1) );
606   }
607   return c;
608 }
609 
610 /*
611 ** Convert zNum to a 64-bit signed integer.  zNum must be decimal. This
612 ** routine does *not* accept hexadecimal notation.
613 **
614 ** Returns:
615 **
616 **    -1    Not even a prefix of the input text looks like an integer
617 **     0    Successful transformation.  Fits in a 64-bit signed integer.
618 **     1    Excess non-space text after the integer value
619 **     2    Integer too large for a 64-bit signed integer or is malformed
620 **     3    Special case of 9223372036854775808
621 **
622 ** length is the number of bytes in the string (bytes, not characters).
623 ** The string is not necessarily zero-terminated.  The encoding is
624 ** given by enc.
625 */
626 int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
627   int incr;
628   u64 u = 0;
629   int neg = 0; /* assume positive */
630   int i;
631   int c = 0;
632   int nonNum = 0;  /* True if input contains UTF16 with high byte non-zero */
633   int rc;          /* Baseline return code */
634   const char *zStart;
635   const char *zEnd = zNum + length;
636   assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
637   if( enc==SQLITE_UTF8 ){
638     incr = 1;
639   }else{
640     incr = 2;
641     assert( SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
642     for(i=3-enc; i<length && zNum[i]==0; i+=2){}
643     nonNum = i<length;
644     zEnd = &zNum[i^1];
645     zNum += (enc&1);
646   }
647   while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
648   if( zNum<zEnd ){
649     if( *zNum=='-' ){
650       neg = 1;
651       zNum+=incr;
652     }else if( *zNum=='+' ){
653       zNum+=incr;
654     }
655   }
656   zStart = zNum;
657   while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
658   for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
659     u = u*10 + c - '0';
660   }
661   testcase( i==18*incr );
662   testcase( i==19*incr );
663   testcase( i==20*incr );
664   if( u>LARGEST_INT64 ){
665     /* This test and assignment is needed only to suppress UB warnings
666     ** from clang and -fsanitize=undefined.  This test and assignment make
667     ** the code a little larger and slower, and no harm comes from omitting
668     ** them, but we must appaise the undefined-behavior pharisees. */
669     *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64;
670   }else if( neg ){
671     *pNum = -(i64)u;
672   }else{
673     *pNum = (i64)u;
674   }
675   rc = 0;
676   if( i==0 && zStart==zNum ){    /* No digits */
677     rc = -1;
678   }else if( nonNum ){            /* UTF16 with high-order bytes non-zero */
679     rc = 1;
680   }else if( &zNum[i]<zEnd ){     /* Extra bytes at the end */
681     int jj = i;
682     do{
683       if( !sqlite3Isspace(zNum[jj]) ){
684         rc = 1;          /* Extra non-space text after the integer */
685         break;
686       }
687       jj += incr;
688     }while( &zNum[jj]<zEnd );
689   }
690   if( i<19*incr ){
691     /* Less than 19 digits, so we know that it fits in 64 bits */
692     assert( u<=LARGEST_INT64 );
693     return rc;
694   }else{
695     /* zNum is a 19-digit numbers.  Compare it against 9223372036854775808. */
696     c = i>19*incr ? 1 : compare2pow63(zNum, incr);
697     if( c<0 ){
698       /* zNum is less than 9223372036854775808 so it fits */
699       assert( u<=LARGEST_INT64 );
700       return rc;
701     }else{
702       *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64;
703       if( c>0 ){
704         /* zNum is greater than 9223372036854775808 so it overflows */
705         return 2;
706       }else{
707         /* zNum is exactly 9223372036854775808.  Fits if negative.  The
708         ** special case 2 overflow if positive */
709         assert( u-1==LARGEST_INT64 );
710         return neg ? rc : 3;
711       }
712     }
713   }
714 }
715 
716 /*
717 ** Transform a UTF-8 integer literal, in either decimal or hexadecimal,
718 ** into a 64-bit signed integer.  This routine accepts hexadecimal literals,
719 ** whereas sqlite3Atoi64() does not.
720 **
721 ** Returns:
722 **
723 **     0    Successful transformation.  Fits in a 64-bit signed integer.
724 **     1    Excess text after the integer value
725 **     2    Integer too large for a 64-bit signed integer or is malformed
726 **     3    Special case of 9223372036854775808
727 */
728 int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
729 #ifndef SQLITE_OMIT_HEX_INTEGER
730   if( z[0]=='0'
731    && (z[1]=='x' || z[1]=='X')
732   ){
733     u64 u = 0;
734     int i, k;
735     for(i=2; z[i]=='0'; i++){}
736     for(k=i; sqlite3Isxdigit(z[k]); k++){
737       u = u*16 + sqlite3HexToInt(z[k]);
738     }
739     memcpy(pOut, &u, 8);
740     return (z[k]==0 && k-i<=16) ? 0 : 2;
741   }else
742 #endif /* SQLITE_OMIT_HEX_INTEGER */
743   {
744     return sqlite3Atoi64(z, pOut, sqlite3Strlen30(z), SQLITE_UTF8);
745   }
746 }
747 
748 /*
749 ** If zNum represents an integer that will fit in 32-bits, then set
750 ** *pValue to that integer and return true.  Otherwise return false.
751 **
752 ** This routine accepts both decimal and hexadecimal notation for integers.
753 **
754 ** Any non-numeric characters that following zNum are ignored.
755 ** This is different from sqlite3Atoi64() which requires the
756 ** input number to be zero-terminated.
757 */
758 int sqlite3GetInt32(const char *zNum, int *pValue){
759   sqlite_int64 v = 0;
760   int i, c;
761   int neg = 0;
762   if( zNum[0]=='-' ){
763     neg = 1;
764     zNum++;
765   }else if( zNum[0]=='+' ){
766     zNum++;
767   }
768 #ifndef SQLITE_OMIT_HEX_INTEGER
769   else if( zNum[0]=='0'
770         && (zNum[1]=='x' || zNum[1]=='X')
771         && sqlite3Isxdigit(zNum[2])
772   ){
773     u32 u = 0;
774     zNum += 2;
775     while( zNum[0]=='0' ) zNum++;
776     for(i=0; sqlite3Isxdigit(zNum[i]) && i<8; i++){
777       u = u*16 + sqlite3HexToInt(zNum[i]);
778     }
779     if( (u&0x80000000)==0 && sqlite3Isxdigit(zNum[i])==0 ){
780       memcpy(pValue, &u, 4);
781       return 1;
782     }else{
783       return 0;
784     }
785   }
786 #endif
787   if( !sqlite3Isdigit(zNum[0]) ) return 0;
788   while( zNum[0]=='0' ) zNum++;
789   for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
790     v = v*10 + c;
791   }
792 
793   /* The longest decimal representation of a 32 bit integer is 10 digits:
794   **
795   **             1234567890
796   **     2^31 -> 2147483648
797   */
798   testcase( i==10 );
799   if( i>10 ){
800     return 0;
801   }
802   testcase( v-neg==2147483647 );
803   if( v-neg>2147483647 ){
804     return 0;
805   }
806   if( neg ){
807     v = -v;
808   }
809   *pValue = (int)v;
810   return 1;
811 }
812 
813 /*
814 ** Return a 32-bit integer value extracted from a string.  If the
815 ** string is not an integer, just return 0.
816 */
817 int sqlite3Atoi(const char *z){
818   int x = 0;
819   if( z ) sqlite3GetInt32(z, &x);
820   return x;
821 }
822 
823 /*
824 ** The variable-length integer encoding is as follows:
825 **
826 ** KEY:
827 **         A = 0xxxxxxx    7 bits of data and one flag bit
828 **         B = 1xxxxxxx    7 bits of data and one flag bit
829 **         C = xxxxxxxx    8 bits of data
830 **
831 **  7 bits - A
832 ** 14 bits - BA
833 ** 21 bits - BBA
834 ** 28 bits - BBBA
835 ** 35 bits - BBBBA
836 ** 42 bits - BBBBBA
837 ** 49 bits - BBBBBBA
838 ** 56 bits - BBBBBBBA
839 ** 64 bits - BBBBBBBBC
840 */
841 
842 /*
843 ** Write a 64-bit variable-length integer to memory starting at p[0].
844 ** The length of data write will be between 1 and 9 bytes.  The number
845 ** of bytes written is returned.
846 **
847 ** A variable-length integer consists of the lower 7 bits of each byte
848 ** for all bytes that have the 8th bit set and one byte with the 8th
849 ** bit clear.  Except, if we get to the 9th byte, it stores the full
850 ** 8 bits and is the last byte.
851 */
852 static int SQLITE_NOINLINE putVarint64(unsigned char *p, u64 v){
853   int i, j, n;
854   u8 buf[10];
855   if( v & (((u64)0xff000000)<<32) ){
856     p[8] = (u8)v;
857     v >>= 8;
858     for(i=7; i>=0; i--){
859       p[i] = (u8)((v & 0x7f) | 0x80);
860       v >>= 7;
861     }
862     return 9;
863   }
864   n = 0;
865   do{
866     buf[n++] = (u8)((v & 0x7f) | 0x80);
867     v >>= 7;
868   }while( v!=0 );
869   buf[0] &= 0x7f;
870   assert( n<=9 );
871   for(i=0, j=n-1; j>=0; j--, i++){
872     p[i] = buf[j];
873   }
874   return n;
875 }
876 int sqlite3PutVarint(unsigned char *p, u64 v){
877   if( v<=0x7f ){
878     p[0] = v&0x7f;
879     return 1;
880   }
881   if( v<=0x3fff ){
882     p[0] = ((v>>7)&0x7f)|0x80;
883     p[1] = v&0x7f;
884     return 2;
885   }
886   return putVarint64(p,v);
887 }
888 
889 /*
890 ** Bitmasks used by sqlite3GetVarint().  These precomputed constants
891 ** are defined here rather than simply putting the constant expressions
892 ** inline in order to work around bugs in the RVT compiler.
893 **
894 ** SLOT_2_0     A mask for  (0x7f<<14) | 0x7f
895 **
896 ** SLOT_4_2_0   A mask for  (0x7f<<28) | SLOT_2_0
897 */
898 #define SLOT_2_0     0x001fc07f
899 #define SLOT_4_2_0   0xf01fc07f
900 
901 
902 /*
903 ** Read a 64-bit variable-length integer from memory starting at p[0].
904 ** Return the number of bytes read.  The value is stored in *v.
905 */
906 u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
907   u32 a,b,s;
908 
909   if( ((signed char*)p)[0]>=0 ){
910     *v = *p;
911     return 1;
912   }
913   if( ((signed char*)p)[1]>=0 ){
914     *v = ((u32)(p[0]&0x7f)<<7) | p[1];
915     return 2;
916   }
917 
918   /* Verify that constants are precomputed correctly */
919   assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
920   assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
921 
922   a = ((u32)p[0])<<14;
923   b = p[1];
924   p += 2;
925   a |= *p;
926   /* a: p0<<14 | p2 (unmasked) */
927   if (!(a&0x80))
928   {
929     a &= SLOT_2_0;
930     b &= 0x7f;
931     b = b<<7;
932     a |= b;
933     *v = a;
934     return 3;
935   }
936 
937   /* CSE1 from below */
938   a &= SLOT_2_0;
939   p++;
940   b = b<<14;
941   b |= *p;
942   /* b: p1<<14 | p3 (unmasked) */
943   if (!(b&0x80))
944   {
945     b &= SLOT_2_0;
946     /* moved CSE1 up */
947     /* a &= (0x7f<<14)|(0x7f); */
948     a = a<<7;
949     a |= b;
950     *v = a;
951     return 4;
952   }
953 
954   /* a: p0<<14 | p2 (masked) */
955   /* b: p1<<14 | p3 (unmasked) */
956   /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
957   /* moved CSE1 up */
958   /* a &= (0x7f<<14)|(0x7f); */
959   b &= SLOT_2_0;
960   s = a;
961   /* s: p0<<14 | p2 (masked) */
962 
963   p++;
964   a = a<<14;
965   a |= *p;
966   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
967   if (!(a&0x80))
968   {
969     /* we can skip these cause they were (effectively) done above
970     ** while calculating s */
971     /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
972     /* b &= (0x7f<<14)|(0x7f); */
973     b = b<<7;
974     a |= b;
975     s = s>>18;
976     *v = ((u64)s)<<32 | a;
977     return 5;
978   }
979 
980   /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
981   s = s<<7;
982   s |= b;
983   /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
984 
985   p++;
986   b = b<<14;
987   b |= *p;
988   /* b: p1<<28 | p3<<14 | p5 (unmasked) */
989   if (!(b&0x80))
990   {
991     /* we can skip this cause it was (effectively) done above in calc'ing s */
992     /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
993     a &= SLOT_2_0;
994     a = a<<7;
995     a |= b;
996     s = s>>18;
997     *v = ((u64)s)<<32 | a;
998     return 6;
999   }
1000 
1001   p++;
1002   a = a<<14;
1003   a |= *p;
1004   /* a: p2<<28 | p4<<14 | p6 (unmasked) */
1005   if (!(a&0x80))
1006   {
1007     a &= SLOT_4_2_0;
1008     b &= SLOT_2_0;
1009     b = b<<7;
1010     a |= b;
1011     s = s>>11;
1012     *v = ((u64)s)<<32 | a;
1013     return 7;
1014   }
1015 
1016   /* CSE2 from below */
1017   a &= SLOT_2_0;
1018   p++;
1019   b = b<<14;
1020   b |= *p;
1021   /* b: p3<<28 | p5<<14 | p7 (unmasked) */
1022   if (!(b&0x80))
1023   {
1024     b &= SLOT_4_2_0;
1025     /* moved CSE2 up */
1026     /* a &= (0x7f<<14)|(0x7f); */
1027     a = a<<7;
1028     a |= b;
1029     s = s>>4;
1030     *v = ((u64)s)<<32 | a;
1031     return 8;
1032   }
1033 
1034   p++;
1035   a = a<<15;
1036   a |= *p;
1037   /* a: p4<<29 | p6<<15 | p8 (unmasked) */
1038 
1039   /* moved CSE2 up */
1040   /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */
1041   b &= SLOT_2_0;
1042   b = b<<8;
1043   a |= b;
1044 
1045   s = s<<4;
1046   b = p[-4];
1047   b &= 0x7f;
1048   b = b>>3;
1049   s |= b;
1050 
1051   *v = ((u64)s)<<32 | a;
1052 
1053   return 9;
1054 }
1055 
1056 /*
1057 ** Read a 32-bit variable-length integer from memory starting at p[0].
1058 ** Return the number of bytes read.  The value is stored in *v.
1059 **
1060 ** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned
1061 ** integer, then set *v to 0xffffffff.
1062 **
1063 ** A MACRO version, getVarint32, is provided which inlines the
1064 ** single-byte case.  All code should use the MACRO version as
1065 ** this function assumes the single-byte case has already been handled.
1066 */
1067 u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
1068   u32 a,b;
1069 
1070   /* The 1-byte case.  Overwhelmingly the most common.  Handled inline
1071   ** by the getVarin32() macro */
1072   a = *p;
1073   /* a: p0 (unmasked) */
1074 #ifndef getVarint32
1075   if (!(a&0x80))
1076   {
1077     /* Values between 0 and 127 */
1078     *v = a;
1079     return 1;
1080   }
1081 #endif
1082 
1083   /* The 2-byte case */
1084   p++;
1085   b = *p;
1086   /* b: p1 (unmasked) */
1087   if (!(b&0x80))
1088   {
1089     /* Values between 128 and 16383 */
1090     a &= 0x7f;
1091     a = a<<7;
1092     *v = a | b;
1093     return 2;
1094   }
1095 
1096   /* The 3-byte case */
1097   p++;
1098   a = a<<14;
1099   a |= *p;
1100   /* a: p0<<14 | p2 (unmasked) */
1101   if (!(a&0x80))
1102   {
1103     /* Values between 16384 and 2097151 */
1104     a &= (0x7f<<14)|(0x7f);
1105     b &= 0x7f;
1106     b = b<<7;
1107     *v = a | b;
1108     return 3;
1109   }
1110 
1111   /* A 32-bit varint is used to store size information in btrees.
1112   ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
1113   ** A 3-byte varint is sufficient, for example, to record the size
1114   ** of a 1048569-byte BLOB or string.
1115   **
1116   ** We only unroll the first 1-, 2-, and 3- byte cases.  The very
1117   ** rare larger cases can be handled by the slower 64-bit varint
1118   ** routine.
1119   */
1120 #if 1
1121   {
1122     u64 v64;
1123     u8 n;
1124 
1125     p -= 2;
1126     n = sqlite3GetVarint(p, &v64);
1127     assert( n>3 && n<=9 );
1128     if( (v64 & SQLITE_MAX_U32)!=v64 ){
1129       *v = 0xffffffff;
1130     }else{
1131       *v = (u32)v64;
1132     }
1133     return n;
1134   }
1135 
1136 #else
1137   /* For following code (kept for historical record only) shows an
1138   ** unrolling for the 3- and 4-byte varint cases.  This code is
1139   ** slightly faster, but it is also larger and much harder to test.
1140   */
1141   p++;
1142   b = b<<14;
1143   b |= *p;
1144   /* b: p1<<14 | p3 (unmasked) */
1145   if (!(b&0x80))
1146   {
1147     /* Values between 2097152 and 268435455 */
1148     b &= (0x7f<<14)|(0x7f);
1149     a &= (0x7f<<14)|(0x7f);
1150     a = a<<7;
1151     *v = a | b;
1152     return 4;
1153   }
1154 
1155   p++;
1156   a = a<<14;
1157   a |= *p;
1158   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
1159   if (!(a&0x80))
1160   {
1161     /* Values  between 268435456 and 34359738367 */
1162     a &= SLOT_4_2_0;
1163     b &= SLOT_4_2_0;
1164     b = b<<7;
1165     *v = a | b;
1166     return 5;
1167   }
1168 
1169   /* We can only reach this point when reading a corrupt database
1170   ** file.  In that case we are not in any hurry.  Use the (relatively
1171   ** slow) general-purpose sqlite3GetVarint() routine to extract the
1172   ** value. */
1173   {
1174     u64 v64;
1175     u8 n;
1176 
1177     p -= 4;
1178     n = sqlite3GetVarint(p, &v64);
1179     assert( n>5 && n<=9 );
1180     *v = (u32)v64;
1181     return n;
1182   }
1183 #endif
1184 }
1185 
1186 /*
1187 ** Return the number of bytes that will be needed to store the given
1188 ** 64-bit integer.
1189 */
1190 int sqlite3VarintLen(u64 v){
1191   int i;
1192   for(i=1; (v >>= 7)!=0; i++){ assert( i<10 ); }
1193   return i;
1194 }
1195 
1196 
1197 /*
1198 ** Read or write a four-byte big-endian integer value.
1199 */
1200 u32 sqlite3Get4byte(const u8 *p){
1201 #if SQLITE_BYTEORDER==4321
1202   u32 x;
1203   memcpy(&x,p,4);
1204   return x;
1205 #elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000
1206   u32 x;
1207   memcpy(&x,p,4);
1208   return __builtin_bswap32(x);
1209 #elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300
1210   u32 x;
1211   memcpy(&x,p,4);
1212   return _byteswap_ulong(x);
1213 #else
1214   testcase( p[0]&0x80 );
1215   return ((unsigned)p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
1216 #endif
1217 }
1218 void sqlite3Put4byte(unsigned char *p, u32 v){
1219 #if SQLITE_BYTEORDER==4321
1220   memcpy(p,&v,4);
1221 #elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000
1222   u32 x = __builtin_bswap32(v);
1223   memcpy(p,&x,4);
1224 #elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300
1225   u32 x = _byteswap_ulong(v);
1226   memcpy(p,&x,4);
1227 #else
1228   p[0] = (u8)(v>>24);
1229   p[1] = (u8)(v>>16);
1230   p[2] = (u8)(v>>8);
1231   p[3] = (u8)v;
1232 #endif
1233 }
1234 
1235 
1236 
1237 /*
1238 ** Translate a single byte of Hex into an integer.
1239 ** This routine only works if h really is a valid hexadecimal
1240 ** character:  0..9a..fA..F
1241 */
1242 u8 sqlite3HexToInt(int h){
1243   assert( (h>='0' && h<='9') ||  (h>='a' && h<='f') ||  (h>='A' && h<='F') );
1244 #ifdef SQLITE_ASCII
1245   h += 9*(1&(h>>6));
1246 #endif
1247 #ifdef SQLITE_EBCDIC
1248   h += 9*(1&~(h>>4));
1249 #endif
1250   return (u8)(h & 0xf);
1251 }
1252 
1253 #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
1254 /*
1255 ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
1256 ** value.  Return a pointer to its binary value.  Space to hold the
1257 ** binary value has been obtained from malloc and must be freed by
1258 ** the calling routine.
1259 */
1260 void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
1261   char *zBlob;
1262   int i;
1263 
1264   zBlob = (char *)sqlite3DbMallocRawNN(db, n/2 + 1);
1265   n--;
1266   if( zBlob ){
1267     for(i=0; i<n; i+=2){
1268       zBlob[i/2] = (sqlite3HexToInt(z[i])<<4) | sqlite3HexToInt(z[i+1]);
1269     }
1270     zBlob[i/2] = 0;
1271   }
1272   return zBlob;
1273 }
1274 #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
1275 
1276 /*
1277 ** Log an error that is an API call on a connection pointer that should
1278 ** not have been used.  The "type" of connection pointer is given as the
1279 ** argument.  The zType is a word like "NULL" or "closed" or "invalid".
1280 */
1281 static void logBadConnection(const char *zType){
1282   sqlite3_log(SQLITE_MISUSE,
1283      "API call with %s database connection pointer",
1284      zType
1285   );
1286 }
1287 
1288 /*
1289 ** Check to make sure we have a valid db pointer.  This test is not
1290 ** foolproof but it does provide some measure of protection against
1291 ** misuse of the interface such as passing in db pointers that are
1292 ** NULL or which have been previously closed.  If this routine returns
1293 ** 1 it means that the db pointer is valid and 0 if it should not be
1294 ** dereferenced for any reason.  The calling function should invoke
1295 ** SQLITE_MISUSE immediately.
1296 **
1297 ** sqlite3SafetyCheckOk() requires that the db pointer be valid for
1298 ** use.  sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
1299 ** open properly and is not fit for general use but which can be
1300 ** used as an argument to sqlite3_errmsg() or sqlite3_close().
1301 */
1302 int sqlite3SafetyCheckOk(sqlite3 *db){
1303   u32 magic;
1304   if( db==0 ){
1305     logBadConnection("NULL");
1306     return 0;
1307   }
1308   magic = db->magic;
1309   if( magic!=SQLITE_MAGIC_OPEN ){
1310     if( sqlite3SafetyCheckSickOrOk(db) ){
1311       testcase( sqlite3GlobalConfig.xLog!=0 );
1312       logBadConnection("unopened");
1313     }
1314     return 0;
1315   }else{
1316     return 1;
1317   }
1318 }
1319 int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
1320   u32 magic;
1321   magic = db->magic;
1322   if( magic!=SQLITE_MAGIC_SICK &&
1323       magic!=SQLITE_MAGIC_OPEN &&
1324       magic!=SQLITE_MAGIC_BUSY ){
1325     testcase( sqlite3GlobalConfig.xLog!=0 );
1326     logBadConnection("invalid");
1327     return 0;
1328   }else{
1329     return 1;
1330   }
1331 }
1332 
1333 /*
1334 ** Attempt to add, substract, or multiply the 64-bit signed value iB against
1335 ** the other 64-bit signed integer at *pA and store the result in *pA.
1336 ** Return 0 on success.  Or if the operation would have resulted in an
1337 ** overflow, leave *pA unchanged and return 1.
1338 */
1339 int sqlite3AddInt64(i64 *pA, i64 iB){
1340 #if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
1341   return __builtin_add_overflow(*pA, iB, pA);
1342 #else
1343   i64 iA = *pA;
1344   testcase( iA==0 ); testcase( iA==1 );
1345   testcase( iB==-1 ); testcase( iB==0 );
1346   if( iB>=0 ){
1347     testcase( iA>0 && LARGEST_INT64 - iA == iB );
1348     testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
1349     if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
1350   }else{
1351     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
1352     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
1353     if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
1354   }
1355   *pA += iB;
1356   return 0;
1357 #endif
1358 }
1359 int sqlite3SubInt64(i64 *pA, i64 iB){
1360 #if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
1361   return __builtin_sub_overflow(*pA, iB, pA);
1362 #else
1363   testcase( iB==SMALLEST_INT64+1 );
1364   if( iB==SMALLEST_INT64 ){
1365     testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
1366     if( (*pA)>=0 ) return 1;
1367     *pA -= iB;
1368     return 0;
1369   }else{
1370     return sqlite3AddInt64(pA, -iB);
1371   }
1372 #endif
1373 }
1374 int sqlite3MulInt64(i64 *pA, i64 iB){
1375 #if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
1376   return __builtin_mul_overflow(*pA, iB, pA);
1377 #else
1378   i64 iA = *pA;
1379   if( iB>0 ){
1380     if( iA>LARGEST_INT64/iB ) return 1;
1381     if( iA<SMALLEST_INT64/iB ) return 1;
1382   }else if( iB<0 ){
1383     if( iA>0 ){
1384       if( iB<SMALLEST_INT64/iA ) return 1;
1385     }else if( iA<0 ){
1386       if( iB==SMALLEST_INT64 ) return 1;
1387       if( iA==SMALLEST_INT64 ) return 1;
1388       if( -iA>LARGEST_INT64/-iB ) return 1;
1389     }
1390   }
1391   *pA = iA*iB;
1392   return 0;
1393 #endif
1394 }
1395 
1396 /*
1397 ** Compute the absolute value of a 32-bit signed integer, of possible.  Or
1398 ** if the integer has a value of -2147483648, return +2147483647
1399 */
1400 int sqlite3AbsInt32(int x){
1401   if( x>=0 ) return x;
1402   if( x==(int)0x80000000 ) return 0x7fffffff;
1403   return -x;
1404 }
1405 
1406 #ifdef SQLITE_ENABLE_8_3_NAMES
1407 /*
1408 ** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database
1409 ** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
1410 ** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
1411 ** three characters, then shorten the suffix on z[] to be the last three
1412 ** characters of the original suffix.
1413 **
1414 ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always
1415 ** do the suffix shortening regardless of URI parameter.
1416 **
1417 ** Examples:
1418 **
1419 **     test.db-journal    =>   test.nal
1420 **     test.db-wal        =>   test.wal
1421 **     test.db-shm        =>   test.shm
1422 **     test.db-mj7f3319fa =>   test.9fa
1423 */
1424 void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
1425 #if SQLITE_ENABLE_8_3_NAMES<2
1426   if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) )
1427 #endif
1428   {
1429     int i, sz;
1430     sz = sqlite3Strlen30(z);
1431     for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
1432     if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4);
1433   }
1434 }
1435 #endif
1436 
1437 /*
1438 ** Find (an approximate) sum of two LogEst values.  This computation is
1439 ** not a simple "+" operator because LogEst is stored as a logarithmic
1440 ** value.
1441 **
1442 */
1443 LogEst sqlite3LogEstAdd(LogEst a, LogEst b){
1444   static const unsigned char x[] = {
1445      10, 10,                         /* 0,1 */
1446       9, 9,                          /* 2,3 */
1447       8, 8,                          /* 4,5 */
1448       7, 7, 7,                       /* 6,7,8 */
1449       6, 6, 6,                       /* 9,10,11 */
1450       5, 5, 5,                       /* 12-14 */
1451       4, 4, 4, 4,                    /* 15-18 */
1452       3, 3, 3, 3, 3, 3,              /* 19-24 */
1453       2, 2, 2, 2, 2, 2, 2,           /* 25-31 */
1454   };
1455   if( a>=b ){
1456     if( a>b+49 ) return a;
1457     if( a>b+31 ) return a+1;
1458     return a+x[a-b];
1459   }else{
1460     if( b>a+49 ) return b;
1461     if( b>a+31 ) return b+1;
1462     return b+x[b-a];
1463   }
1464 }
1465 
1466 /*
1467 ** Convert an integer into a LogEst.  In other words, compute an
1468 ** approximation for 10*log2(x).
1469 */
1470 LogEst sqlite3LogEst(u64 x){
1471   static LogEst a[] = { 0, 2, 3, 5, 6, 7, 8, 9 };
1472   LogEst y = 40;
1473   if( x<8 ){
1474     if( x<2 ) return 0;
1475     while( x<8 ){  y -= 10; x <<= 1; }
1476   }else{
1477 #if GCC_VERSION>=5004000
1478     int i = 60 - __builtin_clzll(x);
1479     y += i*10;
1480     x >>= i;
1481 #else
1482     while( x>255 ){ y += 40; x >>= 4; }  /*OPTIMIZATION-IF-TRUE*/
1483     while( x>15 ){  y += 10; x >>= 1; }
1484 #endif
1485   }
1486   return a[x&7] + y - 10;
1487 }
1488 
1489 #ifndef SQLITE_OMIT_VIRTUALTABLE
1490 /*
1491 ** Convert a double into a LogEst
1492 ** In other words, compute an approximation for 10*log2(x).
1493 */
1494 LogEst sqlite3LogEstFromDouble(double x){
1495   u64 a;
1496   LogEst e;
1497   assert( sizeof(x)==8 && sizeof(a)==8 );
1498   if( x<=1 ) return 0;
1499   if( x<=2000000000 ) return sqlite3LogEst((u64)x);
1500   memcpy(&a, &x, 8);
1501   e = (a>>52) - 1022;
1502   return e*10;
1503 }
1504 #endif /* SQLITE_OMIT_VIRTUALTABLE */
1505 
1506 #if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || \
1507     defined(SQLITE_ENABLE_STAT4) || \
1508     defined(SQLITE_EXPLAIN_ESTIMATED_ROWS)
1509 /*
1510 ** Convert a LogEst into an integer.
1511 **
1512 ** Note that this routine is only used when one or more of various
1513 ** non-standard compile-time options is enabled.
1514 */
1515 u64 sqlite3LogEstToInt(LogEst x){
1516   u64 n;
1517   n = x%10;
1518   x /= 10;
1519   if( n>=5 ) n -= 2;
1520   else if( n>=1 ) n -= 1;
1521 #if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || \
1522     defined(SQLITE_EXPLAIN_ESTIMATED_ROWS)
1523   if( x>60 ) return (u64)LARGEST_INT64;
1524 #else
1525   /* If only SQLITE_ENABLE_STAT4 is on, then the largest input
1526   ** possible to this routine is 310, resulting in a maximum x of 31 */
1527   assert( x<=60 );
1528 #endif
1529   return x>=3 ? (n+8)<<(x-3) : (n+8)>>(3-x);
1530 }
1531 #endif /* defined SCANSTAT or STAT4 or ESTIMATED_ROWS */
1532 
1533 /*
1534 ** Add a new name/number pair to a VList.  This might require that the
1535 ** VList object be reallocated, so return the new VList.  If an OOM
1536 ** error occurs, the original VList returned and the
1537 ** db->mallocFailed flag is set.
1538 **
1539 ** A VList is really just an array of integers.  To destroy a VList,
1540 ** simply pass it to sqlite3DbFree().
1541 **
1542 ** The first integer is the number of integers allocated for the whole
1543 ** VList.  The second integer is the number of integers actually used.
1544 ** Each name/number pair is encoded by subsequent groups of 3 or more
1545 ** integers.
1546 **
1547 ** Each name/number pair starts with two integers which are the numeric
1548 ** value for the pair and the size of the name/number pair, respectively.
1549 ** The text name overlays one or more following integers.  The text name
1550 ** is always zero-terminated.
1551 **
1552 ** Conceptually:
1553 **
1554 **    struct VList {
1555 **      int nAlloc;   // Number of allocated slots
1556 **      int nUsed;    // Number of used slots
1557 **      struct VListEntry {
1558 **        int iValue;    // Value for this entry
1559 **        int nSlot;     // Slots used by this entry
1560 **        // ... variable name goes here
1561 **      } a[0];
1562 **    }
1563 **
1564 ** During code generation, pointers to the variable names within the
1565 ** VList are taken.  When that happens, nAlloc is set to zero as an
1566 ** indication that the VList may never again be enlarged, since the
1567 ** accompanying realloc() would invalidate the pointers.
1568 */
1569 VList *sqlite3VListAdd(
1570   sqlite3 *db,           /* The database connection used for malloc() */
1571   VList *pIn,            /* The input VList.  Might be NULL */
1572   const char *zName,     /* Name of symbol to add */
1573   int nName,             /* Bytes of text in zName */
1574   int iVal               /* Value to associate with zName */
1575 ){
1576   int nInt;              /* number of sizeof(int) objects needed for zName */
1577   char *z;               /* Pointer to where zName will be stored */
1578   int i;                 /* Index in pIn[] where zName is stored */
1579 
1580   nInt = nName/4 + 3;
1581   assert( pIn==0 || pIn[0]>=3 );  /* Verify ok to add new elements */
1582   if( pIn==0 || pIn[1]+nInt > pIn[0] ){
1583     /* Enlarge the allocation */
1584     sqlite3_int64 nAlloc = (pIn ? 2*(sqlite3_int64)pIn[0] : 10) + nInt;
1585     VList *pOut = sqlite3DbRealloc(db, pIn, nAlloc*sizeof(int));
1586     if( pOut==0 ) return pIn;
1587     if( pIn==0 ) pOut[1] = 2;
1588     pIn = pOut;
1589     pIn[0] = nAlloc;
1590   }
1591   i = pIn[1];
1592   pIn[i] = iVal;
1593   pIn[i+1] = nInt;
1594   z = (char*)&pIn[i+2];
1595   pIn[1] = i+nInt;
1596   assert( pIn[1]<=pIn[0] );
1597   memcpy(z, zName, nName);
1598   z[nName] = 0;
1599   return pIn;
1600 }
1601 
1602 /*
1603 ** Return a pointer to the name of a variable in the given VList that
1604 ** has the value iVal.  Or return a NULL if there is no such variable in
1605 ** the list
1606 */
1607 const char *sqlite3VListNumToName(VList *pIn, int iVal){
1608   int i, mx;
1609   if( pIn==0 ) return 0;
1610   mx = pIn[1];
1611   i = 2;
1612   do{
1613     if( pIn[i]==iVal ) return (char*)&pIn[i+2];
1614     i += pIn[i+1];
1615   }while( i<mx );
1616   return 0;
1617 }
1618 
1619 /*
1620 ** Return the number of the variable named zName, if it is in VList.
1621 ** or return 0 if there is no such variable.
1622 */
1623 int sqlite3VListNameToNum(VList *pIn, const char *zName, int nName){
1624   int i, mx;
1625   if( pIn==0 ) return 0;
1626   mx = pIn[1];
1627   i = 2;
1628   do{
1629     const char *z = (const char*)&pIn[i+2];
1630     if( strncmp(z,zName,nName)==0 && z[nName]==0 ) return pIn[i];
1631     i += pIn[i+1];
1632   }while( i<mx );
1633   return 0;
1634 }
1635