/ Hex Artifact Content
Login

Artifact 8ae5e894687fb90cb22a870284eb4a8d077f4f93:


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 76 6f 69 64 20 73 71 6c 69  c"..*/.void sqli
1f30: 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 20  te3Dequote(char 
1f40: 2a 7a 29 7b 0a 20 20 63 68 61 72 20 71 75 6f 74  *z){.  char quot
1f50: 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  e;.  int i, j;. 
1f60: 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75   if( z==0 ) retu
1f70: 72 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a 5b  rn;.  quote = z[
1f80: 30 5d 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  0];.  if( !sqlit
1f90: 65 33 49 73 71 75 6f 74 65 28 71 75 6f 74 65 29  e3Isquote(quote)
1fa0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
1fb0: 20 71 75 6f 74 65 3d 3d 27 5b 27 20 29 20 71 75   quote=='[' ) qu
1fc0: 6f 74 65 20 3d 20 27 5d 27 3b 0a 20 20 66 6f 72  ote = ']';.  for
1fd0: 28 69 3d 31 2c 20 6a 3d 30 3b 3b 20 69 2b 2b 29  (i=1, j=0;; i++)
1fe0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 5b  {.    assert( z[
1ff0: 69 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 5b  i] );.    if( z[
2000: 69 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20  i]==quote ){.   
2010: 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3d 3d 71     if( z[i+1]==q
2020: 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20  uote ){.        
2030: 7a 5b 6a 2b 2b 5d 20 3d 20 71 75 6f 74 65 3b 0a  z[j++] = quote;.
2040: 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
2050: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2060: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
2070: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2080: 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b    z[j++] = z[i];
2090: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 5b 6a  .    }.  }.  z[j
20a0: 5d 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ] = 0;.}../*.** 
20b0: 47 65 6e 65 72 61 74 65 20 61 20 54 6f 6b 65 6e  Generate a Token
20c0: 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 61 20 73   object from a s
20d0: 74 72 69 6e 67 0a 2a 2f 0a 76 6f 69 64 20 73 71  tring.*/.void sq
20e0: 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
20f0: 6f 6b 65 6e 20 2a 70 2c 20 63 68 61 72 20 2a 7a  oken *p, char *z
2100: 29 7b 0a 20 20 70 2d 3e 7a 20 3d 20 7a 3b 0a 20  ){.  p->z = z;. 
2110: 20 70 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53   p->n = sqlite3S
2120: 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 7d 0a 0a 2f  trlen30(z);.}../
2130: 2a 20 43 6f 6e 76 65 6e 69 65 6e 74 20 73 68 6f  * Convenient sho
2140: 72 74 2d 68 61 6e 64 20 2a 2f 0a 23 64 65 66 69  rt-hand */.#defi
2150: 6e 65 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 20  ne UpperToLower 
2160: 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2170: 77 65 72 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  wer../*.** Some 
2180: 73 79 73 74 65 6d 73 20 68 61 76 65 20 73 74 72  systems have str
2190: 69 63 6d 70 28 29 2e 20 20 4f 74 68 65 72 73 20  icmp().  Others 
21a0: 68 61 76 65 20 73 74 72 63 61 73 65 63 6d 70 28  have strcasecmp(
21b0: 29 2e 20 20 42 65 63 61 75 73 65 0a 2a 2a 20 74  ).  Because.** t
21c0: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 69  here is no consi
21d0: 73 74 65 6e 63 79 2c 20 77 65 20 77 69 6c 6c 20  stency, we will 
21e0: 64 65 66 69 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a  define our own..
21f0: 2a 2a 0a 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  **.** IMPLEMENTA
2200: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 30 32 34 33  TION-OF: R-30243
2210: 2d 30 32 34 39 34 20 54 68 65 20 73 71 6c 69 74  -02494 The sqlit
2220: 65 33 5f 73 74 72 69 63 6d 70 28 29 20 61 6e 64  e3_stricmp() and
2230: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  .** sqlite3_strn
2240: 69 63 6d 70 28 29 20 41 50 49 73 20 61 6c 6c 6f  icmp() APIs allo
2250: 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 61  w applications a
2260: 6e 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 74 6f  nd extensions to
2270: 20 63 6f 6d 70 61 72 65 0a 2a 2a 20 74 68 65 20   compare.** the 
2280: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 77 6f 20  contents of two 
2290: 62 75 66 66 65 72 73 20 63 6f 6e 74 61 69 6e 69  buffers containi
22a0: 6e 67 20 55 54 46 2d 38 20 73 74 72 69 6e 67 73  ng UTF-8 strings
22b0: 20 69 6e 20 61 0a 2a 2a 20 63 61 73 65 2d 69 6e   in a.** case-in
22c0: 64 65 70 65 6e 64 65 6e 74 20 66 61 73 68 69 6f  dependent fashio
22d0: 6e 2c 20 75 73 69 6e 67 20 74 68 65 20 73 61 6d  n, using the sam
22e0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
22f0: 22 63 61 73 65 0a 2a 2a 20 69 6e 64 65 70 65 6e  "case.** indepen
2300: 64 65 6e 63 65 22 20 74 68 61 74 20 53 51 4c 69  dence" that SQLi
2310: 74 65 20 75 73 65 73 20 69 6e 74 65 72 6e 61 6c  te uses internal
2320: 6c 79 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ly when comparin
2330: 67 20 69 64 65 6e 74 69 66 69 65 72 73 2e 0a 2a  g identifiers..*
2340: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74  /.int sqlite3_st
2350: 72 69 63 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  ricmp(const char
2360: 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63   *zLeft, const c
2370: 68 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20  har *zRight){.  
2380: 69 66 28 20 7a 4c 65 66 74 3d 3d 30 20 29 7b 0a  if( zLeft==0 ){.
2390: 20 20 20 20 72 65 74 75 72 6e 20 7a 52 69 67 68      return zRigh
23a0: 74 20 3f 20 2d 31 20 3a 20 30 3b 0a 20 20 7d 65  t ? -1 : 0;.  }e
23b0: 6c 73 65 20 69 66 28 20 7a 52 69 67 68 74 3d 3d  lse if( zRight==
23c0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
23d0: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
23e0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
23f0: 4c 65 66 74 2c 20 7a 52 69 67 68 74 29 3b 0a 7d  Left, zRight);.}
2400: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
2410: 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Cmp(const char *
2420: 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61  zLeft, const cha
2430: 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 75 6e  r *zRight){.  un
2440: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20  signed char *a, 
2450: 2a 62 3b 0a 20 20 69 6e 74 20 63 3b 0a 20 20 61  *b;.  int c;.  a
2460: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
2470: 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d  r *)zLeft;.  b =
2480: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
2490: 2a 29 7a 52 69 67 68 74 3b 0a 20 20 66 6f 72 28  *)zRight;.  for(
24a0: 3b 3b 29 7b 0a 20 20 20 20 63 20 3d 20 28 69 6e  ;;){.    c = (in
24b0: 74 29 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  t)UpperToLower[*
24c0: 61 5d 20 2d 20 28 69 6e 74 29 55 70 70 65 72 54  a] - (int)UpperT
24d0: 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 20 20 20 20  oLower[*b];.    
24e0: 69 66 28 20 63 20 7c 7c 20 2a 61 3d 3d 30 20 29  if( c || *a==0 )
24f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 61 2b 2b 3b   break;.    a++;
2500: 0a 20 20 20 20 62 2b 2b 3b 0a 20 20 7d 0a 20 20  .    b++;.  }.  
2510: 72 65 74 75 72 6e 20 63 3b 0a 7d 0a 69 6e 74 20  return c;.}.int 
2520: 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
2530: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65  (const char *zLe
2540: 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ft, const char *
2550: 7a 52 69 67 68 74 2c 20 69 6e 74 20 4e 29 7b 0a  zRight, int N){.
2560: 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69 67    register unsig
2570: 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b  ned char *a, *b;
2580: 0a 20 20 69 66 28 20 7a 4c 65 66 74 3d 3d 30 20  .  if( zLeft==0 
2590: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 52  ){.    return zR
25a0: 69 67 68 74 20 3f 20 2d 31 20 3a 20 30 3b 0a 20  ight ? -1 : 0;. 
25b0: 20 7d 65 6c 73 65 20 69 66 28 20 7a 52 69 67 68   }else if( zRigh
25c0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  t==0 ){.    retu
25d0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 61 20 3d 20  rn 1;.  }.  a = 
25e0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
25f0: 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28 75  )zLeft;.  b = (u
2600: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a  nsigned char *)z
2610: 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28 20  Right;.  while( 
2620: 4e 2d 2d 20 3e 20 30 20 26 26 20 2a 61 21 3d 30  N-- > 0 && *a!=0
2630: 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72   && UpperToLower
2640: 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77  [*a]==UpperToLow
2650: 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b  er[*b]){ a++; b+
2660: 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3c  +; }.  return N<
2670: 30 20 3f 20 30 20 3a 20 55 70 70 65 72 54 6f 4c  0 ? 0 : UpperToL
2680: 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72  ower[*a] - Upper
2690: 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 0a  ToLower[*b];.}..
26a0: 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  /*.** The string
26b0: 20 7a 5b 5d 20 69 73 20 61 6e 20 74 65 78 74 20   z[] is an text 
26c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
26d0: 66 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2e  f a real number.
26e0: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 69 73  .** Convert this
26f0: 20 73 74 72 69 6e 67 20 74 6f 20 61 20 64 6f 75   string to a dou
2700: 62 6c 65 20 61 6e 64 20 77 72 69 74 65 20 69 74  ble and write it
2710: 20 69 6e 74 6f 20 2a 70 52 65 73 75 6c 74 2e 0a   into *pResult..
2720: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
2730: 20 7a 5b 5d 20 69 73 20 6c 65 6e 67 74 68 20 62   z[] is length b
2740: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 28  ytes in length (
2750: 62 79 74 65 73 2c 20 6e 6f 74 20 63 68 61 72 61  bytes, not chara
2760: 63 74 65 72 73 29 20 61 6e 64 0a 2a 2a 20 75 73  cters) and.** us
2770: 65 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  es the encoding 
2780: 65 6e 63 2e 20 20 54 68 65 20 73 74 72 69 6e 67  enc.  The string
2790: 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   is not necessar
27a0: 69 6c 79 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61  ily zero-termina
27b0: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  ted..**.** Retur
27c0: 6e 20 54 52 55 45 20 69 66 20 74 68 65 20 72 65  n TRUE if the re
27d0: 73 75 6c 74 20 69 73 20 61 20 76 61 6c 69 64 20  sult is a valid 
27e0: 72 65 61 6c 20 6e 75 6d 62 65 72 20 28 6f 72 20  real number (or 
27f0: 69 6e 74 65 67 65 72 29 20 61 6e 64 20 46 41 4c  integer) and FAL
2800: 53 45 0a 2a 2a 20 69 66 20 74 68 65 20 73 74 72  SE.** if the str
2810: 69 6e 67 20 69 73 20 65 6d 70 74 79 20 6f 72 20  ing is empty or 
2820: 63 6f 6e 74 61 69 6e 73 20 65 78 74 72 61 6e 65  contains extrane
2830: 6f 75 73 20 74 65 78 74 2e 20 20 56 61 6c 69 64  ous text.  Valid
2840: 20 6e 75 6d 62 65 72 73 0a 2a 2a 20 61 72 65 20   numbers.** are 
2850: 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20  in one of these 
2860: 66 6f 72 6d 61 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  formats:.**.**  
2870: 20 20 5b 2b 2d 5d 64 69 67 69 74 73 5b 45 5b 2b    [+-]digits[E[+
2880: 2d 5d 64 69 67 69 74 73 5d 0a 2a 2a 20 20 20 20  -]digits].**    
2890: 5b 2b 2d 5d 64 69 67 69 74 73 2e 5b 64 69 67 69  [+-]digits.[digi
28a0: 74 73 5d 5b 45 5b 2b 2d 5d 64 69 67 69 74 73 5d  ts][E[+-]digits]
28b0: 0a 2a 2a 20 20 20 20 5b 2b 2d 5d 2e 64 69 67 69  .**    [+-].digi
28c0: 74 73 5b 45 5b 2b 2d 5d 64 69 67 69 74 73 5d 0a  ts[E[+-]digits].
28d0: 2a 2a 0a 2a 2a 20 4c 65 61 64 69 6e 67 20 61 6e  **.** Leading an
28e0: 64 20 74 72 61 69 6c 69 6e 67 20 77 68 69 74 65  d trailing white
28f0: 73 70 61 63 65 20 69 73 20 69 67 6e 6f 72 65 64  space is ignored
2900: 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
2910: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a   of determining.
2920: 2a 2a 20 76 61 6c 69 64 69 74 79 2e 0a 2a 2a 0a  ** validity..**.
2930: 2a 2a 20 49 66 20 73 6f 6d 65 20 70 72 65 66 69  ** If some prefi
2940: 78 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 73  x of the input s
2950: 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64  tring is a valid
2960: 20 6e 75 6d 62 65 72 2c 20 74 68 69 73 20 72 6f   number, this ro
2970: 75 74 69 6e 65 0a 2a 2a 20 72 65 74 75 72 6e 73  utine.** returns
2980: 20 46 41 4c 53 45 20 62 75 74 20 69 74 20 73 74   FALSE but it st
2990: 69 6c 6c 20 63 6f 6e 76 65 72 74 73 20 74 68 65  ill converts the
29a0: 20 70 72 65 66 69 78 20 61 6e 64 20 77 72 69 74   prefix and writ
29b0: 65 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  es the result.**
29c0: 20 69 6e 74 6f 20 2a 70 52 65 73 75 6c 74 2e 0a   into *pResult..
29d0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  */.int sqlite3At
29e0: 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
29f0: 2c 20 64 6f 75 62 6c 65 20 2a 70 52 65 73 75 6c  , double *pResul
2a00: 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 2c 20 75  t, int length, u
2a10: 38 20 65 6e 63 29 7b 0a 23 69 66 6e 64 65 66 20  8 enc){.#ifndef 
2a20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
2a30: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
2a40: 20 69 6e 63 72 3b 0a 20 20 63 6f 6e 73 74 20 63   incr;.  const c
2a50: 68 61 72 20 2a 7a 45 6e 64 20 3d 20 7a 20 2b 20  har *zEnd = z + 
2a60: 6c 65 6e 67 74 68 3b 0a 20 20 2f 2a 20 73 69 67  length;.  /* sig
2a70: 6e 20 2a 20 73 69 67 6e 69 66 69 63 61 6e 64 20  n * significand 
2a80: 2a 20 28 31 30 20 5e 20 28 65 73 69 67 6e 20 2a  * (10 ^ (esign *
2a90: 20 65 78 70 6f 6e 65 6e 74 29 29 20 2a 2f 0a 20   exponent)) */. 
2aa0: 20 69 6e 74 20 73 69 67 6e 20 3d 20 31 3b 20 20   int sign = 1;  
2ab0: 20 20 2f 2a 20 73 69 67 6e 20 6f 66 20 73 69 67    /* sign of sig
2ac0: 6e 69 66 69 63 61 6e 64 20 2a 2f 0a 20 20 69 36  nificand */.  i6
2ad0: 34 20 73 20 3d 20 30 3b 20 20 20 20 20 20 20 2f  4 s = 0;       /
2ae0: 2a 20 73 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f  * significand */
2af0: 0a 20 20 69 6e 74 20 64 20 3d 20 30 3b 20 20 20  .  int d = 0;   
2b00: 20 20 20 20 2f 2a 20 61 64 6a 75 73 74 20 65 78      /* adjust ex
2b10: 70 6f 6e 65 6e 74 20 66 6f 72 20 73 68 69 66 74  ponent for shift
2b20: 69 6e 67 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  ing decimal poin
2b30: 74 20 2a 2f 0a 20 20 69 6e 74 20 65 73 69 67 6e  t */.  int esign
2b40: 20 3d 20 31 3b 20 20 20 2f 2a 20 73 69 67 6e 20   = 1;   /* sign 
2b50: 6f 66 20 65 78 70 6f 6e 65 6e 74 20 2a 2f 0a 20  of exponent */. 
2b60: 20 69 6e 74 20 65 20 3d 20 30 3b 20 20 20 20 20   int e = 0;     
2b70: 20 20 2f 2a 20 65 78 70 6f 6e 65 6e 74 20 2a 2f    /* exponent */
2b80: 0a 20 20 69 6e 74 20 65 56 61 6c 69 64 20 3d 20  .  int eValid = 
2b90: 31 3b 20 20 2f 2a 20 54 72 75 65 20 65 78 70 6f  1;  /* True expo
2ba0: 6e 65 6e 74 20 69 73 20 65 69 74 68 65 72 20 6e  nent is either n
2bb0: 6f 74 20 75 73 65 64 20 6f 72 20 69 73 20 77 65  ot used or is we
2bc0: 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 64  ll-formed */.  d
2bd0: 6f 75 62 6c 65 20 72 65 73 75 6c 74 3b 0a 20 20  ouble result;.  
2be0: 69 6e 74 20 6e 44 69 67 69 74 73 20 3d 20 30 3b  int nDigits = 0;
2bf0: 0a 20 20 69 6e 74 20 6e 6f 6e 4e 75 6d 20 3d 20  .  int nonNum = 
2c00: 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 65 6e  0;..  assert( en
2c10: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 7c  c==SQLITE_UTF8 |
2c20: 7c 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  | enc==SQLITE_UT
2c30: 46 31 36 4c 45 20 7c 7c 20 65 6e 63 3d 3d 53 51  F16LE || enc==SQ
2c40: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
2c50: 20 20 2a 70 52 65 73 75 6c 74 20 3d 20 30 2e 30    *pResult = 0.0
2c60: 3b 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 72  ;   /* Default r
2c70: 65 74 75 72 6e 20 76 61 6c 75 65 2c 20 69 6e 20  eturn value, in 
2c80: 63 61 73 65 20 6f 66 20 61 6e 20 65 72 72 6f 72  case of an error
2c90: 20 2a 2f 0a 0a 20 20 69 66 28 20 65 6e 63 3d 3d   */..  if( enc==
2ca0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
2cb0: 20 20 20 69 6e 63 72 20 3d 20 31 3b 0a 20 20 7d     incr = 1;.  }
2cc0: 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69 3b  else{.    int i;
2cd0: 0a 20 20 20 20 69 6e 63 72 20 3d 20 32 3b 0a 20  .    incr = 2;. 
2ce0: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
2cf0: 45 5f 55 54 46 31 36 4c 45 3d 3d 32 20 26 26 20  E_UTF16LE==2 && 
2d00: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3d 3d  SQLITE_UTF16BE==
2d10: 33 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 33  3 );.    for(i=3
2d20: 2d 65 6e 63 3b 20 69 3c 6c 65 6e 67 74 68 20 26  -enc; i<length &
2d30: 26 20 7a 5b 69 5d 3d 3d 30 3b 20 69 2b 3d 32 29  & z[i]==0; i+=2)
2d40: 7b 7d 0a 20 20 20 20 6e 6f 6e 4e 75 6d 20 3d 20  {}.    nonNum = 
2d50: 69 3c 6c 65 6e 67 74 68 3b 0a 20 20 20 20 7a 45  i<length;.    zE
2d60: 6e 64 20 3d 20 7a 2b 69 2b 65 6e 63 2d 33 3b 0a  nd = z+i+enc-3;.
2d70: 20 20 20 20 7a 20 2b 3d 20 28 65 6e 63 26 31 29      z += (enc&1)
2d80: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 73 6b 69 70  ;.  }..  /* skip
2d90: 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
2da0: 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 3c 7a 45  */.  while( z<zE
2db0: 6e 64 20 26 26 20 73 71 6c 69 74 65 33 49 73 73  nd && sqlite3Iss
2dc0: 70 61 63 65 28 2a 7a 29 20 29 20 7a 2b 3d 69 6e  pace(*z) ) z+=in
2dd0: 63 72 3b 0a 20 20 69 66 28 20 7a 3e 3d 7a 45 6e  cr;.  if( z>=zEn
2de0: 64 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20  d ) return 0;.. 
2df0: 20 2f 2a 20 67 65 74 20 73 69 67 6e 20 6f 66 20   /* get sign of 
2e00: 73 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f 0a 20  significand */. 
2e10: 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a   if( *z=='-' ){.
2e20: 20 20 20 20 73 69 67 6e 20 3d 20 2d 31 3b 0a 20      sign = -1;. 
2e30: 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 7d 65     z+=incr;.  }e
2e40: 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20  lse if( *z=='+' 
2e50: 29 7b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a  ){.    z+=incr;.
2e60: 20 20 7d 0a 0a 20 20 2f 2a 20 63 6f 70 79 20 6d    }..  /* copy m
2e70: 61 78 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64  ax significant d
2e80: 69 67 69 74 73 20 74 6f 20 73 69 67 6e 69 66 69  igits to signifi
2e90: 63 61 6e 64 20 2a 2f 0a 20 20 77 68 69 6c 65 28  cand */.  while(
2ea0: 20 7a 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69 74   z<zEnd && sqlit
2eb0: 65 33 49 73 64 69 67 69 74 28 2a 7a 29 20 26 26  e3Isdigit(*z) &&
2ec0: 20 73 3c 28 28 4c 41 52 47 45 53 54 5f 49 4e 54   s<((LARGEST_INT
2ed0: 36 34 2d 39 29 2f 31 30 29 20 29 7b 0a 20 20 20  64-9)/10) ){.   
2ee0: 20 73 20 3d 20 73 2a 31 30 20 2b 20 28 2a 7a 20   s = s*10 + (*z 
2ef0: 2d 20 27 30 27 29 3b 0a 20 20 20 20 7a 2b 3d 69  - '0');.    z+=i
2f00: 6e 63 72 2c 20 6e 44 69 67 69 74 73 2b 2b 3b 0a  ncr, nDigits++;.
2f10: 20 20 7d 0a 0a 20 20 2f 2a 20 73 6b 69 70 20 6e    }..  /* skip n
2f20: 6f 6e 2d 73 69 67 6e 69 66 69 63 61 6e 74 20 73  on-significant s
2f30: 69 67 6e 69 66 69 63 61 6e 64 20 64 69 67 69 74  ignificand digit
2f40: 73 0a 20 20 2a 2a 20 28 69 6e 63 72 65 61 73 65  s.  ** (increase
2f50: 20 65 78 70 6f 6e 65 6e 74 20 62 79 20 64 20 74   exponent by d t
2f60: 6f 20 73 68 69 66 74 20 64 65 63 69 6d 61 6c 20  o shift decimal 
2f70: 6c 65 66 74 29 20 2a 2f 0a 20 20 77 68 69 6c 65  left) */.  while
2f80: 28 20 7a 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69  ( z<zEnd && sqli
2f90: 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29 20 29  te3Isdigit(*z) )
2fa0: 20 7a 2b 3d 69 6e 63 72 2c 20 6e 44 69 67 69 74   z+=incr, nDigit
2fb0: 73 2b 2b 2c 20 64 2b 2b 3b 0a 20 20 69 66 28 20  s++, d++;.  if( 
2fc0: 7a 3e 3d 7a 45 6e 64 20 29 20 67 6f 74 6f 20 64  z>=zEnd ) goto d
2fd0: 6f 5f 61 74 6f 66 5f 63 61 6c 63 3b 0a 0a 20 20  o_atof_calc;..  
2fe0: 2f 2a 20 69 66 20 64 65 63 69 6d 61 6c 20 70 6f  /* if decimal po
2ff0: 69 6e 74 20 69 73 20 70 72 65 73 65 6e 74 20 2a  int is present *
3000: 2f 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20  /.  if( *z=='.' 
3010: 29 7b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a  ){.    z+=incr;.
3020: 20 20 20 20 2f 2a 20 63 6f 70 79 20 64 69 67 69      /* copy digi
3030: 74 73 20 66 72 6f 6d 20 61 66 74 65 72 20 64 65  ts from after de
3040: 63 69 6d 61 6c 20 74 6f 20 73 69 67 6e 69 66 69  cimal to signifi
3050: 63 61 6e 64 0a 20 20 20 20 2a 2a 20 28 64 65 63  cand.    ** (dec
3060: 72 65 61 73 65 20 65 78 70 6f 6e 65 6e 74 20 62  rease exponent b
3070: 79 20 64 20 74 6f 20 73 68 69 66 74 20 64 65 63  y d to shift dec
3080: 69 6d 61 6c 20 72 69 67 68 74 29 20 2a 2f 0a 20  imal right) */. 
3090: 20 20 20 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64     while( z<zEnd
30a0: 20 26 26 20 73 71 6c 69 74 65 33 49 73 64 69 67   && sqlite3Isdig
30b0: 69 74 28 2a 7a 29 20 26 26 20 73 3c 28 28 4c 41  it(*z) && s<((LA
30c0: 52 47 45 53 54 5f 49 4e 54 36 34 2d 39 29 2f 31  RGEST_INT64-9)/1
30d0: 30 29 20 29 7b 0a 20 20 20 20 20 20 73 20 3d 20  0) ){.      s = 
30e0: 73 2a 31 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27  s*10 + (*z - '0'
30f0: 29 3b 0a 20 20 20 20 20 20 7a 2b 3d 69 6e 63 72  );.      z+=incr
3100: 2c 20 6e 44 69 67 69 74 73 2b 2b 2c 20 64 2d 2d  , nDigits++, d--
3110: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 73  ;.    }.    /* s
3120: 6b 69 70 20 6e 6f 6e 2d 73 69 67 6e 69 66 69 63  kip non-signific
3130: 61 6e 74 20 64 69 67 69 74 73 20 2a 2f 0a 20 20  ant digits */.  
3140: 20 20 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64 20    while( z<zEnd 
3150: 26 26 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  && sqlite3Isdigi
3160: 74 28 2a 7a 29 20 29 20 7a 2b 3d 69 6e 63 72 2c  t(*z) ) z+=incr,
3170: 20 6e 44 69 67 69 74 73 2b 2b 3b 0a 20 20 7d 0a   nDigits++;.  }.
3180: 20 20 69 66 28 20 7a 3e 3d 7a 45 6e 64 20 29 20    if( z>=zEnd ) 
3190: 67 6f 74 6f 20 64 6f 5f 61 74 6f 66 5f 63 61 6c  goto do_atof_cal
31a0: 63 3b 0a 0a 20 20 2f 2a 20 69 66 20 65 78 70 6f  c;..  /* if expo
31b0: 6e 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 20  nent is present 
31c0: 2a 2f 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27  */.  if( *z=='e'
31d0: 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20   || *z=='E' ){. 
31e0: 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 20 20     z+=incr;.    
31f0: 65 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  eValid = 0;.    
3200: 69 66 28 20 7a 3e 3d 7a 45 6e 64 20 29 20 67 6f  if( z>=zEnd ) go
3210: 74 6f 20 64 6f 5f 61 74 6f 66 5f 63 61 6c 63 3b  to do_atof_calc;
3220: 0a 20 20 20 20 2f 2a 20 67 65 74 20 73 69 67 6e  .    /* get sign
3230: 20 6f 66 20 65 78 70 6f 6e 65 6e 74 20 2a 2f 0a   of exponent */.
3240: 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20      if( *z=='-' 
3250: 29 7b 0a 20 20 20 20 20 20 65 73 69 67 6e 20 3d  ){.      esign =
3260: 20 2d 31 3b 0a 20 20 20 20 20 20 7a 2b 3d 69 6e   -1;.      z+=in
3270: 63 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  cr;.    }else if
3280: 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  ( *z=='+' ){.   
3290: 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 20 20     z+=incr;.    
32a0: 7d 0a 20 20 20 20 2f 2a 20 63 6f 70 79 20 64 69  }.    /* copy di
32b0: 67 69 74 73 20 74 6f 20 65 78 70 6f 6e 65 6e 74  gits to exponent
32c0: 20 2a 2f 0a 20 20 20 20 77 68 69 6c 65 28 20 7a   */.    while( z
32d0: 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69 74 65 33  <zEnd && sqlite3
32e0: 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20  Isdigit(*z) ){. 
32f0: 20 20 20 20 20 65 20 3d 20 65 3c 31 30 30 30 30       e = e<10000
3300: 20 3f 20 28 65 2a 31 30 20 2b 20 28 2a 7a 20 2d   ? (e*10 + (*z -
3310: 20 27 30 27 29 29 20 3a 20 31 30 30 30 30 3b 0a   '0')) : 10000;.
3320: 20 20 20 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a 20        z+=incr;. 
3330: 20 20 20 20 20 65 56 61 6c 69 64 20 3d 20 31 3b       eValid = 1;
3340: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
3350: 20 73 6b 69 70 20 74 72 61 69 6c 69 6e 67 20 73   skip trailing s
3360: 70 61 63 65 73 20 2a 2f 0a 20 20 69 66 28 20 6e  paces */.  if( n
3370: 44 69 67 69 74 73 20 26 26 20 65 56 61 6c 69 64  Digits && eValid
3380: 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 7a   ){.    while( z
3390: 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69 74 65 33  <zEnd && sqlite3
33a0: 49 73 73 70 61 63 65 28 2a 7a 29 20 29 20 7a 2b  Isspace(*z) ) z+
33b0: 3d 69 6e 63 72 3b 0a 20 20 7d 0a 0a 64 6f 5f 61  =incr;.  }..do_a
33c0: 74 6f 66 5f 63 61 6c 63 3a 0a 20 20 2f 2a 20 61  tof_calc:.  /* a
33d0: 64 6a 75 73 74 20 65 78 70 6f 6e 65 6e 74 20 62  djust exponent b
33e0: 79 20 64 2c 20 61 6e 64 20 75 70 64 61 74 65 20  y d, and update 
33f0: 73 69 67 6e 20 2a 2f 0a 20 20 65 20 3d 20 28 65  sign */.  e = (e
3400: 2a 65 73 69 67 6e 29 20 2b 20 64 3b 0a 20 20 69  *esign) + d;.  i
3410: 66 28 20 65 3c 30 20 29 20 7b 0a 20 20 20 20 65  f( e<0 ) {.    e
3420: 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 65  sign = -1;.    e
3430: 20 2a 3d 20 2d 31 3b 0a 20 20 7d 20 65 6c 73 65   *= -1;.  } else
3440: 20 7b 0a 20 20 20 20 65 73 69 67 6e 20 3d 20 31   {.    esign = 1
3450: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 69 66 20 30  ;.  }..  /* if 0
3460: 20 73 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f 0a   significand */.
3470: 20 20 69 66 28 20 21 73 20 29 20 7b 0a 20 20 20    if( !s ) {.   
3480: 20 2f 2a 20 49 6e 20 74 68 65 20 49 45 45 45 20   /* In the IEEE 
3490: 37 35 34 20 73 74 61 6e 64 61 72 64 2c 20 7a 65  754 standard, ze
34a0: 72 6f 20 69 73 20 73 69 67 6e 65 64 2e 0a 20 20  ro is signed..  
34b0: 20 20 2a 2a 20 41 64 64 20 74 68 65 20 73 69 67    ** Add the sig
34c0: 6e 20 69 66 20 77 65 27 76 65 20 73 65 65 6e 20  n if we've seen 
34d0: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 64 69 67  at least one dig
34e0: 69 74 20 2a 2f 0a 20 20 20 20 72 65 73 75 6c 74  it */.    result
34f0: 20 3d 20 28 73 69 67 6e 3c 30 20 26 26 20 6e 44   = (sign<0 && nD
3500: 69 67 69 74 73 29 20 3f 20 2d 28 64 6f 75 62 6c  igits) ? -(doubl
3510: 65 29 30 20 3a 20 28 64 6f 75 62 6c 65 29 30 3b  e)0 : (double)0;
3520: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
3530: 2f 2a 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  /* attempt to re
3540: 64 75 63 65 20 65 78 70 6f 6e 65 6e 74 20 2a 2f  duce exponent */
3550: 0a 20 20 20 20 69 66 28 20 65 73 69 67 6e 3e 30  .    if( esign>0
3560: 20 29 7b 0a 20 20 20 20 20 20 77 68 69 6c 65 28   ){.      while(
3570: 20 73 3c 28 4c 41 52 47 45 53 54 5f 49 4e 54 36   s<(LARGEST_INT6
3580: 34 2f 31 30 29 20 26 26 20 65 3e 30 20 29 20 65  4/10) && e>0 ) e
3590: 2d 2d 2c 73 2a 3d 31 30 3b 0a 20 20 20 20 7d 65  --,s*=10;.    }e
35a0: 6c 73 65 7b 0a 20 20 20 20 20 20 77 68 69 6c 65  lse{.      while
35b0: 28 20 21 28 73 25 31 30 29 20 26 26 20 65 3e 30  ( !(s%10) && e>0
35c0: 20 29 20 65 2d 2d 2c 73 2f 3d 31 30 3b 0a 20 20   ) e--,s/=10;.  
35d0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 61 64 6a 75    }..    /* adju
35e0: 73 74 20 74 68 65 20 73 69 67 6e 20 6f 66 20 73  st the sign of s
35f0: 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f 0a 20 20  ignificand */.  
3600: 20 20 73 20 3d 20 73 69 67 6e 3c 30 20 3f 20 2d    s = sign<0 ? -
3610: 73 20 3a 20 73 3b 0a 0a 20 20 20 20 2f 2a 20 69  s : s;..    /* i
3620: 66 20 65 78 70 6f 6e 65 6e 74 2c 20 73 63 61 6c  f exponent, scal
3630: 65 20 73 69 67 6e 69 66 69 63 61 6e 64 20 61 73  e significand as
3640: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20   appropriate.   
3650: 20 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 69 6e   ** and store in
3660: 20 72 65 73 75 6c 74 2e 20 2a 2f 0a 20 20 20 20   result. */.    
3670: 69 66 28 20 65 20 29 7b 0a 20 20 20 20 20 20 4c  if( e ){.      L
3680: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
3690: 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20  cale = 1.0;.    
36a0: 20 20 2f 2a 20 61 74 74 65 6d 70 74 20 74 6f 20    /* attempt to 
36b0: 68 61 6e 64 6c 65 20 65 78 74 72 65 6d 65 6c 79  handle extremely
36c0: 20 73 6d 61 6c 6c 2f 6c 61 72 67 65 20 6e 75 6d   small/large num
36d0: 62 65 72 73 20 62 65 74 74 65 72 20 2a 2f 0a 20  bers better */. 
36e0: 20 20 20 20 20 69 66 28 20 65 3e 33 30 37 20 26       if( e>307 &
36f0: 26 20 65 3c 33 34 32 20 29 7b 0a 20 20 20 20 20  & e<342 ){.     
3700: 20 20 20 77 68 69 6c 65 28 20 65 25 33 30 38 20     while( e%308 
3710: 29 20 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30  ) { scale *= 1.0
3720: 65 2b 31 3b 20 65 20 2d 3d 20 31 3b 20 7d 0a 20  e+1; e -= 1; }. 
3730: 20 20 20 20 20 20 20 69 66 28 20 65 73 69 67 6e         if( esign
3740: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
3750: 72 65 73 75 6c 74 20 3d 20 73 20 2f 20 73 63 61  result = s / sca
3760: 6c 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65  le;.          re
3770: 73 75 6c 74 20 2f 3d 20 31 2e 30 65 2b 33 30 38  sult /= 1.0e+308
3780: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
3790: 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c  .          resul
37a0: 74 20 3d 20 73 20 2a 20 73 63 61 6c 65 3b 0a 20  t = s * scale;. 
37b0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
37c0: 2a 3d 20 31 2e 30 65 2b 33 30 38 3b 0a 20 20 20  *= 1.0e+308;.   
37d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
37e0: 73 65 20 69 66 28 20 65 3e 3d 33 34 32 20 29 7b  se if( e>=342 ){
37f0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 65 73 69  .        if( esi
3800: 67 6e 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  gn<0 ){.        
3810: 20 20 72 65 73 75 6c 74 20 3d 20 30 2e 30 2a 73    result = 0.0*s
3820: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
3830: 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c  .          resul
3840: 74 20 3d 20 31 65 33 30 38 2a 31 65 33 30 38 2a  t = 1e308*1e308*
3850: 73 3b 20 20 2f 2a 20 49 6e 66 69 6e 69 74 79 20  s;  /* Infinity 
3860: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
3870: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3880: 20 20 2f 2a 20 31 2e 30 65 2b 32 32 20 69 73 20    /* 1.0e+22 is 
3890: 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 77 65  the largest powe
38a0: 72 20 6f 66 20 31 30 20 74 68 61 6e 20 63 61 6e  r of 10 than can
38b0: 20 62 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   be .        ** 
38c0: 72 65 70 72 65 73 65 6e 74 65 64 20 65 78 61 63  represented exac
38d0: 74 6c 79 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  tly. */.        
38e0: 77 68 69 6c 65 28 20 65 25 32 32 20 29 20 7b 20  while( e%22 ) { 
38f0: 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 3b  scale *= 1.0e+1;
3900: 20 65 20 2d 3d 20 31 3b 20 7d 0a 20 20 20 20 20   e -= 1; }.     
3910: 20 20 20 77 68 69 6c 65 28 20 65 3e 30 20 29 20     while( e>0 ) 
3920: 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b  { scale *= 1.0e+
3930: 32 32 3b 20 65 20 2d 3d 20 32 32 3b 20 7d 0a 20  22; e -= 22; }. 
3940: 20 20 20 20 20 20 20 69 66 28 20 65 73 69 67 6e         if( esign
3950: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
3960: 72 65 73 75 6c 74 20 3d 20 73 20 2f 20 73 63 61  result = s / sca
3970: 6c 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  le;.        }els
3980: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  e{.          res
3990: 75 6c 74 20 3d 20 73 20 2a 20 73 63 61 6c 65 3b  ult = s * scale;
39a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
39b0: 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a   }.    } else {.
39c0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 28        result = (
39d0: 64 6f 75 62 6c 65 29 73 3b 0a 20 20 20 20 7d 0a  double)s;.    }.
39e0: 20 20 7d 0a 0a 20 20 2f 2a 20 73 74 6f 72 65 20    }..  /* store 
39f0: 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
3a00: 2a 70 52 65 73 75 6c 74 20 3d 20 72 65 73 75 6c  *pResult = resul
3a10: 74 3b 0a 0a 20 20 2f 2a 20 72 65 74 75 72 6e 20  t;..  /* return 
3a20: 74 72 75 65 20 69 66 20 6e 75 6d 62 65 72 20 61  true if number a
3a30: 6e 64 20 6e 6f 20 65 78 74 72 61 20 6e 6f 6e 2d  nd no extra non-
3a40: 77 68 69 74 65 73 70 61 63 65 20 63 68 72 61 63  whitespace chrac
3a50: 74 65 72 73 20 61 66 74 65 72 20 2a 2f 0a 20 20  ters after */.  
3a60: 72 65 74 75 72 6e 20 7a 3e 3d 7a 45 6e 64 20 26  return z>=zEnd &
3a70: 26 20 6e 44 69 67 69 74 73 3e 30 20 26 26 20 65  & nDigits>0 && e
3a80: 56 61 6c 69 64 20 26 26 20 6e 6f 6e 4e 75 6d 3d  Valid && nonNum=
3a90: 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 72 65 74 75  =0;.#else.  retu
3aa0: 72 6e 20 21 73 71 6c 69 74 65 33 41 74 6f 69 36  rn !sqlite3Atoi6
3ab0: 34 28 7a 2c 20 70 52 65 73 75 6c 74 2c 20 6c 65  4(z, pResult, le
3ac0: 6e 67 74 68 2c 20 65 6e 63 29 3b 0a 23 65 6e 64  ngth, enc);.#end
3ad0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
3ae0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
3af0: 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d   */.}../*.** Com
3b00: 70 61 72 65 20 74 68 65 20 31 39 2d 63 68 61 72  pare the 19-char
3b10: 61 63 74 65 72 20 73 74 72 69 6e 67 20 7a 4e 75  acter string zNu
3b20: 6d 20 61 67 61 69 6e 73 74 20 74 68 65 20 74 65  m against the te
3b30: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
3b40: 6e 0a 2a 2a 20 76 61 6c 75 65 20 32 5e 36 33 3a  n.** value 2^63:
3b50: 20 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37    92233720368547
3b60: 37 35 38 30 38 2e 20 20 52 65 74 75 72 6e 20 6e  75808.  Return n
3b70: 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20 6f  egative, zero, o
3b80: 72 20 70 6f 73 69 74 69 76 65 0a 2a 2a 20 69 66  r positive.** if
3b90: 20 7a 4e 75 6d 20 69 73 20 6c 65 73 73 20 74 68   zNum is less th
3ba0: 61 6e 2c 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  an, equal to, or
3bb0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
3bc0: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 20 4e 6f 74  e string..** Not
3bd0: 65 20 74 68 61 74 20 7a 4e 75 6d 20 6d 75 73 74  e that zNum must
3be0: 20 63 6f 6e 74 61 69 6e 20 65 78 61 63 74 6c 79   contain exactly
3bf0: 20 31 39 20 63 68 61 72 61 63 74 65 72 73 2e 0a   19 characters..
3c00: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 6d 65 6d  **.** Unlike mem
3c10: 63 6d 70 28 29 20 74 68 69 73 20 72 6f 75 74 69  cmp() this routi
3c20: 6e 65 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  ne is guaranteed
3c30: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 64   to return the d
3c40: 69 66 66 65 72 65 6e 63 65 0a 2a 2a 20 69 6e 20  ifference.** in 
3c50: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
3c60: 65 20 6c 61 73 74 20 64 69 67 69 74 20 69 66 20  e last digit if 
3c70: 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65  the only differe
3c80: 6e 63 65 20 69 73 20 69 6e 20 74 68 65 0a 2a 2a  nce is in the.**
3c90: 20 6c 61 73 74 20 64 69 67 69 74 2e 20 20 53 6f   last digit.  So
3ca0: 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 2a  , for example,.*
3cb0: 2a 0a 2a 2a 20 20 20 20 20 20 63 6f 6d 70 61 72  *.**      compar
3cc0: 65 32 70 6f 77 36 33 28 22 39 32 32 33 33 37 32  e2pow63("9223372
3cd0: 30 33 36 38 35 34 37 37 35 38 30 30 22 2c 20 31  036854775800", 1
3ce0: 29 0a 2a 2a 0a 2a 2a 20 77 69 6c 6c 20 72 65 74  ).**.** will ret
3cf0: 75 72 6e 20 2d 38 2e 0a 2a 2f 0a 73 74 61 74 69  urn -8..*/.stati
3d00: 63 20 69 6e 74 20 63 6f 6d 70 61 72 65 32 70 6f  c int compare2po
3d10: 77 36 33 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  w63(const char *
3d20: 7a 4e 75 6d 2c 20 69 6e 74 20 69 6e 63 72 29 7b  zNum, int incr){
3d30: 0a 20 20 69 6e 74 20 63 20 3d 20 30 3b 0a 20 20  .  int c = 0;.  
3d40: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20 20  int i;.         
3d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 31             /* 01
3d60: 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37  2345678901234567
3d70: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
3d80: 20 2a 70 6f 77 36 33 20 3d 20 22 39 32 32 33 33   *pow63 = "92233
3d90: 37 32 30 33 36 38 35 34 37 37 35 38 30 22 3b 0a  7203685477580";.
3da0: 20 20 66 6f 72 28 69 3d 30 3b 20 63 3d 3d 30 20    for(i=0; c==0 
3db0: 26 26 20 69 3c 31 38 3b 20 69 2b 2b 29 7b 0a 20  && i<18; i++){. 
3dc0: 20 20 20 63 20 3d 20 28 7a 4e 75 6d 5b 69 2a 69     c = (zNum[i*i
3dd0: 6e 63 72 5d 2d 70 6f 77 36 33 5b 69 5d 29 2a 31  ncr]-pow63[i])*1
3de0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 3d 3d  0;.  }.  if( c==
3df0: 30 20 29 7b 0a 20 20 20 20 63 20 3d 20 7a 4e 75  0 ){.    c = zNu
3e00: 6d 5b 31 38 2a 69 6e 63 72 5d 20 2d 20 27 38 27  m[18*incr] - '8'
3e10: 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
3e20: 63 3d 3d 28 2d 31 29 20 29 3b 0a 20 20 20 20 74  c==(-1) );.    t
3e30: 65 73 74 63 61 73 65 28 20 63 3d 3d 30 20 29 3b  estcase( c==0 );
3e40: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 63  .    testcase( c
3e50: 3d 3d 28 2b 31 29 20 29 3b 0a 20 20 7d 0a 20 20  ==(+1) );.  }.  
3e60: 72 65 74 75 72 6e 20 63 3b 0a 7d 0a 0a 2f 2a 0a  return c;.}../*.
3e70: 2a 2a 20 43 6f 6e 76 65 72 74 20 7a 4e 75 6d 20  ** Convert zNum 
3e80: 74 6f 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  to a 64-bit sign
3e90: 65 64 20 69 6e 74 65 67 65 72 2e 20 20 7a 4e 75  ed integer.  zNu
3ea0: 6d 20 6d 75 73 74 20 62 65 20 64 65 63 69 6d 61  m must be decima
3eb0: 6c 2e 20 54 68 69 73 0a 2a 2a 20 72 6f 75 74 69  l. This.** routi
3ec0: 6e 65 20 64 6f 65 73 20 2a 6e 6f 74 2a 20 61 63  ne does *not* ac
3ed0: 63 65 70 74 20 68 65 78 61 64 65 63 69 6d 61 6c  cept hexadecimal
3ee0: 20 6e 6f 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   notation..**.**
3ef0: 20 49 66 20 74 68 65 20 7a 4e 75 6d 20 76 61 6c   If the zNum val
3f00: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
3f10: 62 6c 65 20 61 73 20 61 20 36 34 2d 62 69 74 20  ble as a 64-bit 
3f20: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
3f30: 0a 2a 2a 20 69 6e 74 65 67 65 72 2c 20 74 68 65  .** integer, the
3f40: 6e 20 77 72 69 74 65 20 74 68 61 74 20 76 61 6c  n write that val
3f50: 75 65 20 69 6e 74 6f 20 2a 70 4e 75 6d 20 61 6e  ue into *pNum an
3f60: 64 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a  d return 0..**.*
3f70: 2a 20 49 66 20 7a 4e 75 6d 20 69 73 20 65 78 61  * If zNum is exa
3f80: 63 74 6c 79 20 39 32 32 33 33 37 32 30 33 36 38  ctly 92233720368
3f90: 35 34 37 37 35 38 30 38 2c 20 72 65 74 75 72 6e  54775808, return
3fa0: 20 32 2e 20 20 54 68 69 73 20 73 70 65 63 69 61   2.  This specia
3fb0: 6c 0a 2a 2a 20 63 61 73 65 20 69 73 20 62 72 6f  l.** case is bro
3fc0: 6b 65 6e 20 6f 75 74 20 62 65 63 61 75 73 65 20  ken out because 
3fd0: 77 68 69 6c 65 20 39 32 32 33 33 37 32 30 33 36  while 9223372036
3fe0: 38 35 34 37 37 35 38 30 38 20 63 61 6e 6e 6f 74  854775808 cannot
3ff0: 20 62 65 20 61 20 0a 2a 2a 20 73 69 67 6e 65 64   be a .** signed
4000: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2c   64-bit integer,
4010: 20 69 74 73 20 6e 65 67 61 74 69 76 65 20 2d 39   its negative -9
4020: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
4030: 30 38 20 63 61 6e 20 62 65 2e 0a 2a 2a 0a 2a 2a  08 can be..**.**
4040: 20 49 66 20 7a 4e 75 6d 20 69 73 20 74 6f 6f 20   If zNum is too 
4050: 62 69 67 20 66 6f 72 20 61 20 36 34 2d 62 69 74  big for a 64-bit
4060: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 69 73 20   integer and is 
4070: 6e 6f 74 0a 2a 2a 20 39 32 32 33 33 37 32 30 33  not.** 922337203
4080: 36 38 35 34 37 37 35 38 30 38 20 20 6f 72 20 69  6854775808  or i
4090: 66 20 7a 4e 75 6d 20 63 6f 6e 74 61 69 6e 73 20  f zNum contains 
40a0: 61 6e 79 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20  any non-numeric 
40b0: 74 65 78 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  text,.** then re
40c0: 74 75 72 6e 20 31 2e 0a 2a 2a 0a 2a 2a 20 6c 65  turn 1..**.** le
40d0: 6e 67 74 68 20 69 73 20 74 68 65 20 6e 75 6d 62  ngth is the numb
40e0: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
40f0: 68 65 20 73 74 72 69 6e 67 20 28 62 79 74 65 73  he string (bytes
4100: 2c 20 6e 6f 74 20 63 68 61 72 61 63 74 65 72 73  , not characters
4110: 29 2e 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  )..** The string
4120: 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   is not necessar
4130: 69 6c 79 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61  ily zero-termina
4140: 74 65 64 2e 20 20 54 68 65 20 65 6e 63 6f 64 69  ted.  The encodi
4150: 6e 67 20 69 73 0a 2a 2a 20 67 69 76 65 6e 20 62  ng is.** given b
4160: 79 20 65 6e 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71  y enc..*/.int sq
4170: 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
4180: 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36  t char *zNum, i6
4190: 34 20 2a 70 4e 75 6d 2c 20 69 6e 74 20 6c 65 6e  4 *pNum, int len
41a0: 67 74 68 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20  gth, u8 enc){.  
41b0: 69 6e 74 20 69 6e 63 72 3b 0a 20 20 75 36 34 20  int incr;.  u64 
41c0: 75 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67  u = 0;.  int neg
41d0: 20 3d 20 30 3b 20 2f 2a 20 61 73 73 75 6d 65 20   = 0; /* assume 
41e0: 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 69 6e  positive */.  in
41f0: 74 20 69 3b 0a 20 20 69 6e 74 20 63 20 3d 20 30  t i;.  int c = 0
4200: 3b 0a 20 20 69 6e 74 20 6e 6f 6e 4e 75 6d 20 3d  ;.  int nonNum =
4210: 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   0;.  const char
4220: 20 2a 7a 53 74 61 72 74 3b 0a 20 20 63 6f 6e 73   *zStart;.  cons
4230: 74 20 63 68 61 72 20 2a 7a 45 6e 64 20 3d 20 7a  t char *zEnd = z
4240: 4e 75 6d 20 2b 20 6c 65 6e 67 74 68 3b 0a 20 20  Num + length;.  
4250: 61 73 73 65 72 74 28 20 65 6e 63 3d 3d 53 51 4c  assert( enc==SQL
4260: 49 54 45 5f 55 54 46 38 20 7c 7c 20 65 6e 63 3d  ITE_UTF8 || enc=
4270: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
4280: 7c 7c 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  || enc==SQLITE_U
4290: 54 46 31 36 42 45 20 29 3b 0a 20 20 69 66 28 20  TF16BE );.  if( 
42a0: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
42b0: 20 29 7b 0a 20 20 20 20 69 6e 63 72 20 3d 20 31   ){.    incr = 1
42c0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
42d0: 6e 63 72 20 3d 20 32 3b 0a 20 20 20 20 61 73 73  ncr = 2;.    ass
42e0: 65 72 74 28 20 53 51 4c 49 54 45 5f 55 54 46 31  ert( SQLITE_UTF1
42f0: 36 4c 45 3d 3d 32 20 26 26 20 53 51 4c 49 54 45  6LE==2 && SQLITE
4300: 5f 55 54 46 31 36 42 45 3d 3d 33 20 29 3b 0a 20  _UTF16BE==3 );. 
4310: 20 20 20 66 6f 72 28 69 3d 33 2d 65 6e 63 3b 20     for(i=3-enc; 
4320: 69 3c 6c 65 6e 67 74 68 20 26 26 20 7a 4e 75 6d  i<length && zNum
4330: 5b 69 5d 3d 3d 30 3b 20 69 2b 3d 32 29 7b 7d 0a  [i]==0; i+=2){}.
4340: 20 20 20 20 6e 6f 6e 4e 75 6d 20 3d 20 69 3c 6c      nonNum = i<l
4350: 65 6e 67 74 68 3b 0a 20 20 20 20 7a 45 6e 64 20  ength;.    zEnd 
4360: 3d 20 7a 4e 75 6d 2b 69 2b 65 6e 63 2d 33 3b 0a  = zNum+i+enc-3;.
4370: 20 20 20 20 7a 4e 75 6d 20 2b 3d 20 28 65 6e 63      zNum += (enc
4380: 26 31 29 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65  &1);.  }.  while
4390: 28 20 7a 4e 75 6d 3c 7a 45 6e 64 20 26 26 20 73  ( zNum<zEnd && s
43a0: 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 2a 7a  qlite3Isspace(*z
43b0: 4e 75 6d 29 20 29 20 7a 4e 75 6d 2b 3d 69 6e 63  Num) ) zNum+=inc
43c0: 72 3b 0a 20 20 69 66 28 20 7a 4e 75 6d 3c 7a 45  r;.  if( zNum<zE
43d0: 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20 2a 7a  nd ){.    if( *z
43e0: 4e 75 6d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  Num=='-' ){.    
43f0: 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20 20 20 20    neg = 1;.     
4400: 20 7a 4e 75 6d 2b 3d 69 6e 63 72 3b 0a 20 20 20   zNum+=incr;.   
4410: 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e 75 6d   }else if( *zNum
4420: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 20 20 7a  =='+' ){.      z
4430: 4e 75 6d 2b 3d 69 6e 63 72 3b 0a 20 20 20 20 7d  Num+=incr;.    }
4440: 0a 20 20 7d 0a 20 20 7a 53 74 61 72 74 20 3d 20  .  }.  zStart = 
4450: 7a 4e 75 6d 3b 0a 20 20 77 68 69 6c 65 28 20 7a  zNum;.  while( z
4460: 4e 75 6d 3c 7a 45 6e 64 20 26 26 20 7a 4e 75 6d  Num<zEnd && zNum
4470: 5b 30 5d 3d 3d 27 30 27 20 29 7b 20 7a 4e 75 6d  [0]=='0' ){ zNum
4480: 2b 3d 69 6e 63 72 3b 20 7d 20 2f 2a 20 53 6b 69  +=incr; } /* Ski
4490: 70 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 2e  p leading zeros.
44a0: 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 26   */.  for(i=0; &
44b0: 7a 4e 75 6d 5b 69 5d 3c 7a 45 6e 64 20 26 26 20  zNum[i]<zEnd && 
44c0: 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27  (c=zNum[i])>='0'
44d0: 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 3d 69   && c<='9'; i+=i
44e0: 6e 63 72 29 7b 0a 20 20 20 20 75 20 3d 20 75 2a  ncr){.    u = u*
44f0: 31 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20  10 + c - '0';.  
4500: 7d 0a 20 20 69 66 28 20 75 3e 4c 41 52 47 45 53  }.  if( u>LARGES
4510: 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20 2a  T_INT64 ){.    *
4520: 70 4e 75 6d 20 3d 20 6e 65 67 20 3f 20 53 4d 41  pNum = neg ? SMA
4530: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 3a 20 4c 41  LLEST_INT64 : LA
4540: 52 47 45 53 54 5f 49 4e 54 36 34 3b 0a 20 20 7d  RGEST_INT64;.  }
4550: 65 6c 73 65 20 69 66 28 20 6e 65 67 20 29 7b 0a  else if( neg ){.
4560: 20 20 20 20 2a 70 4e 75 6d 20 3d 20 2d 28 69 36      *pNum = -(i6
4570: 34 29 75 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  4)u;.  }else{.  
4580: 20 20 2a 70 4e 75 6d 20 3d 20 28 69 36 34 29 75    *pNum = (i64)u
4590: 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  ;.  }.  testcase
45a0: 28 20 69 3d 3d 31 38 20 29 3b 0a 20 20 74 65 73  ( i==18 );.  tes
45b0: 74 63 61 73 65 28 20 69 3d 3d 31 39 20 29 3b 0a  tcase( i==19 );.
45c0: 20 20 74 65 73 74 63 61 73 65 28 20 69 3d 3d 32    testcase( i==2
45d0: 30 20 29 3b 0a 20 20 69 66 28 20 28 63 21 3d 30  0 );.  if( (c!=0
45e0: 20 26 26 20 26 7a 4e 75 6d 5b 69 5d 3c 7a 45 6e   && &zNum[i]<zEn
45f0: 64 29 20 7c 7c 20 28 69 3d 3d 30 20 26 26 20 7a  d) || (i==0 && z
4600: 53 74 61 72 74 3d 3d 7a 4e 75 6d 29 0a 20 20 20  Start==zNum).   
4610: 20 20 20 20 7c 7c 20 69 3e 31 39 2a 69 6e 63 72      || i>19*incr
4620: 20 7c 7c 20 6e 6f 6e 4e 75 6d 20 29 7b 0a 20 20   || nonNum ){.  
4630: 20 20 2f 2a 20 7a 4e 75 6d 20 69 73 20 65 6d 70    /* zNum is emp
4640: 74 79 20 6f 72 20 63 6f 6e 74 61 69 6e 73 20 6e  ty or contains n
4650: 6f 6e 2d 6e 75 6d 65 72 69 63 20 74 65 78 74 20  on-numeric text 
4660: 6f 72 20 69 73 20 6c 6f 6e 67 65 72 0a 20 20 20  or is longer.   
4670: 20 2a 2a 20 74 68 61 6e 20 31 39 20 64 69 67 69   ** than 19 digi
4680: 74 73 20 28 74 68 75 73 20 67 75 61 72 61 6e 74  ts (thus guarant
4690: 65 65 69 6e 67 20 74 68 61 74 20 69 74 20 69 73  eeing that it is
46a0: 20 74 6f 6f 20 6c 61 72 67 65 29 20 2a 2f 0a 20   too large) */. 
46b0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
46c0: 65 6c 73 65 20 69 66 28 20 69 3c 31 39 2a 69 6e  else if( i<19*in
46d0: 63 72 20 29 7b 0a 20 20 20 20 2f 2a 20 4c 65 73  cr ){.    /* Les
46e0: 73 20 74 68 61 6e 20 31 39 20 64 69 67 69 74 73  s than 19 digits
46f0: 2c 20 73 6f 20 77 65 20 6b 6e 6f 77 20 74 68 61  , so we know tha
4700: 74 20 69 74 20 66 69 74 73 20 69 6e 20 36 34 20  t it fits in 64 
4710: 62 69 74 73 20 2a 2f 0a 20 20 20 20 61 73 73 65  bits */.    asse
4720: 72 74 28 20 75 3c 3d 4c 41 52 47 45 53 54 5f 49  rt( u<=LARGEST_I
4730: 4e 54 36 34 20 29 3b 0a 20 20 20 20 72 65 74 75  NT64 );.    retu
4740: 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 0;.  }else{. 
4750: 20 20 20 2f 2a 20 7a 4e 75 6d 20 69 73 20 61 20     /* zNum is a 
4760: 31 39 2d 64 69 67 69 74 20 6e 75 6d 62 65 72 73  19-digit numbers
4770: 2e 20 20 43 6f 6d 70 61 72 65 20 69 74 20 61 67  .  Compare it ag
4780: 61 69 6e 73 74 20 39 32 32 33 33 37 32 30 33 36  ainst 9223372036
4790: 38 35 34 37 37 35 38 30 38 2e 20 2a 2f 0a 20 20  854775808. */.  
47a0: 20 20 63 20 3d 20 63 6f 6d 70 61 72 65 32 70 6f    c = compare2po
47b0: 77 36 33 28 7a 4e 75 6d 2c 20 69 6e 63 72 29 3b  w63(zNum, incr);
47c0: 0a 20 20 20 20 69 66 28 20 63 3c 30 20 29 7b 0a  .    if( c<0 ){.
47d0: 20 20 20 20 20 20 2f 2a 20 7a 4e 75 6d 20 69 73        /* zNum is
47e0: 20 6c 65 73 73 20 74 68 61 6e 20 39 32 32 33 33   less than 92233
47f0: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 73  72036854775808 s
4800: 6f 20 69 74 20 66 69 74 73 20 2a 2f 0a 20 20 20  o it fits */.   
4810: 20 20 20 61 73 73 65 72 74 28 20 75 3c 3d 4c 41     assert( u<=LA
4820: 52 47 45 53 54 5f 49 4e 54 36 34 20 29 3b 0a 20  RGEST_INT64 );. 
4830: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
4840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 30     }else if( c>0
4850: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 7a 4e 75   ){.      /* zNu
4860: 6d 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  m is greater tha
4870: 6e 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37  n 92233720368547
4880: 37 35 38 30 38 20 73 6f 20 69 74 20 6f 76 65 72  75808 so it over
4890: 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 72  flows */.      r
48a0: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 65 6c  eturn 1;.    }el
48b0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 7a 4e 75  se{.      /* zNu
48c0: 6d 20 69 73 20 65 78 61 63 74 6c 79 20 39 32 32  m is exactly 922
48d0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
48e0: 2e 20 20 46 69 74 73 20 69 66 20 6e 65 67 61 74  .  Fits if negat
48f0: 69 76 65 2e 20 20 54 68 65 0a 20 20 20 20 20 20  ive.  The.      
4900: 2a 2a 20 73 70 65 63 69 61 6c 20 63 61 73 65 20  ** special case 
4910: 32 20 6f 76 65 72 66 6c 6f 77 20 69 66 20 70 6f  2 overflow if po
4920: 73 69 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  sitive */.      
4930: 61 73 73 65 72 74 28 20 75 2d 31 3d 3d 4c 41 52  assert( u-1==LAR
4940: 47 45 53 54 5f 49 4e 54 36 34 20 29 3b 0a 20 20  GEST_INT64 );.  
4950: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 67 20 3f      return neg ?
4960: 20 30 20 3a 20 32 3b 0a 20 20 20 20 7d 0a 20 20   0 : 2;.    }.  
4970: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73  }.}../*.** Trans
4980: 66 6f 72 6d 20 61 20 55 54 46 2d 38 20 69 6e 74  form a UTF-8 int
4990: 65 67 65 72 20 6c 69 74 65 72 61 6c 2c 20 69 6e  eger literal, in
49a0: 20 65 69 74 68 65 72 20 64 65 63 69 6d 61 6c 20   either decimal 
49b0: 6f 72 20 68 65 78 61 64 65 63 69 6d 61 6c 2c 0a  or hexadecimal,.
49c0: 2a 2a 20 69 6e 74 6f 20 61 20 36 34 2d 62 69 74  ** into a 64-bit
49d0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e   signed integer.
49e0: 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 61    This routine a
49f0: 63 63 65 70 74 73 20 68 65 78 61 64 65 63 69 6d  ccepts hexadecim
4a00: 61 6c 20 6c 69 74 65 72 61 6c 73 2c 0a 2a 2a 20  al literals,.** 
4a10: 77 68 65 72 65 61 73 20 73 71 6c 69 74 65 33 41  whereas sqlite3A
4a20: 74 6f 69 36 34 28 29 20 64 6f 65 73 20 6e 6f 74  toi64() does not
4a30: 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 3a  ..**.** Returns:
4a40: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 30 20 20 20 20  .**.**     0    
4a50: 53 75 63 63 65 73 73 66 75 6c 20 74 72 61 6e 73  Successful trans
4a60: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 46 69 74 73  formation.  Fits
4a70: 20 69 6e 20 61 20 36 34 2d 62 69 74 20 73 69 67   in a 64-bit sig
4a80: 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20  ned integer..** 
4a90: 20 20 20 20 31 20 20 20 20 49 6e 74 65 67 65 72      1    Integer
4aa0: 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 61   too large for a
4ab0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
4ac0: 6e 74 65 67 65 72 20 6f 72 20 69 73 20 6d 61 6c  nteger or is mal
4ad0: 66 6f 72 6d 65 64 0a 2a 2a 20 20 20 20 20 32 20  formed.**     2 
4ae0: 20 20 20 53 70 65 63 69 61 6c 20 63 61 73 65 20     Special case 
4af0: 6f 66 20 39 32 32 33 33 37 32 30 33 36 38 35 34  of 9223372036854
4b00: 37 37 35 38 30 38 0a 2a 2f 0a 69 6e 74 20 73 71  775808.*/.int sq
4b10: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
4b20: 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  64(const char *z
4b30: 2c 20 69 36 34 20 2a 70 4f 75 74 29 7b 0a 23 69  , i64 *pOut){.#i
4b40: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4b50: 54 5f 48 45 58 5f 49 4e 54 45 47 45 52 0a 20 20  T_HEX_INTEGER.  
4b60: 69 66 28 20 7a 5b 30 5d 3d 3d 27 30 27 0a 20 20  if( z[0]=='0'.  
4b70: 20 26 26 20 28 7a 5b 31 5d 3d 3d 27 78 27 20 7c   && (z[1]=='x' |
4b80: 7c 20 7a 5b 31 5d 3d 3d 27 58 27 29 0a 20 20 20  | z[1]=='X').   
4b90: 26 26 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  && sqlite3Isxdig
4ba0: 69 74 28 7a 5b 32 5d 29 0a 20 20 29 7b 0a 20 20  it(z[2]).  ){.  
4bb0: 20 20 75 36 34 20 75 20 3d 20 30 3b 0a 20 20 20    u64 u = 0;.   
4bc0: 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 66   int i, k;.    f
4bd0: 6f 72 28 69 3d 32 3b 20 7a 5b 69 5d 3d 3d 27 30  or(i=2; z[i]=='0
4be0: 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 66 6f  '; i++){}.    fo
4bf0: 72 28 6b 3d 69 3b 20 73 71 6c 69 74 65 33 49 73  r(k=i; sqlite3Is
4c00: 78 64 69 67 69 74 28 7a 5b 6b 5d 29 3b 20 6b 2b  xdigit(z[k]); k+
4c10: 2b 29 7b 0a 20 20 20 20 20 20 75 20 3d 20 75 2a  +){.      u = u*
4c20: 31 36 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  16 + sqlite3HexT
4c30: 6f 49 6e 74 28 7a 5b 6b 5d 29 3b 0a 20 20 20 20  oInt(z[k]);.    
4c40: 7d 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  }.    memcpy(pOu
4c50: 74 2c 20 26 75 2c 20 38 29 3b 0a 20 20 20 20 72  t, &u, 8);.    r
4c60: 65 74 75 72 6e 20 28 7a 5b 6b 5d 3d 3d 30 20 26  eturn (z[k]==0 &
4c70: 26 20 6b 2d 69 3c 3d 31 36 29 20 3f 20 30 20 3a  & k-i<=16) ? 0 :
4c80: 20 31 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64   1;.  }else.#end
4c90: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
4ca0: 54 5f 48 45 58 5f 49 4e 54 45 47 45 52 20 2a 2f  T_HEX_INTEGER */
4cb0: 0a 20 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  .  {.    return 
4cc0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 2c  sqlite3Atoi64(z,
4cd0: 20 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 53 74   pOut, sqlite3St
4ce0: 72 6c 65 6e 33 30 28 7a 29 2c 20 53 51 4c 49 54  rlen30(z), SQLIT
4cf0: 45 5f 55 54 46 38 29 3b 0a 20 20 7d 0a 7d 0a 0a  E_UTF8);.  }.}..
4d00: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
4d10: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
4d20: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
4d30: 74 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68  t in 32-bits, th
4d40: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
4d50: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
4d60: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
4d70: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
4d80: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a  turn false..**.*
4d90: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 61  * This routine a
4da0: 63 63 65 70 74 73 20 62 6f 74 68 20 64 65 63 69  ccepts both deci
4db0: 6d 61 6c 20 61 6e 64 20 68 65 78 61 64 65 63 69  mal and hexadeci
4dc0: 6d 61 6c 20 6e 6f 74 61 74 69 6f 6e 20 66 6f 72  mal notation for
4dd0: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 0a 2a 2a   integers..**.**
4de0: 20 41 6e 79 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63   Any non-numeric
4df0: 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
4e00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 7a 4e 75 6d 20   following zNum 
4e10: 61 72 65 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20  are ignored..** 
4e20: 54 68 69 73 20 69 73 20 64 69 66 66 65 72 65 6e  This is differen
4e30: 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 41 74  t from sqlite3At
4e40: 6f 69 36 34 28 29 20 77 68 69 63 68 20 72 65 71  oi64() which req
4e50: 75 69 72 65 73 20 74 68 65 0a 2a 2a 20 69 6e 70  uires the.** inp
4e60: 75 74 20 6e 75 6d 62 65 72 20 74 6f 20 62 65 20  ut number to be 
4e70: 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 2e  zero-terminated.
4e80: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
4e90: 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
4ea0: 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70  ar *zNum, int *p
4eb0: 56 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69 74 65  Value){.  sqlite
4ec0: 5f 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20 20  _int64 v = 0;.  
4ed0: 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 6e 74 20  int i, c;.  int 
4ee0: 6e 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a  neg = 0;.  if( z
4ef0: 4e 75 6d 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20  Num[0]=='-' ){. 
4f00: 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20 20 20     neg = 1;.    
4f10: 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20  zNum++;.  }else 
4f20: 69 66 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 2b 27  if( zNum[0]=='+'
4f30: 20 29 7b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a   ){.    zNum++;.
4f40: 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49    }.#ifndef SQLI
4f50: 54 45 5f 4f 4d 49 54 5f 48 45 58 5f 49 4e 54 45  TE_OMIT_HEX_INTE
4f60: 47 45 52 0a 20 20 65 6c 73 65 20 69 66 28 20 7a  GER.  else if( z
4f70: 4e 75 6d 5b 30 5d 3d 3d 27 30 27 0a 20 20 20 20  Num[0]=='0'.    
4f80: 20 20 20 20 26 26 20 28 7a 4e 75 6d 5b 31 5d 3d      && (zNum[1]=
4f90: 3d 27 78 27 20 7c 7c 20 7a 4e 75 6d 5b 31 5d 3d  ='x' || zNum[1]=
4fa0: 3d 27 58 27 29 0a 20 20 20 20 20 20 20 20 26 26  ='X').        &&
4fb0: 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
4fc0: 28 7a 4e 75 6d 5b 32 5d 29 0a 20 20 29 7b 0a 20  (zNum[2]).  ){. 
4fd0: 20 20 20 75 33 32 20 75 20 3d 20 30 3b 0a 20 20     u32 u = 0;.  
4fe0: 20 20 7a 4e 75 6d 20 2b 3d 20 32 3b 0a 20 20 20    zNum += 2;.   
4ff0: 20 77 68 69 6c 65 28 20 7a 4e 75 6d 5b 30 5d 3d   while( zNum[0]=
5000: 3d 27 30 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20  ='0' ) zNum++;. 
5010: 20 20 20 66 6f 72 28 69 3d 30 3b 20 73 71 6c 69     for(i=0; sqli
5020: 74 65 33 49 73 78 64 69 67 69 74 28 7a 4e 75 6d  te3Isxdigit(zNum
5030: 5b 69 5d 29 20 26 26 20 69 3c 38 3b 20 69 2b 2b  [i]) && i<8; i++
5040: 29 7b 0a 20 20 20 20 20 20 75 20 3d 20 75 2a 31  ){.      u = u*1
5050: 36 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  6 + sqlite3HexTo
5060: 49 6e 74 28 7a 4e 75 6d 5b 69 5d 29 3b 0a 20 20  Int(zNum[i]);.  
5070: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 75 26 30    }.    if( (u&0
5080: 78 38 30 30 30 30 30 30 30 29 3d 3d 30 20 26 26  x80000000)==0 &&
5090: 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
50a0: 28 7a 4e 75 6d 5b 69 5d 29 3d 3d 30 20 29 7b 0a  (zNum[i])==0 ){.
50b0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 56 61        memcpy(pVa
50c0: 6c 75 65 2c 20 26 75 2c 20 34 29 3b 0a 20 20 20  lue, &u, 4);.   
50d0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
50e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
50f0: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
5100: 7d 0a 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65  }.#endif.  while
5110: 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 30 27 20 29  ( zNum[0]=='0' )
5120: 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69   zNum++;.  for(i
5130: 3d 30 3b 20 69 3c 31 31 20 26 26 20 28 63 20 3d  =0; i<11 && (c =
5140: 20 7a 4e 75 6d 5b 69 5d 20 2d 20 27 30 27 29 3e   zNum[i] - '0')>
5150: 3d 30 20 26 26 20 63 3c 3d 39 3b 20 69 2b 2b 29  =0 && c<=9; i++)
5160: 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31 30 20 2b  {.    v = v*10 +
5170: 20 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68   c;.  }..  /* Th
5180: 65 20 6c 6f 6e 67 65 73 74 20 64 65 63 69 6d 61  e longest decima
5190: 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
51a0: 20 6f 66 20 61 20 33 32 20 62 69 74 20 69 6e 74   of a 32 bit int
51b0: 65 67 65 72 20 69 73 20 31 30 20 64 69 67 69 74  eger is 10 digit
51c0: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20  s:.  **.  **    
51d0: 20 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37           1234567
51e0: 38 39 30 0a 20 20 2a 2a 20 20 20 20 20 32 5e 33  890.  **     2^3
51f0: 31 20 2d 3e 20 32 31 34 37 34 38 33 36 34 38 0a  1 -> 2147483648.
5200: 20 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28    */.  testcase(
5210: 20 69 3d 3d 31 30 20 29 3b 0a 20 20 69 66 28 20   i==10 );.  if( 
5220: 69 3e 31 30 20 29 7b 0a 20 20 20 20 72 65 74 75  i>10 ){.    retu
5230: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 74 65 73 74  rn 0;.  }.  test
5240: 63 61 73 65 28 20 76 2d 6e 65 67 3d 3d 32 31 34  case( v-neg==214
5250: 37 34 38 33 36 34 37 20 29 3b 0a 20 20 69 66 28  7483647 );.  if(
5260: 20 76 2d 6e 65 67 3e 32 31 34 37 34 38 33 36 34   v-neg>214748364
5270: 37 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  7 ){.    return 
5280: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 65 67  0;.  }.  if( neg
5290: 20 29 7b 0a 20 20 20 20 76 20 3d 20 2d 76 3b 0a   ){.    v = -v;.
52a0: 20 20 7d 0a 20 20 2a 70 56 61 6c 75 65 20 3d 20    }.  *pValue = 
52b0: 28 69 6e 74 29 76 3b 0a 20 20 72 65 74 75 72 6e  (int)v;.  return
52c0: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   1;.}../*.** Ret
52d0: 75 72 6e 20 61 20 33 32 2d 62 69 74 20 69 6e 74  urn a 32-bit int
52e0: 65 67 65 72 20 76 61 6c 75 65 20 65 78 74 72 61  eger value extra
52f0: 63 74 65 64 20 66 72 6f 6d 20 61 20 73 74 72 69  cted from a stri
5300: 6e 67 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ng.  If the.** s
5310: 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 61 6e 20  tring is not an 
5320: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 72 65  integer, just re
5330: 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73  turn 0..*/.int s
5340: 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
5350: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
5360: 20 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 20   x = 0;.  if( z 
5370: 29 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  ) sqlite3GetInt3
5380: 32 28 7a 2c 20 26 78 29 3b 0a 20 20 72 65 74 75  2(z, &x);.  retu
5390: 72 6e 20 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn x;.}../*.** T
53a0: 68 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  he variable-leng
53b0: 74 68 20 69 6e 74 65 67 65 72 20 65 6e 63 6f 64  th integer encod
53c0: 69 6e 67 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ing is as follow
53d0: 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a 2a 2a  s:.**.** KEY:.**
53e0: 20 20 20 20 20 20 20 20 20 41 20 3d 20 30 78 78           A = 0xx
53f0: 78 78 78 78 78 20 20 20 20 37 20 62 69 74 73 20  xxxxx    7 bits 
5400: 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20  of data and one 
5410: 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20  flag bit.**     
5420: 20 20 20 20 42 20 3d 20 31 78 78 78 78 78 78 78      B = 1xxxxxxx
5430: 20 20 20 20 37 20 62 69 74 73 20 6f 66 20 64 61      7 bits of da
5440: 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20  ta and one flag 
5450: 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 43  bit.**         C
5460: 20 3d 20 78 78 78 78 78 78 78 78 20 20 20 20 38   = xxxxxxxx    8
5470: 20 62 69 74 73 20 6f 66 20 64 61 74 61 0a 2a 2a   bits of data.**
5480: 0a 2a 2a 20 20 37 20 62 69 74 73 20 2d 20 41 0a  .**  7 bits - A.
5490: 2a 2a 20 31 34 20 62 69 74 73 20 2d 20 42 41 0a  ** 14 bits - BA.
54a0: 2a 2a 20 32 31 20 62 69 74 73 20 2d 20 42 42 41  ** 21 bits - BBA
54b0: 0a 2a 2a 20 32 38 20 62 69 74 73 20 2d 20 42 42  .** 28 bits - BB
54c0: 42 41 0a 2a 2a 20 33 35 20 62 69 74 73 20 2d 20  BA.** 35 bits - 
54d0: 42 42 42 42 41 0a 2a 2a 20 34 32 20 62 69 74 73  BBBBA.** 42 bits
54e0: 20 2d 20 42 42 42 42 42 41 0a 2a 2a 20 34 39 20   - BBBBBA.** 49 
54f0: 62 69 74 73 20 2d 20 42 42 42 42 42 42 41 0a 2a  bits - BBBBBBA.*
5500: 2a 20 35 36 20 62 69 74 73 20 2d 20 42 42 42 42  * 56 bits - BBBB
5510: 42 42 42 41 0a 2a 2a 20 36 34 20 62 69 74 73 20  BBBA.** 64 bits 
5520: 2d 20 42 42 42 42 42 42 42 42 43 0a 2a 2f 0a 0a  - BBBBBBBBC.*/..
5530: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 36 34  /*.** Write a 64
5540: 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65  -bit variable-le
5550: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 74 6f 20  ngth integer to 
5560: 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20  memory starting 
5570: 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54 68 65 20  at p[0]..** The 
5580: 6c 65 6e 67 74 68 20 6f 66 20 64 61 74 61 20 77  length of data w
5590: 72 69 74 65 20 77 69 6c 6c 20 62 65 20 62 65 74  rite will be bet
55a0: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
55b0: 65 73 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 0a  es.  The number.
55c0: 2a 2a 20 6f 66 20 62 79 74 65 73 20 77 72 69 74  ** of bytes writ
55d0: 74 65 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ten is returned.
55e0: 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c  .**.** A variabl
55f0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
5600: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
5610: 20 6c 6f 77 65 72 20 37 20 62 69 74 73 20 6f 66   lower 7 bits of
5620: 20 65 61 63 68 20 62 79 74 65 0a 2a 2a 20 66 6f   each byte.** fo
5630: 72 20 61 6c 6c 20 62 79 74 65 73 20 74 68 61 74  r all bytes that
5640: 20 68 61 76 65 20 74 68 65 20 38 74 68 20 62 69   have the 8th bi
5650: 74 20 73 65 74 20 61 6e 64 20 6f 6e 65 20 62 79  t set and one by
5660: 74 65 20 77 69 74 68 20 74 68 65 20 38 74 68 0a  te with the 8th.
5670: 2a 2a 20 62 69 74 20 63 6c 65 61 72 2e 20 20 45  ** bit clear.  E
5680: 78 63 65 70 74 2c 20 69 66 20 77 65 20 67 65 74  xcept, if we get
5690: 20 74 6f 20 74 68 65 20 39 74 68 20 62 79 74 65   to the 9th byte
56a0: 2c 20 69 74 20 73 74 6f 72 65 73 20 74 68 65 20  , it stores the 
56b0: 66 75 6c 6c 0a 2a 2a 20 38 20 62 69 74 73 20 61  full.** 8 bits a
56c0: 6e 64 20 69 73 20 74 68 65 20 6c 61 73 74 20 62  nd is the last b
56d0: 79 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  yte..*/.static i
56e0: 6e 74 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  nt SQLITE_NOINLI
56f0: 4e 45 20 70 75 74 56 61 72 69 6e 74 36 34 28 75  NE putVarint64(u
5700: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
5710: 20 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69   u64 v){.  int i
5720: 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20 62 75 66  , j, n;.  u8 buf
5730: 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76 20 26 20  [10];.  if( v & 
5740: 28 28 28 75 36 34 29 30 78 66 66 30 30 30 30 30  (((u64)0xff00000
5750: 30 29 3c 3c 33 32 29 20 29 7b 0a 20 20 20 20 70  0)<<32) ){.    p
5760: 5b 38 5d 20 3d 20 28 75 38 29 76 3b 0a 20 20 20  [8] = (u8)v;.   
5770: 20 76 20 3e 3e 3d 20 38 3b 0a 20 20 20 20 66 6f   v >>= 8;.    fo
5780: 72 28 69 3d 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d  r(i=7; i>=0; i--
5790: 29 7b 0a 20 20 20 20 20 20 70 5b 69 5d 20 3d 20  ){.      p[i] = 
57a0: 28 75 38 29 28 28 76 20 26 20 30 78 37 66 29 20  (u8)((v & 0x7f) 
57b0: 7c 20 30 78 38 30 29 3b 0a 20 20 20 20 20 20 76  | 0x80);.      v
57c0: 20 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20 20   >>= 7;.    }.  
57d0: 20 20 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d 20    return 9;.  } 
57e0: 20 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 64     .  n = 0;.  d
57f0: 6f 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d 20  o{.    buf[n++] 
5800: 3d 20 28 75 38 29 28 28 76 20 26 20 30 78 37 66  = (u8)((v & 0x7f
5810: 29 20 7c 20 30 78 38 30 29 3b 0a 20 20 20 20 76  ) | 0x80);.    v
5820: 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65   >>= 7;.  }while
5830: 28 20 76 21 3d 30 20 29 3b 0a 20 20 62 75 66 5b  ( v!=0 );.  buf[
5840: 30 5d 20 26 3d 20 30 78 37 66 3b 0a 20 20 61 73  0] &= 0x7f;.  as
5850: 73 65 72 74 28 20 6e 3c 3d 39 20 29 3b 0a 20 20  sert( n<=9 );.  
5860: 66 6f 72 28 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20  for(i=0, j=n-1; 
5870: 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b  j>=0; j--, i++){
5880: 0a 20 20 20 20 70 5b 69 5d 20 3d 20 62 75 66 5b  .    p[i] = buf[
5890: 6a 5d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  j];.  }.  return
58a0: 20 6e 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65   n;.}.int sqlite
58b0: 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
58c0: 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34  ned char *p, u64
58d0: 20 76 29 7b 0a 20 20 69 66 28 20 76 3c 3d 30 78   v){.  if( v<=0x
58e0: 37 66 20 29 7b 0a 20 20 20 20 70 5b 30 5d 20 3d  7f ){.    p[0] =
58f0: 20 76 26 30 78 37 66 3b 0a 20 20 20 20 72 65 74   v&0x7f;.    ret
5900: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28  urn 1;.  }.  if(
5910: 20 76 3c 3d 30 78 33 66 66 66 20 29 7b 0a 20 20   v<=0x3fff ){.  
5920: 20 20 70 5b 30 5d 20 3d 20 28 28 76 3e 3e 37 29    p[0] = ((v>>7)
5930: 26 30 78 37 66 29 7c 30 78 38 30 3b 0a 20 20 20  &0x7f)|0x80;.   
5940: 20 70 5b 31 5d 20 3d 20 76 26 30 78 37 66 3b 0a   p[1] = v&0x7f;.
5950: 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20      return 2;.  
5960: 7d 0a 20 20 72 65 74 75 72 6e 20 70 75 74 56 61  }.  return putVa
5970: 72 69 6e 74 36 34 28 70 2c 76 29 3b 0a 7d 0a 0a  rint64(p,v);.}..
5980: 2f 2a 0a 2a 2a 20 42 69 74 6d 61 73 6b 73 20 75  /*.** Bitmasks u
5990: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 47 65  sed by sqlite3Ge
59a0: 74 56 61 72 69 6e 74 28 29 2e 20 20 54 68 65 73  tVarint().  Thes
59b0: 65 20 70 72 65 63 6f 6d 70 75 74 65 64 20 63 6f  e precomputed co
59c0: 6e 73 74 61 6e 74 73 0a 2a 2a 20 61 72 65 20 64  nstants.** are d
59d0: 65 66 69 6e 65 64 20 68 65 72 65 20 72 61 74 68  efined here rath
59e0: 65 72 20 74 68 61 6e 20 73 69 6d 70 6c 79 20 70  er than simply p
59f0: 75 74 74 69 6e 67 20 74 68 65 20 63 6f 6e 73 74  utting the const
5a00: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 0a  ant expressions.
5a10: 2a 2a 20 69 6e 6c 69 6e 65 20 69 6e 20 6f 72 64  ** inline in ord
5a20: 65 72 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  er to work aroun
5a30: 64 20 62 75 67 73 20 69 6e 20 74 68 65 20 52 56  d bugs in the RV
5a40: 54 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2a 0a 2a  T compiler..**.*
5a50: 2a 20 53 4c 4f 54 5f 32 5f 30 20 20 20 20 20 41  * SLOT_2_0     A
5a60: 20 6d 61 73 6b 20 66 6f 72 20 20 28 30 78 37 66   mask for  (0x7f
5a70: 3c 3c 31 34 29 20 7c 20 30 78 37 66 0a 2a 2a 0a  <<14) | 0x7f.**.
5a80: 2a 2a 20 53 4c 4f 54 5f 34 5f 32 5f 30 20 20 20  ** SLOT_4_2_0   
5a90: 41 20 6d 61 73 6b 20 66 6f 72 20 20 28 30 78 37  A mask for  (0x7
5aa0: 66 3c 3c 32 38 29 20 7c 20 53 4c 4f 54 5f 32 5f  f<<28) | SLOT_2_
5ab0: 30 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 4c 4f  0.*/.#define SLO
5ac0: 54 5f 32 5f 30 20 20 20 20 20 30 78 30 30 31 66  T_2_0     0x001f
5ad0: 63 30 37 66 0a 23 64 65 66 69 6e 65 20 53 4c 4f  c07f.#define SLO
5ae0: 54 5f 34 5f 32 5f 30 20 20 20 30 78 66 30 31 66  T_4_2_0   0xf01f
5af0: 63 30 37 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61  c07f.../*.** Rea
5b00: 64 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61  d a 64-bit varia
5b10: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
5b20: 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73  er from memory s
5b30: 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e  tarting at p[0].
5b40: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
5b50: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
5b60: 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ead.  The value 
5b70: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e  is stored in *v.
5b80: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47 65  .*/.u8 sqlite3Ge
5b90: 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
5ba0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20  signed char *p, 
5bb0: 75 36 34 20 2a 76 29 7b 0a 20 20 75 33 32 20 61  u64 *v){.  u32 a
5bc0: 2c 62 2c 73 3b 0a 0a 20 20 61 20 3d 20 2a 70 3b  ,b,s;..  a = *p;
5bd0: 0a 20 20 2f 2a 20 61 3a 20 70 30 20 28 75 6e 6d  .  /* a: p0 (unm
5be0: 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28  asked) */.  if (
5bf0: 21 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a 20  !(a&0x80)).  {. 
5c00: 20 20 20 2a 76 20 3d 20 61 3b 0a 20 20 20 20 72     *v = a;.    r
5c10: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 0a 20 20  eturn 1;.  }..  
5c20: 70 2b 2b 3b 0a 20 20 62 20 3d 20 2a 70 3b 0a 20  p++;.  b = *p;. 
5c30: 20 2f 2a 20 62 3a 20 70 31 20 28 75 6e 6d 61 73   /* b: p1 (unmas
5c40: 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28  ked) */.  if (!(
5c50: 62 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20  b&0x80)).  {.   
5c60: 20 61 20 26 3d 20 30 78 37 66 3b 0a 20 20 20 20   a &= 0x7f;.    
5c70: 61 20 3d 20 61 3c 3c 37 3b 0a 20 20 20 20 61 20  a = a<<7;.    a 
5c80: 7c 3d 20 62 3b 0a 20 20 20 20 2a 76 20 3d 20 61  |= b;.    *v = a
5c90: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  ;.    return 2;.
5ca0: 20 20 7d 0a 0a 20 20 2f 2a 20 56 65 72 69 66 79    }..  /* Verify
5cb0: 20 74 68 61 74 20 63 6f 6e 73 74 61 6e 74 73 20   that constants 
5cc0: 61 72 65 20 70 72 65 63 6f 6d 70 75 74 65 64 20  are precomputed 
5cd0: 63 6f 72 72 65 63 74 6c 79 20 2a 2f 0a 20 20 61  correctly */.  a
5ce0: 73 73 65 72 74 28 20 53 4c 4f 54 5f 32 5f 30 20  ssert( SLOT_2_0 
5cf0: 3d 3d 20 28 28 30 78 37 66 3c 3c 31 34 29 20 7c  == ((0x7f<<14) |
5d00: 20 28 30 78 37 66 29 29 20 29 3b 0a 20 20 61 73   (0x7f)) );.  as
5d10: 73 65 72 74 28 20 53 4c 4f 54 5f 34 5f 32 5f 30  sert( SLOT_4_2_0
5d20: 20 3d 3d 20 28 28 30 78 66 55 3c 3c 32 38 29 20   == ((0xfU<<28) 
5d30: 7c 20 28 30 78 37 66 3c 3c 31 34 29 20 7c 20 28  | (0x7f<<14) | (
5d40: 30 78 37 66 29 29 20 29 3b 0a 0a 20 20 70 2b 2b  0x7f)) );..  p++
5d50: 3b 0a 20 20 61 20 3d 20 61 3c 3c 31 34 3b 0a 20  ;.  a = a<<14;. 
5d60: 20 61 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61   a |= *p;.  /* a
5d70: 3a 20 70 30 3c 3c 31 34 20 7c 20 70 32 20 28 75  : p0<<14 | p2 (u
5d80: 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66  nmasked) */.  if
5d90: 20 28 21 28 61 26 30 78 38 30 29 29 0a 20 20 7b   (!(a&0x80)).  {
5da0: 0a 20 20 20 20 61 20 26 3d 20 53 4c 4f 54 5f 32  .    a &= SLOT_2
5db0: 5f 30 3b 0a 20 20 20 20 62 20 26 3d 20 30 78 37  _0;.    b &= 0x7
5dc0: 66 3b 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37 3b  f;.    b = b<<7;
5dd0: 0a 20 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20  .    a |= b;.   
5de0: 20 2a 76 20 3d 20 61 3b 0a 20 20 20 20 72 65 74   *v = a;.    ret
5df0: 75 72 6e 20 33 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  urn 3;.  }..  /*
5e00: 20 43 53 45 31 20 66 72 6f 6d 20 62 65 6c 6f 77   CSE1 from below
5e10: 20 2a 2f 0a 20 20 61 20 26 3d 20 53 4c 4f 54 5f   */.  a &= SLOT_
5e20: 32 5f 30 3b 0a 20 20 70 2b 2b 3b 0a 20 20 62 20  2_0;.  p++;.  b 
5e30: 3d 20 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20  = b<<14;.  b |= 
5e40: 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c  *p;.  /* b: p1<<
5e50: 31 34 20 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65  14 | p3 (unmaske
5e60: 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26  d) */.  if (!(b&
5e70: 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 62  0x80)).  {.    b
5e80: 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20 20   &= SLOT_2_0;.  
5e90: 20 20 2f 2a 20 6d 6f 76 65 64 20 43 53 45 31 20    /* moved CSE1 
5ea0: 75 70 20 2a 2f 0a 20 20 20 20 2f 2a 20 61 20 26  up */.    /* a &
5eb0: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
5ec0: 37 66 29 3b 20 2a 2f 0a 20 20 20 20 61 20 3d 20  7f); */.    a = 
5ed0: 61 3c 3c 37 3b 0a 20 20 20 20 61 20 7c 3d 20 62  a<<7;.    a |= b
5ee0: 3b 0a 20 20 20 20 2a 76 20 3d 20 61 3b 0a 20 20  ;.    *v = a;.  
5ef0: 20 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a    return 4;.  }.
5f00: 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 31 34 20  .  /* a: p0<<14 
5f10: 7c 20 70 32 20 28 6d 61 73 6b 65 64 29 20 2a 2f  | p2 (masked) */
5f20: 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c 31 34 20  .  /* b: p1<<14 
5f30: 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65 64 29 20  | p3 (unmasked) 
5f40: 2a 2f 0a 20 20 2f 2a 20 31 3a 73 61 76 65 20 6f  */.  /* 1:save o
5f50: 66 66 20 70 30 3c 3c 32 31 20 7c 20 70 31 3c 3c  ff p0<<21 | p1<<
5f60: 31 34 20 7c 20 70 32 3c 3c 37 20 7c 20 70 33 20  14 | p2<<7 | p3 
5f70: 28 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 2f 2a  (masked) */.  /*
5f80: 20 6d 6f 76 65 64 20 43 53 45 31 20 75 70 20 2a   moved CSE1 up *
5f90: 2f 0a 20 20 2f 2a 20 61 20 26 3d 20 28 30 78 37  /.  /* a &= (0x7
5fa0: 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20 2a  f<<14)|(0x7f); *
5fb0: 2f 0a 20 20 62 20 26 3d 20 53 4c 4f 54 5f 32 5f  /.  b &= SLOT_2_
5fc0: 30 3b 0a 20 20 73 20 3d 20 61 3b 0a 20 20 2f 2a  0;.  s = a;.  /*
5fd0: 20 73 3a 20 70 30 3c 3c 31 34 20 7c 20 70 32 20   s: p0<<14 | p2 
5fe0: 28 6d 61 73 6b 65 64 29 20 2a 2f 0a 0a 20 20 70  (masked) */..  p
5ff0: 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c 3c 31 34 3b  ++;.  a = a<<14;
6000: 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a  .  a |= *p;.  /*
6010: 20 61 3a 20 70 30 3c 3c 32 38 20 7c 20 70 32 3c   a: p0<<28 | p2<
6020: 3c 31 34 20 7c 20 70 34 20 28 75 6e 6d 61 73 6b  <14 | p4 (unmask
6030: 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28 61  ed) */.  if (!(a
6040: 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20 20  &0x80)).  {.    
6050: 2f 2a 20 77 65 20 63 61 6e 20 73 6b 69 70 20 74  /* we can skip t
6060: 68 65 73 65 20 63 61 75 73 65 20 74 68 65 79 20  hese cause they 
6070: 77 65 72 65 20 28 65 66 66 65 63 74 69 76 65 6c  were (effectivel
6080: 79 29 20 64 6f 6e 65 20 61 62 6f 76 65 0a 20 20  y) done above.  
6090: 20 20 2a 2a 20 77 68 69 6c 65 20 63 61 6c 63 75    ** while calcu
60a0: 6c 61 74 69 6e 67 20 73 20 2a 2f 0a 20 20 20 20  lating s */.    
60b0: 2f 2a 20 61 20 26 3d 20 28 30 78 37 66 3c 3c 32  /* a &= (0x7f<<2
60c0: 38 29 7c 28 30 78 37 66 3c 3c 31 34 29 7c 28 30  8)|(0x7f<<14)|(0
60d0: 78 37 66 29 3b 20 2a 2f 0a 20 20 20 20 2f 2a 20  x7f); */.    /* 
60e0: 62 20 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c  b &= (0x7f<<14)|
60f0: 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20 20 20 62  (0x7f); */.    b
6100: 20 3d 20 62 3c 3c 37 3b 0a 20 20 20 20 61 20 7c   = b<<7;.    a |
6110: 3d 20 62 3b 0a 20 20 20 20 73 20 3d 20 73 3e 3e  = b;.    s = s>>
6120: 31 38 3b 0a 20 20 20 20 2a 76 20 3d 20 28 28 75  18;.    *v = ((u
6130: 36 34 29 73 29 3c 3c 33 32 20 7c 20 61 3b 0a 20  64)s)<<32 | a;. 
6140: 20 20 20 72 65 74 75 72 6e 20 35 3b 0a 20 20 7d     return 5;.  }
6150: 0a 0a 20 20 2f 2a 20 32 3a 73 61 76 65 20 6f 66  ..  /* 2:save of
6160: 66 20 70 30 3c 3c 32 31 20 7c 20 70 31 3c 3c 31  f p0<<21 | p1<<1
6170: 34 20 7c 20 70 32 3c 3c 37 20 7c 20 70 33 20 28  4 | p2<<7 | p3 (
6180: 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 73 20 3d  masked) */.  s =
6190: 20 73 3c 3c 37 3b 0a 20 20 73 20 7c 3d 20 62 3b   s<<7;.  s |= b;
61a0: 0a 20 20 2f 2a 20 73 3a 20 70 30 3c 3c 32 31 20  .  /* s: p0<<21 
61b0: 7c 20 70 31 3c 3c 31 34 20 7c 20 70 32 3c 3c 37  | p1<<14 | p2<<7
61c0: 20 7c 20 70 33 20 28 6d 61 73 6b 65 64 29 20 2a   | p3 (masked) *
61d0: 2f 0a 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d 20  /..  p++;.  b = 
61e0: 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20 2a 70  b<<14;.  b |= *p
61f0: 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c 32 38  ;.  /* b: p1<<28
6200: 20 7c 20 70 33 3c 3c 31 34 20 7c 20 70 35 20 28   | p3<<14 | p5 (
6210: 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69  unmasked) */.  i
6220: 66 20 28 21 28 62 26 30 78 38 30 29 29 0a 20 20  f (!(b&0x80)).  
6230: 7b 0a 20 20 20 20 2f 2a 20 77 65 20 63 61 6e 20  {.    /* we can 
6240: 73 6b 69 70 20 74 68 69 73 20 63 61 75 73 65 20  skip this cause 
6250: 69 74 20 77 61 73 20 28 65 66 66 65 63 74 69 76  it was (effectiv
6260: 65 6c 79 29 20 64 6f 6e 65 20 61 62 6f 76 65 20  ely) done above 
6270: 69 6e 20 63 61 6c 63 27 69 6e 67 20 73 20 2a 2f  in calc'ing s */
6280: 0a 20 20 20 20 2f 2a 20 62 20 26 3d 20 28 30 78  .    /* b &= (0x
6290: 37 66 3c 3c 32 38 29 7c 28 30 78 37 66 3c 3c 31  7f<<28)|(0x7f<<1
62a0: 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20  4)|(0x7f); */.  
62b0: 20 20 61 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b    a &= SLOT_2_0;
62c0: 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20  .    a = a<<7;. 
62d0: 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73     a |= b;.    s
62e0: 20 3d 20 73 3e 3e 31 38 3b 0a 20 20 20 20 2a 76   = s>>18;.    *v
62f0: 20 3d 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20   = ((u64)s)<<32 
6300: 7c 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | a;.    return 
6310: 36 3b 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20  6;.  }..  p++;. 
6320: 20 61 20 3d 20 61 3c 3c 31 34 3b 0a 20 20 61 20   a = a<<14;.  a 
6330: 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70  |= *p;.  /* a: p
6340: 32 3c 3c 32 38 20 7c 20 70 34 3c 3c 31 34 20 7c  2<<28 | p4<<14 |
6350: 20 70 36 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a   p6 (unmasked) *
6360: 2f 0a 20 20 69 66 20 28 21 28 61 26 30 78 38 30  /.  if (!(a&0x80
6370: 29 29 0a 20 20 7b 0a 20 20 20 20 61 20 26 3d 20  )).  {.    a &= 
6380: 53 4c 4f 54 5f 34 5f 32 5f 30 3b 0a 20 20 20 20  SLOT_4_2_0;.    
6390: 62 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20  b &= SLOT_2_0;. 
63a0: 20 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20 20     b = b<<7;.   
63b0: 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73 20 3d   a |= b;.    s =
63c0: 20 73 3e 3e 31 31 3b 0a 20 20 20 20 2a 76 20 3d   s>>11;.    *v =
63d0: 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20 7c 20   ((u64)s)<<32 | 
63e0: 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 37 3b  a;.    return 7;
63f0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 53 45 32 20  .  }..  /* CSE2 
6400: 66 72 6f 6d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  from below */.  
6410: 61 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20  a &= SLOT_2_0;. 
6420: 20 70 2b 2b 3b 0a 20 20 62 20 3d 20 62 3c 3c 31   p++;.  b = b<<1
6430: 34 3b 0a 20 20 62 20 7c 3d 20 2a 70 3b 0a 20 20  4;.  b |= *p;.  
6440: 2f 2a 20 62 3a 20 70 33 3c 3c 32 38 20 7c 20 70  /* b: p3<<28 | p
6450: 35 3c 3c 31 34 20 7c 20 70 37 20 28 75 6e 6d 61  5<<14 | p7 (unma
6460: 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21  sked) */.  if (!
6470: 28 62 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20  (b&0x80)).  {.  
6480: 20 20 62 20 26 3d 20 53 4c 4f 54 5f 34 5f 32 5f    b &= SLOT_4_2_
6490: 30 3b 0a 20 20 20 20 2f 2a 20 6d 6f 76 65 64 20  0;.    /* moved 
64a0: 43 53 45 32 20 75 70 20 2a 2f 0a 20 20 20 20 2f  CSE2 up */.    /
64b0: 2a 20 61 20 26 3d 20 28 30 78 37 66 3c 3c 31 34  * a &= (0x7f<<14
64c0: 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20 20  )|(0x7f); */.   
64d0: 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20 20 20 61   a = a<<7;.    a
64e0: 20 7c 3d 20 62 3b 0a 20 20 20 20 73 20 3d 20 73   |= b;.    s = s
64f0: 3e 3e 34 3b 0a 20 20 20 20 2a 76 20 3d 20 28 28  >>4;.    *v = ((
6500: 75 36 34 29 73 29 3c 3c 33 32 20 7c 20 61 3b 0a  u64)s)<<32 | a;.
6510: 20 20 20 20 72 65 74 75 72 6e 20 38 3b 0a 20 20      return 8;.  
6520: 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20  }..  p++;.  a = 
6530: 61 3c 3c 31 35 3b 0a 20 20 61 20 7c 3d 20 2a 70  a<<15;.  a |= *p
6540: 3b 0a 20 20 2f 2a 20 61 3a 20 70 34 3c 3c 32 39  ;.  /* a: p4<<29
6550: 20 7c 20 70 36 3c 3c 31 35 20 7c 20 70 38 20 28   | p6<<15 | p8 (
6560: 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 0a 20 20  unmasked) */..  
6570: 2f 2a 20 6d 6f 76 65 64 20 43 53 45 32 20 75 70  /* moved CSE2 up
6580: 20 2a 2f 0a 20 20 2f 2a 20 61 20 26 3d 20 28 30   */.  /* a &= (0
6590: 78 37 66 3c 3c 32 39 29 7c 28 30 78 37 66 3c 3c  x7f<<29)|(0x7f<<
65a0: 31 35 29 7c 28 30 78 66 66 29 3b 20 2a 2f 0a 20  15)|(0xff); */. 
65b0: 20 62 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a   b &= SLOT_2_0;.
65c0: 20 20 62 20 3d 20 62 3c 3c 38 3b 0a 20 20 61 20    b = b<<8;.  a 
65d0: 7c 3d 20 62 3b 0a 0a 20 20 73 20 3d 20 73 3c 3c  |= b;..  s = s<<
65e0: 34 3b 0a 20 20 62 20 3d 20 70 5b 2d 34 5d 3b 0a  4;.  b = p[-4];.
65f0: 20 20 62 20 26 3d 20 30 78 37 66 3b 0a 20 20 62    b &= 0x7f;.  b
6600: 20 3d 20 62 3e 3e 33 3b 0a 20 20 73 20 7c 3d 20   = b>>3;.  s |= 
6610: 62 3b 0a 0a 20 20 2a 76 20 3d 20 28 28 75 36 34  b;..  *v = ((u64
6620: 29 73 29 3c 3c 33 32 20 7c 20 61 3b 0a 0a 20 20  )s)<<32 | a;..  
6630: 72 65 74 75 72 6e 20 39 3b 0a 7d 0a 0a 2f 2a 0a  return 9;.}../*.
6640: 2a 2a 20 52 65 61 64 20 61 20 33 32 2d 62 69 74  ** Read a 32-bit
6650: 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
6660: 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65   integer from me
6670: 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74  mory starting at
6680: 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e   p[0]..** Return
6690: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
66a0: 79 74 65 73 20 72 65 61 64 2e 20 20 54 68 65 20  ytes read.  The 
66b0: 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20  value is stored 
66c0: 69 6e 20 2a 76 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  in *v..**.** If 
66d0: 74 68 65 20 76 61 72 69 6e 74 20 73 74 6f 72 65  the varint store
66e0: 64 20 69 6e 20 70 5b 30 5d 20 69 73 20 6c 61 72  d in p[0] is lar
66f0: 67 65 72 20 74 68 61 6e 20 63 61 6e 20 66 69 74  ger than can fit
6700: 20 69 6e 20 61 20 33 32 2d 62 69 74 20 75 6e 73   in a 32-bit uns
6710: 69 67 6e 65 64 0a 2a 2a 20 69 6e 74 65 67 65 72  igned.** integer
6720: 2c 20 74 68 65 6e 20 73 65 74 20 2a 76 20 74 6f  , then set *v to
6730: 20 30 78 66 66 66 66 66 66 66 66 2e 0a 2a 2a 0a   0xffffffff..**.
6740: 2a 2a 20 41 20 4d 41 43 52 4f 20 76 65 72 73 69  ** A MACRO versi
6750: 6f 6e 2c 20 67 65 74 56 61 72 69 6e 74 33 32 2c  on, getVarint32,
6760: 20 69 73 20 70 72 6f 76 69 64 65 64 20 77 68 69   is provided whi
6770: 63 68 20 69 6e 6c 69 6e 65 73 20 74 68 65 20 0a  ch inlines the .
6780: 2a 2a 20 73 69 6e 67 6c 65 2d 62 79 74 65 20 63  ** single-byte c
6790: 61 73 65 2e 20 20 41 6c 6c 20 63 6f 64 65 20 73  ase.  All code s
67a0: 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41  hould use the MA
67b0: 43 52 4f 20 76 65 72 73 69 6f 6e 20 61 73 20 0a  CRO version as .
67c0: 2a 2a 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** this function
67d0: 20 61 73 73 75 6d 65 73 20 74 68 65 20 73 69 6e   assumes the sin
67e0: 67 6c 65 2d 62 79 74 65 20 63 61 73 65 20 68 61  gle-byte case ha
67f0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 68  s already been h
6800: 61 6e 64 6c 65 64 2e 0a 2a 2f 0a 75 38 20 73 71  andled..*/.u8 sq
6810: 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
6820: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
6830: 63 68 61 72 20 2a 70 2c 20 75 33 32 20 2a 76 29  char *p, u32 *v)
6840: 7b 0a 20 20 75 33 32 20 61 2c 62 3b 0a 0a 20 20  {.  u32 a,b;..  
6850: 2f 2a 20 54 68 65 20 31 2d 62 79 74 65 20 63 61  /* The 1-byte ca
6860: 73 65 2e 20 20 4f 76 65 72 77 68 65 6c 6d 69 6e  se.  Overwhelmin
6870: 67 6c 79 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d  gly the most com
6880: 6d 6f 6e 2e 20 20 48 61 6e 64 6c 65 64 20 69 6e  mon.  Handled in
6890: 6c 69 6e 65 0a 20 20 2a 2a 20 62 79 20 74 68 65  line.  ** by the
68a0: 20 67 65 74 56 61 72 69 6e 33 32 28 29 20 6d 61   getVarin32() ma
68b0: 63 72 6f 20 2a 2f 0a 20 20 61 20 3d 20 2a 70 3b  cro */.  a = *p;
68c0: 0a 20 20 2f 2a 20 61 3a 20 70 30 20 28 75 6e 6d  .  /* a: p0 (unm
68d0: 61 73 6b 65 64 29 20 2a 2f 0a 23 69 66 6e 64 65  asked) */.#ifnde
68e0: 66 20 67 65 74 56 61 72 69 6e 74 33 32 0a 20 20  f getVarint32.  
68f0: 69 66 20 28 21 28 61 26 30 78 38 30 29 29 0a 20  if (!(a&0x80)). 
6900: 20 7b 0a 20 20 20 20 2f 2a 20 56 61 6c 75 65 73   {.    /* Values
6910: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 31   between 0 and 1
6920: 32 37 20 2a 2f 0a 20 20 20 20 2a 76 20 3d 20 61  27 */.    *v = a
6930: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
6940: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
6950: 20 54 68 65 20 32 2d 62 79 74 65 20 63 61 73 65   The 2-byte case
6960: 20 2a 2f 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d   */.  p++;.  b =
6970: 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 20   *p;.  /* b: p1 
6980: 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20  (unmasked) */.  
6990: 69 66 20 28 21 28 62 26 30 78 38 30 29 29 0a 20  if (!(b&0x80)). 
69a0: 20 7b 0a 20 20 20 20 2f 2a 20 56 61 6c 75 65 73   {.    /* Values
69b0: 20 62 65 74 77 65 65 6e 20 31 32 38 20 61 6e 64   between 128 and
69c0: 20 31 36 33 38 33 20 2a 2f 0a 20 20 20 20 61 20   16383 */.    a 
69d0: 26 3d 20 30 78 37 66 3b 0a 20 20 20 20 61 20 3d  &= 0x7f;.    a =
69e0: 20 61 3c 3c 37 3b 0a 20 20 20 20 2a 76 20 3d 20   a<<7;.    *v = 
69f0: 61 20 7c 20 62 3b 0a 20 20 20 20 72 65 74 75 72  a | b;.    retur
6a00: 6e 20 32 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  n 2;.  }..  /* T
6a10: 68 65 20 33 2d 62 79 74 65 20 63 61 73 65 20 2a  he 3-byte case *
6a20: 2f 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20 61  /.  p++;.  a = a
6a30: 3c 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b  <<14;.  a |= *p;
6a40: 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 31 34 20  .  /* a: p0<<14 
6a50: 7c 20 70 32 20 28 75 6e 6d 61 73 6b 65 64 29 20  | p2 (unmasked) 
6a60: 2a 2f 0a 20 20 69 66 20 28 21 28 61 26 30 78 38  */.  if (!(a&0x8
6a70: 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 56  0)).  {.    /* V
6a80: 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 31 36  alues between 16
6a90: 33 38 34 20 61 6e 64 20 32 30 39 37 31 35 31 20  384 and 2097151 
6aa0: 2a 2f 0a 20 20 20 20 61 20 26 3d 20 28 30 78 37  */.    a &= (0x7
6ab0: 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 0a 20  f<<14)|(0x7f);. 
6ac0: 20 20 20 62 20 26 3d 20 30 78 37 66 3b 0a 20 20     b &= 0x7f;.  
6ad0: 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20 20 20    b = b<<7;.    
6ae0: 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20 20 20  *v = a | b;.    
6af0: 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d 0a 0a 20  return 3;.  }.. 
6b00: 20 2f 2a 20 41 20 33 32 2d 62 69 74 20 76 61 72   /* A 32-bit var
6b10: 69 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  int is used to s
6b20: 74 6f 72 65 20 73 69 7a 65 20 69 6e 66 6f 72 6d  tore size inform
6b30: 61 74 69 6f 6e 20 69 6e 20 62 74 72 65 65 73 2e  ation in btrees.
6b40: 0a 20 20 2a 2a 20 4f 62 6a 65 63 74 73 20 61 72  .  ** Objects ar
6b50: 65 20 72 61 72 65 6c 79 20 6c 61 72 67 65 72 20  e rarely larger 
6b60: 74 68 61 6e 20 32 4d 69 42 20 6c 69 6d 69 74 20  than 2MiB limit 
6b70: 6f 66 20 61 20 33 2d 62 79 74 65 20 76 61 72 69  of a 3-byte vari
6b80: 6e 74 2e 0a 20 20 2a 2a 20 41 20 33 2d 62 79 74  nt..  ** A 3-byt
6b90: 65 20 76 61 72 69 6e 74 20 69 73 20 73 75 66 66  e varint is suff
6ba0: 69 63 69 65 6e 74 2c 20 66 6f 72 20 65 78 61 6d  icient, for exam
6bb0: 70 6c 65 2c 20 74 6f 20 72 65 63 6f 72 64 20 74  ple, to record t
6bc0: 68 65 20 73 69 7a 65 0a 20 20 2a 2a 20 6f 66 20  he size.  ** of 
6bd0: 61 20 31 30 34 38 35 36 39 2d 62 79 74 65 20 42  a 1048569-byte B
6be0: 4c 4f 42 20 6f 72 20 73 74 72 69 6e 67 2e 0a 20  LOB or string.. 
6bf0: 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 6f 6e 6c 79   **.  ** We only
6c00: 20 75 6e 72 6f 6c 6c 20 74 68 65 20 66 69 72 73   unroll the firs
6c10: 74 20 31 2d 2c 20 32 2d 2c 20 61 6e 64 20 33 2d  t 1-, 2-, and 3-
6c20: 20 62 79 74 65 20 63 61 73 65 73 2e 20 20 54 68   byte cases.  Th
6c30: 65 20 76 65 72 79 0a 20 20 2a 2a 20 72 61 72 65  e very.  ** rare
6c40: 20 6c 61 72 67 65 72 20 63 61 73 65 73 20 63 61   larger cases ca
6c50: 6e 20 62 65 20 68 61 6e 64 6c 65 64 20 62 79 20  n be handled by 
6c60: 74 68 65 20 73 6c 6f 77 65 72 20 36 34 2d 62 69  the slower 64-bi
6c70: 74 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 72 6f  t varint.  ** ro
6c80: 75 74 69 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 20  utine..  */.#if 
6c90: 31 0a 20 20 7b 0a 20 20 20 20 75 36 34 20 76 36  1.  {.    u64 v6
6ca0: 34 3b 0a 20 20 20 20 75 38 20 6e 3b 0a 0a 20 20  4;.    u8 n;..  
6cb0: 20 20 70 20 2d 3d 20 32 3b 0a 20 20 20 20 6e 20    p -= 2;.    n 
6cc0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
6cd0: 6e 74 28 70 2c 20 26 76 36 34 29 3b 0a 20 20 20  nt(p, &v64);.   
6ce0: 20 61 73 73 65 72 74 28 20 6e 3e 33 20 26 26 20   assert( n>3 && 
6cf0: 6e 3c 3d 39 20 29 3b 0a 20 20 20 20 69 66 28 20  n<=9 );.    if( 
6d00: 28 76 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  (v64 & SQLITE_MA
6d10: 58 5f 55 33 32 29 21 3d 76 36 34 20 29 7b 0a 20  X_U32)!=v64 ){. 
6d20: 20 20 20 20 20 2a 76 20 3d 20 30 78 66 66 66 66       *v = 0xffff
6d30: 66 66 66 66 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ffff;.    }else{
6d40: 0a 20 20 20 20 20 20 2a 76 20 3d 20 28 75 33 32  .      *v = (u32
6d50: 29 76 36 34 3b 0a 20 20 20 20 7d 0a 20 20 20 20  )v64;.    }.    
6d60: 72 65 74 75 72 6e 20 6e 3b 0a 20 20 7d 0a 0a 23  return n;.  }..#
6d70: 65 6c 73 65 0a 20 20 2f 2a 20 46 6f 72 20 66 6f  else.  /* For fo
6d80: 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 28 6b 65  llowing code (ke
6d90: 70 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61  pt for historica
6da0: 6c 20 72 65 63 6f 72 64 20 6f 6e 6c 79 29 20 73  l record only) s
6db0: 68 6f 77 73 20 61 6e 0a 20 20 2a 2a 20 75 6e 72  hows an.  ** unr
6dc0: 6f 6c 6c 69 6e 67 20 66 6f 72 20 74 68 65 20 33  olling for the 3
6dd0: 2d 20 61 6e 64 20 34 2d 62 79 74 65 20 76 61 72  - and 4-byte var
6de0: 69 6e 74 20 63 61 73 65 73 2e 20 20 54 68 69 73  int cases.  This
6df0: 20 63 6f 64 65 20 69 73 0a 20 20 2a 2a 20 73 6c   code is.  ** sl
6e00: 69 67 68 74 6c 79 20 66 61 73 74 65 72 2c 20 62  ightly faster, b
6e10: 75 74 20 69 74 20 69 73 20 61 6c 73 6f 20 6c 61  ut it is also la
6e20: 72 67 65 72 20 61 6e 64 20 6d 75 63 68 20 68 61  rger and much ha
6e30: 72 64 65 72 20 74 6f 20 74 65 73 74 2e 0a 20 20  rder to test..  
6e40: 2a 2f 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d 20  */.  p++;.  b = 
6e50: 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20 2a 70  b<<14;.  b |= *p
6e60: 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c 31 34  ;.  /* b: p1<<14
6e70: 20 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65 64 29   | p3 (unmasked)
6e80: 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26 30 78   */.  if (!(b&0x
6e90: 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  80)).  {.    /* 
6ea0: 56 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 32  Values between 2
6eb0: 30 39 37 31 35 32 20 61 6e 64 20 32 36 38 34 33  097152 and 26843
6ec0: 35 34 35 35 20 2a 2f 0a 20 20 20 20 62 20 26 3d  5455 */.    b &=
6ed0: 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78 37   (0x7f<<14)|(0x7
6ee0: 66 29 3b 0a 20 20 20 20 61 20 26 3d 20 28 30 78  f);.    a &= (0x
6ef0: 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 0a  7f<<14)|(0x7f);.
6f00: 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20      a = a<<7;.  
6f10: 20 20 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20    *v = a | b;.  
6f20: 20 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a    return 4;.  }.
6f30: 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c  .  p++;.  a = a<
6f40: 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a  <14;.  a |= *p;.
6f50: 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 32 38 20 7c    /* a: p0<<28 |
6f60: 20 70 32 3c 3c 31 34 20 7c 20 70 34 20 28 75 6e   p2<<14 | p4 (un
6f70: 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20  masked) */.  if 
6f80: 28 21 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a  (!(a&0x80)).  {.
6f90: 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 20 62      /* Values  b
6fa0: 65 74 77 65 65 6e 20 32 36 38 34 33 35 34 35 36  etween 268435456
6fb0: 20 61 6e 64 20 33 34 33 35 39 37 33 38 33 36 37   and 34359738367
6fc0: 20 2a 2f 0a 20 20 20 20 61 20 26 3d 20 53 4c 4f   */.    a &= SLO
6fd0: 54 5f 34 5f 32 5f 30 3b 0a 20 20 20 20 62 20 26  T_4_2_0;.    b &
6fe0: 3d 20 53 4c 4f 54 5f 34 5f 32 5f 30 3b 0a 20 20  = SLOT_4_2_0;.  
6ff0: 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20 20 20    b = b<<7;.    
7000: 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20 20 20  *v = a | b;.    
7010: 72 65 74 75 72 6e 20 35 3b 0a 20 20 7d 0a 0a 20  return 5;.  }.. 
7020: 20 2f 2a 20 57 65 20 63 61 6e 20 6f 6e 6c 79 20   /* We can only 
7030: 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
7040: 20 77 68 65 6e 20 72 65 61 64 69 6e 67 20 61 20   when reading a 
7050: 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
7060: 0a 20 20 2a 2a 20 66 69 6c 65 2e 20 20 49 6e 20  .  ** file.  In 
7070: 74 68 61 74 20 63 61 73 65 20 77 65 20 61 72 65  that case we are
7080: 20 6e 6f 74 20 69 6e 20 61 6e 79 20 68 75 72 72   not in any hurr
7090: 79 2e 20 20 55 73 65 20 74 68 65 20 28 72 65 6c  y.  Use the (rel
70a0: 61 74 69 76 65 6c 79 0a 20 20 2a 2a 20 73 6c 6f  atively.  ** slo
70b0: 77 29 20 67 65 6e 65 72 61 6c 2d 70 75 72 70 6f  w) general-purpo
70c0: 73 65 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  se sqlite3GetVar
70d0: 69 6e 74 28 29 20 72 6f 75 74 69 6e 65 20 74 6f  int() routine to
70e0: 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 2a   extract the.  *
70f0: 2a 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 7b 0a  * value. */.  {.
7100: 20 20 20 20 75 36 34 20 76 36 34 3b 0a 20 20 20      u64 v64;.   
7110: 20 75 38 20 6e 3b 0a 0a 20 20 20 20 70 20 2d 3d   u8 n;..    p -=
7120: 20 34 3b 0a 20 20 20 20 6e 20 3d 20 73 71 6c 69   4;.    n = sqli
7130: 74 65 33 47 65 74 56 61 72 69 6e 74 28 70 2c 20  te3GetVarint(p, 
7140: 26 76 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72  &v64);.    asser
7150: 74 28 20 6e 3e 35 20 26 26 20 6e 3c 3d 39 20 29  t( n>5 && n<=9 )
7160: 3b 0a 20 20 20 20 2a 76 20 3d 20 28 75 33 32 29  ;.    *v = (u32)
7170: 76 36 34 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  v64;.    return 
7180: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a  n;.  }.#endif.}.
7190: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
71a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
71b0: 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 6e  s that will be n
71c0: 65 65 64 65 64 20 74 6f 20 73 74 6f 72 65 20 74  eeded to store t
71d0: 68 65 20 67 69 76 65 6e 0a 2a 2a 20 36 34 2d 62  he given.** 64-b
71e0: 69 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69  it integer..*/.i
71f0: 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
7200: 4c 65 6e 28 75 36 34 20 76 29 7b 0a 20 20 69 6e  Len(u64 v){.  in
7210: 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20  t i;.  for(i=1; 
7220: 28 76 20 3e 3e 3d 20 37 29 21 3d 30 3b 20 69 2b  (v >>= 7)!=0; i+
7230: 2b 29 7b 20 61 73 73 65 72 74 28 20 69 3c 31 30  +){ assert( i<10
7240: 20 29 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 69   ); }.  return i
7250: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  ;.}.../*.** Read
7260: 20 6f 72 20 77 72 69 74 65 20 61 20 66 6f 75 72   or write a four
7270: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7280: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
7290: 2a 2f 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  */.u32 sqlite3Ge
72a0: 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 20  t4byte(const u8 
72b0: 2a 70 29 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p){.#if SQLITE_
72c0: 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a  BYTEORDER==4321.
72d0: 20 20 75 33 32 20 78 3b 0a 20 20 6d 65 6d 63 70    u32 x;.  memcp
72e0: 79 28 26 78 2c 70 2c 34 29 3b 0a 20 20 72 65 74  y(&x,p,4);.  ret
72f0: 75 72 6e 20 78 3b 0a 23 65 6c 69 66 20 53 51 4c  urn x;.#elif SQL
7300: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31  ITE_BYTEORDER==1
7310: 32 33 34 20 26 26 20 21 64 65 66 69 6e 65 64 28  234 && !defined(
7320: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
7330: 4e 54 52 49 4e 53 49 43 29 20 5c 0a 20 20 20 20  NTRINSIC) \.    
7340: 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  && defined(__GNU
7350: 43 5f 5f 29 20 26 26 20 47 43 43 5f 56 45 52 53  C__) && GCC_VERS
7360: 49 4f 4e 3e 3d 34 30 30 33 30 30 30 0a 20 20 75  ION>=4003000.  u
7370: 33 32 20 78 3b 0a 20 20 6d 65 6d 63 70 79 28 26  32 x;.  memcpy(&
7380: 78 2c 70 2c 34 29 3b 0a 20 20 72 65 74 75 72 6e  x,p,4);.  return
7390: 20 5f 5f 62 75 69 6c 74 69 6e 5f 62 73 77 61 70   __builtin_bswap
73a0: 33 32 28 78 29 3b 0a 23 65 6c 69 66 20 53 51 4c  32(x);.#elif SQL
73b0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31  ITE_BYTEORDER==1
73c0: 32 33 34 20 26 26 20 21 64 65 66 69 6e 65 64 28  234 && !defined(
73d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
73e0: 4e 54 52 49 4e 53 49 43 29 20 5c 0a 20 20 20 20  NTRINSIC) \.    
73f0: 26 26 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f  && defined(_MSC_
7400: 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52  VER) && _MSC_VER
7410: 3e 3d 31 33 30 30 0a 20 20 75 33 32 20 78 3b 0a  >=1300.  u32 x;.
7420: 20 20 6d 65 6d 63 70 79 28 26 78 2c 70 2c 34 29    memcpy(&x,p,4)
7430: 3b 0a 20 20 72 65 74 75 72 6e 20 5f 62 79 74 65  ;.  return _byte
7440: 73 77 61 70 5f 75 6c 6f 6e 67 28 78 29 3b 0a 23  swap_ulong(x);.#
7450: 65 6c 73 65 0a 20 20 74 65 73 74 63 61 73 65 28  else.  testcase(
7460: 20 70 5b 30 5d 26 30 78 38 30 20 29 3b 0a 20 20   p[0]&0x80 );.  
7470: 72 65 74 75 72 6e 20 28 28 75 6e 73 69 67 6e 65  return ((unsigne
7480: 64 29 70 5b 30 5d 3c 3c 32 34 29 20 7c 20 28 70  d)p[0]<<24) | (p
7490: 5b 31 5d 3c 3c 31 36 29 20 7c 20 28 70 5b 32 5d  [1]<<16) | (p[2]
74a0: 3c 3c 38 29 20 7c 20 70 5b 33 5d 3b 0a 23 65 6e  <<8) | p[3];.#en
74b0: 64 69 66 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  dif.}.void sqlit
74c0: 65 33 50 75 74 34 62 79 74 65 28 75 6e 73 69 67  e3Put4byte(unsig
74d0: 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75 33 32  ned char *p, u32
74e0: 20 76 29 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f   v){.#if SQLITE_
74f0: 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a  BYTEORDER==4321.
7500: 20 20 6d 65 6d 63 70 79 28 70 2c 26 76 2c 34 29    memcpy(p,&v,4)
7510: 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42  ;.#elif SQLITE_B
7520: 59 54 45 4f 52 44 45 52 3d 3d 31 32 33 34 20 26  YTEORDER==1234 &
7530: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
7540: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
7550: 53 49 43 29 20 5c 0a 20 20 20 20 26 26 20 64 65  SIC) \.    && de
7560: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
7570: 26 26 20 47 43 43 5f 56 45 52 53 49 4f 4e 3e 3d  && GCC_VERSION>=
7580: 34 30 30 33 30 30 30 0a 20 20 75 33 32 20 78 20  4003000.  u32 x 
7590: 3d 20 5f 5f 62 75 69 6c 74 69 6e 5f 62 73 77 61  = __builtin_bswa
75a0: 70 33 32 28 76 29 3b 0a 20 20 6d 65 6d 63 70 79  p32(v);.  memcpy
75b0: 28 70 2c 26 78 2c 34 29 3b 0a 23 65 6c 69 66 20  (p,&x,4);.#elif 
75c0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
75d0: 3d 3d 31 32 33 34 20 26 26 20 21 64 65 66 69 6e  ==1234 && !defin
75e0: 65 64 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ed(SQLITE_DISABL
75f0: 45 5f 49 4e 54 52 49 4e 53 49 43 29 20 5c 0a 20  E_INTRINSIC) \. 
7600: 20 20 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d     && defined(_M
7610: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
7620: 56 45 52 3e 3d 31 33 30 30 0a 20 20 75 33 32 20  VER>=1300.  u32 
7630: 78 20 3d 20 5f 62 79 74 65 73 77 61 70 5f 75 6c  x = _byteswap_ul
7640: 6f 6e 67 28 76 29 3b 0a 20 20 6d 65 6d 63 70 79  ong(v);.  memcpy
7650: 28 70 2c 26 78 2c 34 29 3b 0a 23 65 6c 73 65 0a  (p,&x,4);.#else.
7660: 20 20 70 5b 30 5d 20 3d 20 28 75 38 29 28 76 3e    p[0] = (u8)(v>
7670: 3e 32 34 29 3b 0a 20 20 70 5b 31 5d 20 3d 20 28  >24);.  p[1] = (
7680: 75 38 29 28 76 3e 3e 31 36 29 3b 0a 20 20 70 5b  u8)(v>>16);.  p[
7690: 32 5d 20 3d 20 28 75 38 29 28 76 3e 3e 38 29 3b  2] = (u8)(v>>8);
76a0: 0a 20 20 70 5b 33 5d 20 3d 20 28 75 38 29 76 3b  .  p[3] = (u8)v;
76b0: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 0a 0a 2f 2a 0a  .#endif.}..../*.
76c0: 2a 2a 20 54 72 61 6e 73 6c 61 74 65 20 61 20 73  ** Translate a s
76d0: 69 6e 67 6c 65 20 62 79 74 65 20 6f 66 20 48 65  ingle byte of He
76e0: 78 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  x into an intege
76f0: 72 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  r..** This routi
7700: 6e 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  ne only works if
7710: 20 68 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76   h really is a v
7720: 61 6c 69 64 20 68 65 78 61 64 65 63 69 6d 61 6c  alid hexadecimal
7730: 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 3a 20 20  .** character:  
7740: 30 2e 2e 39 61 2e 2e 66 41 2e 2e 46 0a 2a 2f 0a  0..9a..fA..F.*/.
7750: 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
7760: 6e 74 28 69 6e 74 20 68 29 7b 0a 20 20 61 73 73  nt(int h){.  ass
7770: 65 72 74 28 20 28 68 3e 3d 27 30 27 20 26 26 20  ert( (h>='0' && 
7780: 68 3c 3d 27 39 27 29 20 7c 7c 20 20 28 68 3e 3d  h<='9') ||  (h>=
7790: 27 61 27 20 26 26 20 68 3c 3d 27 66 27 29 20 7c  'a' && h<='f') |
77a0: 7c 20 20 28 68 3e 3d 27 41 27 20 26 26 20 68 3c  |  (h>='A' && h<
77b0: 3d 27 46 27 29 20 29 3b 0a 23 69 66 64 65 66 20  ='F') );.#ifdef 
77c0: 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 20 20 68  SQLITE_ASCII.  h
77d0: 20 2b 3d 20 39 2a 28 31 26 28 68 3e 3e 36 29 29   += 9*(1&(h>>6))
77e0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
77f0: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 0a 20 20  SQLITE_EBCDIC.  
7800: 68 20 2b 3d 20 39 2a 28 31 26 7e 28 68 3e 3e 34  h += 9*(1&~(h>>4
7810: 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  ));.#endif.  ret
7820: 75 72 6e 20 28 75 38 29 28 68 20 26 20 30 78 66  urn (u8)(h & 0xf
7830: 29 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e  );.}..#if !defin
7840: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ed(SQLITE_OMIT_B
7850: 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20 7c 7c 20  LOB_LITERAL) || 
7860: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
7870: 41 53 5f 43 4f 44 45 43 29 0a 2f 2a 0a 2a 2a 20  AS_CODEC)./*.** 
7880: 43 6f 6e 76 65 72 74 20 61 20 42 4c 4f 42 20 6c  Convert a BLOB l
7890: 69 74 65 72 61 6c 20 6f 66 20 74 68 65 20 66 6f  iteral of the fo
78a0: 72 6d 20 22 78 27 68 68 68 68 68 68 27 22 20 69  rm "x'hhhhhh'" i
78b0: 6e 74 6f 20 69 74 73 20 62 69 6e 61 72 79 0a 2a  nto its binary.*
78c0: 2a 20 76 61 6c 75 65 2e 20 20 52 65 74 75 72 6e  * value.  Return
78d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
78e0: 73 20 62 69 6e 61 72 79 20 76 61 6c 75 65 2e 20  s binary value. 
78f0: 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
7900: 68 65 0a 2a 2a 20 62 69 6e 61 72 79 20 76 61 6c  he.** binary val
7910: 75 65 20 68 61 73 20 62 65 65 6e 20 6f 62 74 61  ue has been obta
7920: 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
7930: 20 61 6e 64 20 6d 75 73 74 20 62 65 20 66 72 65   and must be fre
7940: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 63 61 6c  ed by.** the cal
7950: 6c 69 6e 67 20 72 6f 75 74 69 6e 65 2e 0a 2a 2f  ling routine..*/
7960: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
7970: 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 20  xToBlob(sqlite3 
7980: 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
7990: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68  *z, int n){.  ch
79a0: 61 72 20 2a 7a 42 6c 6f 62 3b 0a 20 20 69 6e 74  ar *zBlob;.  int
79b0: 20 69 3b 0a 0a 20 20 7a 42 6c 6f 62 20 3d 20 28   i;..  zBlob = (
79c0: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 44 62  char *)sqlite3Db
79d0: 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20  MallocRawNN(db, 
79e0: 6e 2f 32 20 2b 20 31 29 3b 0a 20 20 6e 2d 2d 3b  n/2 + 1);.  n--;
79f0: 0a 20 20 69 66 28 20 7a 42 6c 6f 62 20 29 7b 0a  .  if( zBlob ){.
7a00: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
7a10: 3b 20 69 2b 3d 32 29 7b 0a 20 20 20 20 20 20 7a  ; i+=2){.      z
7a20: 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 28 73 71 6c  Blob[i/2] = (sql
7a30: 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 5b 69  ite3HexToInt(z[i
7a40: 5d 29 3c 3c 34 29 20 7c 20 73 71 6c 69 74 65 33  ])<<4) | sqlite3
7a50: 48 65 78 54 6f 49 6e 74 28 7a 5b 69 2b 31 5d 29  HexToInt(z[i+1])
7a60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 6c 6f  ;.    }.    zBlo
7a70: 62 5b 69 2f 32 5d 20 3d 20 30 3b 0a 20 20 7d 0a  b[i/2] = 0;.  }.
7a80: 20 20 72 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a    return zBlob;.
7a90: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c  }.#endif /* !SQL
7aa0: 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49  ITE_OMIT_BLOB_LI
7ab0: 54 45 52 41 4c 20 7c 7c 20 53 51 4c 49 54 45 5f  TERAL || SQLITE_
7ac0: 48 41 53 5f 43 4f 44 45 43 20 2a 2f 0a 0a 2f 2a  HAS_CODEC */../*
7ad0: 0a 2a 2a 20 4c 6f 67 20 61 6e 20 65 72 72 6f 72  .** Log an error
7ae0: 20 74 68 61 74 20 69 73 20 61 6e 20 41 50 49 20   that is an API 
7af0: 63 61 6c 6c 20 6f 6e 20 61 20 63 6f 6e 6e 65 63  call on a connec
7b00: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
7b10: 74 20 73 68 6f 75 6c 64 0a 2a 2a 20 6e 6f 74 20  t should.** not 
7b20: 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e 20  have been used. 
7b30: 20 54 68 65 20 22 74 79 70 65 22 20 6f 66 20 63   The "type" of c
7b40: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
7b50: 72 20 69 73 20 67 69 76 65 6e 20 61 73 20 74 68  r is given as th
7b60: 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 20 20  e.** argument.  
7b70: 54 68 65 20 7a 54 79 70 65 20 69 73 20 61 20 77  The zType is a w
7b80: 6f 72 64 20 6c 69 6b 65 20 22 4e 55 4c 4c 22 20  ord like "NULL" 
7b90: 6f 72 20 22 63 6c 6f 73 65 64 22 20 6f 72 20 22  or "closed" or "
7ba0: 69 6e 76 61 6c 69 64 22 2e 0a 2a 2f 0a 73 74 61  invalid"..*/.sta
7bb0: 74 69 63 20 76 6f 69 64 20 6c 6f 67 42 61 64 43  tic void logBadC
7bc0: 6f 6e 6e 65 63 74 69 6f 6e 28 63 6f 6e 73 74 20  onnection(const 
7bd0: 63 68 61 72 20 2a 7a 54 79 70 65 29 7b 0a 20 20  char *zType){.  
7be0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 53 51 4c 49  sqlite3_log(SQLI
7bf0: 54 45 5f 4d 49 53 55 53 45 2c 20 0a 20 20 20 20  TE_MISUSE, .    
7c00: 20 22 41 50 49 20 63 61 6c 6c 20 77 69 74 68 20   "API call with 
7c10: 25 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  %s database conn
7c20: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 22 2c  ection pointer",
7c30: 0a 20 20 20 20 20 7a 54 79 70 65 0a 20 20 29 3b  .     zType.  );
7c40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  .}../*.** Check 
7c50: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  to make sure we 
7c60: 68 61 76 65 20 61 20 76 61 6c 69 64 20 64 62 20  have a valid db 
7c70: 70 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 20 74  pointer.  This t
7c80: 65 73 74 20 69 73 20 6e 6f 74 0a 2a 2a 20 66 6f  est is not.** fo
7c90: 6f 6c 70 72 6f 6f 66 20 62 75 74 20 69 74 20 64  olproof but it d
7ca0: 6f 65 73 20 70 72 6f 76 69 64 65 20 73 6f 6d 65  oes provide some
7cb0: 20 6d 65 61 73 75 72 65 20 6f 66 20 70 72 6f 74   measure of prot
7cc0: 65 63 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 2a  ection against.*
7cd0: 2a 20 6d 69 73 75 73 65 20 6f 66 20 74 68 65 20  * misuse of the 
7ce0: 69 6e 74 65 72 66 61 63 65 20 73 75 63 68 20 61  interface such a
7cf0: 73 20 70 61 73 73 69 6e 67 20 69 6e 20 64 62 20  s passing in db 
7d00: 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 61 72  pointers that ar
7d10: 65 0a 2a 2a 20 4e 55 4c 4c 20 6f 72 20 77 68 69  e.** NULL or whi
7d20: 63 68 20 68 61 76 65 20 62 65 65 6e 20 70 72 65  ch have been pre
7d30: 76 69 6f 75 73 6c 79 20 63 6c 6f 73 65 64 2e 20  viously closed. 
7d40: 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65   If this routine
7d50: 20 72 65 74 75 72 6e 73 0a 2a 2a 20 31 20 69 74   returns.** 1 it
7d60: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
7d70: 64 62 20 70 6f 69 6e 74 65 72 20 69 73 20 76 61  db pointer is va
7d80: 6c 69 64 20 61 6e 64 20 30 20 69 66 20 69 74 20  lid and 0 if it 
7d90: 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a  should not be.**
7da0: 20 64 65 72 65 66 65 72 65 6e 63 65 64 20 66 6f   dereferenced fo
7db0: 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e 20 20 54  r any reason.  T
7dc0: 68 65 20 63 61 6c 6c 69 6e 67 20 66 75 6e 63 74  he calling funct
7dd0: 69 6f 6e 20 73 68 6f 75 6c 64 20 69 6e 76 6f 6b  ion should invok
7de0: 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55  e.** SQLITE_MISU
7df0: 53 45 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0a  SE immediately..
7e00: 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 53 61 66  **.** sqlite3Saf
7e10: 65 74 79 43 68 65 63 6b 4f 6b 28 29 20 72 65 71  etyCheckOk() req
7e20: 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20 64  uires that the d
7e30: 62 20 70 6f 69 6e 74 65 72 20 62 65 20 76 61 6c  b pointer be val
7e40: 69 64 20 66 6f 72 0a 2a 2a 20 75 73 65 2e 20 20  id for.** use.  
7e50: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
7e60: 63 6b 53 69 63 6b 4f 72 4f 6b 28 29 20 61 6c 6c  ckSickOrOk() all
7e70: 6f 77 73 20 61 20 64 62 20 70 6f 69 6e 74 65 72  ows a db pointer
7e80: 20 74 68 61 74 20 66 61 69 6c 65 64 20 74 6f 0a   that failed to.
7e90: 2a 2a 20 6f 70 65 6e 20 70 72 6f 70 65 72 6c 79  ** open properly
7ea0: 20 61 6e 64 20 69 73 20 6e 6f 74 20 66 69 74 20   and is not fit 
7eb0: 66 6f 72 20 67 65 6e 65 72 61 6c 20 75 73 65 20  for general use 
7ec0: 62 75 74 20 77 68 69 63 68 20 63 61 6e 20 62 65  but which can be
7ed0: 0a 2a 2a 20 75 73 65 64 20 61 73 20 61 6e 20 61  .** used as an a
7ee0: 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
7ef0: 65 33 5f 65 72 72 6d 73 67 28 29 20 6f 72 20 73  e3_errmsg() or s
7f00: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
7f10: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  */.int sqlite3Sa
7f20: 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
7f30: 74 65 33 20 2a 64 62 29 7b 0a 20 20 75 33 32 20  te3 *db){.  u32 
7f40: 6d 61 67 69 63 3b 0a 20 20 69 66 28 20 64 62 3d  magic;.  if( db=
7f50: 3d 30 20 29 7b 0a 20 20 20 20 6c 6f 67 42 61 64  =0 ){.    logBad
7f60: 43 6f 6e 6e 65 63 74 69 6f 6e 28 22 4e 55 4c 4c  Connection("NULL
7f70: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  ");.    return 0
7f80: 3b 0a 20 20 7d 0a 20 20 6d 61 67 69 63 20 3d 20  ;.  }.  magic = 
7f90: 64 62 2d 3e 6d 61 67 69 63 3b 0a 20 20 69 66 28  db->magic;.  if(
7fa0: 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d   magic!=SQLITE_M
7fb0: 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20  AGIC_OPEN ){.   
7fc0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
7fd0: 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
7fe0: 64 62 29 20 29 7b 0a 20 20 20 20 20 20 74 65 73  db) ){.      tes
7ff0: 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
8000: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
8010: 3d 30 20 29 3b 0a 20 20 20 20 20 20 6c 6f 67 42  =0 );.      logB
8020: 61 64 43 6f 6e 6e 65 63 74 69 6f 6e 28 22 75 6e  adConnection("un
8030: 6f 70 65 6e 65 64 22 29 3b 0a 20 20 20 20 7d 0a  opened");.    }.
8040: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
8050: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72  }else{.    retur
8060: 6e 20 31 3b 0a 20 20 7d 0a 7d 0a 69 6e 74 20 73  n 1;.  }.}.int s
8070: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
8080: 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
8090: 33 20 2a 64 62 29 7b 0a 20 20 75 33 32 20 6d 61  3 *db){.  u32 ma
80a0: 67 69 63 3b 0a 20 20 6d 61 67 69 63 20 3d 20 64  gic;.  magic = d
80b0: 62 2d 3e 6d 61 67 69 63 3b 0a 20 20 69 66 28 20  b->magic;.  if( 
80c0: 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41  magic!=SQLITE_MA
80d0: 47 49 43 5f 53 49 43 4b 20 26 26 0a 20 20 20 20  GIC_SICK &&.    
80e0: 20 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f    magic!=SQLITE_
80f0: 4d 41 47 49 43 5f 4f 50 45 4e 20 26 26 0a 20 20  MAGIC_OPEN &&.  
8100: 20 20 20 20 6d 61 67 69 63 21 3d 53 51 4c 49 54      magic!=SQLIT
8110: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a  E_MAGIC_BUSY ){.
8120: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71      testcase( sq
8130: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
8140: 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20  g.xLog!=0 );.   
8150: 20 6c 6f 67 42 61 64 43 6f 6e 6e 65 63 74 69 6f   logBadConnectio
8160: 6e 28 22 69 6e 76 61 6c 69 64 22 29 3b 0a 20 20  n("invalid");.  
8170: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
8180: 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  lse{.    return 
8190: 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  1;.  }.}../*.** 
81a0: 41 74 74 65 6d 70 74 20 74 6f 20 61 64 64 2c 20  Attempt to add, 
81b0: 73 75 62 73 74 72 61 63 74 2c 20 6f 72 20 6d 75  substract, or mu
81c0: 6c 74 69 70 6c 79 20 74 68 65 20 36 34 2d 62 69  ltiply the 64-bi
81d0: 74 20 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69  t signed value i
81e0: 42 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  B against.** the
81f0: 20 6f 74 68 65 72 20 36 34 2d 62 69 74 20 73 69   other 64-bit si
8200: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
8210: 2a 70 41 20 61 6e 64 20 73 74 6f 72 65 20 74 68  *pA and store th
8220: 65 20 72 65 73 75 6c 74 20 69 6e 20 2a 70 41 2e  e result in *pA.
8230: 0a 2a 2a 20 52 65 74 75 72 6e 20 30 20 6f 6e 20  .** Return 0 on 
8240: 73 75 63 63 65 73 73 2e 20 20 4f 72 20 69 66 20  success.  Or if 
8250: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 77 6f  the operation wo
8260: 75 6c 64 20 68 61 76 65 20 72 65 73 75 6c 74 65  uld have resulte
8270: 64 20 69 6e 20 61 6e 0a 2a 2a 20 6f 76 65 72 66  d in an.** overf
8280: 6c 6f 77 2c 20 6c 65 61 76 65 20 2a 70 41 20 75  low, leave *pA u
8290: 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 72 65 74  nchanged and ret
82a0: 75 72 6e 20 31 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urn 1..*/.int sq
82b0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
82c0: 34 20 2a 70 41 2c 20 69 36 34 20 69 42 29 7b 0a  4 *pA, i64 iB){.
82d0: 20 20 69 36 34 20 69 41 20 3d 20 2a 70 41 3b 0a    i64 iA = *pA;.
82e0: 20 20 74 65 73 74 63 61 73 65 28 20 69 41 3d 3d    testcase( iA==
82f0: 30 20 29 3b 20 74 65 73 74 63 61 73 65 28 20 69  0 ); testcase( i
8300: 41 3d 3d 31 20 29 3b 0a 20 20 74 65 73 74 63 61  A==1 );.  testca
8310: 73 65 28 20 69 42 3d 3d 2d 31 20 29 3b 20 74 65  se( iB==-1 ); te
8320: 73 74 63 61 73 65 28 20 69 42 3d 3d 30 20 29 3b  stcase( iB==0 );
8330: 0a 20 20 69 66 28 20 69 42 3e 3d 30 20 29 7b 0a  .  if( iB>=0 ){.
8340: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 69 41      testcase( iA
8350: 3e 30 20 26 26 20 4c 41 52 47 45 53 54 5f 49 4e  >0 && LARGEST_IN
8360: 54 36 34 20 2d 20 69 41 20 3d 3d 20 69 42 20 29  T64 - iA == iB )
8370: 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
8380: 69 41 3e 30 20 26 26 20 4c 41 52 47 45 53 54 5f  iA>0 && LARGEST_
8390: 49 4e 54 36 34 20 2d 20 69 41 20 3d 3d 20 69 42  INT64 - iA == iB
83a0: 20 2d 20 31 20 29 3b 0a 20 20 20 20 69 66 28 20   - 1 );.    if( 
83b0: 69 41 3e 30 20 26 26 20 4c 41 52 47 45 53 54 5f  iA>0 && LARGEST_
83c0: 49 4e 54 36 34 20 2d 20 69 41 20 3c 20 69 42 20  INT64 - iA < iB 
83d0: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65  ) return 1;.  }e
83e0: 6c 73 65 7b 0a 20 20 20 20 74 65 73 74 63 61 73  lse{.    testcas
83f0: 65 28 20 69 41 3c 30 20 26 26 20 2d 28 69 41 20  e( iA<0 && -(iA 
8400: 2b 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  + LARGEST_INT64)
8410: 20 3d 3d 20 69 42 20 2b 20 31 20 29 3b 0a 20 20   == iB + 1 );.  
8420: 20 20 74 65 73 74 63 61 73 65 28 20 69 41 3c 30    testcase( iA<0
8430: 20 26 26 20 2d 28 69 41 20 2b 20 4c 41 52 47 45   && -(iA + LARGE
8440: 53 54 5f 49 4e 54 36 34 29 20 3d 3d 20 69 42 20  ST_INT64) == iB 
8450: 2b 20 32 20 29 3b 0a 20 20 20 20 69 66 28 20 69  + 2 );.    if( i
8460: 41 3c 30 20 26 26 20 2d 28 69 41 20 2b 20 4c 41  A<0 && -(iA + LA
8470: 52 47 45 53 54 5f 49 4e 54 36 34 29 20 3e 20 69  RGEST_INT64) > i
8480: 42 20 2b 20 31 20 29 20 72 65 74 75 72 6e 20 31  B + 1 ) return 1
8490: 3b 0a 20 20 7d 0a 20 20 2a 70 41 20 2b 3d 20 69  ;.  }.  *pA += i
84a0: 42 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 20 0a  B;.  return 0; .
84b0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  }.int sqlite3Sub
84c0: 49 6e 74 36 34 28 69 36 34 20 2a 70 41 2c 20 69  Int64(i64 *pA, i
84d0: 36 34 20 69 42 29 7b 0a 20 20 74 65 73 74 63 61  64 iB){.  testca
84e0: 73 65 28 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54  se( iB==SMALLEST
84f0: 5f 49 4e 54 36 34 2b 31 20 29 3b 0a 20 20 69 66  _INT64+1 );.  if
8500: 28 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  ( iB==SMALLEST_I
8510: 4e 54 36 34 20 29 7b 0a 20 20 20 20 74 65 73 74  NT64 ){.    test
8520: 63 61 73 65 28 20 28 2a 70 41 29 3d 3d 28 2d 31  case( (*pA)==(-1
8530: 29 20 29 3b 20 74 65 73 74 63 61 73 65 28 20 28  ) ); testcase( (
8540: 2a 70 41 29 3d 3d 30 20 29 3b 0a 20 20 20 20 69  *pA)==0 );.    i
8550: 66 28 20 28 2a 70 41 29 3e 3d 30 20 29 20 72 65  f( (*pA)>=0 ) re
8560: 74 75 72 6e 20 31 3b 0a 20 20 20 20 2a 70 41 20  turn 1;.    *pA 
8570: 2d 3d 20 69 42 3b 0a 20 20 20 20 72 65 74 75 72  -= iB;.    retur
8580: 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n 0;.  }else{.  
8590: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
85a0: 41 64 64 49 6e 74 36 34 28 70 41 2c 20 2d 69 42  AddInt64(pA, -iB
85b0: 29 3b 0a 20 20 7d 0a 7d 0a 23 64 65 66 69 6e 65  );.  }.}.#define
85c0: 20 54 57 4f 50 4f 57 45 52 33 32 20 28 28 28 69   TWOPOWER32 (((i
85d0: 36 34 29 31 29 3c 3c 33 32 29 0a 23 64 65 66 69  64)1)<<32).#defi
85e0: 6e 65 20 54 57 4f 50 4f 57 45 52 33 31 20 28 28  ne TWOPOWER31 ((
85f0: 28 69 36 34 29 31 29 3c 3c 33 31 29 0a 69 6e 74  (i64)1)<<31).int
8600: 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
8610: 28 69 36 34 20 2a 70 41 2c 20 69 36 34 20 69 42  (i64 *pA, i64 iB
8620: 29 7b 0a 20 20 69 36 34 20 69 41 20 3d 20 2a 70  ){.  i64 iA = *p
8630: 41 3b 0a 20 20 69 36 34 20 69 41 31 2c 20 69 41  A;.  i64 iA1, iA
8640: 30 2c 20 69 42 31 2c 20 69 42 30 2c 20 72 3b 0a  0, iB1, iB0, r;.
8650: 0a 20 20 69 41 31 20 3d 20 69 41 2f 54 57 4f 50  .  iA1 = iA/TWOP
8660: 4f 57 45 52 33 32 3b 0a 20 20 69 41 30 20 3d 20  OWER32;.  iA0 = 
8670: 69 41 20 25 20 54 57 4f 50 4f 57 45 52 33 32 3b  iA % TWOPOWER32;
8680: 0a 20 20 69 42 31 20 3d 20 69 42 2f 54 57 4f 50  .  iB1 = iB/TWOP
8690: 4f 57 45 52 33 32 3b 0a 20 20 69 42 30 20 3d 20  OWER32;.  iB0 = 
86a0: 69 42 20 25 20 54 57 4f 50 4f 57 45 52 33 32 3b  iB % TWOPOWER32;
86b0: 0a 20 20 69 66 28 20 69 41 31 3d 3d 30 20 29 7b  .  if( iA1==0 ){
86c0: 0a 20 20 20 20 69 66 28 20 69 42 31 3d 3d 30 20  .    if( iB1==0 
86d0: 29 7b 0a 20 20 20 20 20 20 2a 70 41 20 2a 3d 20  ){.      *pA *= 
86e0: 69 42 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  iB;.      return
86f0: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 20   0;.    }.    r 
8700: 3d 20 69 41 30 2a 69 42 31 3b 0a 20 20 7d 65 6c  = iA0*iB1;.  }el
8710: 73 65 20 69 66 28 20 69 42 31 3d 3d 30 20 29 7b  se if( iB1==0 ){
8720: 0a 20 20 20 20 72 20 3d 20 69 41 31 2a 69 42 30  .    r = iA1*iB0
8730: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
8740: 2a 20 49 66 20 62 6f 74 68 20 69 41 31 20 61 6e  * If both iA1 an
8750: 64 20 69 42 31 20 61 72 65 20 6e 6f 6e 2d 7a 65  d iB1 are non-ze
8760: 72 6f 2c 20 6f 76 65 72 66 6c 6f 77 20 77 69 6c  ro, overflow wil
8770: 6c 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 20 20  l result */.    
8780: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
8790: 74 65 73 74 63 61 73 65 28 20 72 3d 3d 28 2d 54  testcase( r==(-T
87a0: 57 4f 50 4f 57 45 52 33 31 29 2d 31 20 29 3b 0a  WOPOWER31)-1 );.
87b0: 20 20 74 65 73 74 63 61 73 65 28 20 72 3d 3d 28    testcase( r==(
87c0: 2d 54 57 4f 50 4f 57 45 52 33 31 29 20 29 3b 0a  -TWOPOWER31) );.
87d0: 20 20 74 65 73 74 63 61 73 65 28 20 72 3d 3d 54    testcase( r==T
87e0: 57 4f 50 4f 57 45 52 33 31 20 29 3b 0a 20 20 74  WOPOWER31 );.  t
87f0: 65 73 74 63 61 73 65 28 20 72 3d 3d 54 57 4f 50  estcase( r==TWOP
8800: 4f 57 45 52 33 31 2d 31 20 29 3b 0a 20 20 69 66  OWER31-1 );.  if
8810: 28 20 72 3c 28 2d 54 57 4f 50 4f 57 45 52 33 31  ( r<(-TWOPOWER31
8820: 29 20 7c 7c 20 72 3e 3d 54 57 4f 50 4f 57 45 52  ) || r>=TWOPOWER
8830: 33 31 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  31 ) return 1;. 
8840: 20 72 20 2a 3d 20 54 57 4f 50 4f 57 45 52 33 32   r *= TWOPOWER32
8850: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
8860: 64 64 49 6e 74 36 34 28 26 72 2c 20 69 41 30 2a  ddInt64(&r, iA0*
8870: 69 42 30 29 20 29 20 72 65 74 75 72 6e 20 31 3b  iB0) ) return 1;
8880: 0a 20 20 2a 70 41 20 3d 20 72 3b 0a 20 20 72 65  .  *pA = r;.  re
8890: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
88a0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 61 62 73   Compute the abs
88b0: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 61  olute value of a
88c0: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
88d0: 6e 74 65 67 65 72 2c 20 6f 66 20 70 6f 73 73 69  nteger, of possi
88e0: 62 6c 65 2e 20 20 4f 72 20 0a 2a 2a 20 69 66 20  ble.  Or .** if 
88f0: 74 68 65 20 69 6e 74 65 67 65 72 20 68 61 73 20  the integer has 
8900: 61 20 76 61 6c 75 65 20 6f 66 20 2d 32 31 34 37  a value of -2147
8910: 34 38 33 36 34 38 2c 20 72 65 74 75 72 6e 20 2b  483648, return +
8920: 32 31 34 37 34 38 33 36 34 37 0a 2a 2f 0a 69 6e  2147483647.*/.in
8930: 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
8940: 32 28 69 6e 74 20 78 29 7b 0a 20 20 69 66 28 20  2(int x){.  if( 
8950: 78 3e 3d 30 20 29 20 72 65 74 75 72 6e 20 78 3b  x>=0 ) return x;
8960: 0a 20 20 69 66 28 20 78 3d 3d 28 69 6e 74 29 30  .  if( x==(int)0
8970: 78 38 30 30 30 30 30 30 30 20 29 20 72 65 74 75  x80000000 ) retu
8980: 72 6e 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20  rn 0x7fffffff;. 
8990: 20 72 65 74 75 72 6e 20 2d 78 3b 0a 7d 0a 0a 23   return -x;.}..#
89a0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
89b0: 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 2f 2a  BLE_8_3_NAMES./*
89c0: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 45 4e  .** If SQLITE_EN
89d0: 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 20 69  ABLE_8_3_NAMES i
89e0: 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65  s set at compile
89f0: 2d 74 69 6d 65 20 61 6e 64 20 69 66 20 74 68 65  -time and if the
8a00: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
8a10: 65 6e 61 6d 65 20 69 6e 20 7a 42 61 73 65 46 69  ename in zBaseFi
8a20: 6c 65 6e 61 6d 65 20 69 73 20 61 20 55 52 49 20  lename is a URI 
8a30: 77 69 74 68 20 74 68 65 20 22 38 5f 33 5f 6e 61  with the "8_3_na
8a40: 6d 65 73 3d 31 22 20 70 61 72 61 6d 65 74 65 72  mes=1" parameter
8a50: 20 61 6e 64 0a 2a 2a 20 69 66 20 66 69 6c 65 6e   and.** if filen
8a60: 61 6d 65 20 69 6e 20 7a 5b 5d 20 68 61 73 20 61  ame in z[] has a
8a70: 20 73 75 66 66 69 78 20 28 61 2e 6b 2e 61 2e 20   suffix (a.k.a. 
8a80: 22 65 78 74 65 6e 73 69 6f 6e 22 29 20 74 68 61  "extension") tha
8a90: 74 20 69 73 20 6c 6f 6e 67 65 72 20 74 68 61 6e  t is longer than
8aa0: 0a 2a 2a 20 74 68 72 65 65 20 63 68 61 72 61 63  .** three charac
8ab0: 74 65 72 73 2c 20 74 68 65 6e 20 73 68 6f 72 74  ters, then short
8ac0: 65 6e 20 74 68 65 20 73 75 66 66 69 78 20 6f 6e  en the suffix on
8ad0: 20 7a 5b 5d 20 74 6f 20 62 65 20 74 68 65 20 6c   z[] to be the l
8ae0: 61 73 74 20 74 68 72 65 65 0a 2a 2a 20 63 68 61  ast three.** cha
8af0: 72 61 63 74 65 72 73 20 6f 66 20 74 68 65 20 6f  racters of the o
8b00: 72 69 67 69 6e 61 6c 20 73 75 66 66 69 78 2e 0a  riginal suffix..
8b10: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
8b20: 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
8b30: 20 69 73 20 73 65 74 20 74 6f 20 32 20 61 74 20   is set to 2 at 
8b40: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 74 68  compile-time, th
8b50: 65 6e 20 61 6c 77 61 79 73 0a 2a 2a 20 64 6f 20  en always.** do 
8b60: 74 68 65 20 73 75 66 66 69 78 20 73 68 6f 72 74  the suffix short
8b70: 65 6e 69 6e 67 20 72 65 67 61 72 64 6c 65 73 73  ening regardless
8b80: 20 6f 66 20 55 52 49 20 70 61 72 61 6d 65 74 65   of URI paramete
8b90: 72 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65  r..**.** Example
8ba0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 74 65 73  s:.**.**     tes
8bb0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 20 20 20  t.db-journal    
8bc0: 3d 3e 20 20 20 74 65 73 74 2e 6e 61 6c 0a 2a 2a  =>   test.nal.**
8bd0: 20 20 20 20 20 74 65 73 74 2e 64 62 2d 77 61 6c       test.db-wal
8be0: 20 20 20 20 20 20 20 20 3d 3e 20 20 20 74 65 73          =>   tes
8bf0: 74 2e 77 61 6c 0a 2a 2a 20 20 20 20 20 74 65 73  t.wal.**     tes
8c00: 74 2e 64 62 2d 73 68 6d 20 20 20 20 20 20 20 20  t.db-shm        
8c10: 3d 3e 20 20 20 74 65 73 74 2e 73 68 6d 0a 2a 2a  =>   test.shm.**
8c20: 20 20 20 20 20 74 65 73 74 2e 64 62 2d 6d 6a 37       test.db-mj7
8c30: 66 33 33 31 39 66 61 20 3d 3e 20 20 20 74 65 73  f3319fa =>   tes
8c40: 74 2e 39 66 61 0a 2a 2f 0a 76 6f 69 64 20 73 71  t.9fa.*/.void sq
8c50: 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
8c60: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 61  (const char *zBa
8c70: 73 65 46 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72  seFilename, char
8c80: 20 2a 7a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45   *z){.#if SQLITE
8c90: 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
8ca0: 53 3c 32 0a 20 20 69 66 28 20 73 71 6c 69 74 65  S<2.  if( sqlite
8cb0: 33 5f 75 72 69 5f 62 6f 6f 6c 65 61 6e 28 7a 42  3_uri_boolean(zB
8cc0: 61 73 65 46 69 6c 65 6e 61 6d 65 2c 20 22 38 5f  aseFilename, "8_
8cd0: 33 5f 6e 61 6d 65 73 22 2c 20 30 29 20 29 0a 23  3_names", 0) ).#
8ce0: 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 69 6e  endif.  {.    in
8cf0: 74 20 69 2c 20 73 7a 3b 0a 20 20 20 20 73 7a 20  t i, sz;.    sz 
8d00: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
8d10: 30 28 7a 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  0(z);.    for(i=
8d20: 73 7a 2d 31 3b 20 69 3e 30 20 26 26 20 7a 5b 69  sz-1; i>0 && z[i
8d30: 5d 21 3d 27 2f 27 20 26 26 20 7a 5b 69 5d 21 3d  ]!='/' && z[i]!=
8d40: 27 2e 27 3b 20 69 2d 2d 29 7b 7d 0a 20 20 20 20  '.'; i--){}.    
8d50: 69 66 28 20 7a 5b 69 5d 3d 3d 27 2e 27 20 26 26  if( z[i]=='.' &&
8d60: 20 41 4c 57 41 59 53 28 73 7a 3e 69 2b 34 29 20   ALWAYS(sz>i+4) 
8d70: 29 20 6d 65 6d 6d 6f 76 65 28 26 7a 5b 69 2b 31  ) memmove(&z[i+1
8d80: 5d 2c 20 26 7a 5b 73 7a 2d 33 5d 2c 20 34 29 3b  ], &z[sz-3], 4);
8d90: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  .  }.}.#endif../
8da0: 2a 20 0a 2a 2a 20 46 69 6e 64 20 28 61 6e 20 61  * .** Find (an a
8db0: 70 70 72 6f 78 69 6d 61 74 65 29 20 73 75 6d 20  pproximate) sum 
8dc0: 6f 66 20 74 77 6f 20 4c 6f 67 45 73 74 20 76 61  of two LogEst va
8dd0: 6c 75 65 73 2e 20 20 54 68 69 73 20 63 6f 6d 70  lues.  This comp
8de0: 75 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 6e 6f  utation is.** no
8df0: 74 20 61 20 73 69 6d 70 6c 65 20 22 2b 22 20 6f  t a simple "+" o
8e00: 70 65 72 61 74 6f 72 20 62 65 63 61 75 73 65 20  perator because 
8e10: 4c 6f 67 45 73 74 20 69 73 20 73 74 6f 72 65 64  LogEst is stored
8e20: 20 61 73 20 61 20 6c 6f 67 61 72 69 74 68 6d 69   as a logarithmi
8e30: 63 0a 2a 2a 20 76 61 6c 75 65 2e 0a 2a 2a 20 0a  c.** value..** .
8e40: 2a 2f 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  */.LogEst sqlite
8e50: 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
8e60: 74 20 61 2c 20 4c 6f 67 45 73 74 20 62 29 7b 0a  t a, LogEst b){.
8e70: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
8e80: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 78 5b 5d  nsigned char x[]
8e90: 20 3d 20 7b 0a 20 20 20 20 20 31 30 2c 20 31 30   = {.     10, 10
8ea0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 2c 31            /* 0,1
8ec0: 20 2a 2f 0a 20 20 20 20 20 20 39 2c 20 39 2c 20   */.      9, 9, 
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2c 33 20           /* 2,3 
8ef0: 2a 2f 0a 20 20 20 20 20 20 38 2c 20 38 2c 20 20  */.      8, 8,  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f10: 20 20 20 20 20 20 20 20 2f 2a 20 34 2c 35 20 2a          /* 4,5 *
8f20: 2f 0a 20 20 20 20 20 20 37 2c 20 37 2c 20 37 2c  /.      7, 7, 7,
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f40: 20 20 20 20 20 20 20 2f 2a 20 36 2c 37 2c 38 20         /* 6,7,8 
8f50: 2a 2f 0a 20 20 20 20 20 20 36 2c 20 36 2c 20 36  */.      6, 6, 6
8f60: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8f70: 20 20 20 20 20 20 20 20 2f 2a 20 39 2c 31 30 2c          /* 9,10,
8f80: 31 31 20 2a 2f 0a 20 20 20 20 20 20 35 2c 20 35  11 */.      5, 5
8f90: 2c 20 35 2c 20 20 20 20 20 20 20 20 20 20 20 20  , 5,            
8fa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 32             /* 12
8fb0: 2d 31 34 20 2a 2f 0a 20 20 20 20 20 20 34 2c 20  -14 */.      4, 
8fc0: 34 2c 20 34 2c 20 34 2c 20 20 20 20 20 20 20 20  4, 4, 4,        
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
8fe0: 35 2d 31 38 20 2a 2f 0a 20 20 20 20 20 20 33 2c  5-18 */.      3,
8ff0: 20 33 2c 20 33 2c 20 33 2c 20 33 2c 20 33 2c 20   3, 3, 3, 3, 3, 
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9010: 31 39 2d 32 34 20 2a 2f 0a 20 20 20 20 20 20 32  19-24 */.      2
9020: 2c 20 32 2c 20 32 2c 20 32 2c 20 32 2c 20 32 2c  , 2, 2, 2, 2, 2,
9030: 20 32 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a   2,           /*
9040: 20 32 35 2d 33 31 20 2a 2f 0a 20 20 7d 3b 0a 20   25-31 */.  };. 
9050: 20 69 66 28 20 61 3e 3d 62 20 29 7b 0a 20 20 20   if( a>=b ){.   
9060: 20 69 66 28 20 61 3e 62 2b 34 39 20 29 20 72 65   if( a>b+49 ) re
9070: 74 75 72 6e 20 61 3b 0a 20 20 20 20 69 66 28 20  turn a;.    if( 
9080: 61 3e 62 2b 33 31 20 29 20 72 65 74 75 72 6e 20  a>b+31 ) return 
9090: 61 2b 31 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  a+1;.    return 
90a0: 61 2b 78 5b 61 2d 62 5d 3b 0a 20 20 7d 65 6c 73  a+x[a-b];.  }els
90b0: 65 7b 0a 20 20 20 20 69 66 28 20 62 3e 61 2b 34  e{.    if( b>a+4
90c0: 39 20 29 20 72 65 74 75 72 6e 20 62 3b 0a 20 20  9 ) return b;.  
90d0: 20 20 69 66 28 20 62 3e 61 2b 33 31 20 29 20 72    if( b>a+31 ) r
90e0: 65 74 75 72 6e 20 62 2b 31 3b 0a 20 20 20 20 72  eturn b+1;.    r
90f0: 65 74 75 72 6e 20 62 2b 78 5b 62 2d 61 5d 3b 0a  eturn b+x[b-a];.
9100: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e    }.}../*.** Con
9110: 76 65 72 74 20 61 6e 20 69 6e 74 65 67 65 72 20  vert an integer 
9120: 69 6e 74 6f 20 61 20 4c 6f 67 45 73 74 2e 20 20  into a LogEst.  
9130: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9140: 63 6f 6d 70 75 74 65 20 61 6e 0a 2a 2a 20 61 70  compute an.** ap
9150: 70 72 6f 78 69 6d 61 74 69 6f 6e 20 66 6f 72 20  proximation for 
9160: 31 30 2a 6c 6f 67 32 28 78 29 2e 0a 2a 2f 0a 4c  10*log2(x)..*/.L
9170: 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
9180: 45 73 74 28 75 36 34 20 78 29 7b 0a 20 20 73 74  Est(u64 x){.  st
9190: 61 74 69 63 20 4c 6f 67 45 73 74 20 61 5b 5d 20  atic LogEst a[] 
91a0: 3d 20 7b 20 30 2c 20 32 2c 20 33 2c 20 35 2c 20  = { 0, 2, 3, 5, 
91b0: 36 2c 20 37 2c 20 38 2c 20 39 20 7d 3b 0a 20 20  6, 7, 8, 9 };.  
91c0: 4c 6f 67 45 73 74 20 79 20 3d 20 34 30 3b 0a 20  LogEst y = 40;. 
91d0: 20 69 66 28 20 78 3c 38 20 29 7b 0a 20 20 20 20   if( x<8 ){.    
91e0: 69 66 28 20 78 3c 32 20 29 20 72 65 74 75 72 6e  if( x<2 ) return
91f0: 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 78   0;.    while( x
9200: 3c 38 20 29 7b 20 20 79 20 2d 3d 20 31 30 3b 20  <8 ){  y -= 10; 
9210: 78 20 3c 3c 3d 20 31 3b 20 7d 0a 20 20 7d 65 6c  x <<= 1; }.  }el
9220: 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 78  se{.    while( x
9230: 3e 32 35 35 20 29 7b 20 79 20 2b 3d 20 34 30 3b  >255 ){ y += 40;
9240: 20 78 20 3e 3e 3d 20 34 3b 20 7d 0a 20 20 20 20   x >>= 4; }.    
9250: 77 68 69 6c 65 28 20 78 3e 31 35 20 29 7b 20 20  while( x>15 ){  
9260: 79 20 2b 3d 20 31 30 3b 20 78 20 3e 3e 3d 20 31  y += 10; x >>= 1
9270: 3b 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ; }.  }.  return
9280: 20 61 5b 78 26 37 5d 20 2b 20 79 20 2d 20 31 30   a[x&7] + y - 10
9290: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
92a0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
92b0: 54 41 42 4c 45 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  TABLE./*.** Conv
92c0: 65 72 74 20 61 20 64 6f 75 62 6c 65 20 69 6e 74  ert a double int
92d0: 6f 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 49 6e  o a LogEst.** In
92e0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 6f   other words, co
92f0: 6d 70 75 74 65 20 61 6e 20 61 70 70 72 6f 78 69  mpute an approxi
9300: 6d 61 74 69 6f 6e 20 66 6f 72 20 31 30 2a 6c 6f  mation for 10*lo
9310: 67 32 28 78 29 2e 0a 2a 2f 0a 4c 6f 67 45 73 74  g2(x)..*/.LogEst
9320: 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
9330: 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 20  omDouble(double 
9340: 78 29 7b 0a 20 20 75 36 34 20 61 3b 0a 20 20 4c  x){.  u64 a;.  L
9350: 6f 67 45 73 74 20 65 3b 0a 20 20 61 73 73 65 72  ogEst e;.  asser
9360: 74 28 20 73 69 7a 65 6f 66 28 78 29 3d 3d 38 20  t( sizeof(x)==8 
9370: 26 26 20 73 69 7a 65 6f 66 28 61 29 3d 3d 38 20  && sizeof(a)==8 
9380: 29 3b 0a 20 20 69 66 28 20 78 3c 3d 31 20 29 20  );.  if( x<=1 ) 
9390: 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20  return 0;.  if( 
93a0: 78 3c 3d 32 30 30 30 30 30 30 30 30 30 20 29 20  x<=2000000000 ) 
93b0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4c 6f  return sqlite3Lo
93c0: 67 45 73 74 28 28 75 36 34 29 78 29 3b 0a 20 20  gEst((u64)x);.  
93d0: 6d 65 6d 63 70 79 28 26 61 2c 20 26 78 2c 20 38  memcpy(&a, &x, 8
93e0: 29 3b 0a 20 20 65 20 3d 20 28 61 3e 3e 35 32 29  );.  e = (a>>52)
93f0: 20 2d 20 31 30 32 32 3b 0a 20 20 72 65 74 75 72   - 1022;.  retur
9400: 6e 20 65 2a 31 30 3b 0a 7d 0a 23 65 6e 64 69 66  n e*10;.}.#endif
9410: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
9420: 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
9430: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
9440: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
9450: 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
9460: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
9470: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
9480: 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
9490: 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
94a0: 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
94b0: 41 54 45 44 5f 52 4f 57 53 29 0a 2f 2a 0a 2a 2a  ATED_ROWS)./*.**
94c0: 20 43 6f 6e 76 65 72 74 20 61 20 4c 6f 67 45 73   Convert a LogEs
94d0: 74 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  t into an intege
94e0: 72 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  r..**.** Note th
94f0: 61 74 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  at this routine 
9500: 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
9510: 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  n one or more of
9520: 20 76 61 72 69 6f 75 73 0a 2a 2a 20 6e 6f 6e 2d   various.** non-
9530: 73 74 61 6e 64 61 72 64 20 63 6f 6d 70 69 6c 65  standard compile
9540: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 69 73  -time options is
9550: 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 75 36 34   enabled..*/.u64
9560: 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
9570: 49 6e 74 28 4c 6f 67 45 73 74 20 78 29 7b 0a 20  Int(LogEst x){. 
9580: 20 75 36 34 20 6e 3b 0a 20 20 6e 20 3d 20 78 25   u64 n;.  n = x%
9590: 31 30 3b 0a 20 20 78 20 2f 3d 20 31 30 3b 0a 20  10;.  x /= 10;. 
95a0: 20 69 66 28 20 6e 3e 3d 35 20 29 20 6e 20 2d 3d   if( n>=5 ) n -=
95b0: 20 32 3b 0a 20 20 65 6c 73 65 20 69 66 28 20 6e   2;.  else if( n
95c0: 3e 3d 31 20 29 20 6e 20 2d 3d 20 31 3b 0a 23 69  >=1 ) n -= 1;.#i
95d0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
95e0: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
95f0: 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20  NSTATUS) || \.  
9600: 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
9610: 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
9620: 45 44 5f 52 4f 57 53 29 0a 20 20 69 66 28 20 78  ED_ROWS).  if( x
9630: 3e 36 30 20 29 20 72 65 74 75 72 6e 20 28 75 36  >60 ) return (u6
9640: 34 29 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 3b  4)LARGEST_INT64;
9650: 0a 23 65 6c 73 65 0a 20 20 2f 2a 20 49 66 20 6f  .#else.  /* If o
9660: 6e 6c 79 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  nly SQLITE_ENABL
9670: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
9680: 20 69 73 20 6f 6e 2c 20 74 68 65 6e 20 74 68 65   is on, then the
9690: 20 6c 61 72 67 65 73 74 20 69 6e 70 75 74 0a 20   largest input. 
96a0: 20 2a 2a 20 70 6f 73 73 69 62 6c 65 20 74 6f 20   ** possible to 
96b0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
96c0: 33 31 30 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  310, resulting i
96d0: 6e 20 61 20 6d 61 78 69 6d 75 6d 20 78 20 6f 66  n a maximum x of
96e0: 20 33 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   31 */.  assert(
96f0: 20 78 3c 3d 36 30 20 29 3b 0a 23 65 6e 64 69 66   x<=60 );.#endif
9700: 0a 20 20 72 65 74 75 72 6e 20 78 3e 3d 33 20 3f  .  return x>=3 ?
9710: 20 28 6e 2b 38 29 3c 3c 28 78 2d 33 29 20 3a 20   (n+8)<<(x-3) : 
9720: 28 6e 2b 38 29 3e 3e 28 33 2d 78 29 3b 0a 7d 0a  (n+8)>>(3-x);.}.
9730: 23 65 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65  #endif /* define
9740: 64 20 53 43 41 4e 53 54 41 54 20 6f 72 20 53 54  d SCANSTAT or ST
9750: 41 54 34 20 6f 72 20 45 53 54 49 4d 41 54 45 44  AT4 or ESTIMATED
9760: 5f 52 4f 57 53 20 2a 2f 0a                       _ROWS */.