/ Hex Artifact Content
Login

Artifact 10d910e04a4f3842042485e0df01a484f57f912c10b60b3a09ccddd5019bd138:


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 6e 63 6c 75  stdarg.h>.#inclu
0240: 64 65 20 3c 6d 61 74 68 2e 68 3e 0a 0a 2f 2a 0a  de <math.h>../*.
0250: 2a 2a 20 52 6f 75 74 69 6e 65 20 6e 65 65 64 65  ** Routine neede
0260: 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  d to support the
0270: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
0280: 6f 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  o..*/.#ifdef SQL
0290: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
02a0: 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  T.void sqlite3Co
02b0: 76 65 72 61 67 65 28 69 6e 74 20 78 29 7b 0a 20  verage(int x){. 
02c0: 20 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64   static unsigned
02d0: 20 64 75 6d 6d 79 20 3d 20 30 3b 0a 20 20 64 75   dummy = 0;.  du
02e0: 6d 6d 79 20 2b 3d 20 28 75 6e 73 69 67 6e 65 64  mmy += (unsigned
02f0: 29 78 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )x;.}.#endif../*
0300: 0a 2a 2a 20 43 61 6c 6c 73 20 74 6f 20 73 71 6c  .** Calls to sql
0310: 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 61  ite3FaultSim() a
0320: 72 65 20 75 73 65 64 20 74 6f 20 73 69 6d 75 6c  re used to simul
0330: 61 74 65 20 61 20 66 61 69 6c 75 72 65 20 64 75  ate a failure du
0340: 72 69 6e 67 20 74 65 73 74 69 6e 67 2c 0a 2a 2a  ring testing,.**
0350: 20 6f 72 20 74 6f 20 62 79 70 61 73 73 20 6e 6f   or to bypass no
0360: 72 6d 61 6c 20 65 72 72 6f 72 20 64 65 74 65 63  rmal error detec
0370: 74 69 6f 6e 20 64 75 72 69 6e 67 20 74 65 73 74  tion during test
0380: 69 6e 67 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ing in order to 
0390: 6c 65 74 20 0a 2a 2a 20 65 78 65 63 75 74 65 20  let .** execute 
03a0: 70 72 6f 63 65 65 64 20 66 75 74 68 65 72 20 64  proceed futher d
03b0: 6f 77 6e 73 74 72 65 61 6d 2e 0a 2a 2a 0a 2a 2a  ownstream..**.**
03c0: 20 49 6e 20 64 65 70 6c 6f 79 6d 65 6e 74 2c 20   In deployment, 
03d0: 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
03e0: 29 20 2a 61 6c 77 61 79 73 2a 20 72 65 74 75 72  ) *always* retur
03f0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  n SQLITE_OK (0).
0400: 20 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33    The.** sqlite3
0410: 46 61 75 6c 74 53 69 6d 28 29 20 66 75 6e 63 74  FaultSim() funct
0420: 69 6f 6e 20 6f 6e 6c 79 20 72 65 74 75 72 6e 73  ion only returns
0430: 20 6e 6f 6e 2d 7a 65 72 6f 20 64 75 72 69 6e 67   non-zero during
0440: 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
0450: 44 75 72 69 6e 67 20 74 65 73 74 69 6e 67 2c 20  During testing, 
0460: 69 66 20 74 68 65 20 74 65 73 74 20 68 61 72 6e  if the test harn
0470: 65 73 73 20 68 61 73 20 73 65 74 20 61 20 66 61  ess has set a fa
0480: 75 6c 74 2d 73 69 6d 20 63 61 6c 6c 62 61 63 6b  ult-sim callback
0490: 20 75 73 69 6e 67 0a 2a 2a 20 61 20 63 61 6c 6c   using.** a call
04a0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 74 65 73 74   to sqlite3_test
04b0: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
04c0: 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f 49  TESTCTRL_FAULT_I
04d0: 4e 53 54 41 4c 4c 29 2c 20 74 68 65 6e 0a 2a 2a  NSTALL), then.**
04e0: 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 73 71   each call to sq
04f0: 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
0500: 69 73 20 72 65 6c 61 79 65 64 20 74 6f 20 74 68  is relayed to th
0510: 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73  at application-s
0520: 75 70 70 6c 69 65 64 0a 2a 2a 20 63 61 6c 6c 62  upplied.** callb
0530: 61 63 6b 20 61 6e 64 20 74 68 65 20 69 6e 74 65  ack and the inte
0540: 67 65 72 20 72 65 74 75 72 6e 20 76 61 6c 75 65  ger return value
0550: 20 66 6f 72 6d 20 74 68 65 20 61 70 70 6c 69 63   form the applic
0560: 61 74 69 6f 6e 2d 73 75 70 70 6c 69 65 64 0a 2a  ation-supplied.*
0570: 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 72 65  * callback is re
0580: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
0590: 33 46 61 75 6c 74 53 69 6d 28 29 2e 0a 2a 2a 0a  3FaultSim()..**.
05a0: 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 61  ** The integer a
05b0: 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
05c0: 65 33 46 61 75 6c 74 53 69 6d 28 29 20 69 73 20  e3FaultSim() is 
05d0: 61 20 63 6f 64 65 20 74 6f 20 69 64 65 6e 74 69  a code to identi
05e0: 66 79 20 77 68 69 63 68 0a 2a 2a 20 73 71 6c 69  fy which.** sqli
05f0: 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 69 6e  te3FaultSim() in
0600: 73 74 61 6e 63 65 20 69 73 20 62 65 69 6e 67 20  stance is being 
0610: 69 6e 76 6f 6b 65 64 2e 20 45 61 63 68 20 63 61  invoked. Each ca
0620: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 46 61 75  ll to sqlite3Fau
0630: 6c 74 53 69 6d 28 29 0a 2a 2a 20 73 68 6f 75 6c  ltSim().** shoul
0640: 64 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  d have a unique 
0650: 63 6f 64 65 2e 20 20 54 6f 20 70 72 65 76 65 6e  code.  To preven
0660: 74 20 6c 65 67 61 63 79 20 74 65 73 74 69 6e 67  t legacy testing
0670: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 72   applications fr
0680: 6f 6d 0a 2a 2a 20 62 72 65 61 6b 69 6e 67 2c 20  om.** breaking, 
0690: 74 68 65 20 63 6f 64 65 73 20 73 68 6f 75 6c 64  the codes should
06a0: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
06b0: 6f 72 20 72 65 75 73 65 64 2e 0a 2a 2f 0a 23 69  or reused..*/.#i
06c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
06d0: 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69  ESTABLE.int sqli
06e0: 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 20  te3FaultSim(int 
06f0: 69 54 65 73 74 29 7b 0a 20 20 69 6e 74 20 28 2a  iTest){.  int (*
0700: 78 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 20  xCallback)(int) 
0710: 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  = sqlite3GlobalC
0720: 6f 6e 66 69 67 2e 78 54 65 73 74 43 61 6c 6c 62  onfig.xTestCallb
0730: 61 63 6b 3b 0a 20 20 72 65 74 75 72 6e 20 78 43  ack;.  return xC
0740: 61 6c 6c 62 61 63 6b 20 3f 20 78 43 61 6c 6c 62  allback ? xCallb
0750: 61 63 6b 28 69 54 65 73 74 29 20 3a 20 53 51 4c  ack(iTest) : SQL
0760: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
0770: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0780: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
0790: 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  OINT./*.** Retur
07a0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 66 6c  n true if the fl
07b0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
07c0: 75 65 20 69 73 20 4e 6f 74 20 61 20 4e 75 6d 62  ue is Not a Numb
07d0: 65 72 20 28 4e 61 4e 29 2e 0a 2a 2f 0a 69 6e 74  er (NaN)..*/.int
07e0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
07f0: 75 62 6c 65 20 78 29 7b 0a 20 20 75 36 34 20 79  uble x){.  u64 y
0800: 3b 0a 20 20 6d 65 6d 63 70 79 28 26 79 2c 26 78  ;.  memcpy(&y,&x
0810: 2c 73 69 7a 65 6f 66 28 79 29 29 3b 0a 20 20 72  ,sizeof(y));.  r
0820: 65 74 75 72 6e 20 49 73 4e 61 4e 28 79 29 3b 0a  eturn IsNaN(y);.
0830: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
0840: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
0850: 5f 50 4f 49 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _POINT */../*.**
0860: 20 43 6f 6d 70 75 74 65 20 61 20 73 74 72 69 6e   Compute a strin
0870: 67 20 6c 65 6e 67 74 68 20 74 68 61 74 20 69 73  g length that is
0880: 20 6c 69 6d 69 74 65 64 20 74 6f 20 77 68 61 74   limited to what
0890: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
08a0: 6e 0a 2a 2a 20 6c 6f 77 65 72 20 33 30 20 62 69  n.** lower 30 bi
08b0: 74 73 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73  ts of a 32-bit s
08c0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a  igned integer..*
08d0: 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 72  *.** The value r
08e0: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 6e 65 76  eturned will nev
08f0: 65 72 20 62 65 20 6e 65 67 61 74 69 76 65 2e 20  er be negative. 
0900: 20 4e 6f 72 20 77 69 6c 6c 20 69 74 20 65 76 65   Nor will it eve
0910: 72 20 62 65 20 67 72 65 61 74 65 72 0a 2a 2a 20  r be greater.** 
0920: 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
0930: 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  length of the st
0940: 72 69 6e 67 2e 20 20 46 6f 72 20 76 65 72 79 20  ring.  For very 
0950: 6c 6f 6e 67 20 73 74 72 69 6e 67 73 20 28 67 72  long strings (gr
0960: 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 31 47  eater.** than 1G
0970: 69 42 29 20 74 68 65 20 76 61 6c 75 65 20 72 65  iB) the value re
0980: 74 75 72 6e 65 64 20 6d 69 67 68 74 20 62 65 20  turned might be 
0990: 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72  less than the tr
09a0: 75 65 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ue string length
09b0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
09c0: 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
09d0: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20 7a  har *z){.  if( z
09e0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
09f0: 20 20 72 65 74 75 72 6e 20 30 78 33 66 66 66 66    return 0x3ffff
0a00: 66 66 66 20 26 20 28 69 6e 74 29 73 74 72 6c 65  fff & (int)strle
0a10: 6e 28 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n(z);.}../*.** R
0a20: 65 74 75 72 6e 20 74 68 65 20 64 65 63 6c 61 72  eturn the declar
0a30: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
0a40: 75 6d 6e 2e 20 20 4f 72 20 72 65 74 75 72 6e 20  umn.  Or return 
0a50: 7a 44 66 6c 74 20 69 66 20 74 68 65 20 63 6f 6c  zDflt if the col
0a60: 75 6d 6e 20 0a 2a 2a 20 68 61 73 20 6e 6f 20 64  umn .** has no d
0a70: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 0a 2a 2a  eclared type..**
0a80: 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 74  .** The column t
0a90: 79 70 65 20 69 73 20 61 6e 20 65 78 74 72 61 20  ype is an extra 
0aa0: 73 74 72 69 6e 67 20 73 74 6f 72 65 64 20 61 66  string stored af
0ab0: 74 65 72 20 74 68 65 20 7a 65 72 6f 2d 74 65 72  ter the zero-ter
0ac0: 6d 69 6e 61 74 6f 72 20 6f 6e 0a 2a 2a 20 74 68  minator on.** th
0ad0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 69 66  e column name if
0ae0: 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
0af0: 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45   COLFLAG_HASTYPE
0b00: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2f   flag is set..*/
0b10: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
0b20: 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 20  lumnType(Column 
0b30: 2a 70 43 6f 6c 2c 20 63 68 61 72 20 2a 7a 44 66  *pCol, char *zDf
0b40: 6c 74 29 7b 0a 20 20 69 66 28 20 28 70 43 6f 6c  lt){.  if( (pCol
0b50: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
0b60: 46 4c 41 47 5f 48 41 53 54 59 50 45 29 3d 3d 30  FLAG_HASTYPE)==0
0b70: 20 29 20 72 65 74 75 72 6e 20 7a 44 66 6c 74 3b   ) return zDflt;
0b80: 0a 20 20 72 65 74 75 72 6e 20 70 43 6f 6c 2d 3e  .  return pCol->
0b90: 7a 4e 61 6d 65 20 2b 20 73 74 72 6c 65 6e 28 70  zName + strlen(p
0ba0: 43 6f 6c 2d 3e 7a 4e 61 6d 65 29 20 2b 20 31 3b  Col->zName) + 1;
0bb0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 48 65 6c 70 65 72  .}../*.** Helper
0bc0: 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 73 71   function for sq
0bd0: 6c 69 74 65 33 45 72 72 6f 72 28 29 20 2d 20 63  lite3Error() - c
0be0: 61 6c 6c 65 64 20 72 61 72 65 6c 79 2e 20 20 42  alled rarely.  B
0bf0: 72 6f 6b 65 6e 20 6f 75 74 20 69 6e 74 6f 0a 2a  roken out into.*
0c00: 2a 20 61 20 73 65 70 61 72 61 74 65 20 72 6f 75  * a separate rou
0c10: 74 69 6e 65 20 74 6f 20 61 76 6f 69 64 20 75 6e  tine to avoid un
0c20: 6e 65 63 65 73 73 61 72 79 20 72 65 67 69 73 74  necessary regist
0c30: 65 72 20 73 61 76 65 73 20 6f 6e 20 65 6e 74 72  er saves on entr
0c40: 79 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 45  y to.** sqlite3E
0c50: 72 72 6f 72 28 29 2e 0a 2a 2f 0a 73 74 61 74 69  rror()..*/.stati
0c60: 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  c SQLITE_NOINLIN
0c70: 45 20 76 6f 69 64 20 20 73 71 6c 69 74 65 33 45  E void  sqlite3E
0c80: 72 72 6f 72 46 69 6e 69 73 68 28 73 71 6c 69 74  rrorFinish(sqlit
0c90: 65 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f  e3 *db, int err_
0ca0: 63 6f 64 65 29 7b 0a 20 20 69 66 28 20 64 62 2d  code){.  if( db-
0cb0: 3e 70 45 72 72 20 29 20 73 71 6c 69 74 65 33 56  >pErr ) sqlite3V
0cc0: 61 6c 75 65 53 65 74 4e 75 6c 6c 28 64 62 2d 3e  alueSetNull(db->
0cd0: 70 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  pErr);.  sqlite3
0ce0: 53 79 73 74 65 6d 45 72 72 6f 72 28 64 62 2c 20  SystemError(db, 
0cf0: 65 72 72 5f 63 6f 64 65 29 3b 0a 7d 0a 0a 2f 2a  err_code);.}../*
0d00: 0a 2a 2a 20 53 65 74 20 74 68 65 20 63 75 72 72  .** Set the curr
0d10: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 74  ent error code t
0d20: 6f 20 65 72 72 5f 63 6f 64 65 20 61 6e 64 20 63  o err_code and c
0d30: 6c 65 61 72 20 61 6e 79 20 70 72 69 6f 72 20 65  lear any prior e
0d40: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 2a 2a  rror message..**
0d50: 20 41 6c 73 6f 20 73 65 74 20 69 53 79 73 45 72   Also set iSysEr
0d60: 72 6e 6f 20 28 62 79 20 63 61 6c 6c 69 6e 67 20  rno (by calling 
0d70: 73 71 6c 69 74 65 33 53 79 73 74 65 6d 29 20 69  sqlite3System) i
0d80: 66 20 74 68 65 20 65 72 72 5f 63 6f 64 65 20 69  f the err_code i
0d90: 6e 64 69 63 61 74 65 73 0a 2a 2a 20 74 68 61 74  ndicates.** that
0da0: 20 77 6f 75 6c 64 20 62 65 20 61 70 70 72 6f 70   would be approp
0db0: 72 69 61 74 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73  riate..*/.void s
0dc0: 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
0dd0: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72  te3 *db, int err
0de0: 5f 63 6f 64 65 29 7b 0a 20 20 61 73 73 65 72 74  _code){.  assert
0df0: 28 20 64 62 21 3d 30 20 29 3b 0a 20 20 64 62 2d  ( db!=0 );.  db-
0e00: 3e 65 72 72 43 6f 64 65 20 3d 20 65 72 72 5f 63  >errCode = err_c
0e10: 6f 64 65 3b 0a 20 20 69 66 28 20 65 72 72 5f 63  ode;.  if( err_c
0e20: 6f 64 65 20 7c 7c 20 64 62 2d 3e 70 45 72 72 20  ode || db->pErr 
0e30: 29 20 73 71 6c 69 74 65 33 45 72 72 6f 72 46 69  ) sqlite3ErrorFi
0e40: 6e 69 73 68 28 64 62 2c 20 65 72 72 5f 63 6f 64  nish(db, err_cod
0e50: 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 61  e);.}../*.** Loa
0e60: 64 20 74 68 65 20 73 71 6c 69 74 65 33 2e 69 53  d the sqlite3.iS
0e70: 79 73 45 72 72 6e 6f 20 66 69 65 6c 64 20 69 66  ysErrno field if
0e80: 20 74 68 61 74 20 69 73 20 61 6e 20 61 70 70 72   that is an appr
0e90: 6f 70 72 69 61 74 65 20 74 68 69 6e 67 0a 2a 2a  opriate thing.**
0ea0: 20 74 6f 20 64 6f 20 62 61 73 65 64 20 6f 6e 20   to do based on 
0eb0: 74 68 65 20 53 51 4c 69 74 65 20 65 72 72 6f 72  the SQLite error
0ec0: 20 63 6f 64 65 20 69 6e 20 72 63 2e 0a 2a 2f 0a   code in rc..*/.
0ed0: 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74  void sqlite3Syst
0ee0: 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 20  emError(sqlite3 
0ef0: 2a 64 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20  *db, int rc){.  
0f00: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49  if( rc==SQLITE_I
0f10: 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 72 65 74  OERR_NOMEM ) ret
0f20: 75 72 6e 3b 0a 20 20 72 63 20 26 3d 20 30 78 66  urn;.  rc &= 0xf
0f30: 66 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  f;.  if( rc==SQL
0f40: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 7c 7c 20  ITE_CANTOPEN || 
0f50: 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
0f60: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 69 53 79 73   ){.    db->iSys
0f70: 45 72 72 6e 6f 20 3d 20 73 71 6c 69 74 65 33 4f  Errno = sqlite3O
0f80: 73 47 65 74 4c 61 73 74 45 72 72 6f 72 28 64 62  sGetLastError(db
0f90: 2d 3e 70 56 66 73 29 3b 0a 20 20 7d 0a 7d 0a 0a  ->pVfs);.  }.}..
0fa0: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 6d 6f  /*.** Set the mo
0fb0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
0fc0: 63 6f 64 65 20 61 6e 64 20 65 72 72 6f 72 20 73  code and error s
0fd0: 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 73 71  tring for the sq
0fe0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 22  lite.** handle "
0ff0: 64 62 22 2e 20 54 68 65 20 65 72 72 6f 72 20 63  db". The error c
1000: 6f 64 65 20 69 73 20 73 65 74 20 74 6f 20 22 65  ode is set to "e
1010: 72 72 5f 63 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a 20  rr_code"..**.** 
1020: 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c  If it is not NUL
1030: 4c 2c 20 73 74 72 69 6e 67 20 7a 46 6f 72 6d 61  L, string zForma
1040: 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
1050: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 0a 2a 2a  format of the.**
1060: 20 65 72 72 6f 72 20 73 74 72 69 6e 67 20 69 6e   error string in
1070: 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 74 68   the style of th
1080: 65 20 70 72 69 6e 74 66 20 66 75 6e 63 74 69 6f  e printf functio
1090: 6e 73 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ns: The followin
10a0: 67 0a 2a 2a 20 66 6f 72 6d 61 74 20 63 68 61 72  g.** format char
10b0: 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c 6f 77  acters are allow
10c0: 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25  ed:.**.**      %
10d0: 73 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20  s      Insert a 
10e0: 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 25  string.**      %
10f0: 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e 67 20  z      A string 
1100: 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 66  that should be f
1110: 72 65 65 64 20 61 66 74 65 72 20 75 73 65 0a 2a  reed after use.*
1120: 2a 20 20 20 20 20 20 25 64 20 20 20 20 20 20 49  *      %d      I
1130: 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67 65 72  nsert an integer
1140: 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20 20 20  .**      %T     
1150: 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65 6e 0a   Insert a token.
1160: 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20 20 20  **      %S      
1170: 49 6e 73 65 72 74 20 74 68 65 20 66 69 72 73 74  Insert the first
1180: 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 53 72   element of a Sr
1190: 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f 72  cList.**.** zFor
11a0: 6d 61 74 20 61 6e 64 20 61 6e 79 20 73 74 72 69  mat and any stri
11b0: 6e 67 20 74 6f 6b 65 6e 73 20 74 68 61 74 20 66  ng tokens that f
11c0: 6f 6c 6c 6f 77 20 69 74 20 61 72 65 20 61 73 73  ollow it are ass
11d0: 75 6d 65 64 20 74 6f 20 62 65 0a 2a 2a 20 65 6e  umed to be.** en
11e0: 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a  coded in UTF-8..
11f0: 2a 2a 0a 2a 2a 20 54 6f 20 63 6c 65 61 72 20 74  **.** To clear t
1200: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65  he most recent e
1210: 72 72 6f 72 20 66 6f 72 20 73 71 6c 69 74 65 20  rror for sqlite 
1220: 68 61 6e 64 6c 65 20 22 64 62 22 2c 20 73 71 6c  handle "db", sql
1230: 69 74 65 33 45 72 72 6f 72 0a 2a 2a 20 73 68 6f  ite3Error.** sho
1240: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 77 69  uld be called wi
1250: 74 68 20 65 72 72 5f 63 6f 64 65 20 73 65 74 20  th err_code set 
1260: 74 6f 20 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64  to SQLITE_OK and
1270: 20 7a 46 6f 72 6d 61 74 20 73 65 74 0a 2a 2a 20   zFormat set.** 
1280: 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64  to NULL..*/.void
1290: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
12a0: 68 4d 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62  hMsg(sqlite3 *db
12b0: 2c 20 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20  , int err_code, 
12c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
12d0: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 61 73 73  mat, ...){.  ass
12e0: 65 72 74 28 20 64 62 21 3d 30 20 29 3b 0a 20 20  ert( db!=0 );.  
12f0: 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 65 72  db->errCode = er
1300: 72 5f 63 6f 64 65 3b 0a 20 20 73 71 6c 69 74 65  r_code;.  sqlite
1310: 33 53 79 73 74 65 6d 45 72 72 6f 72 28 64 62 2c  3SystemError(db,
1320: 20 65 72 72 5f 63 6f 64 65 29 3b 0a 20 20 69 66   err_code);.  if
1330: 28 20 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a  ( zFormat==0 ){.
1340: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
1350: 28 64 62 2c 20 65 72 72 5f 63 6f 64 65 29 3b 0a  (db, err_code);.
1360: 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
1370: 70 45 72 72 20 7c 7c 20 28 64 62 2d 3e 70 45 72  pErr || (db->pEr
1380: 72 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  r = sqlite3Value
1390: 4e 65 77 28 64 62 29 29 21 3d 30 20 29 7b 0a 20  New(db))!=0 ){. 
13a0: 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
13b0: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20 20  va_list ap;.    
13c0: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
13d0: 72 6d 61 74 29 3b 0a 20 20 20 20 7a 20 3d 20 73  rmat);.    z = s
13e0: 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64  qlite3VMPrintf(d
13f0: 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  b, zFormat, ap);
1400: 0a 20 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  .    va_end(ap);
1410: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
1420: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
1430: 2c 20 2d 31 2c 20 7a 2c 20 53 51 4c 49 54 45 5f  , -1, z, SQLITE_
1440: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 44 59 4e  UTF8, SQLITE_DYN
1450: 41 4d 49 43 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  AMIC);.  }.}../*
1460: 0a 2a 2a 20 41 64 64 20 61 6e 20 65 72 72 6f 72  .** Add an error
1470: 20 6d 65 73 73 61 67 65 20 74 6f 20 70 50 61 72   message to pPar
1480: 73 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64 20  se->zErrMsg and 
1490: 69 6e 63 72 65 6d 65 6e 74 20 70 50 61 72 73 65  increment pParse
14a0: 2d 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20 66  ->nErr..** The f
14b0: 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 74  ollowing formatt
14c0: 69 6e 67 20 63 68 61 72 61 63 74 65 72 73 20 61  ing characters a
14d0: 72 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a  re allowed:.**.*
14e0: 2a 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49  *      %s      I
14f0: 6e 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a  nsert a string.*
1500: 2a 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41  *      %z      A
1510: 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f   string that sho
1520: 75 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74  uld be freed aft
1530: 65 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25  er use.**      %
1540: 64 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e  d      Insert an
1550: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20   integer.**     
1560: 20 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20   %T      Insert 
1570: 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20  a token.**      
1580: 25 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74  %S      Insert t
1590: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
15a0: 20 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a   of a SrcList.**
15b0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
15c0: 6e 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  n should be used
15d0: 20 74 6f 20 72 65 70 6f 72 74 20 61 6e 79 20 65   to report any e
15e0: 72 72 6f 72 20 74 68 61 74 20 6f 63 63 75 72 73  rror that occurs
15f0: 20 77 68 69 6c 65 0a 2a 2a 20 63 6f 6d 70 69 6c   while.** compil
1600: 69 6e 67 20 61 6e 20 53 51 4c 20 73 74 61 74 65  ing an SQL state
1610: 6d 65 6e 74 20 28 69 2e 65 2e 20 77 69 74 68 69  ment (i.e. withi
1620: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
1630: 65 28 29 29 2e 20 54 68 65 0a 2a 2a 20 6c 61 73  e()). The.** las
1640: 74 20 74 68 69 6e 67 20 74 68 65 20 73 71 6c 69  t thing the sqli
1650: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 66 75  te3_prepare() fu
1660: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 69 73 20 63  nction does is c
1670: 6f 70 79 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  opy the error.**
1680: 20 73 74 6f 72 65 64 20 62 79 20 74 68 69 73 20   stored by this 
1690: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 74 68  function into th
16a0: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
16b0: 65 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 45  e using sqlite3E
16c0: 72 72 6f 72 28 29 2e 0a 2a 2a 20 46 75 6e 63 74  rror()..** Funct
16d0: 69 6f 6e 73 20 73 71 6c 69 74 65 33 45 72 72 6f  ions sqlite3Erro
16e0: 72 28 29 20 6f 72 20 73 71 6c 69 74 65 33 45 72  r() or sqlite3Er
16f0: 72 6f 72 57 69 74 68 4d 73 67 28 29 20 73 68 6f  rorWithMsg() sho
1700: 75 6c 64 20 62 65 20 75 73 65 64 0a 2a 2a 20 64  uld be used.** d
1710: 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
1720: 65 78 65 63 75 74 69 6f 6e 20 28 73 71 6c 69 74  execution (sqlit
1730: 65 33 5f 73 74 65 70 28 29 20 65 74 63 2e 29 2e  e3_step() etc.).
1740: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
1750: 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 20 2a  ErrorMsg(Parse *
1760: 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
1770: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
1780: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 73 67 3b  ){.  char *zMsg;
1790: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
17a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
17b0: 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 76 61 5f  Parse->db;.  va_
17c0: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
17d0: 74 29 3b 0a 20 20 7a 4d 73 67 20 3d 20 73 71 6c  t);.  zMsg = sql
17e0: 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64 62 2c  ite3VMPrintf(db,
17f0: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
1800: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 69   va_end(ap);.  i
1810: 66 28 20 64 62 2d 3e 73 75 70 70 72 65 73 73 45  f( db->suppressE
1820: 72 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rr ){.    sqlite
1830: 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4d 73 67  3DbFree(db, zMsg
1840: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
1850: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
1860: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1870: 65 28 64 62 2c 20 70 50 61 72 73 65 2d 3e 7a 45  e(db, pParse->zE
1880: 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 50 61 72  rrMsg);.    pPar
1890: 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 7a 4d  se->zErrMsg = zM
18a0: 73 67 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  sg;.    pParse->
18b0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
18c0: 52 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  R;.  }.}../*.** 
18d0: 49 66 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  If database conn
18e0: 65 63 74 69 6f 6e 20 64 62 20 69 73 20 63 75 72  ection db is cur
18f0: 72 65 6e 74 6c 79 20 70 61 72 73 69 6e 67 20 53  rently parsing S
1900: 51 4c 2c 20 74 68 65 6e 20 74 72 61 6e 73 66 65  QL, then transfe
1910: 72 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 20  r.** error code 
1920: 65 72 72 43 6f 64 65 20 74 6f 20 74 68 61 74 20  errCode to that 
1930: 70 61 72 73 65 72 20 69 66 20 74 68 65 20 70 61  parser if the pa
1940: 72 73 65 72 20 68 61 73 20 6e 6f 74 20 61 6c 72  rser has not alr
1950: 65 61 64 79 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65  eady.** encounte
1960: 72 65 64 20 73 6f 6d 65 20 6f 74 68 65 72 20 6b  red some other k
1970: 69 6e 64 20 6f 66 20 65 72 72 6f 72 2e 0a 2a 2f  ind of error..*/
1980: 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 72 72 6f  .int sqlite3Erro
1990: 72 54 6f 50 61 72 73 65 72 28 73 71 6c 69 74 65  rToParser(sqlite
19a0: 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 43 6f  3 *db, int errCo
19b0: 64 65 29 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  de){.  Parse *pP
19c0: 61 72 73 65 3b 0a 20 20 69 66 28 20 64 62 3d 3d  arse;.  if( db==
19d0: 30 20 7c 7c 20 28 70 50 61 72 73 65 20 3d 20 64  0 || (pParse = d
19e0: 62 2d 3e 70 50 61 72 73 65 29 3d 3d 30 20 29 20  b->pParse)==0 ) 
19f0: 72 65 74 75 72 6e 20 65 72 72 43 6f 64 65 3b 0a  return errCode;.
1a00: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 65    pParse->rc = e
1a10: 72 72 43 6f 64 65 3b 0a 20 20 70 50 61 72 73 65  rrCode;.  pParse
1a20: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 72 65 74 75  ->nErr++;.  retu
1a30: 72 6e 20 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f  rn errCode;.}../
1a40: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20  *.** Convert an 
1a50: 53 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74 65 64  SQL-style quoted
1a60: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e   string into a n
1a70: 6f 72 6d 61 6c 20 73 74 72 69 6e 67 20 62 79 20  ormal string by 
1a80: 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68 65 20  removing.** the 
1a90: 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73  quote characters
1aa0: 2e 20 20 54 68 65 20 63 6f 6e 76 65 72 73 69 6f  .  The conversio
1ab0: 6e 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70 6c 61  n is done in-pla
1ac0: 63 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 69  ce.  If the.** i
1ad0: 6e 70 75 74 20 64 6f 65 73 20 6e 6f 74 20 62 65  nput does not be
1ae0: 67 69 6e 20 77 69 74 68 20 61 20 71 75 6f 74 65  gin with a quote
1af0: 20 63 68 61 72 61 63 74 65 72 2c 20 74 68 65 6e   character, then
1b00: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
1b10: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a   is a no-op..**.
1b20: 2a 2a 20 54 68 65 20 69 6e 70 75 74 20 73 74 72  ** The input str
1b30: 69 6e 67 20 6d 75 73 74 20 62 65 20 7a 65 72 6f  ing must be zero
1b40: 2d 74 65 72 6d 69 6e 61 74 65 64 2e 20 20 41 20  -terminated.  A 
1b50: 6e 65 77 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61  new zero-termina
1b60: 74 6f 72 0a 2a 2a 20 69 73 20 61 64 64 65 64 20  tor.** is added 
1b70: 74 6f 20 74 68 65 20 64 65 71 75 6f 74 65 64 20  to the dequoted 
1b80: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  string..**.** Th
1b90: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  e return value i
1ba0: 73 20 2d 31 20 69 66 20 6e 6f 20 64 65 71 75 6f  s -1 if no dequo
1bb0: 74 69 6e 67 20 6f 63 63 75 72 73 20 6f 72 20 74  ting occurs or t
1bc0: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
1bd0: 0a 2a 2a 20 64 65 71 75 6f 74 65 64 20 73 74 72  .** dequoted str
1be0: 69 6e 67 2c 20 65 78 63 6c 75 73 69 76 65 20 6f  ing, exclusive o
1bf0: 66 20 74 68 65 20 7a 65 72 6f 20 74 65 72 6d 69  f the zero termi
1c00: 6e 61 74 6f 72 2c 20 69 66 20 64 65 71 75 6f 74  nator, if dequot
1c10: 69 6e 67 20 64 6f 65 73 0a 2a 2a 20 6f 63 63 75  ing does.** occu
1c20: 72 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 32 2d 30 32  r..**.** 2002-02
1c30: 2d 31 34 3a 20 54 68 69 73 20 72 6f 75 74 69 6e  -14: This routin
1c40: 65 20 69 73 20 65 78 74 65 6e 64 65 64 20 74 6f  e is extended to
1c50: 20 72 65 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73   remove MS-Acces
1c60: 73 20 73 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b  s style.** brack
1c70: 65 74 73 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20  ets from around 
1c80: 69 64 65 6e 74 69 66 69 65 72 73 2e 20 20 46 6f  identifiers.  Fo
1c90: 72 20 65 78 61 6d 70 6c 65 3a 20 20 22 5b 61 2d  r example:  "[a-
1ca0: 62 2d 63 5d 22 20 62 65 63 6f 6d 65 73 0a 2a 2a  b-c]" becomes.**
1cb0: 20 22 61 2d 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69   "a-b-c"..*/.voi
1cc0: 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
1cd0: 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61  (char *z){.  cha
1ce0: 72 20 71 75 6f 74 65 3b 0a 20 20 69 6e 74 20 69  r quote;.  int i
1cf0: 2c 20 6a 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  , j;.  if( z==0 
1d00: 29 20 72 65 74 75 72 6e 3b 0a 20 20 71 75 6f 74  ) return;.  quot
1d10: 65 20 3d 20 7a 5b 30 5d 3b 0a 20 20 69 66 28 20  e = z[0];.  if( 
1d20: 21 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28  !sqlite3Isquote(
1d30: 71 75 6f 74 65 29 20 29 20 72 65 74 75 72 6e 3b  quote) ) return;
1d40: 0a 20 20 69 66 28 20 71 75 6f 74 65 3d 3d 27 5b  .  if( quote=='[
1d50: 27 20 29 20 71 75 6f 74 65 20 3d 20 27 5d 27 3b  ' ) quote = ']';
1d60: 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b  .  for(i=1, j=0;
1d70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
1d80: 72 74 28 20 7a 5b 69 5d 20 29 3b 0a 20 20 20 20  rt( z[i] );.    
1d90: 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20  if( z[i]==quote 
1da0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69  ){.      if( z[i
1db0: 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20  +1]==quote ){.  
1dc0: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71        z[j++] = q
1dd0: 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69 2b  uote;.        i+
1de0: 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  +;.      }else{.
1df0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1e00: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1e10: 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d  {.      z[j++] =
1e20: 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d   z[i];.    }.  }
1e30: 0a 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 76  .  z[j] = 0;.}.v
1e40: 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
1e50: 74 65 45 78 70 72 28 45 78 70 72 20 2a 70 29 7b  teExpr(Expr *p){
1e60: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
1e70: 65 33 49 73 71 75 6f 74 65 28 70 2d 3e 75 2e 7a  e3Isquote(p->u.z
1e80: 54 6f 6b 65 6e 5b 30 5d 29 20 29 3b 0a 20 20 70  Token[0]) );.  p
1e90: 2d 3e 66 6c 61 67 73 20 7c 3d 20 70 2d 3e 75 2e  ->flags |= p->u.
1ea0: 7a 54 6f 6b 65 6e 5b 30 5d 3d 3d 27 22 27 20 3f  zToken[0]=='"' ?
1eb0: 20 45 50 5f 51 75 6f 74 65 64 7c 45 50 5f 44 62   EP_Quoted|EP_Db
1ec0: 6c 51 75 6f 74 65 64 20 3a 20 45 50 5f 51 75 6f  lQuoted : EP_Quo
1ed0: 74 65 64 3b 0a 20 20 73 71 6c 69 74 65 33 44 65  ted;.  sqlite3De
1ee0: 71 75 6f 74 65 28 70 2d 3e 75 2e 7a 54 6f 6b 65  quote(p->u.zToke
1ef0: 6e 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  n);.}../*.** Gen
1f00: 65 72 61 74 65 20 61 20 54 6f 6b 65 6e 20 6f 62  erate a Token ob
1f10: 6a 65 63 74 20 66 72 6f 6d 20 61 20 73 74 72 69  ject from a stri
1f20: 6e 67 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ng.*/.void sqlit
1f30: 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
1f40: 6e 20 2a 70 2c 20 63 68 61 72 20 2a 7a 29 7b 0a  n *p, char *z){.
1f50: 20 20 70 2d 3e 7a 20 3d 20 7a 3b 0a 20 20 70 2d    p->z = z;.  p-
1f60: 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
1f70: 65 6e 33 30 28 7a 29 3b 0a 7d 0a 0a 2f 2a 20 43  en30(z);.}../* C
1f80: 6f 6e 76 65 6e 69 65 6e 74 20 73 68 6f 72 74 2d  onvenient short-
1f90: 68 61 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  hand */.#define 
1fa0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 20 73 71 6c  UpperToLower sql
1fb0: 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
1fc0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 73 79 73  ../*.** Some sys
1fd0: 74 65 6d 73 20 68 61 76 65 20 73 74 72 69 63 6d  tems have stricm
1fe0: 70 28 29 2e 20 20 4f 74 68 65 72 73 20 68 61 76  p().  Others hav
1ff0: 65 20 73 74 72 63 61 73 65 63 6d 70 28 29 2e 20  e strcasecmp(). 
2000: 20 42 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 72   Because.** ther
2010: 65 20 69 73 20 6e 6f 20 63 6f 6e 73 69 73 74 65  e is no consiste
2020: 6e 63 79 2c 20 77 65 20 77 69 6c 6c 20 64 65 66  ncy, we will def
2030: 69 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a 2a 2a 0a  ine our own..**.
2040: 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
2050: 4e 2d 4f 46 3a 20 52 2d 33 30 32 34 33 2d 30 32  N-OF: R-30243-02
2060: 34 39 34 20 54 68 65 20 73 71 6c 69 74 65 33 5f  494 The sqlite3_
2070: 73 74 72 69 63 6d 70 28 29 20 61 6e 64 0a 2a 2a  stricmp() and.**
2080: 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
2090: 70 28 29 20 41 50 49 73 20 61 6c 6c 6f 77 20 61  p() APIs allow a
20a0: 70 70 6c 69 63 61 74 69 6f 6e 73 20 61 6e 64 20  pplications and 
20b0: 65 78 74 65 6e 73 69 6f 6e 73 20 74 6f 20 63 6f  extensions to co
20c0: 6d 70 61 72 65 0a 2a 2a 20 74 68 65 20 63 6f 6e  mpare.** the con
20d0: 74 65 6e 74 73 20 6f 66 20 74 77 6f 20 62 75 66  tents of two buf
20e0: 66 65 72 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  fers containing 
20f0: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 20 69 6e  UTF-8 strings in
2100: 20 61 0a 2a 2a 20 63 61 73 65 2d 69 6e 64 65 70   a.** case-indep
2110: 65 6e 64 65 6e 74 20 66 61 73 68 69 6f 6e 2c 20  endent fashion, 
2120: 75 73 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  using the same d
2130: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 61  efinition of "ca
2140: 73 65 0a 2a 2a 20 69 6e 64 65 70 65 6e 64 65 6e  se.** independen
2150: 63 65 22 20 74 68 61 74 20 53 51 4c 69 74 65 20  ce" that SQLite 
2160: 75 73 65 73 20 69 6e 74 65 72 6e 61 6c 6c 79 20  uses internally 
2170: 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 69  when comparing i
2180: 64 65 6e 74 69 66 69 65 72 73 2e 0a 2a 2f 0a 69  dentifiers..*/.i
2190: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  nt sqlite3_stric
21a0: 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  mp(const char *z
21b0: 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  Left, const char
21c0: 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 69 66 28   *zRight){.  if(
21d0: 20 7a 4c 65 66 74 3d 3d 30 20 29 7b 0a 20 20 20   zLeft==0 ){.   
21e0: 20 72 65 74 75 72 6e 20 7a 52 69 67 68 74 20 3f   return zRight ?
21f0: 20 2d 31 20 3a 20 30 3b 0a 20 20 7d 65 6c 73 65   -1 : 0;.  }else
2200: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
2210: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  {.    return 1;.
2220: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c    }.  return sql
2230: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
2240: 74 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 69 6e  t, zRight);.}.in
2250: 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  t sqlite3StrICmp
2260: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65  (const char *zLe
2270: 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ft, const char *
2280: 7a 52 69 67 68 74 29 7b 0a 20 20 75 6e 73 69 67  zRight){.  unsig
2290: 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b  ned char *a, *b;
22a0: 0a 20 20 69 6e 74 20 63 2c 20 78 3b 0a 20 20 61  .  int c, x;.  a
22b0: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
22c0: 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d  r *)zLeft;.  b =
22d0: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
22e0: 2a 29 7a 52 69 67 68 74 3b 0a 20 20 66 6f 72 28  *)zRight;.  for(
22f0: 3b 3b 29 7b 0a 20 20 20 20 63 20 3d 20 2a 61 3b  ;;){.    c = *a;
2300: 0a 20 20 20 20 78 20 3d 20 2a 62 3b 0a 20 20 20  .    x = *b;.   
2310: 20 69 66 28 20 63 3d 3d 78 20 29 7b 0a 20 20 20   if( c==x ){.   
2320: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20 62 72     if( c==0 ) br
2330: 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  eak;.    }else{.
2340: 20 20 20 20 20 20 63 20 3d 20 28 69 6e 74 29 55        c = (int)U
2350: 70 70 65 72 54 6f 4c 6f 77 65 72 5b 63 5d 20 2d  pperToLower[c] -
2360: 20 28 69 6e 74 29 55 70 70 65 72 54 6f 4c 6f 77   (int)UpperToLow
2370: 65 72 5b 78 5d 3b 0a 20 20 20 20 20 20 69 66 28  er[x];.      if(
2380: 20 63 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20   c ) break;.    
2390: 7d 0a 20 20 20 20 61 2b 2b 3b 0a 20 20 20 20 62  }.    a++;.    b
23a0: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
23b0: 20 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65   c;.}.int sqlite
23c0: 33 5f 73 74 72 6e 69 63 6d 70 28 63 6f 6e 73 74  3_strnicmp(const
23d0: 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f   char *zLeft, co
23e0: 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74  nst char *zRight
23f0: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 67 69  , int N){.  regi
2400: 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68  ster unsigned ch
2410: 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 69 66 28  ar *a, *b;.  if(
2420: 20 7a 4c 65 66 74 3d 3d 30 20 29 7b 0a 20 20 20   zLeft==0 ){.   
2430: 20 72 65 74 75 72 6e 20 7a 52 69 67 68 74 20 3f   return zRight ?
2440: 20 2d 31 20 3a 20 30 3b 0a 20 20 7d 65 6c 73 65   -1 : 0;.  }else
2450: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
2460: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  {.    return 1;.
2470: 20 20 7d 0a 20 20 61 20 3d 20 28 75 6e 73 69 67    }.  a = (unsig
2480: 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74  ned char *)zLeft
2490: 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  b = (unsigne
24a0: 64 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b  d char *)zRight;
24b0: 0a 20 20 77 68 69 6c 65 28 20 4e 2d 2d 20 3e 20  .  while( N-- > 
24c0: 30 20 26 26 20 2a 61 21 3d 30 20 26 26 20 55 70  0 && *a!=0 && Up
24d0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d  perToLower[*a]==
24e0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
24f0: 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20  ){ a++; b++; }. 
2500: 20 72 65 74 75 72 6e 20 4e 3c 30 20 3f 20 30 20   return N<0 ? 0 
2510: 3a 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  : UpperToLower[*
2520: 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65  a] - UpperToLowe
2530: 72 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  r[*b];.}../*.** 
2540: 43 6f 6d 70 75 74 65 20 31 30 20 74 6f 20 74 68  Compute 10 to th
2550: 65 20 45 2d 74 68 20 70 6f 77 65 72 2e 20 20 45  e E-th power.  E
2560: 78 61 6d 70 6c 65 73 3a 20 20 45 3d 3d 31 20 72  xamples:  E==1 r
2570: 65 73 75 6c 74 73 20 69 6e 20 31 30 2e 0a 2a 2a  esults in 10..**
2580: 20 45 3d 3d 32 20 72 65 73 75 6c 74 73 20 69 6e   E==2 results in
2590: 20 31 30 30 2e 20 20 45 3d 3d 35 30 20 72 65 73   100.  E==50 res
25a0: 75 6c 74 73 20 69 6e 20 31 2e 30 65 35 30 2e 0a  ults in 1.0e50..
25b0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
25c0: 6e 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  ne only works fo
25d0: 72 20 76 61 6c 75 65 73 20 6f 66 20 45 20 62 65  r values of E be
25e0: 74 77 65 65 6e 20 31 20 61 6e 64 20 33 34 31 2e  tween 1 and 341.
25f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 4c 4f 4e 47 44  .*/.static LONGD
2600: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
2610: 65 33 50 6f 77 31 30 28 69 6e 74 20 45 29 7b 0a  e3Pow10(int E){.
2620: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
2630: 5f 56 45 52 29 0a 20 20 73 74 61 74 69 63 20 63  _VER).  static c
2640: 6f 6e 73 74 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  onst LONGDOUBLE_
2650: 54 59 50 45 20 78 5b 5d 20 3d 20 7b 0a 20 20 20  TYPE x[] = {.   
2660: 20 31 2e 30 65 2b 30 30 31 4c 2c 0a 20 20 20 20   1.0e+001L,.    
2670: 31 2e 30 65 2b 30 30 32 4c 2c 0a 20 20 20 20 31  1.0e+002L,.    1
2680: 2e 30 65 2b 30 30 34 4c 2c 0a 20 20 20 20 31 2e  .0e+004L,.    1.
2690: 30 65 2b 30 30 38 4c 2c 0a 20 20 20 20 31 2e 30  0e+008L,.    1.0
26a0: 65 2b 30 31 36 4c 2c 0a 20 20 20 20 31 2e 30 65  e+016L,.    1.0e
26b0: 2b 30 33 32 4c 2c 0a 20 20 20 20 31 2e 30 65 2b  +032L,.    1.0e+
26c0: 30 36 34 4c 2c 0a 20 20 20 20 31 2e 30 65 2b 31  064L,.    1.0e+1
26d0: 32 38 4c 2c 0a 20 20 20 20 31 2e 30 65 2b 32 35  28L,.    1.0e+25
26e0: 36 4c 0a 20 20 7d 3b 0a 20 20 4c 4f 4e 47 44 4f  6L.  };.  LONGDO
26f0: 55 42 4c 45 5f 54 59 50 45 20 72 20 3d 20 31 2e  UBLE_TYPE r = 1.
2700: 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73  0;.  int i;.  as
2710: 73 65 72 74 28 20 45 3e 3d 30 20 26 26 20 45 3c  sert( E>=0 && E<
2720: 3d 33 30 37 20 29 3b 0a 20 20 66 6f 72 28 69 3d  =307 );.  for(i=
2730: 30 3b 20 45 21 3d 30 3b 20 69 2b 2b 2c 20 45 20  0; E!=0; i++, E 
2740: 3e 3e 3d 31 29 7b 0a 20 20 20 20 69 66 28 20 45  >>=1){.    if( E
2750: 20 26 20 31 20 29 20 72 20 2a 3d 20 78 5b 69 5d   & 1 ) r *= x[i]
2760: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
2770: 3b 0a 23 65 6c 73 65 0a 20 20 4c 4f 4e 47 44 4f  ;.#else.  LONGDO
2780: 55 42 4c 45 5f 54 59 50 45 20 78 20 3d 20 31 30  UBLE_TYPE x = 10
2790: 2e 30 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45  .0;.  LONGDOUBLE
27a0: 5f 54 59 50 45 20 72 20 3d 20 31 2e 30 3b 0a 20  _TYPE r = 1.0;. 
27b0: 20 77 68 69 6c 65 28 31 29 7b 0a 20 20 20 20 69   while(1){.    i
27c0: 66 28 20 45 20 26 20 31 20 29 20 72 20 2a 3d 20  f( E & 1 ) r *= 
27d0: 78 3b 0a 20 20 20 20 45 20 3e 3e 3d 20 31 3b 0a  x;.    E >>= 1;.
27e0: 20 20 20 20 69 66 28 20 45 3d 3d 30 20 29 20 62      if( E==0 ) b
27f0: 72 65 61 6b 3b 0a 20 20 20 20 78 20 2a 3d 20 78  reak;.    x *= x
2800: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
2810: 3b 20 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  ; .#endif.}../*.
2820: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a 5b  ** The string z[
2830: 5d 20 69 73 20 61 6e 20 74 65 78 74 20 72 65 70  ] is an text rep
2840: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  resentation of a
2850: 20 72 65 61 6c 20 6e 75 6d 62 65 72 2e 0a 2a 2a   real number..**
2860: 20 43 6f 6e 76 65 72 74 20 74 68 69 73 20 73 74   Convert this st
2870: 72 69 6e 67 20 74 6f 20 61 20 64 6f 75 62 6c 65  ring to a double
2880: 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
2890: 74 6f 20 2a 70 52 65 73 75 6c 74 2e 0a 2a 2a 0a  to *pResult..**.
28a0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a 5b  ** The string z[
28b0: 5d 20 69 73 20 6c 65 6e 67 74 68 20 62 79 74 65  ] is length byte
28c0: 73 20 69 6e 20 6c 65 6e 67 74 68 20 28 62 79 74  s in length (byt
28d0: 65 73 2c 20 6e 6f 74 20 63 68 61 72 61 63 74 65  es, not characte
28e0: 72 73 29 20 61 6e 64 0a 2a 2a 20 75 73 65 73 20  rs) and.** uses 
28f0: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 65 6e 63  the encoding enc
2900: 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
2910: 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
2920: 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64   zero-terminated
2930: 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  ..**.** Return T
2940: 52 55 45 20 69 66 20 74 68 65 20 72 65 73 75 6c  RUE if the resul
2950: 74 20 69 73 20 61 20 76 61 6c 69 64 20 72 65 61  t is a valid rea
2960: 6c 20 6e 75 6d 62 65 72 20 28 6f 72 20 69 6e 74  l number (or int
2970: 65 67 65 72 29 20 61 6e 64 20 46 41 4c 53 45 0a  eger) and FALSE.
2980: 2a 2a 20 69 66 20 74 68 65 20 73 74 72 69 6e 67  ** if the string
2990: 20 69 73 20 65 6d 70 74 79 20 6f 72 20 63 6f 6e   is empty or con
29a0: 74 61 69 6e 73 20 65 78 74 72 61 6e 65 6f 75 73  tains extraneous
29b0: 20 74 65 78 74 2e 20 20 4d 6f 72 65 20 73 70 65   text.  More spe
29c0: 63 69 66 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 74  cifically.** ret
29d0: 75 72 6e 0a 2a 2a 20 20 20 20 20 20 31 20 20 20  urn.**      1   
29e0: 20 20 20 20 20 20 20 3d 3e 20 20 54 68 65 20 69         =>  The i
29f0: 6e 70 75 74 20 73 74 72 69 6e 67 20 69 73 20 61  nput string is a
2a00: 20 70 75 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a   pure integer.**
2a10: 20 20 20 20 20 20 32 20 6f 72 20 6d 6f 72 65 20        2 or more 
2a20: 20 3d 3e 20 20 54 68 65 20 69 6e 70 75 74 20 68   =>  The input h
2a30: 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70 6f 69  as a decimal poi
2a40: 6e 74 20 6f 72 20 65 4e 4e 4e 20 63 6c 61 75 73  nt or eNNN claus
2a50: 65 0a 2a 2a 20 20 20 20 20 20 30 20 6f 72 20 6c  e.**      0 or l
2a60: 65 73 73 20 20 3d 3e 20 20 54 68 65 20 69 6e 70  ess  =>  The inp
2a70: 75 74 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  ut string is not
2a80: 20 61 20 76 61 6c 69 64 20 6e 75 6d 62 65 72 0a   a valid number.
2a90: 2a 2a 20 20 20 20 20 2d 31 20 20 20 20 20 20 20  **     -1       
2aa0: 20 20 20 3d 3e 20 20 4e 6f 74 20 61 20 76 61 6c     =>  Not a val
2ab0: 69 64 20 6e 75 6d 62 65 72 2c 20 62 75 74 20 68  id number, but h
2ac0: 61 73 20 61 20 76 61 6c 69 64 20 70 72 65 66 69  as a valid prefi
2ad0: 78 20 77 68 69 63 68 20 0a 2a 2a 20 20 20 20 20  x which .**     
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 69 6e 63 6c 75 64 65 73 20 61 20 64 65 63 69 6d  includes a decim
2b00: 61 6c 20 70 6f 69 6e 74 20 61 6e 64 2f 6f 72 20  al point and/or 
2b10: 61 6e 20 65 4e 4e 4e 20 63 6c 61 75 73 65 0a 2a  an eNNN clause.*
2b20: 2a 0a 2a 2a 20 56 61 6c 69 64 20 6e 75 6d 62 65  *.** Valid numbe
2b30: 72 73 20 61 72 65 20 69 6e 20 6f 6e 65 20 6f 66  rs are in one of
2b40: 20 74 68 65 73 65 20 66 6f 72 6d 61 74 73 3a 0a   these formats:.
2b50: 2a 2a 0a 2a 2a 20 20 20 20 5b 2b 2d 5d 64 69 67  **.**    [+-]dig
2b60: 69 74 73 5b 45 5b 2b 2d 5d 64 69 67 69 74 73 5d  its[E[+-]digits]
2b70: 0a 2a 2a 20 20 20 20 5b 2b 2d 5d 64 69 67 69 74  .**    [+-]digit
2b80: 73 2e 5b 64 69 67 69 74 73 5d 5b 45 5b 2b 2d 5d  s.[digits][E[+-]
2b90: 64 69 67 69 74 73 5d 0a 2a 2a 20 20 20 20 5b 2b  digits].**    [+
2ba0: 2d 5d 2e 64 69 67 69 74 73 5b 45 5b 2b 2d 5d 64  -].digits[E[+-]d
2bb0: 69 67 69 74 73 5d 0a 2a 2a 0a 2a 2a 20 4c 65 61  igits].**.** Lea
2bc0: 64 69 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e  ding and trailin
2bd0: 67 20 77 68 69 74 65 73 70 61 63 65 20 69 73 20  g whitespace is 
2be0: 69 67 6e 6f 72 65 64 20 66 6f 72 20 74 68 65 20  ignored for the 
2bf0: 70 75 72 70 6f 73 65 20 6f 66 20 64 65 74 65 72  purpose of deter
2c00: 6d 69 6e 69 6e 67 0a 2a 2a 20 76 61 6c 69 64 69  mining.** validi
2c10: 74 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 73 6f 6d  ty..**.** If som
2c20: 65 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  e prefix of the 
2c30: 69 6e 70 75 74 20 73 74 72 69 6e 67 20 69 73 20  input string is 
2c40: 61 20 76 61 6c 69 64 20 6e 75 6d 62 65 72 2c 20  a valid number, 
2c50: 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  this routine.** 
2c60: 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20 62 75  returns FALSE bu
2c70: 74 20 69 74 20 73 74 69 6c 6c 20 63 6f 6e 76 65  t it still conve
2c80: 72 74 73 20 74 68 65 20 70 72 65 66 69 78 20 61  rts the prefix a
2c90: 6e 64 20 77 72 69 74 65 73 20 74 68 65 20 72 65  nd writes the re
2ca0: 73 75 6c 74 0a 2a 2a 20 69 6e 74 6f 20 2a 70 52  sult.** into *pR
2cb0: 65 73 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  esult..*/.#if de
2cc0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a  fined(_MSC_VER).
2cd0: 23 70 72 61 67 6d 61 20 77 61 72 6e 69 6e 67 28  #pragma warning(
2ce0: 64 69 73 61 62 6c 65 20 3a 20 34 37 35 36 29 0a  disable : 4756).
2cf0: 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2d00: 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
2d10: 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 20 2a 70 52  r *z, double *pR
2d20: 65 73 75 6c 74 2c 20 69 6e 74 20 6c 65 6e 67 74  esult, int lengt
2d30: 68 2c 20 75 38 20 65 6e 63 29 7b 0a 23 69 66 6e  h, u8 enc){.#ifn
2d40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d50: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
2d60: 20 69 6e 74 20 69 6e 63 72 3b 0a 20 20 63 6f 6e   int incr;.  con
2d70: 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 20 3d 20  st char *zEnd = 
2d80: 7a 20 2b 20 6c 65 6e 67 74 68 3b 0a 20 20 2f 2a  z + length;.  /*
2d90: 20 73 69 67 6e 20 2a 20 73 69 67 6e 69 66 69 63   sign * signific
2da0: 61 6e 64 20 2a 20 28 31 30 20 5e 20 28 65 73 69  and * (10 ^ (esi
2db0: 67 6e 20 2a 20 65 78 70 6f 6e 65 6e 74 29 29 20  gn * exponent)) 
2dc0: 2a 2f 0a 20 20 69 6e 74 20 73 69 67 6e 20 3d 20  */.  int sign = 
2dd0: 31 3b 20 20 20 20 2f 2a 20 73 69 67 6e 20 6f 66  1;    /* sign of
2de0: 20 73 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f 0a   significand */.
2df0: 20 20 69 36 34 20 73 20 3d 20 30 3b 20 20 20 20    i64 s = 0;    
2e00: 20 20 20 2f 2a 20 73 69 67 6e 69 66 69 63 61 6e     /* significan
2e10: 64 20 2a 2f 0a 20 20 69 6e 74 20 64 20 3d 20 30  d */.  int d = 0
2e20: 3b 20 20 20 20 20 20 20 2f 2a 20 61 64 6a 75 73  ;       /* adjus
2e30: 74 20 65 78 70 6f 6e 65 6e 74 20 66 6f 72 20 73  t exponent for s
2e40: 68 69 66 74 69 6e 67 20 64 65 63 69 6d 61 6c 20  hifting decimal 
2e50: 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 65  point */.  int e
2e60: 73 69 67 6e 20 3d 20 31 3b 20 20 20 2f 2a 20 73  sign = 1;   /* s
2e70: 69 67 6e 20 6f 66 20 65 78 70 6f 6e 65 6e 74 20  ign of exponent 
2e80: 2a 2f 0a 20 20 69 6e 74 20 65 20 3d 20 30 3b 20  */.  int e = 0; 
2e90: 20 20 20 20 20 20 2f 2a 20 65 78 70 6f 6e 65 6e        /* exponen
2ea0: 74 20 2a 2f 0a 20 20 69 6e 74 20 65 56 61 6c 69  t */.  int eVali
2eb0: 64 20 3d 20 31 3b 20 20 2f 2a 20 54 72 75 65 20  d = 1;  /* True 
2ec0: 65 78 70 6f 6e 65 6e 74 20 69 73 20 65 69 74 68  exponent is eith
2ed0: 65 72 20 6e 6f 74 20 75 73 65 64 20 6f 72 20 69  er not used or i
2ee0: 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
2ef0: 0a 20 20 64 6f 75 62 6c 65 20 72 65 73 75 6c 74  .  double result
2f00: 3b 0a 20 20 69 6e 74 20 6e 44 69 67 69 74 20 3d  ;.  int nDigit =
2f10: 20 30 3b 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f   0;  /* Number o
2f20: 66 20 64 69 67 69 74 73 20 70 72 6f 63 65 73 73  f digits process
2f30: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 65 54 79 70  ed */.  int eTyp
2f40: 65 20 3d 20 31 3b 20 20 20 2f 2a 20 31 3a 20 70  e = 1;   /* 1: p
2f50: 75 72 65 20 69 6e 74 65 67 65 72 2c 20 20 32 2b  ure integer,  2+
2f60: 3a 20 66 72 61 63 74 69 6f 6e 61 6c 20 20 2d 31  : fractional  -1
2f70: 20 6f 72 20 6c 65 73 73 3a 20 62 61 64 20 55 54   or less: bad UT
2f80: 46 31 36 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  F16 */..  assert
2f90: 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ( enc==SQLITE_UT
2fa0: 46 38 20 7c 7c 20 65 6e 63 3d 3d 53 51 4c 49 54  F8 || enc==SQLIT
2fb0: 45 5f 55 54 46 31 36 4c 45 20 7c 7c 20 65 6e 63  E_UTF16LE || enc
2fc0: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
2fd0: 20 29 3b 0a 20 20 2a 70 52 65 73 75 6c 74 20 3d   );.  *pResult =
2fe0: 20 30 2e 30 3b 20 20 20 2f 2a 20 44 65 66 61 75   0.0;   /* Defau
2ff0: 6c 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2c  lt return value,
3000: 20 69 6e 20 63 61 73 65 20 6f 66 20 61 6e 20 65   in case of an e
3010: 72 72 6f 72 20 2a 2f 0a 0a 20 20 69 66 28 20 65  rror */..  if( e
3020: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
3030: 29 7b 0a 20 20 20 20 69 6e 63 72 20 3d 20 31 3b  ){.    incr = 1;
3040: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e  .  }else{.    in
3050: 74 20 69 3b 0a 20 20 20 20 69 6e 63 72 20 3d 20  t i;.    incr = 
3060: 32 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53  2;.    assert( S
3070: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3d 3d 32  QLITE_UTF16LE==2
3080: 20 26 26 20 53 51 4c 49 54 45 5f 55 54 46 31 36   && SQLITE_UTF16
3090: 42 45 3d 3d 33 20 29 3b 0a 20 20 20 20 74 65 73  BE==3 );.    tes
30a0: 74 63 61 73 65 28 20 65 6e 63 3d 3d 53 51 4c 49  tcase( enc==SQLI
30b0: 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
30c0: 20 20 74 65 73 74 63 61 73 65 28 20 65 6e 63 3d    testcase( enc=
30d0: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
30e0: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 33 2d 65  );.    for(i=3-e
30f0: 6e 63 3b 20 69 3c 6c 65 6e 67 74 68 20 26 26 20  nc; i<length && 
3100: 7a 5b 69 5d 3d 3d 30 3b 20 69 2b 3d 32 29 7b 7d  z[i]==0; i+=2){}
3110: 0a 20 20 20 20 69 66 28 20 69 3c 6c 65 6e 67 74  .    if( i<lengt
3120: 68 20 29 20 65 54 79 70 65 20 3d 20 2d 31 30 30  h ) eType = -100
3130: 3b 0a 20 20 20 20 7a 45 6e 64 20 3d 20 26 7a 5b  ;.    zEnd = &z[
3140: 69 5e 31 5d 3b 0a 20 20 20 20 7a 20 2b 3d 20 28  i^1];.    z += (
3150: 65 6e 63 26 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  enc&1);.  }..  /
3160: 2a 20 73 6b 69 70 20 6c 65 61 64 69 6e 67 20 73  * skip leading s
3170: 70 61 63 65 73 20 2a 2f 0a 20 20 77 68 69 6c 65  paces */.  while
3180: 28 20 7a 3c 7a 45 6e 64 20 26 26 20 73 71 6c 69  ( z<zEnd && sqli
3190: 74 65 33 49 73 73 70 61 63 65 28 2a 7a 29 20 29  te3Isspace(*z) )
31a0: 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 69 66 28 20   z+=incr;.  if( 
31b0: 7a 3e 3d 7a 45 6e 64 20 29 20 72 65 74 75 72 6e  z>=zEnd ) return
31c0: 20 30 3b 0a 0a 20 20 2f 2a 20 67 65 74 20 73 69   0;..  /* get si
31d0: 67 6e 20 6f 66 20 73 69 67 6e 69 66 69 63 61 6e  gn of significan
31e0: 64 20 2a 2f 0a 20 20 69 66 28 20 2a 7a 3d 3d 27  d */.  if( *z=='
31f0: 2d 27 20 29 7b 0a 20 20 20 20 73 69 67 6e 20 3d  -' ){.    sign =
3200: 20 2d 31 3b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72   -1;.    z+=incr
3210: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a  ;.  }else if( *z
3220: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 2b 3d  =='+' ){.    z+=
3230: 69 6e 63 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  incr;.  }..  /* 
3240: 63 6f 70 79 20 6d 61 78 20 73 69 67 6e 69 66 69  copy max signifi
3250: 63 61 6e 74 20 64 69 67 69 74 73 20 74 6f 20 73  cant digits to s
3260: 69 67 6e 69 66 69 63 61 6e 64 20 2a 2f 0a 20 20  ignificand */.  
3270: 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26 26  while( z<zEnd &&
3280: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
3290: 2a 7a 29 20 29 7b 0a 20 20 20 20 73 20 3d 20 73  *z) ){.    s = s
32a0: 2a 31 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29  *10 + (*z - '0')
32b0: 3b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72 3b 20 6e  ;.    z+=incr; n
32c0: 44 69 67 69 74 2b 2b 3b 0a 20 20 20 20 69 66 28  Digit++;.    if(
32d0: 20 73 3e 3d 28 28 4c 41 52 47 45 53 54 5f 49 4e   s>=((LARGEST_IN
32e0: 54 36 34 2d 39 29 2f 31 30 29 20 29 7b 0a 20 20  T64-9)/10) ){.  
32f0: 20 20 20 20 2f 2a 20 73 6b 69 70 20 6e 6f 6e 2d      /* skip non-
3300: 73 69 67 6e 69 66 69 63 61 6e 74 20 73 69 67 6e  significant sign
3310: 69 66 69 63 61 6e 64 20 64 69 67 69 74 73 0a 20  ificand digits. 
3320: 20 20 20 20 20 2a 2a 20 28 69 6e 63 72 65 61 73       ** (increas
3330: 65 20 65 78 70 6f 6e 65 6e 74 20 62 79 20 64 20  e exponent by d 
3340: 74 6f 20 73 68 69 66 74 20 64 65 63 69 6d 61 6c  to shift decimal
3350: 20 6c 65 66 74 29 20 2a 2f 0a 20 20 20 20 20 20   left) */.      
3360: 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26 26  while( z<zEnd &&
3370: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
3380: 2a 7a 29 20 29 7b 20 7a 2b 3d 69 6e 63 72 3b 20  *z) ){ z+=incr; 
3390: 64 2b 2b 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d  d++; }.    }.  }
33a0: 0a 20 20 69 66 28 20 7a 3e 3d 7a 45 6e 64 20 29  .  if( z>=zEnd )
33b0: 20 67 6f 74 6f 20 64 6f 5f 61 74 6f 66 5f 63 61   goto do_atof_ca
33c0: 6c 63 3b 0a 0a 20 20 2f 2a 20 69 66 20 64 65 63  lc;..  /* if dec
33d0: 69 6d 61 6c 20 70 6f 69 6e 74 20 69 73 20 70 72  imal point is pr
33e0: 65 73 65 6e 74 20 2a 2f 0a 20 20 69 66 28 20 2a  esent */.  if( *
33f0: 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a 2b  z=='.' ){.    z+
3400: 3d 69 6e 63 72 3b 0a 20 20 20 20 65 54 79 70 65  =incr;.    eType
3410: 2b 2b 3b 0a 20 20 20 20 2f 2a 20 63 6f 70 79 20  ++;.    /* copy 
3420: 64 69 67 69 74 73 20 66 72 6f 6d 20 61 66 74 65  digits from afte
3430: 72 20 64 65 63 69 6d 61 6c 20 74 6f 20 73 69 67  r decimal to sig
3440: 6e 69 66 69 63 61 6e 64 0a 20 20 20 20 2a 2a 20  nificand.    ** 
3450: 28 64 65 63 72 65 61 73 65 20 65 78 70 6f 6e 65  (decrease expone
3460: 6e 74 20 62 79 20 64 20 74 6f 20 73 68 69 66 74  nt by d to shift
3470: 20 64 65 63 69 6d 61 6c 20 72 69 67 68 74 29 20   decimal right) 
3480: 2a 2f 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 3c  */.    while( z<
3490: 7a 45 6e 64 20 26 26 20 73 71 6c 69 74 65 33 49  zEnd && sqlite3I
34a0: 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20  sdigit(*z) ){.  
34b0: 20 20 20 20 69 66 28 20 73 3c 28 28 4c 41 52 47      if( s<((LARG
34c0: 45 53 54 5f 49 4e 54 36 34 2d 39 29 2f 31 30 29  EST_INT64-9)/10)
34d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 20 3d 20   ){.        s = 
34e0: 73 2a 31 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27  s*10 + (*z - '0'
34f0: 29 3b 0a 20 20 20 20 20 20 20 20 64 2d 2d 3b 0a  );.        d--;.
3500: 20 20 20 20 20 20 20 20 6e 44 69 67 69 74 2b 2b          nDigit++
3510: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
3520: 7a 2b 3d 69 6e 63 72 3b 0a 20 20 20 20 7d 0a 20  z+=incr;.    }. 
3530: 20 7d 0a 20 20 69 66 28 20 7a 3e 3d 7a 45 6e 64   }.  if( z>=zEnd
3540: 20 29 20 67 6f 74 6f 20 64 6f 5f 61 74 6f 66 5f   ) goto do_atof_
3550: 63 61 6c 63 3b 0a 0a 20 20 2f 2a 20 69 66 20 65  calc;..  /* if e
3560: 78 70 6f 6e 65 6e 74 20 69 73 20 70 72 65 73 65  xponent is prese
3570: 6e 74 20 2a 2f 0a 20 20 69 66 28 20 2a 7a 3d 3d  nt */.  if( *z==
3580: 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29  'e' || *z=='E' )
3590: 7b 0a 20 20 20 20 7a 2b 3d 69 6e 63 72 3b 0a 20  {.    z+=incr;. 
35a0: 20 20 20 65 56 61 6c 69 64 20 3d 20 30 3b 0a 20     eValid = 0;. 
35b0: 20 20 20 65 54 79 70 65 2b 2b 3b 0a 0a 20 20 20     eType++;..   
35c0: 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   /* This branch 
35d0: 69 73 20 6e 65 65 64 65 64 20 74 6f 20 61 76 6f  is needed to avo
35e0: 69 64 20 61 20 28 68 61 72 6d 6c 65 73 73 29 20  id a (harmless) 
35f0: 62 75 66 66 65 72 20 6f 76 65 72 72 65 61 64 2e  buffer overread.
3600: 20 20 54 68 65 20 0a 20 20 20 20 2a 2a 20 73 70    The .    ** sp
3610: 65 63 69 61 6c 20 63 6f 6d 6d 65 6e 74 20 61 6c  ecial comment al
3620: 65 72 74 73 20 74 68 65 20 6d 75 74 61 74 69 6f  erts the mutatio
3630: 6e 20 74 65 73 74 65 72 20 74 68 61 74 20 74 68  n tester that th
3640: 65 20 63 6f 72 72 65 63 74 20 61 6e 73 77 65 72  e correct answer
3650: 0a 20 20 20 20 2a 2a 20 69 73 20 6f 62 74 61 69  .    ** is obtai
3660: 6e 65 64 20 65 76 65 6e 20 69 66 20 74 68 65 20  ned even if the 
3670: 62 72 61 6e 63 68 20 69 73 20 6f 6d 69 74 74 65  branch is omitte
3680: 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 3e 3d  d */.    if( z>=
3690: 7a 45 6e 64 20 29 20 67 6f 74 6f 20 64 6f 5f 61  zEnd ) goto do_a
36a0: 74 6f 66 5f 63 61 6c 63 3b 20 20 20 20 20 20 20  tof_calc;       
36b0: 20 20 20 20 20 20 20 2f 2a 50 52 45 56 45 4e 54         /*PREVENT
36c0: 53 2d 48 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52  S-HARMLESS-OVERR
36d0: 45 41 44 2a 2f 0a 0a 20 20 20 20 2f 2a 20 67 65  EAD*/..    /* ge
36e0: 74 20 73 69 67 6e 20 6f 66 20 65 78 70 6f 6e 65  t sign of expone
36f0: 6e 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 2a 7a  nt */.    if( *z
3700: 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65  =='-' ){.      e
3710: 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20  sign = -1;.     
3720: 20 7a 2b 3d 69 6e 63 72 3b 0a 20 20 20 20 7d 65   z+=incr;.    }e
3730: 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20  lse if( *z=='+' 
3740: 29 7b 0a 20 20 20 20 20 20 7a 2b 3d 69 6e 63 72  ){.      z+=incr
3750: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 63  ;.    }.    /* c
3760: 6f 70 79 20 64 69 67 69 74 73 20 74 6f 20 65 78  opy digits to ex
3770: 70 6f 6e 65 6e 74 20 2a 2f 0a 20 20 20 20 77 68  ponent */.    wh
3780: 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26 26 20 73  ile( z<zEnd && s
3790: 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a  qlite3Isdigit(*z
37a0: 29 20 29 7b 0a 20 20 20 20 20 20 65 20 3d 20 65  ) ){.      e = e
37b0: 3c 31 30 30 30 30 20 3f 20 28 65 2a 31 30 20 2b  <10000 ? (e*10 +
37c0: 20 28 2a 7a 20 2d 20 27 30 27 29 29 20 3a 20 31   (*z - '0')) : 1
37d0: 30 30 30 30 3b 0a 20 20 20 20 20 20 7a 2b 3d 69  0000;.      z+=i
37e0: 6e 63 72 3b 0a 20 20 20 20 20 20 65 56 61 6c 69  ncr;.      eVali
37f0: 64 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  d = 1;.    }.  }
3800: 0a 0a 20 20 2f 2a 20 73 6b 69 70 20 74 72 61 69  ..  /* skip trai
3810: 6c 69 6e 67 20 73 70 61 63 65 73 20 2a 2f 0a 20  ling spaces */. 
3820: 20 77 68 69 6c 65 28 20 7a 3c 7a 45 6e 64 20 26   while( z<zEnd &
3830: 26 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  & sqlite3Isspace
3840: 28 2a 7a 29 20 29 20 7a 2b 3d 69 6e 63 72 3b 0a  (*z) ) z+=incr;.
3850: 0a 64 6f 5f 61 74 6f 66 5f 63 61 6c 63 3a 0a 20  .do_atof_calc:. 
3860: 20 2f 2a 20 61 64 6a 75 73 74 20 65 78 70 6f 6e   /* adjust expon
3870: 65 6e 74 20 62 79 20 64 2c 20 61 6e 64 20 75 70  ent by d, and up
3880: 64 61 74 65 20 73 69 67 6e 20 2a 2f 0a 20 20 65  date sign */.  e
3890: 20 3d 20 28 65 2a 65 73 69 67 6e 29 20 2b 20 64   = (e*esign) + d
38a0: 3b 0a 20 20 69 66 28 20 65 3c 30 20 29 20 7b 0a  ;.  if( e<0 ) {.
38b0: 20 20 20 20 65 73 69 67 6e 20 3d 20 2d 31 3b 0a      esign = -1;.
38c0: 20 20 20 20 65 20 2a 3d 20 2d 31 3b 0a 20 20 7d      e *= -1;.  }
38d0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 65 73 69 67   else {.    esig
38e0: 6e 20 3d 20 31 3b 0a 20 20 7d 0a 0a 20 20 69 66  n = 1;.  }..  if
38f0: 28 20 73 3d 3d 30 20 29 20 7b 0a 20 20 20 20 2f  ( s==0 ) {.    /
3900: 2a 20 49 6e 20 74 68 65 20 49 45 45 45 20 37 35  * In the IEEE 75
3910: 34 20 73 74 61 6e 64 61 72 64 2c 20 7a 65 72 6f  4 standard, zero
3920: 20 69 73 20 73 69 67 6e 65 64 2e 20 2a 2f 0a 20   is signed. */. 
3930: 20 20 20 72 65 73 75 6c 74 20 3d 20 73 69 67 6e     result = sign
3940: 3c 30 20 3f 20 2d 28 64 6f 75 62 6c 65 29 30 20  <0 ? -(double)0 
3950: 3a 20 28 64 6f 75 62 6c 65 29 30 3b 0a 20 20 7d  : (double)0;.  }
3960: 20 65 6c 73 65 20 7b 0a 20 20 20 20 2f 2a 20 41   else {.    /* A
3970: 74 74 65 6d 70 74 20 74 6f 20 72 65 64 75 63 65  ttempt to reduce
3980: 20 65 78 70 6f 6e 65 6e 74 2e 0a 20 20 20 20 2a   exponent..    *
3990: 2a 0a 20 20 20 20 2a 2a 20 42 72 61 6e 63 68 65  *.    ** Branche
39a0: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 72  s that are not r
39b0: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
39c0: 63 6f 72 72 65 63 74 20 61 6e 73 77 65 72 20 62  correct answer b
39d0: 75 74 20 77 68 69 63 68 20 6f 6e 6c 79 0a 20 20  ut which only.  
39e0: 20 20 2a 2a 20 68 65 6c 70 20 74 6f 20 6f 62 74    ** help to obt
39f0: 61 69 6e 20 74 68 65 20 63 6f 72 72 65 63 74 20  ain the correct 
3a00: 61 6e 73 77 65 72 20 66 61 73 74 65 72 20 61 72  answer faster ar
3a10: 65 20 6d 61 72 6b 65 64 20 77 69 74 68 20 73 70  e marked with sp
3a20: 65 63 69 61 6c 0a 20 20 20 20 2a 2a 20 63 6f 6d  ecial.    ** com
3a30: 6d 65 6e 74 73 2c 20 61 73 20 61 20 68 69 6e 74  ments, as a hint
3a40: 20 74 6f 20 74 68 65 20 6d 75 74 61 74 69 6f 6e   to the mutation
3a50: 20 74 65 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a   tester..    */.
3a60: 20 20 20 20 77 68 69 6c 65 28 20 65 3e 30 20 29      while( e>0 )
3a70: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a90: 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49          /*OPTIMI
3aa0: 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f  ZATION-IF-TRUE*/
3ab0: 0a 20 20 20 20 20 20 69 66 28 20 65 73 69 67 6e  .      if( esign
3ac0: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  >0 ){.        if
3ad0: 28 20 73 3e 3d 28 4c 41 52 47 45 53 54 5f 49 4e  ( s>=(LARGEST_IN
3ae0: 54 36 34 2f 31 30 29 20 29 20 62 72 65 61 6b 3b  T64/10) ) break;
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f               /*O
3b00: 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46  PTIMIZATION-IF-F
3b10: 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 20 20 73  ALSE*/.        s
3b20: 20 2a 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65   *= 10;.      }e
3b30: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28  lse{.        if(
3b40: 20 73 25 31 30 21 3d 30 20 29 20 62 72 65 61 6b   s%10!=0 ) break
3b50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50              /*OP
3b70: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
3b80: 4c 53 45 2a 2f 0a 20 20 20 20 20 20 20 20 73 20  LSE*/.        s 
3b90: 2f 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 0a 20  /= 10;.      }. 
3ba0: 20 20 20 20 20 65 2d 2d 3b 0a 20 20 20 20 7d 0a       e--;.    }.
3bb0: 0a 20 20 20 20 2f 2a 20 61 64 6a 75 73 74 20 74  .    /* adjust t
3bc0: 68 65 20 73 69 67 6e 20 6f 66 20 73 69 67 6e 69  he sign of signi
3bd0: 66 69 63 61 6e 64 20 2a 2f 0a 20 20 20 20 73 20  ficand */.    s 
3be0: 3d 20 73 69 67 6e 3c 30 20 3f 20 2d 73 20 3a 20  = sign<0 ? -s : 
3bf0: 73 3b 0a 0a 20 20 20 20 69 66 28 20 65 3d 3d 30  s;..    if( e==0
3c00: 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50              /*OP
3c30: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52  TIMIZATION-IF-TR
3c40: 55 45 2a 2f 0a 20 20 20 20 20 20 72 65 73 75 6c  UE*/.      resul
3c50: 74 20 3d 20 28 64 6f 75 62 6c 65 29 73 3b 0a 20  t = (double)s;. 
3c60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3c70: 2f 2a 20 61 74 74 65 6d 70 74 20 74 6f 20 68 61  /* attempt to ha
3c80: 6e 64 6c 65 20 65 78 74 72 65 6d 65 6c 79 20 73  ndle extremely s
3c90: 6d 61 6c 6c 2f 6c 61 72 67 65 20 6e 75 6d 62 65  mall/large numbe
3ca0: 72 73 20 62 65 74 74 65 72 20 2a 2f 0a 20 20 20  rs better */.   
3cb0: 20 20 20 69 66 28 20 65 3e 33 30 37 20 29 7b 20     if( e>307 ){ 
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54       /*OPTIMIZAT
3cf0: 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20  ION-IF-TRUE*/.  
3d00: 20 20 20 20 20 20 69 66 28 20 65 3c 33 34 32 20        if( e<342 
3d10: 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d30: 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41        /*OPTIMIZA
3d40: 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20  TION-IF-TRUE*/. 
3d50: 20 20 20 20 20 20 20 20 20 4c 4f 4e 47 44 4f 55           LONGDOU
3d60: 42 4c 45 5f 54 59 50 45 20 73 63 61 6c 65 20 3d  BLE_TYPE scale =
3d70: 20 73 71 6c 69 74 65 33 50 6f 77 31 30 28 65 2d   sqlite3Pow10(e-
3d80: 33 30 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20  308);.          
3d90: 69 66 28 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20  if( esign<0 ){. 
3da0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
3db0: 74 20 3d 20 73 20 2f 20 73 63 61 6c 65 3b 0a 20  t = s / scale;. 
3dc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
3dd0: 74 20 2f 3d 20 31 2e 30 65 2b 33 30 38 3b 0a 20  t /= 1.0e+308;. 
3de0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3e00: 6c 74 20 3d 20 73 20 2a 20 73 63 61 6c 65 3b 0a  lt = s * scale;.
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3e20: 6c 74 20 2a 3d 20 31 2e 30 65 2b 33 30 38 3b 0a  lt *= 1.0e+308;.
3e30: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
3e40: 20 20 20 20 7d 65 6c 73 65 7b 20 61 73 73 65 72      }else{ asser
3e50: 74 28 20 65 3e 3d 33 34 32 20 29 3b 0a 20 20 20  t( e>=342 );.   
3e60: 20 20 20 20 20 20 20 69 66 28 20 65 73 69 67 6e         if( esign
3e70: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
3e80: 20 20 72 65 73 75 6c 74 20 3d 20 30 2e 30 2a 73    result = 0.0*s
3e90: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
3ea0: 65 7b 0a 23 69 66 64 65 66 20 49 4e 46 49 4e 49  e{.#ifdef INFINI
3eb0: 54 59 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  TY.            r
3ec0: 65 73 75 6c 74 20 3d 20 49 4e 46 49 4e 49 54 59  esult = INFINITY
3ed0: 2a 73 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20  *s;.#else.      
3ee0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 31        result = 1
3ef0: 65 33 30 38 2a 31 65 33 30 38 2a 73 3b 20 20 2f  e308*1e308*s;  /
3f00: 2a 20 49 6e 66 69 6e 69 74 79 20 2a 2f 0a 23 65  * Infinity */.#e
3f10: 6e 64 69 66 0a 20 20 20 20 20 20 20 20 20 20 7d  ndif.          }
3f20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
3f30: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
3f40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
3f50: 73 63 61 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  scale = sqlite3P
3f60: 6f 77 31 30 28 65 29 3b 0a 20 20 20 20 20 20 20  ow10(e);.       
3f70: 20 69 66 28 20 65 73 69 67 6e 3c 30 20 29 7b 0a   if( esign<0 ){.
3f80: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
3f90: 20 3d 20 73 20 2f 20 73 63 61 6c 65 3b 0a 20 20   = s / scale;.  
3fa0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3fb0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
3fc0: 73 20 2a 20 73 63 61 6c 65 3b 0a 20 20 20 20 20  s * scale;.     
3fd0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
3fe0: 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 73 74 6f   }.  }..  /* sto
3ff0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  re the result */
4000: 0a 20 20 2a 70 52 65 73 75 6c 74 20 3d 20 72 65  .  *pResult = re
4010: 73 75 6c 74 3b 0a 0a 20 20 2f 2a 20 72 65 74 75  sult;..  /* retu
4020: 72 6e 20 74 72 75 65 20 69 66 20 6e 75 6d 62 65  rn true if numbe
4030: 72 20 61 6e 64 20 6e 6f 20 65 78 74 72 61 20 6e  r and no extra n
4040: 6f 6e 2d 77 68 69 74 65 73 70 61 63 65 20 63 68  on-whitespace ch
4050: 72 61 63 74 65 72 73 20 61 66 74 65 72 20 2a 2f  racters after */
4060: 0a 20 20 69 66 28 20 7a 3d 3d 7a 45 6e 64 20 26  .  if( z==zEnd &
4070: 26 20 6e 44 69 67 69 74 3e 30 20 26 26 20 65 56  & nDigit>0 && eV
4080: 61 6c 69 64 20 26 26 20 65 54 79 70 65 3e 30 20  alid && eType>0 
4090: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 65 54  ){.    return eT
40a0: 79 70 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ype;.  }else if(
40b0: 20 65 54 79 70 65 3e 3d 32 20 26 26 20 28 65 54   eType>=2 && (eT
40c0: 79 70 65 3d 3d 33 20 7c 7c 20 65 56 61 6c 69 64  ype==3 || eValid
40d0: 29 20 26 26 20 6e 44 69 67 69 74 3e 30 20 29 7b  ) && nDigit>0 ){
40e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a  .    return -1;.
40f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
4100: 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6c 73 65  urn 0;.  }.#else
4110: 0a 20 20 72 65 74 75 72 6e 20 21 73 71 6c 69 74  .  return !sqlit
4120: 65 33 41 74 6f 69 36 34 28 7a 2c 20 70 52 65 73  e3Atoi64(z, pRes
4130: 75 6c 74 2c 20 6c 65 6e 67 74 68 2c 20 65 6e 63  ult, length, enc
4140: 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
4150: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
4160: 47 5f 50 4f 49 4e 54 20 2a 2f 0a 7d 0a 23 69 66  G_POINT */.}.#if
4170: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
4180: 52 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 69  R).#pragma warni
4190: 6e 67 28 64 65 66 61 75 6c 74 20 3a 20 34 37 35  ng(default : 475
41a0: 36 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  6).#endif../*.**
41b0: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 31 39 2d   Compare the 19-
41c0: 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67  character string
41d0: 20 7a 4e 75 6d 20 61 67 61 69 6e 73 74 20 74 68   zNum against th
41e0: 65 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  e text represent
41f0: 61 74 69 6f 6e 0a 2a 2a 20 76 61 6c 75 65 20 32  ation.** value 2
4200: 5e 36 33 3a 20 20 39 32 32 33 33 37 32 30 33 36  ^63:  9223372036
4210: 38 35 34 37 37 35 38 30 38 2e 20 20 52 65 74 75  854775808.  Retu
4220: 72 6e 20 6e 65 67 61 74 69 76 65 2c 20 7a 65 72  rn negative, zer
4230: 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 0a 2a  o, or positive.*
4240: 2a 20 69 66 20 7a 4e 75 6d 20 69 73 20 6c 65 73  * if zNum is les
4250: 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f  s than, equal to
4260: 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
4270: 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  n the string..**
4280: 20 4e 6f 74 65 20 74 68 61 74 20 7a 4e 75 6d 20   Note that zNum 
4290: 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 65 78 61  must contain exa
42a0: 63 74 6c 79 20 31 39 20 63 68 61 72 61 63 74 65  ctly 19 characte
42b0: 72 73 2e 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  rs..**.** Unlike
42c0: 20 6d 65 6d 63 6d 70 28 29 20 74 68 69 73 20 72   memcmp() this r
42d0: 6f 75 74 69 6e 65 20 69 73 20 67 75 61 72 61 6e  outine is guaran
42e0: 74 65 65 64 20 74 6f 20 72 65 74 75 72 6e 20 74  teed to return t
42f0: 68 65 20 64 69 66 66 65 72 65 6e 63 65 0a 2a 2a  he difference.**
4300: 20 69 6e 20 74 68 65 20 76 61 6c 75 65 73 20 6f   in the values o
4310: 66 20 74 68 65 20 6c 61 73 74 20 64 69 67 69 74  f the last digit
4320: 20 69 66 20 74 68 65 20 6f 6e 6c 79 20 64 69 66   if the only dif
4330: 66 65 72 65 6e 63 65 20 69 73 20 69 6e 20 74 68  ference is in th
4340: 65 0a 2a 2a 20 6c 61 73 74 20 64 69 67 69 74 2e  e.** last digit.
4350: 20 20 53 6f 2c 20 66 6f 72 20 65 78 61 6d 70 6c    So, for exampl
4360: 65 2c 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 63 6f  e,.**.**      co
4370: 6d 70 61 72 65 32 70 6f 77 36 33 28 22 39 32 32  mpare2pow63("922
4380: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 30  3372036854775800
4390: 22 2c 20 31 29 0a 2a 2a 0a 2a 2a 20 77 69 6c 6c  ", 1).**.** will
43a0: 20 72 65 74 75 72 6e 20 2d 38 2e 0a 2a 2f 0a 73   return -8..*/.s
43b0: 74 61 74 69 63 20 69 6e 74 20 63 6f 6d 70 61 72  tatic int compar
43c0: 65 32 70 6f 77 36 33 28 63 6f 6e 73 74 20 63 68  e2pow63(const ch
43d0: 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20 69 6e  ar *zNum, int in
43e0: 63 72 29 7b 0a 20 20 69 6e 74 20 63 20 3d 20 30  cr){.  int c = 0
43f0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20  ;.  int i;.     
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4410: 2a 20 30 31 32 33 34 35 36 37 38 39 30 31 32 33  * 01234567890123
4420: 34 35 36 37 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  4567 */.  const 
4430: 63 68 61 72 20 2a 70 6f 77 36 33 20 3d 20 22 39  char *pow63 = "9
4440: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
4450: 30 22 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 63  0";.  for(i=0; c
4460: 3d 3d 30 20 26 26 20 69 3c 31 38 3b 20 69 2b 2b  ==0 && i<18; i++
4470: 29 7b 0a 20 20 20 20 63 20 3d 20 28 7a 4e 75 6d  ){.    c = (zNum
4480: 5b 69 2a 69 6e 63 72 5d 2d 70 6f 77 36 33 5b 69  [i*incr]-pow63[i
4490: 5d 29 2a 31 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ])*10;.  }.  if(
44a0: 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 63 20 3d   c==0 ){.    c =
44b0: 20 7a 4e 75 6d 5b 31 38 2a 69 6e 63 72 5d 20 2d   zNum[18*incr] -
44c0: 20 27 38 27 3b 0a 20 20 20 20 74 65 73 74 63 61   '8';.    testca
44d0: 73 65 28 20 63 3d 3d 28 2d 31 29 20 29 3b 0a 20  se( c==(-1) );. 
44e0: 20 20 20 74 65 73 74 63 61 73 65 28 20 63 3d 3d     testcase( c==
44f0: 30 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  0 );.    testcas
4500: 65 28 20 63 3d 3d 28 2b 31 29 20 29 3b 0a 20 20  e( c==(+1) );.  
4510: 7d 0a 20 20 72 65 74 75 72 6e 20 63 3b 0a 7d 0a  }.  return c;.}.
4520: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 7a  ./*.** Convert z
4530: 4e 75 6d 20 74 6f 20 61 20 36 34 2d 62 69 74 20  Num to a 64-bit 
4540: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 20  signed integer. 
4550: 20 7a 4e 75 6d 20 6d 75 73 74 20 62 65 20 64 65   zNum must be de
4560: 63 69 6d 61 6c 2e 20 54 68 69 73 0a 2a 2a 20 72  cimal. This.** r
4570: 6f 75 74 69 6e 65 20 64 6f 65 73 20 2a 6e 6f 74  outine does *not
4580: 2a 20 61 63 63 65 70 74 20 68 65 78 61 64 65 63  * accept hexadec
4590: 69 6d 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 0a 2a  imal notation..*
45a0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 3a 0a 2a 2a  *.** Returns:.**
45b0: 0a 2a 2a 20 20 20 20 2d 31 20 20 20 20 4e 6f 74  .**    -1    Not
45c0: 20 65 76 65 6e 20 61 20 70 72 65 66 69 78 20 6f   even a prefix o
45d0: 66 20 74 68 65 20 69 6e 70 75 74 20 74 65 78 74  f the input text
45e0: 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 6e 20 69   looks like an i
45f0: 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 30 20  nteger.**     0 
4600: 20 20 20 53 75 63 63 65 73 73 66 75 6c 20 74 72     Successful tr
4610: 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 46  ansformation.  F
4620: 69 74 73 20 69 6e 20 61 20 36 34 2d 62 69 74 20  its in a 64-bit 
4630: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a  signed integer..
4640: 2a 2a 20 20 20 20 20 31 20 20 20 20 45 78 63 65  **     1    Exce
4650: 73 73 20 6e 6f 6e 2d 73 70 61 63 65 20 74 65 78  ss non-space tex
4660: 74 20 61 66 74 65 72 20 74 68 65 20 69 6e 74 65  t after the inte
4670: 67 65 72 20 76 61 6c 75 65 0a 2a 2a 20 20 20 20  ger value.**    
4680: 20 32 20 20 20 20 49 6e 74 65 67 65 72 20 74 6f   2    Integer to
4690: 6f 20 6c 61 72 67 65 20 66 6f 72 20 61 20 36 34  o large for a 64
46a0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
46b0: 67 65 72 20 6f 72 20 69 73 20 6d 61 6c 66 6f 72  ger or is malfor
46c0: 6d 65 64 0a 2a 2a 20 20 20 20 20 33 20 20 20 20  med.**     3    
46d0: 53 70 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20  Special case of 
46e0: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
46f0: 38 30 38 0a 2a 2a 0a 2a 2a 20 6c 65 6e 67 74 68  808.**.** length
4700: 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
4710: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 73  f bytes in the s
4720: 74 72 69 6e 67 20 28 62 79 74 65 73 2c 20 6e 6f  tring (bytes, no
4730: 74 20 63 68 61 72 61 63 74 65 72 73 29 2e 0a 2a  t characters)..*
4740: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 69 73 20  * The string is 
4750: 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
4760: 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 2e  zero-terminated.
4770: 20 20 54 68 65 20 65 6e 63 6f 64 69 6e 67 20 69    The encoding i
4780: 73 0a 2a 2a 20 67 69 76 65 6e 20 62 79 20 65 6e  s.** given by en
4790: 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  c..*/.int sqlite
47a0: 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
47b0: 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70  ar *zNum, i64 *p
47c0: 4e 75 6d 2c 20 69 6e 74 20 6c 65 6e 67 74 68 2c  Num, int length,
47d0: 20 75 38 20 65 6e 63 29 7b 0a 20 20 69 6e 74 20   u8 enc){.  int 
47e0: 69 6e 63 72 3b 0a 20 20 75 36 34 20 75 20 3d 20  incr;.  u64 u = 
47f0: 30 3b 0a 20 20 69 6e 74 20 6e 65 67 20 3d 20 30  0;.  int neg = 0
4800: 3b 20 2f 2a 20 61 73 73 75 6d 65 20 70 6f 73 69  ; /* assume posi
4810: 74 69 76 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  tive */.  int i;
4820: 0a 20 20 69 6e 74 20 63 20 3d 20 30 3b 0a 20 20  .  int c = 0;.  
4830: 69 6e 74 20 6e 6f 6e 4e 75 6d 20 3d 20 30 3b 20  int nonNum = 0; 
4840: 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 70 75   /* True if inpu
4850: 74 20 63 6f 6e 74 61 69 6e 73 20 55 54 46 31 36  t contains UTF16
4860: 20 77 69 74 68 20 68 69 67 68 20 62 79 74 65 20   with high byte 
4870: 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 69 6e  non-zero */.  in
4880: 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 2f  t rc;          /
4890: 2a 20 42 61 73 65 6c 69 6e 65 20 72 65 74 75 72  * Baseline retur
48a0: 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e 73  n code */.  cons
48b0: 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 0a  t char *zStart;.
48c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
48d0: 6e 64 20 3d 20 7a 4e 75 6d 20 2b 20 6c 65 6e 67  nd = zNum + leng
48e0: 74 68 3b 0a 20 20 61 73 73 65 72 74 28 20 65 6e  th;.  assert( en
48f0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 7c  c==SQLITE_UTF8 |
4900: 7c 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  | enc==SQLITE_UT
4910: 46 31 36 4c 45 20 7c 7c 20 65 6e 63 3d 3d 53 51  F16LE || enc==SQ
4920: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
4930: 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54    if( enc==SQLIT
4940: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 69 6e  E_UTF8 ){.    in
4950: 63 72 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  cr = 1;.  }else{
4960: 0a 20 20 20 20 69 6e 63 72 20 3d 20 32 3b 0a 20  .    incr = 2;. 
4970: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
4980: 45 5f 55 54 46 31 36 4c 45 3d 3d 32 20 26 26 20  E_UTF16LE==2 && 
4990: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3d 3d  SQLITE_UTF16BE==
49a0: 33 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 33  3 );.    for(i=3
49b0: 2d 65 6e 63 3b 20 69 3c 6c 65 6e 67 74 68 20 26  -enc; i<length &
49c0: 26 20 7a 4e 75 6d 5b 69 5d 3d 3d 30 3b 20 69 2b  & zNum[i]==0; i+
49d0: 3d 32 29 7b 7d 0a 20 20 20 20 6e 6f 6e 4e 75 6d  =2){}.    nonNum
49e0: 20 3d 20 69 3c 6c 65 6e 67 74 68 3b 0a 20 20 20   = i<length;.   
49f0: 20 7a 45 6e 64 20 3d 20 26 7a 4e 75 6d 5b 69 5e   zEnd = &zNum[i^
4a00: 31 5d 3b 0a 20 20 20 20 7a 4e 75 6d 20 2b 3d 20  1];.    zNum += 
4a10: 28 65 6e 63 26 31 29 3b 0a 20 20 7d 0a 20 20 77  (enc&1);.  }.  w
4a20: 68 69 6c 65 28 20 7a 4e 75 6d 3c 7a 45 6e 64 20  hile( zNum<zEnd 
4a30: 26 26 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  && sqlite3Isspac
4a40: 65 28 2a 7a 4e 75 6d 29 20 29 20 7a 4e 75 6d 2b  e(*zNum) ) zNum+
4a50: 3d 69 6e 63 72 3b 0a 20 20 69 66 28 20 7a 4e 75  =incr;.  if( zNu
4a60: 6d 3c 7a 45 6e 64 20 29 7b 0a 20 20 20 20 69 66  m<zEnd ){.    if
4a70: 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b 0a  ( *zNum=='-' ){.
4a80: 20 20 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20        neg = 1;. 
4a90: 20 20 20 20 20 7a 4e 75 6d 2b 3d 69 6e 63 72 3b       zNum+=incr;
4aa0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  .    }else if( *
4ab0: 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  zNum=='+' ){.   
4ac0: 20 20 20 7a 4e 75 6d 2b 3d 69 6e 63 72 3b 0a 20     zNum+=incr;. 
4ad0: 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 53 74 61 72     }.  }.  zStar
4ae0: 74 20 3d 20 7a 4e 75 6d 3b 0a 20 20 77 68 69 6c  t = zNum;.  whil
4af0: 65 28 20 7a 4e 75 6d 3c 7a 45 6e 64 20 26 26 20  e( zNum<zEnd && 
4b00: 7a 4e 75 6d 5b 30 5d 3d 3d 27 30 27 20 29 7b 20  zNum[0]=='0' ){ 
4b10: 7a 4e 75 6d 2b 3d 69 6e 63 72 3b 20 7d 20 2f 2a  zNum+=incr; } /*
4b20: 20 53 6b 69 70 20 6c 65 61 64 69 6e 67 20 7a 65   Skip leading ze
4b30: 72 6f 73 2e 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  ros. */.  for(i=
4b40: 30 3b 20 26 7a 4e 75 6d 5b 69 5d 3c 7a 45 6e 64  0; &zNum[i]<zEnd
4b50: 20 26 26 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e   && (c=zNum[i])>
4b60: 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20  ='0' && c<='9'; 
4b70: 69 2b 3d 69 6e 63 72 29 7b 0a 20 20 20 20 75 20  i+=incr){.    u 
4b80: 3d 20 75 2a 31 30 20 2b 20 63 20 2d 20 27 30 27  = u*10 + c - '0'
4b90: 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  ;.  }.  testcase
4ba0: 28 20 69 3d 3d 31 38 2a 69 6e 63 72 20 29 3b 0a  ( i==18*incr );.
4bb0: 20 20 74 65 73 74 63 61 73 65 28 20 69 3d 3d 31    testcase( i==1
4bc0: 39 2a 69 6e 63 72 20 29 3b 0a 20 20 74 65 73 74  9*incr );.  test
4bd0: 63 61 73 65 28 20 69 3d 3d 32 30 2a 69 6e 63 72  case( i==20*incr
4be0: 20 29 3b 0a 20 20 69 66 28 20 75 3e 4c 41 52 47   );.  if( u>LARG
4bf0: 45 53 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20  EST_INT64 ){.   
4c00: 20 2f 2a 20 54 68 69 73 20 74 65 73 74 20 61 6e   /* This test an
4c10: 64 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 73 20  d assignment is 
4c20: 6e 65 65 64 65 64 20 6f 6e 6c 79 20 74 6f 20 73  needed only to s
4c30: 75 70 70 72 65 73 73 20 55 42 20 77 61 72 6e 69  uppress UB warni
4c40: 6e 67 73 0a 20 20 20 20 2a 2a 20 66 72 6f 6d 20  ngs.    ** from 
4c50: 63 6c 61 6e 67 20 61 6e 64 20 2d 66 73 61 6e 69  clang and -fsani
4c60: 74 69 7a 65 3d 75 6e 64 65 66 69 6e 65 64 2e 20  tize=undefined. 
4c70: 20 54 68 69 73 20 74 65 73 74 20 61 6e 64 20 61   This test and a
4c80: 73 73 69 67 6e 6d 65 6e 74 20 6d 61 6b 65 0a 20  ssignment make. 
4c90: 20 20 20 2a 2a 20 74 68 65 20 63 6f 64 65 20 61     ** the code a
4ca0: 20 6c 69 74 74 6c 65 20 6c 61 72 67 65 72 20 61   little larger a
4cb0: 6e 64 20 73 6c 6f 77 65 72 2c 20 61 6e 64 20 6e  nd slower, and n
4cc0: 6f 20 68 61 72 6d 20 63 6f 6d 65 73 20 66 72 6f  o harm comes fro
4cd0: 6d 20 6f 6d 69 74 74 69 6e 67 0a 20 20 20 20 2a  m omitting.    *
4ce0: 2a 20 74 68 65 6d 2c 20 62 75 74 20 77 65 20 6d  * them, but we m
4cf0: 75 73 74 20 61 70 70 61 69 73 65 20 74 68 65 20  ust appaise the 
4d00: 75 6e 64 65 66 69 6e 65 64 2d 62 65 68 61 76 69  undefined-behavi
4d10: 6f 72 20 70 68 61 72 69 73 65 65 73 2e 20 2a 2f  or pharisees. */
4d20: 0a 20 20 20 20 2a 70 4e 75 6d 20 3d 20 6e 65 67  .    *pNum = neg
4d30: 20 3f 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36   ? SMALLEST_INT6
4d40: 34 20 3a 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  4 : LARGEST_INT6
4d50: 34 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  4;.  }else if( n
4d60: 65 67 20 29 7b 0a 20 20 20 20 2a 70 4e 75 6d 20  eg ){.    *pNum 
4d70: 3d 20 2d 28 69 36 34 29 75 3b 0a 20 20 7d 65 6c  = -(i64)u;.  }el
4d80: 73 65 7b 0a 20 20 20 20 2a 70 4e 75 6d 20 3d 20  se{.    *pNum = 
4d90: 28 69 36 34 29 75 3b 0a 20 20 7d 0a 20 20 72 63  (i64)u;.  }.  rc
4da0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 69 3d 3d 30   = 0;.  if( i==0
4db0: 20 26 26 20 7a 53 74 61 72 74 3d 3d 7a 4e 75 6d   && zStart==zNum
4dc0: 20 29 7b 20 20 20 20 2f 2a 20 4e 6f 20 64 69 67   ){    /* No dig
4dd0: 69 74 73 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  its */.    rc = 
4de0: 2d 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  -1;.  }else if( 
4df0: 6e 6f 6e 4e 75 6d 20 29 7b 20 20 20 20 20 20 20  nonNum ){       
4e00: 20 20 20 20 20 2f 2a 20 55 54 46 31 36 20 77 69       /* UTF16 wi
4e10: 74 68 20 68 69 67 68 2d 6f 72 64 65 72 20 62 79  th high-order by
4e20: 74 65 73 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a  tes non-zero */.
4e30: 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 65      rc = 1;.  }e
4e40: 6c 73 65 20 69 66 28 20 26 7a 4e 75 6d 5b 69 5d  lse if( &zNum[i]
4e50: 3c 7a 45 6e 64 20 29 7b 20 20 20 20 20 2f 2a 20  <zEnd ){     /* 
4e60: 45 78 74 72 61 20 62 79 74 65 73 20 61 74 20 74  Extra bytes at t
4e70: 68 65 20 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e  he end */.    in
4e80: 74 20 6a 6a 20 3d 20 69 3b 0a 20 20 20 20 64 6f  t jj = i;.    do
4e90: 7b 0a 20 20 20 20 20 20 69 66 28 20 21 73 71 6c  {.      if( !sql
4ea0: 69 74 65 33 49 73 73 70 61 63 65 28 7a 4e 75 6d  ite3Isspace(zNum
4eb0: 5b 6a 6a 5d 29 20 29 7b 0a 20 20 20 20 20 20 20  [jj]) ){.       
4ec0: 20 72 63 20 3d 20 31 3b 20 20 20 20 20 20 20 20   rc = 1;        
4ed0: 20 20 2f 2a 20 45 78 74 72 61 20 6e 6f 6e 2d 73    /* Extra non-s
4ee0: 70 61 63 65 20 74 65 78 74 20 61 66 74 65 72 20  pace text after 
4ef0: 74 68 65 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20  the integer */. 
4f00: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4f10: 20 20 20 20 7d 0a 20 20 20 20 20 20 6a 6a 20 2b      }.      jj +
4f20: 3d 20 69 6e 63 72 3b 0a 20 20 20 20 7d 77 68 69  = incr;.    }whi
4f30: 6c 65 28 20 26 7a 4e 75 6d 5b 6a 6a 5d 3c 7a 45  le( &zNum[jj]<zE
4f40: 6e 64 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  nd );.  }.  if( 
4f50: 69 3c 31 39 2a 69 6e 63 72 20 29 7b 0a 20 20 20  i<19*incr ){.   
4f60: 20 2f 2a 20 4c 65 73 73 20 74 68 61 6e 20 31 39   /* Less than 19
4f70: 20 64 69 67 69 74 73 2c 20 73 6f 20 77 65 20 6b   digits, so we k
4f80: 6e 6f 77 20 74 68 61 74 20 69 74 20 66 69 74 73  now that it fits
4f90: 20 69 6e 20 36 34 20 62 69 74 73 20 2a 2f 0a 20   in 64 bits */. 
4fa0: 20 20 20 61 73 73 65 72 74 28 20 75 3c 3d 4c 41     assert( u<=LA
4fb0: 52 47 45 53 54 5f 49 4e 54 36 34 20 29 3b 0a 20  RGEST_INT64 );. 
4fc0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
4fd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 7a 4e  }else{.    /* zN
4fe0: 75 6d 20 69 73 20 61 20 31 39 2d 64 69 67 69 74  um is a 19-digit
4ff0: 20 6e 75 6d 62 65 72 73 2e 20 20 43 6f 6d 70 61   numbers.  Compa
5000: 72 65 20 69 74 20 61 67 61 69 6e 73 74 20 39 32  re it against 92
5010: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
5020: 38 2e 20 2a 2f 0a 20 20 20 20 63 20 3d 20 69 3e  8. */.    c = i>
5030: 31 39 2a 69 6e 63 72 20 3f 20 31 20 3a 20 63 6f  19*incr ? 1 : co
5040: 6d 70 61 72 65 32 70 6f 77 36 33 28 7a 4e 75 6d  mpare2pow63(zNum
5050: 2c 20 69 6e 63 72 29 3b 0a 20 20 20 20 69 66 28  , incr);.    if(
5060: 20 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a   c<0 ){.      /*
5070: 20 7a 4e 75 6d 20 69 73 20 6c 65 73 73 20 74 68   zNum is less th
5080: 61 6e 20 39 32 32 33 33 37 32 30 33 36 38 35 34  an 9223372036854
5090: 37 37 35 38 30 38 20 73 6f 20 69 74 20 66 69 74  775808 so it fit
50a0: 73 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  s */.      asser
50b0: 74 28 20 75 3c 3d 4c 41 52 47 45 53 54 5f 49 4e  t( u<=LARGEST_IN
50c0: 54 36 34 20 29 3b 0a 20 20 20 20 20 20 72 65 74  T64 );.      ret
50d0: 75 72 6e 20 72 63 3b 0a 20 20 20 20 7d 65 6c 73  urn rc;.    }els
50e0: 65 7b 0a 20 20 20 20 20 20 2a 70 4e 75 6d 20 3d  e{.      *pNum =
50f0: 20 6e 65 67 20 3f 20 53 4d 41 4c 4c 45 53 54 5f   neg ? SMALLEST_
5100: 49 4e 54 36 34 20 3a 20 4c 41 52 47 45 53 54 5f  INT64 : LARGEST_
5110: 49 4e 54 36 34 3b 0a 20 20 20 20 20 20 69 66 28  INT64;.      if(
5120: 20 63 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20   c>0 ){.        
5130: 2f 2a 20 7a 4e 75 6d 20 69 73 20 67 72 65 61 74  /* zNum is great
5140: 65 72 20 74 68 61 6e 20 39 32 32 33 33 37 32 30  er than 92233720
5150: 33 36 38 35 34 37 37 35 38 30 38 20 73 6f 20 69  36854775808 so i
5160: 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20  t overflows */. 
5170: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 32 3b         return 2;
5180: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
5190: 20 20 20 20 20 20 2f 2a 20 7a 4e 75 6d 20 69 73        /* zNum is
51a0: 20 65 78 61 63 74 6c 79 20 39 32 32 33 33 37 32   exactly 9223372
51b0: 30 33 36 38 35 34 37 37 35 38 30 38 2e 20 20 46  036854775808.  F
51c0: 69 74 73 20 69 66 20 6e 65 67 61 74 69 76 65 2e  its if negative.
51d0: 20 20 54 68 65 0a 20 20 20 20 20 20 20 20 2a 2a    The.        **
51e0: 20 73 70 65 63 69 61 6c 20 63 61 73 65 20 32 20   special case 2 
51f0: 6f 76 65 72 66 6c 6f 77 20 69 66 20 70 6f 73 69  overflow if posi
5200: 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  tive */.        
5210: 61 73 73 65 72 74 28 20 75 2d 31 3d 3d 4c 41 52  assert( u-1==LAR
5220: 47 45 53 54 5f 49 4e 54 36 34 20 29 3b 0a 20 20  GEST_INT64 );.  
5230: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 67        return neg
5240: 20 3f 20 72 63 20 3a 20 33 3b 0a 20 20 20 20 20   ? rc : 3;.     
5250: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a   }.    }.  }.}..
5260: 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 6f 72 6d 20  /*.** Transform 
5270: 61 20 55 54 46 2d 38 20 69 6e 74 65 67 65 72 20  a UTF-8 integer 
5280: 6c 69 74 65 72 61 6c 2c 20 69 6e 20 65 69 74 68  literal, in eith
5290: 65 72 20 64 65 63 69 6d 61 6c 20 6f 72 20 68 65  er decimal or he
52a0: 78 61 64 65 63 69 6d 61 6c 2c 0a 2a 2a 20 69 6e  xadecimal,.** in
52b0: 74 6f 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  to a 64-bit sign
52c0: 65 64 20 69 6e 74 65 67 65 72 2e 20 20 54 68 69  ed integer.  Thi
52d0: 73 20 72 6f 75 74 69 6e 65 20 61 63 63 65 70 74  s routine accept
52e0: 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69  s hexadecimal li
52f0: 74 65 72 61 6c 73 2c 0a 2a 2a 20 77 68 65 72 65  terals,.** where
5300: 61 73 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  as sqlite3Atoi64
5310: 28 29 20 64 6f 65 73 20 6e 6f 74 2e 0a 2a 2a 0a  () does not..**.
5320: 2a 2a 20 52 65 74 75 72 6e 73 3a 0a 2a 2a 0a 2a  ** Returns:.**.*
5330: 2a 20 20 20 20 20 30 20 20 20 20 53 75 63 63 65  *     0    Succe
5340: 73 73 66 75 6c 20 74 72 61 6e 73 66 6f 72 6d 61  ssful transforma
5350: 74 69 6f 6e 2e 20 20 46 69 74 73 20 69 6e 20 61  tion.  Fits in a
5360: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
5370: 6e 74 65 67 65 72 2e 0a 2a 2a 20 20 20 20 20 31  nteger..**     1
5380: 20 20 20 20 45 78 63 65 73 73 20 74 65 78 74 20      Excess text 
5390: 61 66 74 65 72 20 74 68 65 20 69 6e 74 65 67 65  after the intege
53a0: 72 20 76 61 6c 75 65 0a 2a 2a 20 20 20 20 20 32  r value.**     2
53b0: 20 20 20 20 49 6e 74 65 67 65 72 20 74 6f 6f 20      Integer too 
53c0: 6c 61 72 67 65 20 66 6f 72 20 61 20 36 34 2d 62  large for a 64-b
53d0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
53e0: 72 20 6f 72 20 69 73 20 6d 61 6c 66 6f 72 6d 65  r or is malforme
53f0: 64 0a 2a 2a 20 20 20 20 20 33 20 20 20 20 53 70  d.**     3    Sp
5400: 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 39 32  ecial case of 92
5410: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
5420: 38 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  8.*/.int sqlite3
5430: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
5440: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 36 34  nst char *z, i64
5450: 20 2a 70 4f 75 74 29 7b 0a 23 69 66 6e 64 65 66   *pOut){.#ifndef
5460: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 48 45 58   SQLITE_OMIT_HEX
5470: 5f 49 4e 54 45 47 45 52 0a 20 20 69 66 28 20 7a  _INTEGER.  if( z
5480: 5b 30 5d 3d 3d 27 30 27 0a 20 20 20 26 26 20 28  [0]=='0'.   && (
5490: 7a 5b 31 5d 3d 3d 27 78 27 20 7c 7c 20 7a 5b 31  z[1]=='x' || z[1
54a0: 5d 3d 3d 27 58 27 29 0a 20 20 29 7b 0a 20 20 20  ]=='X').  ){.   
54b0: 20 75 36 34 20 75 20 3d 20 30 3b 0a 20 20 20 20   u64 u = 0;.    
54c0: 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 66 6f  int i, k;.    fo
54d0: 72 28 69 3d 32 3b 20 7a 5b 69 5d 3d 3d 27 30 27  r(i=2; z[i]=='0'
54e0: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 66 6f 72  ; i++){}.    for
54f0: 28 6b 3d 69 3b 20 73 71 6c 69 74 65 33 49 73 78  (k=i; sqlite3Isx
5500: 64 69 67 69 74 28 7a 5b 6b 5d 29 3b 20 6b 2b 2b  digit(z[k]); k++
5510: 29 7b 0a 20 20 20 20 20 20 75 20 3d 20 75 2a 31  ){.      u = u*1
5520: 36 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  6 + sqlite3HexTo
5530: 49 6e 74 28 7a 5b 6b 5d 29 3b 0a 20 20 20 20 7d  Int(z[k]);.    }
5540: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
5550: 2c 20 26 75 2c 20 38 29 3b 0a 20 20 20 20 72 65  , &u, 8);.    re
5560: 74 75 72 6e 20 28 7a 5b 6b 5d 3d 3d 30 20 26 26  turn (z[k]==0 &&
5570: 20 6b 2d 69 3c 3d 31 36 29 20 3f 20 30 20 3a 20   k-i<=16) ? 0 : 
5580: 32 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  2;.  }else.#endi
5590: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
55a0: 5f 48 45 58 5f 49 4e 54 45 47 45 52 20 2a 2f 0a  _HEX_INTEGER */.
55b0: 20 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73    {.    return s
55c0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 2c 20  qlite3Atoi64(z, 
55d0: 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 53 74 72  pOut, sqlite3Str
55e0: 6c 65 6e 33 30 28 7a 29 2c 20 53 51 4c 49 54 45  len30(z), SQLITE
55f0: 5f 55 54 46 38 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  _UTF8);.  }.}../
5600: 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70  *.** If zNum rep
5610: 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67  resents an integ
5620: 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74  er that will fit
5630: 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68 65   in 32-bits, the
5640: 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65  n set.** *pValue
5650: 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72   to that integer
5660: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65   and return true
5670: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74  .  Otherwise ret
5680: 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a  urn false..**.**
5690: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 61 63   This routine ac
56a0: 63 65 70 74 73 20 62 6f 74 68 20 64 65 63 69 6d  cepts both decim
56b0: 61 6c 20 61 6e 64 20 68 65 78 61 64 65 63 69 6d  al and hexadecim
56c0: 61 6c 20 6e 6f 74 61 74 69 6f 6e 20 66 6f 72 20  al notation for 
56d0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  integers..**.** 
56e0: 41 6e 79 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20  Any non-numeric 
56f0: 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
5700: 66 6f 6c 6c 6f 77 69 6e 67 20 7a 4e 75 6d 20 61  following zNum a
5710: 72 65 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 54  re ignored..** T
5720: 68 69 73 20 69 73 20 64 69 66 66 65 72 65 6e 74  his is different
5730: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 41 74 6f   from sqlite3Ato
5740: 69 36 34 28 29 20 77 68 69 63 68 20 72 65 71 75  i64() which requ
5750: 69 72 65 73 20 74 68 65 0a 2a 2a 20 69 6e 70 75  ires the.** inpu
5760: 74 20 6e 75 6d 62 65 72 20 74 6f 20 62 65 20 7a  t number to be z
5770: 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 2e 0a  ero-terminated..
5780: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  */.int sqlite3Ge
5790: 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
57a0: 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70 56  r *zNum, int *pV
57b0: 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69 74 65 5f  alue){.  sqlite_
57c0: 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20 20 69  int64 v = 0;.  i
57d0: 6e 74 20 69 2c 20 63 3b 0a 20 20 69 6e 74 20 6e  nt i, c;.  int n
57e0: 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 4e  eg = 0;.  if( zN
57f0: 75 6d 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20  um[0]=='-' ){.  
5800: 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a    neg = 1;.    z
5810: 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69  Num++;.  }else i
5820: 66 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 2b 27 20  f( zNum[0]=='+' 
5830: 29 7b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20  ){.    zNum++;. 
5840: 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
5850: 45 5f 4f 4d 49 54 5f 48 45 58 5f 49 4e 54 45 47  E_OMIT_HEX_INTEG
5860: 45 52 0a 20 20 65 6c 73 65 20 69 66 28 20 7a 4e  ER.  else if( zN
5870: 75 6d 5b 30 5d 3d 3d 27 30 27 0a 20 20 20 20 20  um[0]=='0'.     
5880: 20 20 20 26 26 20 28 7a 4e 75 6d 5b 31 5d 3d 3d     && (zNum[1]==
5890: 27 78 27 20 7c 7c 20 7a 4e 75 6d 5b 31 5d 3d 3d  'x' || zNum[1]==
58a0: 27 58 27 29 0a 20 20 20 20 20 20 20 20 26 26 20  'X').        && 
58b0: 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
58c0: 7a 4e 75 6d 5b 32 5d 29 0a 20 20 29 7b 0a 20 20  zNum[2]).  ){.  
58d0: 20 20 75 33 32 20 75 20 3d 20 30 3b 0a 20 20 20    u32 u = 0;.   
58e0: 20 7a 4e 75 6d 20 2b 3d 20 32 3b 0a 20 20 20 20   zNum += 2;.    
58f0: 77 68 69 6c 65 28 20 7a 4e 75 6d 5b 30 5d 3d 3d  while( zNum[0]==
5900: 27 30 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20  '0' ) zNum++;.  
5910: 20 20 66 6f 72 28 69 3d 30 3b 20 73 71 6c 69 74    for(i=0; sqlit
5920: 65 33 49 73 78 64 69 67 69 74 28 7a 4e 75 6d 5b  e3Isxdigit(zNum[
5930: 69 5d 29 20 26 26 20 69 3c 38 3b 20 69 2b 2b 29  i]) && i<8; i++)
5940: 7b 0a 20 20 20 20 20 20 75 20 3d 20 75 2a 31 36  {.      u = u*16
5950: 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49   + sqlite3HexToI
5960: 6e 74 28 7a 4e 75 6d 5b 69 5d 29 3b 0a 20 20 20  nt(zNum[i]);.   
5970: 20 7d 0a 20 20 20 20 69 66 28 20 28 75 26 30 78   }.    if( (u&0x
5980: 38 30 30 30 30 30 30 30 29 3d 3d 30 20 26 26 20  80000000)==0 && 
5990: 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
59a0: 7a 4e 75 6d 5b 69 5d 29 3d 3d 30 20 29 7b 0a 20  zNum[i])==0 ){. 
59b0: 20 20 20 20 20 6d 65 6d 63 70 79 28 70 56 61 6c       memcpy(pVal
59c0: 75 65 2c 20 26 75 2c 20 34 29 3b 0a 20 20 20 20  ue, &u, 4);.    
59d0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
59e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 74  }else{.      ret
59f0: 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  urn 0;.    }.  }
5a00: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 21 73  .#endif.  if( !s
5a10: 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 7a 4e  qlite3Isdigit(zN
5a20: 75 6d 5b 30 5d 29 20 29 20 72 65 74 75 72 6e 20  um[0]) ) return 
5a30: 30 3b 0a 20 20 77 68 69 6c 65 28 20 7a 4e 75 6d  0;.  while( zNum
5a40: 5b 30 5d 3d 3d 27 30 27 20 29 20 7a 4e 75 6d 2b  [0]=='0' ) zNum+
5a50: 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  +;.  for(i=0; i<
5a60: 31 31 20 26 26 20 28 63 20 3d 20 7a 4e 75 6d 5b  11 && (c = zNum[
5a70: 69 5d 20 2d 20 27 30 27 29 3e 3d 30 20 26 26 20  i] - '0')>=0 && 
5a80: 63 3c 3d 39 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  c<=9; i++){.    
5a90: 76 20 3d 20 76 2a 31 30 20 2b 20 63 3b 0a 20 20  v = v*10 + c;.  
5aa0: 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 6c 6f 6e 67  }..  /* The long
5ab0: 65 73 74 20 64 65 63 69 6d 61 6c 20 72 65 70 72  est decimal repr
5ac0: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  esentation of a 
5ad0: 33 32 20 62 69 74 20 69 6e 74 65 67 65 72 20 69  32 bit integer i
5ae0: 73 20 31 30 20 64 69 67 69 74 73 3a 0a 20 20 2a  s 10 digits:.  *
5af0: 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  *.  **          
5b00: 20 20 20 31 32 33 34 35 36 37 38 39 30 0a 20 20     1234567890.  
5b10: 2a 2a 20 20 20 20 20 32 5e 33 31 20 2d 3e 20 32  **     2^31 -> 2
5b20: 31 34 37 34 38 33 36 34 38 0a 20 20 2a 2f 0a 20  147483648.  */. 
5b30: 20 74 65 73 74 63 61 73 65 28 20 69 3d 3d 31 30   testcase( i==10
5b40: 20 29 3b 0a 20 20 69 66 28 20 69 3e 31 30 20 29   );.  if( i>10 )
5b50: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
5b60: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
5b70: 76 2d 6e 65 67 3d 3d 32 31 34 37 34 38 33 36 34  v-neg==214748364
5b80: 37 20 29 3b 0a 20 20 69 66 28 20 76 2d 6e 65 67  7 );.  if( v-neg
5b90: 3e 32 31 34 37 34 38 33 36 34 37 20 29 7b 0a 20  >2147483647 ){. 
5ba0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
5bb0: 0a 20 20 69 66 28 20 6e 65 67 20 29 7b 0a 20 20  .  if( neg ){.  
5bc0: 20 20 76 20 3d 20 2d 76 3b 0a 20 20 7d 0a 20 20    v = -v;.  }.  
5bd0: 2a 70 56 61 6c 75 65 20 3d 20 28 69 6e 74 29 76  *pValue = (int)v
5be0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
5bf0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
5c00: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
5c10: 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 66  alue extracted f
5c20: 72 6f 6d 20 61 20 73 74 72 69 6e 67 2e 20 20 49  rom a string.  I
5c30: 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
5c40: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
5c50: 72 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 30  r, just return 0
5c60: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
5c70: 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 20  Atoi(const char 
5c80: 2a 7a 29 7b 0a 20 20 69 6e 74 20 78 20 3d 20 30  *z){.  int x = 0
5c90: 3b 0a 20 20 69 66 28 20 7a 20 29 20 73 71 6c 69  ;.  if( z ) sqli
5ca0: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 2c 20 26  te3GetInt32(z, &
5cb0: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 78 3b 0a  x);.  return x;.
5cc0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 61 72  }../*.** The var
5cd0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
5ce0: 65 67 65 72 20 65 6e 63 6f 64 69 6e 67 20 69 73  eger encoding is
5cf0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a   as follows:.**.
5d00: 2a 2a 20 4b 45 59 3a 0a 2a 2a 20 20 20 20 20 20  ** KEY:.**      
5d10: 20 20 20 41 20 3d 20 30 78 78 78 78 78 78 78 20     A = 0xxxxxxx 
5d20: 20 20 20 37 20 62 69 74 73 20 6f 66 20 64 61 74     7 bits of dat
5d30: 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62  a and one flag b
5d40: 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 42 20  it.**         B 
5d50: 3d 20 31 78 78 78 78 78 78 78 20 20 20 20 37 20  = 1xxxxxxx    7 
5d60: 62 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64  bits of data and
5d70: 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a   one flag bit.**
5d80: 20 20 20 20 20 20 20 20 20 43 20 3d 20 78 78 78           C = xxx
5d90: 78 78 78 78 78 20 20 20 20 38 20 62 69 74 73 20  xxxxx    8 bits 
5da0: 6f 66 20 64 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37  of data.**.**  7
5db0: 20 62 69 74 73 20 2d 20 41 0a 2a 2a 20 31 34 20   bits - A.** 14 
5dc0: 62 69 74 73 20 2d 20 42 41 0a 2a 2a 20 32 31 20  bits - BA.** 21 
5dd0: 62 69 74 73 20 2d 20 42 42 41 0a 2a 2a 20 32 38  bits - BBA.** 28
5de0: 20 62 69 74 73 20 2d 20 42 42 42 41 0a 2a 2a 20   bits - BBBA.** 
5df0: 33 35 20 62 69 74 73 20 2d 20 42 42 42 42 41 0a  35 bits - BBBBA.
5e00: 2a 2a 20 34 32 20 62 69 74 73 20 2d 20 42 42 42  ** 42 bits - BBB
5e10: 42 42 41 0a 2a 2a 20 34 39 20 62 69 74 73 20 2d  BBA.** 49 bits -
5e20: 20 42 42 42 42 42 42 41 0a 2a 2a 20 35 36 20 62   BBBBBBA.** 56 b
5e30: 69 74 73 20 2d 20 42 42 42 42 42 42 42 41 0a 2a  its - BBBBBBBA.*
5e40: 2a 20 36 34 20 62 69 74 73 20 2d 20 42 42 42 42  * 64 bits - BBBB
5e50: 42 42 42 42 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  BBBBC.*/../*.** 
5e60: 57 72 69 74 65 20 61 20 36 34 2d 62 69 74 20 76  Write a 64-bit v
5e70: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
5e80: 6e 74 65 67 65 72 20 74 6f 20 6d 65 6d 6f 72 79  nteger to memory
5e90: 20 73 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30   starting at p[0
5ea0: 5d 2e 0a 2a 2a 20 54 68 65 20 6c 65 6e 67 74 68  ]..** The length
5eb0: 20 6f 66 20 64 61 74 61 20 77 72 69 74 65 20 77   of data write w
5ec0: 69 6c 6c 20 62 65 20 62 65 74 77 65 65 6e 20 31  ill be between 1
5ed0: 20 61 6e 64 20 39 20 62 79 74 65 73 2e 20 20 54   and 9 bytes.  T
5ee0: 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20  he number.** of 
5ef0: 62 79 74 65 73 20 77 72 69 74 74 65 6e 20 69 73  bytes written is
5f00: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a   returned..**.**
5f10: 20 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   A variable-leng
5f20: 74 68 20 69 6e 74 65 67 65 72 20 63 6f 6e 73 69  th integer consi
5f30: 73 74 73 20 6f 66 20 74 68 65 20 6c 6f 77 65 72  sts of the lower
5f40: 20 37 20 62 69 74 73 20 6f 66 20 65 61 63 68 20   7 bits of each 
5f50: 62 79 74 65 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20  byte.** for all 
5f60: 62 79 74 65 73 20 74 68 61 74 20 68 61 76 65 20  bytes that have 
5f70: 74 68 65 20 38 74 68 20 62 69 74 20 73 65 74 20  the 8th bit set 
5f80: 61 6e 64 20 6f 6e 65 20 62 79 74 65 20 77 69 74  and one byte wit
5f90: 68 20 74 68 65 20 38 74 68 0a 2a 2a 20 62 69 74  h the 8th.** bit
5fa0: 20 63 6c 65 61 72 2e 20 20 45 78 63 65 70 74 2c   clear.  Except,
5fb0: 20 69 66 20 77 65 20 67 65 74 20 74 6f 20 74 68   if we get to th
5fc0: 65 20 39 74 68 20 62 79 74 65 2c 20 69 74 20 73  e 9th byte, it s
5fd0: 74 6f 72 65 73 20 74 68 65 20 66 75 6c 6c 0a 2a  tores the full.*
5fe0: 2a 20 38 20 62 69 74 73 20 61 6e 64 20 69 73 20  * 8 bits and is 
5ff0: 74 68 65 20 6c 61 73 74 20 62 79 74 65 2e 0a 2a  the last byte..*
6000: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c  /.static int SQL
6010: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 70 75 74  ITE_NOINLINE put
6020: 56 61 72 69 6e 74 36 34 28 75 6e 73 69 67 6e 65  Varint64(unsigne
6030: 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20 76  d char *p, u64 v
6040: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e  ){.  int i, j, n
6050: 3b 0a 20 20 75 38 20 62 75 66 5b 31 30 5d 3b 0a  ;.  u8 buf[10];.
6060: 20 20 69 66 28 20 76 20 26 20 28 28 28 75 36 34    if( v & (((u64
6070: 29 30 78 66 66 30 30 30 30 30 30 29 3c 3c 33 32  )0xff000000)<<32
6080: 29 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d 20  ) ){.    p[8] = 
6090: 28 75 38 29 76 3b 0a 20 20 20 20 76 20 3e 3e 3d  (u8)v;.    v >>=
60a0: 20 38 3b 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b   8;.    for(i=7;
60b0: 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20   i>=0; i--){.   
60c0: 20 20 20 70 5b 69 5d 20 3d 20 28 75 38 29 28 28     p[i] = (u8)((
60d0: 76 20 26 20 30 78 37 66 29 20 7c 20 30 78 38 30  v & 0x7f) | 0x80
60e0: 29 3b 0a 20 20 20 20 20 20 76 20 3e 3e 3d 20 37  );.      v >>= 7
60f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
6100: 72 6e 20 39 3b 0a 20 20 7d 20 20 20 20 0a 20 20  rn 9;.  }    .  
6110: 6e 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  n = 0;.  do{.   
6120: 20 62 75 66 5b 6e 2b 2b 5d 20 3d 20 28 75 38 29   buf[n++] = (u8)
6130: 28 28 76 20 26 20 30 78 37 66 29 20 7c 20 30 78  ((v & 0x7f) | 0x
6140: 38 30 29 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37  80);.    v >>= 7
6150: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30  ;.  }while( v!=0
6160: 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d 20   );.  buf[0] &= 
6170: 30 78 37 66 3b 0a 20 20 61 73 73 65 72 74 28 20  0x7f;.  assert( 
6180: 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n<=9 );.  for(i=
6190: 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b 20  0, j=n-1; j>=0; 
61a0: 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 70  j--, i++){.    p
61b0: 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20 20  [i] = buf[j];.  
61c0: 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a  }.  return n;.}.
61d0: 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
61e0: 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
61f0: 61 72 20 2a 70 2c 20 75 36 34 20 76 29 7b 0a 20  ar *p, u64 v){. 
6200: 20 69 66 28 20 76 3c 3d 30 78 37 66 20 29 7b 0a   if( v<=0x7f ){.
6210: 20 20 20 20 70 5b 30 5d 20 3d 20 76 26 30 78 37      p[0] = v&0x7
6220: 66 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  f;.    return 1;
6230: 0a 20 20 7d 0a 20 20 69 66 28 20 76 3c 3d 30 78  .  }.  if( v<=0x
6240: 33 66 66 66 20 29 7b 0a 20 20 20 20 70 5b 30 5d  3fff ){.    p[0]
6250: 20 3d 20 28 28 76 3e 3e 37 29 26 30 78 37 66 29   = ((v>>7)&0x7f)
6260: 7c 30 78 38 30 3b 0a 20 20 20 20 70 5b 31 5d 20  |0x80;.    p[1] 
6270: 3d 20 76 26 30 78 37 66 3b 0a 20 20 20 20 72 65  = v&0x7f;.    re
6280: 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 72 65  turn 2;.  }.  re
6290: 74 75 72 6e 20 70 75 74 56 61 72 69 6e 74 36 34  turn putVarint64
62a0: 28 70 2c 76 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  (p,v);.}../*.** 
62b0: 42 69 74 6d 61 73 6b 73 20 75 73 65 64 20 62 79  Bitmasks used by
62c0: 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
62d0: 74 28 29 2e 20 20 54 68 65 73 65 20 70 72 65 63  t().  These prec
62e0: 6f 6d 70 75 74 65 64 20 63 6f 6e 73 74 61 6e 74  omputed constant
62f0: 73 0a 2a 2a 20 61 72 65 20 64 65 66 69 6e 65 64  s.** are defined
6300: 20 68 65 72 65 20 72 61 74 68 65 72 20 74 68 61   here rather tha
6310: 6e 20 73 69 6d 70 6c 79 20 70 75 74 74 69 6e 67  n simply putting
6320: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 65 78   the constant ex
6330: 70 72 65 73 73 69 6f 6e 73 0a 2a 2a 20 69 6e 6c  pressions.** inl
6340: 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ine in order to 
6350: 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62 75 67 73  work around bugs
6360: 20 69 6e 20 74 68 65 20 52 56 54 20 63 6f 6d 70   in the RVT comp
6370: 69 6c 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 4c 4f 54  iler..**.** SLOT
6380: 5f 32 5f 30 20 20 20 20 20 41 20 6d 61 73 6b 20  _2_0     A mask 
6390: 66 6f 72 20 20 28 30 78 37 66 3c 3c 31 34 29 20  for  (0x7f<<14) 
63a0: 7c 20 30 78 37 66 0a 2a 2a 0a 2a 2a 20 53 4c 4f  | 0x7f.**.** SLO
63b0: 54 5f 34 5f 32 5f 30 20 20 20 41 20 6d 61 73 6b  T_4_2_0   A mask
63c0: 20 66 6f 72 20 20 28 30 78 37 66 3c 3c 32 38 29   for  (0x7f<<28)
63d0: 20 7c 20 53 4c 4f 54 5f 32 5f 30 0a 2a 2f 0a 23   | SLOT_2_0.*/.#
63e0: 64 65 66 69 6e 65 20 53 4c 4f 54 5f 32 5f 30 20  define SLOT_2_0 
63f0: 20 20 20 20 30 78 30 30 31 66 63 30 37 66 0a 23      0x001fc07f.#
6400: 64 65 66 69 6e 65 20 53 4c 4f 54 5f 34 5f 32 5f  define SLOT_4_2_
6410: 30 20 20 20 30 78 66 30 31 66 63 30 37 66 0a 0a  0   0xf01fc07f..
6420: 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36 34  ./*.** Read a 64
6430: 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65  -bit variable-le
6440: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66 72 6f  ngth integer fro
6450: 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e  m memory startin
6460: 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65  g at p[0]..** Re
6470: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
6480: 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e 20 20  of bytes read.  
6490: 54 68 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f  The value is sto
64a0: 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 75 38  red in *v..*/.u8
64b0: 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
64c0: 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
64d0: 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20 2a 76   char *p, u64 *v
64e0: 29 7b 0a 20 20 75 33 32 20 61 2c 62 2c 73 3b 0a  ){.  u32 a,b,s;.
64f0: 0a 20 20 69 66 28 20 28 28 73 69 67 6e 65 64 20  .  if( ((signed 
6500: 63 68 61 72 2a 29 70 29 5b 30 5d 3e 3d 30 20 29  char*)p)[0]>=0 )
6510: 7b 0a 20 20 20 20 2a 76 20 3d 20 2a 70 3b 0a 20  {.    *v = *p;. 
6520: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
6530: 0a 20 20 69 66 28 20 28 28 73 69 67 6e 65 64 20  .  if( ((signed 
6540: 63 68 61 72 2a 29 70 29 5b 31 5d 3e 3d 30 20 29  char*)p)[1]>=0 )
6550: 7b 0a 20 20 20 20 2a 76 20 3d 20 28 28 75 33 32  {.    *v = ((u32
6560: 29 28 70 5b 30 5d 26 30 78 37 66 29 3c 3c 37 29  )(p[0]&0x7f)<<7)
6570: 20 7c 20 70 5b 31 5d 3b 0a 20 20 20 20 72 65 74   | p[1];.    ret
6580: 75 72 6e 20 32 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  urn 2;.  }..  /*
6590: 20 56 65 72 69 66 79 20 74 68 61 74 20 63 6f 6e   Verify that con
65a0: 73 74 61 6e 74 73 20 61 72 65 20 70 72 65 63 6f  stants are preco
65b0: 6d 70 75 74 65 64 20 63 6f 72 72 65 63 74 6c 79  mputed correctly
65c0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 53 4c   */.  assert( SL
65d0: 4f 54 5f 32 5f 30 20 3d 3d 20 28 28 30 78 37 66  OT_2_0 == ((0x7f
65e0: 3c 3c 31 34 29 20 7c 20 28 30 78 37 66 29 29 20  <<14) | (0x7f)) 
65f0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 53 4c 4f  );.  assert( SLO
6600: 54 5f 34 5f 32 5f 30 20 3d 3d 20 28 28 30 78 66  T_4_2_0 == ((0xf
6610: 55 3c 3c 32 38 29 20 7c 20 28 30 78 37 66 3c 3c  U<<28) | (0x7f<<
6620: 31 34 29 20 7c 20 28 30 78 37 66 29 29 20 29 3b  14) | (0x7f)) );
6630: 0a 0a 20 20 61 20 3d 20 28 28 75 33 32 29 70 5b  ..  a = ((u32)p[
6640: 30 5d 29 3c 3c 31 34 3b 0a 20 20 62 20 3d 20 70  0])<<14;.  b = p
6650: 5b 31 5d 3b 0a 20 20 70 20 2b 3d 20 32 3b 0a 20  [1];.  p += 2;. 
6660: 20 61 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61   a |= *p;.  /* a
6670: 3a 20 70 30 3c 3c 31 34 20 7c 20 70 32 20 28 75  : p0<<14 | p2 (u
6680: 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66  nmasked) */.  if
6690: 20 28 21 28 61 26 30 78 38 30 29 29 0a 20 20 7b   (!(a&0x80)).  {
66a0: 0a 20 20 20 20 61 20 26 3d 20 53 4c 4f 54 5f 32  .    a &= SLOT_2
66b0: 5f 30 3b 0a 20 20 20 20 62 20 26 3d 20 30 78 37  _0;.    b &= 0x7
66c0: 66 3b 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37 3b  f;.    b = b<<7;
66d0: 0a 20 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20  .    a |= b;.   
66e0: 20 2a 76 20 3d 20 61 3b 0a 20 20 20 20 72 65 74   *v = a;.    ret
66f0: 75 72 6e 20 33 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  urn 3;.  }..  /*
6700: 20 43 53 45 31 20 66 72 6f 6d 20 62 65 6c 6f 77   CSE1 from below
6710: 20 2a 2f 0a 20 20 61 20 26 3d 20 53 4c 4f 54 5f   */.  a &= SLOT_
6720: 32 5f 30 3b 0a 20 20 70 2b 2b 3b 0a 20 20 62 20  2_0;.  p++;.  b 
6730: 3d 20 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20  = b<<14;.  b |= 
6740: 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c  *p;.  /* b: p1<<
6750: 31 34 20 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65  14 | p3 (unmaske
6760: 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26  d) */.  if (!(b&
6770: 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 62  0x80)).  {.    b
6780: 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20 20   &= SLOT_2_0;.  
6790: 20 20 2f 2a 20 6d 6f 76 65 64 20 43 53 45 31 20    /* moved CSE1 
67a0: 75 70 20 2a 2f 0a 20 20 20 20 2f 2a 20 61 20 26  up */.    /* a &
67b0: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
67c0: 37 66 29 3b 20 2a 2f 0a 20 20 20 20 61 20 3d 20  7f); */.    a = 
67d0: 61 3c 3c 37 3b 0a 20 20 20 20 61 20 7c 3d 20 62  a<<7;.    a |= b
67e0: 3b 0a 20 20 20 20 2a 76 20 3d 20 61 3b 0a 20 20  ;.    *v = a;.  
67f0: 20 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a    return 4;.  }.
6800: 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 31 34 20  .  /* a: p0<<14 
6810: 7c 20 70 32 20 28 6d 61 73 6b 65 64 29 20 2a 2f  | p2 (masked) */
6820: 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c 31 34 20  .  /* b: p1<<14 
6830: 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65 64 29 20  | p3 (unmasked) 
6840: 2a 2f 0a 20 20 2f 2a 20 31 3a 73 61 76 65 20 6f  */.  /* 1:save o
6850: 66 66 20 70 30 3c 3c 32 31 20 7c 20 70 31 3c 3c  ff p0<<21 | p1<<
6860: 31 34 20 7c 20 70 32 3c 3c 37 20 7c 20 70 33 20  14 | p2<<7 | p3 
6870: 28 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 2f 2a  (masked) */.  /*
6880: 20 6d 6f 76 65 64 20 43 53 45 31 20 75 70 20 2a   moved CSE1 up *
6890: 2f 0a 20 20 2f 2a 20 61 20 26 3d 20 28 30 78 37  /.  /* a &= (0x7
68a0: 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20 2a  f<<14)|(0x7f); *
68b0: 2f 0a 20 20 62 20 26 3d 20 53 4c 4f 54 5f 32 5f  /.  b &= SLOT_2_
68c0: 30 3b 0a 20 20 73 20 3d 20 61 3b 0a 20 20 2f 2a  0;.  s = a;.  /*
68d0: 20 73 3a 20 70 30 3c 3c 31 34 20 7c 20 70 32 20   s: p0<<14 | p2 
68e0: 28 6d 61 73 6b 65 64 29 20 2a 2f 0a 0a 20 20 70  (masked) */..  p
68f0: 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c 3c 31 34 3b  ++;.  a = a<<14;
6900: 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a  .  a |= *p;.  /*
6910: 20 61 3a 20 70 30 3c 3c 32 38 20 7c 20 70 32 3c   a: p0<<28 | p2<
6920: 3c 31 34 20 7c 20 70 34 20 28 75 6e 6d 61 73 6b  <14 | p4 (unmask
6930: 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28 61  ed) */.  if (!(a
6940: 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20 20  &0x80)).  {.    
6950: 2f 2a 20 77 65 20 63 61 6e 20 73 6b 69 70 20 74  /* we can skip t
6960: 68 65 73 65 20 63 61 75 73 65 20 74 68 65 79 20  hese cause they 
6970: 77 65 72 65 20 28 65 66 66 65 63 74 69 76 65 6c  were (effectivel
6980: 79 29 20 64 6f 6e 65 20 61 62 6f 76 65 0a 20 20  y) done above.  
6990: 20 20 2a 2a 20 77 68 69 6c 65 20 63 61 6c 63 75    ** while calcu
69a0: 6c 61 74 69 6e 67 20 73 20 2a 2f 0a 20 20 20 20  lating s */.    
69b0: 2f 2a 20 61 20 26 3d 20 28 30 78 37 66 3c 3c 32  /* a &= (0x7f<<2
69c0: 38 29 7c 28 30 78 37 66 3c 3c 31 34 29 7c 28 30  8)|(0x7f<<14)|(0
69d0: 78 37 66 29 3b 20 2a 2f 0a 20 20 20 20 2f 2a 20  x7f); */.    /* 
69e0: 62 20 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c  b &= (0x7f<<14)|
69f0: 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20 20 20 62  (0x7f); */.    b
6a00: 20 3d 20 62 3c 3c 37 3b 0a 20 20 20 20 61 20 7c   = b<<7;.    a |
6a10: 3d 20 62 3b 0a 20 20 20 20 73 20 3d 20 73 3e 3e  = b;.    s = s>>
6a20: 31 38 3b 0a 20 20 20 20 2a 76 20 3d 20 28 28 75  18;.    *v = ((u
6a30: 36 34 29 73 29 3c 3c 33 32 20 7c 20 61 3b 0a 20  64)s)<<32 | a;. 
6a40: 20 20 20 72 65 74 75 72 6e 20 35 3b 0a 20 20 7d     return 5;.  }
6a50: 0a 0a 20 20 2f 2a 20 32 3a 73 61 76 65 20 6f 66  ..  /* 2:save of
6a60: 66 20 70 30 3c 3c 32 31 20 7c 20 70 31 3c 3c 31  f p0<<21 | p1<<1
6a70: 34 20 7c 20 70 32 3c 3c 37 20 7c 20 70 33 20 28  4 | p2<<7 | p3 (
6a80: 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 73 20 3d  masked) */.  s =
6a90: 20 73 3c 3c 37 3b 0a 20 20 73 20 7c 3d 20 62 3b   s<<7;.  s |= b;
6aa0: 0a 20 20 2f 2a 20 73 3a 20 70 30 3c 3c 32 31 20  .  /* s: p0<<21 
6ab0: 7c 20 70 31 3c 3c 31 34 20 7c 20 70 32 3c 3c 37  | p1<<14 | p2<<7
6ac0: 20 7c 20 70 33 20 28 6d 61 73 6b 65 64 29 20 2a   | p3 (masked) *
6ad0: 2f 0a 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d 20  /..  p++;.  b = 
6ae0: 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20 2a 70  b<<14;.  b |= *p
6af0: 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c 32 38  ;.  /* b: p1<<28
6b00: 20 7c 20 70 33 3c 3c 31 34 20 7c 20 70 35 20 28   | p3<<14 | p5 (
6b10: 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69  unmasked) */.  i
6b20: 66 20 28 21 28 62 26 30 78 38 30 29 29 0a 20 20  f (!(b&0x80)).  
6b30: 7b 0a 20 20 20 20 2f 2a 20 77 65 20 63 61 6e 20  {.    /* we can 
6b40: 73 6b 69 70 20 74 68 69 73 20 63 61 75 73 65 20  skip this cause 
6b50: 69 74 20 77 61 73 20 28 65 66 66 65 63 74 69 76  it was (effectiv
6b60: 65 6c 79 29 20 64 6f 6e 65 20 61 62 6f 76 65 20  ely) done above 
6b70: 69 6e 20 63 61 6c 63 27 69 6e 67 20 73 20 2a 2f  in calc'ing s */
6b80: 0a 20 20 20 20 2f 2a 20 62 20 26 3d 20 28 30 78  .    /* b &= (0x
6b90: 37 66 3c 3c 32 38 29 7c 28 30 78 37 66 3c 3c 31  7f<<28)|(0x7f<<1
6ba0: 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20  4)|(0x7f); */.  
6bb0: 20 20 61 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b    a &= SLOT_2_0;
6bc0: 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20  .    a = a<<7;. 
6bd0: 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73     a |= b;.    s
6be0: 20 3d 20 73 3e 3e 31 38 3b 0a 20 20 20 20 2a 76   = s>>18;.    *v
6bf0: 20 3d 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20   = ((u64)s)<<32 
6c00: 7c 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | a;.    return 
6c10: 36 3b 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20  6;.  }..  p++;. 
6c20: 20 61 20 3d 20 61 3c 3c 31 34 3b 0a 20 20 61 20   a = a<<14;.  a 
6c30: 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70  |= *p;.  /* a: p
6c40: 32 3c 3c 32 38 20 7c 20 70 34 3c 3c 31 34 20 7c  2<<28 | p4<<14 |
6c50: 20 70 36 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a   p6 (unmasked) *
6c60: 2f 0a 20 20 69 66 20 28 21 28 61 26 30 78 38 30  /.  if (!(a&0x80
6c70: 29 29 0a 20 20 7b 0a 20 20 20 20 61 20 26 3d 20  )).  {.    a &= 
6c80: 53 4c 4f 54 5f 34 5f 32 5f 30 3b 0a 20 20 20 20  SLOT_4_2_0;.    
6c90: 62 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20  b &= SLOT_2_0;. 
6ca0: 20 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20 20     b = b<<7;.   
6cb0: 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73 20 3d   a |= b;.    s =
6cc0: 20 73 3e 3e 31 31 3b 0a 20 20 20 20 2a 76 20 3d   s>>11;.    *v =
6cd0: 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20 7c 20   ((u64)s)<<32 | 
6ce0: 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 37 3b  a;.    return 7;
6cf0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 53 45 32 20  .  }..  /* CSE2 
6d00: 66 72 6f 6d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  from below */.  
6d10: 61 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a 20  a &= SLOT_2_0;. 
6d20: 20 70 2b 2b 3b 0a 20 20 62 20 3d 20 62 3c 3c 31   p++;.  b = b<<1
6d30: 34 3b 0a 20 20 62 20 7c 3d 20 2a 70 3b 0a 20 20  4;.  b |= *p;.  
6d40: 2f 2a 20 62 3a 20 70 33 3c 3c 32 38 20 7c 20 70  /* b: p3<<28 | p
6d50: 35 3c 3c 31 34 20 7c 20 70 37 20 28 75 6e 6d 61  5<<14 | p7 (unma
6d60: 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21  sked) */.  if (!
6d70: 28 62 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20  (b&0x80)).  {.  
6d80: 20 20 62 20 26 3d 20 53 4c 4f 54 5f 34 5f 32 5f    b &= SLOT_4_2_
6d90: 30 3b 0a 20 20 20 20 2f 2a 20 6d 6f 76 65 64 20  0;.    /* moved 
6da0: 43 53 45 32 20 75 70 20 2a 2f 0a 20 20 20 20 2f  CSE2 up */.    /
6db0: 2a 20 61 20 26 3d 20 28 30 78 37 66 3c 3c 31 34  * a &= (0x7f<<14
6dc0: 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20 20  )|(0x7f); */.   
6dd0: 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20 20 20 61   a = a<<7;.    a
6de0: 20 7c 3d 20 62 3b 0a 20 20 20 20 73 20 3d 20 73   |= b;.    s = s
6df0: 3e 3e 34 3b 0a 20 20 20 20 2a 76 20 3d 20 28 28  >>4;.    *v = ((
6e00: 75 36 34 29 73 29 3c 3c 33 32 20 7c 20 61 3b 0a  u64)s)<<32 | a;.
6e10: 20 20 20 20 72 65 74 75 72 6e 20 38 3b 0a 20 20      return 8;.  
6e20: 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20  }..  p++;.  a = 
6e30: 61 3c 3c 31 35 3b 0a 20 20 61 20 7c 3d 20 2a 70  a<<15;.  a |= *p
6e40: 3b 0a 20 20 2f 2a 20 61 3a 20 70 34 3c 3c 32 39  ;.  /* a: p4<<29
6e50: 20 7c 20 70 36 3c 3c 31 35 20 7c 20 70 38 20 28   | p6<<15 | p8 (
6e60: 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 0a 20 20  unmasked) */..  
6e70: 2f 2a 20 6d 6f 76 65 64 20 43 53 45 32 20 75 70  /* moved CSE2 up
6e80: 20 2a 2f 0a 20 20 2f 2a 20 61 20 26 3d 20 28 30   */.  /* a &= (0
6e90: 78 37 66 3c 3c 32 39 29 7c 28 30 78 37 66 3c 3c  x7f<<29)|(0x7f<<
6ea0: 31 35 29 7c 28 30 78 66 66 29 3b 20 2a 2f 0a 20  15)|(0xff); */. 
6eb0: 20 62 20 26 3d 20 53 4c 4f 54 5f 32 5f 30 3b 0a   b &= SLOT_2_0;.
6ec0: 20 20 62 20 3d 20 62 3c 3c 38 3b 0a 20 20 61 20    b = b<<8;.  a 
6ed0: 7c 3d 20 62 3b 0a 0a 20 20 73 20 3d 20 73 3c 3c  |= b;..  s = s<<
6ee0: 34 3b 0a 20 20 62 20 3d 20 70 5b 2d 34 5d 3b 0a  4;.  b = p[-4];.
6ef0: 20 20 62 20 26 3d 20 30 78 37 66 3b 0a 20 20 62    b &= 0x7f;.  b
6f00: 20 3d 20 62 3e 3e 33 3b 0a 20 20 73 20 7c 3d 20   = b>>3;.  s |= 
6f10: 62 3b 0a 0a 20 20 2a 76 20 3d 20 28 28 75 36 34  b;..  *v = ((u64
6f20: 29 73 29 3c 3c 33 32 20 7c 20 61 3b 0a 0a 20 20  )s)<<32 | a;..  
6f30: 72 65 74 75 72 6e 20 39 3b 0a 7d 0a 0a 2f 2a 0a  return 9;.}../*.
6f40: 2a 2a 20 52 65 61 64 20 61 20 33 32 2d 62 69 74  ** Read a 32-bit
6f50: 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
6f60: 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65   integer from me
6f70: 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74  mory starting at
6f80: 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e   p[0]..** Return
6f90: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
6fa0: 79 74 65 73 20 72 65 61 64 2e 20 20 54 68 65 20  ytes read.  The 
6fb0: 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20  value is stored 
6fc0: 69 6e 20 2a 76 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  in *v..**.** If 
6fd0: 74 68 65 20 76 61 72 69 6e 74 20 73 74 6f 72 65  the varint store
6fe0: 64 20 69 6e 20 70 5b 30 5d 20 69 73 20 6c 61 72  d in p[0] is lar
6ff0: 67 65 72 20 74 68 61 6e 20 63 61 6e 20 66 69 74  ger than can fit
7000: 20 69 6e 20 61 20 33 32 2d 62 69 74 20 75 6e 73   in a 32-bit uns
7010: 69 67 6e 65 64 0a 2a 2a 20 69 6e 74 65 67 65 72  igned.** integer
7020: 2c 20 74 68 65 6e 20 73 65 74 20 2a 76 20 74 6f  , then set *v to
7030: 20 30 78 66 66 66 66 66 66 66 66 2e 0a 2a 2a 0a   0xffffffff..**.
7040: 2a 2a 20 41 20 4d 41 43 52 4f 20 76 65 72 73 69  ** A MACRO versi
7050: 6f 6e 2c 20 67 65 74 56 61 72 69 6e 74 33 32 2c  on, getVarint32,
7060: 20 69 73 20 70 72 6f 76 69 64 65 64 20 77 68 69   is provided whi
7070: 63 68 20 69 6e 6c 69 6e 65 73 20 74 68 65 20 0a  ch inlines the .
7080: 2a 2a 20 73 69 6e 67 6c 65 2d 62 79 74 65 20 63  ** single-byte c
7090: 61 73 65 2e 20 20 41 6c 6c 20 63 6f 64 65 20 73  ase.  All code s
70a0: 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41  hould use the MA
70b0: 43 52 4f 20 76 65 72 73 69 6f 6e 20 61 73 20 0a  CRO version as .
70c0: 2a 2a 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** this function
70d0: 20 61 73 73 75 6d 65 73 20 74 68 65 20 73 69 6e   assumes the sin
70e0: 67 6c 65 2d 62 79 74 65 20 63 61 73 65 20 68 61  gle-byte case ha
70f0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 68  s already been h
7100: 61 6e 64 6c 65 64 2e 0a 2a 2f 0a 75 38 20 73 71  andled..*/.u8 sq
7110: 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
7120: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
7130: 63 68 61 72 20 2a 70 2c 20 75 33 32 20 2a 76 29  char *p, u32 *v)
7140: 7b 0a 20 20 75 33 32 20 61 2c 62 3b 0a 0a 20 20  {.  u32 a,b;..  
7150: 2f 2a 20 54 68 65 20 31 2d 62 79 74 65 20 63 61  /* The 1-byte ca
7160: 73 65 2e 20 20 4f 76 65 72 77 68 65 6c 6d 69 6e  se.  Overwhelmin
7170: 67 6c 79 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d  gly the most com
7180: 6d 6f 6e 2e 20 20 48 61 6e 64 6c 65 64 20 69 6e  mon.  Handled in
7190: 6c 69 6e 65 0a 20 20 2a 2a 20 62 79 20 74 68 65  line.  ** by the
71a0: 20 67 65 74 56 61 72 69 6e 33 32 28 29 20 6d 61   getVarin32() ma
71b0: 63 72 6f 20 2a 2f 0a 20 20 61 20 3d 20 2a 70 3b  cro */.  a = *p;
71c0: 0a 20 20 2f 2a 20 61 3a 20 70 30 20 28 75 6e 6d  .  /* a: p0 (unm
71d0: 61 73 6b 65 64 29 20 2a 2f 0a 23 69 66 6e 64 65  asked) */.#ifnde
71e0: 66 20 67 65 74 56 61 72 69 6e 74 33 32 0a 20 20  f getVarint32.  
71f0: 69 66 20 28 21 28 61 26 30 78 38 30 29 29 0a 20  if (!(a&0x80)). 
7200: 20 7b 0a 20 20 20 20 2f 2a 20 56 61 6c 75 65 73   {.    /* Values
7210: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 31   between 0 and 1
7220: 32 37 20 2a 2f 0a 20 20 20 20 2a 76 20 3d 20 61  27 */.    *v = a
7230: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
7240: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
7250: 20 54 68 65 20 32 2d 62 79 74 65 20 63 61 73 65   The 2-byte case
7260: 20 2a 2f 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d   */.  p++;.  b =
7270: 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 20   *p;.  /* b: p1 
7280: 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20  (unmasked) */.  
7290: 69 66 20 28 21 28 62 26 30 78 38 30 29 29 0a 20  if (!(b&0x80)). 
72a0: 20 7b 0a 20 20 20 20 2f 2a 20 56 61 6c 75 65 73   {.    /* Values
72b0: 20 62 65 74 77 65 65 6e 20 31 32 38 20 61 6e 64   between 128 and
72c0: 20 31 36 33 38 33 20 2a 2f 0a 20 20 20 20 61 20   16383 */.    a 
72d0: 26 3d 20 30 78 37 66 3b 0a 20 20 20 20 61 20 3d  &= 0x7f;.    a =
72e0: 20 61 3c 3c 37 3b 0a 20 20 20 20 2a 76 20 3d 20   a<<7;.    *v = 
72f0: 61 20 7c 20 62 3b 0a 20 20 20 20 72 65 74 75 72  a | b;.    retur
7300: 6e 20 32 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  n 2;.  }..  /* T
7310: 68 65 20 33 2d 62 79 74 65 20 63 61 73 65 20 2a  he 3-byte case *
7320: 2f 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20 61  /.  p++;.  a = a
7330: 3c 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b  <<14;.  a |= *p;
7340: 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 31 34 20  .  /* a: p0<<14 
7350: 7c 20 70 32 20 28 75 6e 6d 61 73 6b 65 64 29 20  | p2 (unmasked) 
7360: 2a 2f 0a 20 20 69 66 20 28 21 28 61 26 30 78 38  */.  if (!(a&0x8
7370: 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 56  0)).  {.    /* V
7380: 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 31 36  alues between 16
7390: 33 38 34 20 61 6e 64 20 32 30 39 37 31 35 31 20  384 and 2097151 
73a0: 2a 2f 0a 20 20 20 20 61 20 26 3d 20 28 30 78 37  */.    a &= (0x7
73b0: 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 0a 20  f<<14)|(0x7f);. 
73c0: 20 20 20 62 20 26 3d 20 30 78 37 66 3b 0a 20 20     b &= 0x7f;.  
73d0: 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20 20 20    b = b<<7;.    
73e0: 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20 20 20  *v = a | b;.    
73f0: 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d 0a 0a 20  return 3;.  }.. 
7400: 20 2f 2a 20 41 20 33 32 2d 62 69 74 20 76 61 72   /* A 32-bit var
7410: 69 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  int is used to s
7420: 74 6f 72 65 20 73 69 7a 65 20 69 6e 66 6f 72 6d  tore size inform
7430: 61 74 69 6f 6e 20 69 6e 20 62 74 72 65 65 73 2e  ation in btrees.
7440: 0a 20 20 2a 2a 20 4f 62 6a 65 63 74 73 20 61 72  .  ** Objects ar
7450: 65 20 72 61 72 65 6c 79 20 6c 61 72 67 65 72 20  e rarely larger 
7460: 74 68 61 6e 20 32 4d 69 42 20 6c 69 6d 69 74 20  than 2MiB limit 
7470: 6f 66 20 61 20 33 2d 62 79 74 65 20 76 61 72 69  of a 3-byte vari
7480: 6e 74 2e 0a 20 20 2a 2a 20 41 20 33 2d 62 79 74  nt..  ** A 3-byt
7490: 65 20 76 61 72 69 6e 74 20 69 73 20 73 75 66 66  e varint is suff
74a0: 69 63 69 65 6e 74 2c 20 66 6f 72 20 65 78 61 6d  icient, for exam
74b0: 70 6c 65 2c 20 74 6f 20 72 65 63 6f 72 64 20 74  ple, to record t
74c0: 68 65 20 73 69 7a 65 0a 20 20 2a 2a 20 6f 66 20  he size.  ** of 
74d0: 61 20 31 30 34 38 35 36 39 2d 62 79 74 65 20 42  a 1048569-byte B
74e0: 4c 4f 42 20 6f 72 20 73 74 72 69 6e 67 2e 0a 20  LOB or string.. 
74f0: 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 6f 6e 6c 79   **.  ** We only
7500: 20 75 6e 72 6f 6c 6c 20 74 68 65 20 66 69 72 73   unroll the firs
7510: 74 20 31 2d 2c 20 32 2d 2c 20 61 6e 64 20 33 2d  t 1-, 2-, and 3-
7520: 20 62 79 74 65 20 63 61 73 65 73 2e 20 20 54 68   byte cases.  Th
7530: 65 20 76 65 72 79 0a 20 20 2a 2a 20 72 61 72 65  e very.  ** rare
7540: 20 6c 61 72 67 65 72 20 63 61 73 65 73 20 63 61   larger cases ca
7550: 6e 20 62 65 20 68 61 6e 64 6c 65 64 20 62 79 20  n be handled by 
7560: 74 68 65 20 73 6c 6f 77 65 72 20 36 34 2d 62 69  the slower 64-bi
7570: 74 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 72 6f  t varint.  ** ro
7580: 75 74 69 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 20  utine..  */.#if 
7590: 31 0a 20 20 7b 0a 20 20 20 20 75 36 34 20 76 36  1.  {.    u64 v6
75a0: 34 3b 0a 20 20 20 20 75 38 20 6e 3b 0a 0a 20 20  4;.    u8 n;..  
75b0: 20 20 70 20 2d 3d 20 32 3b 0a 20 20 20 20 6e 20    p -= 2;.    n 
75c0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
75d0: 6e 74 28 70 2c 20 26 76 36 34 29 3b 0a 20 20 20  nt(p, &v64);.   
75e0: 20 61 73 73 65 72 74 28 20 6e 3e 33 20 26 26 20   assert( n>3 && 
75f0: 6e 3c 3d 39 20 29 3b 0a 20 20 20 20 69 66 28 20  n<=9 );.    if( 
7600: 28 76 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  (v64 & SQLITE_MA
7610: 58 5f 55 33 32 29 21 3d 76 36 34 20 29 7b 0a 20  X_U32)!=v64 ){. 
7620: 20 20 20 20 20 2a 76 20 3d 20 30 78 66 66 66 66       *v = 0xffff
7630: 66 66 66 66 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ffff;.    }else{
7640: 0a 20 20 20 20 20 20 2a 76 20 3d 20 28 75 33 32  .      *v = (u32
7650: 29 76 36 34 3b 0a 20 20 20 20 7d 0a 20 20 20 20  )v64;.    }.    
7660: 72 65 74 75 72 6e 20 6e 3b 0a 20 20 7d 0a 0a 23  return n;.  }..#
7670: 65 6c 73 65 0a 20 20 2f 2a 20 46 6f 72 20 66 6f  else.  /* For fo
7680: 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 28 6b 65  llowing code (ke
7690: 70 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61  pt for historica
76a0: 6c 20 72 65 63 6f 72 64 20 6f 6e 6c 79 29 20 73  l record only) s
76b0: 68 6f 77 73 20 61 6e 0a 20 20 2a 2a 20 75 6e 72  hows an.  ** unr
76c0: 6f 6c 6c 69 6e 67 20 66 6f 72 20 74 68 65 20 33  olling for the 3
76d0: 2d 20 61 6e 64 20 34 2d 62 79 74 65 20 76 61 72  - and 4-byte var
76e0: 69 6e 74 20 63 61 73 65 73 2e 20 20 54 68 69 73  int cases.  This
76f0: 20 63 6f 64 65 20 69 73 0a 20 20 2a 2a 20 73 6c   code is.  ** sl
7700: 69 67 68 74 6c 79 20 66 61 73 74 65 72 2c 20 62  ightly faster, b
7710: 75 74 20 69 74 20 69 73 20 61 6c 73 6f 20 6c 61  ut it is also la
7720: 72 67 65 72 20 61 6e 64 20 6d 75 63 68 20 68 61  rger and much ha
7730: 72 64 65 72 20 74 6f 20 74 65 73 74 2e 0a 20 20  rder to test..  
7740: 2a 2f 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d 20  */.  p++;.  b = 
7750: 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20 2a 70  b<<14;.  b |= *p
7760: 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c 31 34  ;.  /* b: p1<<14
7770: 20 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65 64 29   | p3 (unmasked)
7780: 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26 30 78   */.  if (!(b&0x
7790: 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  80)).  {.    /* 
77a0: 56 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 32  Values between 2
77b0: 30 39 37 31 35 32 20 61 6e 64 20 32 36 38 34 33  097152 and 26843
77c0: 35 34 35 35 20 2a 2f 0a 20 20 20 20 62 20 26 3d  5455 */.    b &=
77d0: 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78 37   (0x7f<<14)|(0x7
77e0: 66 29 3b 0a 20 20 20 20 61 20 26 3d 20 28 30 78  f);.    a &= (0x
77f0: 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 0a  7f<<14)|(0x7f);.
7800: 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20      a = a<<7;.  
7810: 20 20 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20    *v = a | b;.  
7820: 20 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a    return 4;.  }.
7830: 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c  .  p++;.  a = a<
7840: 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a  <14;.  a |= *p;.
7850: 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 32 38 20 7c    /* a: p0<<28 |
7860: 20 70 32 3c 3c 31 34 20 7c 20 70 34 20 28 75 6e   p2<<14 | p4 (un
7870: 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20  masked) */.  if 
7880: 28 21 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a  (!(a&0x80)).  {.
7890: 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 20 62      /* Values  b
78a0: 65 74 77 65 65 6e 20 32 36 38 34 33 35 34 35 36  etween 268435456
78b0: 20 61 6e 64 20 33 34 33 35 39 37 33 38 33 36 37   and 34359738367
78c0: 20 2a 2f 0a 20 20 20 20 61 20 26 3d 20 53 4c 4f   */.    a &= SLO
78d0: 54 5f 34 5f 32 5f 30 3b 0a 20 20 20 20 62 20 26  T_4_2_0;.    b &
78e0: 3d 20 53 4c 4f 54 5f 34 5f 32 5f 30 3b 0a 20 20  = SLOT_4_2_0;.  
78f0: 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20 20 20    b = b<<7;.    
7900: 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20 20 20 20  *v = a | b;.    
7910: 72 65 74 75 72 6e 20 35 3b 0a 20 20 7d 0a 0a 20  return 5;.  }.. 
7920: 20 2f 2a 20 57 65 20 63 61 6e 20 6f 6e 6c 79 20   /* We can only 
7930: 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
7940: 20 77 68 65 6e 20 72 65 61 64 69 6e 67 20 61 20   when reading a 
7950: 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
7960: 0a 20 20 2a 2a 20 66 69 6c 65 2e 20 20 49 6e 20  .  ** file.  In 
7970: 74 68 61 74 20 63 61 73 65 20 77 65 20 61 72 65  that case we are
7980: 20 6e 6f 74 20 69 6e 20 61 6e 79 20 68 75 72 72   not in any hurr
7990: 79 2e 20 20 55 73 65 20 74 68 65 20 28 72 65 6c  y.  Use the (rel
79a0: 61 74 69 76 65 6c 79 0a 20 20 2a 2a 20 73 6c 6f  atively.  ** slo
79b0: 77 29 20 67 65 6e 65 72 61 6c 2d 70 75 72 70 6f  w) general-purpo
79c0: 73 65 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  se sqlite3GetVar
79d0: 69 6e 74 28 29 20 72 6f 75 74 69 6e 65 20 74 6f  int() routine to
79e0: 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 2a   extract the.  *
79f0: 2a 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 7b 0a  * value. */.  {.
7a00: 20 20 20 20 75 36 34 20 76 36 34 3b 0a 20 20 20      u64 v64;.   
7a10: 20 75 38 20 6e 3b 0a 0a 20 20 20 20 70 20 2d 3d   u8 n;..    p -=
7a20: 20 34 3b 0a 20 20 20 20 6e 20 3d 20 73 71 6c 69   4;.    n = sqli
7a30: 74 65 33 47 65 74 56 61 72 69 6e 74 28 70 2c 20  te3GetVarint(p, 
7a40: 26 76 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72  &v64);.    asser
7a50: 74 28 20 6e 3e 35 20 26 26 20 6e 3c 3d 39 20 29  t( n>5 && n<=9 )
7a60: 3b 0a 20 20 20 20 2a 76 20 3d 20 28 75 33 32 29  ;.    *v = (u32)
7a70: 76 36 34 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  v64;.    return 
7a80: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a  n;.  }.#endif.}.
7a90: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
7aa0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
7ab0: 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 6e  s that will be n
7ac0: 65 65 64 65 64 20 74 6f 20 73 74 6f 72 65 20 74  eeded to store t
7ad0: 68 65 20 67 69 76 65 6e 0a 2a 2a 20 36 34 2d 62  he given.** 64-b
7ae0: 69 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69  it integer..*/.i
7af0: 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
7b00: 4c 65 6e 28 75 36 34 20 76 29 7b 0a 20 20 69 6e  Len(u64 v){.  in
7b10: 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20  t i;.  for(i=1; 
7b20: 28 76 20 3e 3e 3d 20 37 29 21 3d 30 3b 20 69 2b  (v >>= 7)!=0; i+
7b30: 2b 29 7b 20 61 73 73 65 72 74 28 20 69 3c 31 30  +){ assert( i<10
7b40: 20 29 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 69   ); }.  return i
7b50: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  ;.}.../*.** Read
7b60: 20 6f 72 20 77 72 69 74 65 20 61 20 66 6f 75 72   or write a four
7b70: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7b80: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
7b90: 2a 2f 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  */.u32 sqlite3Ge
7ba0: 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 20  t4byte(const u8 
7bb0: 2a 70 29 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p){.#if SQLITE_
7bc0: 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a  BYTEORDER==4321.
7bd0: 20 20 75 33 32 20 78 3b 0a 20 20 6d 65 6d 63 70    u32 x;.  memcp
7be0: 79 28 26 78 2c 70 2c 34 29 3b 0a 20 20 72 65 74  y(&x,p,4);.  ret
7bf0: 75 72 6e 20 78 3b 0a 23 65 6c 69 66 20 53 51 4c  urn x;.#elif SQL
7c00: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31  ITE_BYTEORDER==1
7c10: 32 33 34 20 26 26 20 47 43 43 5f 56 45 52 53 49  234 && GCC_VERSI
7c20: 4f 4e 3e 3d 34 30 30 33 30 30 30 0a 20 20 75 33  ON>=4003000.  u3
7c30: 32 20 78 3b 0a 20 20 6d 65 6d 63 70 79 28 26 78  2 x;.  memcpy(&x
7c40: 2c 70 2c 34 29 3b 0a 20 20 72 65 74 75 72 6e 20  ,p,4);.  return 
7c50: 5f 5f 62 75 69 6c 74 69 6e 5f 62 73 77 61 70 33  __builtin_bswap3
7c60: 32 28 78 29 3b 0a 23 65 6c 69 66 20 53 51 4c 49  2(x);.#elif SQLI
7c70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32  TE_BYTEORDER==12
7c80: 33 34 20 26 26 20 4d 53 56 43 5f 56 45 52 53 49  34 && MSVC_VERSI
7c90: 4f 4e 3e 3d 31 33 30 30 0a 20 20 75 33 32 20 78  ON>=1300.  u32 x
7ca0: 3b 0a 20 20 6d 65 6d 63 70 79 28 26 78 2c 70 2c  ;.  memcpy(&x,p,
7cb0: 34 29 3b 0a 20 20 72 65 74 75 72 6e 20 5f 62 79  4);.  return _by
7cc0: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 28 78 29 3b  teswap_ulong(x);
7cd0: 0a 23 65 6c 73 65 0a 20 20 74 65 73 74 63 61 73  .#else.  testcas
7ce0: 65 28 20 70 5b 30 5d 26 30 78 38 30 20 29 3b 0a  e( p[0]&0x80 );.
7cf0: 20 20 72 65 74 75 72 6e 20 28 28 75 6e 73 69 67    return ((unsig
7d00: 6e 65 64 29 70 5b 30 5d 3c 3c 32 34 29 20 7c 20  ned)p[0]<<24) | 
7d10: 28 70 5b 31 5d 3c 3c 31 36 29 20 7c 20 28 70 5b  (p[1]<<16) | (p[
7d20: 32 5d 3c 3c 38 29 20 7c 20 70 5b 33 5d 3b 0a 23  2]<<8) | p[3];.#
7d30: 65 6e 64 69 66 0a 7d 0a 76 6f 69 64 20 73 71 6c  endif.}.void sql
7d40: 69 74 65 33 50 75 74 34 62 79 74 65 28 75 6e 73  ite3Put4byte(uns
7d50: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75  igned char *p, u
7d60: 33 32 20 76 29 7b 0a 23 69 66 20 53 51 4c 49 54  32 v){.#if SQLIT
7d70: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
7d80: 31 0a 20 20 6d 65 6d 63 70 79 28 70 2c 26 76 2c  1.  memcpy(p,&v,
7d90: 34 29 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4);.#elif SQLITE
7da0: 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33 34  _BYTEORDER==1234
7db0: 20 26 26 20 47 43 43 5f 56 45 52 53 49 4f 4e 3e   && GCC_VERSION>
7dc0: 3d 34 30 30 33 30 30 30 0a 20 20 75 33 32 20 78  =4003000.  u32 x
7dd0: 20 3d 20 5f 5f 62 75 69 6c 74 69 6e 5f 62 73 77   = __builtin_bsw
7de0: 61 70 33 32 28 76 29 3b 0a 20 20 6d 65 6d 63 70  ap32(v);.  memcp
7df0: 79 28 70 2c 26 78 2c 34 29 3b 0a 23 65 6c 69 66  y(p,&x,4);.#elif
7e00: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
7e10: 52 3d 3d 31 32 33 34 20 26 26 20 4d 53 56 43 5f  R==1234 && MSVC_
7e20: 56 45 52 53 49 4f 4e 3e 3d 31 33 30 30 0a 20 20  VERSION>=1300.  
7e30: 75 33 32 20 78 20 3d 20 5f 62 79 74 65 73 77 61  u32 x = _byteswa
7e40: 70 5f 75 6c 6f 6e 67 28 76 29 3b 0a 20 20 6d 65  p_ulong(v);.  me
7e50: 6d 63 70 79 28 70 2c 26 78 2c 34 29 3b 0a 23 65  mcpy(p,&x,4);.#e
7e60: 6c 73 65 0a 20 20 70 5b 30 5d 20 3d 20 28 75 38  lse.  p[0] = (u8
7e70: 29 28 76 3e 3e 32 34 29 3b 0a 20 20 70 5b 31 5d  )(v>>24);.  p[1]
7e80: 20 3d 20 28 75 38 29 28 76 3e 3e 31 36 29 3b 0a   = (u8)(v>>16);.
7e90: 20 20 70 5b 32 5d 20 3d 20 28 75 38 29 28 76 3e    p[2] = (u8)(v>
7ea0: 3e 38 29 3b 0a 20 20 70 5b 33 5d 20 3d 20 28 75  >8);.  p[3] = (u
7eb0: 38 29 76 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 0a  8)v;.#endif.}...
7ec0: 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 6c 61 74 65  ./*.** Translate
7ed0: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 6f   a single byte o
7ee0: 66 20 48 65 78 20 69 6e 74 6f 20 61 6e 20 69 6e  f Hex into an in
7ef0: 74 65 67 65 72 2e 0a 2a 2a 20 54 68 69 73 20 72  teger..** This r
7f00: 6f 75 74 69 6e 65 20 6f 6e 6c 79 20 77 6f 72 6b  outine only work
7f10: 73 20 69 66 20 68 20 72 65 61 6c 6c 79 20 69 73  s if h really is
7f20: 20 61 20 76 61 6c 69 64 20 68 65 78 61 64 65 63   a valid hexadec
7f30: 69 6d 61 6c 0a 2a 2a 20 63 68 61 72 61 63 74 65  imal.** characte
7f40: 72 3a 20 20 30 2e 2e 39 61 2e 2e 66 41 2e 2e 46  r:  0..9a..fA..F
7f50: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 48 65  .*/.u8 sqlite3He
7f60: 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 7b 0a 20  xToInt(int h){. 
7f70: 20 61 73 73 65 72 74 28 20 28 68 3e 3d 27 30 27   assert( (h>='0'
7f80: 20 26 26 20 68 3c 3d 27 39 27 29 20 7c 7c 20 20   && h<='9') ||  
7f90: 28 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d 27 66  (h>='a' && h<='f
7fa0: 27 29 20 7c 7c 20 20 28 68 3e 3d 27 41 27 20 26  ') ||  (h>='A' &
7fb0: 26 20 68 3c 3d 27 46 27 29 20 29 3b 0a 23 69 66  & h<='F') );.#if
7fc0: 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
7fd0: 0a 20 20 68 20 2b 3d 20 39 2a 28 31 26 28 68 3e  .  h += 9*(1&(h>
7fe0: 3e 36 29 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  >6));.#endif.#if
7ff0: 64 65 66 20 53 51 4c 49 54 45 5f 45 42 43 44 49  def SQLITE_EBCDI
8000: 43 0a 20 20 68 20 2b 3d 20 39 2a 28 31 26 7e 28  C.  h += 9*(1&~(
8010: 68 3e 3e 34 29 29 3b 0a 23 65 6e 64 69 66 0a 20  h>>4));.#endif. 
8020: 20 72 65 74 75 72 6e 20 28 75 38 29 28 68 20 26   return (u8)(h &
8030: 20 30 78 66 29 3b 0a 7d 0a 0a 23 69 66 20 21 64   0xf);.}..#if !d
8040: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
8050: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29  IT_BLOB_LITERAL)
8060: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
8070: 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 2f 2a  TE_HAS_CODEC)./*
8080: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 42 4c  .** Convert a BL
8090: 4f 42 20 6c 69 74 65 72 61 6c 20 6f 66 20 74 68  OB literal of th
80a0: 65 20 66 6f 72 6d 20 22 78 27 68 68 68 68 68 68  e form "x'hhhhhh
80b0: 27 22 20 69 6e 74 6f 20 69 74 73 20 62 69 6e 61  '" into its bina
80c0: 72 79 0a 2a 2a 20 76 61 6c 75 65 2e 20 20 52 65  ry.** value.  Re
80d0: 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  turn a pointer t
80e0: 6f 20 69 74 73 20 62 69 6e 61 72 79 20 76 61 6c  o its binary val
80f0: 75 65 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f  ue.  Space to ho
8100: 6c 64 20 74 68 65 0a 2a 2a 20 62 69 6e 61 72 79  ld the.** binary
8110: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
8120: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
8130: 6c 6c 6f 63 20 61 6e 64 20 6d 75 73 74 20 62 65  lloc and must be
8140: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 74 68 65   freed by.** the
8150: 20 63 61 6c 6c 69 6e 67 20 72 6f 75 74 69 6e 65   calling routine
8160: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
8170: 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
8180: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
8190: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a  har *z, int n){.
81a0: 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 3b 0a 20    char *zBlob;. 
81b0: 20 69 6e 74 20 69 3b 0a 0a 20 20 7a 42 6c 6f 62   int i;..  zBlob
81c0: 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
81d0: 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
81e0: 64 62 2c 20 6e 2f 32 20 2b 20 31 29 3b 0a 20 20  db, n/2 + 1);.  
81f0: 6e 2d 2d 3b 0a 20 20 69 66 28 20 7a 42 6c 6f 62  n--;.  if( zBlob
8200: 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   ){.    for(i=0;
8210: 20 69 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20 20 20   i<n; i+=2){.   
8220: 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20     zBlob[i/2] = 
8230: 28 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74  (sqlite3HexToInt
8240: 28 7a 5b 69 5d 29 3c 3c 34 29 20 7c 20 73 71 6c  (z[i])<<4) | sql
8250: 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 5b 69  ite3HexToInt(z[i
8260: 2b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  +1]);.    }.    
8270: 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 30 3b 0a  zBlob[i/2] = 0;.
8280: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 42 6c    }.  return zBl
8290: 6f 62 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ob;.}.#endif /* 
82a0: 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f  !SQLITE_OMIT_BLO
82b0: 42 5f 4c 49 54 45 52 41 4c 20 7c 7c 20 53 51 4c  B_LITERAL || SQL
82c0: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 2a 2f  ITE_HAS_CODEC */
82d0: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 67 20 61 6e 20 65  ../*.** Log an e
82e0: 72 72 6f 72 20 74 68 61 74 20 69 73 20 61 6e 20  rror that is an 
82f0: 41 50 49 20 63 61 6c 6c 20 6f 6e 20 61 20 63 6f  API call on a co
8300: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
8310: 20 74 68 61 74 20 73 68 6f 75 6c 64 0a 2a 2a 20   that should.** 
8320: 6e 6f 74 20 68 61 76 65 20 62 65 65 6e 20 75 73  not have been us
8330: 65 64 2e 20 20 54 68 65 20 22 74 79 70 65 22 20  ed.  The "type" 
8340: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  of connection po
8350: 69 6e 74 65 72 20 69 73 20 67 69 76 65 6e 20 61  inter is given a
8360: 73 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e  s the.** argumen
8370: 74 2e 20 20 54 68 65 20 7a 54 79 70 65 20 69 73  t.  The zType is
8380: 20 61 20 77 6f 72 64 20 6c 69 6b 65 20 22 4e 55   a word like "NU
8390: 4c 4c 22 20 6f 72 20 22 63 6c 6f 73 65 64 22 20  LL" or "closed" 
83a0: 6f 72 20 22 69 6e 76 61 6c 69 64 22 2e 0a 2a 2f  or "invalid"..*/
83b0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6c 6f 67  .static void log
83c0: 42 61 64 43 6f 6e 6e 65 63 74 69 6f 6e 28 63 6f  BadConnection(co
83d0: 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
83e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  {.  sqlite3_log(
83f0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20 0a  SQLITE_MISUSE, .
8400: 20 20 20 20 20 22 41 50 49 20 63 61 6c 6c 20 77       "API call w
8410: 69 74 68 20 25 73 20 64 61 74 61 62 61 73 65 20  ith %s database 
8420: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
8430: 65 72 22 2c 0a 20 20 20 20 20 7a 54 79 70 65 0a  er",.     zType.
8440: 20 20 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68    );.}../*.** Ch
8450: 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  eck to make sure
8460: 20 77 65 20 68 61 76 65 20 61 20 76 61 6c 69 64   we have a valid
8470: 20 64 62 20 70 6f 69 6e 74 65 72 2e 20 20 54 68   db pointer.  Th
8480: 69 73 20 74 65 73 74 20 69 73 20 6e 6f 74 0a 2a  is test is not.*
8490: 2a 20 66 6f 6f 6c 70 72 6f 6f 66 20 62 75 74 20  * foolproof but 
84a0: 69 74 20 64 6f 65 73 20 70 72 6f 76 69 64 65 20  it does provide 
84b0: 73 6f 6d 65 20 6d 65 61 73 75 72 65 20 6f 66 20  some measure of 
84c0: 70 72 6f 74 65 63 74 69 6f 6e 20 61 67 61 69 6e  protection again
84d0: 73 74 0a 2a 2a 20 6d 69 73 75 73 65 20 6f 66 20  st.** misuse of 
84e0: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 73 75  the interface su
84f0: 63 68 20 61 73 20 70 61 73 73 69 6e 67 20 69 6e  ch as passing in
8500: 20 64 62 20 70 6f 69 6e 74 65 72 73 20 74 68 61   db pointers tha
8510: 74 20 61 72 65 0a 2a 2a 20 4e 55 4c 4c 20 6f 72  t are.** NULL or
8520: 20 77 68 69 63 68 20 68 61 76 65 20 62 65 65 6e   which have been
8530: 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6c 6f 73   previously clos
8540: 65 64 2e 20 20 49 66 20 74 68 69 73 20 72 6f 75  ed.  If this rou
8550: 74 69 6e 65 20 72 65 74 75 72 6e 73 0a 2a 2a 20  tine returns.** 
8560: 31 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  1 it means that 
8570: 74 68 65 20 64 62 20 70 6f 69 6e 74 65 72 20 69  the db pointer i
8580: 73 20 76 61 6c 69 64 20 61 6e 64 20 30 20 69 66  s valid and 0 if
8590: 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62   it should not b
85a0: 65 0a 2a 2a 20 64 65 72 65 66 65 72 65 6e 63 65  e.** dereference
85b0: 64 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e  d for any reason
85c0: 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e 67 20 66  .  The calling f
85d0: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 69  unction should i
85e0: 6e 76 6f 6b 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  nvoke.** SQLITE_
85f0: 4d 49 53 55 53 45 20 69 6d 6d 65 64 69 61 74 65  MISUSE immediate
8600: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ly..**.** sqlite
8610: 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 29  3SafetyCheckOk()
8620: 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74   requires that t
8630: 68 65 20 64 62 20 70 6f 69 6e 74 65 72 20 62 65  he db pointer be
8640: 20 76 61 6c 69 64 20 66 6f 72 0a 2a 2a 20 75 73   valid for.** us
8650: 65 2e 20 20 73 71 6c 69 74 65 33 53 61 66 65 74  e.  sqlite3Safet
8660: 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 29  yCheckSickOrOk()
8670: 20 61 6c 6c 6f 77 73 20 61 20 64 62 20 70 6f 69   allows a db poi
8680: 6e 74 65 72 20 74 68 61 74 20 66 61 69 6c 65 64  nter that failed
8690: 20 74 6f 0a 2a 2a 20 6f 70 65 6e 20 70 72 6f 70   to.** open prop
86a0: 65 72 6c 79 20 61 6e 64 20 69 73 20 6e 6f 74 20  erly and is not 
86b0: 66 69 74 20 66 6f 72 20 67 65 6e 65 72 61 6c 20  fit for general 
86c0: 75 73 65 20 62 75 74 20 77 68 69 63 68 20 63 61  use but which ca
86d0: 6e 20 62 65 0a 2a 2a 20 75 73 65 64 20 61 73 20  n be.** used as 
86e0: 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  an argument to s
86f0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
8700: 6f 72 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  or sqlite3_close
8710: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
8720: 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
8730: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
8740: 75 33 32 20 6d 61 67 69 63 3b 0a 20 20 69 66 28  u32 magic;.  if(
8750: 20 64 62 3d 3d 30 20 29 7b 0a 20 20 20 20 6c 6f   db==0 ){.    lo
8760: 67 42 61 64 43 6f 6e 6e 65 63 74 69 6f 6e 28 22  gBadConnection("
8770: 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 72 65 74 75  NULL");.    retu
8780: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 6d 61 67 69  rn 0;.  }.  magi
8790: 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a 20  c = db->magic;. 
87a0: 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c 49   if( magic!=SQLI
87b0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29 7b  TE_MAGIC_OPEN ){
87c0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
87d0: 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
87e0: 72 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 20  rOk(db) ){.     
87f0: 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
8800: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
8810: 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  Log!=0 );.      
8820: 6c 6f 67 42 61 64 43 6f 6e 6e 65 63 74 69 6f 6e  logBadConnection
8830: 28 22 75 6e 6f 70 65 6e 65 64 22 29 3b 0a 20 20  ("unopened");.  
8840: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30    }.    return 0
8850: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
8860: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 7d 0a 69  eturn 1;.  }.}.i
8870: 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
8880: 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
8890: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 75 33  lite3 *db){.  u3
88a0: 32 20 6d 61 67 69 63 3b 0a 20 20 6d 61 67 69 63  2 magic;.  magic
88b0: 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a 20 20   = db->magic;.  
88c0: 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c 49 54  if( magic!=SQLIT
88d0: 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 26 26 0a  E_MAGIC_SICK &&.
88e0: 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53 51 4c        magic!=SQL
88f0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 26  ITE_MAGIC_OPEN &
8900: 26 0a 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53  &.      magic!=S
8910: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
8920: 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65   ){.    testcase
8930: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
8940: 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
8950: 0a 20 20 20 20 6c 6f 67 42 61 64 43 6f 6e 6e 65  .    logBadConne
8960: 63 74 69 6f 6e 28 22 69 6e 76 61 6c 69 64 22 29  ction("invalid")
8970: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
8980: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
8990: 75 72 6e 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  urn 1;.  }.}../*
89a0: 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 61  .** Attempt to a
89b0: 64 64 2c 20 73 75 62 73 74 72 61 63 74 2c 20 6f  dd, substract, o
89c0: 72 20 6d 75 6c 74 69 70 6c 79 20 74 68 65 20 36  r multiply the 6
89d0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 76 61 6c  4-bit signed val
89e0: 75 65 20 69 42 20 61 67 61 69 6e 73 74 0a 2a 2a  ue iB against.**
89f0: 20 74 68 65 20 6f 74 68 65 72 20 36 34 2d 62 69   the other 64-bi
8a00: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
8a10: 20 61 74 20 2a 70 41 20 61 6e 64 20 73 74 6f 72   at *pA and stor
8a20: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
8a30: 2a 70 41 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 30  *pA..** Return 0
8a40: 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 20 4f 72   on success.  Or
8a50: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
8a60: 6e 20 77 6f 75 6c 64 20 68 61 76 65 20 72 65 73  n would have res
8a70: 75 6c 74 65 64 20 69 6e 20 61 6e 0a 2a 2a 20 6f  ulted in an.** o
8a80: 76 65 72 66 6c 6f 77 2c 20 6c 65 61 76 65 20 2a  verflow, leave *
8a90: 70 41 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  pA unchanged and
8aa0: 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 69 6e   return 1..*/.in
8ab0: 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
8ac0: 34 28 69 36 34 20 2a 70 41 2c 20 69 36 34 20 69  4(i64 *pA, i64 i
8ad0: 42 29 7b 0a 23 69 66 20 47 43 43 5f 56 45 52 53  B){.#if GCC_VERS
8ae0: 49 4f 4e 3e 3d 35 30 30 34 30 30 30 20 26 26 20  ION>=5004000 && 
8af0: 21 64 65 66 69 6e 65 64 28 5f 5f 49 4e 54 45 4c  !defined(__INTEL
8b00: 5f 43 4f 4d 50 49 4c 45 52 29 0a 20 20 72 65 74  _COMPILER).  ret
8b10: 75 72 6e 20 5f 5f 62 75 69 6c 74 69 6e 5f 61 64  urn __builtin_ad
8b20: 64 5f 6f 76 65 72 66 6c 6f 77 28 2a 70 41 2c 20  d_overflow(*pA, 
8b30: 69 42 2c 20 70 41 29 3b 0a 23 65 6c 73 65 0a 20  iB, pA);.#else. 
8b40: 20 69 36 34 20 69 41 20 3d 20 2a 70 41 3b 0a 20   i64 iA = *pA;. 
8b50: 20 74 65 73 74 63 61 73 65 28 20 69 41 3d 3d 30   testcase( iA==0
8b60: 20 29 3b 20 74 65 73 74 63 61 73 65 28 20 69 41   ); testcase( iA
8b70: 3d 3d 31 20 29 3b 0a 20 20 74 65 73 74 63 61 73  ==1 );.  testcas
8b80: 65 28 20 69 42 3d 3d 2d 31 20 29 3b 20 74 65 73  e( iB==-1 ); tes
8b90: 74 63 61 73 65 28 20 69 42 3d 3d 30 20 29 3b 0a  tcase( iB==0 );.
8ba0: 20 20 69 66 28 20 69 42 3e 3d 30 20 29 7b 0a 20    if( iB>=0 ){. 
8bb0: 20 20 20 74 65 73 74 63 61 73 65 28 20 69 41 3e     testcase( iA>
8bc0: 30 20 26 26 20 4c 41 52 47 45 53 54 5f 49 4e 54  0 && LARGEST_INT
8bd0: 36 34 20 2d 20 69 41 20 3d 3d 20 69 42 20 29 3b  64 - iA == iB );
8be0: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 69  .    testcase( i
8bf0: 41 3e 30 20 26 26 20 4c 41 52 47 45 53 54 5f 49  A>0 && LARGEST_I
8c00: 4e 54 36 34 20 2d 20 69 41 20 3d 3d 20 69 42 20  NT64 - iA == iB 
8c10: 2d 20 31 20 29 3b 0a 20 20 20 20 69 66 28 20 69  - 1 );.    if( i
8c20: 41 3e 30 20 26 26 20 4c 41 52 47 45 53 54 5f 49  A>0 && LARGEST_I
8c30: 4e 54 36 34 20 2d 20 69 41 20 3c 20 69 42 20 29  NT64 - iA < iB )
8c40: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c   return 1;.  }el
8c50: 73 65 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65  se{.    testcase
8c60: 28 20 69 41 3c 30 20 26 26 20 2d 28 69 41 20 2b  ( iA<0 && -(iA +
8c70: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 20   LARGEST_INT64) 
8c80: 3d 3d 20 69 42 20 2b 20 31 20 29 3b 0a 20 20 20  == iB + 1 );.   
8c90: 20 74 65 73 74 63 61 73 65 28 20 69 41 3c 30 20   testcase( iA<0 
8ca0: 26 26 20 2d 28 69 41 20 2b 20 4c 41 52 47 45 53  && -(iA + LARGES
8cb0: 54 5f 49 4e 54 36 34 29 20 3d 3d 20 69 42 20 2b  T_INT64) == iB +
8cc0: 20 32 20 29 3b 0a 20 20 20 20 69 66 28 20 69 41   2 );.    if( iA
8cd0: 3c 30 20 26 26 20 2d 28 69 41 20 2b 20 4c 41 52  <0 && -(iA + LAR
8ce0: 47 45 53 54 5f 49 4e 54 36 34 29 20 3e 20 69 42  GEST_INT64) > iB
8cf0: 20 2b 20 31 20 29 20 72 65 74 75 72 6e 20 31 3b   + 1 ) return 1;
8d00: 0a 20 20 7d 0a 20 20 2a 70 41 20 2b 3d 20 69 42  .  }.  *pA += iB
8d10: 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 20 0a 23  ;.  return 0; .#
8d20: 65 6e 64 69 66 0a 7d 0a 69 6e 74 20 73 71 6c 69  endif.}.int sqli
8d30: 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 20  te3SubInt64(i64 
8d40: 2a 70 41 2c 20 69 36 34 20 69 42 29 7b 0a 23 69  *pA, i64 iB){.#i
8d50: 66 20 47 43 43 5f 56 45 52 53 49 4f 4e 3e 3d 35  f GCC_VERSION>=5
8d60: 30 30 34 30 30 30 20 26 26 20 21 64 65 66 69 6e  004000 && !defin
8d70: 65 64 28 5f 5f 49 4e 54 45 4c 5f 43 4f 4d 50 49  ed(__INTEL_COMPI
8d80: 4c 45 52 29 0a 20 20 72 65 74 75 72 6e 20 5f 5f  LER).  return __
8d90: 62 75 69 6c 74 69 6e 5f 73 75 62 5f 6f 76 65 72  builtin_sub_over
8da0: 66 6c 6f 77 28 2a 70 41 2c 20 69 42 2c 20 70 41  flow(*pA, iB, pA
8db0: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 65 73 74 63  );.#else.  testc
8dc0: 61 73 65 28 20 69 42 3d 3d 53 4d 41 4c 4c 45 53  ase( iB==SMALLES
8dd0: 54 5f 49 4e 54 36 34 2b 31 20 29 3b 0a 20 20 69  T_INT64+1 );.  i
8de0: 66 28 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f  f( iB==SMALLEST_
8df0: 49 4e 54 36 34 20 29 7b 0a 20 20 20 20 74 65 73  INT64 ){.    tes
8e00: 74 63 61 73 65 28 20 28 2a 70 41 29 3d 3d 28 2d  tcase( (*pA)==(-
8e10: 31 29 20 29 3b 20 74 65 73 74 63 61 73 65 28 20  1) ); testcase( 
8e20: 28 2a 70 41 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (*pA)==0 );.    
8e30: 69 66 28 20 28 2a 70 41 29 3e 3d 30 20 29 20 72  if( (*pA)>=0 ) r
8e40: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 2a 70 41  eturn 1;.    *pA
8e50: 20 2d 3d 20 69 42 3b 0a 20 20 20 20 72 65 74 75   -= iB;.    retu
8e60: 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 0;.  }else{. 
8e70: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
8e80: 33 41 64 64 49 6e 74 36 34 28 70 41 2c 20 2d 69  3AddInt64(pA, -i
8e90: 42 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 7d  B);.  }.#endif.}
8ea0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
8eb0: 6e 74 36 34 28 69 36 34 20 2a 70 41 2c 20 69 36  nt64(i64 *pA, i6
8ec0: 34 20 69 42 29 7b 0a 23 69 66 20 47 43 43 5f 56  4 iB){.#if GCC_V
8ed0: 45 52 53 49 4f 4e 3e 3d 35 30 30 34 30 30 30 20  ERSION>=5004000 
8ee0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 49 4e  && !defined(__IN
8ef0: 54 45 4c 5f 43 4f 4d 50 49 4c 45 52 29 0a 20 20  TEL_COMPILER).  
8f00: 72 65 74 75 72 6e 20 5f 5f 62 75 69 6c 74 69 6e  return __builtin
8f10: 5f 6d 75 6c 5f 6f 76 65 72 66 6c 6f 77 28 2a 70  _mul_overflow(*p
8f20: 41 2c 20 69 42 2c 20 70 41 29 3b 0a 23 65 6c 73  A, iB, pA);.#els
8f30: 65 0a 20 20 69 36 34 20 69 41 20 3d 20 2a 70 41  e.  i64 iA = *pA
8f40: 3b 0a 20 20 69 66 28 20 69 42 3e 30 20 29 7b 0a  ;.  if( iB>0 ){.
8f50: 20 20 20 20 69 66 28 20 69 41 3e 4c 41 52 47 45      if( iA>LARGE
8f60: 53 54 5f 49 4e 54 36 34 2f 69 42 20 29 20 72 65  ST_INT64/iB ) re
8f70: 74 75 72 6e 20 31 3b 0a 20 20 20 20 69 66 28 20  turn 1;.    if( 
8f80: 69 41 3c 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  iA<SMALLEST_INT6
8f90: 34 2f 69 42 20 29 20 72 65 74 75 72 6e 20 31 3b  4/iB ) return 1;
8fa0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 3c  .  }else if( iB<
8fb0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 69 41 3e  0 ){.    if( iA>
8fc0: 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69  0 ){.      if( i
8fd0: 42 3c 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  B<SMALLEST_INT64
8fe0: 2f 69 41 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  /iA ) return 1;.
8ff0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 41      }else if( iA
9000: 3c 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  <0 ){.      if( 
9010: 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  iB==SMALLEST_INT
9020: 36 34 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  64 ) return 1;. 
9030: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 53 4d 41       if( iA==SMA
9040: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 72 65  LLEST_INT64 ) re
9050: 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 69 66  turn 1;.      if
9060: 28 20 2d 69 41 3e 4c 41 52 47 45 53 54 5f 49 4e  ( -iA>LARGEST_IN
9070: 54 36 34 2f 2d 69 42 20 29 20 72 65 74 75 72 6e  T64/-iB ) return
9080: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
9090: 2a 70 41 20 3d 20 69 41 2a 69 42 3b 0a 20 20 72  *pA = iA*iB;.  r
90a0: 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a  eturn 0;.#endif.
90b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  }../*.** Compute
90c0: 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
90d0: 6c 75 65 20 6f 66 20 61 20 33 32 2d 62 69 74 20  lue of a 32-bit 
90e0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
90f0: 6f 66 20 70 6f 73 73 69 62 6c 65 2e 20 20 4f 72  of possible.  Or
9100: 20 0a 2a 2a 20 69 66 20 74 68 65 20 69 6e 74 65   .** if the inte
9110: 67 65 72 20 68 61 73 20 61 20 76 61 6c 75 65 20  ger has a value 
9120: 6f 66 20 2d 32 31 34 37 34 38 33 36 34 38 2c 20  of -2147483648, 
9130: 72 65 74 75 72 6e 20 2b 32 31 34 37 34 38 33 36  return +21474836
9140: 34 37 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  47.*/.int sqlite
9150: 33 41 62 73 49 6e 74 33 32 28 69 6e 74 20 78 29  3AbsInt32(int x)
9160: 7b 0a 20 20 69 66 28 20 78 3e 3d 30 20 29 20 72  {.  if( x>=0 ) r
9170: 65 74 75 72 6e 20 78 3b 0a 20 20 69 66 28 20 78  eturn x;.  if( x
9180: 3d 3d 28 69 6e 74 29 30 78 38 30 30 30 30 30 30  ==(int)0x8000000
9190: 30 20 29 20 72 65 74 75 72 6e 20 30 78 37 66 66  0 ) return 0x7ff
91a0: 66 66 66 66 66 3b 0a 20 20 72 65 74 75 72 6e 20  fffff;.  return 
91b0: 2d 78 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  -x;.}..#ifdef SQ
91c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
91d0: 4e 41 4d 45 53 0a 2f 2a 0a 2a 2a 20 49 66 20 53  NAMES./*.** If S
91e0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
91f0: 5f 4e 41 4d 45 53 20 69 73 20 73 65 74 20 61 74  _NAMES is set at
9200: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 61 6e   compile-time an
9210: 64 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  d if the databas
9220: 65 0a 2a 2a 20 66 69 6c 65 6e 61 6d 65 20 69 6e  e.** filename in
9230: 20 7a 42 61 73 65 46 69 6c 65 6e 61 6d 65 20 69   zBaseFilename i
9240: 73 20 61 20 55 52 49 20 77 69 74 68 20 74 68 65  s a URI with the
9250: 20 22 38 5f 33 5f 6e 61 6d 65 73 3d 31 22 20 70   "8_3_names=1" p
9260: 61 72 61 6d 65 74 65 72 20 61 6e 64 0a 2a 2a 20  arameter and.** 
9270: 69 66 20 66 69 6c 65 6e 61 6d 65 20 69 6e 20 7a  if filename in z
9280: 5b 5d 20 68 61 73 20 61 20 73 75 66 66 69 78 20  [] has a suffix 
9290: 28 61 2e 6b 2e 61 2e 20 22 65 78 74 65 6e 73 69  (a.k.a. "extensi
92a0: 6f 6e 22 29 20 74 68 61 74 20 69 73 20 6c 6f 6e  on") that is lon
92b0: 67 65 72 20 74 68 61 6e 0a 2a 2a 20 74 68 72 65  ger than.** thre
92c0: 65 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68  e characters, th
92d0: 65 6e 20 73 68 6f 72 74 65 6e 20 74 68 65 20 73  en shorten the s
92e0: 75 66 66 69 78 20 6f 6e 20 7a 5b 5d 20 74 6f 20  uffix on z[] to 
92f0: 62 65 20 74 68 65 20 6c 61 73 74 20 74 68 72 65  be the last thre
9300: 65 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20  e.** characters 
9310: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  of the original 
9320: 73 75 66 66 69 78 2e 0a 2a 2a 0a 2a 2a 20 49 66  suffix..**.** If
9330: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
9340: 5f 33 5f 4e 41 4d 45 53 20 69 73 20 73 65 74 20  _3_NAMES is set 
9350: 74 6f 20 32 20 61 74 20 63 6f 6d 70 69 6c 65 2d  to 2 at compile-
9360: 74 69 6d 65 2c 20 74 68 65 6e 20 61 6c 77 61 79  time, then alway
9370: 73 0a 2a 2a 20 64 6f 20 74 68 65 20 73 75 66 66  s.** do the suff
9380: 69 78 20 73 68 6f 72 74 65 6e 69 6e 67 20 72 65  ix shortening re
9390: 67 61 72 64 6c 65 73 73 20 6f 66 20 55 52 49 20  gardless of URI 
93a0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2a 0a 2a 2a  parameter..**.**
93b0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
93c0: 20 20 20 20 20 74 65 73 74 2e 64 62 2d 6a 6f 75       test.db-jou
93d0: 72 6e 61 6c 20 20 20 20 3d 3e 20 20 20 74 65 73  rnal    =>   tes
93e0: 74 2e 6e 61 6c 0a 2a 2a 20 20 20 20 20 74 65 73  t.nal.**     tes
93f0: 74 2e 64 62 2d 77 61 6c 20 20 20 20 20 20 20 20  t.db-wal        
9400: 3d 3e 20 20 20 74 65 73 74 2e 77 61 6c 0a 2a 2a  =>   test.wal.**
9410: 20 20 20 20 20 74 65 73 74 2e 64 62 2d 73 68 6d       test.db-shm
9420: 20 20 20 20 20 20 20 20 3d 3e 20 20 20 74 65 73          =>   tes
9430: 74 2e 73 68 6d 0a 2a 2a 20 20 20 20 20 74 65 73  t.shm.**     tes
9440: 74 2e 64 62 2d 6d 6a 37 66 33 33 31 39 66 61 20  t.db-mj7f3319fa 
9450: 3d 3e 20 20 20 74 65 73 74 2e 39 66 61 0a 2a 2f  =>   test.9fa.*/
9460: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
9470: 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
9480: 68 61 72 20 2a 7a 42 61 73 65 46 69 6c 65 6e 61  har *zBaseFilena
9490: 6d 65 2c 20 63 68 61 72 20 2a 7a 29 7b 0a 23 69  me, char *z){.#i
94a0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
94b0: 38 5f 33 5f 4e 41 4d 45 53 3c 32 0a 20 20 69 66  8_3_NAMES<2.  if
94c0: 28 20 73 71 6c 69 74 65 33 5f 75 72 69 5f 62 6f  ( sqlite3_uri_bo
94d0: 6f 6c 65 61 6e 28 7a 42 61 73 65 46 69 6c 65 6e  olean(zBaseFilen
94e0: 61 6d 65 2c 20 22 38 5f 33 5f 6e 61 6d 65 73 22  ame, "8_3_names"
94f0: 2c 20 30 29 20 29 0a 23 65 6e 64 69 66 0a 20 20  , 0) ).#endif.  
9500: 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 73 7a 3b  {.    int i, sz;
9510: 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65  .    sz = sqlite
9520: 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20  3Strlen30(z);.  
9530: 20 20 66 6f 72 28 69 3d 73 7a 2d 31 3b 20 69 3e    for(i=sz-1; i>
9540: 30 20 26 26 20 7a 5b 69 5d 21 3d 27 2f 27 20 26  0 && z[i]!='/' &
9550: 26 20 7a 5b 69 5d 21 3d 27 2e 27 3b 20 69 2d 2d  & z[i]!='.'; i--
9560: 29 7b 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d  ){}.    if( z[i]
9570: 3d 3d 27 2e 27 20 26 26 20 41 4c 57 41 59 53 28  =='.' && ALWAYS(
9580: 73 7a 3e 69 2b 34 29 20 29 20 6d 65 6d 6d 6f 76  sz>i+4) ) memmov
9590: 65 28 26 7a 5b 69 2b 31 5d 2c 20 26 7a 5b 73 7a  e(&z[i+1], &z[sz
95a0: 2d 33 5d 2c 20 34 29 3b 0a 20 20 7d 0a 7d 0a 23  -3], 4);.  }.}.#
95b0: 65 6e 64 69 66 0a 0a 2f 2a 20 0a 2a 2a 20 46 69  endif../* .** Fi
95c0: 6e 64 20 28 61 6e 20 61 70 70 72 6f 78 69 6d 61  nd (an approxima
95d0: 74 65 29 20 73 75 6d 20 6f 66 20 74 77 6f 20 4c  te) sum of two L
95e0: 6f 67 45 73 74 20 76 61 6c 75 65 73 2e 20 20 54  ogEst values.  T
95f0: 68 69 73 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  his computation 
9600: 69 73 0a 2a 2a 20 6e 6f 74 20 61 20 73 69 6d 70  is.** not a simp
9610: 6c 65 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 20  le "+" operator 
9620: 62 65 63 61 75 73 65 20 4c 6f 67 45 73 74 20 69  because LogEst i
9630: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 6c 6f  s stored as a lo
9640: 67 61 72 69 74 68 6d 69 63 0a 2a 2a 20 76 61 6c  garithmic.** val
9650: 75 65 2e 0a 2a 2a 20 0a 2a 2f 0a 4c 6f 67 45 73  ue..** .*/.LogEs
9660: 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
9670: 64 64 28 4c 6f 67 45 73 74 20 61 2c 20 4c 6f 67  dd(LogEst a, Log
9680: 45 73 74 20 62 29 7b 0a 20 20 73 74 61 74 69 63  Est b){.  static
9690: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
96a0: 63 68 61 72 20 78 5b 5d 20 3d 20 7b 0a 20 20 20  char x[] = {.   
96b0: 20 20 31 30 2c 20 31 30 2c 20 20 20 20 20 20 20    10, 10,       
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 20 2f 2a 20 30 2c 31 20 2a 2f 0a 20 20 20 20    /* 0,1 */.    
96e0: 20 20 39 2c 20 39 2c 20 20 20 20 20 20 20 20 20    9, 9,         
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9700: 20 2f 2a 20 32 2c 33 20 2a 2f 0a 20 20 20 20 20   /* 2,3 */.     
9710: 20 38 2c 20 38 2c 20 20 20 20 20 20 20 20 20 20   8, 8,          
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9730: 2f 2a 20 34 2c 35 20 2a 2f 0a 20 20 20 20 20 20  /* 4,5 */.      
9740: 37 2c 20 37 2c 20 37 2c 20 20 20 20 20 20 20 20  7, 7, 7,        
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9760: 2a 20 36 2c 37 2c 38 20 2a 2f 0a 20 20 20 20 20  * 6,7,8 */.     
9770: 20 36 2c 20 36 2c 20 36 2c 20 20 20 20 20 20 20   6, 6, 6,       
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9790: 2f 2a 20 39 2c 31 30 2c 31 31 20 2a 2f 0a 20 20  /* 9,10,11 */.  
97a0: 20 20 20 20 35 2c 20 35 2c 20 35 2c 20 20 20 20      5, 5, 5,    
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 20 20 20 2f 2a 20 31 32 2d 31 34 20 2a 2f 0a 20     /* 12-14 */. 
97d0: 20 20 20 20 20 34 2c 20 34 2c 20 34 2c 20 34 2c       4, 4, 4, 4,
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 20 20 2f 2a 20 31 35 2d 31 38 20 2a 2f 0a      /* 15-18 */.
9800: 20 20 20 20 20 20 33 2c 20 33 2c 20 33 2c 20 33        3, 3, 3, 3
9810: 2c 20 33 2c 20 33 2c 20 20 20 20 20 20 20 20 20  , 3, 3,         
9820: 20 20 20 20 20 2f 2a 20 31 39 2d 32 34 20 2a 2f       /* 19-24 */
9830: 0a 20 20 20 20 20 20 32 2c 20 32 2c 20 32 2c 20  .      2, 2, 2, 
9840: 32 2c 20 32 2c 20 32 2c 20 32 2c 20 20 20 20 20  2, 2, 2, 2,     
9850: 20 20 20 20 20 20 2f 2a 20 32 35 2d 33 31 20 2a        /* 25-31 *
9860: 2f 0a 20 20 7d 3b 0a 20 20 69 66 28 20 61 3e 3d  /.  };.  if( a>=
9870: 62 20 29 7b 0a 20 20 20 20 69 66 28 20 61 3e 62  b ){.    if( a>b
9880: 2b 34 39 20 29 20 72 65 74 75 72 6e 20 61 3b 0a  +49 ) return a;.
9890: 20 20 20 20 69 66 28 20 61 3e 62 2b 33 31 20 29      if( a>b+31 )
98a0: 20 72 65 74 75 72 6e 20 61 2b 31 3b 0a 20 20 20   return a+1;.   
98b0: 20 72 65 74 75 72 6e 20 61 2b 78 5b 61 2d 62 5d   return a+x[a-b]
98c0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
98d0: 66 28 20 62 3e 61 2b 34 39 20 29 20 72 65 74 75  f( b>a+49 ) retu
98e0: 72 6e 20 62 3b 0a 20 20 20 20 69 66 28 20 62 3e  rn b;.    if( b>
98f0: 61 2b 33 31 20 29 20 72 65 74 75 72 6e 20 62 2b  a+31 ) return b+
9900: 31 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 62 2b  1;.    return b+
9910: 78 5b 62 2d 61 5d 3b 0a 20 20 7d 0a 7d 0a 0a 2f  x[b-a];.  }.}../
9920: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20  *.** Convert an 
9930: 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 20 4c  integer into a L
9940: 6f 67 45 73 74 2e 20 20 49 6e 20 6f 74 68 65 72  ogEst.  In other
9950: 20 77 6f 72 64 73 2c 20 63 6f 6d 70 75 74 65 20   words, compute 
9960: 61 6e 0a 2a 2a 20 61 70 70 72 6f 78 69 6d 61 74  an.** approximat
9970: 69 6f 6e 20 66 6f 72 20 31 30 2a 6c 6f 67 32 28  ion for 10*log2(
9980: 78 29 2e 0a 2a 2f 0a 4c 6f 67 45 73 74 20 73 71  x)..*/.LogEst sq
9990: 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 20  lite3LogEst(u64 
99a0: 78 29 7b 0a 20 20 73 74 61 74 69 63 20 4c 6f 67  x){.  static Log
99b0: 45 73 74 20 61 5b 5d 20 3d 20 7b 20 30 2c 20 32  Est a[] = { 0, 2
99c0: 2c 20 33 2c 20 35 2c 20 36 2c 20 37 2c 20 38 2c  , 3, 5, 6, 7, 8,
99d0: 20 39 20 7d 3b 0a 20 20 4c 6f 67 45 73 74 20 79   9 };.  LogEst y
99e0: 20 3d 20 34 30 3b 0a 20 20 69 66 28 20 78 3c 38   = 40;.  if( x<8
99f0: 20 29 7b 0a 20 20 20 20 69 66 28 20 78 3c 32 20   ){.    if( x<2 
9a00: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
9a10: 77 68 69 6c 65 28 20 78 3c 38 20 29 7b 20 20 79  while( x<8 ){  y
9a20: 20 2d 3d 20 31 30 3b 20 78 20 3c 3c 3d 20 31 3b   -= 10; x <<= 1;
9a30: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 20   }.  }else{.#if 
9a40: 47 43 43 5f 56 45 52 53 49 4f 4e 3e 3d 35 30 30  GCC_VERSION>=500
9a50: 34 30 30 30 0a 20 20 20 20 69 6e 74 20 69 20 3d  4000.    int i =
9a60: 20 36 30 20 2d 20 5f 5f 62 75 69 6c 74 69 6e 5f   60 - __builtin_
9a70: 63 6c 7a 6c 6c 28 78 29 3b 0a 20 20 20 20 79 20  clzll(x);.    y 
9a80: 2b 3d 20 69 2a 31 30 3b 0a 20 20 20 20 78 20 3e  += i*10;.    x >
9a90: 3e 3d 20 69 3b 0a 23 65 6c 73 65 0a 20 20 20 20  >= i;.#else.    
9aa0: 77 68 69 6c 65 28 20 78 3e 32 35 35 20 29 7b 20  while( x>255 ){ 
9ab0: 79 20 2b 3d 20 34 30 3b 20 78 20 3e 3e 3d 20 34  y += 40; x >>= 4
9ac0: 3b 20 7d 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ; }  /*OPTIMIZAT
9ad0: 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20  ION-IF-TRUE*/.  
9ae0: 20 20 77 68 69 6c 65 28 20 78 3e 31 35 20 29 7b    while( x>15 ){
9af0: 20 20 79 20 2b 3d 20 31 30 3b 20 78 20 3e 3e 3d    y += 10; x >>=
9b00: 20 31 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d   1; }.#endif.  }
9b10: 0a 20 20 72 65 74 75 72 6e 20 61 5b 78 26 37 5d  .  return a[x&7]
9b20: 20 2b 20 79 20 2d 20 31 30 3b 0a 7d 0a 0a 23 69   + y - 10;.}..#i
9b30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9b40: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
9b50: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 64  *.** Convert a d
9b60: 6f 75 62 6c 65 20 69 6e 74 6f 20 61 20 4c 6f 67  ouble into a Log
9b70: 45 73 74 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  Est.** In other 
9b80: 77 6f 72 64 73 2c 20 63 6f 6d 70 75 74 65 20 61  words, compute a
9b90: 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
9ba0: 66 6f 72 20 31 30 2a 6c 6f 67 32 28 78 29 2e 0a  for 10*log2(x)..
9bb0: 2a 2f 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  */.LogEst sqlite
9bc0: 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
9bd0: 65 28 64 6f 75 62 6c 65 20 78 29 7b 0a 20 20 75  e(double x){.  u
9be0: 36 34 20 61 3b 0a 20 20 4c 6f 67 45 73 74 20 65  64 a;.  LogEst e
9bf0: 3b 0a 20 20 61 73 73 65 72 74 28 20 73 69 7a 65  ;.  assert( size
9c00: 6f 66 28 78 29 3d 3d 38 20 26 26 20 73 69 7a 65  of(x)==8 && size
9c10: 6f 66 28 61 29 3d 3d 38 20 29 3b 0a 20 20 69 66  of(a)==8 );.  if
9c20: 28 20 78 3c 3d 31 20 29 20 72 65 74 75 72 6e 20  ( x<=1 ) return 
9c30: 30 3b 0a 20 20 69 66 28 20 78 3c 3d 32 30 30 30  0;.  if( x<=2000
9c40: 30 30 30 30 30 30 20 29 20 72 65 74 75 72 6e 20  000000 ) return 
9c50: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28 75  sqlite3LogEst((u
9c60: 36 34 29 78 29 3b 0a 20 20 6d 65 6d 63 70 79 28  64)x);.  memcpy(
9c70: 26 61 2c 20 26 78 2c 20 38 29 3b 0a 20 20 65 20  &a, &x, 8);.  e 
9c80: 3d 20 28 61 3e 3e 35 32 29 20 2d 20 31 30 32 32  = (a>>52) - 1022
9c90: 3b 0a 20 20 72 65 74 75 72 6e 20 65 2a 31 30 3b  ;.  return e*10;
9ca0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
9cb0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
9cc0: 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 20 64 65  TABLE */..#if de
9cd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
9ce0: 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
9cf0: 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
9d00: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
9d10: 42 4c 45 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  BLE_STAT4) || \.
9d20: 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
9d30: 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
9d40: 41 54 45 44 5f 52 4f 57 53 29 0a 2f 2a 0a 2a 2a  ATED_ROWS)./*.**
9d50: 20 43 6f 6e 76 65 72 74 20 61 20 4c 6f 67 45 73   Convert a LogEs
9d60: 74 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  t into an intege
9d70: 72 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  r..**.** Note th
9d80: 61 74 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  at this routine 
9d90: 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
9da0: 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  n one or more of
9db0: 20 76 61 72 69 6f 75 73 0a 2a 2a 20 6e 6f 6e 2d   various.** non-
9dc0: 73 74 61 6e 64 61 72 64 20 63 6f 6d 70 69 6c 65  standard compile
9dd0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 69 73  -time options is
9de0: 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 75 36 34   enabled..*/.u64
9df0: 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
9e00: 49 6e 74 28 4c 6f 67 45 73 74 20 78 29 7b 0a 20  Int(LogEst x){. 
9e10: 20 75 36 34 20 6e 3b 0a 20 20 6e 20 3d 20 78 25   u64 n;.  n = x%
9e20: 31 30 3b 0a 20 20 78 20 2f 3d 20 31 30 3b 0a 20  10;.  x /= 10;. 
9e30: 20 69 66 28 20 6e 3e 3d 35 20 29 20 6e 20 2d 3d   if( n>=5 ) n -=
9e40: 20 32 3b 0a 20 20 65 6c 73 65 20 69 66 28 20 6e   2;.  else if( n
9e50: 3e 3d 31 20 29 20 6e 20 2d 3d 20 31 3b 0a 23 69  >=1 ) n -= 1;.#i
9e60: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
9e70: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
9e80: 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20  NSTATUS) || \.  
9e90: 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
9ea0: 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
9eb0: 45 44 5f 52 4f 57 53 29 0a 20 20 69 66 28 20 78  ED_ROWS).  if( x
9ec0: 3e 36 30 20 29 20 72 65 74 75 72 6e 20 28 75 36  >60 ) return (u6
9ed0: 34 29 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 3b  4)LARGEST_INT64;
9ee0: 0a 23 65 6c 73 65 0a 20 20 2f 2a 20 49 66 20 6f  .#else.  /* If o
9ef0: 6e 6c 79 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  nly SQLITE_ENABL
9f00: 45 5f 53 54 41 54 34 20 69 73 20 6f 6e 2c 20 74  E_STAT4 is on, t
9f10: 68 65 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  hen the largest 
9f20: 69 6e 70 75 74 0a 20 20 2a 2a 20 70 6f 73 73 69  input.  ** possi
9f30: 62 6c 65 20 74 6f 20 74 68 69 73 20 72 6f 75 74  ble to this rout
9f40: 69 6e 65 20 69 73 20 33 31 30 2c 20 72 65 73 75  ine is 310, resu
9f50: 6c 74 69 6e 67 20 69 6e 20 61 20 6d 61 78 69 6d  lting in a maxim
9f60: 75 6d 20 78 20 6f 66 20 33 31 20 2a 2f 0a 20 20  um x of 31 */.  
9f70: 61 73 73 65 72 74 28 20 78 3c 3d 36 30 20 29 3b  assert( x<=60 );
9f80: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
9f90: 20 78 3e 3d 33 20 3f 20 28 6e 2b 38 29 3c 3c 28   x>=3 ? (n+8)<<(
9fa0: 78 2d 33 29 20 3a 20 28 6e 2b 38 29 3e 3e 28 33  x-3) : (n+8)>>(3
9fb0: 2d 78 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  -x);.}.#endif /*
9fc0: 20 64 65 66 69 6e 65 64 20 53 43 41 4e 53 54 41   defined SCANSTA
9fd0: 54 20 6f 72 20 53 54 41 54 34 20 6f 72 20 45 53  T or STAT4 or ES
9fe0: 54 49 4d 41 54 45 44 5f 52 4f 57 53 20 2a 2f 0a  TIMATED_ROWS */.
9ff0: 0a 2f 2a 0a 2a 2a 20 41 64 64 20 61 20 6e 65 77  ./*.** Add a new
a000: 20 6e 61 6d 65 2f 6e 75 6d 62 65 72 20 70 61 69   name/number pai
a010: 72 20 74 6f 20 61 20 56 4c 69 73 74 2e 20 20 54  r to a VList.  T
a020: 68 69 73 20 6d 69 67 68 74 20 72 65 71 75 69 72  his might requir
a030: 65 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 56 4c  e that the.** VL
a040: 69 73 74 20 6f 62 6a 65 63 74 20 62 65 20 72 65  ist object be re
a050: 61 6c 6c 6f 63 61 74 65 64 2c 20 73 6f 20 72 65  allocated, so re
a060: 74 75 72 6e 20 74 68 65 20 6e 65 77 20 56 4c 69  turn the new VLi
a070: 73 74 2e 20 20 49 66 20 61 6e 20 4f 4f 4d 0a 2a  st.  If an OOM.*
a080: 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  * error occurs, 
a090: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 56 4c 69  the original VLi
a0a0: 73 74 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  st returned and 
a0b0: 74 68 65 0a 2a 2a 20 64 62 2d 3e 6d 61 6c 6c 6f  the.** db->mallo
a0c0: 63 46 61 69 6c 65 64 20 66 6c 61 67 20 69 73 20  cFailed flag is 
a0d0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 4c 69  set..**.** A VLi
a0e0: 73 74 20 69 73 20 72 65 61 6c 6c 79 20 6a 75 73  st is really jus
a0f0: 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e  t an array of in
a100: 74 65 67 65 72 73 2e 20 20 54 6f 20 64 65 73 74  tegers.  To dest
a110: 72 6f 79 20 61 20 56 4c 69 73 74 2c 0a 2a 2a 20  roy a VList,.** 
a120: 73 69 6d 70 6c 79 20 70 61 73 73 20 69 74 20 74  simply pass it t
a130: 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
a140: 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  )..**.** The fir
a150: 73 74 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  st integer is th
a160: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 74 65  e number of inte
a170: 67 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  gers allocated f
a180: 6f 72 20 74 68 65 20 77 68 6f 6c 65 0a 2a 2a 20  or the whole.** 
a190: 56 4c 69 73 74 2e 20 20 54 68 65 20 73 65 63 6f  VList.  The seco
a1a0: 6e 64 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  nd integer is th
a1b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 74 65  e number of inte
a1c0: 67 65 72 73 20 61 63 74 75 61 6c 6c 79 20 75 73  gers actually us
a1d0: 65 64 2e 0a 2a 2a 20 45 61 63 68 20 6e 61 6d 65  ed..** Each name
a1e0: 2f 6e 75 6d 62 65 72 20 70 61 69 72 20 69 73 20  /number pair is 
a1f0: 65 6e 63 6f 64 65 64 20 62 79 20 73 75 62 73 65  encoded by subse
a200: 71 75 65 6e 74 20 67 72 6f 75 70 73 20 6f 66 20  quent groups of 
a210: 33 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 69 6e 74  3 or more.** int
a220: 65 67 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  egers..**.** Eac
a230: 68 20 6e 61 6d 65 2f 6e 75 6d 62 65 72 20 70 61  h name/number pa
a240: 69 72 20 73 74 61 72 74 73 20 77 69 74 68 20 74  ir starts with t
a250: 77 6f 20 69 6e 74 65 67 65 72 73 20 77 68 69 63  wo integers whic
a260: 68 20 61 72 65 20 74 68 65 20 6e 75 6d 65 72 69  h are the numeri
a270: 63 0a 2a 2a 20 76 61 6c 75 65 20 66 6f 72 20 74  c.** value for t
a280: 68 65 20 70 61 69 72 20 61 6e 64 20 74 68 65 20  he pair and the 
a290: 73 69 7a 65 20 6f 66 20 74 68 65 20 6e 61 6d 65  size of the name
a2a0: 2f 6e 75 6d 62 65 72 20 70 61 69 72 2c 20 72 65  /number pair, re
a2b0: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2a 20 54  spectively..** T
a2c0: 68 65 20 74 65 78 74 20 6e 61 6d 65 20 6f 76 65  he text name ove
a2d0: 72 6c 61 79 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  rlays one or mor
a2e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 74 65  e following inte
a2f0: 67 65 72 73 2e 20 20 54 68 65 20 74 65 78 74 20  gers.  The text 
a300: 6e 61 6d 65 0a 2a 2a 20 69 73 20 61 6c 77 61 79  name.** is alway
a310: 73 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65  s zero-terminate
a320: 64 2e 0a 2a 2a 0a 2a 2a 20 43 6f 6e 63 65 70 74  d..**.** Concept
a330: 75 61 6c 6c 79 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ually:.**.**    
a340: 73 74 72 75 63 74 20 56 4c 69 73 74 20 7b 0a 2a  struct VList {.*
a350: 2a 20 20 20 20 20 20 69 6e 74 20 6e 41 6c 6c 6f  *      int nAllo
a360: 63 3b 20 20 20 2f 2f 20 4e 75 6d 62 65 72 20 6f  c;   // Number o
a370: 66 20 61 6c 6c 6f 63 61 74 65 64 20 73 6c 6f 74  f allocated slot
a380: 73 20 0a 2a 2a 20 20 20 20 20 20 69 6e 74 20 6e  s .**      int n
a390: 55 73 65 64 3b 20 20 20 20 2f 2f 20 4e 75 6d 62  Used;    // Numb
a3a0: 65 72 20 6f 66 20 75 73 65 64 20 73 6c 6f 74 73  er of used slots
a3b0: 20 0a 2a 2a 20 20 20 20 20 20 73 74 72 75 63 74   .**      struct
a3c0: 20 56 4c 69 73 74 45 6e 74 72 79 20 7b 0a 2a 2a   VListEntry {.**
a3d0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 56 61 6c          int iVal
a3e0: 75 65 3b 20 20 20 20 2f 2f 20 56 61 6c 75 65 20  ue;    // Value 
a3f0: 66 6f 72 20 74 68 69 73 20 65 6e 74 72 79 0a 2a  for this entry.*
a400: 2a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 53 6c  *        int nSl
a410: 6f 74 3b 20 20 20 20 20 2f 2f 20 53 6c 6f 74 73  ot;     // Slots
a420: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 65 6e   used by this en
a430: 74 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 2f 2f  try.**        //
a440: 20 2e 2e 2e 20 76 61 72 69 61 62 6c 65 20 6e 61   ... variable na
a450: 6d 65 20 67 6f 65 73 20 68 65 72 65 0a 2a 2a 20  me goes here.** 
a460: 20 20 20 20 20 7d 20 61 5b 30 5d 3b 0a 2a 2a 20       } a[0];.** 
a470: 20 20 20 7d 0a 2a 2a 0a 2a 2a 20 44 75 72 69 6e     }.**.** Durin
a480: 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
a490: 6e 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  n, pointers to t
a4a0: 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  he variable name
a4b0: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
a4c0: 56 4c 69 73 74 20 61 72 65 20 74 61 6b 65 6e 2e  VList are taken.
a4d0: 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
a4e0: 65 6e 73 2c 20 6e 41 6c 6c 6f 63 20 69 73 20 73  ens, nAlloc is s
a4f0: 65 74 20 74 6f 20 7a 65 72 6f 20 61 73 20 61 6e  et to zero as an
a500: 20 0a 2a 2a 20 69 6e 64 69 63 61 74 69 6f 6e 20   .** indication 
a510: 74 68 61 74 20 74 68 65 20 56 4c 69 73 74 20 6d  that the VList m
a520: 61 79 20 6e 65 76 65 72 20 61 67 61 69 6e 20 62  ay never again b
a530: 65 20 65 6e 6c 61 72 67 65 64 2c 20 73 69 6e 63  e enlarged, sinc
a540: 65 20 74 68 65 0a 2a 2a 20 61 63 63 6f 6d 70 61  e the.** accompa
a550: 6e 79 69 6e 67 20 72 65 61 6c 6c 6f 63 28 29 20  nying realloc() 
a560: 77 6f 75 6c 64 20 69 6e 76 61 6c 69 64 61 74 65  would invalidate
a570: 20 74 68 65 20 70 6f 69 6e 74 65 72 73 2e 0a 2a   the pointers..*
a580: 2f 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  /.VList *sqlite3
a590: 56 4c 69 73 74 41 64 64 28 0a 20 20 73 71 6c 69  VListAdd(.  sqli
a5a0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
a5b0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
a5c0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73  se connection us
a5d0: 65 64 20 66 6f 72 20 6d 61 6c 6c 6f 63 28 29 20  ed for malloc() 
a5e0: 2a 2f 0a 20 20 56 4c 69 73 74 20 2a 70 49 6e 2c  */.  VList *pIn,
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a600: 68 65 20 69 6e 70 75 74 20 56 4c 69 73 74 2e 20  he input VList. 
a610: 20 4d 69 67 68 74 20 62 65 20 4e 55 4c 4c 20 2a   Might be NULL *
a620: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
a630: 7a 4e 61 6d 65 2c 20 20 20 20 20 2f 2a 20 4e 61  zName,     /* Na
a640: 6d 65 20 6f 66 20 73 79 6d 62 6f 6c 20 74 6f 20  me of symbol to 
a650: 61 64 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  add */.  int nNa
a660: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
a670: 2f 2a 20 42 79 74 65 73 20 6f 66 20 74 65 78 74  /* Bytes of text
a680: 20 69 6e 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 69   in zName */.  i
a690: 6e 74 20 69 56 61 6c 20 20 20 20 20 20 20 20 20  nt iVal         
a6a0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
a6b0: 6f 20 61 73 73 6f 63 69 61 74 65 20 77 69 74 68  o associate with
a6c0: 20 7a 4e 61 6d 65 20 2a 2f 0a 29 7b 0a 20 20 69   zName */.){.  i
a6d0: 6e 74 20 6e 49 6e 74 3b 20 20 20 20 20 20 20 20  nt nInt;        
a6e0: 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20        /* number 
a6f0: 6f 66 20 73 69 7a 65 6f 66 28 69 6e 74 29 20 6f  of sizeof(int) o
a700: 62 6a 65 63 74 73 20 6e 65 65 64 65 64 20 66 6f  bjects needed fo
a710: 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 63 68 61  r zName */.  cha
a720: 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20  r *z;           
a730: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
a740: 6f 20 77 68 65 72 65 20 7a 4e 61 6d 65 20 77 69  o where zName wi
a750: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 2a 2f 0a  ll be stored */.
a760: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
a770: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
a780: 78 20 69 6e 20 70 49 6e 5b 5d 20 77 68 65 72 65  x in pIn[] where
a790: 20 7a 4e 61 6d 65 20 69 73 20 73 74 6f 72 65 64   zName is stored
a7a0: 20 2a 2f 0a 0a 20 20 6e 49 6e 74 20 3d 20 6e 4e   */..  nInt = nN
a7b0: 61 6d 65 2f 34 20 2b 20 33 3b 0a 20 20 61 73 73  ame/4 + 3;.  ass
a7c0: 65 72 74 28 20 70 49 6e 3d 3d 30 20 7c 7c 20 70  ert( pIn==0 || p
a7d0: 49 6e 5b 30 5d 3e 3d 33 20 29 3b 20 20 2f 2a 20  In[0]>=3 );  /* 
a7e0: 56 65 72 69 66 79 20 6f 6b 20 74 6f 20 61 64 64  Verify ok to add
a7f0: 20 6e 65 77 20 65 6c 65 6d 65 6e 74 73 20 2a 2f   new elements */
a800: 0a 20 20 69 66 28 20 70 49 6e 3d 3d 30 20 7c 7c  .  if( pIn==0 ||
a810: 20 70 49 6e 5b 31 5d 2b 6e 49 6e 74 20 3e 20 70   pIn[1]+nInt > p
a820: 49 6e 5b 30 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  In[0] ){.    /* 
a830: 45 6e 6c 61 72 67 65 20 74 68 65 20 61 6c 6c 6f  Enlarge the allo
a840: 63 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 73 71  cation */.    sq
a850: 6c 69 74 65 33 5f 69 6e 74 36 34 20 6e 41 6c 6c  lite3_int64 nAll
a860: 6f 63 20 3d 20 28 70 49 6e 20 3f 20 32 2a 28 73  oc = (pIn ? 2*(s
a870: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 70 49 6e  qlite3_int64)pIn
a880: 5b 30 5d 20 3a 20 31 30 29 20 2b 20 6e 49 6e 74  [0] : 10) + nInt
a890: 3b 0a 20 20 20 20 56 4c 69 73 74 20 2a 70 4f 75  ;.    VList *pOu
a8a0: 74 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61  t = sqlite3DbRea
a8b0: 6c 6c 6f 63 28 64 62 2c 20 70 49 6e 2c 20 6e 41  lloc(db, pIn, nA
a8c0: 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69 6e 74 29  lloc*sizeof(int)
a8d0: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 75 74 3d  );.    if( pOut=
a8e0: 3d 30 20 29 20 72 65 74 75 72 6e 20 70 49 6e 3b  =0 ) return pIn;
a8f0: 0a 20 20 20 20 69 66 28 20 70 49 6e 3d 3d 30 20  .    if( pIn==0 
a900: 29 20 70 4f 75 74 5b 31 5d 20 3d 20 32 3b 0a 20  ) pOut[1] = 2;. 
a910: 20 20 20 70 49 6e 20 3d 20 70 4f 75 74 3b 0a 20     pIn = pOut;. 
a920: 20 20 20 70 49 6e 5b 30 5d 20 3d 20 6e 41 6c 6c     pIn[0] = nAll
a930: 6f 63 3b 0a 20 20 7d 0a 20 20 69 20 3d 20 70 49  oc;.  }.  i = pI
a940: 6e 5b 31 5d 3b 0a 20 20 70 49 6e 5b 69 5d 20 3d  n[1];.  pIn[i] =
a950: 20 69 56 61 6c 3b 0a 20 20 70 49 6e 5b 69 2b 31   iVal;.  pIn[i+1
a960: 5d 20 3d 20 6e 49 6e 74 3b 0a 20 20 7a 20 3d 20  ] = nInt;.  z = 
a970: 28 63 68 61 72 2a 29 26 70 49 6e 5b 69 2b 32 5d  (char*)&pIn[i+2]
a980: 3b 0a 20 20 70 49 6e 5b 31 5d 20 3d 20 69 2b 6e  ;.  pIn[1] = i+n
a990: 49 6e 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Int;.  assert( p
a9a0: 49 6e 5b 31 5d 3c 3d 70 49 6e 5b 30 5d 20 29 3b  In[1]<=pIn[0] );
a9b0: 0a 20 20 6d 65 6d 63 70 79 28 7a 2c 20 7a 4e 61  .  memcpy(z, zNa
a9c0: 6d 65 2c 20 6e 4e 61 6d 65 29 3b 0a 20 20 7a 5b  me, nName);.  z[
a9d0: 6e 4e 61 6d 65 5d 20 3d 20 30 3b 0a 20 20 72 65  nName] = 0;.  re
a9e0: 74 75 72 6e 20 70 49 6e 3b 0a 7d 0a 0a 2f 2a 0a  turn pIn;.}../*.
a9f0: 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  ** Return a poin
aa00: 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
aa10: 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  of a variable in
aa20: 20 74 68 65 20 67 69 76 65 6e 20 56 4c 69 73 74   the given VList
aa30: 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 74 68 65   that.** has the
aa40: 20 76 61 6c 75 65 20 69 56 61 6c 2e 20 20 4f 72   value iVal.  Or
aa50: 20 72 65 74 75 72 6e 20 61 20 4e 55 4c 4c 20 69   return a NULL i
aa60: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75  f there is no su
aa70: 63 68 20 76 61 72 69 61 62 6c 65 20 69 6e 0a 2a  ch variable in.*
aa80: 2a 20 74 68 65 20 6c 69 73 74 0a 2a 2f 0a 63 6f  * the list.*/.co
aa90: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
aaa0: 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
aab0: 56 4c 69 73 74 20 2a 70 49 6e 2c 20 69 6e 74 20  VList *pIn, int 
aac0: 69 56 61 6c 29 7b 0a 20 20 69 6e 74 20 69 2c 20  iVal){.  int i, 
aad0: 6d 78 3b 0a 20 20 69 66 28 20 70 49 6e 3d 3d 30  mx;.  if( pIn==0
aae0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6d   ) return 0;.  m
aaf0: 78 20 3d 20 70 49 6e 5b 31 5d 3b 0a 20 20 69 20  x = pIn[1];.  i 
ab00: 3d 20 32 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69  = 2;.  do{.    i
ab10: 66 28 20 70 49 6e 5b 69 5d 3d 3d 69 56 61 6c 20  f( pIn[i]==iVal 
ab20: 29 20 72 65 74 75 72 6e 20 28 63 68 61 72 2a 29  ) return (char*)
ab30: 26 70 49 6e 5b 69 2b 32 5d 3b 0a 20 20 20 20 69  &pIn[i+2];.    i
ab40: 20 2b 3d 20 70 49 6e 5b 69 2b 31 5d 3b 0a 20 20   += pIn[i+1];.  
ab50: 7d 77 68 69 6c 65 28 20 69 3c 6d 78 20 29 3b 0a  }while( i<mx );.
ab60: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
ab70: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
ab80: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 76 61  number of the va
ab90: 72 69 61 62 6c 65 20 6e 61 6d 65 64 20 7a 4e 61  riable named zNa
aba0: 6d 65 2c 20 69 66 20 69 74 20 69 73 20 69 6e 20  me, if it is in 
abb0: 56 4c 69 73 74 2e 0a 2a 2a 20 6f 72 20 72 65 74  VList..** or ret
abc0: 75 72 6e 20 30 20 69 66 20 74 68 65 72 65 20 69  urn 0 if there i
abd0: 73 20 6e 6f 20 73 75 63 68 20 76 61 72 69 61 62  s no such variab
abe0: 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
abf0: 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d  e3VListNameToNum
ac00: 28 56 4c 69 73 74 20 2a 70 49 6e 2c 20 63 6f 6e  (VList *pIn, con
ac10: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
ac20: 69 6e 74 20 6e 4e 61 6d 65 29 7b 0a 20 20 69 6e  int nName){.  in
ac30: 74 20 69 2c 20 6d 78 3b 0a 20 20 69 66 28 20 70  t i, mx;.  if( p
ac40: 49 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  In==0 ) return 0
ac50: 3b 0a 20 20 6d 78 20 3d 20 70 49 6e 5b 31 5d 3b  ;.  mx = pIn[1];
ac60: 0a 20 20 69 20 3d 20 32 3b 0a 20 20 64 6f 7b 0a  .  i = 2;.  do{.
ac70: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
ac80: 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  z = (const char*
ac90: 29 26 70 49 6e 5b 69 2b 32 5d 3b 0a 20 20 20 20  )&pIn[i+2];.    
aca0: 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 2c 7a 4e  if( strncmp(z,zN
acb0: 61 6d 65 2c 6e 4e 61 6d 65 29 3d 3d 30 20 26 26  ame,nName)==0 &&
acc0: 20 7a 5b 6e 4e 61 6d 65 5d 3d 3d 30 20 29 20 72   z[nName]==0 ) r
acd0: 65 74 75 72 6e 20 70 49 6e 5b 69 5d 3b 0a 20 20  eturn pIn[i];.  
ace0: 20 20 69 20 2b 3d 20 70 49 6e 5b 69 2b 31 5d 3b    i += pIn[i+1];
acf0: 0a 20 20 7d 77 68 69 6c 65 28 20 69 3c 6d 78 20  .  }while( i<mx 
ad00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d  );.  return 0;.}
ad10: 0a                                               .