/ Hex Artifact Content
Login

Artifact 8873d696c9ccc4206058c402e09e101f1b81561a:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 55 74 69 6c 69 74  ******.** Utilit
0180: 79 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  y functions used
0190: 20 74 68 72 6f 75 67 68 6f 75 74 20 73 71 6c 69   throughout sqli
01a0: 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  te..**.** This f
01b0: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 66 75 6e  ile contains fun
01c0: 63 74 69 6f 6e 73 20 66 6f 72 20 61 6c 6c 6f 63  ctions for alloc
01d0: 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c 20 63 6f  ating memory, co
01e0: 6d 70 61 72 69 6e 67 0a 2a 2a 20 73 74 72 69 6e  mparing.** strin
01f0: 67 73 2c 20 61 6e 64 20 73 74 75 66 66 20 6c 69  gs, and stuff li
0200: 6b 65 20 74 68 61 74 2e 0a 2a 2a 0a 2a 2f 0a 23  ke that..**.*/.#
0210: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49  include "sqliteI
0220: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c  nt.h".#include <
0230: 73 74 64 61 72 67 2e 68 3e 0a 23 69 66 20 48 41  stdarg.h>.#if HA
0240: 56 45 5f 49 53 4e 41 4e 20 7c 7c 20 53 51 4c 49  VE_ISNAN || SQLI
0250: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 20  TE_HAVE_ISNAN.# 
0260: 69 6e 63 6c 75 64 65 20 3c 6d 61 74 68 2e 68 3e  include <math.h>
0270: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
0280: 6f 75 74 69 6e 65 20 6e 65 65 64 65 64 20 74 6f  outine needed to
0290: 20 73 75 70 70 6f 72 74 20 74 68 65 20 74 65 73   support the tes
02a0: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 2e 0a 2a  tcase() macro..*
02b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
02c0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 76 6f  COVERAGE_TEST.vo
02d0: 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  id sqlite3Covera
02e0: 67 65 28 69 6e 74 20 78 29 7b 0a 20 20 73 74 61  ge(int x){.  sta
02f0: 74 69 63 20 75 6e 73 69 67 6e 65 64 20 64 75 6d  tic unsigned dum
0300: 6d 79 20 3d 20 30 3b 0a 20 20 64 75 6d 6d 79 20  my = 0;.  dummy 
0310: 2b 3d 20 28 75 6e 73 69 67 6e 65 64 29 78 3b 0a  += (unsigned)x;.
0320: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
0330: 47 69 76 65 20 61 20 63 61 6c 6c 62 61 63 6b 20  Give a callback 
0340: 74 6f 20 74 68 65 20 74 65 73 74 20 68 61 72 6e  to the test harn
0350: 65 73 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ess that can be 
0360: 75 73 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  used to simulate
0370: 20 66 61 75 6c 74 73 0a 2a 2a 20 69 6e 20 70 6c   faults.** in pl
0380: 61 63 65 73 20 77 68 65 72 65 20 69 74 20 69 73  aces where it is
0390: 20 64 69 66 66 69 63 75 6c 74 20 6f 72 20 65 78   difficult or ex
03a0: 70 65 6e 73 69 76 65 20 74 6f 20 64 6f 20 73 6f  pensive to do so
03b0: 20 70 75 72 65 6c 79 20 62 79 20 6d 65 61 6e 73   purely by means
03c0: 0a 2a 2a 20 6f 66 20 69 6e 70 75 74 73 2e 0a 2a  .** of inputs..*
03d0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 6e 74 20  *.** The intent 
03e0: 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  of the integer a
03f0: 72 67 75 6d 65 6e 74 20 69 73 20 74 6f 20 6c 65  rgument is to le
0400: 74 20 74 68 65 20 66 61 75 6c 74 20 73 69 6d 75  t the fault simu
0410: 6c 61 74 6f 72 20 6b 6e 6f 77 0a 2a 2a 20 77 68  lator know.** wh
0420: 69 63 68 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ich of multiple 
0430: 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
0440: 29 20 63 61 6c 6c 73 20 68 61 73 20 62 65 65 6e  ) calls has been
0450: 20 68 69 74 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75   hit..**.** Retu
0460: 72 6e 20 77 68 61 74 65 76 65 72 20 69 6e 74 65  rn whatever inte
0470: 67 65 72 20 76 61 6c 75 65 20 74 68 65 20 74 65  ger value the te
0480: 73 74 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  st callback retu
0490: 72 6e 73 2c 20 6f 72 20 72 65 74 75 72 6e 0a 2a  rns, or return.*
04a0: 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 6e  * SQLITE_OK if n
04b0: 6f 20 74 65 73 74 20 63 61 6c 6c 62 61 63 6b 20  o test callback 
04c0: 69 73 20 69 6e 73 74 61 6c 6c 65 64 2e 0a 2a 2f  is installed..*/
04d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
04e0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
04f0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75  T.int sqlite3Fau
0500: 6c 74 53 69 6d 28 69 6e 74 20 69 54 65 73 74 29  ltSim(int iTest)
0510: 7b 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  {.  int (*xCallb
0520: 61 63 6b 29 28 69 6e 74 29 20 3d 20 73 71 6c 69  ack)(int) = sqli
0530: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
0540: 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 3b 0a 20  xTestCallback;. 
0550: 20 72 65 74 75 72 6e 20 78 43 61 6c 6c 62 61 63   return xCallbac
0560: 6b 20 3f 20 78 43 61 6c 6c 62 61 63 6b 28 69 54  k ? xCallback(iT
0570: 65 73 74 29 20 3a 20 53 51 4c 49 54 45 5f 4f 4b  est) : SQLITE_OK
0580: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
0590: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
05a0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
05b0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
05c0: 20 69 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67   if the floating
05d0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 69 73 20   point value is 
05e0: 4e 6f 74 20 61 20 4e 75 6d 62 65 72 20 28 4e 61  Not a Number (Na
05f0: 4e 29 2e 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68  N)..**.** Use th
0600: 65 20 6d 61 74 68 20 6c 69 62 72 61 72 79 20 69  e math library i
0610: 73 6e 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  snan() function 
0620: 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  if compiled with
0630: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e   SQLITE_HAVE_ISN
0640: 41 4e 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  AN..** Otherwise
0650: 2c 20 77 65 20 68 61 76 65 20 6f 75 72 20 6f 77  , we have our ow
0660: 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
0670: 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 20 6d   that works on m
0680: 6f 73 74 20 73 79 73 74 65 6d 73 2e 0a 2a 2f 0a  ost systems..*/.
0690: 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
06a0: 28 64 6f 75 62 6c 65 20 78 29 7b 0a 20 20 69 6e  (double x){.  in
06b0: 74 20 72 63 3b 20 20 20 2f 2a 20 54 68 65 20 76  t rc;   /* The v
06c0: 61 6c 75 65 20 72 65 74 75 72 6e 20 2a 2f 0a 23  alue return */.#
06d0: 69 66 20 21 53 51 4c 49 54 45 5f 48 41 56 45 5f  if !SQLITE_HAVE_
06e0: 49 53 4e 41 4e 20 26 26 20 21 48 41 56 45 5f 49  ISNAN && !HAVE_I
06f0: 53 4e 41 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 53  SNAN.  /*.  ** S
0700: 79 73 74 65 6d 73 20 74 68 61 74 20 73 75 70 70  ystems that supp
0710: 6f 72 74 20 74 68 65 20 69 73 6e 61 6e 28 29 20  ort the isnan() 
0720: 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
0730: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0740: 0a 20 20 2a 2a 20 6d 61 6b 65 20 75 73 65 20 6f  .  ** make use o
0750: 66 20 69 74 20 62 79 20 63 6f 6d 70 69 6c 69 6e  f it by compilin
0760: 67 20 77 69 74 68 20 2d 44 53 51 4c 49 54 45 5f  g with -DSQLITE_
0770: 48 41 56 45 5f 49 53 4e 41 4e 2e 20 20 42 75 74  HAVE_ISNAN.  But
0780: 20 77 65 20 68 61 76 65 0a 20 20 2a 2a 20 66 6f   we have.  ** fo
0790: 75 6e 64 20 74 68 61 74 20 6d 61 6e 79 20 73 79  und that many sy
07a0: 73 74 65 6d 73 20 64 6f 20 6e 6f 74 20 68 61 76  stems do not hav
07b0: 65 20 61 20 77 6f 72 6b 69 6e 67 20 69 73 6e 61  e a working isna
07c0: 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 6f 0a  n() function so.
07d0: 20 20 2a 2a 20 74 68 69 73 20 69 6d 70 6c 65 6d    ** this implem
07e0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 70 72 6f 76  entation is prov
07f0: 69 64 65 64 20 61 73 20 61 6e 20 61 6c 74 65 72  ided as an alter
0800: 6e 61 74 69 76 65 2e 0a 20 20 2a 2a 0a 20 20 2a  native..  **.  *
0810: 2a 20 54 68 69 73 20 4e 61 4e 20 74 65 73 74 20  * This NaN test 
0820: 73 6f 6d 65 74 69 6d 65 73 20 66 61 69 6c 73 20  sometimes fails 
0830: 69 66 20 63 6f 6d 70 69 6c 65 64 20 6f 6e 20 47  if compiled on G
0840: 43 43 20 77 69 74 68 20 2d 66 66 61 73 74 2d 6d  CC with -ffast-m
0850: 61 74 68 2e 0a 20 20 2a 2a 20 4f 6e 20 74 68 65  ath..  ** On the
0860: 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 74 68 65   other hand, the
0870: 20 75 73 65 20 6f 66 20 2d 66 66 61 73 74 2d 6d   use of -ffast-m
0880: 61 74 68 20 63 6f 6d 65 73 20 77 69 74 68 20 74  ath comes with t
0890: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20 20 2a  he following.  *
08a0: 2a 20 77 61 72 6e 69 6e 67 3a 0a 20 20 2a 2a 0a  * warning:.  **.
08b0: 20 20 2a 2a 20 20 20 20 20 20 54 68 69 73 20 6f    **      This o
08c0: 70 74 69 6f 6e 20 5b 2d 66 66 61 73 74 2d 6d 61  ption [-ffast-ma
08d0: 74 68 5d 20 73 68 6f 75 6c 64 20 6e 65 76 65 72  th] should never
08e0: 20 62 65 20 74 75 72 6e 65 64 20 6f 6e 20 62 79   be turned on by
08f0: 20 61 6e 79 0a 20 20 2a 2a 20 20 20 20 20 20 2d   any.  **      -
0900: 4f 20 6f 70 74 69 6f 6e 20 73 69 6e 63 65 20 69  O option since i
0910: 74 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20  t can result in 
0920: 69 6e 63 6f 72 72 65 63 74 20 6f 75 74 70 75 74  incorrect output
0930: 20 66 6f 72 20 70 72 6f 67 72 61 6d 73 0a 20 20   for programs.  
0940: 2a 2a 20 20 20 20 20 20 77 68 69 63 68 20 64 65  **      which de
0950: 70 65 6e 64 20 6f 6e 20 61 6e 20 65 78 61 63 74  pend on an exact
0960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0970: 6f 66 20 49 45 45 45 20 6f 72 20 49 53 4f 20 0a  of IEEE or ISO .
0980: 20 20 2a 2a 20 20 20 20 20 20 72 75 6c 65 73 2f    **      rules/
0990: 73 70 65 63 69 66 69 63 61 74 69 6f 6e 73 20 66  specifications f
09a0: 6f 72 20 6d 61 74 68 20 66 75 6e 63 74 69 6f 6e  or math function
09b0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 6e 64  s..  **.  ** Und
09c0: 65 72 20 4d 53 56 43 2c 20 74 68 69 73 20 4e 61  er MSVC, this Na
09d0: 4e 20 74 65 73 74 20 6d 61 79 20 66 61 69 6c 20  N test may fail 
09e0: 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  if compiled with
09f0: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 0a 20 20 2a   a floating-.  *
0a00: 2a 20 70 6f 69 6e 74 20 70 72 65 63 69 73 69 6f  * point precisio
0a10: 6e 20 6d 6f 64 65 20 6f 74 68 65 72 20 74 68 61  n mode other tha
0a20: 6e 20 2f 66 70 3a 70 72 65 63 69 73 65 2e 20 20  n /fp:precise.  
0a30: 46 72 6f 6d 20 74 68 65 20 4d 53 44 4e 20 0a 20  From the MSDN . 
0a40: 20 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f   ** documentatio
0a50: 6e 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20  n:.  **.  **    
0a60: 20 20 54 68 65 20 63 6f 6d 70 69 6c 65 72 20 5b    The compiler [
0a70: 77 69 74 68 20 2f 66 70 3a 70 72 65 63 69 73 65  with /fp:precise
0a80: 5d 20 77 69 6c 6c 20 70 72 6f 70 65 72 6c 79 20  ] will properly 
0a90: 68 61 6e 64 6c 65 20 63 6f 6d 70 61 72 69 73 6f  handle compariso
0aa0: 6e 73 20 0a 20 20 2a 2a 20 20 20 20 20 20 69 6e  ns .  **      in
0ab0: 76 6f 6c 76 69 6e 67 20 4e 61 4e 2e 20 46 6f 72  volving NaN. For
0ac0: 20 65 78 61 6d 70 6c 65 2c 20 78 20 21 3d 20 78   example, x != x
0ad0: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72   evaluates to tr
0ae0: 75 65 20 69 66 20 78 20 69 73 20 4e 61 4e 20 0a  ue if x is NaN .
0af0: 20 20 2a 2a 20 20 20 20 20 20 2e 2e 2e 0a 20 20    **      ....  
0b00: 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 46 41 53 54  */.#ifdef __FAST
0b10: 5f 4d 41 54 48 5f 5f 0a 23 20 65 72 72 6f 72 20  _MATH__.# error 
0b20: 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20  SQLite will not 
0b30: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 77  work correctly w
0b40: 69 74 68 20 74 68 65 20 2d 66 66 61 73 74 2d 6d  ith the -ffast-m
0b50: 61 74 68 20 6f 70 74 69 6f 6e 20 6f 66 20 47 43  ath option of GC
0b60: 43 2e 0a 23 65 6e 64 69 66 0a 20 20 76 6f 6c 61  C..#endif.  vola
0b70: 74 69 6c 65 20 64 6f 75 62 6c 65 20 79 20 3d 20  tile double y = 
0b80: 78 3b 0a 20 20 76 6f 6c 61 74 69 6c 65 20 64 6f  x;.  volatile do
0b90: 75 62 6c 65 20 7a 20 3d 20 79 3b 0a 20 20 72 63  uble z = y;.  rc
0ba0: 20 3d 20 28 79 21 3d 7a 29 3b 0a 23 65 6c 73 65   = (y!=z);.#else
0bb0: 20 20 2f 2a 20 69 66 20 48 41 56 45 5f 49 53 4e    /* if HAVE_ISN
0bc0: 41 4e 20 2a 2f 0a 20 20 72 63 20 3d 20 69 73 6e  AN */.  rc = isn
0bd0: 61 6e 28 78 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  an(x);.#endif /*
0be0: 20 48 41 56 45 5f 49 53 4e 41 4e 20 2a 2f 0a 20   HAVE_ISNAN */. 
0bf0: 20 74 65 73 74 63 61 73 65 28 20 72 63 20 29 3b   testcase( rc );
0c00: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
0c10: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
0c20: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
0c30: 4f 49 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  OINT */../*.** C
0c40: 6f 6d 70 75 74 65 20 61 20 73 74 72 69 6e 67 20  ompute a string 
0c50: 6c 65 6e 67 74 68 20 74 68 61 74 20 69 73 20 6c  length that is l
0c60: 69 6d 69 74 65 64 20 74 6f 20 77 68 61 74 20 63  imited to what c
0c70: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 0a  an be stored in.
0c80: 2a 2a 20 6c 6f 77 65 72 20 33 30 20 62 69 74 73  ** lower 30 bits
0c90: 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73 69 67   of a 32-bit sig
0ca0: 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a  ned integer..**.
0cb0: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  ** The value ret
0cc0: 75 72 6e 65 64 20 77 69 6c 6c 20 6e 65 76 65 72  urned will never
0cd0: 20 62 65 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   be negative.  N
0ce0: 6f 72 20 77 69 6c 6c 20 69 74 20 65 76 65 72 20  or will it ever 
0cf0: 62 65 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  be greater.** th
0d00: 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 6c 65  an the actual le
0d10: 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
0d20: 6e 67 2e 20 20 46 6f 72 20 76 65 72 79 20 6c 6f  ng.  For very lo
0d30: 6e 67 20 73 74 72 69 6e 67 73 20 28 67 72 65 61  ng strings (grea
0d40: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 31 47 69 42  ter.** than 1GiB
0d50: 29 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  ) the value retu
0d60: 72 6e 65 64 20 6d 69 67 68 74 20 62 65 20 6c 65  rned might be le
0d70: 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75 65  ss than the true
0d80: 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 2e 0a   string length..
0d90: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
0da0: 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
0db0: 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20 7a 3d 3d  r *z){.  if( z==
0dc0: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
0dd0: 72 65 74 75 72 6e 20 30 78 33 66 66 66 66 66 66  return 0x3ffffff
0de0: 66 20 26 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  f & (int)strlen(
0df0: 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  z);.}../*.** Ret
0e00: 75 72 6e 20 74 68 65 20 64 65 63 6c 61 72 65 64  urn the declared
0e10: 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d   type of a colum
0e20: 6e 2e 20 20 4f 72 20 72 65 74 75 72 6e 20 7a 44  n.  Or return zD
0e30: 66 6c 74 20 69 66 20 74 68 65 20 63 6f 6c 75 6d  flt if the colum
0e40: 6e 20 0a 2a 2a 20 68 61 73 20 6e 6f 20 64 65 63  n .** has no dec
0e50: 6c 61 72 65 64 20 74 79 70 65 2e 0a 2a 2a 0a 2a  lared type..**.*
0e60: 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 74 79 70  * The column typ
0e70: 65 20 69 73 20 61 6e 20 65 78 74 72 61 20 73 74  e is an extra st
0e80: 72 69 6e 67 20 73 74 6f 72 65 64 20 61 66 74 65  ring stored afte
0e90: 72 20 74 68 65 20 7a 65 72 6f 2d 74 65 72 6d 69  r the zero-termi
0ea0: 6e 61 74 6f 72 20 6f 6e 0a 2a 2a 20 74 68 65 20  nator on.** the 
0eb0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 69 66 20 61  column name if a
0ec0: 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 43  nd only if the C
0ed0: 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 66  OLFLAG_HASTYPE f
0ee0: 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 63  lag is set..*/.c
0ef0: 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75  har *sqlite3Colu
0f00: 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 20 2a 70  mnType(Column *p
0f10: 43 6f 6c 2c 20 63 68 61 72 20 2a 7a 44 66 6c 74  Col, char *zDflt
0f20: 29 7b 0a 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e  ){.  if( (pCol->
0f30: 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
0f40: 41 47 5f 48 41 53 54 59 50 45 29 3d 3d 30 20 29  AG_HASTYPE)==0 )
0f50: 20 72 65 74 75 72 6e 20 7a 44 66 6c 74 3b 0a 20   return zDflt;. 
0f60: 20 72 65 74 75 72 6e 20 70 43 6f 6c 2d 3e 7a 4e   return pCol->zN
0f70: 61 6d 65 20 2b 20 73 74 72 6c 65 6e 28 70 43 6f  ame + strlen(pCo
0f80: 6c 2d 3e 7a 4e 61 6d 65 29 20 2b 20 31 3b 0a 7d  l->zName) + 1;.}
0f90: 0a 0a 2f 2a 0a 2a 2a 20 48 65 6c 70 65 72 20 66  ../*.** Helper f
0fa0: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 73 71 6c 69  unction for sqli
0fb0: 74 65 33 45 72 72 6f 72 28 29 20 2d 20 63 61 6c  te3Error() - cal
0fc0: 6c 65 64 20 72 61 72 65 6c 79 2e 20 20 42 72 6f  led rarely.  Bro
0fd0: 6b 65 6e 20 6f 75 74 20 69 6e 74 6f 0a 2a 2a 20  ken out into.** 
0fe0: 61 20 73 65 70 61 72 61 74 65 20 72 6f 75 74 69  a separate routi
0ff0: 6e 65 20 74 6f 20 61 76 6f 69 64 20 75 6e 6e 65  ne to avoid unne
1000: 63 65 73 73 61 72 79 20 72 65 67 69 73 74 65 72  cessary register
1010: 20 73 61 76 65 73 20 6f 6e 20 65 6e 74 72 79 20   saves on entry 
1020: 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 45 72 72  to.** sqlite3Err
1030: 6f 72 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  or()..*/.static 
1040: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
1050: 76 6f 69 64 20 20 73 71 6c 69 74 65 33 45 72 72  void  sqlite3Err
1060: 6f 72 46 69 6e 69 73 68 28 73 71 6c 69 74 65 33  orFinish(sqlite3
1070: 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f 63 6f   *db, int err_co
1080: 64 65 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 70  de){.  if( db->p
1090: 45 72 72 20 29 20 73 71 6c 69 74 65 33 56 61 6c  Err ) sqlite3Val
10a0: 75 65 53 65 74 4e 75 6c 6c 28 64 62 2d 3e 70 45  ueSetNull(db->pE
10b0: 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 79  rr);.  sqlite3Sy
10c0: 73 74 65 6d 45 72 72 6f 72 28 64 62 2c 20 65 72  stemError(db, er
10d0: 72 5f 63 6f 64 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  r_code);.}../*.*
10e0: 2a 20 53 65 74 20 74 68 65 20 63 75 72 72 65 6e  * Set the curren
10f0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 74 6f 20  t error code to 
1100: 65 72 72 5f 63 6f 64 65 20 61 6e 64 20 63 6c 65  err_code and cle
1110: 61 72 20 61 6e 79 20 70 72 69 6f 72 20 65 72 72  ar any prior err
1120: 6f 72 20 6d 65 73 73 61 67 65 2e 0a 2a 2a 20 41  or message..** A
1130: 6c 73 6f 20 73 65 74 20 69 53 79 73 45 72 72 6e  lso set iSysErrn
1140: 6f 20 28 62 79 20 63 61 6c 6c 69 6e 67 20 73 71  o (by calling sq
1150: 6c 69 74 65 33 53 79 73 74 65 6d 29 20 69 66 20  lite3System) if 
1160: 74 68 65 20 65 72 72 5f 63 6f 64 65 20 69 6e 64  the err_code ind
1170: 69 63 61 74 65 73 0a 2a 2a 20 74 68 61 74 20 77  icates.** that w
1180: 6f 75 6c 64 20 62 65 20 61 70 70 72 6f 70 72 69  ould be appropri
1190: 61 74 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ate..*/.void sql
11a0: 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
11b0: 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f 63  3 *db, int err_c
11c0: 6f 64 65 29 7b 0a 20 20 61 73 73 65 72 74 28 20  ode){.  assert( 
11d0: 64 62 21 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 65  db!=0 );.  db->e
11e0: 72 72 43 6f 64 65 20 3d 20 65 72 72 5f 63 6f 64  rrCode = err_cod
11f0: 65 3b 0a 20 20 69 66 28 20 65 72 72 5f 63 6f 64  e;.  if( err_cod
1200: 65 20 7c 7c 20 64 62 2d 3e 70 45 72 72 20 29 20  e || db->pErr ) 
1210: 73 71 6c 69 74 65 33 45 72 72 6f 72 46 69 6e 69  sqlite3ErrorFini
1220: 73 68 28 64 62 2c 20 65 72 72 5f 63 6f 64 65 29  sh(db, err_code)
1230: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 61 64 20  ;.}../*.** Load 
1240: 74 68 65 20 73 71 6c 69 74 65 33 2e 69 53 79 73  the sqlite3.iSys
1250: 45 72 72 6e 6f 20 66 69 65 6c 64 20 69 66 20 74  Errno field if t
1260: 68 61 74 20 69 73 20 61 6e 20 61 70 70 72 6f 70  hat is an approp
1270: 72 69 61 74 65 20 74 68 69 6e 67 0a 2a 2a 20 74  riate thing.** t
1280: 6f 20 64 6f 20 62 61 73 65 64 20 6f 6e 20 74 68  o do based on th
1290: 65 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  e SQLite error c
12a0: 6f 64 65 20 69 6e 20 72 63 2e 0a 2a 2f 0a 76 6f  ode in rc..*/.vo
12b0: 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
12c0: 45 72 72 6f 72 28 73 71 6c 69 74 65 33 20 2a 64  Error(sqlite3 *d
12d0: 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66  b, int rc){.  if
12e0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
12f0: 52 52 5f 4e 4f 4d 45 4d 20 29 20 72 65 74 75 72  RR_NOMEM ) retur
1300: 6e 3b 0a 20 20 72 63 20 26 3d 20 30 78 66 66 3b  n;.  rc &= 0xff;
1310: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1320: 45 5f 43 41 4e 54 4f 50 45 4e 20 7c 7c 20 72 63  E_CANTOPEN || rc
1330: 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 29  ==SQLITE_IOERR )
1340: 7b 0a 20 20 20 20 64 62 2d 3e 69 53 79 73 45 72  {.    db->iSysEr
1350: 72 6e 6f 20 3d 20 73 71 6c 69 74 65 33 4f 73 47  rno = sqlite3OsG
1360: 65 74 4c 61 73 74 45 72 72 6f 72 28 64 62 2d 3e  etLastError(db->
1370: 70 56 66 73 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  pVfs);.  }.}../*
1380: 0a 2a 2a 20 53 65 74 20 74 68 65 20 6d 6f 73 74  .** Set the most
1390: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
13a0: 64 65 20 61 6e 64 20 65 72 72 6f 72 20 73 74 72  de and error str
13b0: 69 6e 67 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ing for the sqli
13c0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 22 64 62  te.** handle "db
13d0: 22 2e 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64  ". The error cod
13e0: 65 20 69 73 20 73 65 74 20 74 6f 20 22 65 72 72  e is set to "err
13f0: 5f 63 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a 20 49 66  _code"..**.** If
1400: 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1410: 20 73 74 72 69 6e 67 20 7a 46 6f 72 6d 61 74 20   string zFormat 
1420: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 6f  specifies the fo
1430: 72 6d 61 74 20 6f 66 20 74 68 65 0a 2a 2a 20 65  rmat of the.** e
1440: 72 72 6f 72 20 73 74 72 69 6e 67 20 69 6e 20 74  rror string in t
1450: 68 65 20 73 74 79 6c 65 20 6f 66 20 74 68 65 20  he style of the 
1460: 70 72 69 6e 74 66 20 66 75 6e 63 74 69 6f 6e 73  printf functions
1470: 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  : The following.
1480: 2a 2a 20 66 6f 72 6d 61 74 20 63 68 61 72 61 63  ** format charac
1490: 74 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ters are allowed
14a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20  :.**.**      %s 
14b0: 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 73 74       Insert a st
14c0: 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20  ring.**      %z 
14d0: 20 20 20 20 20 41 20 73 74 72 69 6e 67 20 74 68       A string th
14e0: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65  at should be fre
14f0: 65 64 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20  ed after use.** 
1500: 20 20 20 20 20 25 64 20 20 20 20 20 20 49 6e 73       %d      Ins
1510: 65 72 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  ert an integer.*
1520: 2a 20 20 20 20 20 20 25 54 20 20 20 20 20 20 49  *      %T      I
1530: 6e 73 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a  nsert a token.**
1540: 20 20 20 20 20 20 25 53 20 20 20 20 20 20 49 6e        %S      In
1550: 73 65 72 74 20 74 68 65 20 66 69 72 73 74 20 65  sert the first e
1560: 6c 65 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c  lement of a SrcL
1570: 69 73 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f 72 6d 61  ist.**.** zForma
1580: 74 20 61 6e 64 20 61 6e 79 20 73 74 72 69 6e 67  t and any string
1590: 20 74 6f 6b 65 6e 73 20 74 68 61 74 20 66 6f 6c   tokens that fol
15a0: 6c 6f 77 20 69 74 20 61 72 65 20 61 73 73 75 6d  low it are assum
15b0: 65 64 20 74 6f 20 62 65 0a 2a 2a 20 65 6e 63 6f  ed to be.** enco
15c0: 64 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a  ded in UTF-8..**
15d0: 0a 2a 2a 20 54 6f 20 63 6c 65 61 72 20 74 68 65  .** To clear the
15e0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   most recent err
15f0: 6f 72 20 66 6f 72 20 73 71 6c 69 74 65 20 68 61  or for sqlite ha
1600: 6e 64 6c 65 20 22 64 62 22 2c 20 73 71 6c 69 74  ndle "db", sqlit
1610: 65 33 45 72 72 6f 72 0a 2a 2a 20 73 68 6f 75 6c  e3Error.** shoul
1620: 64 20 62 65 20 63 61 6c 6c 65 64 20 77 69 74 68  d be called with
1630: 20 65 72 72 5f 63 6f 64 65 20 73 65 74 20 74 6f   err_code set to
1640: 20 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 7a   SQLITE_OK and z
1650: 46 6f 72 6d 61 74 20 73 65 74 0a 2a 2a 20 74 6f  Format set.** to
1660: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73   NULL..*/.void s
1670: 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
1680: 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  sg(sqlite3 *db, 
1690: 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f  int err_code, co
16a0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
16b0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 61 73 73 65 72  t, ...){.  asser
16c0: 74 28 20 64 62 21 3d 30 20 29 3b 0a 20 20 64 62  t( db!=0 );.  db
16d0: 2d 3e 65 72 72 43 6f 64 65 20 3d 20 65 72 72 5f  ->errCode = err_
16e0: 63 6f 64 65 3b 0a 20 20 73 71 6c 69 74 65 33 53  code;.  sqlite3S
16f0: 79 73 74 65 6d 45 72 72 6f 72 28 64 62 2c 20 65  ystemError(db, e
1700: 72 72 5f 63 6f 64 65 29 3b 0a 20 20 69 66 28 20  rr_code);.  if( 
1710: 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20  zFormat==0 ){.  
1720: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
1730: 62 2c 20 65 72 72 5f 63 6f 64 65 29 3b 0a 20 20  b, err_code);.  
1740: 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 70 45  }else if( db->pE
1750: 72 72 20 7c 7c 20 28 64 62 2d 3e 70 45 72 72 20  rr || (db->pErr 
1760: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
1770: 77 28 64 62 29 29 21 3d 30 20 29 7b 0a 20 20 20  w(db))!=0 ){.   
1780: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 76 61   char *z;.    va
1790: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20 20 76 61  _list ap;.    va
17a0: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
17b0: 61 74 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c  at);.    z = sql
17c0: 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64 62 2c  ite3VMPrintf(db,
17d0: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
17e0: 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20     va_end(ap);. 
17f0: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53     sqlite3ValueS
1800: 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20  etStr(db->pErr, 
1810: 2d 31 2c 20 7a 2c 20 53 51 4c 49 54 45 5f 55 54  -1, z, SQLITE_UT
1820: 46 38 2c 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  F8, SQLITE_DYNAM
1830: 49 43 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  IC);.  }.}../*.*
1840: 2a 20 41 64 64 20 61 6e 20 65 72 72 6f 72 20 6d  * Add an error m
1850: 65 73 73 61 67 65 20 74 6f 20 70 50 61 72 73 65  essage to pParse
1860: 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64 20 69 6e  ->zErrMsg and in
1870: 63 72 65 6d 65 6e 74 20 70 50 61 72 73 65 2d 3e  crement pParse->
1880: 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c  nErr..** The fol
1890: 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e  lowing formattin
18a0: 67 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65  g characters are
18b0: 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20   allowed:.**.** 
18c0: 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e 73       %s      Ins
18d0: 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20  ert a string.** 
18e0: 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20 73       %z      A s
18f0: 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c  tring that shoul
1900: 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65 72  d be freed after
1910: 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20   use.**      %d 
1920: 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69       Insert an i
1930: 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25  nteger.**      %
1940: 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20  T      Insert a 
1950: 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53  token.**      %S
1960: 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68 65        Insert the
1970: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1980: 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a  f a SrcList.**.*
1990: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
19a0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74  should be used t
19b0: 6f 20 72 65 70 6f 72 74 20 61 6e 79 20 65 72 72  o report any err
19c0: 6f 72 20 74 68 61 74 20 6f 63 63 75 72 73 20 77  or that occurs w
19d0: 68 69 6c 65 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e  hile.** compilin
19e0: 67 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  g an SQL stateme
19f0: 6e 74 20 28 69 2e 65 2e 20 77 69 74 68 69 6e 20  nt (i.e. within 
1a00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
1a10: 29 29 2e 20 54 68 65 0a 2a 2a 20 6c 61 73 74 20  )). The.** last 
1a20: 74 68 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  thing the sqlite
1a30: 33 5f 70 72 65 70 61 72 65 28 29 20 66 75 6e 63  3_prepare() func
1a40: 74 69 6f 6e 20 64 6f 65 73 20 69 73 20 63 6f 70  tion does is cop
1a50: 79 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 73  y the error.** s
1a60: 74 6f 72 65 64 20 62 79 20 74 68 69 73 20 66 75  tored by this fu
1a70: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20  nction into the 
1a80: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
1a90: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 45 72 72  using sqlite3Err
1aa0: 6f 72 28 29 2e 0a 2a 2a 20 46 75 6e 63 74 69 6f  or()..** Functio
1ab0: 6e 73 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  ns sqlite3Error(
1ac0: 29 20 6f 72 20 73 71 6c 69 74 65 33 45 72 72 6f  ) or sqlite3Erro
1ad0: 72 57 69 74 68 4d 73 67 28 29 20 73 68 6f 75 6c  rWithMsg() shoul
1ae0: 64 20 62 65 20 75 73 65 64 0a 2a 2a 20 64 75 72  d be used.** dur
1af0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 65 78  ing statement ex
1b00: 65 63 75 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  ecution (sqlite3
1b10: 5f 73 74 65 70 28 29 20 65 74 63 2e 29 2e 0a 2a  _step() etc.)..*
1b20: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  /.void sqlite3Er
1b30: 72 6f 72 4d 73 67 28 50 61 72 73 65 20 2a 70 50  rorMsg(Parse *pP
1b40: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
1b50: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
1b60: 0a 20 20 63 68 61 72 20 2a 7a 4d 73 67 3b 0a 20  .  char *zMsg;. 
1b70: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 73   va_list ap;.  s
1b80: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61  qlite3 *db = pPa
1b90: 72 73 65 2d 3e 64 62 3b 0a 20 20 76 61 5f 73 74  rse->db;.  va_st
1ba0: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
1bb0: 3b 0a 20 20 7a 4d 73 67 20 3d 20 73 71 6c 69 74  ;.  zMsg = sqlit
1bc0: 65 33 56 4d 50 72 69 6e 74 66 28 64 62 2c 20 7a  e3VMPrintf(db, z
1bd0: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76  Format, ap);.  v
1be0: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 69 66 28  a_end(ap);.  if(
1bf0: 20 64 62 2d 3e 73 75 70 70 72 65 73 73 45 72 72   db->suppressErr
1c00: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1c10: 62 46 72 65 65 28 64 62 2c 20 7a 4d 73 67 29 3b  bFree(db, zMsg);
1c20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 50  .  }else{.    pP
1c30: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
1c40: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1c50: 64 62 2c 20 70 50 61 72 73 65 2d 3e 7a 45 72 72  db, pParse->zErr
1c60: 4d 73 67 29 3b 0a 20 20 20 20 70 50 61 72 73 65  Msg);.    pParse
1c70: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 7a 4d 73 67  ->zErrMsg = zMsg
1c80: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  ;.    pParse->rc
1c90: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
1ca0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f  .  }.}../*.** Co
1cb0: 6e 76 65 72 74 20 61 6e 20 53 51 4c 2d 73 74 79  nvert an SQL-sty
1cc0: 6c 65 20 71 75 6f 74 65 64 20 73 74 72 69 6e 67  le quoted string
1cd0: 20 69 6e 74 6f 20 61 20 6e 6f 72 6d 61 6c 20 73   into a normal s
1ce0: 74 72 69 6e 67 20 62 79 20 72 65 6d 6f 76 69 6e  tring by removin
1cf0: 67 0a 2a 2a 20 74 68 65 20 71 75 6f 74 65 20 63  g.** the quote c
1d00: 68 61 72 61 63 74 65 72 73 2e 20 20 54 68 65 20  haracters.  The 
1d10: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 64 6f  conversion is do
1d20: 6e 65 20 69 6e 2d 70 6c 61 63 65 2e 20 20 49 66  ne in-place.  If
1d30: 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20 64 6f   the.** input do
1d40: 65 73 20 6e 6f 74 20 62 65 67 69 6e 20 77 69 74  es not begin wit
1d50: 68 20 61 20 71 75 6f 74 65 20 63 68 61 72 61 63  h a quote charac
1d60: 74 65 72 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ter, then this r
1d70: 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20 61 20 6e  outine.** is a n
1d80: 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o-op..**.** The 
1d90: 69 6e 70 75 74 20 73 74 72 69 6e 67 20 6d 75 73  input string mus
1da0: 74 20 62 65 20 7a 65 72 6f 2d 74 65 72 6d 69 6e  t be zero-termin
1db0: 61 74 65 64 2e 20 20 41 20 6e 65 77 20 7a 65 72  ated.  A new zer
1dc0: 6f 2d 74 65 72 6d 69 6e 61 74 6f 72 0a 2a 2a 20  o-terminator.** 
1dd0: 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  is added to the 
1de0: 64 65 71 75 6f 74 65 64 20 73 74 72 69 6e 67 2e  dequoted string.
1df0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 74 75 72  .**.** The retur
1e00: 6e 20 76 61 6c 75 65 20 69 73 20 2d 31 20 69 66  n value is -1 if
1e10: 20 6e 6f 20 64 65 71 75 6f 74 69 6e 67 20 6f 63   no dequoting oc
1e20: 63 75 72 73 20 6f 72 20 74 68 65 20 6c 65 6e 67  curs or the leng
1e30: 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20 64 65 71  th of the.** deq
1e40: 75 6f 74 65 64 20 73 74 72 69 6e 67 2c 20 65 78  uoted string, ex
1e50: 63 6c 75 73 69 76 65 20 6f 66 20 74 68 65 20 7a  clusive of the z
1e60: 65 72 6f 20 74 65 72 6d 69 6e 61 74 6f 72 2c 20  ero terminator, 
1e70: 69 66 20 64 65 71 75 6f 74 69 6e 67 20 64 6f 65  if dequoting doe
1e80: 73 0a 2a 2a 20 6f 63 63 75 72 2e 0a 2a 2a 0a 2a  s.** occur..**.*
1e90: 2a 20 32 30 30 32 2d 46 65 62 2d 31 34 3a 20 54  * 2002-Feb-14: T
1ea0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 65  his routine is e
1eb0: 78 74 65 6e 64 65 64 20 74 6f 20 72 65 6d 6f 76  xtended to remov
1ec0: 65 20 4d 53 2d 41 63 63 65 73 73 20 73 74 79 6c  e MS-Access styl
1ed0: 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73 20 66 72  e.** brackets fr
1ee0: 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65 6e 74 69  om around identi
1ef0: 66 69 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d  fiers.  For exam
1f00: 70 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d 22 20  ple:  "[a-b-c]" 
1f10: 62 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d  becomes.** "a-b-
1f20: 63 22 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  c"..*/.int sqlit
1f30: 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 20 2a  e3Dequote(char *
1f40: 7a 29 7b 0a 20 20 63 68 61 72 20 71 75 6f 74 65  z){.  char quote
1f50: 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20  ;.  int i, j;.  
1f60: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
1f70: 6e 20 2d 31 3b 0a 20 20 71 75 6f 74 65 20 3d 20  n -1;.  quote = 
1f80: 7a 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68 28 20  z[0];.  switch( 
1f90: 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 61 73  quote ){.    cas
1fa0: 65 20 27 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a  e '\'':  break;.
1fb0: 20 20 20 20 63 61 73 65 20 27 22 27 3a 20 20 20      case '"':   
1fc0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
1fd0: 27 60 27 3a 20 20 20 62 72 65 61 6b 3b 20 20 20  '`':   break;   
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ff0: 46 6f 72 20 4d 79 53 51 4c 20 63 6f 6d 70 61 74  For MySQL compat
2000: 69 62 69 6c 69 74 79 20 2a 2f 0a 20 20 20 20 63  ibility */.    c
2010: 61 73 65 20 27 5b 27 3a 20 20 20 71 75 6f 74 65  ase '[':   quote
2020: 20 3d 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b 20   = ']';  break; 
2030: 20 2f 2a 20 46 6f 72 20 4d 53 20 53 71 6c 53 65   /* For MS SqlSe
2040: 72 76 65 72 20 63 6f 6d 70 61 74 69 62 69 6c 69  rver compatibili
2050: 74 79 20 2a 2f 0a 20 20 20 20 64 65 66 61 75 6c  ty */.    defaul
2060: 74 3a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b  t:    return -1;
2070: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 31 2c 20  .  }.  for(i=1, 
2080: 6a 3d 30 3b 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  j=0;; i++){.    
2090: 61 73 73 65 72 74 28 20 7a 5b 69 5d 20 29 3b 0a  assert( z[i] );.
20a0: 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75      if( z[i]==qu
20b0: 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ote ){.      if(
20c0: 20 7a 5b 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29   z[i+1]==quote )
20d0: 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d  {.        z[j++]
20e0: 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 20 20   = quote;.      
20f0: 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c    i++;.      }el
2100: 73 65 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61  se{.        brea
2110: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
2120: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b  else{.      z[j+
2130: 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d  +] = z[i];.    }
2140: 0a 20 20 7d 0a 20 20 7a 5b 6a 5d 20 3d 20 30 3b  .  }.  z[j] = 0;
2150: 0a 20 20 72 65 74 75 72 6e 20 6a 3b 0a 7d 0a 0a  .  return j;.}..
2160: 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61  /*.** Generate a
2170: 20 54 6f 6b 65 6e 20 6f 62 6a 65 63 74 20 66 72   Token object fr
2180: 6f 6d 20 61 20 73 74 72 69 6e 67 0a 2a 2f 0a 76  om a string.*/.v
2190: 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e  oid sqlite3Token
21a0: 49 6e 69 74 28 54 6f 6b 65 6e 20 2a 70 2c 20 63  Init(Token *p, c
21b0: 68 61 72 20 2a 7a 29 7b 0a 20 20 70 2d 3e 7a 20  har *z){.  p->z 
21c0: 3d 20 7a 3b 0a 20 20 70 2d 3e 6e 20 3d 20 73 71  = z;.  p->n = sq
21d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29  lite3Strlen30(z)
21e0: 3b 0a 7d 0a 0a 2f 2a 20 43 6f 6e 76 65 6e 69 65  ;.}../* Convenie
21f0: 6e 74 20 73 68 6f 72 74 2d 68 61 6e 64 20 2a 2f  nt short-hand */
2200: 0a 23 64 65 66 69 6e 65 20 55 70 70 65 72 54 6f  .#define UpperTo
2210: 4c 6f 77 65 72 20 73 71 6c 69 74 65 33 55 70 70  Lower sqlite3Upp
2220: 65 72 54 6f 4c 6f 77 65 72 0a 0a 2f 2a 0a 2a 2a  erToLower../*.**
2230: 20 53 6f 6d 65 20 73 79 73 74 65 6d 73 20 68 61   Some systems ha
2240: 76 65 20 73 74 72 69 63 6d 70 28 29 2e 20 20 4f  ve stricmp().  O
2250: 74 68 65 72 73 20 68 61 76 65 20 73 74 72 63 61  thers have strca
2260: 73 65 63 6d 70 28 29 2e 20 20 42 65 63 61 75 73  secmp().  Becaus
2270: 65 0a 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f  e.** there is no
2280: 20 63 6f 6e 73 69 73 74 65 6e 63 79 2c 20 77 65   consistency, we
2290: 20 77 69 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72   will define our
22a0: 20 6f 77 6e 2e 0a 2a 2a 0a 2a 2a 20 49 4d 50 4c   own..**.** IMPL
22b0: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
22c0: 2d 33 30 32 34 33 2d 30 32 34 39 34 20 54 68 65  -30243-02494 The
22d0: 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
22e0: 28 29 20 61 6e 64 0a 2a 2a 20 73 71 6c 69 74 65  () and.** sqlite
22f0: 33 5f 73 74 72 6e 69 63 6d 70 28 29 20 41 50 49  3_strnicmp() API
2300: 73 20 61 6c 6c 6f 77 20 61 70 70 6c 69 63 61 74  s allow applicat
2310: 69 6f 6e 73 20 61 6e 64 20 65 78 74 65 6e 73 69  ions and extensi
2320: 6f 6e 73 20 74 6f 20 63 6f 6d 70 61 72 65 0a 2a  ons to compare.*
2330: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  * the contents o
2340: 66 20 74 77 6f 20 62 75 66 66 65 72 73 20 63 6f  f two buffers co
2350: 6e 74 61 69 6e 69 6e 67 20 55 54 46 2d 38 20 73  ntaining UTF-8 s
2360: 74 72 69 6e 67 73 20 69 6e 20 61 0a 2a 2a 20 63  trings in a.** c
2370: 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20  ase-independent 
2380: 66 61 73 68 69 6f 6e 2c 20 75 73 69 6e 67 20 74  fashion, using t
2390: 68 65 20 73 61 6d 65 20 64 65 66 69 6e 69 74 69  he same definiti
23a0: 6f 6e 20 6f 66 20 22 63 61 73 65 0a 2a 2a 20 69  on of "case.** i
23b0: 6e 64 65 70 65 6e 64 65 6e 63 65 22 20 74 68 61  ndependence" tha
23c0: 74 20 53 51 4c 69 74 65 20 75 73 65 73 20 69 6e  t SQLite uses in
23d0: 74 65 72 6e 61 6c 6c 79 20 77 68 65 6e 20 63 6f  ternally when co
23e0: 6d 70 61 72 69 6e 67 20 69 64 65 6e 74 69 66 69  mparing identifi
23f0: 65 72 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ers..*/.int sqli
2400: 74 65 33 5f 73 74 72 69 63 6d 70 28 63 6f 6e 73  te3_stricmp(cons
2410: 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63  t char *zLeft, c
2420: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68  onst char *zRigh
2430: 74 29 7b 0a 20 20 69 66 28 20 7a 4c 65 66 74 3d  t){.  if( zLeft=
2440: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
2450: 20 7a 52 69 67 68 74 20 3f 20 2d 31 20 3a 20 30   zRight ? -1 : 0
2460: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 52  ;.  }else if( zR
2470: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  ight==0 ){.    r
2480: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
2490: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 53 74 72  eturn sqlite3Str
24a0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 7a 52 69 67  ICmp(zLeft, zRig
24b0: 68 74 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  ht);.}.int sqlit
24c0: 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
24d0: 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e  char *zLeft, con
24e0: 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 29  st char *zRight)
24f0: 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  {.  unsigned cha
2500: 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 69 6e 74 20  r *a, *b;.  int 
2510: 63 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e  c;.  a = (unsign
2520: 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b  ed char *)zLeft;
2530: 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64  .  b = (unsigned
2540: 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a   char *)zRight;.
2550: 20 20 66 6f 72 28 3b 3b 29 7b 0a 20 20 20 20 63    for(;;){.    c
2560: 20 3d 20 28 69 6e 74 29 55 70 70 65 72 54 6f 4c   = (int)UpperToL
2570: 6f 77 65 72 5b 2a 61 5d 20 2d 20 28 69 6e 74 29  ower[*a] - (int)
2580: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
2590: 3b 0a 20 20 20 20 69 66 28 20 63 20 7c 7c 20 2a  ;.    if( c || *
25a0: 61 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  a==0 ) break;.  
25b0: 20 20 61 2b 2b 3b 0a 20 20 20 20 62 2b 2b 3b 0a    a++;.    b++;.
25c0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 63 3b 0a    }.  return c;.
25d0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74  }.int sqlite3_st
25e0: 72 6e 69 63 6d 70 28 63 6f 6e 73 74 20 63 68 61  rnicmp(const cha
25f0: 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20  r *zLeft, const 
2600: 63 68 61 72 20 2a 7a 52 69 67 68 74 2c 20 69 6e  char *zRight, in
2610: 74 20 4e 29 7b 0a 20 20 72 65 67 69 73 74 65 72  t N){.  register
2620: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2630: 61 2c 20 2a 62 3b 0a 20 20 69 66 28 20 7a 4c 65  a, *b;.  if( zLe
2640: 66 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ft==0 ){.    ret
2650: 75 72 6e 20 7a 52 69 67 68 74 20 3f 20 2d 31 20  urn zRight ? -1 
2660: 3a 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  : 0;.  }else if(
2670: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
2680: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
2690: 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    a = (unsigned 
26a0: 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20  char *)zLeft;.  
26b0: 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  b = (unsigned ch
26c0: 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77  ar *)zRight;.  w
26d0: 68 69 6c 65 28 20 4e 2d 2d 20 3e 20 30 20 26 26  hile( N-- > 0 &&
26e0: 20 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72 54   *a!=0 && UpperT
26f0: 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65  oLower[*a]==Uppe
2700: 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61  rToLower[*b]){ a
2710: 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74  ++; b++; }.  ret
2720: 75 72 6e 20 4e 3c 30 20 3f 20 30 20 3a 20 55 70  urn N<0 ? 0 : Up
2730: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d  perToLower[*a] -
2740: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62   UpperToLower[*b
2750: 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ];.}../*.** The 
2760: 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20 61 6e  string z[] is an
2770: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
2780: 74 69 6f 6e 20 6f 66 20 61 20 72 65 61 6c 20 6e  tion of a real n
2790: 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76 65 72  umber..** Conver
27a0: 74 20 74 68 69 73 20 73 74 72 69 6e 67 20 74 6f  t this string to
27b0: 20 61 20 64 6f 75 62 6c 65 20 61 6e 64 20 77 72   a double and wr
27c0: 69 74 65 20 69 74 20 69 6e 74 6f 20 2a 70 52 65  ite it into *pRe
27d0: 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sult..**.** The 
27e0: 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20 6c 65  string z[] is le
27f0: 6e 67 74 68 20 62 79 74 65 73 20 69 6e 20 6c 65  ngth bytes in le
2800: 6e 67 74 68 20 28 62 79 74 65 73 2c 20 6e 6f 74  ngth (bytes, not
2810: 20 63 68 61 72 61 63 74 65 72 73 29 20 61 6e 64   characters) and
2820: 0a 2a 2a 20 75 73 65 73 20 74 68 65 20 65 6e 63  .** uses the enc
2830: 6f 64 69 6e 67 20 65 6e 63 2e 20 20 54 68 65 20  oding enc.  The 
2840: 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 6e 65  string is not ne
2850: 63 65 73 73 61 72 69 6c 79 20 7a 65 72 6f 2d 74  cessarily zero-t
2860: 65 72 6d 69 6e 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  erminated..**.**
2870: 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20   Return TRUE if 
2880: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
2890: 76 61 6c 69 64 20 72 65 61 6c 20 6e 75 6d 62 65  valid real numbe
28a0: 72 20 28 6f 72 20 69 6e 74 65 67 65 72 29 20 61  r (or integer) a
28b0: 6e 64 20 46 41 4c 53 45 0a 2a 2a 20 69 66 20 74  nd FALSE.** if t
28c0: 68 65 20 73 74 72 69 6e 67 20 69 73 20 65 6d 70  he string is emp
28d0: 74 79 20 6f 72 20 63 6f 6e 74 61 69 6e 73 20 65  ty or contains e
28e0: 78 74 72 61 6e 65 6f 75 73 20 74 65 78 74 2e 20  xtraneous text. 
28f0: 20 56 61 6c 69 64 20 6e 75 6d 62 65 72 73 0a 2a   Valid numbers.*
2900: 2a 20 61 72 65 20 69 6e 20 6f 6e 65 20 6f 66 20  * are in one of 
2910: 74 68 65 73 65 20 66 6f 72 6d 61 74 73 3a 0a 2a  these formats:.*
2920: 2a 0a 2a 2a 20 20 20 20 5b 2b 2d 5d 64 69 67 69  *.**    [+-]digi
2930: 74 73 5b 45 5b 2b 2d 5d 64 69 67 69 74 73 5d 0a  ts[E[+-]digits].
2940: 2a 2a 20 20 20 20 5b 2b 2d 5d 64 69 67 69 74 73  **    [+-]digits
2950: 2e 5b 64 69 67 69 74 73 5d 5b 45 5b 2b 2d 5d 64  .[digits][E[+-]d
2960: 69 67 69 74 73 5d 0a 2a 2a 20 20 20 20 5b 2b 2d  igits].**    [+-
2970: 5d 2e 64 69 67 69 74 73 5b 45 5b 2b 2d 5d 64 69  ].digits[E[+-]di
2980: 67 69 74 73 5d 0a 2a 2a 0a 2a 2a 20 4c 65 61 64  gits].**.** Lead
2990: 69 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e 67  ing and trailing
29a0: 20 77 68 69 74 65 73 70 61 63 65 20 69 73 20 69   whitespace is i
29b0: 67 6e 6f 72 65 64 20 66 6f 72 20 74 68 65 20 70  gnored for the p
29c0: 75 72 70 6f 73 65 20 6f 66 20 64 65 74 65 72 6d  urpose of determ
29d0: 69 6e 69 6e 67 0a 2a 2a 20 76 61 6c 69 64 69 74  ining.** validit
29e0: 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 73 6f 6d 65  y..**.** If some
29f0: 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 69   prefix of the i
2a00: 6e 70 75 74 20 73 74 72 69 6e 67 20 69 73 20 61  nput string is a
2a10: 20 76 61 6c 69 64 20 6e 75 6d 62 65 72 2c 20 74   valid number, t
2a20: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 72  his routine.** r
2a30: 65 74 75 72 6e 73 20 46 41 4c 53 45 20 62 75 74  eturns FALSE but
2a40: 20 69 74 20 73 74 69 6c 6c 20 63 6f 6e 76 65 72   it still conver
2a50: 74 73 20 74 68 65 20 70 72 65 66 69 78 20 61 6e  ts the prefix an
2a60: 64 20 77 72 69 74 65 73 20 74 68 65 20 72 65 73  d writes the res
2a70: 75 6c 74 0a 2a 2a 20 69 6e 74 6f 20 2a 70 52 65  ult.** into *pRe
2a80: 73 75 6c 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  sult..*/.int sql
2a90: 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
2aa0: 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 20 2a  har *z, double *
2ab0: 70 52 65 73 75 6c 74 2c 20 69 6e 74 20 6c 65 6e  pResult, int len
2ac0: 67 74 68 2c 20 75 38 20 65 6e 63 29 7b 0a 23 69  gth, u8 enc){.#i
2ad0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ae0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
2af0: 0a 20 20 69 6e 74 20 69 6e 63 72 3b 0a 20 20 63  .  int incr;.  c
2b00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 20  onst char *zEnd 
2b10: 3d 20 7a 20 2b 20 6c 65 6e 67 74 68 3b 0a 20 20  = z + length;.  
2b20: 2f 2a 20 73 69 67 6e 20 2a 20 73 69 67 6e 69 66  /* sign * signif
2b30: 69 63 61 6e 64 20 2a 20 28 31 30 20 5e 20 28 65  icand * (10 ^ (e
2b40: 73 69 67 6e 20 2a 20 65 78 70 6f 6e 65 6e 74 29  sign * exponent)
2b50: 29 20 2a 2f 0a 20 20 69 6e 74 20 73 69 67 6e 20  ) */.  int sign 
2b60: 3d 20 31 3b 20 20 20 20 2f 2a 20 73 69 67 6e 20  = 1;    /* sign 
2b70: 6f 66 20 73 69 67 6e 69 66 69 63 61 6e 64 20 2a  of significand *
2b80: 2f 0a 20 20 69 36 34 20 73 20 3d 20 30 3b 20 20  /.  i64 s = 0;  
2b90: 20 20 20 20 20 2f 2a 20 73 69 67 6e 69 66 69 63       /* signific
2ba0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 64 20 3d  and */.  int d =
2bb0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 61 64 6a   0;       /* adj
2bc0: 75 73 74 20 65 78 70 6f 6e 65 6e 74 20 66 6f 72  ust exponent for
2bd0: 20 73 68 69 66 74 69 6e 67 20 64 65 63 69 6d 61   shifting decima
2be0: 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  l point */.  int
2bf0: 20 65 73 69 67 6e 20 3d 20 31 3b 20 20 20 2f 2a   esign = 1;   /*
2c00: 20 73 69 67 6e 20 6f 66 20 65 78 70 6f 6e 65 6e   sign of exponen
2c10: 74 20 2a 2f 0a 20 20 69 6e 74 20 65 20 3d 20 30  t */.  int e = 0
2c20: 3b 20 20 20 20 20 20 20 2f 2a 20 65 78 70 6f 6e  ;       /* expon
2c30: 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 65 56 61  ent */.  int eVa
2c40: 6c 69 64 20 3d 20 31 3b 20 20 2f 2a 20 54 72 75  lid = 1;  /* Tru
2c50: 65 20 65 78 70 6f 6e 65 6e 74 20 69 73 20 65 69  e exponent is ei
2c60: 74 68 65 72 20 6e 6f 74 20 75 73 65 64 20 6f 72  ther not used or
2c70: 20 69 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20   is well-formed 
2c80: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 65 73 75  */.  double resu
2c90: 6c 74 3b 0a 20 20 69 6e 74 20 6e 44 69 67 69 74  lt;.  int nDigit
2ca0: 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 6f 6e  s = 0;.  int non
2cb0: 4e 75 6d 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65  Num = 0;..  asse
2cc0: 72 74 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  rt( enc==SQLITE_
2cd0: 55 54 46 38 20 7c 7c 20 65 6e 63 3d 3d 53 51 4c  UTF8 || enc==SQL
2ce0: 49 54 45 5f 55 54 46 31 36 4c 45 20 7c 7c 20 65  ITE_UTF16LE || e
2cf0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2d00: 42 45 20 29 3b 0a 20 20 2a 70 52 65 73 75 6c 74  BE );.  *pResult
2d10: 20 3d 20 30 2e 30 3b 20 20 20 2f 2a 20 44 65 66   = 0.0;   /* Def
2d20: 61 75 6c 74 20 72 65 74 75 72 6e 20 76 61 6c 75  ault return valu
2d30: 65 2c 20 69 6e 20 63 61 73 65 20 6f 66 20 61 6e  e, in case of an
2d40: 20 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 69 66 28   error */..  if(
2d50: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46   enc==SQLITE_UTF
2d60: 38 20 29 7b 0a 20 20 20 20 69 6e 63 72 20 3d 20  8 ){.    incr = 
2d70: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
2d80: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 63 72 20  int i;.    incr 
2d90: 3d 20 32 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 2;.    assert(
2da0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3d   SQLITE_UTF16LE=
2db0: 3d 32 20 26 26 20 53 51 4c 49 54 45 5f 55 54 46  =2 && SQLITE_UTF
2dc0: 31 36 42 45 3d 3d 33 20 29 3b 0a 20 20 20 20 66  16BE==3 );.    f
2dd0: 6f 72 28 69 3d 33 2d 65 6e 63 3b 20 69 3c 6c 65  or(i=3-enc; i<le
2de0: 6e 67 74 68 20 26 26 20 7a 5b 69 5d 3d 3d 30 3b  ngth && z[i]==0;
2df0: 20 69 2b 3d 32 29 7b 7d 0a 20 20 20 20 6e 6f 6e   i+=2){}.    non
2e00: 4e 75 6d 20 3d 20 69 3c 6c 65 6e 67 74 68 3b 0a  Num = i<length;.
2e10: 20 20 20 20 7a 45 6e 64 20 3d 20 7a 2b 69 2b 65      zEnd = z+i+e
2e20: 6e 63 2d 33 3b 0a 20 20 20 20 7a 20 2b 3d 20 28  nc-3;.    z += (
2e30: 65 6e 63 26 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  enc&1);.  }..  /
2e40: 2a 20 73 6b 69 70 20 6c 65 61 64 69 6e 67 20 73  * skip leading s
2e50: 70 61 63 65 73 20 2a 2f 0a 20 20 77 68 69 6c 65  paces */.  while
2e60: 28 20 7a 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69  ( z<zEnd && sqli
2e70: 74 65 33 49 73 73 70 61 63 65 28 2a 7a 29 20 29  te3Isspace(*z) )
2e80: 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 69 66 28 20   z+=incr;.  if( 
2e90: 7a 3e 3d 7a 45 6e 64 20 29 20 72 65 74 75 72 6e  z>=zEnd ) return
2ea0: 20 30 3b 0a 0a 20 20 2f 2a 20 67 65 74 20 73 69   0;..  /* get si
2eb0: 67 6e 20 6f 66 20 73 69 67 6e 69 66 69 63 61 6e  gn of significan
2ec0: 64 20 2a 2f 0a 20 20 69 66 28 20 2a 7a 3d 3d 27  d */.  if( *z=='
2ed0: 2d 27 20 29 7b 0a 20 20 20 20 73 69 67 6e 20 3d  -' ){.    sign =
2ee0: 20 2d 31 3b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72   -1;.    z+=incr
2ef0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a  ;.  }else if( *z
2f00: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 2b 3d  =='+' ){.    z+=
2f10: 69 6e 63 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  incr;.  }..  /* 
2f20: 73 6b 69 70 20 6c 65 61 64 69 6e 67 20 7a 65 72  skip leading zer
2f30: 6f 65 73 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20  oes */.  while( 
2f40: 7a 3c 7a 45 6e 64 20 26 26 20 7a 5b 30 5d 3d 3d  z<zEnd && z[0]==
2f50: 27 30 27 20 29 20 7a 2b 3d 69 6e 63 72 2c 20 6e  '0' ) z+=incr, n
2f60: 44 69 67 69 74 73 2b 2b 3b 0a 0a 20 20 2f 2a 20  Digits++;..  /* 
2f70: 63 6f 70 79 20 6d 61 78 20 73 69 67 6e 69 66 69  copy max signifi
2f80: 63 61 6e 74 20 64 69 67 69 74 73 20 74 6f 20 73  cant digits to s
2f90: 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f 0a 20 20  ignificand */.  
2fa0: 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26 26  while( z<zEnd &&
2fb0: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
2fc0: 2a 7a 29 20 26 26 20 73 3c 28 28 4c 41 52 47 45  *z) && s<((LARGE
2fd0: 53 54 5f 49 4e 54 36 34 2d 39 29 2f 31 30 29 20  ST_INT64-9)/10) 
2fe0: 29 7b 0a 20 20 20 20 73 20 3d 20 73 2a 31 30 20  ){.    s = s*10 
2ff0: 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20  + (*z - '0');.  
3000: 20 20 7a 2b 3d 69 6e 63 72 2c 20 6e 44 69 67 69    z+=incr, nDigi
3010: 74 73 2b 2b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  ts++;.  }..  /* 
3020: 73 6b 69 70 20 6e 6f 6e 2d 73 69 67 6e 69 66 69  skip non-signifi
3030: 63 61 6e 74 20 73 69 67 6e 69 66 69 63 61 6e 64  cant significand
3040: 20 64 69 67 69 74 73 0a 20 20 2a 2a 20 28 69 6e   digits.  ** (in
3050: 63 72 65 61 73 65 20 65 78 70 6f 6e 65 6e 74 20  crease exponent 
3060: 62 79 20 64 20 74 6f 20 73 68 69 66 74 20 64 65  by d to shift de
3070: 63 69 6d 61 6c 20 6c 65 66 74 29 20 2a 2f 0a 20  cimal left) */. 
3080: 20 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26   while( z<zEnd &
3090: 26 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  & sqlite3Isdigit
30a0: 28 2a 7a 29 20 29 20 7a 2b 3d 69 6e 63 72 2c 20  (*z) ) z+=incr, 
30b0: 6e 44 69 67 69 74 73 2b 2b 2c 20 64 2b 2b 3b 0a  nDigits++, d++;.
30c0: 20 20 69 66 28 20 7a 3e 3d 7a 45 6e 64 20 29 20    if( z>=zEnd ) 
30d0: 67 6f 74 6f 20 64 6f 5f 61 74 6f 66 5f 63 61 6c  goto do_atof_cal
30e0: 63 3b 0a 0a 20 20 2f 2a 20 69 66 20 64 65 63 69  c;..  /* if deci
30f0: 6d 61 6c 20 70 6f 69 6e 74 20 69 73 20 70 72 65  mal point is pre
3100: 73 65 6e 74 20 2a 2f 0a 20 20 69 66 28 20 2a 7a  sent */.  if( *z
3110: 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a 2b 3d  =='.' ){.    z+=
3120: 69 6e 63 72 3b 0a 20 20 20 20 2f 2a 20 63 6f 70  incr;.    /* cop
3130: 79 20 64 69 67 69 74 73 20 66 72 6f 6d 20 61 66  y digits from af
3140: 74 65 72 20 64 65 63 69 6d 61 6c 20 74 6f 20 73  ter decimal to s
3150: 69 67 6e 69 66 69 63 61 6e 64 0a 20 20 20 20 2a  ignificand.    *
3160: 2a 20 28 64 65 63 72 65 61 73 65 20 65 78 70 6f  * (decrease expo
3170: 6e 65 6e 74 20 62 79 20 64 20 74 6f 20 73 68 69  nent by d to shi
3180: 66 74 20 64 65 63 69 6d 61 6c 20 72 69 67 68 74  ft decimal right
3190: 29 20 2a 2f 0a 20 20 20 20 77 68 69 6c 65 28 20  ) */.    while( 
31a0: 7a 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69 74 65  z<zEnd && sqlite
31b0: 33 49 73 64 69 67 69 74 28 2a 7a 29 20 26 26 20  3Isdigit(*z) && 
31c0: 73 3c 28 28 4c 41 52 47 45 53 54 5f 49 4e 54 36  s<((LARGEST_INT6
31d0: 34 2d 39 29 2f 31 30 29 20 29 7b 0a 20 20 20 20  4-9)/10) ){.    
31e0: 20 20 73 20 3d 20 73 2a 31 30 20 2b 20 28 2a 7a    s = s*10 + (*z
31f0: 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 20 20 7a   - '0');.      z
3200: 2b 3d 69 6e 63 72 2c 20 6e 44 69 67 69 74 73 2b  +=incr, nDigits+
3210: 2b 2c 20 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  +, d--;.    }.  
3220: 20 20 2f 2a 20 73 6b 69 70 20 6e 6f 6e 2d 73 69    /* skip non-si
3230: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
3240: 20 2a 2f 0a 20 20 20 20 77 68 69 6c 65 28 20 7a   */.    while( z
3250: 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69 74 65 33  <zEnd && sqlite3
3260: 49 73 64 69 67 69 74 28 2a 7a 29 20 29 20 7a 2b  Isdigit(*z) ) z+
3270: 3d 69 6e 63 72 2c 20 6e 44 69 67 69 74 73 2b 2b  =incr, nDigits++
3280: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 3e 3d 7a  ;.  }.  if( z>=z
3290: 45 6e 64 20 29 20 67 6f 74 6f 20 64 6f 5f 61 74  End ) goto do_at
32a0: 6f 66 5f 63 61 6c 63 3b 0a 0a 20 20 2f 2a 20 69  of_calc;..  /* i
32b0: 66 20 65 78 70 6f 6e 65 6e 74 20 69 73 20 70 72  f exponent is pr
32c0: 65 73 65 6e 74 20 2a 2f 0a 20 20 69 66 28 20 2a  esent */.  if( *
32d0: 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45  z=='e' || *z=='E
32e0: 27 20 29 7b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72  ' ){.    z+=incr
32f0: 3b 0a 20 20 20 20 65 56 61 6c 69 64 20 3d 20 30  ;.    eValid = 0
3300: 3b 0a 20 20 20 20 69 66 28 20 7a 3e 3d 7a 45 6e  ;.    if( z>=zEn
3310: 64 20 29 20 67 6f 74 6f 20 64 6f 5f 61 74 6f 66  d ) goto do_atof
3320: 5f 63 61 6c 63 3b 0a 20 20 20 20 2f 2a 20 67 65  _calc;.    /* ge
3330: 74 20 73 69 67 6e 20 6f 66 20 65 78 70 6f 6e 65  t sign of expone
3340: 6e 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 2a 7a  nt */.    if( *z
3350: 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65  =='-' ){.      e
3360: 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20  sign = -1;.     
3370: 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 20 20 7d 65   z+=incr;.    }e
3380: 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20  lse if( *z=='+' 
3390: 29 7b 0a 20 20 20 20 20 20 7a 2b 3d 69 6e 63 72  ){.      z+=incr
33a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 63  ;.    }.    /* c
33b0: 6f 70 79 20 64 69 67 69 74 73 20 74 6f 20 65 78  opy digits to ex
33c0: 70 6f 6e 65 6e 74 20 2a 2f 0a 20 20 20 20 77 68  ponent */.    wh
33d0: 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26 26 20 73  ile( z<zEnd && s
33e0: 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a  qlite3Isdigit(*z
33f0: 29 20 29 7b 0a 20 20 20 20 20 20 65 20 3d 20 65  ) ){.      e = e
3400: 3c 31 30 30 30 30 20 3f 20 28 65 2a 31 30 20 2b  <10000 ? (e*10 +
3410: 20 28 2a 7a 20 2d 20 27 30 27 29 29 20 3a 20 31   (*z - '0')) : 1
3420: 30 30 30 30 3b 0a 20 20 20 20 20 20 7a 2b 3d 69  0000;.      z+=i
3430: 6e 63 72 3b 0a 20 20 20 20 20 20 65 56 61 6c 69  ncr;.      eVali
3440: 64 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  d = 1;.    }.  }
3450: 0a 0a 20 20 2f 2a 20 73 6b 69 70 20 74 72 61 69  ..  /* skip trai
3460: 6c 69 6e 67 20 73 70 61 63 65 73 20 2a 2f 0a 20  ling spaces */. 
3470: 20 69 66 28 20 6e 44 69 67 69 74 73 20 26 26 20   if( nDigits && 
3480: 65 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 77 68  eValid ){.    wh
3490: 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26 26 20 73  ile( z<zEnd && s
34a0: 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 2a 7a  qlite3Isspace(*z
34b0: 29 20 29 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 7d  ) ) z+=incr;.  }
34c0: 0a 0a 64 6f 5f 61 74 6f 66 5f 63 61 6c 63 3a 0a  ..do_atof_calc:.
34d0: 20 20 2f 2a 20 61 64 6a 75 73 74 20 65 78 70 6f    /* adjust expo
34e0: 6e 65 6e 74 20 62 79 20 64 2c 20 61 6e 64 20 75  nent by d, and u
34f0: 70 64 61 74 65 20 73 69 67 6e 20 2a 2f 0a 20 20  pdate sign */.  
3500: 65 20 3d 20 28 65 2a 65 73 69 67 6e 29 20 2b 20  e = (e*esign) + 
3510: 64 3b 0a 20 20 69 66 28 20 65 3c 30 20 29 20 7b  d;.  if( e<0 ) {
3520: 0a 20 20 20 20 65 73 69 67 6e 20 3d 20 2d 31 3b  .    esign = -1;
3530: 0a 20 20 20 20 65 20 2a 3d 20 2d 31 3b 0a 20 20  .    e *= -1;.  
3540: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 65 73 69  } else {.    esi
3550: 67 6e 20 3d 20 31 3b 0a 20 20 7d 0a 0a 20 20 2f  gn = 1;.  }..  /
3560: 2a 20 69 66 20 30 20 73 69 67 6e 69 66 69 63 61  * if 0 significa
3570: 6e 64 20 2a 2f 0a 20 20 69 66 28 20 21 73 20 29  nd */.  if( !s )
3580: 20 7b 0a 20 20 20 20 2f 2a 20 49 6e 20 74 68 65   {.    /* In the
3590: 20 49 45 45 45 20 37 35 34 20 73 74 61 6e 64 61   IEEE 754 standa
35a0: 72 64 2c 20 7a 65 72 6f 20 69 73 20 73 69 67 6e  rd, zero is sign
35b0: 65 64 2e 0a 20 20 20 20 2a 2a 20 41 64 64 20 74  ed..    ** Add t
35c0: 68 65 20 73 69 67 6e 20 69 66 20 77 65 27 76 65  he sign if we've
35d0: 20 73 65 65 6e 20 61 74 20 6c 65 61 73 74 20 6f   seen at least o
35e0: 6e 65 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20  ne digit */.    
35f0: 72 65 73 75 6c 74 20 3d 20 28 73 69 67 6e 3c 30  result = (sign<0
3600: 20 26 26 20 6e 44 69 67 69 74 73 29 20 3f 20 2d   && nDigits) ? -
3610: 28 64 6f 75 62 6c 65 29 30 20 3a 20 28 64 6f 75  (double)0 : (dou
3620: 62 6c 65 29 30 3b 0a 20 20 7d 20 65 6c 73 65 20  ble)0;.  } else 
3630: 7b 0a 20 20 20 20 2f 2a 20 61 74 74 65 6d 70 74  {.    /* attempt
3640: 20 74 6f 20 72 65 64 75 63 65 20 65 78 70 6f 6e   to reduce expon
3650: 65 6e 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 65  ent */.    if( e
3660: 73 69 67 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20  sign>0 ){.      
3670: 77 68 69 6c 65 28 20 73 3c 28 4c 41 52 47 45 53  while( s<(LARGES
3680: 54 5f 49 4e 54 36 34 2f 31 30 29 20 26 26 20 65  T_INT64/10) && e
3690: 3e 30 20 29 20 65 2d 2d 2c 73 2a 3d 31 30 3b 0a  >0 ) e--,s*=10;.
36a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
36b0: 20 77 68 69 6c 65 28 20 21 28 73 25 31 30 29 20   while( !(s%10) 
36c0: 26 26 20 65 3e 30 20 29 20 65 2d 2d 2c 73 2f 3d  && e>0 ) e--,s/=
36d0: 31 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  10;.    }..    /
36e0: 2a 20 61 64 6a 75 73 74 20 74 68 65 20 73 69 67  * adjust the sig
36f0: 6e 20 6f 66 20 73 69 67 6e 69 66 69 63 61 6e 64  n of significand
3700: 20 2a 2f 0a 20 20 20 20 73 20 3d 20 73 69 67 6e   */.    s = sign
3710: 3c 30 20 3f 20 2d 73 20 3a 20 73 3b 0a 0a 20 20  <0 ? -s : s;..  
3720: 20 20 2f 2a 20 69 66 20 65 78 70 6f 6e 65 6e 74    /* if exponent
3730: 2c 20 73 63 61 6c 65 20 73 69 67 6e 69 66 69 63  , scale signific
3740: 61 6e 64 20 61 73 20 61 70 70 72 6f 70 72 69 61  and as appropria
3750: 74 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 73 74  te.    ** and st
3760: 6f 72 65 20 69 6e 20 72 65 73 75 6c 74 2e 20 2a  ore in result. *
3770: 2f 0a 20 20 20 20 69 66 28 20 65 20 29 7b 0a 20  /.    if( e ){. 
3780: 20 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f       LONGDOUBLE_
3790: 54 59 50 45 20 73 63 61 6c 65 20 3d 20 31 2e 30  TYPE scale = 1.0
37a0: 3b 0a 20 20 20 20 20 20 2f 2a 20 61 74 74 65 6d  ;.      /* attem
37b0: 70 74 20 74 6f 20 68 61 6e 64 6c 65 20 65 78 74  pt to handle ext
37c0: 72 65 6d 65 6c 79 20 73 6d 61 6c 6c 2f 6c 61 72  remely small/lar
37d0: 67 65 20 6e 75 6d 62 65 72 73 20 62 65 74 74 65  ge numbers bette
37e0: 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 65  r */.      if( e
37f0: 3e 33 30 37 20 26 26 20 65 3c 33 34 32 20 29 7b  >307 && e<342 ){
3800: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20  .        while( 
3810: 65 25 33 30 38 20 29 20 7b 20 73 63 61 6c 65 20  e%308 ) { scale 
3820: 2a 3d 20 31 2e 30 65 2b 31 3b 20 65 20 2d 3d 20  *= 1.0e+1; e -= 
3830: 31 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  1; }.        if(
3840: 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20 20   esign<0 ){.    
3850: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 73        result = s
3860: 20 2f 20 73 63 61 6c 65 3b 0a 20 20 20 20 20 20   / scale;.      
3870: 20 20 20 20 72 65 73 75 6c 74 20 2f 3d 20 31 2e      result /= 1.
3880: 30 65 2b 33 30 38 3b 0a 20 20 20 20 20 20 20 20  0e+308;.        
3890: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
38a0: 20 72 65 73 75 6c 74 20 3d 20 73 20 2a 20 73 63   result = s * sc
38b0: 61 6c 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ale;.          r
38c0: 65 73 75 6c 74 20 2a 3d 20 31 2e 30 65 2b 33 30  esult *= 1.0e+30
38d0: 38 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  8;.        }.   
38e0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 3e 3d     }else if( e>=
38f0: 33 34 32 20 29 7b 0a 20 20 20 20 20 20 20 20 69  342 ){.        i
3900: 66 28 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20  f( esign<0 ){.  
3910: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
3920: 20 30 2e 30 2a 73 3b 0a 20 20 20 20 20 20 20 20   0.0*s;.        
3930: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
3940: 20 72 65 73 75 6c 74 20 3d 20 31 65 33 30 38 2a   result = 1e308*
3950: 31 65 33 30 38 2a 73 3b 20 20 2f 2a 20 49 6e 66  1e308*s;  /* Inf
3960: 69 6e 69 74 79 20 2a 2f 0a 20 20 20 20 20 20 20  inity */.       
3970: 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
3980: 20 20 20 20 20 20 20 20 2f 2a 20 31 2e 30 65 2b          /* 1.0e+
3990: 32 32 20 69 73 20 74 68 65 20 6c 61 72 67 65 73  22 is the larges
39a0: 74 20 70 6f 77 65 72 20 6f 66 20 31 30 20 74 68  t power of 10 th
39b0: 61 6e 20 63 61 6e 20 62 65 20 0a 20 20 20 20 20  an can be .     
39c0: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 65     ** represente
39d0: 64 20 65 78 61 63 74 6c 79 2e 20 2a 2f 0a 20 20  d exactly. */.  
39e0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 65 25 32        while( e%2
39f0: 32 20 29 20 7b 20 73 63 61 6c 65 20 2a 3d 20 31  2 ) { scale *= 1
3a00: 2e 30 65 2b 31 3b 20 65 20 2d 3d 20 31 3b 20 7d  .0e+1; e -= 1; }
3a10: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20  .        while( 
3a20: 65 3e 30 20 29 20 7b 20 73 63 61 6c 65 20 2a 3d  e>0 ) { scale *=
3a30: 20 31 2e 30 65 2b 32 32 3b 20 65 20 2d 3d 20 32   1.0e+22; e -= 2
3a40: 32 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  2; }.        if(
3a50: 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20 20   esign<0 ){.    
3a60: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 73        result = s
3a70: 20 2f 20 73 63 61 6c 65 3b 0a 20 20 20 20 20 20   / scale;.      
3a80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3a90: 20 20 20 72 65 73 75 6c 74 20 3d 20 73 20 2a 20     result = s * 
3aa0: 73 63 61 6c 65 3b 0a 20 20 20 20 20 20 20 20 7d  scale;.        }
3ab0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65  .      }.    } e
3ac0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 72 65 73 75  lse {.      resu
3ad0: 6c 74 20 3d 20 28 64 6f 75 62 6c 65 29 73 3b 0a  lt = (double)s;.
3ae0: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
3af0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
3b00: 20 2a 2f 0a 20 20 2a 70 52 65 73 75 6c 74 20 3d   */.  *pResult =
3b10: 20 72 65 73 75 6c 74 3b 0a 0a 20 20 2f 2a 20 72   result;..  /* r
3b20: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 6e 75  eturn true if nu
3b30: 6d 62 65 72 20 61 6e 64 20 6e 6f 20 65 78 74 72  mber and no extr
3b40: 61 20 6e 6f 6e 2d 77 68 69 74 65 73 70 61 63 65  a non-whitespace
3b50: 20 63 68 72 61 63 74 65 72 73 20 61 66 74 65 72   chracters after
3b60: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 7a 3e 3d   */.  return z>=
3b70: 7a 45 6e 64 20 26 26 20 6e 44 69 67 69 74 73 3e  zEnd && nDigits>
3b80: 30 20 26 26 20 65 56 61 6c 69 64 20 26 26 20 6e  0 && eValid && n
3b90: 6f 6e 4e 75 6d 3d 3d 30 3b 0a 23 65 6c 73 65 0a  onNum==0;.#else.
3ba0: 20 20 72 65 74 75 72 6e 20 21 73 71 6c 69 74 65    return !sqlite
3bb0: 33 41 74 6f 69 36 34 28 7a 2c 20 70 52 65 73 75  3Atoi64(z, pResu
3bc0: 6c 74 2c 20 6c 65 6e 67 74 68 2c 20 65 6e 63 29  lt, length, enc)
3bd0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
3be0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3bf0: 5f 50 4f 49 4e 54 20 2a 2f 0a 7d 0a 0a 2f 2a 0a  _POINT */.}../*.
3c00: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 31  ** Compare the 1
3c10: 39 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69  9-character stri
3c20: 6e 67 20 7a 4e 75 6d 20 61 67 61 69 6e 73 74 20  ng zNum against 
3c30: 74 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65  the text represe
3c40: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 76 61 6c 75 65  ntation.** value
3c50: 20 32 5e 36 33 3a 20 20 39 32 32 33 33 37 32 30   2^63:  92233720
3c60: 33 36 38 35 34 37 37 35 38 30 38 2e 20 20 52 65  36854775808.  Re
3c70: 74 75 72 6e 20 6e 65 67 61 74 69 76 65 2c 20 7a  turn negative, z
3c80: 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
3c90: 0a 2a 2a 20 69 66 20 7a 4e 75 6d 20 69 73 20 6c  .** if zNum is l
3ca0: 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
3cb0: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
3cc0: 68 61 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 0a  han the string..
3cd0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 7a 4e 75  ** Note that zNu
3ce0: 6d 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 65  m must contain e
3cf0: 78 61 63 74 6c 79 20 31 39 20 63 68 61 72 61 63  xactly 19 charac
3d00: 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69  ters..**.** Unli
3d10: 6b 65 20 6d 65 6d 63 6d 70 28 29 20 74 68 69 73  ke memcmp() this
3d20: 20 72 6f 75 74 69 6e 65 20 69 73 20 67 75 61 72   routine is guar
3d30: 61 6e 74 65 65 64 20 74 6f 20 72 65 74 75 72 6e  anteed to return
3d40: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 0a   the difference.
3d50: 2a 2a 20 69 6e 20 74 68 65 20 76 61 6c 75 65 73  ** in the values
3d60: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 64 69 67   of the last dig
3d70: 69 74 20 69 66 20 74 68 65 20 6f 6e 6c 79 20 64  it if the only d
3d80: 69 66 66 65 72 65 6e 63 65 20 69 73 20 69 6e 20  ifference is in 
3d90: 74 68 65 0a 2a 2a 20 6c 61 73 74 20 64 69 67 69  the.** last digi
3da0: 74 2e 20 20 53 6f 2c 20 66 6f 72 20 65 78 61 6d  t.  So, for exam
3db0: 70 6c 65 2c 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  ple,.**.**      
3dc0: 63 6f 6d 70 61 72 65 32 70 6f 77 36 33 28 22 39  compare2pow63("9
3dd0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
3de0: 30 30 22 2c 20 31 29 0a 2a 2a 0a 2a 2a 20 77 69  00", 1).**.** wi
3df0: 6c 6c 20 72 65 74 75 72 6e 20 2d 38 2e 0a 2a 2f  ll return -8..*/
3e00: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 6f 6d 70  .static int comp
3e10: 61 72 65 32 70 6f 77 36 33 28 63 6f 6e 73 74 20  are2pow63(const 
3e20: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20  char *zNum, int 
3e30: 69 6e 63 72 29 7b 0a 20 20 69 6e 74 20 63 20 3d  incr){.  int c =
3e40: 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 20   0;.  int i;.   
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 20 2f 2a 20 30 31 32 33 34 35 36 37 38 39 30 31   /* 012345678901
3e70: 32 33 34 35 36 37 20 2a 2f 0a 20 20 63 6f 6e 73  234567 */.  cons
3e80: 74 20 63 68 61 72 20 2a 70 6f 77 36 33 20 3d 20  t char *pow63 = 
3e90: 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  "922337203685477
3ea0: 35 38 30 22 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  580";.  for(i=0;
3eb0: 20 63 3d 3d 30 20 26 26 20 69 3c 31 38 3b 20 69   c==0 && i<18; i
3ec0: 2b 2b 29 7b 0a 20 20 20 20 63 20 3d 20 28 7a 4e  ++){.    c = (zN
3ed0: 75 6d 5b 69 2a 69 6e 63 72 5d 2d 70 6f 77 36 33  um[i*incr]-pow63
3ee0: 5b 69 5d 29 2a 31 30 3b 0a 20 20 7d 0a 20 20 69  [i])*10;.  }.  i
3ef0: 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 63  f( c==0 ){.    c
3f00: 20 3d 20 7a 4e 75 6d 5b 31 38 2a 69 6e 63 72 5d   = zNum[18*incr]
3f10: 20 2d 20 27 38 27 3b 0a 20 20 20 20 74 65 73 74   - '8';.    test
3f20: 63 61 73 65 28 20 63 3d 3d 28 2d 31 29 20 29 3b  case( c==(-1) );
3f30: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 63  .    testcase( c
3f40: 3d 3d 30 20 29 3b 0a 20 20 20 20 74 65 73 74 63  ==0 );.    testc
3f50: 61 73 65 28 20 63 3d 3d 28 2b 31 29 20 29 3b 0a  ase( c==(+1) );.
3f60: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 63 3b 0a    }.  return c;.
3f70: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  }../*.** Convert
3f80: 20 7a 4e 75 6d 20 74 6f 20 61 20 36 34 2d 62 69   zNum to a 64-bi
3f90: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3fa0: 2e 20 20 7a 4e 75 6d 20 6d 75 73 74 20 62 65 20  .  zNum must be 
3fb0: 64 65 63 69 6d 61 6c 2e 20 54 68 69 73 0a 2a 2a  decimal. This.**
3fc0: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 2a 6e   routine does *n
3fd0: 6f 74 2a 20 61 63 63 65 70 74 20 68 65 78 61 64  ot* accept hexad
3fe0: 65 63 69 6d 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e  ecimal notation.
3ff0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 7a 4e  .**.** If the zN
4000: 75 6d 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  um value is repr
4010: 65 73 65 6e 74 61 62 6c 65 20 61 73 20 61 20 36  esentable as a 6
4020: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
4030: 65 6d 65 6e 74 20 0a 2a 2a 20 69 6e 74 65 67 65  ement .** intege
4040: 72 2c 20 74 68 65 6e 20 77 72 69 74 65 20 74 68  r, then write th
4050: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 2a 70  at value into *p
4060: 4e 75 6d 20 61 6e 64 20 72 65 74 75 72 6e 20 30  Num and return 0
4070: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20  ..**.** If zNum 
4080: 69 73 20 65 78 61 63 74 6c 79 20 39 32 32 33 33  is exactly 92233
4090: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2c 20  72036854775808, 
40a0: 72 65 74 75 72 6e 20 32 2e 20 20 54 68 69 73 20  return 2.  This 
40b0: 73 70 65 63 69 61 6c 0a 2a 2a 20 63 61 73 65 20  special.** case 
40c0: 69 73 20 62 72 6f 6b 65 6e 20 6f 75 74 20 62 65  is broken out be
40d0: 63 61 75 73 65 20 77 68 69 6c 65 20 39 32 32 33  cause while 9223
40e0: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20  372036854775808 
40f0: 63 61 6e 6e 6f 74 20 62 65 20 61 20 0a 2a 2a 20  cannot be a .** 
4100: 73 69 67 6e 65 64 20 36 34 2d 62 69 74 20 69 6e  signed 64-bit in
4110: 74 65 67 65 72 2c 20 69 74 73 20 6e 65 67 61 74  teger, its negat
4120: 69 76 65 20 2d 39 32 32 33 33 37 32 30 33 36 38  ive -92233720368
4130: 35 34 37 37 35 38 30 38 20 63 61 6e 20 62 65 2e  54775808 can be.
4140: 0a 2a 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 69  .**.** If zNum i
4150: 73 20 74 6f 6f 20 62 69 67 20 66 6f 72 20 61 20  s too big for a 
4160: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61  64-bit integer a
4170: 6e 64 20 69 73 20 6e 6f 74 0a 2a 2a 20 39 32 32  nd is not.** 922
4180: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
4190: 20 20 6f 72 20 69 66 20 7a 4e 75 6d 20 63 6f 6e    or if zNum con
41a0: 74 61 69 6e 73 20 61 6e 79 20 6e 6f 6e 2d 6e 75  tains any non-nu
41b0: 6d 65 72 69 63 20 74 65 78 74 2c 0a 2a 2a 20 74  meric text,.** t
41c0: 68 65 6e 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2a  hen return 1..**
41d0: 0a 2a 2a 20 6c 65 6e 67 74 68 20 69 73 20 74 68  .** length is th
41e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
41f0: 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20  s in the string 
4200: 28 62 79 74 65 73 2c 20 6e 6f 74 20 63 68 61 72  (bytes, not char
4210: 61 63 74 65 72 73 29 2e 0a 2a 2a 20 54 68 65 20  acters)..** The 
4220: 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 6e 65  string is not ne
4230: 63 65 73 73 61 72 69 6c 79 20 7a 65 72 6f 2d 74  cessarily zero-t
4240: 65 72 6d 69 6e 61 74 65 64 2e 20 20 54 68 65 20  erminated.  The 
4250: 65 6e 63 6f 64 69 6e 67 20 69 73 0a 2a 2a 20 67  encoding is.** g
4260: 69 76 65 6e 20 62 79 20 65 6e 63 2e 0a 2a 2f 0a  iven by enc..*/.
4270: 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
4280: 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  4(const char *zN
4290: 75 6d 2c 20 69 36 34 20 2a 70 4e 75 6d 2c 20 69  um, i64 *pNum, i
42a0: 6e 74 20 6c 65 6e 67 74 68 2c 20 75 38 20 65 6e  nt length, u8 en
42b0: 63 29 7b 0a 20 20 69 6e 74 20 69 6e 63 72 3b 0a  c){.  int incr;.
42c0: 20 20 75 36 34 20 75 20 3d 20 30 3b 0a 20 20 69    u64 u = 0;.  i
42d0: 6e 74 20 6e 65 67 20 3d 20 30 3b 20 2f 2a 20 61  nt neg = 0; /* a
42e0: 73 73 75 6d 65 20 70 6f 73 69 74 69 76 65 20 2a  ssume positive *
42f0: 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  /.  int i;.  int
4300: 20 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 6f   c = 0;.  int no
4310: 6e 4e 75 6d 20 3d 20 30 3b 0a 20 20 63 6f 6e 73  nNum = 0;.  cons
4320: 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 0a  t char *zStart;.
4330: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
4340: 6e 64 20 3d 20 7a 4e 75 6d 20 2b 20 6c 65 6e 67  nd = zNum + leng
4350: 74 68 3b 0a 20 20 61 73 73 65 72 74 28 20 65 6e  th;.  assert( en
4360: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 7c  c==SQLITE_UTF8 |
4370: 7c 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  | enc==SQLITE_UT
4380: 46 31 36 4c 45 20 7c 7c 20 65 6e 63 3d 3d 53 51  F16LE || enc==SQ
4390: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
43a0: 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54    if( enc==SQLIT
43b0: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 69 6e  E_UTF8 ){.    in
43c0: 63 72 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  cr = 1;.  }else{
43d0: 0a 20 20 20 20 69 6e 63 72 20 3d 20 32 3b 0a 20  .    incr = 2;. 
43e0: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
43f0: 45 5f 55 54 46 31 36 4c 45 3d 3d 32 20 26 26 20  E_UTF16LE==2 && 
4400: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3d 3d  SQLITE_UTF16BE==
4410: 33 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 33  3 );.    for(i=3
4420: 2d 65 6e 63 3b 20 69 3c 6c 65 6e 67 74 68 20 26  -enc; i<length &
4430: 26 20 7a 4e 75 6d 5b 69 5d 3d 3d 30 3b 20 69 2b  & zNum[i]==0; i+
4440: 3d 32 29 7b 7d 0a 20 20 20 20 6e 6f 6e 4e 75 6d  =2){}.    nonNum
4450: 20 3d 20 69 3c 6c 65 6e 67 74 68 3b 0a 20 20 20   = i<length;.   
4460: 20 7a 45 6e 64 20 3d 20 7a 4e 75 6d 2b 69 2b 65   zEnd = zNum+i+e
4470: 6e 63 2d 33 3b 0a 20 20 20 20 7a 4e 75 6d 20 2b  nc-3;.    zNum +
4480: 3d 20 28 65 6e 63 26 31 29 3b 0a 20 20 7d 0a 20  = (enc&1);.  }. 
4490: 20 77 68 69 6c 65 28 20 7a 4e 75 6d 3c 7a 45 6e   while( zNum<zEn
44a0: 64 20 26 26 20 73 71 6c 69 74 65 33 49 73 73 70  d && sqlite3Issp
44b0: 61 63 65 28 2a 7a 4e 75 6d 29 20 29 20 7a 4e 75  ace(*zNum) ) zNu
44c0: 6d 2b 3d 69 6e 63 72 3b 0a 20 20 69 66 28 20 7a  m+=incr;.  if( z
44d0: 4e 75 6d 3c 7a 45 6e 64 20 29 7b 0a 20 20 20 20  Num<zEnd ){.    
44e0: 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29  if( *zNum=='-' )
44f0: 7b 0a 20 20 20 20 20 20 6e 65 67 20 3d 20 31 3b  {.      neg = 1;
4500: 0a 20 20 20 20 20 20 7a 4e 75 6d 2b 3d 69 6e 63  .      zNum+=inc
4510: 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  r;.    }else if(
4520: 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20   *zNum=='+' ){. 
4530: 20 20 20 20 20 7a 4e 75 6d 2b 3d 69 6e 63 72 3b       zNum+=incr;
4540: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 53 74  .    }.  }.  zSt
4550: 61 72 74 20 3d 20 7a 4e 75 6d 3b 0a 20 20 77 68  art = zNum;.  wh
4560: 69 6c 65 28 20 7a 4e 75 6d 3c 7a 45 6e 64 20 26  ile( zNum<zEnd &
4570: 26 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 30 27 20 29  & zNum[0]=='0' )
4580: 7b 20 7a 4e 75 6d 2b 3d 69 6e 63 72 3b 20 7d 20  { zNum+=incr; } 
4590: 2f 2a 20 53 6b 69 70 20 6c 65 61 64 69 6e 67 20  /* Skip leading 
45a0: 7a 65 72 6f 73 2e 20 2a 2f 0a 20 20 66 6f 72 28  zeros. */.  for(
45b0: 69 3d 30 3b 20 26 7a 4e 75 6d 5b 69 5d 3c 7a 45  i=0; &zNum[i]<zE
45c0: 6e 64 20 26 26 20 28 63 3d 7a 4e 75 6d 5b 69 5d  nd && (c=zNum[i]
45d0: 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  )>='0' && c<='9'
45e0: 3b 20 69 2b 3d 69 6e 63 72 29 7b 0a 20 20 20 20  ; i+=incr){.    
45f0: 75 20 3d 20 75 2a 31 30 20 2b 20 63 20 2d 20 27  u = u*10 + c - '
4600: 30 27 3b 0a 20 20 7d 0a 20 20 69 66 28 20 75 3e  0';.  }.  if( u>
4610: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 29 7b  LARGEST_INT64 ){
4620: 0a 20 20 20 20 2a 70 4e 75 6d 20 3d 20 6e 65 67  .    *pNum = neg
4630: 20 3f 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36   ? SMALLEST_INT6
4640: 34 20 3a 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  4 : LARGEST_INT6
4650: 34 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  4;.  }else if( n
4660: 65 67 20 29 7b 0a 20 20 20 20 2a 70 4e 75 6d 20  eg ){.    *pNum 
4670: 3d 20 2d 28 69 36 34 29 75 3b 0a 20 20 7d 65 6c  = -(i64)u;.  }el
4680: 73 65 7b 0a 20 20 20 20 2a 70 4e 75 6d 20 3d 20  se{.    *pNum = 
4690: 28 69 36 34 29 75 3b 0a 20 20 7d 0a 20 20 74 65  (i64)u;.  }.  te
46a0: 73 74 63 61 73 65 28 20 69 3d 3d 31 38 20 29 3b  stcase( i==18 );
46b0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 69 3d 3d  .  testcase( i==
46c0: 31 39 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  19 );.  testcase
46d0: 28 20 69 3d 3d 32 30 20 29 3b 0a 20 20 69 66 28  ( i==20 );.  if(
46e0: 20 28 63 21 3d 30 20 26 26 20 26 7a 4e 75 6d 5b   (c!=0 && &zNum[
46f0: 69 5d 3c 7a 45 6e 64 29 20 7c 7c 20 28 69 3d 3d  i]<zEnd) || (i==
4700: 30 20 26 26 20 7a 53 74 61 72 74 3d 3d 7a 4e 75  0 && zStart==zNu
4710: 6d 29 0a 20 20 20 20 20 20 20 7c 7c 20 69 3e 31  m).       || i>1
4720: 39 2a 69 6e 63 72 20 7c 7c 20 6e 6f 6e 4e 75 6d  9*incr || nonNum
4730: 20 29 7b 0a 20 20 20 20 2f 2a 20 7a 4e 75 6d 20   ){.    /* zNum 
4740: 69 73 20 65 6d 70 74 79 20 6f 72 20 63 6f 6e 74  is empty or cont
4750: 61 69 6e 73 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63  ains non-numeric
4760: 20 74 65 78 74 20 6f 72 20 69 73 20 6c 6f 6e 67   text or is long
4770: 65 72 0a 20 20 20 20 2a 2a 20 74 68 61 6e 20 31  er.    ** than 1
4780: 39 20 64 69 67 69 74 73 20 28 74 68 75 73 20 67  9 digits (thus g
4790: 75 61 72 61 6e 74 65 65 69 6e 67 20 74 68 61 74  uaranteeing that
47a0: 20 69 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65   it is too large
47b0: 29 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20  ) */.    return 
47c0: 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  1;.  }else if( i
47d0: 3c 31 39 2a 69 6e 63 72 20 29 7b 0a 20 20 20 20  <19*incr ){.    
47e0: 2f 2a 20 4c 65 73 73 20 74 68 61 6e 20 31 39 20  /* Less than 19 
47f0: 64 69 67 69 74 73 2c 20 73 6f 20 77 65 20 6b 6e  digits, so we kn
4800: 6f 77 20 74 68 61 74 20 69 74 20 66 69 74 73 20  ow that it fits 
4810: 69 6e 20 36 34 20 62 69 74 73 20 2a 2f 0a 20 20  in 64 bits */.  
4820: 20 20 61 73 73 65 72 74 28 20 75 3c 3d 4c 41 52    assert( u<=LAR
4830: 47 45 53 54 5f 49 4e 54 36 34 20 29 3b 0a 20 20  GEST_INT64 );.  
4840: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
4850: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 7a 4e 75 6d  lse{.    /* zNum
4860: 20 69 73 20 61 20 31 39 2d 64 69 67 69 74 20 6e   is a 19-digit n
4870: 75 6d 62 65 72 73 2e 20 20 43 6f 6d 70 61 72 65  umbers.  Compare
4880: 20 69 74 20 61 67 61 69 6e 73 74 20 39 32 32 33   it against 9223
4890: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e  372036854775808.
48a0: 20 2a 2f 0a 20 20 20 20 63 20 3d 20 63 6f 6d 70   */.    c = comp
48b0: 61 72 65 32 70 6f 77 36 33 28 7a 4e 75 6d 2c 20  are2pow63(zNum, 
48c0: 69 6e 63 72 29 3b 0a 20 20 20 20 69 66 28 20 63  incr);.    if( c
48d0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 7a  <0 ){.      /* z
48e0: 4e 75 6d 20 69 73 20 6c 65 73 73 20 74 68 61 6e  Num is less than
48f0: 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37   922337203685477
4900: 35 38 30 38 20 73 6f 20 69 74 20 66 69 74 73 20  5808 so it fits 
4910: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
4920: 20 75 3c 3d 4c 41 52 47 45 53 54 5f 49 4e 54 36   u<=LARGEST_INT6
4930: 34 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  4 );.      retur
4940: 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  n 0;.    }else i
4950: 66 28 20 63 3e 30 20 29 7b 0a 20 20 20 20 20 20  f( c>0 ){.      
4960: 2f 2a 20 7a 4e 75 6d 20 69 73 20 67 72 65 61 74  /* zNum is great
4970: 65 72 20 74 68 61 6e 20 39 32 32 33 33 37 32 30  er than 92233720
4980: 33 36 38 35 34 37 37 35 38 30 38 20 73 6f 20 69  36854775808 so i
4990: 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20  t overflows */. 
49a0: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
49b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
49c0: 2f 2a 20 7a 4e 75 6d 20 69 73 20 65 78 61 63 74  /* zNum is exact
49d0: 6c 79 20 39 32 32 33 33 37 32 30 33 36 38 35 34  ly 9223372036854
49e0: 37 37 35 38 30 38 2e 20 20 46 69 74 73 20 69 66  775808.  Fits if
49f0: 20 6e 65 67 61 74 69 76 65 2e 20 20 54 68 65 0a   negative.  The.
4a00: 20 20 20 20 20 20 2a 2a 20 73 70 65 63 69 61 6c        ** special
4a10: 20 63 61 73 65 20 32 20 6f 76 65 72 66 6c 6f 77   case 2 overflow
4a20: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
4a30: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 75 2d        assert( u-
4a40: 31 3d 3d 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  1==LARGEST_INT64
4a50: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
4a60: 20 6e 65 67 20 3f 20 30 20 3a 20 32 3b 0a 20 20   neg ? 0 : 2;.  
4a70: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
4a80: 20 54 72 61 6e 73 66 6f 72 6d 20 61 20 55 54 46   Transform a UTF
4a90: 2d 38 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72  -8 integer liter
4aa0: 61 6c 2c 20 69 6e 20 65 69 74 68 65 72 20 64 65  al, in either de
4ab0: 63 69 6d 61 6c 20 6f 72 20 68 65 78 61 64 65 63  cimal or hexadec
4ac0: 69 6d 61 6c 2c 0a 2a 2a 20 69 6e 74 6f 20 61 20  imal,.** into a 
4ad0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4ae0: 74 65 67 65 72 2e 20 20 54 68 69 73 20 72 6f 75  teger.  This rou
4af0: 74 69 6e 65 20 61 63 63 65 70 74 73 20 68 65 78  tine accepts hex
4b00: 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c  adecimal literal
4b10: 73 2c 0a 2a 2a 20 77 68 65 72 65 61 73 20 73 71  s,.** whereas sq
4b20: 6c 69 74 65 33 41 74 6f 69 36 34 28 29 20 64 6f  lite3Atoi64() do
4b30: 65 73 20 6e 6f 74 2e 0a 2a 2a 0a 2a 2a 20 52 65  es not..**.** Re
4b40: 74 75 72 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  turns:.**.**    
4b50: 20 30 20 20 20 20 53 75 63 63 65 73 73 66 75 6c   0    Successful
4b60: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2e   transformation.
4b70: 20 20 46 69 74 73 20 69 6e 20 61 20 36 34 2d 62    Fits in a 64-b
4b80: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
4b90: 72 2e 0a 2a 2a 20 20 20 20 20 31 20 20 20 20 49  r..**     1    I
4ba0: 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65  nteger too large
4bb0: 20 66 6f 72 20 61 20 36 34 2d 62 69 74 20 73 69   for a 64-bit si
4bc0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6f 72 20  gned integer or 
4bd0: 69 73 20 6d 61 6c 66 6f 72 6d 65 64 0a 2a 2a 20  is malformed.** 
4be0: 20 20 20 20 32 20 20 20 20 53 70 65 63 69 61 6c      2    Special
4bf0: 20 63 61 73 65 20 6f 66 20 39 32 32 33 33 37 32   case of 9223372
4c00: 30 33 36 38 35 34 37 37 35 38 30 38 0a 2a 2f 0a  036854775808.*/.
4c10: 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
4c20: 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
4c30: 68 61 72 20 2a 7a 2c 20 69 36 34 20 2a 70 4f 75  har *z, i64 *pOu
4c40: 74 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t){.#ifndef SQLI
4c50: 54 45 5f 4f 4d 49 54 5f 48 45 58 5f 49 4e 54 45  TE_OMIT_HEX_INTE
4c60: 47 45 52 0a 20 20 69 66 28 20 7a 5b 30 5d 3d 3d  GER.  if( z[0]==
4c70: 27 30 27 0a 20 20 20 26 26 20 28 7a 5b 31 5d 3d  '0'.   && (z[1]=
4c80: 3d 27 78 27 20 7c 7c 20 7a 5b 31 5d 3d 3d 27 58  ='x' || z[1]=='X
4c90: 27 29 0a 20 20 20 26 26 20 73 71 6c 69 74 65 33  ').   && sqlite3
4ca0: 49 73 78 64 69 67 69 74 28 7a 5b 32 5d 29 0a 20  Isxdigit(z[2]). 
4cb0: 20 29 7b 0a 20 20 20 20 75 36 34 20 75 20 3d 20   ){.    u64 u = 
4cc0: 30 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b  0;.    int i, k;
4cd0: 0a 20 20 20 20 66 6f 72 28 69 3d 32 3b 20 7a 5b  .    for(i=2; z[
4ce0: 69 5d 3d 3d 27 30 27 3b 20 69 2b 2b 29 7b 7d 0a  i]=='0'; i++){}.
4cf0: 20 20 20 20 66 6f 72 28 6b 3d 69 3b 20 73 71 6c      for(k=i; sql
4d00: 69 74 65 33 49 73 78 64 69 67 69 74 28 7a 5b 6b  ite3Isxdigit(z[k
4d10: 5d 29 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); k++){.      
4d20: 75 20 3d 20 75 2a 31 36 20 2b 20 73 71 6c 69 74  u = u*16 + sqlit
4d30: 65 33 48 65 78 54 6f 49 6e 74 28 7a 5b 6b 5d 29  e3HexToInt(z[k])
4d40: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 63  ;.    }.    memc
4d50: 70 79 28 70 4f 75 74 2c 20 26 75 2c 20 38 29 3b  py(pOut, &u, 8);
4d60: 0a 20 20 20 20 72 65 74 75 72 6e 20 28 7a 5b 6b  .    return (z[k
4d70: 5d 3d 3d 30 20 26 26 20 6b 2d 69 3c 3d 31 36 29  ]==0 && k-i<=16)
4d80: 20 3f 20 30 20 3a 20 31 3b 0a 20 20 7d 65 6c 73   ? 0 : 1;.  }els
4d90: 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  e.#endif /* SQLI
4da0: 54 45 5f 4f 4d 49 54 5f 48 45 58 5f 49 4e 54 45  TE_OMIT_HEX_INTE
4db0: 47 45 52 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  GER */.  {.    r
4dc0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 74 6f  eturn sqlite3Ato
4dd0: 69 36 34 28 7a 2c 20 70 4f 75 74 2c 20 73 71 6c  i64(z, pOut, sql
4de0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 2c  ite3Strlen30(z),
4df0: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
4e00: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a   }.}../*.** If z
4e10: 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61  Num represents a
4e20: 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77  n integer that w
4e30: 69 6c 6c 20 66 69 74 20 69 6e 20 33 32 2d 62 69  ill fit in 32-bi
4e40: 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20  ts, then set.** 
4e50: 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61 74 20  *pValue to that 
4e60: 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65 74 75  integer and retu
4e70: 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77  rn true.  Otherw
4e80: 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c 73 65  ise return false
4e90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
4ea0: 74 69 6e 65 20 61 63 63 65 70 74 73 20 62 6f 74  tine accepts bot
4eb0: 68 20 64 65 63 69 6d 61 6c 20 61 6e 64 20 68 65  h decimal and he
4ec0: 78 61 64 65 63 69 6d 61 6c 20 6e 6f 74 61 74 69  xadecimal notati
4ed0: 6f 6e 20 66 6f 72 20 69 6e 74 65 67 65 72 73 2e  on for integers.
4ee0: 0a 2a 2a 0a 2a 2a 20 41 6e 79 20 6e 6f 6e 2d 6e  .**.** Any non-n
4ef0: 75 6d 65 72 69 63 20 63 68 61 72 61 63 74 65 72  umeric character
4f00: 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 69 6e 67  s that following
4f10: 20 7a 4e 75 6d 20 61 72 65 20 69 67 6e 6f 72 65   zNum are ignore
4f20: 64 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 64 69  d..** This is di
4f30: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 73 71 6c  fferent from sql
4f40: 69 74 65 33 41 74 6f 69 36 34 28 29 20 77 68 69  ite3Atoi64() whi
4f50: 63 68 20 72 65 71 75 69 72 65 73 20 74 68 65 0a  ch requires the.
4f60: 2a 2a 20 69 6e 70 75 74 20 6e 75 6d 62 65 72 20  ** input number 
4f70: 74 6f 20 62 65 20 7a 65 72 6f 2d 74 65 72 6d 69  to be zero-termi
4f80: 6e 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  nated..*/.int sq
4f90: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
4fa0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20  nst char *zNum, 
4fb0: 69 6e 74 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20  int *pValue){.  
4fc0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 76 20 3d  sqlite_int64 v =
4fd0: 20 30 3b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a   0;.  int i, c;.
4fe0: 20 20 69 6e 74 20 6e 65 67 20 3d 20 30 3b 0a 20    int neg = 0;. 
4ff0: 20 69 66 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 2d   if( zNum[0]=='-
5000: 27 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20 31  ' ){.    neg = 1
5010: 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20  ;.    zNum++;.  
5020: 7d 65 6c 73 65 20 69 66 28 20 7a 4e 75 6d 5b 30  }else if( zNum[0
5030: 5d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 4e  ]=='+' ){.    zN
5040: 75 6d 2b 2b 3b 0a 20 20 7d 0a 23 69 66 6e 64 65  um++;.  }.#ifnde
5050: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 48 45  f SQLITE_OMIT_HE
5060: 58 5f 49 4e 54 45 47 45 52 0a 20 20 65 6c 73 65  X_INTEGER.  else
5070: 20 69 66 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 30   if( zNum[0]=='0
5080: 27 0a 20 20 20 20 20 20 20 20 26 26 20 28 7a 4e  '.        && (zN
5090: 75 6d 5b 31 5d 3d 3d 27 78 27 20 7c 7c 20 7a 4e  um[1]=='x' || zN
50a0: 75 6d 5b 31 5d 3d 3d 27 58 27 29 0a 20 20 20 20  um[1]=='X').    
50b0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 49 73      && sqlite3Is
50c0: 78 64 69 67 69 74 28 7a 4e 75 6d 5b 32 5d 29 0a  xdigit(zNum[2]).
50d0: 20 20 29 7b 0a 20 20 20 20 75 33 32 20 75 20 3d    ){.    u32 u =
50e0: 20 30 3b 0a 20 20 20 20 7a 4e 75 6d 20 2b 3d 20   0;.    zNum += 
50f0: 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 4e  2;.    while( zN
5100: 75 6d 5b 30 5d 3d 3d 27 30 27 20 29 20 7a 4e 75  um[0]=='0' ) zNu
5110: 6d 2b 2b 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  m++;.    for(i=0
5120: 3b 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  ; sqlite3Isxdigi
5130: 74 28 7a 4e 75 6d 5b 69 5d 29 20 26 26 20 69 3c  t(zNum[i]) && i<
5140: 38 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 75  8; i++){.      u
5150: 20 3d 20 75 2a 31 36 20 2b 20 73 71 6c 69 74 65   = u*16 + sqlite
5160: 33 48 65 78 54 6f 49 6e 74 28 7a 4e 75 6d 5b 69  3HexToInt(zNum[i
5170: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5180: 28 20 28 75 26 30 78 38 30 30 30 30 30 30 30 29  ( (u&0x80000000)
5190: 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 49 73  ==0 && sqlite3Is
51a0: 78 64 69 67 69 74 28 7a 4e 75 6d 5b 69 5d 29 3d  xdigit(zNum[i])=
51b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 63  =0 ){.      memc
51c0: 70 79 28 70 56 61 6c 75 65 2c 20 26 75 2c 20 34  py(pValue, &u, 4
51d0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
51e0: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
51f0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
5200: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
5210: 20 77 68 69 6c 65 28 20 7a 4e 75 6d 5b 30 5d 3d   while( zNum[0]=
5220: 3d 27 30 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20  ='0' ) zNum++;. 
5230: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 31 20 26   for(i=0; i<11 &
5240: 26 20 28 63 20 3d 20 7a 4e 75 6d 5b 69 5d 20 2d  & (c = zNum[i] -
5250: 20 27 30 27 29 3e 3d 30 20 26 26 20 63 3c 3d 39   '0')>=0 && c<=9
5260: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76 20 3d 20  ; i++){.    v = 
5270: 76 2a 31 30 20 2b 20 63 3b 0a 20 20 7d 0a 0a 20  v*10 + c;.  }.. 
5280: 20 2f 2a 20 54 68 65 20 6c 6f 6e 67 65 73 74 20   /* The longest 
5290: 64 65 63 69 6d 61 6c 20 72 65 70 72 65 73 65 6e  decimal represen
52a0: 74 61 74 69 6f 6e 20 6f 66 20 61 20 33 32 20 62  tation of a 32 b
52b0: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 31 30  it integer is 10
52c0: 20 64 69 67 69 74 73 3a 0a 20 20 2a 2a 0a 20 20   digits:.  **.  
52d0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 31  **             1
52e0: 32 33 34 35 36 37 38 39 30 0a 20 20 2a 2a 20 20  234567890.  **  
52f0: 20 20 20 32 5e 33 31 20 2d 3e 20 32 31 34 37 34     2^31 -> 21474
5300: 38 33 36 34 38 0a 20 20 2a 2f 0a 20 20 74 65 73  83648.  */.  tes
5310: 74 63 61 73 65 28 20 69 3d 3d 31 30 20 29 3b 0a  tcase( i==10 );.
5320: 20 20 69 66 28 20 69 3e 31 30 20 29 7b 0a 20 20    if( i>10 ){.  
5330: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
5340: 20 20 74 65 73 74 63 61 73 65 28 20 76 2d 6e 65    testcase( v-ne
5350: 67 3d 3d 32 31 34 37 34 38 33 36 34 37 20 29 3b  g==2147483647 );
5360: 0a 20 20 69 66 28 20 76 2d 6e 65 67 3e 32 31 34  .  if( v-neg>214
5370: 37 34 38 33 36 34 37 20 29 7b 0a 20 20 20 20 72  7483647 ){.    r
5380: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
5390: 66 28 20 6e 65 67 20 29 7b 0a 20 20 20 20 76 20  f( neg ){.    v 
53a0: 3d 20 2d 76 3b 0a 20 20 7d 0a 20 20 2a 70 56 61  = -v;.  }.  *pVa
53b0: 6c 75 65 20 3d 20 28 69 6e 74 29 76 3b 0a 20 20  lue = (int)v;.  
53c0: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a  return 1;.}../*.
53d0: 2a 2a 20 52 65 74 75 72 6e 20 61 20 33 32 2d 62  ** Return a 32-b
53e0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
53f0: 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
5400: 61 20 73 74 72 69 6e 67 2e 20 20 49 66 20 74 68  a string.  If th
5410: 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 73 20 6e  e.** string is n
5420: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  ot an integer, j
5430: 75 73 74 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2f  ust return 0..*/
5440: 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
5450: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
5460: 0a 20 20 69 6e 74 20 78 20 3d 20 30 3b 0a 20 20  .  int x = 0;.  
5470: 69 66 28 20 7a 20 29 20 73 71 6c 69 74 65 33 47  if( z ) sqlite3G
5480: 65 74 49 6e 74 33 32 28 7a 2c 20 26 78 29 3b 0a  etInt32(z, &x);.
5490: 20 20 72 65 74 75 72 6e 20 78 3b 0a 7d 0a 0a 2f    return x;.}../
54a0: 2a 0a 2a 2a 20 54 68 65 20 76 61 72 69 61 62 6c  *.** The variabl
54b0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
54c0: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 61 73 20   encoding is as 
54d0: 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b  follows:.**.** K
54e0: 45 59 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 41  EY:.**         A
54f0: 20 3d 20 30 78 78 78 78 78 78 78 20 20 20 20 37   = 0xxxxxxx    7
5500: 20 62 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e   bits of data an
5510: 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a  d one flag bit.*
5520: 2a 20 20 20 20 20 20 20 20 20 42 20 3d 20 31 78  *         B = 1x
5530: 78 78 78 78 78 78 20 20 20 20 37 20 62 69 74 73  xxxxxx    7 bits
5540: 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65   of data and one
5550: 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20   flag bit.**    
5560: 20 20 20 20 20 43 20 3d 20 78 78 78 78 78 78 78       C = xxxxxxx
5570: 78 20 20 20 20 38 20 62 69 74 73 20 6f 66 20 64  x    8 bits of d
5580: 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69 74  ata.**.**  7 bit
5590: 73 20 2d 20 41 0a 2a 2a 20 31 34 20 62 69 74 73  s - A.** 14 bits
55a0: 20 2d 20 42 41 0a 2a 2a 20 32 31 20 62 69 74 73   - BA.** 21 bits
55b0: 20 2d 20 42 42 41 0a 2a 2a 20 32 38 20 62 69 74   - BBA.** 28 bit
55c0: 73 20 2d 20 42 42 42 41 0a 2a 2a 20 33 35 20 62  s - BBBA.** 35 b
55d0: 69 74 73 20 2d 20 42 42 42 42 41 0a 2a 2a 20 34  its - BBBBA.** 4
55e0: 32 20 62 69 74 73 20 2d 20 42 42 42 42 42 41 0a  2 bits - BBBBBA.
55f0: 2a 2a 20 34 39 20 62 69 74 73 20 2d 20 42 42 42  ** 49 bits - BBB
5600: 42 42 42 41 0a 2a 2a 20 35 36 20 62 69 74 73 20  BBBA.** 56 bits 
5610: 2d 20 42 42 42 42 42 42 42 41 0a 2a 2a 20 36 34  - BBBBBBBA.** 64
5620: 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42 42   bits - BBBBBBBB
5630: 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74  C.*/../*.** Writ
5640: 65 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61  e a 64-bit varia
5650: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
5660: 65 72 20 74 6f 20 6d 65 6d 6f 72 79 20 73 74 61  er to memory sta
5670: 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a  rting at p[0]..*
5680: 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
5690: 64 61 74 61 20 77 72 69 74 65 20 77 69 6c 6c 20  data write will 
56a0: 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
56b0: 20 39 20 62 79 74 65 73 2e 20 20 54 68 65 20 6e   9 bytes.  The n
56c0: 75 6d 62 65 72 0a 2a 2a 20 6f 66 20 62 79 74 65  umber.** of byte
56d0: 73 20 77 72 69 74 74 65 6e 20 69 73 20 72 65 74  s written is ret
56e0: 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76  urned..**.** A v
56f0: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
5700: 6e 74 65 67 65 72 20 63 6f 6e 73 69 73 74 73 20  nteger consists 
5710: 6f 66 20 74 68 65 20 6c 6f 77 65 72 20 37 20 62  of the lower 7 b
5720: 69 74 73 20 6f 66 20 65 61 63 68 20 62 79 74 65  its of each byte
5730: 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20 62 79 74 65  .** for all byte
5740: 73 20 74 68 61 74 20 68 61 76 65 20 74 68 65 20  s that have the 
5750: 38 74 68 20 62 69 74 20 73 65 74 20 61 6e 64 20  8th bit set and 
5760: 6f 6e 65 20 62 79 74 65 20 77 69 74 68 20 74 68  one byte with th
5770: 65 20 38 74 68 0a 2a 2a 20 62 69 74 20 63 6c 65  e 8th.** bit cle
5780: 61 72 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ar.  Except, if 
5790: 77 65 20 67 65 74 20 74 6f 20 74 68 65 20 39 74  we get to the 9t
57a0: 68 20 62 79 74 65 2c 20 69 74 20 73 74 6f 72 65  h byte, it store
57b0: 73 20 74 68 65 20 66 75 6c 6c 0a 2a 2a 20 38 20  s the full.** 8 
57c0: 62 69 74 73 20 61 6e 64 20 69 73 20 74 68 65 20  bits and is the 
57d0: 6c 61 73 74 20 62 79 74 65 2e 0a 2a 2f 0a 73 74  last byte..*/.st
57e0: 61 74 69 63 20 69 6e 74 20 53 51 4c 49 54 45 5f  atic int SQLITE_
57f0: 4e 4f 49 4e 4c 49 4e 45 20 70 75 74 56 61 72 69  NOINLINE putVari
5800: 6e 74 36 34 28 75 6e 73 69 67 6e 65 64 20 63 68  nt64(unsigned ch
5810: 61 72 20 2a 70 2c 20 75 36 34 20 76 29 7b 0a 20  ar *p, u64 v){. 
5820: 20 69 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20   int i, j, n;.  
5830: 75 38 20 62 75 66 5b 31 30 5d 3b 0a 20 20 69 66  u8 buf[10];.  if
5840: 28 20 76 20 26 20 28 28 28 75 36 34 29 30 78 66  ( v & (((u64)0xf
5850: 66 30 30 30 30 30 30 29 3c 3c 33 32 29 20 29 7b  f000000)<<32) ){
5860: 0a 20 20 20 20 70 5b 38 5d 20 3d 20 28 75 38 29  .    p[8] = (u8)
5870: 76 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b 0a  v;.    v >>= 8;.
5880: 20 20 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e 3d      for(i=7; i>=
5890: 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 70  0; i--){.      p
58a0: 5b 69 5d 20 3d 20 28 75 38 29 28 28 76 20 26 20  [i] = (u8)((v & 
58b0: 30 78 37 66 29 20 7c 20 30 78 38 30 29 3b 0a 20  0x7f) | 0x80);. 
58c0: 20 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20       v >>= 7;.  
58d0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 39    }.    return 9
58e0: 3b 0a 20 20 7d 20 20 20 20 0a 20 20 6e 20 3d 20  ;.  }    .  n = 
58f0: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 62 75 66  0;.  do{.    buf
5900: 5b 6e 2b 2b 5d 20 3d 20 28 75 38 29 28 28 76 20  [n++] = (u8)((v 
5910: 26 20 30 78 37 66 29 20 7c 20 30 78 38 30 29 3b  & 0x7f) | 0x80);
5920: 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20  .    v >>= 7;.  
5930: 7d 77 68 69 6c 65 28 20 76 21 3d 30 20 29 3b 0a  }while( v!=0 );.
5940: 20 20 62 75 66 5b 30 5d 20 26 3d 20 30 78 37 66    buf[0] &= 0x7f
5950: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3c 3d 39  ;.  assert( n<=9
5960: 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 6a   );.  for(i=0, j
5970: 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b 20 6a 2d 2d 2c  =n-1; j>=0; j--,
5980: 20 69 2b 2b 29 7b 0a 20 20 20 20 70 5b 69 5d 20   i++){.    p[i] 
5990: 3d 20 62 75 66 5b 6a 5d 3b 0a 20 20 7d 0a 20 20  = buf[j];.  }.  
59a0: 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 69 6e 74 20  return n;.}.int 
59b0: 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
59c0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
59d0: 70 2c 20 75 36 34 20 76 29 7b 0a 20 20 69 66 28  p, u64 v){.  if(
59e0: 20 76 3c 3d 30 78 37 66 20 29 7b 0a 20 20 20 20   v<=0x7f ){.    
59f0: 70 5b 30 5d 20 3d 20 76 26 30 78 37 66 3b 0a 20  p[0] = v&0x7f;. 
5a00: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
5a10: 0a 20 20 69 66 28 20 76 3c 3d 30 78 33 66 66 66  .  if( v<=0x3fff
5a20: 20 29 7b 0a 20 20 20 20 70 5b 30 5d 20 3d 20 28   ){.    p[0] = (
5a30: 28 76 3e 3e 37 29 26 30 78 37 66 29 7c 30 78 38  (v>>7)&0x7f)|0x8
5a40: 30 3b 0a 20 20 20 20 70 5b 31 5d 20 3d 20 76 26  0;.    p[1] = v&
5a50: 30 78 37 66 3b 0a 20 20 20 20 72 65 74 75 72 6e  0x7f;.    return
5a60: 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   2;.  }.  return
5a70: 20 70 75 74 56 61 72 69 6e 74 36 34 28 70 2c 76   putVarint64(p,v
5a80: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 6d  );.}../*.** Bitm
5a90: 61 73 6b 73 20 75 73 65 64 20 62 79 20 73 71 6c  asks used by sql
5aa0: 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 29 2e  ite3GetVarint().
5ab0: 20 20 54 68 65 73 65 20 70 72 65 63 6f 6d 70 75    These precompu
5ac0: 74 65 64 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ted constants.**
5ad0: 20 61 72 65 20 64 65 66 69 6e 65 64 20 68 65 72   are defined her
5ae0: 65 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 69  e rather than si
5af0: 6d 70 6c 79 20 70 75 74 74 69 6e 67 20 74 68 65  mply putting the
5b00: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
5b10: 73 69 6f 6e 73 0a 2a 2a 20 69 6e 6c 69 6e 65 20  sions.** inline 
5b20: 69 6e 20 6f 72 64 65 72 20 74 6f 20 77 6f 72 6b  in order to work
5b30: 20 61 72 6f 75 6e 64 20 62 75 67 73 20 69 6e 20   around bugs in 
5b40: 74 68 65 20 52 56 54 20 63 6f 6d 70 69 6c 65 72  the RVT compiler
5b50: 2e 0a 2a 2a 0a 2a 2a 20 53 4c 4f 54 5f 32 5f 30  ..**.** SLOT_2_0
5b60: 20 20 20 20 20 41 20 6d 61 73 6b 20 66 6f 72 20       A mask for 
5b70: 20 28 30 78 37 66 3c 3c 31 34 29 20 7c 20 30 78   (0x7f<<14) | 0x
5b80: 37 66 0a 2a 2a 0a 2a 2a 20 53 4c 4f 54 5f 34 5f  7f.**.** SLOT_4_
5b90: 32 5f 30 20 20 20 41 20 6d 61 73 6b 20 66 6f 72  2_0   A mask for
5ba0: 20 20 28 30 78 37 66 3c 3c 32 38 29 20 7c 20 53    (0x7f<<28) | S
5bb0: 4c 4f 54 5f 32 5f 30 0a 2a 2f 0a 23 64 65 66 69  LOT_2_0.*/.#defi
5bc0: 6e 65 20 53 4c 4f 54 5f 32 5f 30 20 20 20 20 20  ne SLOT_2_0     
5bd0: 30 78 30 30 31 66 63 30 37 66 0a 23 64 65 66 69  0x001fc07f.#defi
5be0: 6e 65 20 53 4c 4f 54 5f 34 5f 32 5f 30 20 20 20  ne SLOT_4_2_0   
5bf0: 30 78 66 30 31 66 63 30 37 66 0a 0a 0a 2f 2a 0a  0xf01fc07f.../*.
5c00: 2a 2a 20 52 65 61 64 20 61 20 36 34 2d 62 69 74  ** Read a 64-bit
5c10: 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
5c20: 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65   integer from me
5c30: 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74  mory starting at
5c40: 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e   p[0]..** Return
5c50: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
5c60: 79 74 65 73 20 72 65 61 64 2e 20 20 54 68 65 20  ytes read.  The 
5c70: 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20  value is stored 
5c80: 69 6e 20 2a 76 2e 0a 2a 2f 0a 75 38 20 73 71 6c  in *v..*/.u8 sql
5c90: 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
5ca0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
5cb0: 72 20 2a 70 2c 20 75 36 34 20 2a 76 29 7b 0a 20  r *p, u64 *v){. 
5cc0: 20 75 33 32 20 61 2c 62 2c 73 3b 0a 0a 20 20 61   u32 a,b,s;..  a
5cd0: 20 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70   = *p;.  /* a: p
5ce0: 30 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a  0 (unmasked) */.
5cf0: 20 20 69 66 20 28 21 28 61 26 30 78 38 30 29 29    if (!(a&0x80))
5d00: 0a 20 20 7b 0a 20 20 20 20 2a 76 20 3d 20 61 3b  .  {.    *v = a;
5d10: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
5d20: 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d   }..  p++;.  b =
5d30: 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 20   *p;.  /* b: p1 
5d40: 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20  (unmasked) */.  
5d50: 69 66 20 28 21 28 62 26 30 78 38 30 29 29 0a 20  if (!(b&0x80)). 
5d60: 20 7b 0a 20 20 20 20 61 20 26 3d 20 30 78 37 66   {.    a &= 0x7f
5d70: 3b 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a  ;.    a = a<<7;.
5d80: 20 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20      a |= b;.    
5d90: 2a 76 20 3d 20 61 3b 0a 20 20 20 20 72 65 74 75  *v = a;.    retu
5da0: 72 6e 20 32 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rn 2;.  }..  /* 
5db0: 56 65 72 69 66 79 20 74 68 61 74 20 63 6f 6e 73  Verify that cons
5dc0: 74 61 6e 74 73 20 61 72 65 20 70 72 65 63 6f 6d  tants are precom
5dd0: 70 75 74 65 64 20 63 6f 72 72 65 63 74 6c 79 20  puted correctly 
5de0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 53 4c 4f  */.  assert( SLO
5df0: 54 5f 32 5f 30 20 3d 3d 20 28 28 30 78 37 66 3c  T_2_0 == ((0x7f<
5e00: 3c 31 34 29 20 7c 20 28 30 78 37 66 29 29 20 29  <14) | (0x7f)) )
5e10: 3b 0a 20 20 61 73 73 65 72 74 28 20 53 4c 4f 54  ;.  assert( SLOT
5e20: 5f 34 5f 32 5f 30 20 3d 3d 20 28 28 30 78 66 55  _4_2_0 == ((0xfU
5e30: 3c 3c 32 38 29 20 7c 20 28 30 78 37 66 3c 3c 31  <<28) | (0x7f<<1
5e40: 34 29 20 7c 20 28 30 78 37 66 29 29 20 29 3b 0a  4) | (0x7f)) );.
5e50: 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c  .  p++;.  a = a<
5e60: 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a  <14;.  a |= *p;.
5e70: 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 31 34 20 7c    /* a: p0<<14 |
5e80: 20 70 32 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a   p2 (unmasked) *
5e90: 2f 0a 20 20 69 66 20 28 21 28 61 26 30 78 38 30  /.  if (!(a&0x80
5ea0: 29 29 0a 20 20 7b 0a 20 20 20 20 61 20 26 3d 20  )).  {.    a &= 
5eb0: 53 4c 4f 54 5f 32 5f 30 3b 0a 20 20 20 20 62 20  SLOT_2_0;.    b 
5ec0: 26 3d 20 30 78 37 66 3b 0a 20 20 20 20 62 20 3d  &= 0x7f;.    b =
5ed0: 20 62 3c 3c 37 3b 0a 20 20 20 20 61 20 7c 3d 20   b<<7;.    a |= 
5ee0: 62 3b 0a 20 20 20 20 2a 76 20 3d 20 61 3b 0a 20  b;.    *v = a;. 
5ef0: 20 20 20 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d     return 3;.  }
5f00: 0a 0a 20 20 2f 2a 20 43 53 45 31 20 66 72 6f 6d  ..  /* CSE1 from
5f10: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 61 20 26 3d   below */.  a &=
5f20: 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20 20 70 2b 2b   SLOT_2_0;.  p++
5f30: 3b 0a 20 20 62 20 3d 20 62 3c 3c 31 34 3b 0a 20  ;.  b = b<<14;. 
5f40: 20 62 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 62   b |= *p;.  /* b
5f50: 3a 20 70 31 3c 3c 31 34 20 7c 20 70 33 20 28 75  : p1<<14 | p3 (u
5f60: 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66  nmasked) */.  if
5f70: 20 28 21 28 62 26 30 78 38 30 29 29 0a 20 20 7b   (!(b&0x80)).  {
5f80: 0a 20 20 20 20 62 20 26 3d 20 53 4c 4f 54 5f 32  .    b &= SLOT_2
5f90: 5f 30 3b 0a 20 20 20 20 2f 2a 20 6d 6f 76 65 64  _0;.    /* moved
5fa0: 20 43 53 45 31 20 75 70 20 2a 2f 0a 20 20 20 20   CSE1 up */.    
5fb0: 2f 2a 20 61 20 26 3d 20 28 30 78 37 66 3c 3c 31  /* a &= (0x7f<<1
5fc0: 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20  4)|(0x7f); */.  
5fd0: 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20 20 20    a = a<<7;.    
5fe0: 61 20 7c 3d 20 62 3b 0a 20 20 20 20 2a 76 20 3d  a |= b;.    *v =
5ff0: 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 34   a;.    return 4
6000: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 61 3a 20 70  ;.  }..  /* a: p
6010: 30 3c 3c 31 34 20 7c 20 70 32 20 28 6d 61 73 6b  0<<14 | p2 (mask
6020: 65 64 29 20 2a 2f 0a 20 20 2f 2a 20 62 3a 20 70  ed) */.  /* b: p
6030: 31 3c 3c 31 34 20 7c 20 70 33 20 28 75 6e 6d 61  1<<14 | p3 (unma
6040: 73 6b 65 64 29 20 2a 2f 0a 20 20 2f 2a 20 31 3a  sked) */.  /* 1:
6050: 73 61 76 65 20 6f 66 66 20 70 30 3c 3c 32 31 20  save off p0<<21 
6060: 7c 20 70 31 3c 3c 31 34 20 7c 20 70 32 3c 3c 37  | p1<<14 | p2<<7
6070: 20 7c 20 70 33 20 28 6d 61 73 6b 65 64 29 20 2a   | p3 (masked) *
6080: 2f 0a 20 20 2f 2a 20 6d 6f 76 65 64 20 43 53 45  /.  /* moved CSE
6090: 31 20 75 70 20 2a 2f 0a 20 20 2f 2a 20 61 20 26  1 up */.  /* a &
60a0: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
60b0: 37 66 29 3b 20 2a 2f 0a 20 20 62 20 26 3d 20 53  7f); */.  b &= S
60c0: 4c 4f 54 5f 32 5f 30 3b 0a 20 20 73 20 3d 20 61  LOT_2_0;.  s = a
60d0: 3b 0a 20 20 2f 2a 20 73 3a 20 70 30 3c 3c 31 34  ;.  /* s: p0<<14
60e0: 20 7c 20 70 32 20 28 6d 61 73 6b 65 64 29 20 2a   | p2 (masked) *
60f0: 2f 0a 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20  /..  p++;.  a = 
6100: 61 3c 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70  a<<14;.  a |= *p
6110: 3b 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 32 38  ;.  /* a: p0<<28
6120: 20 7c 20 70 32 3c 3c 31 34 20 7c 20 70 34 20 28   | p2<<14 | p4 (
6130: 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69  unmasked) */.  i
6140: 66 20 28 21 28 61 26 30 78 38 30 29 29 0a 20 20  f (!(a&0x80)).  
6150: 7b 0a 20 20 20 20 2f 2a 20 77 65 20 63 61 6e 20  {.    /* we can 
6160: 73 6b 69 70 20 74 68 65 73 65 20 63 61 75 73 65  skip these cause
6170: 20 74 68 65 79 20 77 65 72 65 20 28 65 66 66 65   they were (effe
6180: 63 74 69 76 65 6c 79 29 20 64 6f 6e 65 20 61 62  ctively) done ab
6190: 6f 76 65 0a 20 20 20 20 2a 2a 20 77 68 69 6c 65  ove.    ** while
61a0: 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 73 20 2a   calculating s *
61b0: 2f 0a 20 20 20 20 2f 2a 20 61 20 26 3d 20 28 30  /.    /* a &= (0
61c0: 78 37 66 3c 3c 32 38 29 7c 28 30 78 37 66 3c 3c  x7f<<28)|(0x7f<<
61d0: 31 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20  14)|(0x7f); */. 
61e0: 20 20 20 2f 2a 20 62 20 26 3d 20 28 30 78 37 66     /* b &= (0x7f
61f0: 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f  <<14)|(0x7f); */
6200: 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20  .    b = b<<7;. 
6210: 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73     a |= b;.    s
6220: 20 3d 20 73 3e 3e 31 38 3b 0a 20 20 20 20 2a 76   = s>>18;.    *v
6230: 20 3d 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20   = ((u64)s)<<32 
6240: 7c 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | a;.    return 
6250: 35 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 32 3a 73  5;.  }..  /* 2:s
6260: 61 76 65 20 6f 66 66 20 70 30 3c 3c 32 31 20 7c  ave off p0<<21 |
6270: 20 70 31 3c 3c 31 34 20 7c 20 70 32 3c 3c 37 20   p1<<14 | p2<<7 
6280: 7c 20 70 33 20 28 6d 61 73 6b 65 64 29 20 2a 2f  | p3 (masked) */
6290: 0a 20 20 73 20 3d 20 73 3c 3c 37 3b 0a 20 20 73  .  s = s<<7;.  s
62a0: 20 7c 3d 20 62 3b 0a 20 20 2f 2a 20 73 3a 20 70   |= b;.  /* s: p
62b0: 30 3c 3c 32 31 20 7c 20 70 31 3c 3c 31 34 20 7c  0<<21 | p1<<14 |
62c0: 20 70 32 3c 3c 37 20 7c 20 70 33 20 28 6d 61 73   p2<<7 | p3 (mas
62d0: 6b 65 64 29 20 2a 2f 0a 0a 20 20 70 2b 2b 3b 0a  ked) */..  p++;.
62e0: 20 20 62 20 3d 20 62 3c 3c 31 34 3b 0a 20 20 62    b = b<<14;.  b
62f0: 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20   |= *p;.  /* b: 
6300: 70 31 3c 3c 32 38 20 7c 20 70 33 3c 3c 31 34 20  p1<<28 | p3<<14 
6310: 7c 20 70 35 20 28 75 6e 6d 61 73 6b 65 64 29 20  | p5 (unmasked) 
6320: 2a 2f 0a 20 20 69 66 20 28 21 28 62 26 30 78 38  */.  if (!(b&0x8
6330: 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 77  0)).  {.    /* w
6340: 65 20 63 61 6e 20 73 6b 69 70 20 74 68 69 73 20  e can skip this 
6350: 63 61 75 73 65 20 69 74 20 77 61 73 20 28 65 66  cause it was (ef
6360: 66 65 63 74 69 76 65 6c 79 29 20 64 6f 6e 65 20  fectively) done 
6370: 61 62 6f 76 65 20 69 6e 20 63 61 6c 63 27 69 6e  above in calc'in
6380: 67 20 73 20 2a 2f 0a 20 20 20 20 2f 2a 20 62 20  g s */.    /* b 
6390: 26 3d 20 28 30 78 37 66 3c 3c 32 38 29 7c 28 30  &= (0x7f<<28)|(0
63a0: 78 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b  x7f<<14)|(0x7f);
63b0: 20 2a 2f 0a 20 20 20 20 61 20 26 3d 20 53 4c 4f   */.    a &= SLO
63c0: 54 5f 32 5f 30 3b 0a 20 20 20 20 61 20 3d 20 61  T_2_0;.    a = a
63d0: 3c 3c 37 3b 0a 20 20 20 20 61 20 7c 3d 20 62 3b  <<7;.    a |= b;
63e0: 0a 20 20 20 20 73 20 3d 20 73 3e 3e 31 38 3b 0a  .    s = s>>18;.
63f0: 20 20 20 20 2a 76 20 3d 20 28 28 75 36 34 29 73      *v = ((u64)s
6400: 29 3c 3c 33 32 20 7c 20 61 3b 0a 20 20 20 20 72  )<<32 | a;.    r
6410: 65 74 75 72 6e 20 36 3b 0a 20 20 7d 0a 0a 20 20  eturn 6;.  }..  
6420: 70 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c 3c 31 34  p++;.  a = a<<14
6430: 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a 20 20 2f  ;.  a |= *p;.  /
6440: 2a 20 61 3a 20 70 32 3c 3c 32 38 20 7c 20 70 34  * a: p2<<28 | p4
6450: 3c 3c 31 34 20 7c 20 70 36 20 28 75 6e 6d 61 73  <<14 | p6 (unmas
6460: 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28  ked) */.  if (!(
6470: 61 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20  a&0x80)).  {.   
6480: 20 61 20 26 3d 20 53 4c 4f 54 5f 34 5f 32 5f 30   a &= SLOT_4_2_0
6490: 3b 0a 20 20 20 20 62 20 26 3d 20 53 4c 4f 54 5f  ;.    b &= SLOT_
64a0: 32 5f 30 3b 0a 20 20 20 20 62 20 3d 20 62 3c 3c  2_0;.    b = b<<
64b0: 37 3b 0a 20 20 20 20 61 20 7c 3d 20 62 3b 0a 20  7;.    a |= b;. 
64c0: 20 20 20 73 20 3d 20 73 3e 3e 31 31 3b 0a 20 20     s = s>>11;.  
64d0: 20 20 2a 76 20 3d 20 28 28 75 36 34 29 73 29 3c    *v = ((u64)s)<
64e0: 3c 33 32 20 7c 20 61 3b 0a 20 20 20 20 72 65 74  <32 | a;.    ret
64f0: 75 72 6e 20 37 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  urn 7;.  }..  /*
6500: 20 43 53 45 32 20 66 72 6f 6d 20 62 65 6c 6f 77   CSE2 from below
6510: 20 2a 2f 0a 20 20 61 20 26 3d 20 53 4c 4f 54 5f   */.  a &= SLOT_
6520: 32 5f 30 3b 0a 20 20 70 2b 2b 3b 0a 20 20 62 20  2_0;.  p++;.  b 
6530: 3d 20 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20  = b<<14;.  b |= 
6540: 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 33 3c 3c  *p;.  /* b: p3<<
6550: 32 38 20 7c 20 70 35 3c 3c 31 34 20 7c 20 70 37  28 | p5<<14 | p7
6560: 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20   (unmasked) */. 
6570: 20 69 66 20 28 21 28 62 26 30 78 38 30 29 29 0a   if (!(b&0x80)).
6580: 20 20 7b 0a 20 20 20 20 62 20 26 3d 20 53 4c 4f    {.    b &= SLO
6590: 54 5f 34 5f 32 5f 30 3b 0a 20 20 20 20 2f 2a 20  T_4_2_0;.    /* 
65a0: 6d 6f 76 65 64 20 43 53 45 32 20 75 70 20 2a 2f  moved CSE2 up */
65b0: 0a 20 20 20 20 2f 2a 20 61 20 26 3d 20 28 30 78  .    /* a &= (0x
65c0: 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20  7f<<14)|(0x7f); 
65d0: 2a 2f 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b  */.    a = a<<7;
65e0: 0a 20 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20  .    a |= b;.   
65f0: 20 73 20 3d 20 73 3e 3e 34 3b 0a 20 20 20 20 2a   s = s>>4;.    *
6600: 76 20 3d 20 28 28 75 36 34 29 73 29 3c 3c 33 32  v = ((u64)s)<<32
6610: 20 7c 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e   | a;.    return
6620: 20 38 3b 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a   8;.  }..  p++;.
6630: 20 20 61 20 3d 20 61 3c 3c 31 35 3b 0a 20 20 61    a = a<<15;.  a
6640: 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20   |= *p;.  /* a: 
6650: 70 34 3c 3c 32 39 20 7c 20 70 36 3c 3c 31 35 20  p4<<29 | p6<<15 
6660: 7c 20 70 38 20 28 75 6e 6d 61 73 6b 65 64 29 20  | p8 (unmasked) 
6670: 2a 2f 0a 0a 20 20 2f 2a 20 6d 6f 76 65 64 20 43  */..  /* moved C
6680: 53 45 32 20 75 70 20 2a 2f 0a 20 20 2f 2a 20 61  SE2 up */.  /* a
6690: 20 26 3d 20 28 30 78 37 66 3c 3c 32 39 29 7c 28   &= (0x7f<<29)|(
66a0: 30 78 37 66 3c 3c 31 35 29 7c 28 30 78 66 66 29  0x7f<<15)|(0xff)
66b0: 3b 20 2a 2f 0a 20 20 62 20 26 3d 20 53 4c 4f 54  ; */.  b &= SLOT
66c0: 5f 32 5f 30 3b 0a 20 20 62 20 3d 20 62 3c 3c 38  _2_0;.  b = b<<8
66d0: 3b 0a 20 20 61 20 7c 3d 20 62 3b 0a 0a 20 20 73  ;.  a |= b;..  s
66e0: 20 3d 20 73 3c 3c 34 3b 0a 20 20 62 20 3d 20 70   = s<<4;.  b = p
66f0: 5b 2d 34 5d 3b 0a 20 20 62 20 26 3d 20 30 78 37  [-4];.  b &= 0x7
6700: 66 3b 0a 20 20 62 20 3d 20 62 3e 3e 33 3b 0a 20  f;.  b = b>>3;. 
6710: 20 73 20 7c 3d 20 62 3b 0a 0a 20 20 2a 76 20 3d   s |= b;..  *v =
6720: 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20 7c 20   ((u64)s)<<32 | 
6730: 61 3b 0a 0a 20 20 72 65 74 75 72 6e 20 39 3b 0a  a;..  return 9;.
6740: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20  }../*.** Read a 
6750: 33 32 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d  32-bit variable-
6760: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66  length integer f
6770: 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74  rom memory start
6780: 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20  ing at p[0]..** 
6790: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
67a0: 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e  r of bytes read.
67b0: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73    The value is s
67c0: 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2a 0a  tored in *v..**.
67d0: 2a 2a 20 49 66 20 74 68 65 20 76 61 72 69 6e 74  ** If the varint
67e0: 20 73 74 6f 72 65 64 20 69 6e 20 70 5b 30 5d 20   stored in p[0] 
67f0: 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 63  is larger than c
6800: 61 6e 20 66 69 74 20 69 6e 20 61 20 33 32 2d 62  an fit in a 32-b
6810: 69 74 20 75 6e 73 69 67 6e 65 64 0a 2a 2a 20 69  it unsigned.** i
6820: 6e 74 65 67 65 72 2c 20 74 68 65 6e 20 73 65 74  nteger, then set
6830: 20 2a 76 20 74 6f 20 30 78 66 66 66 66 66 66 66   *v to 0xfffffff
6840: 66 2e 0a 2a 2a 0a 2a 2a 20 41 20 4d 41 43 52 4f  f..**.** A MACRO
6850: 20 76 65 72 73 69 6f 6e 2c 20 67 65 74 56 61 72   version, getVar
6860: 69 6e 74 33 32 2c 20 69 73 20 70 72 6f 76 69 64  int32, is provid
6870: 65 64 20 77 68 69 63 68 20 69 6e 6c 69 6e 65 73  ed which inlines
6880: 20 74 68 65 20 0a 2a 2a 20 73 69 6e 67 6c 65 2d   the .** single-
6890: 62 79 74 65 20 63 61 73 65 2e 20 20 41 6c 6c 20  byte case.  All 
68a0: 63 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20  code should use 
68b0: 74 68 65 20 4d 41 43 52 4f 20 76 65 72 73 69 6f  the MACRO versio
68c0: 6e 20 61 73 20 0a 2a 2a 20 74 68 69 73 20 66 75  n as .** this fu
68d0: 6e 63 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74  nction assumes t
68e0: 68 65 20 73 69 6e 67 6c 65 2d 62 79 74 65 20 63  he single-byte c
68f0: 61 73 65 20 68 61 73 20 61 6c 72 65 61 64 79 20  ase has already 
6900: 62 65 65 6e 20 68 61 6e 64 6c 65 64 2e 0a 2a 2f  been handled..*/
6910: 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
6920: 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
6930: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75  igned char *p, u
6940: 33 32 20 2a 76 29 7b 0a 20 20 75 33 32 20 61 2c  32 *v){.  u32 a,
6950: 62 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 31 2d 62  b;..  /* The 1-b
6960: 79 74 65 20 63 61 73 65 2e 20 20 4f 76 65 72 77  yte case.  Overw
6970: 68 65 6c 6d 69 6e 67 6c 79 20 74 68 65 20 6d 6f  helmingly the mo
6980: 73 74 20 63 6f 6d 6d 6f 6e 2e 20 20 48 61 6e 64  st common.  Hand
6990: 6c 65 64 20 69 6e 6c 69 6e 65 0a 20 20 2a 2a 20  led inline.  ** 
69a0: 62 79 20 74 68 65 20 67 65 74 56 61 72 69 6e 33  by the getVarin3
69b0: 32 28 29 20 6d 61 63 72 6f 20 2a 2f 0a 20 20 61  2() macro */.  a
69c0: 20 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70   = *p;.  /* a: p
69d0: 30 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a  0 (unmasked) */.
69e0: 23 69 66 6e 64 65 66 20 67 65 74 56 61 72 69 6e  #ifndef getVarin
69f0: 74 33 32 0a 20 20 69 66 20 28 21 28 61 26 30 78  t32.  if (!(a&0x
6a00: 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  80)).  {.    /* 
6a10: 56 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 30  Values between 0
6a20: 20 61 6e 64 20 31 32 37 20 2a 2f 0a 20 20 20 20   and 127 */.    
6a30: 2a 76 20 3d 20 61 3b 0a 20 20 20 20 72 65 74 75  *v = a;.    retu
6a40: 72 6e 20 31 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rn 1;.  }.#endif
6a50: 0a 0a 20 20 2f 2a 20 54 68 65 20 32 2d 62 79 74  ..  /* The 2-byt
6a60: 65 20 63 61 73 65 20 2a 2f 0a 20 20 70 2b 2b 3b  e case */.  p++;
6a70: 0a 20 20 62 20 3d 20 2a 70 3b 0a 20 20 2f 2a 20  .  b = *p;.  /* 
6a80: 62 3a 20 70 31 20 28 75 6e 6d 61 73 6b 65 64 29  b: p1 (unmasked)
6a90: 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26 30 78   */.  if (!(b&0x
6aa0: 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  80)).  {.    /* 
6ab0: 56 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 31  Values between 1
6ac0: 32 38 20 61 6e 64 20 31 36 33 38 33 20 2a 2f 0a  28 and 16383 */.
6ad0: 20 20 20 20 61 20 26 3d 20 30 78 37 66 3b 0a 20      a &= 0x7f;. 
6ae0: 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20 20     a = a<<7;.   
6af0: 20 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20 20   *v = a | b;.   
6b00: 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 0a   return 2;.  }..
6b10: 20 20 2f 2a 20 54 68 65 20 33 2d 62 79 74 65 20    /* The 3-byte 
6b20: 63 61 73 65 20 2a 2f 0a 20 20 70 2b 2b 3b 0a 20  case */.  p++;. 
6b30: 20 61 20 3d 20 61 3c 3c 31 34 3b 0a 20 20 61 20   a = a<<14;.  a 
6b40: 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70  |= *p;.  /* a: p
6b50: 30 3c 3c 31 34 20 7c 20 70 32 20 28 75 6e 6d 61  0<<14 | p2 (unma
6b60: 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21  sked) */.  if (!
6b70: 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20  (a&0x80)).  {.  
6b80: 20 20 2f 2a 20 56 61 6c 75 65 73 20 62 65 74 77    /* Values betw
6b90: 65 65 6e 20 31 36 33 38 34 20 61 6e 64 20 32 30  een 16384 and 20
6ba0: 39 37 31 35 31 20 2a 2f 0a 20 20 20 20 61 20 26  97151 */.    a &
6bb0: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
6bc0: 37 66 29 3b 0a 20 20 20 20 62 20 26 3d 20 30 78  7f);.    b &= 0x
6bd0: 37 66 3b 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37  7f;.    b = b<<7
6be0: 3b 0a 20 20 20 20 2a 76 20 3d 20 61 20 7c 20 62  ;.    *v = a | b
6bf0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 33 3b 0a  ;.    return 3;.
6c00: 20 20 7d 0a 0a 20 20 2f 2a 20 41 20 33 32 2d 62    }..  /* A 32-b
6c10: 69 74 20 76 61 72 69 6e 74 20 69 73 20 75 73 65  it varint is use
6c20: 64 20 74 6f 20 73 74 6f 72 65 20 73 69 7a 65 20  d to store size 
6c30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 62  information in b
6c40: 74 72 65 65 73 2e 0a 20 20 2a 2a 20 4f 62 6a 65  trees..  ** Obje
6c50: 63 74 73 20 61 72 65 20 72 61 72 65 6c 79 20 6c  cts are rarely l
6c60: 61 72 67 65 72 20 74 68 61 6e 20 32 4d 69 42 20  arger than 2MiB 
6c70: 6c 69 6d 69 74 20 6f 66 20 61 20 33 2d 62 79 74  limit of a 3-byt
6c80: 65 20 76 61 72 69 6e 74 2e 0a 20 20 2a 2a 20 41  e varint..  ** A
6c90: 20 33 2d 62 79 74 65 20 76 61 72 69 6e 74 20 69   3-byte varint i
6ca0: 73 20 73 75 66 66 69 63 69 65 6e 74 2c 20 66 6f  s sufficient, fo
6cb0: 72 20 65 78 61 6d 70 6c 65 2c 20 74 6f 20 72 65  r example, to re
6cc0: 63 6f 72 64 20 74 68 65 20 73 69 7a 65 0a 20 20  cord the size.  
6cd0: 2a 2a 20 6f 66 20 61 20 31 30 34 38 35 36 39 2d  ** of a 1048569-
6ce0: 62 79 74 65 20 42 4c 4f 42 20 6f 72 20 73 74 72  byte BLOB or str
6cf0: 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ing..  **.  ** W
6d00: 65 20 6f 6e 6c 79 20 75 6e 72 6f 6c 6c 20 74 68  e only unroll th
6d10: 65 20 66 69 72 73 74 20 31 2d 2c 20 32 2d 2c 20  e first 1-, 2-, 
6d20: 61 6e 64 20 33 2d 20 62 79 74 65 20 63 61 73 65  and 3- byte case
6d30: 73 2e 20 20 54 68 65 20 76 65 72 79 0a 20 20 2a  s.  The very.  *
6d40: 2a 20 72 61 72 65 20 6c 61 72 67 65 72 20 63 61  * rare larger ca
6d50: 73 65 73 20 63 61 6e 20 62 65 20 68 61 6e 64 6c  ses can be handl
6d60: 65 64 20 62 79 20 74 68 65 20 73 6c 6f 77 65 72  ed by the slower
6d70: 20 36 34 2d 62 69 74 20 76 61 72 69 6e 74 0a 20   64-bit varint. 
6d80: 20 2a 2a 20 72 6f 75 74 69 6e 65 2e 0a 20 20 2a   ** routine..  *
6d90: 2f 0a 23 69 66 20 31 0a 20 20 7b 0a 20 20 20 20  /.#if 1.  {.    
6da0: 75 36 34 20 76 36 34 3b 0a 20 20 20 20 75 38 20  u64 v64;.    u8 
6db0: 6e 3b 0a 0a 20 20 20 20 70 20 2d 3d 20 32 3b 0a  n;..    p -= 2;.
6dc0: 20 20 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 47      n = sqlite3G
6dd0: 65 74 56 61 72 69 6e 74 28 70 2c 20 26 76 36 34  etVarint(p, &v64
6de0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
6df0: 3e 33 20 26 26 20 6e 3c 3d 39 20 29 3b 0a 20 20  >3 && n<=9 );.  
6e00: 20 20 69 66 28 20 28 76 36 34 20 26 20 53 51 4c    if( (v64 & SQL
6e10: 49 54 45 5f 4d 41 58 5f 55 33 32 29 21 3d 76 36  ITE_MAX_U32)!=v6
6e20: 34 20 29 7b 0a 20 20 20 20 20 20 2a 76 20 3d 20  4 ){.      *v = 
6e30: 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 20 20  0xffffffff;.    
6e40: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a 76 20  }else{.      *v 
6e50: 3d 20 28 75 33 32 29 76 36 34 3b 0a 20 20 20 20  = (u32)v64;.    
6e60: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0a  }.    return n;.
6e70: 20 20 7d 0a 0a 23 65 6c 73 65 0a 20 20 2f 2a 20    }..#else.  /* 
6e80: 46 6f 72 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  For following co
6e90: 64 65 20 28 6b 65 70 74 20 66 6f 72 20 68 69 73  de (kept for his
6ea0: 74 6f 72 69 63 61 6c 20 72 65 63 6f 72 64 20 6f  torical record o
6eb0: 6e 6c 79 29 20 73 68 6f 77 73 20 61 6e 0a 20 20  nly) shows an.  
6ec0: 2a 2a 20 75 6e 72 6f 6c 6c 69 6e 67 20 66 6f 72  ** unrolling for
6ed0: 20 74 68 65 20 33 2d 20 61 6e 64 20 34 2d 62 79   the 3- and 4-by
6ee0: 74 65 20 76 61 72 69 6e 74 20 63 61 73 65 73 2e  te varint cases.
6ef0: 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 0a 20    This code is. 
6f00: 20 2a 2a 20 73 6c 69 67 68 74 6c 79 20 66 61 73   ** slightly fas
6f10: 74 65 72 2c 20 62 75 74 20 69 74 20 69 73 20 61  ter, but it is a
6f20: 6c 73 6f 20 6c 61 72 67 65 72 20 61 6e 64 20 6d  lso larger and m
6f30: 75 63 68 20 68 61 72 64 65 72 20 74 6f 20 74 65  uch harder to te
6f40: 73 74 2e 0a 20 20 2a 2f 0a 20 20 70 2b 2b 3b 0a  st..  */.  p++;.
6f50: 20 20 62 20 3d 20 62 3c 3c 31 34 3b 0a 20 20 62    b = b<<14;.  b
6f60: 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20   |= *p;.  /* b: 
6f70: 70 31 3c 3c 31 34 20 7c 20 70 33 20 28 75 6e 6d  p1<<14 | p3 (unm
6f80: 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28  asked) */.  if (
6f90: 21 28 62 26 30 78 38 30 29 29 0a 20 20 7b 0a 20  !(b&0x80)).  {. 
6fa0: 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 62 65 74     /* Values bet
6fb0: 77 65 65 6e 20 32 30 39 37 31 35 32 20 61 6e 64  ween 2097152 and
6fc0: 20 32 36 38 34 33 35 34 35 35 20 2a 2f 0a 20 20   268435455 */.  
6fd0: 20 20 62 20 26 3d 20 28 30 78 37 66 3c 3c 31 34    b &= (0x7f<<14
6fe0: 29 7c 28 30 78 37 66 29 3b 0a 20 20 20 20 61 20  )|(0x7f);.    a 
6ff0: 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30  &= (0x7f<<14)|(0
7000: 78 37 66 29 3b 0a 20 20 20 20 61 20 3d 20 61 3c  x7f);.    a = a<
7010: 3c 37 3b 0a 20 20 20 20 2a 76 20 3d 20 61 20 7c  <7;.    *v = a |
7020: 20 62 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 34   b;.    return 4
7030: 3b 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20  ;.  }..  p++;.  
7040: 61 20 3d 20 61 3c 3c 31 34 3b 0a 20 20 61 20 7c  a = a<<14;.  a |
7050: 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70 30  = *p;.  /* a: p0
7060: 3c 3c 32 38 20 7c 20 70 32 3c 3c 31 34 20 7c 20  <<28 | p2<<14 | 
7070: 70 34 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f  p4 (unmasked) */
7080: 0a 20 20 69 66 20 28 21 28 61 26 30 78 38 30 29  .  if (!(a&0x80)
7090: 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 56 61 6c  ).  {.    /* Val
70a0: 75 65 73 20 20 62 65 74 77 65 65 6e 20 32 36 38  ues  between 268
70b0: 34 33 35 34 35 36 20 61 6e 64 20 33 34 33 35 39  435456 and 34359
70c0: 37 33 38 33 36 37 20 2a 2f 0a 20 20 20 20 61 20  738367 */.    a 
70d0: 26 3d 20 53 4c 4f 54 5f 34 5f 32 5f 30 3b 0a 20  &= SLOT_4_2_0;. 
70e0: 20 20 20 62 20 26 3d 20 53 4c 4f 54 5f 34 5f 32     b &= SLOT_4_2
70f0: 5f 30 3b 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37  _0;.    b = b<<7
7100: 3b 0a 20 20 20 20 2a 76 20 3d 20 61 20 7c 20 62  ;.    *v = a | b
7110: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 35 3b 0a  ;.    return 5;.
7120: 20 20 7d 0a 0a 20 20 2f 2a 20 57 65 20 63 61 6e    }..  /* We can
7130: 20 6f 6e 6c 79 20 72 65 61 63 68 20 74 68 69 73   only reach this
7140: 20 70 6f 69 6e 74 20 77 68 65 6e 20 72 65 61 64   point when read
7150: 69 6e 67 20 61 20 63 6f 72 72 75 70 74 20 64 61  ing a corrupt da
7160: 74 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65  tabase.  ** file
7170: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20  .  In that case 
7180: 77 65 20 61 72 65 20 6e 6f 74 20 69 6e 20 61 6e  we are not in an
7190: 79 20 68 75 72 72 79 2e 20 20 55 73 65 20 74 68  y hurry.  Use th
71a0: 65 20 28 72 65 6c 61 74 69 76 65 6c 79 0a 20 20  e (relatively.  
71b0: 2a 2a 20 73 6c 6f 77 29 20 67 65 6e 65 72 61 6c  ** slow) general
71c0: 2d 70 75 72 70 6f 73 65 20 73 71 6c 69 74 65 33  -purpose sqlite3
71d0: 47 65 74 56 61 72 69 6e 74 28 29 20 72 6f 75 74  GetVarint() rout
71e0: 69 6e 65 20 74 6f 20 65 78 74 72 61 63 74 20 74  ine to extract t
71f0: 68 65 0a 20 20 2a 2a 20 76 61 6c 75 65 2e 20 2a  he.  ** value. *
7200: 2f 0a 20 20 7b 0a 20 20 20 20 75 36 34 20 76 36  /.  {.    u64 v6
7210: 34 3b 0a 20 20 20 20 75 38 20 6e 3b 0a 0a 20 20  4;.    u8 n;..  
7220: 20 20 70 20 2d 3d 20 34 3b 0a 20 20 20 20 6e 20    p -= 4;.    n 
7230: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
7240: 6e 74 28 70 2c 20 26 76 36 34 29 3b 0a 20 20 20  nt(p, &v64);.   
7250: 20 61 73 73 65 72 74 28 20 6e 3e 35 20 26 26 20   assert( n>5 && 
7260: 6e 3c 3d 39 20 29 3b 0a 20 20 20 20 2a 76 20 3d  n<=9 );.    *v =
7270: 20 28 75 33 32 29 76 36 34 3b 0a 20 20 20 20 72   (u32)v64;.    r
7280: 65 74 75 72 6e 20 6e 3b 0a 20 20 7d 0a 23 65 6e  eturn n;.  }.#en
7290: 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  dif.}../*.** Ret
72a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
72b0: 66 20 62 79 74 65 73 20 74 68 61 74 20 77 69 6c  f bytes that wil
72c0: 6c 20 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73  l be needed to s
72d0: 74 6f 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a  tore the given.*
72e0: 2a 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  * 64-bit integer
72f0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
7300: 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
7310: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  {.  int i;.  for
7320: 28 69 3d 31 3b 20 28 76 20 3e 3e 3d 20 37 29 21  (i=1; (v >>= 7)!
7330: 3d 30 3b 20 69 2b 2b 29 7b 20 61 73 73 65 72 74  =0; i++){ assert
7340: 28 20 69 3c 31 30 20 29 3b 20 7d 0a 20 20 72 65  ( i<10 ); }.  re
7350: 74 75 72 6e 20 69 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  turn i;.}.../*.*
7360: 2a 20 52 65 61 64 20 6f 72 20 77 72 69 74 65 20  * Read or write 
7370: 61 20 66 6f 75 72 2d 62 79 74 65 20 62 69 67 2d  a four-byte big-
7380: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 76  endian integer v
7390: 61 6c 75 65 2e 0a 2a 2f 0a 75 33 32 20 73 71 6c  alue..*/.u32 sql
73a0: 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
73b0: 73 74 20 75 38 20 2a 70 29 7b 0a 23 69 66 20 53  st u8 *p){.#if S
73c0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
73d0: 3d 34 33 32 31 0a 20 20 75 33 32 20 78 3b 0a 20  =4321.  u32 x;. 
73e0: 20 6d 65 6d 63 70 79 28 26 78 2c 70 2c 34 29 3b   memcpy(&x,p,4);
73f0: 0a 20 20 72 65 74 75 72 6e 20 78 3b 0a 23 65 6c  .  return x;.#el
7400: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7410: 44 45 52 3d 3d 31 32 33 34 20 26 26 20 21 64 65  DER==1234 && !de
7420: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49 53  fined(SQLITE_DIS
7430: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29 20  ABLE_INTRINSIC) 
7440: 5c 0a 20 20 20 20 26 26 20 64 65 66 69 6e 65 64  \.    && defined
7450: 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 47 43  (__GNUC__) && GC
7460: 43 5f 56 45 52 53 49 4f 4e 3e 3d 34 30 30 33 30  C_VERSION>=40030
7470: 30 30 0a 20 20 75 33 32 20 78 3b 0a 20 20 6d 65  00.  u32 x;.  me
7480: 6d 63 70 79 28 26 78 2c 70 2c 34 29 3b 0a 20 20  mcpy(&x,p,4);.  
7490: 72 65 74 75 72 6e 20 5f 5f 62 75 69 6c 74 69 6e  return __builtin
74a0: 5f 62 73 77 61 70 33 32 28 78 29 3b 0a 23 65 6c  _bswap32(x);.#el
74b0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
74c0: 44 45 52 3d 3d 31 32 33 34 20 26 26 20 21 64 65  DER==1234 && !de
74d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49 53  fined(SQLITE_DIS
74e0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29 20  ABLE_INTRINSIC) 
74f0: 5c 0a 20 20 20 20 26 26 20 64 65 66 69 6e 65 64  \.    && defined
7500: 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d  (_MSC_VER) && _M
7510: 53 43 5f 56 45 52 3e 3d 31 33 30 30 0a 20 20 75  SC_VER>=1300.  u
7520: 33 32 20 78 3b 0a 20 20 6d 65 6d 63 70 79 28 26  32 x;.  memcpy(&
7530: 78 2c 70 2c 34 29 3b 0a 20 20 72 65 74 75 72 6e  x,p,4);.  return
7540: 20 5f 62 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67   _byteswap_ulong
7550: 28 78 29 3b 0a 23 65 6c 73 65 0a 20 20 74 65 73  (x);.#else.  tes
7560: 74 63 61 73 65 28 20 70 5b 30 5d 26 30 78 38 30  tcase( p[0]&0x80
7570: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 28 75   );.  return ((u
7580: 6e 73 69 67 6e 65 64 29 70 5b 30 5d 3c 3c 32 34  nsigned)p[0]<<24
7590: 29 20 7c 20 28 70 5b 31 5d 3c 3c 31 36 29 20 7c  ) | (p[1]<<16) |
75a0: 20 28 70 5b 32 5d 3c 3c 38 29 20 7c 20 70 5b 33   (p[2]<<8) | p[3
75b0: 5d 3b 0a 23 65 6e 64 69 66 0a 7d 0a 76 6f 69 64  ];.#endif.}.void
75c0: 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
75d0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
75e0: 70 2c 20 75 33 32 20 76 29 7b 0a 23 69 66 20 53  p, u32 v){.#if S
75f0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
7600: 3d 34 33 32 31 0a 20 20 6d 65 6d 63 70 79 28 70  =4321.  memcpy(p
7610: 2c 26 76 2c 34 29 3b 0a 23 65 6c 69 66 20 53 51  ,&v,4);.#elif SQ
7620: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d  LITE_BYTEORDER==
7630: 31 32 33 34 20 26 26 20 21 64 65 66 69 6e 65 64  1234 && !defined
7640: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
7650: 49 4e 54 52 49 4e 53 49 43 29 20 5c 0a 20 20 20  INTRINSIC) \.   
7660: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e   && defined(__GN
7670: 55 43 5f 5f 29 20 26 26 20 47 43 43 5f 56 45 52  UC__) && GCC_VER
7680: 53 49 4f 4e 3e 3d 34 30 30 33 30 30 30 0a 20 20  SION>=4003000.  
7690: 75 33 32 20 78 20 3d 20 5f 5f 62 75 69 6c 74 69  u32 x = __builti
76a0: 6e 5f 62 73 77 61 70 33 32 28 76 29 3b 0a 20 20  n_bswap32(v);.  
76b0: 6d 65 6d 63 70 79 28 70 2c 26 78 2c 34 29 3b 0a  memcpy(p,&x,4);.
76c0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54  #elif SQLITE_BYT
76d0: 45 4f 52 44 45 52 3d 3d 31 32 33 34 20 26 26 20  EORDER==1234 && 
76e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
76f0: 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49  DISABLE_INTRINSI
7700: 43 29 20 5c 0a 20 20 20 20 26 26 20 64 65 66 69  C) \.    && defi
7710: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
7720: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30 30 0a   _MSC_VER>=1300.
7730: 20 20 75 33 32 20 78 20 3d 20 5f 62 79 74 65 73    u32 x = _bytes
7740: 77 61 70 5f 75 6c 6f 6e 67 28 76 29 3b 0a 20 20  wap_ulong(v);.  
7750: 6d 65 6d 63 70 79 28 70 2c 26 78 2c 34 29 3b 0a  memcpy(p,&x,4);.
7760: 23 65 6c 73 65 0a 20 20 70 5b 30 5d 20 3d 20 28  #else.  p[0] = (
7770: 75 38 29 28 76 3e 3e 32 34 29 3b 0a 20 20 70 5b  u8)(v>>24);.  p[
7780: 31 5d 20 3d 20 28 75 38 29 28 76 3e 3e 31 36 29  1] = (u8)(v>>16)
7790: 3b 0a 20 20 70 5b 32 5d 20 3d 20 28 75 38 29 28  ;.  p[2] = (u8)(
77a0: 76 3e 3e 38 29 3b 0a 20 20 70 5b 33 5d 20 3d 20  v>>8);.  p[3] = 
77b0: 28 75 38 29 76 3b 0a 23 65 6e 64 69 66 0a 7d 0a  (u8)v;.#endif.}.
77c0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 6c 61  .../*.** Transla
77d0: 74 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  te a single byte
77e0: 20 6f 66 20 48 65 78 20 69 6e 74 6f 20 61 6e 20   of Hex into an 
77f0: 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 54 68 69 73  integer..** This
7800: 20 72 6f 75 74 69 6e 65 20 6f 6e 6c 79 20 77 6f   routine only wo
7810: 72 6b 73 20 69 66 20 68 20 72 65 61 6c 6c 79 20  rks if h really 
7820: 69 73 20 61 20 76 61 6c 69 64 20 68 65 78 61 64  is a valid hexad
7830: 65 63 69 6d 61 6c 0a 2a 2a 20 63 68 61 72 61 63  ecimal.** charac
7840: 74 65 72 3a 20 20 30 2e 2e 39 61 2e 2e 66 41 2e  ter:  0..9a..fA.
7850: 2e 46 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33  .F.*/.u8 sqlite3
7860: 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 7b  HexToInt(int h){
7870: 0a 20 20 61 73 73 65 72 74 28 20 28 68 3e 3d 27  .  assert( (h>='
7880: 30 27 20 26 26 20 68 3c 3d 27 39 27 29 20 7c 7c  0' && h<='9') ||
7890: 20 20 28 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d    (h>='a' && h<=
78a0: 27 66 27 29 20 7c 7c 20 20 28 68 3e 3d 27 41 27  'f') ||  (h>='A'
78b0: 20 26 26 20 68 3c 3d 27 46 27 29 20 29 3b 0a 23   && h<='F') );.#
78c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
78d0: 49 49 0a 20 20 68 20 2b 3d 20 39 2a 28 31 26 28  II.  h += 9*(1&(
78e0: 68 3e 3e 36 29 29 3b 0a 23 65 6e 64 69 66 0a 23  h>>6));.#endif.#
78f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 42 43  ifdef SQLITE_EBC
7900: 44 49 43 0a 20 20 68 20 2b 3d 20 39 2a 28 31 26  DIC.  h += 9*(1&
7910: 7e 28 68 3e 3e 34 29 29 3b 0a 23 65 6e 64 69 66  ~(h>>4));.#endif
7920: 0a 20 20 72 65 74 75 72 6e 20 28 75 38 29 28 68  .  return (u8)(h
7930: 20 26 20 30 78 66 29 3b 0a 7d 0a 0a 23 69 66 20   & 0xf);.}..#if 
7940: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
7950: 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41  OMIT_BLOB_LITERA
7960: 4c 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  L) || defined(SQ
7970: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
7980: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20  /*.** Convert a 
7990: 42 4c 4f 42 20 6c 69 74 65 72 61 6c 20 6f 66 20  BLOB literal of 
79a0: 74 68 65 20 66 6f 72 6d 20 22 78 27 68 68 68 68  the form "x'hhhh
79b0: 68 68 27 22 20 69 6e 74 6f 20 69 74 73 20 62 69  hh'" into its bi
79c0: 6e 61 72 79 0a 2a 2a 20 76 61 6c 75 65 2e 20 20  nary.** value.  
79d0: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
79e0: 20 74 6f 20 69 74 73 20 62 69 6e 61 72 79 20 76   to its binary v
79f0: 61 6c 75 65 2e 20 20 53 70 61 63 65 20 74 6f 20  alue.  Space to 
7a00: 68 6f 6c 64 20 74 68 65 0a 2a 2a 20 62 69 6e 61  hold the.** bina
7a10: 72 79 20 76 61 6c 75 65 20 68 61 73 20 62 65 65  ry value has bee
7a20: 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  n obtained from 
7a30: 6d 61 6c 6c 6f 63 20 61 6e 64 20 6d 75 73 74 20  malloc and must 
7a40: 62 65 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 74  be freed by.** t
7a50: 68 65 20 63 61 6c 6c 69 6e 67 20 72 6f 75 74 69  he calling routi
7a60: 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ne..*/.void *sql
7a70: 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
7a80: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
7a90: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
7aa0: 7b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 3b  {.  char *zBlob;
7ab0: 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 7a 42 6c  .  int i;..  zBl
7ac0: 6f 62 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  ob = (char *)sql
7ad0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
7ae0: 4e 28 64 62 2c 20 6e 2f 32 20 2b 20 31 29 3b 0a  N(db, n/2 + 1);.
7af0: 20 20 6e 2d 2d 3b 0a 20 20 69 66 28 20 7a 42 6c    n--;.  if( zBl
7b00: 6f 62 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d  ob ){.    for(i=
7b10: 30 3b 20 69 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20  0; i<n; i+=2){. 
7b20: 20 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20       zBlob[i/2] 
7b30: 3d 20 28 73 71 6c 69 74 65 33 48 65 78 54 6f 49  = (sqlite3HexToI
7b40: 6e 74 28 7a 5b 69 5d 29 3c 3c 34 29 20 7c 20 73  nt(z[i])<<4) | s
7b50: 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a  qlite3HexToInt(z
7b60: 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  [i+1]);.    }.  
7b70: 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 30    zBlob[i/2] = 0
7b80: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
7b90: 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  Blob;.}.#endif /
7ba0: 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  * !SQLITE_OMIT_B
7bb0: 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 7c 7c 20 53  LOB_LITERAL || S
7bc0: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 20  QLITE_HAS_CODEC 
7bd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 67 20 61 6e  */../*.** Log an
7be0: 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 61   error that is a
7bf0: 6e 20 41 50 49 20 63 61 6c 6c 20 6f 6e 20 61 20  n API call on a 
7c00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7c10: 65 72 20 74 68 61 74 20 73 68 6f 75 6c 64 0a 2a  er that should.*
7c20: 2a 20 6e 6f 74 20 68 61 76 65 20 62 65 65 6e 20  * not have been 
7c30: 75 73 65 64 2e 20 20 54 68 65 20 22 74 79 70 65  used.  The "type
7c40: 22 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  " of connection 
7c50: 70 6f 69 6e 74 65 72 20 69 73 20 67 69 76 65 6e  pointer is given
7c60: 20 61 73 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d   as the.** argum
7c70: 65 6e 74 2e 20 20 54 68 65 20 7a 54 79 70 65 20  ent.  The zType 
7c80: 69 73 20 61 20 77 6f 72 64 20 6c 69 6b 65 20 22  is a word like "
7c90: 4e 55 4c 4c 22 20 6f 72 20 22 63 6c 6f 73 65 64  NULL" or "closed
7ca0: 22 20 6f 72 20 22 69 6e 76 61 6c 69 64 22 2e 0a  " or "invalid"..
7cb0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6c  */.static void l
7cc0: 6f 67 42 61 64 43 6f 6e 6e 65 63 74 69 6f 6e 28  ogBadConnection(
7cd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
7ce0: 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f  e){.  sqlite3_lo
7cf0: 67 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c  g(SQLITE_MISUSE,
7d00: 20 0a 20 20 20 20 20 22 41 50 49 20 63 61 6c 6c   .     "API call
7d10: 20 77 69 74 68 20 25 73 20 64 61 74 61 62 61 73   with %s databas
7d20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  e connection poi
7d30: 6e 74 65 72 22 2c 0a 20 20 20 20 20 7a 54 79 70  nter",.     zTyp
7d40: 65 0a 20 20 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  e.  );.}../*.** 
7d50: 43 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75  Check to make su
7d60: 72 65 20 77 65 20 68 61 76 65 20 61 20 76 61 6c  re we have a val
7d70: 69 64 20 64 62 20 70 6f 69 6e 74 65 72 2e 20 20  id db pointer.  
7d80: 54 68 69 73 20 74 65 73 74 20 69 73 20 6e 6f 74  This test is not
7d90: 0a 2a 2a 20 66 6f 6f 6c 70 72 6f 6f 66 20 62 75  .** foolproof bu
7da0: 74 20 69 74 20 64 6f 65 73 20 70 72 6f 76 69 64  t it does provid
7db0: 65 20 73 6f 6d 65 20 6d 65 61 73 75 72 65 20 6f  e some measure o
7dc0: 66 20 70 72 6f 74 65 63 74 69 6f 6e 20 61 67 61  f protection aga
7dd0: 69 6e 73 74 0a 2a 2a 20 6d 69 73 75 73 65 20 6f  inst.** misuse o
7de0: 66 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  f the interface 
7df0: 73 75 63 68 20 61 73 20 70 61 73 73 69 6e 67 20  such as passing 
7e00: 69 6e 20 64 62 20 70 6f 69 6e 74 65 72 73 20 74  in db pointers t
7e10: 68 61 74 20 61 72 65 0a 2a 2a 20 4e 55 4c 4c 20  hat are.** NULL 
7e20: 6f 72 20 77 68 69 63 68 20 68 61 76 65 20 62 65  or which have be
7e30: 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6c  en previously cl
7e40: 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 72  osed.  If this r
7e50: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 0a 2a  outine returns.*
7e60: 2a 20 31 20 69 74 20 6d 65 61 6e 73 20 74 68 61  * 1 it means tha
7e70: 74 20 74 68 65 20 64 62 20 70 6f 69 6e 74 65 72  t the db pointer
7e80: 20 69 73 20 76 61 6c 69 64 20 61 6e 64 20 30 20   is valid and 0 
7e90: 69 66 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74  if it should not
7ea0: 20 62 65 0a 2a 2a 20 64 65 72 65 66 65 72 65 6e   be.** dereferen
7eb0: 63 65 64 20 66 6f 72 20 61 6e 79 20 72 65 61 73  ced for any reas
7ec0: 6f 6e 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e 67  on.  The calling
7ed0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
7ee0: 20 69 6e 76 6f 6b 65 0a 2a 2a 20 53 51 4c 49 54   invoke.** SQLIT
7ef0: 45 5f 4d 49 53 55 53 45 20 69 6d 6d 65 64 69 61  E_MISUSE immedia
7f00: 74 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  tely..**.** sqli
7f10: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
7f20: 28 29 20 72 65 71 75 69 72 65 73 20 74 68 61 74  () requires that
7f30: 20 74 68 65 20 64 62 20 70 6f 69 6e 74 65 72 20   the db pointer 
7f40: 62 65 20 76 61 6c 69 64 20 66 6f 72 0a 2a 2a 20  be valid for.** 
7f50: 75 73 65 2e 20 20 73 71 6c 69 74 65 33 53 61 66  use.  sqlite3Saf
7f60: 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
7f70: 28 29 20 61 6c 6c 6f 77 73 20 61 20 64 62 20 70  () allows a db p
7f80: 6f 69 6e 74 65 72 20 74 68 61 74 20 66 61 69 6c  ointer that fail
7f90: 65 64 20 74 6f 0a 2a 2a 20 6f 70 65 6e 20 70 72  ed to.** open pr
7fa0: 6f 70 65 72 6c 79 20 61 6e 64 20 69 73 20 6e 6f  operly and is no
7fb0: 74 20 66 69 74 20 66 6f 72 20 67 65 6e 65 72 61  t fit for genera
7fc0: 6c 20 75 73 65 20 62 75 74 20 77 68 69 63 68 20  l use but which 
7fd0: 63 61 6e 20 62 65 0a 2a 2a 20 75 73 65 64 20 61  can be.** used a
7fe0: 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 6f  s an argument to
7ff0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
8000: 29 20 6f 72 20 73 71 6c 69 74 65 33 5f 63 6c 6f  ) or sqlite3_clo
8010: 73 65 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  se()..*/.int sql
8020: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
8030: 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  k(sqlite3 *db){.
8040: 20 20 75 33 32 20 6d 61 67 69 63 3b 0a 20 20 69    u32 magic;.  i
8050: 66 28 20 64 62 3d 3d 30 20 29 7b 0a 20 20 20 20  f( db==0 ){.    
8060: 6c 6f 67 42 61 64 43 6f 6e 6e 65 63 74 69 6f 6e  logBadConnection
8070: 28 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 72 65  ("NULL");.    re
8080: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 6d 61  turn 0;.  }.  ma
8090: 67 69 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b  gic = db->magic;
80a0: 0a 20 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51  .  if( magic!=SQ
80b0: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
80c0: 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
80d0: 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
80e0: 6b 4f 72 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20  kOrOk(db) ){.   
80f0: 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c     testcase( sql
8100: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8110: 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20  .xLog!=0 );.    
8120: 20 20 6c 6f 67 42 61 64 43 6f 6e 6e 65 63 74 69    logBadConnecti
8130: 6f 6e 28 22 75 6e 6f 70 65 6e 65 64 22 29 3b 0a  on("unopened");.
8140: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
8150: 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
8160: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 7d   return 1;.  }.}
8170: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
8180: 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
8190: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
81a0: 75 33 32 20 6d 61 67 69 63 3b 0a 20 20 6d 61 67  u32 magic;.  mag
81b0: 69 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a  ic = db->magic;.
81c0: 20 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c    if( magic!=SQL
81d0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 26  ITE_MAGIC_SICK &
81e0: 26 0a 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53  &.      magic!=S
81f0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
8200: 20 26 26 0a 20 20 20 20 20 20 6d 61 67 69 63 21   &&.      magic!
8210: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
8220: 53 59 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61  SY ){.    testca
8230: 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
8240: 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
8250: 29 3b 0a 20 20 20 20 6c 6f 67 42 61 64 43 6f 6e  );.    logBadCon
8260: 6e 65 63 74 69 6f 6e 28 22 69 6e 76 61 6c 69 64  nection("invalid
8270: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  ");.    return 0
8280: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
8290: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 7d 0a 0a  eturn 1;.  }.}..
82a0: 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  /*.** Attempt to
82b0: 20 61 64 64 2c 20 73 75 62 73 74 72 61 63 74 2c   add, substract,
82c0: 20 6f 72 20 6d 75 6c 74 69 70 6c 79 20 74 68 65   or multiply the
82d0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 76   64-bit signed v
82e0: 61 6c 75 65 20 69 42 20 61 67 61 69 6e 73 74 0a  alue iB against.
82f0: 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 36 34 2d  ** the other 64-
8300: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
8310: 65 72 20 61 74 20 2a 70 41 20 61 6e 64 20 73 74  er at *pA and st
8320: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8330: 6e 20 2a 70 41 2e 0a 2a 2a 20 52 65 74 75 72 6e  n *pA..** Return
8340: 20 30 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 20   0 on success.  
8350: 4f 72 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  Or if the operat
8360: 69 6f 6e 20 77 6f 75 6c 64 20 68 61 76 65 20 72  ion would have r
8370: 65 73 75 6c 74 65 64 20 69 6e 20 61 6e 0a 2a 2a  esulted in an.**
8380: 20 6f 76 65 72 66 6c 6f 77 2c 20 6c 65 61 76 65   overflow, leave
8390: 20 2a 70 41 20 75 6e 63 68 61 6e 67 65 64 20 61   *pA unchanged a
83a0: 6e 64 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a  nd return 1..*/.
83b0: 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
83c0: 74 36 34 28 69 36 34 20 2a 70 41 2c 20 69 36 34  t64(i64 *pA, i64
83d0: 20 69 42 29 7b 0a 20 20 69 36 34 20 69 41 20 3d   iB){.  i64 iA =
83e0: 20 2a 70 41 3b 0a 20 20 74 65 73 74 63 61 73 65   *pA;.  testcase
83f0: 28 20 69 41 3d 3d 30 20 29 3b 20 74 65 73 74 63  ( iA==0 ); testc
8400: 61 73 65 28 20 69 41 3d 3d 31 20 29 3b 0a 20 20  ase( iA==1 );.  
8410: 74 65 73 74 63 61 73 65 28 20 69 42 3d 3d 2d 31  testcase( iB==-1
8420: 20 29 3b 20 74 65 73 74 63 61 73 65 28 20 69 42   ); testcase( iB
8430: 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 42 3e  ==0 );.  if( iB>
8440: 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61  =0 ){.    testca
8450: 73 65 28 20 69 41 3e 30 20 26 26 20 4c 41 52 47  se( iA>0 && LARG
8460: 45 53 54 5f 49 4e 54 36 34 20 2d 20 69 41 20 3d  EST_INT64 - iA =
8470: 3d 20 69 42 20 29 3b 0a 20 20 20 20 74 65 73 74  = iB );.    test
8480: 63 61 73 65 28 20 69 41 3e 30 20 26 26 20 4c 41  case( iA>0 && LA
8490: 52 47 45 53 54 5f 49 4e 54 36 34 20 2d 20 69 41  RGEST_INT64 - iA
84a0: 20 3d 3d 20 69 42 20 2d 20 31 20 29 3b 0a 20 20   == iB - 1 );.  
84b0: 20 20 69 66 28 20 69 41 3e 30 20 26 26 20 4c 41    if( iA>0 && LA
84c0: 52 47 45 53 54 5f 49 4e 54 36 34 20 2d 20 69 41  RGEST_INT64 - iA
84d0: 20 3c 20 69 42 20 29 20 72 65 74 75 72 6e 20 31   < iB ) return 1
84e0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74  ;.  }else{.    t
84f0: 65 73 74 63 61 73 65 28 20 69 41 3c 30 20 26 26  estcase( iA<0 &&
8500: 20 2d 28 69 41 20 2b 20 4c 41 52 47 45 53 54 5f   -(iA + LARGEST_
8510: 49 4e 54 36 34 29 20 3d 3d 20 69 42 20 2b 20 31  INT64) == iB + 1
8520: 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
8530: 28 20 69 41 3c 30 20 26 26 20 2d 28 69 41 20 2b  ( iA<0 && -(iA +
8540: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 20   LARGEST_INT64) 
8550: 3d 3d 20 69 42 20 2b 20 32 20 29 3b 0a 20 20 20  == iB + 2 );.   
8560: 20 69 66 28 20 69 41 3c 30 20 26 26 20 2d 28 69   if( iA<0 && -(i
8570: 41 20 2b 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  A + LARGEST_INT6
8580: 34 29 20 3e 20 69 42 20 2b 20 31 20 29 20 72 65  4) > iB + 1 ) re
8590: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 2a 70  turn 1;.  }.  *p
85a0: 41 20 2b 3d 20 69 42 3b 0a 20 20 72 65 74 75 72  A += iB;.  retur
85b0: 6e 20 30 3b 20 0a 7d 0a 69 6e 74 20 73 71 6c 69  n 0; .}.int sqli
85c0: 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 20  te3SubInt64(i64 
85d0: 2a 70 41 2c 20 69 36 34 20 69 42 29 7b 0a 20 20  *pA, i64 iB){.  
85e0: 74 65 73 74 63 61 73 65 28 20 69 42 3d 3d 53 4d  testcase( iB==SM
85f0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 2b 31 20 29  ALLEST_INT64+1 )
8600: 3b 0a 20 20 69 66 28 20 69 42 3d 3d 53 4d 41 4c  ;.  if( iB==SMAL
8610: 4c 45 53 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20  LEST_INT64 ){.  
8620: 20 20 74 65 73 74 63 61 73 65 28 20 28 2a 70 41    testcase( (*pA
8630: 29 3d 3d 28 2d 31 29 20 29 3b 20 74 65 73 74 63  )==(-1) ); testc
8640: 61 73 65 28 20 28 2a 70 41 29 3d 3d 30 20 29 3b  ase( (*pA)==0 );
8650: 0a 20 20 20 20 69 66 28 20 28 2a 70 41 29 3e 3d  .    if( (*pA)>=
8660: 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  0 ) return 1;.  
8670: 20 20 2a 70 41 20 2d 3d 20 69 42 3b 0a 20 20 20    *pA -= iB;.   
8680: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c   return 0;.  }el
8690: 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73  se{.    return s
86a0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 70  qlite3AddInt64(p
86b0: 41 2c 20 2d 69 42 29 3b 0a 20 20 7d 0a 7d 0a 23  A, -iB);.  }.}.#
86c0: 64 65 66 69 6e 65 20 54 57 4f 50 4f 57 45 52 33  define TWOPOWER3
86d0: 32 20 28 28 28 69 36 34 29 31 29 3c 3c 33 32 29  2 (((i64)1)<<32)
86e0: 0a 23 64 65 66 69 6e 65 20 54 57 4f 50 4f 57 45  .#define TWOPOWE
86f0: 52 33 31 20 28 28 28 69 36 34 29 31 29 3c 3c 33  R31 (((i64)1)<<3
8700: 31 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  1).int sqlite3Mu
8710: 6c 49 6e 74 36 34 28 69 36 34 20 2a 70 41 2c 20  lInt64(i64 *pA, 
8720: 69 36 34 20 69 42 29 7b 0a 20 20 69 36 34 20 69  i64 iB){.  i64 i
8730: 41 20 3d 20 2a 70 41 3b 0a 20 20 69 36 34 20 69  A = *pA;.  i64 i
8740: 41 31 2c 20 69 41 30 2c 20 69 42 31 2c 20 69 42  A1, iA0, iB1, iB
8750: 30 2c 20 72 3b 0a 0a 20 20 69 41 31 20 3d 20 69  0, r;..  iA1 = i
8760: 41 2f 54 57 4f 50 4f 57 45 52 33 32 3b 0a 20 20  A/TWOPOWER32;.  
8770: 69 41 30 20 3d 20 69 41 20 25 20 54 57 4f 50 4f  iA0 = iA % TWOPO
8780: 57 45 52 33 32 3b 0a 20 20 69 42 31 20 3d 20 69  WER32;.  iB1 = i
8790: 42 2f 54 57 4f 50 4f 57 45 52 33 32 3b 0a 20 20  B/TWOPOWER32;.  
87a0: 69 42 30 20 3d 20 69 42 20 25 20 54 57 4f 50 4f  iB0 = iB % TWOPO
87b0: 57 45 52 33 32 3b 0a 20 20 69 66 28 20 69 41 31  WER32;.  if( iA1
87c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 69  ==0 ){.    if( i
87d0: 42 31 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2a  B1==0 ){.      *
87e0: 70 41 20 2a 3d 20 69 42 3b 0a 20 20 20 20 20 20  pA *= iB;.      
87f0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a  return 0;.    }.
8800: 20 20 20 20 72 20 3d 20 69 41 30 2a 69 42 31 3b      r = iA0*iB1;
8810: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 31  .  }else if( iB1
8820: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 20 3d 20 69  ==0 ){.    r = i
8830: 41 31 2a 69 42 30 3b 0a 20 20 7d 65 6c 73 65 7b  A1*iB0;.  }else{
8840: 0a 20 20 20 20 2f 2a 20 49 66 20 62 6f 74 68 20  .    /* If both 
8850: 69 41 31 20 61 6e 64 20 69 42 31 20 61 72 65 20  iA1 and iB1 are 
8860: 6e 6f 6e 2d 7a 65 72 6f 2c 20 6f 76 65 72 66 6c  non-zero, overfl
8870: 6f 77 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 2a  ow will result *
8880: 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  /.    return 1;.
8890: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
88a0: 72 3d 3d 28 2d 54 57 4f 50 4f 57 45 52 33 31 29  r==(-TWOPOWER31)
88b0: 2d 31 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  -1 );.  testcase
88c0: 28 20 72 3d 3d 28 2d 54 57 4f 50 4f 57 45 52 33  ( r==(-TWOPOWER3
88d0: 31 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  1) );.  testcase
88e0: 28 20 72 3d 3d 54 57 4f 50 4f 57 45 52 33 31 20  ( r==TWOPOWER31 
88f0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
8900: 3d 3d 54 57 4f 50 4f 57 45 52 33 31 2d 31 20 29  ==TWOPOWER31-1 )
8910: 3b 0a 20 20 69 66 28 20 72 3c 28 2d 54 57 4f 50  ;.  if( r<(-TWOP
8920: 4f 57 45 52 33 31 29 20 7c 7c 20 72 3e 3d 54 57  OWER31) || r>=TW
8930: 4f 50 4f 57 45 52 33 31 20 29 20 72 65 74 75 72  OPOWER31 ) retur
8940: 6e 20 31 3b 0a 20 20 72 20 2a 3d 20 54 57 4f 50  n 1;.  r *= TWOP
8950: 4f 57 45 52 33 32 3b 0a 20 20 69 66 28 20 73 71  OWER32;.  if( sq
8960: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 72  lite3AddInt64(&r
8970: 2c 20 69 41 30 2a 69 42 30 29 20 29 20 72 65 74  , iA0*iB0) ) ret
8980: 75 72 6e 20 31 3b 0a 20 20 2a 70 41 20 3d 20 72  urn 1;.  *pA = r
8990: 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ;.  return 0;.}.
89a0: 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  ./*.** Compute t
89b0: 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
89c0: 65 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73 69  e of a 32-bit si
89d0: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 6f 66  gned integer, of
89e0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4f 72 20 0a   possible.  Or .
89f0: 2a 2a 20 69 66 20 74 68 65 20 69 6e 74 65 67 65  ** if the intege
8a00: 72 20 68 61 73 20 61 20 76 61 6c 75 65 20 6f 66  r has a value of
8a10: 20 2d 32 31 34 37 34 38 33 36 34 38 2c 20 72 65   -2147483648, re
8a20: 74 75 72 6e 20 2b 32 31 34 37 34 38 33 36 34 37  turn +2147483647
8a30: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .*/.int sqlite3A
8a40: 62 73 49 6e 74 33 32 28 69 6e 74 20 78 29 7b 0a  bsInt32(int x){.
8a50: 20 20 69 66 28 20 78 3e 3d 30 20 29 20 72 65 74    if( x>=0 ) ret
8a60: 75 72 6e 20 78 3b 0a 20 20 69 66 28 20 78 3d 3d  urn x;.  if( x==
8a70: 28 69 6e 74 29 30 78 38 30 30 30 30 30 30 30 20  (int)0x80000000 
8a80: 29 20 72 65 74 75 72 6e 20 30 78 37 66 66 66 66  ) return 0x7ffff
8a90: 66 66 66 3b 0a 20 20 72 65 74 75 72 6e 20 2d 78  fff;.  return -x
8aa0: 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
8ab0: 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
8ac0: 4d 45 53 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  MES./*.** If SQL
8ad0: 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
8ae0: 41 4d 45 53 20 69 73 20 73 65 74 20 61 74 20 63  AMES is set at c
8af0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 61 6e 64 20  ompile-time and 
8b00: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  if the database.
8b10: 2a 2a 20 66 69 6c 65 6e 61 6d 65 20 69 6e 20 7a  ** filename in z
8b20: 42 61 73 65 46 69 6c 65 6e 61 6d 65 20 69 73 20  BaseFilename is 
8b30: 61 20 55 52 49 20 77 69 74 68 20 74 68 65 20 22  a URI with the "
8b40: 38 5f 33 5f 6e 61 6d 65 73 3d 31 22 20 70 61 72  8_3_names=1" par
8b50: 61 6d 65 74 65 72 20 61 6e 64 0a 2a 2a 20 69 66  ameter and.** if
8b60: 20 66 69 6c 65 6e 61 6d 65 20 69 6e 20 7a 5b 5d   filename in z[]
8b70: 20 68 61 73 20 61 20 73 75 66 66 69 78 20 28 61   has a suffix (a
8b80: 2e 6b 2e 61 2e 20 22 65 78 74 65 6e 73 69 6f 6e  .k.a. "extension
8b90: 22 29 20 74 68 61 74 20 69 73 20 6c 6f 6e 67 65  ") that is longe
8ba0: 72 20 74 68 61 6e 0a 2a 2a 20 74 68 72 65 65 20  r than.** three 
8bb0: 63 68 61 72 61 63 74 65 72 73 2c 20 74 68 65 6e  characters, then
8bc0: 20 73 68 6f 72 74 65 6e 20 74 68 65 20 73 75 66   shorten the suf
8bd0: 66 69 78 20 6f 6e 20 7a 5b 5d 20 74 6f 20 62 65  fix on z[] to be
8be0: 20 74 68 65 20 6c 61 73 74 20 74 68 72 65 65 0a   the last three.
8bf0: 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20 6f 66  ** characters of
8c00: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 75   the original su
8c10: 66 66 69 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  ffix..**.** If S
8c20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
8c30: 5f 4e 41 4d 45 53 20 69 73 20 73 65 74 20 74 6f  _NAMES is set to
8c40: 20 32 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69   2 at compile-ti
8c50: 6d 65 2c 20 74 68 65 6e 20 61 6c 77 61 79 73 0a  me, then always.
8c60: 2a 2a 20 64 6f 20 74 68 65 20 73 75 66 66 69 78  ** do the suffix
8c70: 20 73 68 6f 72 74 65 6e 69 6e 67 20 72 65 67 61   shortening rega
8c80: 72 64 6c 65 73 73 20 6f 66 20 55 52 49 20 70 61  rdless of URI pa
8c90: 72 61 6d 65 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 45  rameter..**.** E
8ca0: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
8cb0: 20 20 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e     test.db-journ
8cc0: 61 6c 20 20 20 20 3d 3e 20 20 20 74 65 73 74 2e  al    =>   test.
8cd0: 6e 61 6c 0a 2a 2a 20 20 20 20 20 74 65 73 74 2e  nal.**     test.
8ce0: 64 62 2d 77 61 6c 20 20 20 20 20 20 20 20 3d 3e  db-wal        =>
8cf0: 20 20 20 74 65 73 74 2e 77 61 6c 0a 2a 2a 20 20     test.wal.**  
8d00: 20 20 20 74 65 73 74 2e 64 62 2d 73 68 6d 20 20     test.db-shm  
8d10: 20 20 20 20 20 20 3d 3e 20 20 20 74 65 73 74 2e        =>   test.
8d20: 73 68 6d 0a 2a 2a 20 20 20 20 20 74 65 73 74 2e  shm.**     test.
8d30: 64 62 2d 6d 6a 37 66 33 33 31 39 66 61 20 3d 3e  db-mj7f3319fa =>
8d40: 20 20 20 74 65 73 74 2e 39 66 61 0a 2a 2f 0a 76     test.9fa.*/.v
8d50: 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
8d60: 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
8d70: 72 20 2a 7a 42 61 73 65 46 69 6c 65 6e 61 6d 65  r *zBaseFilename
8d80: 2c 20 63 68 61 72 20 2a 7a 29 7b 0a 23 69 66 20  , char *z){.#if 
8d90: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
8da0: 33 5f 4e 41 4d 45 53 3c 32 0a 20 20 69 66 28 20  3_NAMES<2.  if( 
8db0: 73 71 6c 69 74 65 33 5f 75 72 69 5f 62 6f 6f 6c  sqlite3_uri_bool
8dc0: 65 61 6e 28 7a 42 61 73 65 46 69 6c 65 6e 61 6d  ean(zBaseFilenam
8dd0: 65 2c 20 22 38 5f 33 5f 6e 61 6d 65 73 22 2c 20  e, "8_3_names", 
8de0: 30 29 20 29 0a 23 65 6e 64 69 66 0a 20 20 7b 0a  0) ).#endif.  {.
8df0: 20 20 20 20 69 6e 74 20 69 2c 20 73 7a 3b 0a 20      int i, sz;. 
8e00: 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 53     sz = sqlite3S
8e10: 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 20 20  trlen30(z);.    
8e20: 66 6f 72 28 69 3d 73 7a 2d 31 3b 20 69 3e 30 20  for(i=sz-1; i>0 
8e30: 26 26 20 7a 5b 69 5d 21 3d 27 2f 27 20 26 26 20  && z[i]!='/' && 
8e40: 7a 5b 69 5d 21 3d 27 2e 27 3b 20 69 2d 2d 29 7b  z[i]!='.'; i--){
8e50: 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d  }.    if( z[i]==
8e60: 27 2e 27 20 26 26 20 41 4c 57 41 59 53 28 73 7a  '.' && ALWAYS(sz
8e70: 3e 69 2b 34 29 20 29 20 6d 65 6d 6d 6f 76 65 28  >i+4) ) memmove(
8e80: 26 7a 5b 69 2b 31 5d 2c 20 26 7a 5b 73 7a 2d 33  &z[i+1], &z[sz-3
8e90: 5d 2c 20 34 29 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  ], 4);.  }.}.#en
8ea0: 64 69 66 0a 0a 2f 2a 20 0a 2a 2a 20 46 69 6e 64  dif../* .** Find
8eb0: 20 28 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65   (an approximate
8ec0: 29 20 73 75 6d 20 6f 66 20 74 77 6f 20 4c 6f 67  ) sum of two Log
8ed0: 45 73 74 20 76 61 6c 75 65 73 2e 20 20 54 68 69  Est values.  Thi
8ee0: 73 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 73  s computation is
8ef0: 0a 2a 2a 20 6e 6f 74 20 61 20 73 69 6d 70 6c 65  .** not a simple
8f00: 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 20 62 65   "+" operator be
8f10: 63 61 75 73 65 20 4c 6f 67 45 73 74 20 69 73 20  cause LogEst is 
8f20: 73 74 6f 72 65 64 20 61 73 20 61 20 6c 6f 67 61  stored as a loga
8f30: 72 69 74 68 6d 69 63 0a 2a 2a 20 76 61 6c 75 65  rithmic.** value
8f40: 2e 0a 2a 2a 20 0a 2a 2f 0a 4c 6f 67 45 73 74 20  ..** .*/.LogEst 
8f50: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
8f60: 28 4c 6f 67 45 73 74 20 61 2c 20 4c 6f 67 45 73  (LogEst a, LogEs
8f70: 74 20 62 29 7b 0a 20 20 73 74 61 74 69 63 20 63  t b){.  static c
8f80: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
8f90: 61 72 20 78 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  ar x[] = {.     
8fa0: 31 30 2c 20 31 30 2c 20 20 20 20 20 20 20 20 20  10, 10,         
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 2f 2a 20 30 2c 31 20 2a 2f 0a 20 20 20 20 20 20  /* 0,1 */.      
8fd0: 39 2c 20 39 2c 20 20 20 20 20 20 20 20 20 20 20  9, 9,           
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8ff0: 2a 20 32 2c 33 20 2a 2f 0a 20 20 20 20 20 20 38  * 2,3 */.      8
9000: 2c 20 38 2c 20 20 20 20 20 20 20 20 20 20 20 20  , 8,            
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9020: 20 34 2c 35 20 2a 2f 0a 20 20 20 20 20 20 37 2c   4,5 */.      7,
9030: 20 37 2c 20 37 2c 20 20 20 20 20 20 20 20 20 20   7, 7,          
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9050: 36 2c 37 2c 38 20 2a 2f 0a 20 20 20 20 20 20 36  6,7,8 */.      6
9060: 2c 20 36 2c 20 36 2c 20 20 20 20 20 20 20 20 20  , 6, 6,         
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9080: 20 39 2c 31 30 2c 31 31 20 2a 2f 0a 20 20 20 20   9,10,11 */.    
9090: 20 20 35 2c 20 35 2c 20 35 2c 20 20 20 20 20 20    5, 5, 5,      
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90b0: 20 2f 2a 20 31 32 2d 31 34 20 2a 2f 0a 20 20 20   /* 12-14 */.   
90c0: 20 20 20 34 2c 20 34 2c 20 34 2c 20 34 2c 20 20     4, 4, 4, 4,  
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 20 20 2f 2a 20 31 35 2d 31 38 20 2a 2f 0a 20 20    /* 15-18 */.  
90f0: 20 20 20 20 33 2c 20 33 2c 20 33 2c 20 33 2c 20      3, 3, 3, 3, 
9100: 33 2c 20 33 2c 20 20 20 20 20 20 20 20 20 20 20  3, 3,           
9110: 20 20 20 2f 2a 20 31 39 2d 32 34 20 2a 2f 0a 20     /* 19-24 */. 
9120: 20 20 20 20 20 32 2c 20 32 2c 20 32 2c 20 32 2c       2, 2, 2, 2,
9130: 20 32 2c 20 32 2c 20 32 2c 20 20 20 20 20 20 20   2, 2, 2,       
9140: 20 20 20 20 2f 2a 20 32 35 2d 33 31 20 2a 2f 0a      /* 25-31 */.
9150: 20 20 7d 3b 0a 20 20 69 66 28 20 61 3e 3d 62 20    };.  if( a>=b 
9160: 29 7b 0a 20 20 20 20 69 66 28 20 61 3e 62 2b 34  ){.    if( a>b+4
9170: 39 20 29 20 72 65 74 75 72 6e 20 61 3b 0a 20 20  9 ) return a;.  
9180: 20 20 69 66 28 20 61 3e 62 2b 33 31 20 29 20 72    if( a>b+31 ) r
9190: 65 74 75 72 6e 20 61 2b 31 3b 0a 20 20 20 20 72  eturn a+1;.    r
91a0: 65 74 75 72 6e 20 61 2b 78 5b 61 2d 62 5d 3b 0a  eturn a+x[a-b];.
91b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
91c0: 20 62 3e 61 2b 34 39 20 29 20 72 65 74 75 72 6e   b>a+49 ) return
91d0: 20 62 3b 0a 20 20 20 20 69 66 28 20 62 3e 61 2b   b;.    if( b>a+
91e0: 33 31 20 29 20 72 65 74 75 72 6e 20 62 2b 31 3b  31 ) return b+1;
91f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 62 2b 78 5b  .    return b+x[
9200: 62 2d 61 5d 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  b-a];.  }.}../*.
9210: 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20 69 6e  ** Convert an in
9220: 74 65 67 65 72 20 69 6e 74 6f 20 61 20 4c 6f 67  teger into a Log
9230: 45 73 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  Est.  In other w
9240: 6f 72 64 73 2c 20 63 6f 6d 70 75 74 65 20 61 6e  ords, compute an
9250: 0a 2a 2a 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  .** approximatio
9260: 6e 20 66 6f 72 20 31 30 2a 6c 6f 67 32 28 78 29  n for 10*log2(x)
9270: 2e 0a 2a 2f 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ..*/.LogEst sqli
9280: 74 65 33 4c 6f 67 45 73 74 28 75 36 34 20 78 29  te3LogEst(u64 x)
9290: 7b 0a 20 20 73 74 61 74 69 63 20 4c 6f 67 45 73  {.  static LogEs
92a0: 74 20 61 5b 5d 20 3d 20 7b 20 30 2c 20 32 2c 20  t a[] = { 0, 2, 
92b0: 33 2c 20 35 2c 20 36 2c 20 37 2c 20 38 2c 20 39  3, 5, 6, 7, 8, 9
92c0: 20 7d 3b 0a 20 20 4c 6f 67 45 73 74 20 79 20 3d   };.  LogEst y =
92d0: 20 34 30 3b 0a 20 20 69 66 28 20 78 3c 38 20 29   40;.  if( x<8 )
92e0: 7b 0a 20 20 20 20 69 66 28 20 78 3c 32 20 29 20  {.    if( x<2 ) 
92f0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68  return 0;.    wh
9300: 69 6c 65 28 20 78 3c 38 20 29 7b 20 20 79 20 2d  ile( x<8 ){  y -
9310: 3d 20 31 30 3b 20 78 20 3c 3c 3d 20 31 3b 20 7d  = 10; x <<= 1; }
9320: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68  .  }else{.    wh
9330: 69 6c 65 28 20 78 3e 32 35 35 20 29 7b 20 79 20  ile( x>255 ){ y 
9340: 2b 3d 20 34 30 3b 20 78 20 3e 3e 3d 20 34 3b 20  += 40; x >>= 4; 
9350: 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 78 3e 31  }.    while( x>1
9360: 35 20 29 7b 20 20 79 20 2b 3d 20 31 30 3b 20 78  5 ){  y += 10; x
9370: 20 3e 3e 3d 20 31 3b 20 7d 0a 20 20 7d 0a 20 20   >>= 1; }.  }.  
9380: 72 65 74 75 72 6e 20 61 5b 78 26 37 5d 20 2b 20  return a[x&7] + 
9390: 79 20 2d 20 31 30 3b 0a 7d 0a 0a 23 69 66 6e 64  y - 10;.}..#ifnd
93a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
93b0: 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 0a 2a  IRTUALTABLE./*.*
93c0: 2a 20 43 6f 6e 76 65 72 74 20 61 20 64 6f 75 62  * Convert a doub
93d0: 6c 65 20 69 6e 74 6f 20 61 20 4c 6f 67 45 73 74  le into a LogEst
93e0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
93f0: 64 73 2c 20 63 6f 6d 70 75 74 65 20 61 6e 20 61  ds, compute an a
9400: 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 66 6f 72  pproximation for
9410: 20 31 30 2a 6c 6f 67 32 28 78 29 2e 0a 2a 2f 0a   10*log2(x)..*/.
9420: 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
9430: 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
9440: 6f 75 62 6c 65 20 78 29 7b 0a 20 20 75 36 34 20  ouble x){.  u64 
9450: 61 3b 0a 20 20 4c 6f 67 45 73 74 20 65 3b 0a 20  a;.  LogEst e;. 
9460: 20 61 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28   assert( sizeof(
9470: 78 29 3d 3d 38 20 26 26 20 73 69 7a 65 6f 66 28  x)==8 && sizeof(
9480: 61 29 3d 3d 38 20 29 3b 0a 20 20 69 66 28 20 78  a)==8 );.  if( x
9490: 3c 3d 31 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=1 ) return 0;.
94a0: 20 20 69 66 28 20 78 3c 3d 32 30 30 30 30 30 30    if( x<=2000000
94b0: 30 30 30 20 29 20 72 65 74 75 72 6e 20 73 71 6c  000 ) return sql
94c0: 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29  ite3LogEst((u64)
94d0: 78 29 3b 0a 20 20 6d 65 6d 63 70 79 28 26 61 2c  x);.  memcpy(&a,
94e0: 20 26 78 2c 20 38 29 3b 0a 20 20 65 20 3d 20 28   &x, 8);.  e = (
94f0: 61 3e 3e 35 32 29 20 2d 20 31 30 32 32 3b 0a 20  a>>52) - 1022;. 
9500: 20 72 65 74 75 72 6e 20 65 2a 31 30 3b 0a 7d 0a   return e*10;.}.
9510: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
9520: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
9530: 4c 45 20 2a 2f 0a 0a 23 69 66 20 64 65 66 69 6e  LE */..#if defin
9540: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
9550: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
9560: 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
9570: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
9580: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29  _STAT3_OR_STAT4)
9590: 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
95a0: 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e  d(SQLITE_EXPLAIN
95b0: 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29  _ESTIMATED_ROWS)
95c0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
95d0: 20 4c 6f 67 45 73 74 20 69 6e 74 6f 20 61 6e 20   LogEst into an 
95e0: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 4e  integer..**.** N
95f0: 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 72 6f  ote that this ro
9600: 75 74 69 6e 65 20 69 73 20 6f 6e 6c 79 20 75 73  utine is only us
9610: 65 64 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20 6d  ed when one or m
9620: 6f 72 65 20 6f 66 20 76 61 72 69 6f 75 73 0a 2a  ore of various.*
9630: 2a 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  * non-standard c
9640: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9650: 6f 6e 73 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ons is enabled..
9660: 2a 2f 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  */.u64 sqlite3Lo
9670: 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
9680: 20 78 29 7b 0a 20 20 75 36 34 20 6e 3b 0a 20 20   x){.  u64 n;.  
9690: 69 66 28 20 78 3c 31 30 20 29 20 72 65 74 75 72  if( x<10 ) retur
96a0: 6e 20 31 3b 0a 20 20 6e 20 3d 20 78 25 31 30 3b  n 1;.  n = x%10;
96b0: 0a 20 20 78 20 2f 3d 20 31 30 3b 0a 20 20 69 66  .  x /= 10;.  if
96c0: 28 20 6e 3e 3d 35 20 29 20 6e 20 2d 3d 20 32 3b  ( n>=5 ) n -= 2;
96d0: 0a 20 20 65 6c 73 65 20 69 66 28 20 6e 3e 3d 31  .  else if( n>=1
96e0: 20 29 20 6e 20 2d 3d 20 31 3b 0a 23 69 66 20 64   ) n -= 1;.#if d
96f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
9700: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
9710: 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64  ATUS) || \.    d
9720: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58  efined(SQLITE_EX
9730: 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f  PLAIN_ESTIMATED_
9740: 52 4f 57 53 29 0a 20 20 69 66 28 20 78 3e 36 30  ROWS).  if( x>60
9750: 20 29 20 72 65 74 75 72 6e 20 28 75 36 34 29 4c   ) return (u64)L
9760: 41 52 47 45 53 54 5f 49 4e 54 36 34 3b 0a 23 65  ARGEST_INT64;.#e
9770: 6c 73 65 0a 20 20 2f 2a 20 49 66 20 6f 6e 6c 79  lse.  /* If only
9780: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
9790: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 69 73  TAT3_OR_STAT4 is
97a0: 20 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 6c 61   on, then the la
97b0: 72 67 65 73 74 20 69 6e 70 75 74 0a 20 20 2a 2a  rgest input.  **
97c0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 74 68 69   possible to thi
97d0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 33 31 30  s routine is 310
97e0: 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
97f0: 20 6d 61 78 69 6d 75 6d 20 78 20 6f 66 20 33 31   maximum x of 31
9800: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 78 3c   */.  assert( x<
9810: 3d 36 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  =60 );.#endif.  
9820: 72 65 74 75 72 6e 20 78 3e 3d 33 20 3f 20 28 6e  return x>=3 ? (n
9830: 2b 38 29 3c 3c 28 78 2d 33 29 20 3a 20 28 6e 2b  +8)<<(x-3) : (n+
9840: 38 29 3e 3e 28 33 2d 78 29 3b 0a 7d 0a 23 65 6e  8)>>(3-x);.}.#en
9850: 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 20 53  dif /* defined S
9860: 43 41 4e 53 54 41 54 20 6f 72 20 53 54 41 54 34  CANSTAT or STAT4
9870: 20 6f 72 20 45 53 54 49 4d 41 54 45 44 5f 52 4f   or ESTIMATED_RO
9880: 57 53 20 2a 2f 0a                                WS */.