/ Hex Artifact Content
Login

Artifact 4511559caf83e70a036deb5c56f10ddf35a688fb:


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 2a 20 24  ke that..**.** $
0210: 49 64 3a 20 75 74 69 6c 2e 63 2c 76 20 31 2e 31  Id: util.c,v 1.1
0220: 32 35 20 32 30 30 35 2f 30 31 2f 31 32 20 30 37  25 2005/01/12 07
0230: 3a 31 35 3a 30 36 20 64 61 6e 69 65 6c 6b 31 39  :15:06 danielk19
0240: 37 37 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63  77 Exp $.*/.#inc
0250: 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e  lude "sqliteInt.
0260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
0270: 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  arg.h>.#include 
0280: 3c 63 74 79 70 65 2e 68 3e 0a 0a 23 69 66 20 53  <ctype.h>..#if S
0290: 51 4c 49 54 45 5f 44 45 42 55 47 3e 32 20 26 26  QLITE_DEBUG>2 &&
02a0: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4c 49 42 43   defined(__GLIBC
02b0: 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20 3c 65 78  __).#include <ex
02c0: 65 63 69 6e 66 6f 2e 68 3e 0a 76 6f 69 64 20 70  ecinfo.h>.void p
02d0: 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63 65  rint_stack_trace
02e0: 28 29 7b 0a 20 20 76 6f 69 64 20 2a 62 74 5b 33  (){.  void *bt[3
02f0: 30 5d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  0];.  int i;.  i
0300: 6e 74 20 6e 20 3d 20 62 61 63 6b 74 72 61 63 65  nt n = backtrace
0310: 28 62 74 2c 20 33 30 29 3b 0a 0a 20 20 73 71 6c  (bt, 30);..  sql
0320: 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
0330: 22 53 54 41 43 4b 3a 20 22 29 3b 0a 20 20 66 6f  "STACK: ");.  fo
0340: 72 28 69 3d 30 3b 20 69 3c 6e 3b 69 2b 2b 29 7b  r(i=0; i<n;i++){
0350: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75  .    sqlite3Debu
0360: 67 50 72 69 6e 74 66 28 22 25 70 20 22 2c 20 62  gPrintf("%p ", b
0370: 74 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  t[i]);.  }.  sql
0380: 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
0390: 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23  "\n");.}.#else.#
03a0: 64 65 66 69 6e 65 20 70 72 69 6e 74 5f 73 74 61  define print_sta
03b0: 63 6b 5f 74 72 61 63 65 28 29 0a 23 65 6e 64 69  ck_trace().#endi
03c0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6d 61 6c 6c  f../*.** If mall
03d0: 6f 63 28 29 20 65 76 65 72 20 66 61 69 6c 73 2c  oc() ever fails,
03e0: 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72   this global var
03f0: 69 61 62 6c 65 20 67 65 74 73 20 73 65 74 20 74  iable gets set t
0400: 6f 20 31 2e 0a 2a 2a 20 54 68 69 73 20 63 61 75  o 1..** This cau
0410: 73 65 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ses the library 
0420: 74 6f 20 61 62 6f 72 74 20 61 6e 64 20 6e 65 76  to abort and nev
0430: 65 72 20 61 67 61 69 6e 20 66 75 6e 63 74 69 6f  er again functio
0440: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
0450: 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20  3_malloc_failed 
0460: 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53  = 0;../*.** If S
0470: 51 4c 49 54 45 5f 54 45 53 54 20 69 73 20 64 65  QLITE_TEST is de
0480: 66 69 6e 65 64 2c 20 74 68 65 6e 20 75 73 65 20  fined, then use 
0490: 76 65 72 73 69 6f 6e 73 20 6f 66 20 6d 61 6c 6c  versions of mall
04a0: 6f 63 28 29 20 61 6e 64 0a 2a 2a 20 66 72 65 65  oc() and.** free
04b0: 28 29 20 74 68 61 74 20 74 72 61 63 6b 20 6d 65  () that track me
04c0: 6d 6f 72 79 20 75 73 61 67 65 20 61 6e 64 20 63  mory usage and c
04d0: 68 65 63 6b 20 66 6f 72 20 62 75 66 66 65 72 20  heck for buffer 
04e0: 6f 76 65 72 72 75 6e 73 2e 0a 2a 2f 0a 23 69 66  overruns..*/.#if
04f0: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0500: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 6b 65 65 70 69  ./*.** For keepi
0510: 6e 67 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20  ng track of the 
0520: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
0530: 73 20 61 6e 64 20 66 72 65 65 73 2e 20 20 20 54  s and frees.   T
0540: 68 69 73 0a 2a 2a 20 69 73 20 75 73 65 64 20 74  his.** is used t
0550: 6f 20 63 68 65 63 6b 20 66 6f 72 20 6d 65 6d 6f  o check for memo
0560: 72 79 20 6c 65 61 6b 73 2e 20 20 54 68 65 20 69  ry leaks.  The i
0570: 4d 61 6c 6c 6f 63 46 61 69 6c 20 61 6e 64 20 69  MallocFail and i
0580: 4d 61 6c 6c 6f 63 52 65 73 65 74 0a 2a 2a 20 76  MallocReset.** v
0590: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
05a0: 6f 20 73 69 6d 75 6c 61 74 65 20 6d 61 6c 6c 6f  o simulate mallo
05b0: 63 28 29 20 66 61 69 6c 75 72 65 73 20 64 75 72  c() failures dur
05c0: 69 6e 67 20 74 65 73 74 69 6e 67 20 69 6e 20 0a  ing testing in .
05d0: 2a 2a 20 6f 72 64 65 72 20 74 6f 20 76 65 72 69  ** order to veri
05e0: 66 79 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  fy that the libr
05f0: 61 72 79 20 63 6f 72 72 65 63 74 6c 79 20 68 61  ary correctly ha
0600: 6e 64 6c 65 73 20 61 6e 20 6f 75 74 2d 6f 66 2d  ndles an out-of-
0610: 6d 65 6d 6f 72 79 0a 2a 2a 20 63 6f 6e 64 69 74  memory.** condit
0620: 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ion..*/.int sqli
0630: 74 65 33 5f 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  te3_nMalloc;    
0640: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
0650: 66 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  f sqliteMalloc()
0660: 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e 74 20 73 71   calls */.int sq
0670: 6c 69 74 65 33 5f 6e 46 72 65 65 3b 20 20 20 20  lite3_nFree;    
0680: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
0690: 20 6f 66 20 73 71 6c 69 74 65 46 72 65 65 28 29   of sqliteFree()
06a0: 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e 74 20 73 71   calls */.int sq
06b0: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
06c0: 6c 3b 20 20 20 20 20 2f 2a 20 46 61 69 6c 20 73  l;     /* Fail s
06d0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 66  qliteMalloc() af
06e0: 74 65 72 20 74 68 69 73 20 6d 61 6e 79 20 63 61  ter this many ca
06f0: 6c 6c 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  lls */.int sqlit
0700: 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74 20  e3_iMallocReset 
0710: 3d 20 2d 31 3b 20 2f 2a 20 57 68 65 6e 20 69 4d  = -1; /* When iM
0720: 61 6c 6c 6f 63 46 61 69 6c 20 72 65 61 63 68 65  allocFail reache
0730: 73 20 30 2c 20 73 65 74 20 74 6f 20 74 68 69 73  s 0, set to this
0740: 20 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 44   */.#if SQLITE_D
0750: 45 42 55 47 3e 31 0a 73 74 61 74 69 63 20 69 6e  EBUG>1.static in
0760: 74 20 6d 65 6d 63 6e 74 20 3d 20 30 3b 0a 23 65  t memcnt = 0;.#e
0770: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62  ndif../*.** Numb
0780: 65 72 20 6f 66 20 33 32 2d 62 69 74 20 67 75 61  er of 32-bit gua
0790: 72 64 20 77 6f 72 64 73 0a 2a 2f 0a 23 64 65 66  rd words.*/.#def
07a0: 69 6e 65 20 4e 5f 47 55 41 52 44 20 31 0a 0a 2f  ine N_GUARD 1../
07b0: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65  *.** Allocate ne
07c0: 77 20 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65 74  w memory and set
07d0: 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65   it to zero.  Re
07e0: 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20  turn NULL if.** 
07f0: 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61  no memory is ava
0800: 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 76 6f 69 64 20  ilable..*/.void 
0810: 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28  *sqlite3Malloc_(
0820: 69 6e 74 20 6e 2c 20 69 6e 74 20 62 5a 65 72 6f  int n, int bZero
0830: 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69  , char *zFile, i
0840: 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 76 6f 69 64  nt line){.  void
0850: 20 2a 70 3b 0a 20 20 69 6e 74 20 2a 70 69 3b 0a   *p;.  int *pi;.
0860: 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 69 66    int i, k;.  if
0870: 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f  ( sqlite3_iMallo
0880: 63 46 61 69 6c 3e 3d 30 20 29 7b 0a 20 20 20 20  cFail>=0 ){.    
0890: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
08a0: 61 69 6c 2d 2d 3b 0a 20 20 20 20 69 66 28 20 73  ail--;.    if( s
08b0: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
08c0: 69 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  il==0 ){.      s
08d0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
08e0: 69 6c 65 64 2b 2b 3b 0a 23 69 66 20 53 51 4c 49  iled++;.#if SQLI
08f0: 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 20 20 20  TE_DEBUG>1.     
0900: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
0910: 22 2a 2a 2a 2a 20 66 61 69 6c 65 64 20 74 6f 20  "**** failed to 
0920: 61 6c 6c 6f 63 61 74 65 20 25 64 20 62 79 74 65  allocate %d byte
0930: 73 20 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a 20  s at %s:%d\n",. 
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 2c 20               n, 
0950: 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e  zFile,line);.#en
0960: 64 69 66 0a 20 20 20 20 20 20 73 71 6c 69 74 65  dif.      sqlite
0970: 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20  3_iMallocFail = 
0980: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 52  sqlite3_iMallocR
0990: 65 73 65 74 3b 0a 20 20 20 20 20 20 72 65 74 75  eset;.      retu
09a0: 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rn 0;.    }.  }.
09b0: 20 20 69 66 28 20 6e 3d 3d 30 20 29 20 72 65 74    if( n==0 ) ret
09c0: 75 72 6e 20 30 3b 0a 20 20 6b 20 3d 20 28 6e 2b  urn 0;.  k = (n+
09d0: 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73  sizeof(int)-1)/s
09e0: 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 70 69  izeof(int);.  pi
09f0: 20 3d 20 6d 61 6c 6c 6f 63 28 20 28 4e 5f 47 55   = malloc( (N_GU
0a00: 41 52 44 2a 32 2b 31 2b 6b 29 2a 73 69 7a 65 6f  ARD*2+1+k)*sizeo
0a10: 66 28 69 6e 74 29 29 3b 0a 20 20 69 66 28 20 70  f(int));.  if( p
0a20: 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  i==0 ){.    sqli
0a30: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
0a40: 64 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  d++;.    return 
0a50: 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
0a60: 5f 6e 4d 61 6c 6c 6f 63 2b 2b 3b 0a 20 20 66 6f  _nMalloc++;.  fo
0a70: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
0a80: 3b 20 69 2b 2b 29 20 70 69 5b 69 5d 20 3d 20 30  ; i++) pi[i] = 0
0a90: 78 64 65 61 64 31 31 32 32 3b 0a 20 20 70 69 5b  xdead1122;.  pi[
0aa0: 4e 5f 47 55 41 52 44 5d 20 3d 20 6e 3b 0a 20 20  N_GUARD] = n;.  
0ab0: 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41  for(i=0; i<N_GUA
0ac0: 52 44 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 31 2b  RD; i++) pi[k+1+
0ad0: 4e 5f 47 55 41 52 44 2b 69 5d 20 3d 20 30 78 64  N_GUARD+i] = 0xd
0ae0: 65 61 64 33 33 34 34 3b 0a 20 20 70 20 3d 20 26  ead3344;.  p = &
0af0: 70 69 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a 20  pi[N_GUARD+1];. 
0b00: 20 6d 65 6d 73 65 74 28 70 2c 20 62 5a 65 72 6f   memset(p, bZero
0b10: 3d 3d 30 2c 20 6e 29 3b 0a 23 69 66 20 53 51 4c  ==0, n);.#if SQL
0b20: 49 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 70 72  ITE_DEBUG>1.  pr
0b30: 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63 65 28  int_stack_trace(
0b40: 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64  );.  fprintf(std
0b50: 65 72 72 2c 22 25 30 36 64 20 6d 61 6c 6c 6f 63  err,"%06d malloc
0b60: 20 25 64 20 62 79 74 65 73 20 61 74 20 30 78 25   %d bytes at 0x%
0b70: 78 20 66 72 6f 6d 20 25 73 3a 25 64 5c 6e 22 2c  x from %s:%d\n",
0b80: 0a 20 20 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c  .      ++memcnt,
0b90: 20 6e 2c 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c   n, (int)p, zFil
0ba0: 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a  e,line);.#endif.
0bb0: 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f    return p;.}../
0bc0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65  *.** Check to se
0bd0: 65 20 69 66 20 74 68 65 20 67 69 76 65 6e 20 70  e if the given p
0be0: 6f 69 6e 74 65 72 20 77 61 73 20 6f 62 74 61 69  ointer was obtai
0bf0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  ned from sqliteM
0c00: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 61 6e 64 20 69  alloc().** and i
0c10: 73 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20 61  s able to hold a
0c20: 74 20 6c 65 61 73 74 20 4e 20 62 79 74 65 73 2e  t least N bytes.
0c30: 20 20 52 61 69 73 65 20 61 6e 20 65 78 63 65 70    Raise an excep
0c40: 74 69 6f 6e 20 69 66 20 74 68 69 73 0a 2a 2a 20  tion if this.** 
0c50: 69 73 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2e  is not the case.
0c60: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
0c70: 69 6e 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ine is used for 
0c80: 74 65 73 74 69 6e 67 20 70 75 72 70 6f 73 65 73  testing purposes
0c90: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73   only..*/.void s
0ca0: 71 6c 69 74 65 33 43 68 65 63 6b 4d 65 6d 6f 72  qlite3CheckMemor
0cb0: 79 28 76 6f 69 64 20 2a 70 2c 20 69 6e 74 20 4e  y(void *p, int N
0cc0: 29 7b 0a 20 20 69 6e 74 20 2a 70 69 20 3d 20 70  ){.  int *pi = p
0cd0: 3b 0a 20 20 69 6e 74 20 6e 2c 20 69 2c 20 6b 3b  ;.  int n, i, k;
0ce0: 0a 20 20 70 69 20 2d 3d 20 4e 5f 47 55 41 52 44  .  pi -= N_GUARD
0cf0: 2b 31 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  +1;.  for(i=0; i
0d00: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a  <N_GUARD; i++){.
0d10: 20 20 20 20 61 73 73 65 72 74 28 20 70 69 5b 69      assert( pi[i
0d20: 5d 3d 3d 30 78 64 65 61 64 31 31 32 32 20 29 3b  ]==0xdead1122 );
0d30: 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 69 5b 4e 5f  .  }.  n = pi[N_
0d40: 47 55 41 52 44 5d 3b 0a 20 20 61 73 73 65 72 74  GUARD];.  assert
0d50: 28 20 4e 3e 3d 30 20 26 26 20 4e 3c 6e 20 29 3b  ( N>=0 && N<n );
0d60: 0a 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65 6f 66  .  k = (n+sizeof
0d70: 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f 66 28  (int)-1)/sizeof(
0d80: 69 6e 74 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  int);.  for(i=0;
0d90: 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29   i<N_GUARD; i++)
0da0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 69  {.    assert( pi
0db0: 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 3d  [k+N_GUARD+1+i]=
0dc0: 3d 30 78 64 65 61 64 33 33 34 34 20 29 3b 0a 20  =0xdead3344 );. 
0dd0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65   }.}../*.** Free
0de0: 20 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73   memory previous
0df0: 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ly obtained from
0e00: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a   sqliteMalloc().
0e10: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  */.void sqlite3F
0e20: 72 65 65 5f 28 76 6f 69 64 20 2a 70 2c 20 63 68  ree_(void *p, ch
0e30: 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c  ar *zFile, int l
0e40: 69 6e 65 29 7b 0a 20 20 69 66 28 20 70 20 29 7b  ine){.  if( p ){
0e50: 0a 20 20 20 20 69 6e 74 20 2a 70 69 2c 20 69 2c  .    int *pi, i,
0e60: 20 6b 2c 20 6e 3b 0a 20 20 20 20 70 69 20 3d 20   k, n;.    pi = 
0e70: 70 3b 0a 20 20 20 20 70 69 20 2d 3d 20 4e 5f 47  p;.    pi -= N_G
0e80: 55 41 52 44 2b 31 3b 0a 20 20 20 20 73 71 6c 69  UARD+1;.    sqli
0e90: 74 65 33 5f 6e 46 72 65 65 2b 2b 3b 0a 20 20 20  te3_nFree++;.   
0ea0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55   for(i=0; i<N_GU
0eb0: 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ARD; i++){.     
0ec0: 20 69 66 28 20 70 69 5b 69 5d 21 3d 30 78 64 65   if( pi[i]!=0xde
0ed0: 61 64 31 31 32 32 20 29 7b 0a 20 20 20 20 20 20  ad1122 ){.      
0ee0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0ef0: 2c 22 4c 6f 77 2d 65 6e 64 20 6d 65 6d 6f 72 79  ,"Low-end memory
0f00: 20 63 6f 72 72 75 70 74 69 6f 6e 20 61 74 20 30   corruption at 0
0f10: 78 25 78 5c 6e 22 2c 20 28 69 6e 74 29 70 29 3b  x%x\n", (int)p);
0f20: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b  .        return;
0f30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
0f40: 20 20 20 6e 20 3d 20 70 69 5b 4e 5f 47 55 41 52     n = pi[N_GUAR
0f50: 44 5d 3b 0a 20 20 20 20 6b 20 3d 20 28 6e 2b 73  D];.    k = (n+s
0f60: 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69  izeof(int)-1)/si
0f70: 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 20 20 66  zeof(int);.    f
0f80: 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52  or(i=0; i<N_GUAR
0f90: 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  D; i++){.      i
0fa0: 66 28 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b  f( pi[k+N_GUARD+
0fb0: 31 2b 69 5d 21 3d 30 78 64 65 61 64 33 33 34 34  1+i]!=0xdead3344
0fc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 70 72 69   ){.        fpri
0fd0: 6e 74 66 28 73 74 64 65 72 72 2c 22 48 69 67 68  ntf(stderr,"High
0fe0: 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72 72  -end memory corr
0ff0: 75 70 74 69 6f 6e 20 61 74 20 30 78 25 78 5c 6e  uption at 0x%x\n
1000: 22 2c 20 28 69 6e 74 29 70 29 3b 0a 20 20 20 20  ", (int)p);.    
1010: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20      return;.    
1020: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65    }.    }.    me
1030: 6d 73 65 74 28 70 69 2c 20 30 78 66 66 2c 20 28  mset(pi, 0xff, (
1040: 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b 31 29 2a 73  k+N_GUARD*2+1)*s
1050: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 23 69 66  izeof(int));.#if
1060: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e 31 0a   SQLITE_DEBUG>1.
1070: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
1080: 72 72 2c 22 25 30 36 64 20 66 72 65 65 20 25 64  rr,"%06d free %d
1090: 20 62 79 74 65 73 20 61 74 20 30 78 25 78 20 66   bytes at 0x%x f
10a0: 72 6f 6d 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20  rom %s:%d\n",.  
10b0: 20 20 20 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c         ++memcnt,
10c0: 20 6e 2c 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c   n, (int)p, zFil
10d0: 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a  e,line);.#endif.
10e0: 20 20 20 20 66 72 65 65 28 70 69 29 3b 0a 20 20      free(pi);.  
10f0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a  }.}../*.** Resiz
1100: 65 20 61 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61  e a prior alloca
1110: 74 69 6f 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20  tion.  If p==0, 
1120: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
1130: 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20  e.** works just 
1140: 6c 69 6b 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  like sqliteMallo
1150: 63 28 29 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74  c().  If n==0, t
1160: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
1170: 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  .** works just l
1180: 69 6b 65 20 73 71 6c 69 74 65 46 72 65 65 28 29  ike sqliteFree()
1190: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
11a0: 65 33 52 65 61 6c 6c 6f 63 5f 28 76 6f 69 64 20  e3Realloc_(void 
11b0: 2a 6f 6c 64 50 2c 20 69 6e 74 20 6e 2c 20 63 68  *oldP, int n, ch
11c0: 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c  ar *zFile, int l
11d0: 69 6e 65 29 7b 0a 20 20 69 6e 74 20 2a 6f 6c 64  ine){.  int *old
11e0: 50 69 2c 20 2a 70 69 2c 20 69 2c 20 6b 2c 20 6f  Pi, *pi, i, k, o
11f0: 6c 64 4e 2c 20 6f 6c 64 4b 3b 0a 20 20 76 6f 69  ldN, oldK;.  voi
1200: 64 20 2a 70 3b 0a 20 20 69 66 28 20 6f 6c 64 50  d *p;.  if( oldP
1210: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
1220: 6e 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f  n sqlite3Malloc_
1230: 28 6e 2c 31 2c 7a 46 69 6c 65 2c 6c 69 6e 65 29  (n,1,zFile,line)
1240: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30  ;.  }.  if( n==0
1250: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 46   ){.    sqlite3F
1260: 72 65 65 5f 28 6f 6c 64 50 2c 7a 46 69 6c 65 2c  ree_(oldP,zFile,
1270: 6c 69 6e 65 29 3b 0a 20 20 20 20 72 65 74 75 72  line);.    retur
1280: 6e 20 30 3b 0a 20 20 7d 0a 20 20 6f 6c 64 50 69  n 0;.  }.  oldPi
1290: 20 3d 20 6f 6c 64 50 3b 0a 20 20 6f 6c 64 50 69   = oldP;.  oldPi
12a0: 20 2d 3d 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20   -= N_GUARD+1;. 
12b0: 20 69 66 28 20 6f 6c 64 50 69 5b 30 5d 21 3d 30   if( oldPi[0]!=0
12c0: 78 64 65 61 64 31 31 32 32 20 29 7b 0a 20 20 20  xdead1122 ){.   
12d0: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
12e0: 22 4c 6f 77 2d 65 6e 64 20 6d 65 6d 6f 72 79 20  "Low-end memory 
12f0: 63 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20 72 65  corruption in re
1300: 61 6c 6c 6f 63 20 61 74 20 30 78 25 78 5c 6e 22  alloc at 0x%x\n"
1310: 2c 20 28 69 6e 74 29 6f 6c 64 50 29 3b 0a 20 20  , (int)oldP);.  
1320: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
1330: 20 20 6f 6c 64 4e 20 3d 20 6f 6c 64 50 69 5b 4e    oldN = oldPi[N
1340: 5f 47 55 41 52 44 5d 3b 0a 20 20 6f 6c 64 4b 20  _GUARD];.  oldK 
1350: 3d 20 28 6f 6c 64 4e 2b 73 69 7a 65 6f 66 28 69  = (oldN+sizeof(i
1360: 6e 74 29 2d 31 29 2f 73 69 7a 65 6f 66 28 69 6e  nt)-1)/sizeof(in
1370: 74 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  t);.  for(i=0; i
1380: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a  <N_GUARD; i++){.
1390: 20 20 20 20 69 66 28 20 6f 6c 64 50 69 5b 6f 6c      if( oldPi[ol
13a0: 64 4b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 21  dK+N_GUARD+1+i]!
13b0: 3d 30 78 64 65 61 64 33 33 34 34 20 29 7b 0a 20  =0xdead3344 ){. 
13c0: 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
13d0: 65 72 72 2c 22 48 69 67 68 2d 65 6e 64 20 6d 65  err,"High-end me
13e0: 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 20  mory corruption 
13f0: 69 6e 20 72 65 61 6c 6c 6f 63 20 61 74 20 30 78  in realloc at 0x
1400: 25 78 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %x\n",.         
1410: 20 20 20 20 20 28 69 6e 74 29 6f 6c 64 50 29 3b       (int)oldP);
1420: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
1430: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 6b 20 3d  .    }.  }.  k =
1440: 20 28 6e 20 2b 20 73 69 7a 65 6f 66 28 69 6e 74   (n + sizeof(int
1450: 29 20 2d 20 31 29 2f 73 69 7a 65 6f 66 28 69 6e  ) - 1)/sizeof(in
1460: 74 29 3b 0a 20 20 70 69 20 3d 20 6d 61 6c 6c 6f  t);.  pi = mallo
1470: 63 28 20 28 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b  c( (k+N_GUARD*2+
1480: 31 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 20 29  1)*sizeof(int) )
1490: 3b 0a 20 20 69 66 28 20 70 69 3d 3d 30 20 29 7b  ;.  if( pi==0 ){
14a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c  .    sqlite3_mal
14b0: 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20  loc_failed++;.  
14c0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
14d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47    for(i=0; i<N_G
14e0: 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b 69 5d  UARD; i++) pi[i]
14f0: 20 3d 20 30 78 64 65 61 64 31 31 32 32 3b 0a 20   = 0xdead1122;. 
1500: 20 70 69 5b 4e 5f 47 55 41 52 44 5d 20 3d 20 6e   pi[N_GUARD] = n
1510: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
1520: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b  _GUARD; i++) pi[
1530: 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 20 3d  k+N_GUARD+1+i] =
1540: 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20 20 70   0xdead3344;.  p
1550: 20 3d 20 26 70 69 5b 4e 5f 47 55 41 52 44 2b 31   = &pi[N_GUARD+1
1560: 5d 3b 0a 20 20 6d 65 6d 63 70 79 28 70 2c 20 6f  ];.  memcpy(p, o
1570: 6c 64 50 2c 20 6e 3e 6f 6c 64 4e 20 3f 20 6f 6c  ldP, n>oldN ? ol
1580: 64 4e 20 3a 20 6e 29 3b 0a 20 20 69 66 28 20 6e  dN : n);.  if( n
1590: 3e 6f 6c 64 4e 20 29 7b 0a 20 20 20 20 6d 65 6d  >oldN ){.    mem
15a0: 73 65 74 28 26 28 28 63 68 61 72 2a 29 70 29 5b  set(&((char*)p)[
15b0: 6f 6c 64 4e 5d 2c 20 30 78 35 35 2c 20 6e 2d 6f  oldN], 0x55, n-o
15c0: 6c 64 4e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 73  ldN);.  }.  mems
15d0: 65 74 28 6f 6c 64 50 69 2c 20 30 78 61 62 2c 20  et(oldPi, 0xab, 
15e0: 28 6f 6c 64 4b 2b 4e 5f 47 55 41 52 44 2b 32 29  (oldK+N_GUARD+2)
15f0: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
1600: 20 66 72 65 65 28 6f 6c 64 50 69 29 3b 0a 23 69   free(oldPi);.#i
1610: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e 31  f SQLITE_DEBUG>1
1620: 0a 20 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74  .  print_stack_t
1630: 72 61 63 65 28 29 3b 0a 20 20 66 70 72 69 6e 74  race();.  fprint
1640: 66 28 73 74 64 65 72 72 2c 22 25 30 36 64 20 72  f(stderr,"%06d r
1650: 65 61 6c 6c 6f 63 20 25 64 20 74 6f 20 25 64 20  ealloc %d to %d 
1660: 62 79 74 65 73 20 61 74 20 30 78 25 78 20 74 6f  bytes at 0x%x to
1670: 20 30 78 25 78 20 61 74 20 25 73 3a 25 64 5c 6e   0x%x at %s:%d\n
1680: 22 2c 0a 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c  ",.    ++memcnt,
1690: 20 6f 6c 64 4e 2c 20 6e 2c 20 28 69 6e 74 29 6f   oldN, n, (int)o
16a0: 6c 64 50 2c 20 28 69 6e 74 29 70 2c 20 7a 46 69  ldP, (int)p, zFi
16b0: 6c 65 2c 20 6c 69 6e 65 29 3b 0a 23 65 6e 64 69  le, line);.#endi
16c0: 66 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a  f.  return p;.}.
16d0: 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  ./*.** Make a co
16e0: 70 79 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69  py of a string i
16f0: 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  n memory obtaine
1700: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c  d from sqliteMal
1710: 6c 6f 63 28 29 0a 2a 2f 0a 63 68 61 72 20 2a 73  loc().*/.char *s
1720: 71 6c 69 74 65 33 53 74 72 44 75 70 5f 28 63 6f  qlite3StrDup_(co
1730: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 63 68 61  nst char *z, cha
1740: 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69  r *zFile, int li
1750: 6e 65 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65  ne){.  char *zNe
1760: 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  w;.  if( z==0 ) 
1770: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77  return 0;.  zNew
1780: 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63   = sqlite3Malloc
1790: 5f 28 73 74 72 6c 65 6e 28 7a 29 2b 31 2c 20 30  _(strlen(z)+1, 0
17a0: 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a  , zFile, line);.
17b0: 20 20 69 66 28 20 7a 4e 65 77 20 29 20 73 74 72    if( zNew ) str
17c0: 63 70 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20  cpy(zNew, z);.  
17d0: 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63  return zNew;.}.c
17e0: 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 4e  har *sqlite3StrN
17f0: 44 75 70 5f 28 63 6f 6e 73 74 20 63 68 61 72 20  Dup_(const char 
1800: 2a 7a 2c 20 69 6e 74 20 6e 2c 20 63 68 61 72 20  *z, int n, char 
1810: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
1820: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b  ){.  char *zNew;
1830: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65  .  if( z==0 ) re
1840: 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d  turn 0;.  zNew =
1850: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28   sqlite3Malloc_(
1860: 6e 2b 31 2c 20 30 2c 20 7a 46 69 6c 65 2c 20 6c  n+1, 0, zFile, l
1870: 69 6e 65 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77  ine);.  if( zNew
1880: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a   ){.    memcpy(z
1890: 4e 65 77 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20  New, z, n);.    
18a0: 7a 4e 65 77 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d  zNew[n] = 0;.  }
18b0: 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a  .  return zNew;.
18c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 76 65 72 73 69  }../*.** A versi
18d0: 6f 6e 20 6f 66 20 73 71 6c 69 74 65 46 72 65 65  on of sqliteFree
18e0: 20 74 68 61 74 20 69 73 20 61 6c 77 61 79 73 20   that is always 
18f0: 61 20 66 75 6e 63 74 69 6f 6e 2c 20 6e 6f 74 20  a function, not 
1900: 61 20 6d 61 63 72 6f 2e 0a 2a 2f 0a 76 6f 69 64  a macro..*/.void
1910: 20 73 71 6c 69 74 65 33 46 72 65 65 58 28 76 6f   sqlite3FreeX(vo
1920: 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  id *p){.  sqlite
1930: 46 72 65 65 28 70 29 3b 0a 7d 0a 23 65 6e 64 69  Free(p);.}.#endi
1940: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
1950: 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  G */../*.** The 
1960: 66 6f 6c 6c 6f 77 69 6e 67 20 76 65 72 73 69 6f  following versio
1970: 6e 73 20 6f 66 20 6d 61 6c 6c 6f 63 28 29 20 61  ns of malloc() a
1980: 6e 64 20 66 72 65 65 28 29 20 61 72 65 20 66 6f  nd free() are fo
1990: 72 20 75 73 65 20 69 6e 20 61 0a 2a 2a 20 6e 6f  r use in a.** no
19a0: 72 6d 61 6c 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23  rmal build..*/.#
19b0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
19c0: 54 45 5f 54 45 53 54 29 0a 0a 2f 2a 0a 2a 2a 20  TE_TEST)../*.** 
19d0: 41 6c 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d  Allocate new mem
19e0: 6f 72 79 20 61 6e 64 20 73 65 74 20 69 74 20 74  ory and set it t
19f0: 6f 20 7a 65 72 6f 2e 20 20 52 65 74 75 72 6e 20  o zero.  Return 
1a00: 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65  NULL if.** no me
1a10: 6d 6f 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c  mory is availabl
1a20: 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 73 71 6c  e.  See also sql
1a30: 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 29 2e 0a  iteMallocRaw()..
1a40: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
1a50: 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e 29 7b 0a 20  Malloc(int n){. 
1a60: 20 76 6f 69 64 20 2a 70 3b 0a 20 20 69 66 28 20   void *p;.  if( 
1a70: 28 70 20 3d 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d  (p = malloc(n))=
1a80: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 3e  =0 ){.    if( n>
1a90: 30 20 29 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  0 ) sqlite3_mall
1aa0: 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d  oc_failed++;.  }
1ab0: 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74  else{.    memset
1ac0: 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d 0a 20  (p, 0, n);.  }. 
1ad0: 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a   return p;.}../*
1ae0: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77  .** Allocate new
1af0: 20 6d 65 6d 6f 72 79 20 62 75 74 20 64 6f 20 6e   memory but do n
1b00: 6f 74 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72  ot set it to zer
1b10: 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20  o.  Return NULL 
1b20: 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20  if.** no memory 
1b30: 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53  is available.  S
1b40: 65 65 20 61 6c 73 6f 20 73 71 6c 69 74 65 4d 61  ee also sqliteMa
1b50: 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  lloc()..*/.void 
1b60: 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61  *sqlite3MallocRa
1b70: 77 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64  w(int n){.  void
1b80: 20 2a 70 3b 0a 20 20 69 66 28 20 28 70 20 3d 20   *p;.  if( (p = 
1b90: 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29 7b  malloc(n))==0 ){
1ba0: 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20 73  .    if( n>0 ) s
1bb0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
1bc0: 69 6c 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  iled++;.  }.  re
1bd0: 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn p;.}../*.**
1be0: 20 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72 65   Free memory pre
1bf0: 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
1c00: 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c   from sqliteMall
1c10: 6f 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  oc().*/.void sql
1c20: 69 74 65 33 46 72 65 65 58 28 76 6f 69 64 20 2a  ite3FreeX(void *
1c30: 70 29 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20  p){.  if( p ){. 
1c40: 20 20 20 66 72 65 65 28 70 29 3b 0a 20 20 7d 0a     free(p);.  }.
1c50: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20  }../*.** Resize 
1c60: 61 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61 74 69  a prior allocati
1c70: 6f 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20 74 68  on.  If p==0, th
1c80: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
1c90: 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  ** works just li
1ca0: 6b 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  ke sqliteMalloc(
1cb0: 29 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74 68 65  ).  If n==0, the
1cc0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
1cd0: 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  * works just lik
1ce0: 65 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a  e sqliteFree()..
1cf0: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
1d00: 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 2c  Realloc(void *p,
1d10: 20 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20   int n){.  void 
1d20: 2a 70 32 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20  *p2;.  if( p==0 
1d30: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  ){.    return sq
1d40: 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20  liteMalloc(n);. 
1d50: 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b   }.  if( n==0 ){
1d60: 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28  .    sqliteFree(
1d70: 70 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  p);.    return 0
1d80: 3b 0a 20 20 7d 0a 20 20 70 32 20 3d 20 72 65 61  ;.  }.  p2 = rea
1d90: 6c 6c 6f 63 28 70 2c 20 6e 29 3b 0a 20 20 69 66  lloc(p, n);.  if
1da0: 28 20 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ( p2==0 ){.    s
1db0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
1dc0: 69 6c 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  iled++;.  }.  re
1dd0: 74 75 72 6e 20 70 32 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn p2;.}../*.*
1de0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
1df0: 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d   a string in mem
1e00: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
1e10: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
1e20: 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .*/.char *sqlite
1e30: 33 53 74 72 44 75 70 28 63 6f 6e 73 74 20 63 68  3StrDup(const ch
1e40: 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a  ar *z){.  char *
1e50: 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  zNew;.  if( z==0
1e60: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a   ) return 0;.  z
1e70: 4e 65 77 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c  New = sqliteMall
1e80: 6f 63 52 61 77 28 73 74 72 6c 65 6e 28 7a 29 2b  ocRaw(strlen(z)+
1e90: 31 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29  1);.  if( zNew )
1ea0: 20 73 74 72 63 70 79 28 7a 4e 65 77 2c 20 7a 29   strcpy(zNew, z)
1eb0: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b  ;.  return zNew;
1ec0: 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  .}.char *sqlite3
1ed0: 53 74 72 4e 44 75 70 28 63 6f 6e 73 74 20 63 68  StrNDup(const ch
1ee0: 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20  ar *z, int n){. 
1ef0: 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69   char *zNew;.  i
1f00: 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( z==0 ) return
1f10: 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c   0;.  zNew = sql
1f20: 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 6e 2b 31  iteMallocRaw(n+1
1f30: 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 7b  );.  if( zNew ){
1f40: 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77  .    memcpy(zNew
1f50: 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65  , z, n);.    zNe
1f60: 77 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  w[n] = 0;.  }.  
1f70: 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 23  return zNew;.}.#
1f80: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
1f90: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 2a  d(SQLITE_TEST) *
1fa0: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  /../*.** Create 
1fb0: 61 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 74 68  a string from th
1fc0: 65 20 32 6e 64 20 61 6e 64 20 73 75 62 73 65 71  e 2nd and subseq
1fd0: 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 28  uent arguments (
1fe0: 75 70 20 74 6f 20 74 68 65 0a 2a 2a 20 66 69 72  up to the.** fir
1ff0: 73 74 20 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  st NULL argument
2000: 29 2c 20 73 74 6f 72 65 20 74 68 65 20 73 74 72  ), store the str
2010: 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62  ing in memory ob
2020: 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20 73  tained from.** s
2030: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e  qliteMalloc() an
2040: 64 20 6d 61 6b 65 20 74 68 65 20 70 6f 69 6e 74  d make the point
2050: 65 72 20 69 6e 64 69 63 61 74 65 64 20 62 79 20  er indicated by 
2060: 74 68 65 20 31 73 74 20 61 72 67 75 6d 65 6e 74  the 1st argument
2070: 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f 20 74 68 61  .** point to tha
2080: 74 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 31  t string.  The 1
2090: 73 74 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  st argument must
20a0: 20 65 69 74 68 65 72 20 62 65 20 4e 55 4c 4c 20   either be NULL 
20b0: 6f 72 20 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f 20  or .** point to 
20c0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
20d0: 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  from sqliteMallo
20e0: 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  c()..*/.void sql
20f0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
2100: 61 72 20 2a 2a 70 7a 2c 20 63 6f 6e 73 74 20 63  ar **pz, const c
2110: 68 61 72 20 2a 7a 46 69 72 73 74 2c 20 2e 2e 2e  har *zFirst, ...
2120: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
2130: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
2140: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
2150: 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 3b 0a   char *zResult;.
2160: 0a 20 20 69 66 28 20 70 7a 3d 3d 30 20 29 20 72  .  if( pz==0 ) r
2170: 65 74 75 72 6e 3b 0a 20 20 6e 42 79 74 65 20 3d  eturn;.  nByte =
2180: 20 73 74 72 6c 65 6e 28 7a 46 69 72 73 74 29 20   strlen(zFirst) 
2190: 2b 20 31 3b 0a 20 20 76 61 5f 73 74 61 72 74 28  + 1;.  va_start(
21a0: 61 70 2c 20 7a 46 69 72 73 74 29 3b 0a 20 20 77  ap, zFirst);.  w
21b0: 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72  hile( (z = va_ar
21c0: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
21d0: 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 6e 42  *))!=0 ){.    nB
21e0: 79 74 65 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 29  yte += strlen(z)
21f0: 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  ;.  }.  va_end(a
2200: 70 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  p);.  sqliteFree
2210: 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a  (*pz);.  *pz = z
2220: 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 4d  Result = sqliteM
2230: 61 6c 6c 6f 63 52 61 77 28 20 6e 42 79 74 65 20  allocRaw( nByte 
2240: 29 3b 0a 20 20 69 66 28 20 7a 52 65 73 75 6c 74  );.  if( zResult
2250: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
2260: 6e 3b 0a 20 20 7d 0a 20 20 73 74 72 63 70 79 28  n;.  }.  strcpy(
2270: 7a 52 65 73 75 6c 74 2c 20 7a 46 69 72 73 74 29  zResult, zFirst)
2280: 3b 0a 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20 73  ;.  zResult += s
2290: 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74 29 3b 0a  trlen(zResult);.
22a0: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
22b0: 46 69 72 73 74 29 3b 0a 20 20 77 68 69 6c 65 28  First);.  while(
22c0: 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   (z = va_arg(ap,
22d0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d   const char*))!=
22e0: 30 20 29 7b 0a 20 20 20 20 73 74 72 63 70 79 28  0 ){.    strcpy(
22f0: 7a 52 65 73 75 6c 74 2c 20 7a 29 3b 0a 20 20 20  zResult, z);.   
2300: 20 7a 52 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c   zResult += strl
2310: 65 6e 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d  en(zResult);.  }
2320: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 23  .  va_end(ap);.#
2330: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2340: 55 47 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  UG.#if SQLITE_DE
2350: 42 55 47 3e 31 0a 20 20 66 70 72 69 6e 74 66 28  BUG>1.  fprintf(
2360: 73 74 64 65 72 72 2c 22 73 74 72 69 6e 67 20 61  stderr,"string a
2370: 74 20 30 78 25 78 20 69 73 20 25 73 5c 6e 22 2c  t 0x%x is %s\n",
2380: 20 28 69 6e 74 29 2a 70 7a 2c 20 2a 70 7a 29 3b   (int)*pz, *pz);
2390: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 7d  .#endif.#endif.}
23a0: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
23b0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  most recent erro
23c0: 72 20 63 6f 64 65 20 61 6e 64 20 65 72 72 6f 72  r code and error
23d0: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
23e0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
23f0: 20 22 64 62 22 2e 20 54 68 65 20 65 72 72 6f 72   "db". The error
2400: 20 63 6f 64 65 20 69 73 20 73 65 74 20 74 6f 20   code is set to 
2410: 22 65 72 72 5f 63 6f 64 65 22 2e 0a 2a 2a 0a 2a  "err_code"..**.*
2420: 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  * If it is not N
2430: 55 4c 4c 2c 20 73 74 72 69 6e 67 20 7a 46 6f 72  ULL, string zFor
2440: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
2450: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 0a  e format of the.
2460: 2a 2a 20 65 72 72 6f 72 20 73 74 72 69 6e 67 20  ** error string 
2470: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
2480: 74 68 65 20 70 72 69 6e 74 66 20 66 75 6e 63 74  the printf funct
2490: 69 6f 6e 73 3a 20 54 68 65 20 66 6f 6c 6c 6f 77  ions: The follow
24a0: 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74 20 63 68  ing.** format ch
24b0: 61 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c  aracters are all
24c0: 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  owed:.**.**     
24d0: 20 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20   %s      Insert 
24e0: 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20  a string.**     
24f0: 20 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e   %z      A strin
2500: 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  g that should be
2510: 20 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65   freed after use
2520: 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20  .**      %d     
2530: 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67   Insert an integ
2540: 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20  er.**      %T   
2550: 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65     Insert a toke
2560: 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20  n.**      %S    
2570: 20 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72    Insert the fir
2580: 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2590: 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 7a 46  SrcList.**.** zF
25a0: 6f 72 6d 61 74 20 61 6e 64 20 61 6e 79 20 73 74  ormat and any st
25b0: 72 69 6e 67 20 74 6f 6b 65 6e 73 20 74 68 61 74  ring tokens that
25c0: 20 66 6f 6c 6c 6f 77 20 69 74 20 61 72 65 20 61   follow it are a
25d0: 73 73 75 6d 65 64 20 74 6f 20 62 65 0a 2a 2a 20  ssumed to be.** 
25e0: 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38  encoded in UTF-8
25f0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c 65 61 72  ..**.** To clear
2600: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
2610: 20 65 72 72 6f 72 20 66 6f 72 20 73 6c 71 69 74   error for slqit
2620: 65 20 68 61 6e 64 6c 65 20 22 64 62 22 2c 20 73  e handle "db", s
2630: 71 6c 69 74 65 33 45 72 72 6f 72 0a 2a 2a 20 73  qlite3Error.** s
2640: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20  hould be called 
2650: 77 69 74 68 20 65 72 72 5f 63 6f 64 65 20 73 65  with err_code se
2660: 74 20 74 6f 20 53 51 4c 49 54 45 5f 4f 4b 20 61  t to SQLITE_OK a
2670: 6e 64 20 7a 46 6f 72 6d 61 74 20 73 65 74 0a 2a  nd zFormat set.*
2680: 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f  * to NULL..*/.vo
2690: 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
26a0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
26b0: 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f 6e 73 74   err_code, const
26c0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
26d0: 2e 2e 2e 29 7b 0a 20 20 69 66 28 20 64 62 20 26  ...){.  if( db &
26e0: 26 20 28 64 62 2d 3e 70 45 72 72 20 7c 7c 20 28  & (db->pErr || (
26f0: 64 62 2d 3e 70 45 72 72 20 3d 20 73 71 6c 69 74  db->pErr = sqlit
2700: 65 33 56 61 6c 75 65 4e 65 77 28 29 29 29 20 29  e3ValueNew())) )
2710: 7b 0a 20 20 20 20 64 62 2d 3e 65 72 72 43 6f 64  {.    db->errCod
2720: 65 20 3d 20 65 72 72 5f 63 6f 64 65 3b 0a 20 20  e = err_code;.  
2730: 20 20 69 66 28 20 7a 46 6f 72 6d 61 74 20 29 7b    if( zFormat ){
2740: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a  .      char *z;.
2750: 20 20 20 20 20 20 76 61 5f 6c 69 73 74 20 61 70        va_list ap
2760: 3b 0a 20 20 20 20 20 20 76 61 5f 73 74 61 72 74  ;.      va_start
2770: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
2780: 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33       z = sqlite3
2790: 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  VMPrintf(zFormat
27a0: 2c 20 61 70 29 3b 0a 20 20 20 20 20 20 76 61 5f  , ap);.      va_
27b0: 65 6e 64 28 61 70 29 3b 0a 20 20 20 20 20 20 73  end(ap);.      s
27c0: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
27d0: 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d 31 2c 20  r(db->pErr, -1, 
27e0: 7a 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  z, SQLITE_UTF8, 
27f0: 73 71 6c 69 74 65 33 46 72 65 65 58 29 3b 0a 20  sqlite3FreeX);. 
2800: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2810: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
2820: 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 30 2c 20  tr(db->pErr, 0, 
2830: 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  0, SQLITE_UTF8, 
2840: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
2850: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2860: 2a 2a 20 41 64 64 20 61 6e 20 65 72 72 6f 72 20  ** Add an error 
2870: 6d 65 73 73 61 67 65 20 74 6f 20 70 50 61 72 73  message to pPars
2880: 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64 20 69  e->zErrMsg and i
2890: 6e 63 72 65 6d 65 6e 74 20 70 50 61 72 73 65 2d  ncrement pParse-
28a0: 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20 66 6f  >nErr..** The fo
28b0: 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 74 69  llowing formatti
28c0: 6e 67 20 63 68 61 72 61 63 74 65 72 73 20 61 72  ng characters ar
28d0: 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a  e allowed:.**.**
28e0: 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e        %s      In
28f0: 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a  sert a string.**
2900: 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20        %z      A 
2910: 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75  string that shou
2920: 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65  ld be freed afte
2930: 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64  r use.**      %d
2940: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20        Insert an 
2950: 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20  integer.**      
2960: 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %T      Insert a
2970: 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25   token.**      %
2980: 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68  S      Insert th
2990: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
29a0: 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a  of a SrcList.**.
29b0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
29c0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
29d0: 74 6f 20 72 65 70 6f 72 74 20 61 6e 79 20 65 72  to report any er
29e0: 72 6f 72 20 74 68 61 74 20 6f 63 63 75 72 73 20  ror that occurs 
29f0: 77 68 69 6c 73 74 0a 2a 2a 20 63 6f 6d 70 69 6c  whilst.** compil
2a00: 69 6e 67 20 61 6e 20 53 51 4c 20 73 74 61 74 65  ing an SQL state
2a10: 6d 65 6e 74 20 28 69 2e 65 2e 20 77 69 74 68 69  ment (i.e. withi
2a20: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
2a30: 65 28 29 29 2e 20 54 68 65 0a 2a 2a 20 6c 61 73  e()). The.** las
2a40: 74 20 74 68 69 6e 67 20 74 68 65 20 73 71 6c 69  t thing the sqli
2a50: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 66 75  te3_prepare() fu
2a60: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 69 73 20 63  nction does is c
2a70: 6f 70 79 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  opy the error.**
2a80: 20 73 74 6f 72 65 64 20 62 79 20 74 68 69 73 20   stored by this 
2a90: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 74 68  function into th
2aa0: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
2ab0: 65 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 45  e using sqlite3E
2ac0: 72 72 6f 72 28 29 2e 0a 2a 2a 20 46 75 6e 63 74  rror()..** Funct
2ad0: 69 6f 6e 20 73 71 6c 69 74 65 33 45 72 72 6f 72  ion sqlite3Error
2ae0: 28 29 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  () should be use
2af0: 64 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  d during stateme
2b00: 6e 74 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nt execution.** 
2b10: 28 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20  (sqlite3_step() 
2b20: 65 74 63 2e 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73  etc.)..*/.void s
2b30: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
2b40: 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2b50: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
2b60: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
2b70: 73 74 20 61 70 3b 0a 20 20 70 50 61 72 73 65 2d  st ap;.  pParse-
2b80: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 73 71 6c 69 74  >nErr++;.  sqlit
2b90: 65 46 72 65 65 28 70 50 61 72 73 65 2d 3e 7a 45  eFree(pParse->zE
2ba0: 72 72 4d 73 67 29 3b 0a 20 20 76 61 5f 73 74 61  rrMsg);.  va_sta
2bb0: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
2bc0: 0a 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d  .  pParse->zErrM
2bd0: 73 67 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72  sg = sqlite3VMPr
2be0: 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70  intf(zFormat, ap
2bf0: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
2c00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  .}../*.** Conver
2c10: 74 20 61 6e 20 53 51 4c 2d 73 74 79 6c 65 20 71  t an SQL-style q
2c20: 75 6f 74 65 64 20 73 74 72 69 6e 67 20 69 6e 74  uoted string int
2c30: 6f 20 61 20 6e 6f 72 6d 61 6c 20 73 74 72 69 6e  o a normal strin
2c40: 67 20 62 79 20 72 65 6d 6f 76 69 6e 67 0a 2a 2a  g by removing.**
2c50: 20 74 68 65 20 71 75 6f 74 65 20 63 68 61 72 61   the quote chara
2c60: 63 74 65 72 73 2e 20 20 54 68 65 20 63 6f 6e 76  cters.  The conv
2c70: 65 72 73 69 6f 6e 20 69 73 20 64 6f 6e 65 20 69  ersion is done i
2c80: 6e 2d 70 6c 61 63 65 2e 20 20 49 66 20 74 68 65  n-place.  If the
2c90: 0a 2a 2a 20 69 6e 70 75 74 20 64 6f 65 73 20 6e  .** input does n
2ca0: 6f 74 20 62 65 67 69 6e 20 77 69 74 68 20 61 20  ot begin with a 
2cb0: 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 2c  quote character,
2cc0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
2cd0: 6e 65 0a 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70  ne.** is a no-op
2ce0: 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 32 2d 46 65 62  ..**.** 2002-Feb
2cf0: 2d 31 34 3a 20 54 68 69 73 20 72 6f 75 74 69 6e  -14: This routin
2d00: 65 20 69 73 20 65 78 74 65 6e 64 65 64 20 74 6f  e is extended to
2d10: 20 72 65 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73   remove MS-Acces
2d20: 73 20 73 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b  s style.** brack
2d30: 65 74 73 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20  ets from around 
2d40: 69 64 65 6e 74 69 66 65 72 73 2e 20 20 46 6f 72  identifers.  For
2d50: 20 65 78 61 6d 70 6c 65 3a 20 20 22 5b 61 2d 62   example:  "[a-b
2d60: 2d 63 5d 22 20 62 65 63 6f 6d 65 73 0a 2a 2a 20  -c]" becomes.** 
2d70: 22 61 2d 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69 64  "a-b-c"..*/.void
2d80: 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
2d90: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
2da0: 71 75 6f 74 65 3b 0a 20 20 69 6e 74 20 69 2c 20  quote;.  int i, 
2db0: 6a 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  j;.  if( z==0 ) 
2dc0: 72 65 74 75 72 6e 3b 0a 20 20 71 75 6f 74 65 20  return;.  quote 
2dd0: 3d 20 7a 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68  = z[0];.  switch
2de0: 28 20 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 63  ( quote ){.    c
2df0: 61 73 65 20 27 5c 27 27 3a 20 20 62 72 65 61 6b  ase '\'':  break
2e00: 3b 0a 20 20 20 20 63 61 73 65 20 27 22 27 3a 20  ;.    case '"': 
2e10: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
2e20: 65 20 27 5b 27 3a 20 20 20 71 75 6f 74 65 20 3d  e '[':   quote =
2e30: 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b 0a 20 20   ']';  break;.  
2e40: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 72 65    default:    re
2e50: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  turn;.  }.  for(
2e60: 69 3d 31 2c 20 6a 3d 30 3b 20 7a 5b 69 5d 3b 20  i=1, j=0; z[i]; 
2e70: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 5b  i++){.    if( z[
2e80: 69 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20  i]==quote ){.   
2e90: 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3d 3d 71     if( z[i+1]==q
2ea0: 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20  uote ){.        
2eb0: 7a 5b 6a 2b 2b 5d 20 3d 20 71 75 6f 74 65 3b 0a  z[j++] = quote;.
2ec0: 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
2ed0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2ee0: 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 30 3b 0a 20 20    z[j++] = 0;.  
2ef0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2f00: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
2f10: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 7a        z[j++] = z
2f20: 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  [i];.    }.  }.}
2f30: 0a 0a 2f 2a 20 41 6e 20 61 72 72 61 79 20 74 6f  ../* An array to
2f40: 20 6d 61 70 20 61 6c 6c 20 75 70 70 65 72 2d 63   map all upper-c
2f50: 61 73 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ase characters i
2f60: 6e 74 6f 20 74 68 65 69 72 20 63 6f 72 72 65 73  nto their corres
2f70: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6c 6f 77 65 72  ponding.** lower
2f80: 2d 63 61 73 65 20 63 68 61 72 61 63 74 65 72 2e  -case character.
2f90: 20 0a 2a 2f 0a 63 6f 6e 73 74 20 75 6e 73 69 67   .*/.const unsig
2fa0: 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2fb0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 20 3d  UpperToLower[] =
2fc0: 20 7b 0a 20 20 20 20 20 20 30 2c 20 20 31 2c 20   {.      0,  1, 
2fd0: 20 32 2c 20 20 33 2c 20 20 34 2c 20 20 35 2c 20   2,  3,  4,  5, 
2fe0: 20 36 2c 20 20 37 2c 20 20 38 2c 20 20 39 2c 20   6,  7,  8,  9, 
2ff0: 31 30 2c 20 31 31 2c 20 31 32 2c 20 31 33 2c 20  10, 11, 12, 13, 
3000: 31 34 2c 20 31 35 2c 20 31 36 2c 20 31 37 2c 0a  14, 15, 16, 17,.
3010: 20 20 20 20 20 31 38 2c 20 31 39 2c 20 32 30 2c       18, 19, 20,
3020: 20 32 31 2c 20 32 32 2c 20 32 33 2c 20 32 34 2c   21, 22, 23, 24,
3030: 20 32 35 2c 20 32 36 2c 20 32 37 2c 20 32 38 2c   25, 26, 27, 28,
3040: 20 32 39 2c 20 33 30 2c 20 33 31 2c 20 33 32 2c   29, 30, 31, 32,
3050: 20 33 33 2c 20 33 34 2c 20 33 35 2c 0a 20 20 20   33, 34, 35,.   
3060: 20 20 33 36 2c 20 33 37 2c 20 33 38 2c 20 33 39    36, 37, 38, 39
3070: 2c 20 34 30 2c 20 34 31 2c 20 34 32 2c 20 34 33  , 40, 41, 42, 43
3080: 2c 20 34 34 2c 20 34 35 2c 20 34 36 2c 20 34 37  , 44, 45, 46, 47
3090: 2c 20 34 38 2c 20 34 39 2c 20 35 30 2c 20 35 31  , 48, 49, 50, 51
30a0: 2c 20 35 32 2c 20 35 33 2c 0a 20 20 20 20 20 35  , 52, 53,.     5
30b0: 34 2c 20 35 35 2c 20 35 36 2c 20 35 37 2c 20 35  4, 55, 56, 57, 5
30c0: 38 2c 20 35 39 2c 20 36 30 2c 20 36 31 2c 20 36  8, 59, 60, 61, 6
30d0: 32 2c 20 36 33 2c 20 36 34 2c 20 39 37 2c 20 39  2, 63, 64, 97, 9
30e0: 38 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31 30  8, 99,100,101,10
30f0: 32 2c 31 30 33 2c 0a 20 20 20 20 31 30 34 2c 31  2,103,.    104,1
3100: 30 35 2c 31 30 36 2c 31 30 37 2c 31 30 38 2c 31  05,106,107,108,1
3110: 30 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c 31  09,110,111,112,1
3120: 31 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c 31  13,114,115,116,1
3130: 31 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c 31  17,118,119,120,1
3140: 32 31 2c 0a 20 20 20 20 31 32 32 2c 20 39 31 2c  21,.    122, 91,
3150: 20 39 32 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c   92, 93, 94, 95,
3160: 20 39 36 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c   96, 97, 98, 99,
3170: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
3180: 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c  104,105,106,107,
3190: 0a 20 20 20 20 31 30 38 2c 31 30 39 2c 31 31 30  .    108,109,110
31a0: 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31 34  ,111,112,113,114
31b0: 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38  ,115,116,117,118
31c0: 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 31 32 32  ,119,120,121,122
31d0: 2c 31 32 33 2c 31 32 34 2c 31 32 35 2c 0a 20 20  ,123,124,125,.  
31e0: 20 20 31 32 36 2c 31 32 37 2c 31 32 38 2c 31 32    126,127,128,12
31f0: 39 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c 31 33  9,130,131,132,13
3200: 33 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c 31 33  3,134,135,136,13
3210: 37 2c 31 33 38 2c 31 33 39 2c 31 34 30 2c 31 34  7,138,139,140,14
3220: 31 2c 31 34 32 2c 31 34 33 2c 0a 20 20 20 20 31  1,142,143,.    1
3230: 34 34 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c 31  44,145,146,147,1
3240: 34 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c 31  48,149,150,151,1
3250: 35 32 2c 31 35 33 2c 31 35 34 2c 31 35 35 2c 31  52,153,154,155,1
3260: 35 36 2c 31 35 37 2c 31 35 38 2c 31 35 39 2c 31  56,157,158,159,1
3270: 36 30 2c 31 36 31 2c 0a 20 20 20 20 31 36 32 2c  60,161,.    162,
3280: 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36 36 2c  163,164,165,166,
3290: 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37 30 2c  167,168,169,170,
32a0: 31 37 31 2c 31 37 32 2c 31 37 33 2c 31 37 34 2c  171,172,173,174,
32b0: 31 37 35 2c 31 37 36 2c 31 37 37 2c 31 37 38 2c  175,176,177,178,
32c0: 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 31 38 31  179,.    180,181
32d0: 2c 31 38 32 2c 31 38 33 2c 31 38 34 2c 31 38 35  ,182,183,184,185
32e0: 2c 31 38 36 2c 31 38 37 2c 31 38 38 2c 31 38 39  ,186,187,188,189
32f0: 2c 31 39 30 2c 31 39 31 2c 31 39 32 2c 31 39 33  ,190,191,192,193
3300: 2c 31 39 34 2c 31 39 35 2c 31 39 36 2c 31 39 37  ,194,195,196,197
3310: 2c 0a 20 20 20 20 31 39 38 2c 31 39 39 2c 32 30  ,.    198,199,20
3320: 30 2c 32 30 31 2c 32 30 32 2c 32 30 33 2c 32 30  0,201,202,203,20
3330: 34 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c 32 30  4,205,206,207,20
3340: 38 2c 32 30 39 2c 32 31 30 2c 32 31 31 2c 32 31  8,209,210,211,21
3350: 32 2c 32 31 33 2c 32 31 34 2c 32 31 35 2c 0a 20  2,213,214,215,. 
3360: 20 20 20 32 31 36 2c 32 31 37 2c 32 31 38 2c 32     216,217,218,2
3370: 31 39 2c 32 32 30 2c 32 32 31 2c 32 32 32 2c 32  19,220,221,222,2
3380: 32 33 2c 32 32 34 2c 32 32 35 2c 32 32 36 2c 32  23,224,225,226,2
3390: 32 37 2c 32 32 38 2c 32 32 39 2c 32 33 30 2c 32  27,228,229,230,2
33a0: 33 31 2c 32 33 32 2c 32 33 33 2c 0a 20 20 20 20  31,232,233,.    
33b0: 32 33 34 2c 32 33 35 2c 32 33 36 2c 32 33 37 2c  234,235,236,237,
33c0: 32 33 38 2c 32 33 39 2c 32 34 30 2c 32 34 31 2c  238,239,240,241,
33d0: 32 34 32 2c 32 34 33 2c 32 34 34 2c 32 34 35 2c  242,243,244,245,
33e0: 32 34 36 2c 32 34 37 2c 32 34 38 2c 32 34 39 2c  246,247,248,249,
33f0: 32 35 30 2c 32 35 31 2c 0a 20 20 20 20 32 35 32  250,251,.    252
3400: 2c 32 35 33 2c 32 35 34 2c 32 35 35 0a 7d 3b 0a  ,253,254,255.};.
3410: 23 64 65 66 69 6e 65 20 55 70 70 65 72 54 6f 4c  #define UpperToL
3420: 6f 77 65 72 20 73 71 6c 69 74 65 33 55 70 70 65  ower sqlite3Uppe
3430: 72 54 6f 4c 6f 77 65 72 0a 0a 2f 2a 0a 2a 2a 20  rToLower../*.** 
3440: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 6f  This function co
3450: 6d 70 75 74 65 73 20 61 20 68 61 73 68 20 6f 6e  mputes a hash on
3460: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 6b   the name of a k
3470: 65 79 77 6f 72 64 2e 0a 2a 2a 20 43 61 73 65 20  eyword..** Case 
3480: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
3490: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
34a0: 65 33 48 61 73 68 4e 6f 43 61 73 65 28 63 6f 6e  e3HashNoCase(con
34b0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
34c0: 6e 29 7b 0a 20 20 69 6e 74 20 68 20 3d 20 30 3b  n){.  int h = 0;
34d0: 0a 20 20 69 66 28 20 6e 3c 3d 30 20 29 20 6e 20  .  if( n<=0 ) n 
34e0: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 77  = strlen(z);.  w
34f0: 68 69 6c 65 28 20 6e 20 3e 20 30 20 20 29 7b 0a  hile( n > 0  ){.
3500: 20 20 20 20 68 20 3d 20 28 68 3c 3c 33 29 20 5e      h = (h<<3) ^
3510: 20 68 20 5e 20 55 70 70 65 72 54 6f 4c 6f 77 65   h ^ UpperToLowe
3520: 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
3530: 29 2a 7a 2b 2b 5d 3b 0a 20 20 20 20 6e 2d 2d 3b  )*z++];.    n--;
3540: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 68 20  .  }.  return h 
3550: 26 20 30 78 37 66 66 66 66 66 66 66 3b 0a 7d 0a  & 0x7fffffff;.}.
3560: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 73 79 73 74  ./*.** Some syst
3570: 65 6d 73 20 68 61 76 65 20 73 74 72 69 63 6d 70  ems have stricmp
3580: 28 29 2e 20 20 4f 74 68 65 72 73 20 68 61 76 65  ().  Others have
3590: 20 73 74 72 63 61 73 65 63 6d 70 28 29 2e 20 20   strcasecmp().  
35a0: 42 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 72 65  Because.** there
35b0: 20 69 73 20 6e 6f 20 63 6f 6e 73 69 73 74 65 6e   is no consisten
35c0: 63 79 2c 20 77 65 20 77 69 6c 6c 20 64 65 66 69  cy, we will defi
35d0: 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a 2a 2f 0a 69  ne our own..*/.i
35e0: 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  nt sqlite3StrICm
35f0: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c  p(const char *zL
3600: 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  eft, const char 
3610: 2a 7a 52 69 67 68 74 29 7b 0a 20 20 72 65 67 69  *zRight){.  regi
3620: 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68  ster unsigned ch
3630: 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d  ar *a, *b;.  a =
3640: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
3650: 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28  *)zLeft;.  b = (
3660: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
3670: 7a 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28  zRight;.  while(
3680: 20 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72 54   *a!=0 && UpperT
3690: 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65  oLower[*a]==Uppe
36a0: 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61  rToLower[*b]){ a
36b0: 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74  ++; b++; }.  ret
36c0: 75 72 6e 20 55 70 70 65 72 54 6f 4c 6f 77 65 72  urn UpperToLower
36d0: 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f  [*a] - UpperToLo
36e0: 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 69 6e 74 20 73  wer[*b];.}.int s
36f0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63  qlite3StrNICmp(c
3700: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74  onst char *zLeft
3710: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52  , const char *zR
3720: 69 67 68 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  ight, int N){.  
3730: 72 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65  register unsigne
3740: 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20  d char *a, *b;. 
3750: 20 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63   a = (unsigned c
3760: 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62  har *)zLeft;.  b
3770: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
3780: 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68  r *)zRight;.  wh
3790: 69 6c 65 28 20 4e 2d 2d 20 3e 20 30 20 26 26 20  ile( N-- > 0 && 
37a0: 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72 54 6f  *a!=0 && UpperTo
37b0: 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72  Lower[*a]==Upper
37c0: 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b  ToLower[*b]){ a+
37d0: 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75  +; b++; }.  retu
37e0: 72 6e 20 4e 3c 30 20 3f 20 30 20 3a 20 55 70 70  rn N<0 ? 0 : Upp
37f0: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20  erToLower[*a] - 
3800: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
3810: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
3820: 6e 20 54 52 55 45 20 69 66 20 7a 20 69 73 20 61  n TRUE if z is a
3830: 20 70 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74   pure numeric st
3840: 72 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 46 41  ring.  Return FA
3850: 4c 53 45 20 69 66 20 74 68 65 0a 2a 2a 20 73 74  LSE if the.** st
3860: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ring contains an
3870: 79 20 63 68 61 72 61 63 74 65 72 20 77 68 69 63  y character whic
3880: 68 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66  h is not part of
3890: 20 61 20 6e 75 6d 62 65 72 2e 20 49 66 0a 2a 2a   a number. If.**
38a0: 20 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 6e   the string is n
38b0: 75 6d 65 72 69 63 20 61 6e 64 20 63 6f 6e 74 61  umeric and conta
38c0: 69 6e 73 20 74 68 65 20 27 2e 27 20 63 68 61 72  ins the '.' char
38d0: 61 63 74 65 72 2c 20 73 65 74 20 2a 72 65 61 6c  acter, set *real
38e0: 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52 55 45 20 28  num.** to TRUE (
38f0: 6f 74 68 65 72 77 69 73 65 20 46 41 4c 53 45 29  otherwise FALSE)
3900: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 6d 70 74 79  ..**.** An empty
3910: 20 73 74 72 69 6e 67 20 69 73 20 63 6f 6e 73 69   string is consi
3920: 64 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69  dered non-numeri
3930: 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  c..*/.int sqlite
3940: 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20  3IsNumber(const 
3950: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65  char *z, int *re
3960: 61 6c 6e 75 6d 2c 20 75 38 20 65 6e 63 29 7b 0a  alnum, u8 enc){.
3970: 20 20 69 6e 74 20 69 6e 63 72 20 3d 20 28 65 6e    int incr = (en
3980: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 3f 31  c==SQLITE_UTF8?1
3990: 3a 32 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d  :2);.  if( enc==
39a0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
39b0: 20 7a 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d   z++;.  if( *z==
39c0: 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29  '-' || *z=='+' )
39d0: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66   z += incr;.  if
39e0: 28 20 21 69 73 64 69 67 69 74 28 2a 28 75 38 2a  ( !isdigit(*(u8*
39f0: 29 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  )z) ){.    retur
3a00: 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 20 2b 3d 20  n 0;.  }.  z += 
3a10: 69 6e 63 72 3b 0a 20 20 69 66 28 20 72 65 61 6c  incr;.  if( real
3a20: 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d  num ) *realnum =
3a30: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 64   0;.  while( isd
3a40: 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b  igit(*(u8*)z) ){
3a50: 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20   z += incr; }.  
3a60: 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20  if( *z=='.' ){. 
3a70: 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20     z += incr;.  
3a80: 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a    if( !isdigit(*
3a90: 28 75 38 2a 29 7a 29 20 29 20 72 65 74 75 72 6e  (u8*)z) ) return
3aa0: 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69   0;.    while( i
3ab0: 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20  sdigit(*(u8*)z) 
3ac0: 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a  ){ z += incr; }.
3ad0: 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20      if( realnum 
3ae0: 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a  ) *realnum = 1;.
3af0: 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65    }.  if( *z=='e
3b00: 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a  ' || *z=='E' ){.
3b10: 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20      z += incr;. 
3b20: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
3b30: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 20 2b 3d  | *z=='-' ) z +=
3b40: 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21   incr;.    if( !
3b50: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
3b60: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
3b70: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
3b80: 2a 28 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d  *(u8*)z) ){ z +=
3b90: 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28   incr; }.    if(
3ba0: 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c   realnum ) *real
3bb0: 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72  num = 1;.  }.  r
3bc0: 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a  eturn *z==0;.}..
3bd0: 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  /*.** The string
3be0: 20 7a 5b 5d 20 69 73 20 61 6e 20 61 73 63 69 69   z[] is an ascii
3bf0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
3c00: 6f 66 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  of a real number
3c10: 2e 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 69  ..** Convert thi
3c20: 73 20 73 74 72 69 6e 67 20 74 6f 20 61 20 64 6f  s string to a do
3c30: 75 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  uble..**.** This
3c40: 20 72 6f 75 74 69 6e 65 20 61 73 73 75 6d 65 73   routine assumes
3c50: 20 74 68 61 74 20 7a 5b 5d 20 72 65 61 6c 6c 79   that z[] really
3c60: 20 69 73 20 61 20 76 61 6c 69 64 20 6e 75 6d 62   is a valid numb
3c70: 65 72 2e 20 20 49 66 20 69 74 0a 2a 2a 20 69 73  er.  If it.** is
3c80: 20 6e 6f 74 2c 20 74 68 65 20 72 65 73 75 6c 74   not, the result
3c90: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a   is undefined..*
3ca0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
3cb0: 65 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  e is used instea
3cc0: 64 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  d of the library
3cd0: 20 61 74 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e   atof() function
3ce0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 20   because.** the 
3cf0: 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29 20 6d  library atof() m
3d00: 69 67 68 74 20 77 61 6e 74 20 74 6f 20 75 73 65  ight want to use
3d10: 20 22 2c 22 20 61 73 20 74 68 65 20 64 65 63 69   "," as the deci
3d20: 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 73 74 65 61  mal point instea
3d30: 64 0a 2a 2a 20 6f 66 20 22 2e 22 20 64 65 70 65  d.** of "." depe
3d40: 6e 64 69 6e 67 20 6f 6e 20 68 6f 77 20 6c 6f 63  nding on how loc
3d50: 61 6c 65 20 69 73 20 73 65 74 2e 20 20 42 75 74  ale is set.  But
3d60: 20 74 68 61 74 20 77 6f 75 6c 64 20 63 61 75 73   that would caus
3d70: 65 20 70 72 6f 62 6c 65 6d 73 0a 2a 2a 20 66 6f  e problems.** fo
3d80: 72 20 53 51 4c 2e 20 20 53 6f 20 74 68 69 73 20  r SQL.  So this 
3d90: 72 6f 75 74 69 6e 65 20 61 6c 77 61 79 73 20 75  routine always u
3da0: 73 65 73 20 22 2e 22 20 72 65 67 61 72 64 6c 65  ses "." regardle
3db0: 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
3dc0: 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 41  .double sqlite3A
3dd0: 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
3de0: 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  z, const char **
3df0: 70 7a 45 6e 64 29 7b 0a 20 20 69 6e 74 20 73 69  pzEnd){.  int si
3e00: 67 6e 20 3d 20 31 3b 0a 20 20 4c 4f 4e 47 44 4f  gn = 1;.  LONGDO
3e10: 55 42 4c 45 5f 54 59 50 45 20 76 31 20 3d 20 30  UBLE_TYPE v1 = 0
3e20: 2e 30 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d  .0;.  if( *z=='-
3e30: 27 20 29 7b 0a 20 20 20 20 73 69 67 6e 20 3d 20  ' ){.    sign = 
3e40: 2d 31 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d  -1;.    z++;.  }
3e50: 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27  else if( *z=='+'
3e60: 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d   ){.    z++;.  }
3e70: 0a 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69  .  while( isdigi
3e80: 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20  t(*(u8*)z) ){.  
3e90: 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b    v1 = v1*10.0 +
3ea0: 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20   (*z - '0');.   
3eb0: 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20   z++;.  }.  if( 
3ec0: 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 4c  *z=='.' ){.    L
3ed0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 64  ONGDOUBLE_TYPE d
3ee0: 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b 0a 20 20  ivisor = 1.0;.  
3ef0: 20 20 7a 2b 2b 3b 0a 20 20 20 20 77 68 69 6c 65    z++;.    while
3f00: 28 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29  ( isdigit(*(u8*)
3f10: 7a 29 20 29 7b 0a 20 20 20 20 20 20 76 31 20 3d  z) ){.      v1 =
3f20: 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d   v1*10.0 + (*z -
3f30: 20 27 30 27 29 3b 0a 20 20 20 20 20 20 64 69 76   '0');.      div
3f40: 69 73 6f 72 20 2a 3d 20 31 30 2e 30 3b 0a 20 20  isor *= 10.0;.  
3f50: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20      z++;.    }. 
3f60: 20 20 20 76 31 20 2f 3d 20 64 69 76 69 73 6f 72     v1 /= divisor
3f70: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d  ;.  }.  if( *z==
3f80: 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29  'e' || *z=='E' )
3f90: 7b 0a 20 20 20 20 69 6e 74 20 65 73 69 67 6e 20  {.    int esign 
3fa0: 3d 20 31 3b 0a 20 20 20 20 69 6e 74 20 65 76 61  = 1;.    int eva
3fb0: 6c 20 3d 20 30 3b 0a 20 20 20 20 4c 4f 4e 47 44  l = 0;.    LONGD
3fc0: 4f 55 42 4c 45 5f 54 59 50 45 20 73 63 61 6c 65  OUBLE_TYPE scale
3fd0: 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b   = 1.0;.    z++;
3fe0: 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27  .    if( *z=='-'
3ff0: 20 29 7b 0a 20 20 20 20 20 20 65 73 69 67 6e 20   ){.      esign 
4000: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b  = -1;.      z++;
4010: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  .    }else if( *
4020: 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 20 20  z=='+' ){.      
4030: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  z++;.    }.    w
4040: 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28  hile( isdigit(*(
4050: 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 20 20  u8*)z) ){.      
4060: 65 76 61 6c 20 3d 20 65 76 61 6c 2a 31 30 20 2b  eval = eval*10 +
4070: 20 2a 7a 20 2d 20 27 30 27 3b 0a 20 20 20 20 20   *z - '0';.     
4080: 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20   z++;.    }.    
4090: 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 36 34 20  while( eval>=64 
40a0: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65  ){ scale *= 1.0e
40b0: 2b 36 34 3b 20 65 76 61 6c 20 2d 3d 20 36 34 3b  +64; eval -= 64;
40c0: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76   }.    while( ev
40d0: 61 6c 3e 3d 31 36 20 29 7b 20 73 63 61 6c 65 20  al>=16 ){ scale 
40e0: 2a 3d 20 31 2e 30 65 2b 31 36 3b 20 65 76 61 6c  *= 1.0e+16; eval
40f0: 20 2d 3d 20 31 36 3b 20 7d 0a 20 20 20 20 77 68   -= 16; }.    wh
4100: 69 6c 65 28 20 65 76 61 6c 3e 3d 34 20 29 7b 20  ile( eval>=4 ){ 
4110: 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 34 3b  scale *= 1.0e+4;
4120: 20 65 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a 20 20   eval -= 4; }.  
4130: 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31    while( eval>=1
4140: 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30   ){ scale *= 1.0
4150: 65 2b 31 3b 20 65 76 61 6c 20 2d 3d 20 31 3b 20  e+1; eval -= 1; 
4160: 7d 0a 20 20 20 20 69 66 28 20 65 73 69 67 6e 3c  }.    if( esign<
4170: 30 20 29 7b 0a 20 20 20 20 20 20 76 31 20 2f 3d  0 ){.      v1 /=
4180: 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 65 6c 73   scale;.    }els
4190: 65 7b 0a 20 20 20 20 20 20 76 31 20 2a 3d 20 73  e{.      v1 *= s
41a0: 63 61 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  cale;.    }.  }.
41b0: 20 20 69 66 28 20 70 7a 45 6e 64 20 29 20 2a 70    if( pzEnd ) *p
41c0: 7a 45 6e 64 20 3d 20 7a 3b 0a 20 20 72 65 74 75  zEnd = z;.  retu
41d0: 72 6e 20 73 69 67 6e 3c 30 20 3f 20 2d 76 31 20  rn sign<0 ? -v1 
41e0: 3a 20 76 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  : v1;.}../*.** R
41f0: 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a 4e  eturn TRUE if zN
4200: 75 6d 20 69 73 20 61 20 36 34 2d 62 69 74 20 73  um is a 64-bit s
4210: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e  igned integer an
4220: 64 20 77 72 69 74 65 0a 2a 2a 20 74 68 65 20 76  d write.** the v
4230: 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
4240: 67 65 72 20 69 6e 74 6f 20 2a 70 4e 75 6d 2e 20  ger into *pNum. 
4250: 20 49 66 20 7a 4e 75 6d 20 69 73 20 6e 6f 74 20   If zNum is not 
4260: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6f 72  an integer.** or
4270: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
4280: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
4290: 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64   to be expressed
42a0: 20 77 69 74 68 20 36 34 20 62 69 74 73 2c 0a 2a   with 64 bits,.*
42b0: 2a 20 74 68 65 6e 20 72 65 74 75 72 6e 20 66 61  * then return fa
42c0: 6c 73 65 2e 20 20 49 66 20 6e 3e 30 20 61 6e 64  lse.  If n>0 and
42d0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20   the integer is 
42e0: 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 0a 2a 2a  string is not.**
42f0: 20 65 78 61 63 74 6c 79 20 6e 20 62 79 74 65 73   exactly n bytes
4300: 20 6c 6f 6e 67 2c 20 72 65 74 75 72 6e 20 66 61   long, return fa
4310: 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  lse..**.** When 
4320: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73  this routine was
4330: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74   originally writ
4340: 74 65 6e 20 69 74 20 64 65 61 6c 74 20 77 69 74  ten it dealt wit
4350: 68 20 6f 6e 6c 79 0a 2a 2a 20 33 32 2d 62 69 74  h only.** 32-bit
4360: 20 6e 75 6d 62 65 72 73 2e 20 20 41 74 20 74 68   numbers.  At th
4370: 61 74 20 74 69 6d 65 2c 20 69 74 20 77 61 73 20  at time, it was 
4380: 6d 75 63 68 20 66 61 73 74 65 72 20 74 68 61 6e  much faster than
4390: 20 74 68 65 0a 2a 2a 20 61 74 6f 69 28 29 20 6c   the.** atoi() l
43a0: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 69  ibrary routine i
43b0: 6e 20 52 65 64 48 61 74 20 37 2e 32 2e 0a 2a 2f  n RedHat 7.2..*/
43c0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 61 74 6f 69  .int sqlite3atoi
43d0: 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  64(const char *z
43e0: 4e 75 6d 2c 20 69 36 34 20 2a 70 4e 75 6d 29 7b  Num, i64 *pNum){
43f0: 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20  .  i64 v = 0;.  
4400: 69 6e 74 20 6e 65 67 3b 0a 20 20 69 6e 74 20 69  int neg;.  int i
4410: 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d  , c;.  if( *zNum
4420: 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67  =='-' ){.    neg
4430: 20 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b   = 1;.    zNum++
4440: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a  ;.  }else if( *z
4450: 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20  Num=='+' ){.    
4460: 6e 65 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75  neg = 0;.    zNu
4470: 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  m++;.  }else{.  
4480: 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20    neg = 0;.  }. 
4490: 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75   for(i=0; (c=zNu
44a0: 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c  m[i])>='0' && c<
44b0: 3d 27 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ='9'; i++){.    
44c0: 76 20 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20 27  v = v*10 + c - '
44d0: 30 27 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20  0';.  }.  *pNum 
44e0: 3d 20 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a  = neg ? -v : v;.
44f0: 20 20 72 65 74 75 72 6e 20 63 3d 3d 30 20 26 26    return c==0 &&
4500: 20 69 3e 30 20 26 26 20 0a 20 20 20 20 20 20 28   i>0 && .      (
4510: 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26  i<19 || (i==19 &
4520: 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39  & memcmp(zNum,"9
4530: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
4540: 30 37 22 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d 0a  07",19)<=0));.}.
4550: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  ./*.** The strin
4560: 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  g zNum represent
4570: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54  s an integer.  T
4580: 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f  here might be so
4590: 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f  me other.** info
45a0: 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e  rmation followin
45b0: 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f  g the integer to
45c0: 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74  o, but that part
45d0: 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20   is ignored..** 
45e0: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74  If the integer t
45f0: 68 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  hat the prefix o
4600: 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  f zNum represent
4610: 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a  s will fit in a.
4620: 2a 2a 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64  ** 32-bit signed
4630: 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e   integer, return
4640: 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73   TRUE.  Otherwis
4650: 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a  e return FALSE..
4660: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
4670: 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45  ne returns FALSE
4680: 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20   for the string 
4690: 2d 32 31 34 37 34 38 33 36 34 38 20 65 76 65 6e  -2147483648 even
46a0: 20 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75   that.** that nu
46b0: 6d 62 65 72 20 77 69 6c 6c 20 69 6e 20 66 61 63  mber will in fac
46c0: 74 20 66 69 74 20 69 6e 20 61 20 33 32 2d 62 69  t fit in a 32-bi
46d0: 74 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 20  t integer.  But 
46e0: 70 6f 73 69 74 69 76 65 0a 2a 2a 20 32 31 34 37  positive.** 2147
46f0: 34 38 33 36 34 38 20 77 69 6c 6c 20 6e 6f 74 20  483648 will not 
4700: 66 69 74 20 69 6e 20 33 32 20 62 69 74 73 2e 20  fit in 32 bits. 
4710: 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61 66   So it seems saf
4720: 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20  er to return.** 
4730: 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  false..*/.static
4740: 20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74 73   int sqlite3Fits
4750: 49 6e 33 32 42 69 74 73 28 63 6f 6e 73 74 20 63  In32Bits(const c
4760: 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69 6e  har *zNum){.  in
4770: 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a  t i, c;.  if( *z
4780: 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e 75  Num=='-' || *zNu
4790: 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b 3b  m=='+' ) zNum++;
47a0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a  .  for(i=0; (c=z
47b0: 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20  Num[i])>='0' && 
47c0: 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20  c<='9'; i++){}. 
47d0: 20 72 65 74 75 72 6e 20 69 3c 31 30 20 7c 7c 20   return i<10 || 
47e0: 28 69 3d 3d 31 30 20 26 26 20 6d 65 6d 63 6d 70  (i==10 && memcmp
47f0: 28 7a 4e 75 6d 2c 22 32 31 34 37 34 38 33 36 34  (zNum,"214748364
4800: 37 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d 0a 0a 2f  7",10)<=0);.}../
4810: 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70  *.** If zNum rep
4820: 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67  resents an integ
4830: 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74  er that will fit
4840: 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68 65   in 32-bits, the
4850: 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65  n set.** *pValue
4860: 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72   to that integer
4870: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65   and return true
4880: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74  .  Otherwise ret
4890: 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e  urn false..*/.in
48a0: 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
48b0: 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  2(const char *zN
48c0: 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75 65 29  um, int *pValue)
48d0: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 46  {.  if( sqlite3F
48e0: 69 74 73 49 6e 33 32 42 69 74 73 28 7a 4e 75 6d  itsIn32Bits(zNum
48f0: 29 20 29 7b 0a 20 20 20 20 2a 70 56 61 6c 75 65  ) ){.    *pValue
4900: 20 3d 20 61 74 6f 69 28 7a 4e 75 6d 29 3b 0a 20   = atoi(zNum);. 
4910: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
4920: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
4930: 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  /*.** The string
4940: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
4950: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68   an integer.  Th
4960: 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d  ere might be som
4970: 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72  e other.** infor
4980: 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67  mation following
4990: 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f   the integer too
49a0: 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74 20  , but that part 
49b0: 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49  is ignored..** I
49c0: 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 68  f the integer th
49d0: 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  at the prefix of
49e0: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
49f0: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a   will fit in a.*
4a00: 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  * 64-bit signed 
4a10: 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20  integer, return 
4a20: 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65  TRUE.  Otherwise
4a30: 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a   return FALSE..*
4a40: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4a50: 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20  e returns FALSE 
4a60: 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d  for the string -
4a70: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
4a80: 38 30 38 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a  808 even that.**
4a90: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69 6c   that number wil
4aa0: 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69 74  l, in theory fit
4ab0: 20 69 6e 20 61 20 36 34 2d 62 69 74 20 69 6e 74   in a 64-bit int
4ac0: 65 67 65 72 2e 20 20 50 6f 73 69 74 69 76 65 0a  eger.  Positive.
4ad0: 2a 2a 20 39 32 32 33 33 37 33 30 33 36 38 35 34  ** 9223373036854
4ae0: 37 37 35 38 30 38 20 77 69 6c 6c 20 6e 6f 74 20  775808 will not 
4af0: 66 69 74 20 69 6e 20 36 34 20 62 69 74 73 2e 20  fit in 64 bits. 
4b00: 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61 66   So it seems saf
4b10: 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20  er to return.** 
4b20: 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  false..*/.int sq
4b30: 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69 74  lite3FitsIn64Bit
4b40: 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  s(const char *zN
4b50: 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b  um){.  int i, c;
4b60: 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d  .  if( *zNum=='-
4b70: 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20  ' || *zNum=='+' 
4b80: 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28  ) zNum++;.  for(
4b90: 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29  i=0; (c=zNum[i])
4ba0: 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 3b  >='0' && c<='9';
4bb0: 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72 6e   i++){}.  return
4bc0: 20 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20   i<19 || (i==19 
4bd0: 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22  && memcmp(zNum,"
4be0: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
4bf0: 38 30 37 22 2c 31 39 29 3c 3d 30 29 3b 0a 7d 0a  807",19)<=0);.}.
4c00: 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  ../*.** Change t
4c10: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
4c20: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49  from SQLITE_MAGI
4c30: 43 5f 4f 50 45 4e 20 74 6f 20 53 51 4c 49 54 45  C_OPEN to SQLITE
4c40: 5f 4d 41 47 49 43 5f 42 55 53 59 2e 0a 2a 2a 20  _MAGIC_BUSY..** 
4c50: 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  Return an error 
4c60: 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68  (non-zero) if th
4c70: 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20  e magic was not 
4c80: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
4c90: 4e 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72  N.** when this r
4ca0: 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64  outine is called
4cb0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
4cc0: 74 69 6e 65 20 69 73 20 61 20 61 74 74 65 6d 70  tine is a attemp
4cd0: 74 20 74 6f 20 64 65 74 65 63 74 20 69 66 20 74  t to detect if t
4ce0: 77 6f 20 74 68 72 65 61 64 73 20 75 73 65 20 74  wo threads use t
4cf0: 68 65 0a 2a 2a 20 73 61 6d 65 20 73 71 6c 69 74  he.** same sqlit
4d00: 65 2a 20 70 6f 69 6e 74 65 72 20 61 74 20 74 68  e* pointer at th
4d10: 65 20 73 61 6d 65 20 74 69 6d 65 2e 20 20 54 68  e same time.  Th
4d20: 65 72 65 20 69 73 20 61 20 72 61 63 65 20 0a 2a  ere is a race .*
4d30: 2a 20 63 6f 6e 64 69 74 69 6f 6e 20 73 6f 20 69  * condition so i
4d40: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
4d50: 61 74 20 74 68 65 20 65 72 72 6f 72 20 69 73 20  at the error is 
4d60: 6e 6f 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2a  not detected..**
4d70: 20 42 75 74 20 75 73 75 61 6c 6c 79 20 74 68 65   But usually the
4d80: 20 70 72 6f 62 6c 65 6d 20 77 69 6c 6c 20 62 65   problem will be
4d90: 20 73 65 65 6e 2e 20 20 54 68 65 20 72 65 73 75   seen.  The resu
4da0: 6c 74 20 77 69 6c 6c 20 62 65 20 61 6e 0a 2a 2a  lt will be an.**
4db0: 20 65 72 72 6f 72 20 77 68 69 63 68 20 63 61 6e   error which can
4dc0: 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 62 75   be used to debu
4dd0: 67 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  g the applicatio
4de0: 6e 20 74 68 61 74 20 69 73 0a 2a 2a 20 75 73 69  n that is.** usi
4df0: 6e 67 20 53 51 4c 69 74 65 20 69 6e 63 6f 72 72  ng SQLite incorr
4e00: 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  ectly..**.** Tic
4e10: 6b 65 74 20 23 32 30 32 3a 20 20 49 66 20 64 62  ket #202:  If db
4e20: 2d 3e 6d 61 67 69 63 20 69 73 20 6e 6f 74 20 61  ->magic is not a
4e30: 20 76 61 6c 69 64 20 6f 70 65 6e 20 76 61 6c 75   valid open valu
4e40: 65 2c 20 74 61 6b 65 20 63 61 72 65 20 6e 6f 74  e, take care not
4e50: 0a 2a 2a 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  .** to modify th
4e60: 65 20 64 62 20 73 74 72 75 63 74 75 72 65 20 61  e db structure a
4e70: 74 20 61 6c 6c 2e 20 20 49 74 20 63 6f 75 6c 64  t all.  It could
4e80: 20 62 65 20 74 68 61 74 20 64 62 20 69 73 20 61   be that db is a
4e90: 20 73 74 61 6c 65 0a 2a 2a 20 70 6f 69 6e 74 65   stale.** pointe
4ea0: 72 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  r.  In other wor
4eb0: 64 73 2c 20 69 74 20 63 6f 75 6c 64 20 62 65 20  ds, it could be 
4ec0: 74 68 61 74 20 74 68 65 72 65 20 68 61 73 20 62  that there has b
4ed0: 65 65 6e 20 61 20 70 72 69 6f 72 0a 2a 2a 20 63  een a prior.** c
4ee0: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  all to sqlite3_c
4ef0: 6c 6f 73 65 28 64 62 29 20 61 6e 64 20 64 62 20  lose(db) and db 
4f00: 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63  has been dealloc
4f10: 61 74 65 64 2e 20 20 41 6e 64 20 77 65 20 64 6f  ated.  And we do
4f20: 0a 2a 2a 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20  .** not want to 
4f30: 77 72 69 74 65 20 69 6e 74 6f 20 64 65 61 6c 6c  write into deall
4f40: 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a  ocated memory..*
4f50: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  /.int sqlite3Saf
4f60: 65 74 79 4f 6e 28 73 71 6c 69 74 65 33 20 2a 64  etyOn(sqlite3 *d
4f70: 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  b){.  if( db->ma
4f80: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
4f90: 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20 20 64 62  C_OPEN ){.    db
4fa0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
4fb0: 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 20  _MAGIC_BUSY;.   
4fc0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c   return 0;.  }el
4fd0: 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  se if( db->magic
4fe0: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  ==SQLITE_MAGIC_B
4ff0: 55 53 59 20 7c 7c 20 64 62 2d 3e 6d 61 67 69 63  USY || db->magic
5000: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  ==SQLITE_MAGIC_E
5010: 52 52 4f 52 20 29 7b 0a 20 20 20 20 64 62 2d 3e  RROR ){.    db->
5020: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
5030: 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20  AGIC_ERROR;.    
5040: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
5050: 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20  ITE_Interrupt;. 
5060: 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
5070: 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  ../*.** Change t
5080: 68 65 20 6d 61 67 69 63 20 66 72 6f 6d 20 53 51  he magic from SQ
5090: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
50a0: 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  to SQLITE_MAGIC_
50b0: 4f 50 45 4e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  OPEN..** Return 
50c0: 61 6e 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65  an error (non-ze
50d0: 72 6f 29 20 69 66 20 74 68 65 20 6d 61 67 69 63  ro) if the magic
50e0: 20 77 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f   was not SQLITE_
50f0: 4d 41 47 49 43 5f 42 55 53 59 0a 2a 2a 20 77 68  MAGIC_BUSY.** wh
5100: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
5110: 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 69 6e  is called..*/.in
5120: 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  t sqlite3SafetyO
5130: 66 66 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  ff(sqlite3 *db){
5140: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  .  if( db->magic
5150: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  ==SQLITE_MAGIC_B
5160: 55 53 59 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  USY ){.    db->m
5170: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
5180: 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 20 20 72 65  GIC_OPEN;.    re
5190: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
51a0: 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  if( db->magic==S
51b0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
51c0: 20 7c 7c 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53   || db->magic==S
51d0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
51e0: 52 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  R ){.    db->mag
51f0: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
5200: 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62 2d  C_ERROR;.    db-
5210: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
5220: 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _Interrupt;.  }.
5230: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f    return 1;.}../
5240: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 6d 61  *.** Check to ma
5250: 6b 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20  ke sure we have 
5260: 61 20 76 61 6c 69 64 20 64 62 20 70 6f 69 6e 74  a valid db point
5270: 65 72 2e 20 20 54 68 69 73 20 74 65 73 74 20 69  er.  This test i
5280: 73 20 6e 6f 74 0a 2a 2a 20 66 6f 6f 6c 70 72 6f  s not.** foolpro
5290: 6f 66 20 62 75 74 20 69 74 20 64 6f 65 73 20 70  of but it does p
52a0: 72 6f 76 69 64 65 20 73 6f 6d 65 20 6d 65 61 73  rovide some meas
52b0: 75 72 65 20 6f 66 20 70 72 6f 74 65 63 74 69 6f  ure of protectio
52c0: 6e 20 61 67 61 69 6e 73 74 0a 2a 2a 20 6d 69 73  n against.** mis
52d0: 75 73 65 20 6f 66 20 74 68 65 20 69 6e 74 65 72  use of the inter
52e0: 66 61 63 65 20 73 75 63 68 20 61 73 20 70 61 73  face such as pas
52f0: 73 69 6e 67 20 69 6e 20 64 62 20 70 6f 69 6e 74  sing in db point
5300: 65 72 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  ers that are.** 
5310: 4e 55 4c 4c 20 6f 72 20 77 68 69 63 68 20 68 61  NULL or which ha
5320: 76 65 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73  ve been previous
5330: 6c 79 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  ly closed.  If t
5340: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
5350: 72 6e 73 0a 2a 2a 20 54 52 55 45 20 69 74 20 6d  rns.** TRUE it m
5360: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 64 62  eans that the db
5370: 20 70 6f 69 6e 74 65 72 20 69 73 20 69 6e 76 61   pointer is inva
5380: 6c 69 64 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e  lid and should n
5390: 6f 74 20 62 65 0a 2a 2a 20 64 65 72 65 66 65 72  ot be.** derefer
53a0: 65 6e 63 65 64 20 66 6f 72 20 61 6e 79 20 72 65  enced for any re
53b0: 61 73 6f 6e 2e 20 20 54 68 65 20 63 61 6c 6c 69  ason.  The calli
53c0: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75  ng function shou
53d0: 6c 64 20 69 6e 76 6f 6b 65 0a 2a 2a 20 53 51 4c  ld invoke.** SQL
53e0: 49 54 45 5f 4d 49 53 55 53 45 20 69 6d 6d 65 64  ITE_MISUSE immed
53f0: 69 61 74 65 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73  iately..*/.int s
5400: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
5410: 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  k(sqlite3 *db){.
5420: 20 20 69 6e 74 20 6d 61 67 69 63 3b 0a 20 20 69    int magic;.  i
5430: 66 28 20 64 62 3d 3d 30 20 29 20 72 65 74 75 72  f( db==0 ) retur
5440: 6e 20 31 3b 0a 20 20 6d 61 67 69 63 20 3d 20 64  n 1;.  magic = d
5450: 62 2d 3e 6d 61 67 69 63 3b 0a 20 20 69 66 28 20  b->magic;.  if( 
5460: 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41  magic!=SQLITE_MA
5470: 47 49 43 5f 43 4c 4f 53 45 44 20 26 26 0a 20 20  GIC_CLOSED &&.  
5480: 20 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53 51         magic!=SQ
5490: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
54a0: 26 26 0a 20 20 20 20 20 20 20 20 20 6d 61 67 69  &&.         magi
54b0: 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c!=SQLITE_MAGIC_
54c0: 42 55 53 59 20 29 20 72 65 74 75 72 6e 20 31 3b  BUSY ) return 1;
54d0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
54e0: 2f 2a 0a 2a 2a 20 54 68 65 20 76 61 72 69 61 62  /*.** The variab
54f0: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
5500: 72 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 61 73  r encoding is as
5510: 20 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20   follows:.**.** 
5520: 4b 45 59 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20  KEY:.**         
5530: 41 20 3d 20 30 78 78 78 78 78 78 78 20 20 20 20  A = 0xxxxxxx    
5540: 37 20 62 69 74 73 20 6f 66 20 64 61 74 61 20 61  7 bits of data a
5550: 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a  nd one flag bit.
5560: 2a 2a 20 20 20 20 20 20 20 20 20 42 20 3d 20 31  **         B = 1
5570: 78 78 78 78 78 78 78 20 20 20 20 37 20 62 69 74  xxxxxxx    7 bit
5580: 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e  s of data and on
5590: 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20  e flag bit.**   
55a0: 20 20 20 20 20 20 43 20 3d 20 78 78 78 78 78 78        C = xxxxxx
55b0: 78 78 20 20 20 20 38 20 62 69 74 73 20 6f 66 20  xx    8 bits of 
55c0: 64 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69  data.**.**  7 bi
55d0: 74 73 20 2d 20 41 0a 2a 2a 20 31 34 20 62 69 74  ts - A.** 14 bit
55e0: 73 20 2d 20 42 41 0a 2a 2a 20 32 31 20 62 69 74  s - BA.** 21 bit
55f0: 73 20 2d 20 42 42 41 0a 2a 2a 20 32 38 20 62 69  s - BBA.** 28 bi
5600: 74 73 20 2d 20 42 42 42 41 0a 2a 2a 20 33 35 20  ts - BBBA.** 35 
5610: 62 69 74 73 20 2d 20 42 42 42 42 41 0a 2a 2a 20  bits - BBBBA.** 
5620: 34 32 20 62 69 74 73 20 2d 20 42 42 42 42 42 41  42 bits - BBBBBA
5630: 0a 2a 2a 20 34 39 20 62 69 74 73 20 2d 20 42 42  .** 49 bits - BB
5640: 42 42 42 42 41 0a 2a 2a 20 35 36 20 62 69 74 73  BBBBA.** 56 bits
5650: 20 2d 20 42 42 42 42 42 42 42 41 0a 2a 2a 20 36   - BBBBBBBA.** 6
5660: 34 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42  4 bits - BBBBBBB
5670: 42 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69  BC.*/../*.** Wri
5680: 74 65 20 61 20 36 34 2d 62 69 74 20 76 61 72 69  te a 64-bit vari
5690: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
56a0: 67 65 72 20 74 6f 20 6d 65 6d 6f 72 79 20 73 74  ger to memory st
56b0: 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a  arting at p[0]..
56c0: 2a 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  ** The length of
56d0: 20 64 61 74 61 20 77 72 69 74 65 20 77 69 6c 6c   data write will
56e0: 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
56f0: 64 20 39 20 62 79 74 65 73 2e 20 20 54 68 65 20  d 9 bytes.  The 
5700: 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20 62 79 74  number.** of byt
5710: 65 73 20 77 72 69 74 74 65 6e 20 69 73 20 72 65  es written is re
5720: 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  turned..**.** A 
5730: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
5740: 69 6e 74 65 67 65 72 20 63 6f 6e 73 69 73 74 73  integer consists
5750: 20 6f 66 20 74 68 65 20 6c 6f 77 65 72 20 37 20   of the lower 7 
5760: 62 69 74 73 20 6f 66 20 65 61 63 68 20 62 79 74  bits of each byt
5770: 65 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20 62 79 74  e.** for all byt
5780: 65 73 20 74 68 61 74 20 68 61 76 65 20 74 68 65  es that have the
5790: 20 38 74 68 20 62 69 74 20 73 65 74 20 61 6e 64   8th bit set and
57a0: 20 6f 6e 65 20 62 79 74 65 20 77 69 74 68 20 74   one byte with t
57b0: 68 65 20 38 74 68 0a 2a 2a 20 62 69 74 20 63 6c  he 8th.** bit cl
57c0: 65 61 72 2e 20 20 45 78 63 65 70 74 2c 20 69 66  ear.  Except, if
57d0: 20 77 65 20 67 65 74 20 74 6f 20 74 68 65 20 39   we get to the 9
57e0: 74 68 20 62 79 74 65 2c 20 69 74 20 73 74 6f 72  th byte, it stor
57f0: 65 73 20 74 68 65 20 66 75 6c 6c 0a 2a 2a 20 38  es the full.** 8
5800: 20 62 69 74 73 20 61 6e 64 20 69 73 20 74 68 65   bits and is the
5810: 20 6c 61 73 74 20 62 79 74 65 2e 0a 2a 2f 0a 69   last byte..*/.i
5820: 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
5830: 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
5840: 72 20 2a 70 2c 20 75 36 34 20 76 29 7b 0a 20 20  r *p, u64 v){.  
5850: 69 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75  int i, j, n;.  u
5860: 38 20 62 75 66 5b 31 30 5d 3b 0a 20 20 69 66 28  8 buf[10];.  if(
5870: 20 76 20 26 20 30 78 66 66 30 30 30 30 30 30 30   v & 0xff0000000
5880: 30 30 30 30 30 30 30 20 29 7b 0a 20 20 20 20 70  0000000 ){.    p
5890: 5b 38 5d 20 3d 20 76 3b 0a 20 20 20 20 76 20 3e  [8] = v;.    v >
58a0: 3e 3d 20 38 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >= 8;.    for(i=
58b0: 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20  7; i>=0; i--){. 
58c0: 20 20 20 20 20 70 5b 69 5d 20 3d 20 28 76 20 26       p[i] = (v &
58d0: 20 30 78 37 66 29 20 7c 20 30 78 38 30 3b 0a 20   0x7f) | 0x80;. 
58e0: 20 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20       v >>= 7;.  
58f0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 39    }.    return 9
5900: 3b 0a 20 20 7d 20 20 20 20 0a 20 20 6e 20 3d 20  ;.  }    .  n = 
5910: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 62 75 66  0;.  do{.    buf
5920: 5b 6e 2b 2b 5d 20 3d 20 28 76 20 26 20 30 78 37  [n++] = (v & 0x7
5930: 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 76  f) | 0x80;.    v
5940: 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65   >>= 7;.  }while
5950: 28 20 76 21 3d 30 20 29 3b 0a 20 20 62 75 66 5b  ( v!=0 );.  buf[
5960: 30 5d 20 26 3d 20 30 78 37 66 3b 0a 20 20 61 73  0] &= 0x7f;.  as
5970: 73 65 72 74 28 20 6e 3c 3d 39 20 29 3b 0a 20 20  sert( n<=9 );.  
5980: 66 6f 72 28 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20  for(i=0, j=n-1; 
5990: 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b  j>=0; j--, i++){
59a0: 0a 20 20 20 20 70 5b 69 5d 20 3d 20 62 75 66 5b  .    p[i] = buf[
59b0: 6a 5d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  j];.  }.  return
59c0: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61   n;.}../*.** Rea
59d0: 64 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61  d a 64-bit varia
59e0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
59f0: 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73  er from memory s
5a00: 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e  tarting at p[0].
5a10: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
5a20: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
5a30: 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ead.  The value 
5a40: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e  is stored in *v.
5a50: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
5a60: 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
5a70: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
5a80: 20 75 36 34 20 2a 76 29 7b 0a 20 20 75 33 32 20   u64 *v){.  u32 
5a90: 78 3b 0a 20 20 75 36 34 20 78 36 34 3b 0a 20 20  x;.  u64 x64;.  
5aa0: 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65  int n;.  unsigne
5ab0: 64 20 63 68 61 72 20 63 3b 0a 20 20 69 66 28 20  d char c;.  if( 
5ac0: 28 28 63 20 3d 20 70 5b 30 5d 29 20 26 20 30 78  ((c = p[0]) & 0x
5ad0: 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76  80)==0 ){.    *v
5ae0: 20 3d 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e   = c;.    return
5af0: 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 63 20   1;.  }.  x = c 
5b00: 26 20 30 78 37 66 3b 0a 20 20 69 66 28 20 28 28  & 0x7f;.  if( ((
5b10: 63 20 3d 20 70 5b 31 5d 29 20 26 20 30 78 38 30  c = p[1]) & 0x80
5b20: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
5b30: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
5b40: 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 20   return 2;.  }. 
5b50: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63   x = (x<<7) | (c
5b60: 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20 28 28  &0x7f);.  if( ((
5b70: 63 20 3d 20 70 5b 32 5d 29 20 26 20 30 78 38 30  c = p[2]) & 0x80
5b80: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
5b90: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
5ba0: 20 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d 0a 20   return 3;.  }. 
5bb0: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63   x = (x<<7) | (c
5bc0: 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20 28 28  &0x7f);.  if( ((
5bd0: 63 20 3d 20 70 5b 33 5d 29 20 26 20 30 78 38 30  c = p[3]) & 0x80
5be0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
5bf0: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
5c00: 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a 20   return 4;.  }. 
5c10: 20 78 36 34 20 3d 20 28 78 3c 3c 37 29 20 7c 20   x64 = (x<<7) | 
5c20: 28 63 26 30 78 37 66 29 3b 0a 20 20 6e 20 3d 20  (c&0x7f);.  n = 
5c30: 34 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 63 20 3d  4;.  do{.    c =
5c40: 20 70 5b 6e 2b 2b 5d 3b 0a 20 20 20 20 69 66 28   p[n++];.    if(
5c50: 20 6e 3d 3d 39 20 29 7b 0a 20 20 20 20 20 20 78   n==9 ){.      x
5c60: 36 34 20 3d 20 28 78 36 34 3c 3c 38 29 20 7c 20  64 = (x64<<8) | 
5c70: 63 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  c;.      break;.
5c80: 20 20 20 20 7d 0a 20 20 20 20 78 36 34 20 3d 20      }.    x64 = 
5c90: 28 78 36 34 3c 3c 37 29 20 7c 20 28 63 26 30 78  (x64<<7) | (c&0x
5ca0: 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28  7f);.  }while( (
5cb0: 63 20 26 20 30 78 38 30 29 21 3d 30 20 29 3b 0a  c & 0x80)!=0 );.
5cc0: 20 20 2a 76 20 3d 20 78 36 34 3b 0a 20 20 72 65    *v = x64;.  re
5cd0: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
5ce0: 20 52 65 61 64 20 61 20 33 32 2d 62 69 74 20 76   Read a 32-bit v
5cf0: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
5d00: 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f  nteger from memo
5d10: 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70  ry starting at p
5d20: 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  [0]..** Return t
5d30: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
5d40: 65 73 20 72 65 61 64 2e 20 20 54 68 65 20 76 61  es read.  The va
5d50: 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  lue is stored in
5d60: 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69   *v..*/.int sqli
5d70: 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
5d80: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
5d90: 61 72 20 2a 70 2c 20 75 33 32 20 2a 76 29 7b 0a  ar *p, u32 *v){.
5da0: 20 20 75 33 32 20 78 3b 0a 20 20 69 6e 74 20 6e    u32 x;.  int n
5db0: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
5dc0: 72 20 63 3b 0a 23 69 66 20 30 0a 20 20 69 66 28  r c;.#if 0.  if(
5dd0: 20 28 28 63 20 3d 20 70 5b 30 5d 29 20 26 20 30   ((c = p[0]) & 0
5de0: 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a  x80)==0 ){.    *
5df0: 76 20 3d 20 63 3b 0a 20 20 20 20 72 65 74 75 72  v = c;.    retur
5e00: 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 63  n 1;.  }.  x = c
5e10: 20 26 20 30 78 37 66 3b 0a 20 20 69 66 28 20 28   & 0x7f;.  if( (
5e20: 28 63 20 3d 20 70 5b 31 5d 29 20 26 20 30 78 38  (c = p[1]) & 0x8
5e30: 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20  0)==0 ){.    *v 
5e40: 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20  = (x<<7) | c;.  
5e50: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a    return 2;.  }.
5e60: 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28    x = (x<<7) | (
5e70: 63 20 26 20 30 78 37 66 29 3b 0a 23 65 6c 73 65  c & 0x7f);.#else
5e80: 0a 20 20 69 66 28 20 28 28 73 69 67 6e 65 64 20  .  if( ((signed 
5e90: 63 68 61 72 2a 29 70 29 5b 30 5d 3e 3d 30 20 29  char*)p)[0]>=0 )
5ea0: 7b 0a 20 20 20 20 2a 76 20 3d 20 70 5b 30 5d 3b  {.    *v = p[0];
5eb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
5ec0: 20 7d 0a 20 20 78 20 3d 20 70 5b 30 5d 20 26 20   }.  x = p[0] & 
5ed0: 30 78 37 66 3b 0a 20 20 69 66 28 20 28 28 73 69  0x7f;.  if( ((si
5ee0: 67 6e 65 64 20 63 68 61 72 2a 29 70 29 5b 31 5d  gned char*)p)[1]
5ef0: 3e 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20  >=0 ){.    *v = 
5f00: 28 78 3c 3c 37 29 20 7c 20 70 5b 31 5d 3b 0a 20  (x<<7) | p[1];. 
5f10: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
5f20: 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20  .  x = (x<<7) | 
5f30: 28 70 5b 31 5d 20 26 20 30 78 37 66 29 3b 0a 23  (p[1] & 0x7f);.#
5f40: 65 6e 64 69 66 0a 20 20 6e 20 3d 20 32 3b 0a 20  endif.  n = 2;. 
5f50: 20 64 6f 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c   do{.    x = (x<
5f60: 3c 37 29 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b  <7) | ((c = p[n+
5f70: 2b 5d 29 26 30 78 37 66 29 3b 0a 20 20 7d 77 68  +])&0x7f);.  }wh
5f80: 69 6c 65 28 20 28 63 20 26 20 30 78 38 30 29 21  ile( (c & 0x80)!
5f90: 3d 30 20 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a  =0 && n<9 );.  *
5fa0: 76 20 3d 20 78 3b 0a 20 20 72 65 74 75 72 6e 20  v = x;.  return 
5fb0: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  n;.}../*.** Retu
5fc0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
5fd0: 20 62 79 74 65 73 20 74 68 61 74 20 77 69 6c 6c   bytes that will
5fe0: 20 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73 74   be needed to st
5ff0: 6f 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a  ore the given.**
6000: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e   64-bit integer.
6010: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
6020: 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b  arintLen(u64 v){
6030: 0a 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20  .  int i = 0;.  
6040: 64 6f 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20  do{.    i++;.   
6050: 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69   v >>= 7;.  }whi
6060: 6c 65 28 20 76 21 3d 30 20 26 26 20 69 3c 39 20  le( v!=0 && i<9 
6070: 29 3b 0a 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d  );.  return i;.}
6080: 0a 0a 23 69 66 20 28 21 64 65 66 69 6e 65 64 28  ..#if (!defined(
6090: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42  SQLITE_OMIT_BLOB
60a0: 5f 4c 49 54 45 52 41 4c 29 20 26 26 20 21 64 65  _LITERAL) && !de
60b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
60c0: 5f 43 4f 44 45 43 29 29 20 5c 0a 20 20 20 20 7c  _CODEC)) \.    |
60d0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
60e0: 5f 54 45 53 54 29 0a 2f 2a 0a 2a 2a 20 54 72 61  _TEST)./*.** Tra
60f0: 6e 73 6c 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nslate a single 
6100: 62 79 74 65 20 6f 66 20 48 65 78 20 69 6e 74 6f  byte of Hex into
6110: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
6120: 73 74 61 74 69 63 20 69 6e 74 20 68 65 78 54 6f  static int hexTo
6130: 49 6e 74 28 69 6e 74 20 68 29 7b 0a 20 20 69 66  Int(int h){.  if
6140: 28 20 68 3e 3d 27 30 27 20 26 26 20 68 3c 3d 27  ( h>='0' && h<='
6150: 39 27 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  9' ){.    return
6160: 20 68 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73   h - '0';.  }els
6170: 65 20 69 66 28 20 68 3e 3d 27 61 27 20 26 26 20  e if( h>='a' && 
6180: 68 3c 3d 27 66 27 20 29 7b 0a 20 20 20 20 72 65  h<='f' ){.    re
6190: 74 75 72 6e 20 68 20 2d 20 27 61 27 20 2b 20 31  turn h - 'a' + 1
61a0: 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
61b0: 61 73 73 65 72 74 28 20 68 3e 3d 27 41 27 20 26  assert( h>='A' &
61c0: 26 20 68 3c 3d 27 46 27 20 29 3b 0a 20 20 20 20  & h<='F' );.    
61d0: 72 65 74 75 72 6e 20 68 20 2d 20 27 41 27 20 2b  return h - 'A' +
61e0: 20 31 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69   10;.  }.}.#endi
61f0: 66 20 2f 2a 20 28 21 53 51 4c 49 54 45 5f 4f 4d  f /* (!SQLITE_OM
6200: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20  IT_BLOB_LITERAL 
6210: 26 26 20 21 53 51 4c 49 54 45 5f 48 41 53 5f 43  && !SQLITE_HAS_C
6220: 4f 44 45 43 29 20 7c 7c 20 53 51 4c 49 54 45 5f  ODEC) || SQLITE_
6230: 54 45 53 54 20 2a 2f 0a 0a 23 69 66 20 21 64 65  TEST */..#if !de
6240: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
6250: 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20  T_BLOB_LITERAL) 
6260: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
6270: 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 2f 2a 0a  E_HAS_CODEC)./*.
6280: 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 42 4c 4f  ** Convert a BLO
6290: 42 20 6c 69 74 65 72 61 6c 20 6f 66 20 74 68 65  B literal of the
62a0: 20 66 6f 72 6d 20 22 78 27 68 68 68 68 68 68 27   form "x'hhhhhh'
62b0: 22 20 69 6e 74 6f 20 69 74 73 20 62 69 6e 61 72  " into its binar
62c0: 79 0a 2a 2a 20 76 61 6c 75 65 2e 20 20 52 65 74  y.** value.  Ret
62d0: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  urn a pointer to
62e0: 20 69 74 73 20 62 69 6e 61 72 79 20 76 61 6c 75   its binary valu
62f0: 65 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c  e.  Space to hol
6300: 64 20 74 68 65 0a 2a 2a 20 62 69 6e 61 72 79 20  d the.** binary 
6310: 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 6f  value has been o
6320: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
6330: 6c 6f 63 20 61 6e 64 20 6d 75 73 74 20 62 65 20  loc and must be 
6340: 66 72 65 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  freed by.** the 
6350: 63 61 6c 6c 69 6e 67 20 72 6f 75 74 69 6e 65 2e  calling routine.
6360: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
6370: 33 48 65 78 54 6f 42 6c 6f 62 28 63 6f 6e 73 74  3HexToBlob(const
6380: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61   char *z){.  cha
6390: 72 20 2a 7a 42 6c 6f 62 3b 0a 20 20 69 6e 74 20  r *zBlob;.  int 
63a0: 69 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72  i;.  int n = str
63b0: 6c 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 6e 25  len(z);.  if( n%
63c0: 32 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20  2 ) return 0;.. 
63d0: 20 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a   zBlob = (char *
63e0: 29 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 2f  )sqliteMalloc(n/
63f0: 32 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  2);.  for(i=0; i
6400: 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20 20 20 20 7a  <n; i+=2){.    z
6410: 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 28 68 65 78  Blob[i/2] = (hex
6420: 54 6f 49 6e 74 28 7a 5b 69 5d 29 3c 3c 34 29 20  ToInt(z[i])<<4) 
6430: 7c 20 68 65 78 54 6f 49 6e 74 28 7a 5b 69 2b 31  | hexToInt(z[i+1
6440: 5d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ]);.  }.  return
6450: 20 7a 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64 69 66   zBlob;.}.#endif
6460: 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   /* !SQLITE_OMIT
6470: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 7c 7c  _BLOB_LITERAL ||
6480: 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
6490: 43 20 2a 2f 0a 0a 23 69 66 20 64 65 66 69 6e 65  C */..#if define
64a0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 2f  d(SQLITE_TEST)./
64b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 65 78  *.** Convert tex
64c0: 74 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  t generated by t
64d0: 68 65 20 22 25 70 22 20 63 6f 6e 76 65 72 73 69  he "%p" conversi
64e0: 6f 6e 20 66 6f 72 6d 61 74 20 62 61 63 6b 20 69  on format back i
64f0: 6e 74 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  nto.** a pointer
6500: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
6510: 65 33 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  e3TextToPtr(cons
6520: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 76 6f  t char *z){.  vo
6530: 69 64 20 2a 70 3b 0a 20 20 75 36 34 20 76 3b 0a  id *p;.  u64 v;.
6540: 20 20 75 33 32 20 76 32 3b 0a 20 20 69 66 28 20    u32 v2;.  if( 
6550: 7a 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 5b 31  z[0]=='0' && z[1
6560: 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 7a 20  ]=='x' ){.    z 
6570: 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 76 20 3d 20  += 2;.  }.  v = 
6580: 30 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 29  0;.  while( *z )
6590: 7b 0a 20 20 20 20 76 20 3d 20 28 76 3c 3c 34 29  {.    v = (v<<4)
65a0: 20 2b 20 68 65 78 54 6f 49 6e 74 28 2a 7a 29 3b   + hexToInt(*z);
65b0: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20  .    z++;.  }.  
65c0: 69 66 28 20 73 69 7a 65 6f 66 28 70 29 3d 3d 73  if( sizeof(p)==s
65d0: 69 7a 65 6f 66 28 76 29 20 29 7b 0a 20 20 20 20  izeof(v) ){.    
65e0: 70 20 3d 20 2a 28 76 6f 69 64 2a 2a 29 26 76 3b  p = *(void**)&v;
65f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
6600: 73 65 72 74 28 20 73 69 7a 65 6f 66 28 70 29 3d  sert( sizeof(p)=
6610: 3d 73 69 7a 65 6f 66 28 76 32 29 20 29 3b 0a 20  =sizeof(v2) );. 
6620: 20 20 20 76 32 20 3d 20 28 75 33 32 29 76 3b 0a     v2 = (u32)v;.
6630: 20 20 20 20 70 20 3d 20 2a 28 76 6f 69 64 2a 2a      p = *(void**
6640: 29 26 76 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75  )&v2;.  }.  retu
6650: 72 6e 20 70 3b 0a 7d 0a 23 65 6e 64 69 66 0a     rn p;.}.#endif.