/ Hex Artifact Content
Login

Artifact 1e1402e7115d0a81f92f43be50a2198c85fced5f:


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: 33 34 20 32 30 30 35 2f 30 35 2f 32 32 20 32 30  34 2005/05/22 20
0230: 3a 31 32 3a 33 37 20 64 72 68 20 45 78 70 20 24  :12:37 drh Exp $
0240: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0250: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0260: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0270: 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
0280: 3e 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 45  >..#if SQLITE_ME
0290: 4d 44 45 42 55 47 3e 32 20 26 26 20 64 65 66 69  MDEBUG>2 && defi
02a0: 6e 65 64 28 5f 5f 47 4c 49 42 43 5f 5f 29 0a 23  ned(__GLIBC__).#
02b0: 69 6e 63 6c 75 64 65 20 3c 65 78 65 63 69 6e 66  include <execinf
02c0: 6f 2e 68 3e 0a 76 6f 69 64 20 70 72 69 6e 74 5f  o.h>.void print_
02d0: 73 74 61 63 6b 5f 74 72 61 63 65 28 29 7b 0a 20  stack_trace(){. 
02e0: 20 76 6f 69 64 20 2a 62 74 5b 33 30 5d 3b 0a 20   void *bt[30];. 
02f0: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 20   int i;.  int n 
0300: 3d 20 62 61 63 6b 74 72 61 63 65 28 62 74 2c 20  = backtrace(bt, 
0310: 33 30 29 3b 0a 0a 20 20 66 70 72 69 6e 74 66 28  30);..  fprintf(
0320: 73 74 64 65 72 72 2c 20 22 53 54 41 43 4b 3a 20  stderr, "STACK: 
0330: 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ");.  for(i=0; i
0340: 3c 6e 3b 69 2b 2b 29 7b 0a 20 20 20 20 66 70 72  <n;i++){.    fpr
0350: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 70  intf(stderr, "%p
0360: 20 22 2c 20 62 74 5b 69 5d 29 3b 0a 20 20 7d 0a   ", bt[i]);.  }.
0370: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0380: 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6c 73 65  , "\n");.}.#else
0390: 0a 23 64 65 66 69 6e 65 20 70 72 69 6e 74 5f 73  .#define print_s
03a0: 74 61 63 6b 5f 74 72 61 63 65 28 29 0a 23 65 6e  tack_trace().#en
03b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6d 61  dif../*.** If ma
03c0: 6c 6c 6f 63 28 29 20 65 76 65 72 20 66 61 69 6c  lloc() ever fail
03d0: 73 2c 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  s, this global v
03e0: 61 72 69 61 62 6c 65 20 67 65 74 73 20 73 65 74  ariable gets set
03f0: 20 74 6f 20 31 2e 0a 2a 2a 20 54 68 69 73 20 63   to 1..** This c
0400: 61 75 73 65 73 20 74 68 65 20 6c 69 62 72 61 72  auses the librar
0410: 79 20 74 6f 20 61 62 6f 72 74 20 61 6e 64 20 6e  y to abort and n
0420: 65 76 65 72 20 61 67 61 69 6e 20 66 75 6e 63 74  ever again funct
0430: 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ion..*/.int sqli
0440: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
0450: 64 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66  d = 0;../*.** If
0460: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
0470: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
0480: 6e 20 75 73 65 20 76 65 72 73 69 6f 6e 73 20 6f  n use versions o
0490: 66 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 0a 2a  f malloc() and.*
04a0: 2a 20 66 72 65 65 28 29 20 74 68 61 74 20 74 72  * free() that tr
04b0: 61 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61 67 65  ack memory usage
04c0: 20 61 6e 64 20 63 68 65 63 6b 20 66 6f 72 20 62   and check for b
04d0: 75 66 66 65 72 20 6f 76 65 72 72 75 6e 73 2e 0a  uffer overruns..
04e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
04f0: 5f 4d 45 4d 44 45 42 55 47 0a 0a 2f 2a 0a 2a 2a  _MEMDEBUG../*.**
0500: 20 46 6f 72 20 6b 65 65 70 69 6e 67 20 74 72 61   For keeping tra
0510: 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  ck of the number
0520: 20 6f 66 20 6d 61 6c 6c 6f 63 73 20 61 6e 64 20   of mallocs and 
0530: 66 72 65 65 73 2e 20 20 20 54 68 69 73 0a 2a 2a  frees.   This.**
0540: 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 65 63   is used to chec
0550: 6b 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6c 65 61  k for memory lea
0560: 6b 73 2e 20 20 54 68 65 20 69 4d 61 6c 6c 6f 63  ks.  The iMalloc
0570: 46 61 69 6c 20 61 6e 64 20 69 4d 61 6c 6c 6f 63  Fail and iMalloc
0580: 52 65 73 65 74 0a 2a 2a 20 76 61 6c 75 65 73 20  Reset.** values 
0590: 61 72 65 20 75 73 65 64 20 74 6f 20 73 69 6d 75  are used to simu
05a0: 6c 61 74 65 20 6d 61 6c 6c 6f 63 28 29 20 66 61  late malloc() fa
05b0: 69 6c 75 72 65 73 20 64 75 72 69 6e 67 20 74 65  ilures during te
05c0: 73 74 69 6e 67 20 69 6e 20 0a 2a 2a 20 6f 72 64  sting in .** ord
05d0: 65 72 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  er to verify tha
05e0: 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f  t the library co
05f0: 72 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 73 20  rrectly handles 
0600: 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79  an out-of-memory
0610: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 2a  .** condition..*
0620: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e 4d  /.int sqlite3_nM
0630: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  alloc;         /
0640: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69  * Number of sqli
0650: 74 65 4d 61 6c 6c 6f 63 28 29 20 63 61 6c 6c 73  teMalloc() calls
0660: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
0670: 6e 46 72 65 65 3b 20 20 20 20 20 20 20 20 20 20  nFree;          
0680: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71   /* Number of sq
0690: 6c 69 74 65 46 72 65 65 28 29 20 63 61 6c 6c 73  liteFree() calls
06a0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
06b0: 69 4d 61 6c 6c 6f 63 46 61 69 6c 3b 20 20 20 20  iMallocFail;    
06c0: 20 2f 2a 20 46 61 69 6c 20 73 71 6c 69 74 65 4d   /* Fail sqliteM
06d0: 61 6c 6c 6f 63 28 29 20 61 66 74 65 72 20 74 68  alloc() after th
06e0: 69 73 20 6d 61 6e 79 20 63 61 6c 6c 73 20 2a 2f  is many calls */
06f0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 4d 61  .int sqlite3_iMa
0700: 6c 6c 6f 63 52 65 73 65 74 20 3d 20 2d 31 3b 20  llocReset = -1; 
0710: 2f 2a 20 57 68 65 6e 20 69 4d 61 6c 6c 6f 63 46  /* When iMallocF
0720: 61 69 6c 20 72 65 61 63 68 65 73 20 30 2c 20 73  ail reaches 0, s
0730: 65 74 20 74 6f 20 74 68 69 73 20 2a 2f 0a 23 69  et to this */.#i
0740: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
0750: 47 3e 31 0a 73 74 61 74 69 63 20 69 6e 74 20 6d  G>1.static int m
0760: 65 6d 63 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  emcnt = 0;.#endi
0770: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20  f../*.** Number 
0780: 6f 66 20 33 32 2d 62 69 74 20 67 75 61 72 64 20  of 32-bit guard 
0790: 77 6f 72 64 73 2e 20 20 54 68 69 73 20 73 68 6f  words.  This sho
07a0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62 65 20  uld probably be 
07b0: 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 2a 2a  a multiple of.**
07c0: 20 32 20 73 69 6e 63 65 20 6f 6e 20 36 34 2d 62   2 since on 64-b
07d0: 69 74 20 6d 61 63 68 69 6e 65 73 20 77 65 20 77  it machines we w
07e0: 61 6e 74 20 74 68 65 20 76 61 6c 75 65 20 72 65  ant the value re
07f0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
0800: 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 74 6f 20 62  Malloc().** to b
0810: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  e 8-byte aligned
0820: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 5f 47  ..*/.#define N_G
0830: 55 41 52 44 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 6c  UARD 2../*.** Al
0840: 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f 72  locate new memor
0850: 79 20 61 6e 64 20 73 65 74 20 69 74 20 74 6f 20  y and set it to 
0860: 7a 65 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55  zero.  Return NU
0870: 4c 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f  LL if.** no memo
0880: 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ry is available.
0890: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
08a0: 33 4d 61 6c 6c 6f 63 5f 28 69 6e 74 20 6e 2c 20  3Malloc_(int n, 
08b0: 69 6e 74 20 62 5a 65 72 6f 2c 20 63 68 61 72 20  int bZero, char 
08c0: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
08d0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
08e0: 69 6e 74 20 2a 70 69 3b 0a 20 20 69 6e 74 20 69  int *pi;.  int i
08f0: 2c 20 6b 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  , k;.  if( sqlit
0900: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3e 3d  e3_iMallocFail>=
0910: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
0920: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 2d 2d 3b 0a  _iMallocFail--;.
0930: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
0940: 69 4d 61 6c 6c 6f 63 46 61 69 6c 3d 3d 30 20 29  iMallocFail==0 )
0950: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
0960: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b  malloc_failed++;
0970: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  .#if SQLITE_MEMD
0980: 45 42 55 47 3e 31 0a 20 20 20 20 20 20 66 70 72  EBUG>1.      fpr
0990: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 2a 2a 2a  intf(stderr,"***
09a0: 2a 20 66 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f  * failed to allo
09b0: 63 61 74 65 20 25 64 20 62 79 74 65 73 20 61 74  cate %d bytes at
09c0: 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20   %s:%d\n",.     
09d0: 20 20 20 20 20 20 20 20 20 6e 2c 20 7a 46 69 6c           n, zFil
09e0: 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a  e,line);.#endif.
09f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d        sqlite3_iM
0a00: 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 73 71 6c 69  allocFail = sqli
0a10: 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74  te3_iMallocReset
0a20: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ;.      return 0
0a30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
0a40: 28 20 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( n==0 ) return 
0a50: 30 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65  0;.  k = (n+size
0a60: 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f  of(int)-1)/sizeo
0a70: 66 28 69 6e 74 29 3b 0a 20 20 70 69 20 3d 20 6d  f(int);.  pi = m
0a80: 61 6c 6c 6f 63 28 20 28 4e 5f 47 55 41 52 44 2a  alloc( (N_GUARD*
0a90: 32 2b 31 2b 6b 29 2a 73 69 7a 65 6f 66 28 69 6e  2+1+k)*sizeof(in
0aa0: 74 29 29 3b 0a 20 20 69 66 28 20 70 69 3d 3d 30  t));.  if( pi==0
0ab0: 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20   ){.    if( n>0 
0ac0: 29 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ) sqlite3_malloc
0ad0: 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 72  _failed++;.    r
0ae0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
0af0: 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b  qlite3_nMalloc++
0b00: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
0b10: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b  _GUARD; i++) pi[
0b20: 69 5d 20 3d 20 30 78 64 65 61 64 31 31 32 32 3b  i] = 0xdead1122;
0b30: 0a 20 20 70 69 5b 4e 5f 47 55 41 52 44 5d 20 3d  .  pi[N_GUARD] =
0b40: 20 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   n;.  for(i=0; i
0b50: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70  <N_GUARD; i++) p
0b60: 69 5b 6b 2b 31 2b 4e 5f 47 55 41 52 44 2b 69 5d  i[k+1+N_GUARD+i]
0b70: 20 3d 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20   = 0xdead3344;. 
0b80: 20 70 20 3d 20 26 70 69 5b 4e 5f 47 55 41 52 44   p = &pi[N_GUARD
0b90: 2b 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2c  +1];.  memset(p,
0ba0: 20 62 5a 65 72 6f 3d 3d 30 2c 20 6e 29 3b 0a 23   bZero==0, n);.#
0bb0: 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  if SQLITE_MEMDEB
0bc0: 55 47 3e 31 0a 20 20 70 72 69 6e 74 5f 73 74 61  UG>1.  print_sta
0bd0: 63 6b 5f 74 72 61 63 65 28 29 3b 0a 20 20 66 70  ck_trace();.  fp
0be0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 30  rintf(stderr,"%0
0bf0: 36 64 20 6d 61 6c 6c 6f 63 20 25 64 20 62 79 74  6d malloc %d byt
0c00: 65 73 20 61 74 20 30 78 25 78 20 66 72 6f 6d 20  es at 0x%x from 
0c10: 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20  %s:%d\n",.      
0c20: 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c 20 28 69 6e  ++memcnt, n, (in
0c30: 74 29 70 2c 20 7a 46 69 6c 65 2c 6c 69 6e 65 29  t)p, zFile,line)
0c40: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
0c50: 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n p;.}../*.** Th
0c60: 69 73 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 61  is version of ma
0c70: 6c 6c 6f 63 20 69 73 20 61 6c 77 61 79 73 20 61  lloc is always a
0c80: 20 72 65 61 6c 20 66 75 6e 63 74 69 6f 6e 2c 20   real function, 
0c90: 6e 65 76 65 72 20 61 20 6d 61 63 72 6f 0a 2a 2f  never a macro.*/
0ca0: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
0cb0: 6c 6c 6f 63 58 28 69 6e 74 20 6e 29 7b 0a 20 20  llocX(int n){.  
0cc0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61  return sqlite3Ma
0cd0: 6c 6c 6f 63 5f 28 6e 2c 20 30 2c 20 5f 5f 46 49  lloc_(n, 0, __FI
0ce0: 4c 45 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 3b  LE__, __LINE__);
0cf0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  .}../*.** Check 
0d00: 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 67 69  to see if the gi
0d10: 76 65 6e 20 70 6f 69 6e 74 65 72 20 77 61 73 20  ven pointer was 
0d20: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
0d30: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  liteMalloc().** 
0d40: 61 6e 64 20 69 73 20 61 62 6c 65 20 74 6f 20 68  and is able to h
0d50: 6f 6c 64 20 61 74 20 6c 65 61 73 74 20 4e 20 62  old at least N b
0d60: 79 74 65 73 2e 20 20 52 61 69 73 65 20 61 6e 20  ytes.  Raise an 
0d70: 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69  exception if thi
0d80: 73 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  s.** is not the 
0d90: 63 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  case..**.** This
0da0: 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64   routine is used
0db0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72   for testing pur
0dc0: 70 6f 73 65 73 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76  poses only..*/.v
0dd0: 6f 69 64 20 73 71 6c 69 74 65 33 43 68 65 63 6b  oid sqlite3Check
0de0: 4d 65 6d 6f 72 79 28 76 6f 69 64 20 2a 70 2c 20  Memory(void *p, 
0df0: 69 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 2a 70  int N){.  int *p
0e00: 69 20 3d 20 70 3b 0a 20 20 69 6e 74 20 6e 2c 20  i = p;.  int n, 
0e10: 69 2c 20 6b 3b 0a 20 20 70 69 20 2d 3d 20 4e 5f  i, k;.  pi -= N_
0e20: 47 55 41 52 44 2b 31 3b 0a 20 20 66 6f 72 28 69  GUARD+1;.  for(i
0e30: 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69  =0; i<N_GUARD; i
0e40: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
0e50: 20 70 69 5b 69 5d 3d 3d 30 78 64 65 61 64 31 31   pi[i]==0xdead11
0e60: 32 32 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  22 );.  }.  n = 
0e70: 70 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a 20 20 61  pi[N_GUARD];.  a
0e80: 73 73 65 72 74 28 20 4e 3e 3d 30 20 26 26 20 4e  ssert( N>=0 && N
0e90: 3c 6e 20 29 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73  <n );.  k = (n+s
0ea0: 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69  izeof(int)-1)/si
0eb0: 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 66 6f 72  zeof(int);.  for
0ec0: 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b  (i=0; i<N_GUARD;
0ed0: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
0ee0: 74 28 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b  t( pi[k+N_GUARD+
0ef0: 31 2b 69 5d 3d 3d 30 78 64 65 61 64 33 33 34 34  1+i]==0xdead3344
0f00: 20 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a   );.  }.}../*.**
0f10: 20 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72 65   Free memory pre
0f20: 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
0f30: 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c   from sqliteMall
0f40: 6f 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  oc().*/.void sql
0f50: 69 74 65 33 46 72 65 65 5f 28 76 6f 69 64 20 2a  ite3Free_(void *
0f60: 70 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20  p, char *zFile, 
0f70: 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69 66 28  int line){.  if(
0f80: 20 70 20 29 7b 0a 20 20 20 20 69 6e 74 20 2a 70   p ){.    int *p
0f90: 69 2c 20 69 2c 20 6b 2c 20 6e 3b 0a 20 20 20 20  i, i, k, n;.    
0fa0: 70 69 20 3d 20 70 3b 0a 20 20 20 20 70 69 20 2d  pi = p;.    pi -
0fb0: 3d 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20 20  = N_GUARD+1;.   
0fc0: 20 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2b 2b   sqlite3_nFree++
0fd0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
0fe0: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a  <N_GUARD; i++){.
0ff0: 20 20 20 20 20 20 69 66 28 20 70 69 5b 69 5d 21        if( pi[i]!
1000: 3d 30 78 64 65 61 64 31 31 32 32 20 29 7b 0a 20  =0xdead1122 ){. 
1010: 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
1020: 74 64 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20 6d  tderr,"Low-end m
1030: 65 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e  emory corruption
1040: 20 61 74 20 30 78 25 78 5c 6e 22 2c 20 28 69 6e   at 0x%x\n", (in
1050: 74 29 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65  t)p);.        re
1060: 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
1070: 20 20 7d 0a 20 20 20 20 6e 20 3d 20 70 69 5b 4e    }.    n = pi[N
1080: 5f 47 55 41 52 44 5d 3b 0a 20 20 20 20 6b 20 3d  _GUARD];.    k =
1090: 20 28 6e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d   (n+sizeof(int)-
10a0: 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a  1)/sizeof(int);.
10b0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e      for(i=0; i<N
10c0: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20  _GUARD; i++){.  
10d0: 20 20 20 20 69 66 28 20 70 69 5b 6b 2b 4e 5f 47      if( pi[k+N_G
10e0: 55 41 52 44 2b 31 2b 69 5d 21 3d 30 78 64 65 61  UARD+1+i]!=0xdea
10f0: 64 33 33 34 34 20 29 7b 0a 20 20 20 20 20 20 20  d3344 ){.       
1100: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
1110: 22 48 69 67 68 2d 65 6e 64 20 6d 65 6d 6f 72 79  "High-end memory
1120: 20 63 6f 72 72 75 70 74 69 6f 6e 20 61 74 20 30   corruption at 0
1130: 78 25 78 5c 6e 22 2c 20 28 69 6e 74 29 70 29 3b  x%x\n", (int)p);
1140: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b  .        return;
1150: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1160: 20 20 20 6d 65 6d 73 65 74 28 70 69 2c 20 30 78     memset(pi, 0x
1170: 66 66 2c 20 28 6b 2b 4e 5f 47 55 41 52 44 2a 32  ff, (k+N_GUARD*2
1180: 2b 31 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29  +1)*sizeof(int))
1190: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ;.#if SQLITE_MEM
11a0: 44 45 42 55 47 3e 31 0a 20 20 20 20 66 70 72 69  DEBUG>1.    fpri
11b0: 6e 74 66 28 73 74 64 65 72 72 2c 22 25 30 36 64  ntf(stderr,"%06d
11c0: 20 66 72 65 65 20 25 64 20 62 79 74 65 73 20 61   free %d bytes a
11d0: 74 20 30 78 25 78 20 66 72 6f 6d 20 25 73 3a 25  t 0x%x from %s:%
11e0: 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 2b  d\n",.         +
11f0: 2b 6d 65 6d 63 6e 74 2c 20 6e 2c 20 28 69 6e 74  +memcnt, n, (int
1200: 29 70 2c 20 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b  )p, zFile,line);
1210: 0a 23 65 6e 64 69 66 0a 20 20 20 20 66 72 65 65  .#endif.    free
1220: 28 70 69 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  (pi);.  }.}../*.
1230: 2a 2a 20 52 65 73 69 7a 65 20 61 20 70 72 69 6f  ** Resize a prio
1240: 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 49  r allocation.  I
1250: 66 20 70 3d 3d 30 2c 20 74 68 65 6e 20 74 68 69  f p==0, then thi
1260: 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f 72  s routine.** wor
1270: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71 6c  ks just like sql
1280: 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 49 66  iteMalloc().  If
1290: 20 6e 3d 3d 30 2c 20 74 68 65 6e 20 74 68 69 73   n==0, then this
12a0: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b   routine.** work
12b0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71 6c 69  s just like sqli
12c0: 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a 76 6f 69  teFree()..*/.voi
12d0: 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
12e0: 63 5f 28 76 6f 69 64 20 2a 6f 6c 64 50 2c 20 69  c_(void *oldP, i
12f0: 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69 6c  nt n, char *zFil
1300: 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20  e, int line){.  
1310: 69 6e 74 20 2a 6f 6c 64 50 69 2c 20 2a 70 69 2c  int *oldPi, *pi,
1320: 20 69 2c 20 6b 2c 20 6f 6c 64 4e 2c 20 6f 6c 64   i, k, oldN, old
1330: 4b 3b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  K;.  void *p;.  
1340: 69 66 28 20 6f 6c 64 50 3d 3d 30 20 29 7b 0a 20  if( oldP==0 ){. 
1350: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
1360: 33 4d 61 6c 6c 6f 63 5f 28 6e 2c 31 2c 7a 46 69  3Malloc_(n,1,zFi
1370: 6c 65 2c 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20 20  le,line);.  }.  
1380: 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  if( n==0 ){.    
1390: 73 71 6c 69 74 65 33 46 72 65 65 5f 28 6f 6c 64  sqlite3Free_(old
13a0: 50 2c 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 20  P,zFile,line);. 
13b0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
13c0: 0a 20 20 6f 6c 64 50 69 20 3d 20 6f 6c 64 50 3b  .  oldPi = oldP;
13d0: 0a 20 20 6f 6c 64 50 69 20 2d 3d 20 4e 5f 47 55  .  oldPi -= N_GU
13e0: 41 52 44 2b 31 3b 0a 20 20 69 66 28 20 6f 6c 64  ARD+1;.  if( old
13f0: 50 69 5b 30 5d 21 3d 30 78 64 65 61 64 31 31 32  Pi[0]!=0xdead112
1400: 32 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66  2 ){.    fprintf
1410: 28 73 74 64 65 72 72 2c 22 4c 6f 77 2d 65 6e 64  (stderr,"Low-end
1420: 20 6d 65 6d 6f 72 79 20 63 6f 72 72 75 70 74 69   memory corrupti
1430: 6f 6e 20 69 6e 20 72 65 61 6c 6c 6f 63 20 61 74  on in realloc at
1440: 20 30 78 25 78 5c 6e 22 2c 20 28 69 6e 74 29 6f   0x%x\n", (int)o
1450: 6c 64 50 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ldP);.    return
1460: 20 30 3b 0a 20 20 7d 0a 20 20 6f 6c 64 4e 20 3d   0;.  }.  oldN =
1470: 20 6f 6c 64 50 69 5b 4e 5f 47 55 41 52 44 5d 3b   oldPi[N_GUARD];
1480: 0a 20 20 6f 6c 64 4b 20 3d 20 28 6f 6c 64 4e 2b  .  oldK = (oldN+
1490: 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73  sizeof(int)-1)/s
14a0: 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 66 6f  izeof(int);.  fo
14b0: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
14c0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
14d0: 6f 6c 64 50 69 5b 6f 6c 64 4b 2b 4e 5f 47 55 41  oldPi[oldK+N_GUA
14e0: 52 44 2b 31 2b 69 5d 21 3d 30 78 64 65 61 64 33  RD+1+i]!=0xdead3
14f0: 33 34 34 20 29 7b 0a 20 20 20 20 20 20 66 70 72  344 ){.      fpr
1500: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 48 69 67  intf(stderr,"Hig
1510: 68 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72  h-end memory cor
1520: 72 75 70 74 69 6f 6e 20 69 6e 20 72 65 61 6c 6c  ruption in reall
1530: 6f 63 20 61 74 20 30 78 25 78 5c 6e 22 2c 0a 20  oc at 0x%x\n",. 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
1550: 74 29 6f 6c 64 50 29 3b 0a 20 20 20 20 20 20 72  t)oldP);.      r
1560: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20  eturn 0;.    }. 
1570: 20 7d 0a 20 20 6b 20 3d 20 28 6e 20 2b 20 73 69   }.  k = (n + si
1580: 7a 65 6f 66 28 69 6e 74 29 20 2d 20 31 29 2f 73  zeof(int) - 1)/s
1590: 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 70 69  izeof(int);.  pi
15a0: 20 3d 20 6d 61 6c 6c 6f 63 28 20 28 6b 2b 4e 5f   = malloc( (k+N_
15b0: 47 55 41 52 44 2a 32 2b 31 29 2a 73 69 7a 65 6f  GUARD*2+1)*sizeo
15c0: 66 28 69 6e 74 29 20 29 3b 0a 20 20 69 66 28 20  f(int) );.  if( 
15d0: 70 69 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  pi==0 ){.    if(
15e0: 20 6e 3e 30 20 29 20 73 71 6c 69 74 65 33 5f 6d   n>0 ) sqlite3_m
15f0: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a  alloc_failed++;.
1600: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
1610: 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  }.  for(i=0; i<N
1620: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b  _GUARD; i++) pi[
1630: 69 5d 20 3d 20 30 78 64 65 61 64 31 31 32 32 3b  i] = 0xdead1122;
1640: 0a 20 20 70 69 5b 4e 5f 47 55 41 52 44 5d 20 3d  .  pi[N_GUARD] =
1650: 20 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   n;.  for(i=0; i
1660: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70  <N_GUARD; i++) p
1670: 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d  i[k+N_GUARD+1+i]
1680: 20 3d 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20   = 0xdead3344;. 
1690: 20 70 20 3d 20 26 70 69 5b 4e 5f 47 55 41 52 44   p = &pi[N_GUARD
16a0: 2b 31 5d 3b 0a 20 20 6d 65 6d 63 70 79 28 70 2c  +1];.  memcpy(p,
16b0: 20 6f 6c 64 50 2c 20 6e 3e 6f 6c 64 4e 20 3f 20   oldP, n>oldN ? 
16c0: 6f 6c 64 4e 20 3a 20 6e 29 3b 0a 20 20 69 66 28  oldN : n);.  if(
16d0: 20 6e 3e 6f 6c 64 4e 20 29 7b 0a 20 20 20 20 6d   n>oldN ){.    m
16e0: 65 6d 73 65 74 28 26 28 28 63 68 61 72 2a 29 70  emset(&((char*)p
16f0: 29 5b 6f 6c 64 4e 5d 2c 20 30 78 35 35 2c 20 6e  )[oldN], 0x55, n
1700: 2d 6f 6c 64 4e 29 3b 0a 20 20 7d 0a 20 20 6d 65  -oldN);.  }.  me
1710: 6d 73 65 74 28 6f 6c 64 50 69 2c 20 30 78 61 62  mset(oldPi, 0xab
1720: 2c 20 28 6f 6c 64 4b 2b 4e 5f 47 55 41 52 44 2b  , (oldK+N_GUARD+
1730: 32 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b  2)*sizeof(int));
1740: 0a 20 20 66 72 65 65 28 6f 6c 64 50 69 29 3b 0a  .  free(oldPi);.
1750: 23 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  #if SQLITE_MEMDE
1760: 42 55 47 3e 31 0a 20 20 70 72 69 6e 74 5f 73 74  BUG>1.  print_st
1770: 61 63 6b 5f 74 72 61 63 65 28 29 3b 0a 20 20 66  ack_trace();.  f
1780: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25  printf(stderr,"%
1790: 30 36 64 20 72 65 61 6c 6c 6f 63 20 25 64 20 74  06d realloc %d t
17a0: 6f 20 25 64 20 62 79 74 65 73 20 61 74 20 30 78  o %d bytes at 0x
17b0: 25 78 20 74 6f 20 30 78 25 78 20 61 74 20 25 73  %x to 0x%x at %s
17c0: 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 2b 2b 6d 65  :%d\n",.    ++me
17d0: 6d 63 6e 74 2c 20 6f 6c 64 4e 2c 20 6e 2c 20 28  mcnt, oldN, n, (
17e0: 69 6e 74 29 6f 6c 64 50 2c 20 28 69 6e 74 29 70  int)oldP, (int)p
17f0: 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a  , zFile, line);.
1800: 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
1810: 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  p;.}../*.** Make
1820: 20 61 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72   a copy of a str
1830: 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62  ing in memory ob
1840: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
1850: 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a 63 68  teMalloc().*/.ch
1860: 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 44 75  ar *sqlite3StrDu
1870: 70 5f 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p_(const char *z
1880: 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69  , char *zFile, i
1890: 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 63 68 61 72  nt line){.  char
18a0: 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d   *zNew;.  if( z=
18b0: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
18c0: 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 4d   zNew = sqlite3M
18d0: 61 6c 6c 6f 63 5f 28 73 74 72 6c 65 6e 28 7a 29  alloc_(strlen(z)
18e0: 2b 31 2c 20 30 2c 20 7a 46 69 6c 65 2c 20 6c 69  +1, 0, zFile, li
18f0: 6e 65 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20  ne);.  if( zNew 
1900: 29 20 73 74 72 63 70 79 28 7a 4e 65 77 2c 20 7a  ) strcpy(zNew, z
1910: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77  );.  return zNew
1920: 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ;.}.char *sqlite
1930: 33 53 74 72 4e 44 75 70 5f 28 63 6f 6e 73 74 20  3StrNDup_(const 
1940: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20  char *z, int n, 
1950: 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74  char *zFile, int
1960: 20 6c 69 6e 65 29 7b 0a 20 20 63 68 61 72 20 2a   line){.  char *
1970: 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  zNew;.  if( z==0
1980: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a   ) return 0;.  z
1990: 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c  New = sqlite3Mal
19a0: 6c 6f 63 5f 28 6e 2b 31 2c 20 30 2c 20 7a 46 69  loc_(n+1, 0, zFi
19b0: 6c 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69 66 28  le, line);.  if(
19c0: 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 6d 65 6d   zNew ){.    mem
19d0: 63 70 79 28 7a 4e 65 77 2c 20 7a 2c 20 6e 29 3b  cpy(zNew, z, n);
19e0: 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d 20 3d 20 30  .    zNew[n] = 0
19f0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
1a00: 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20  New;.}../*.** A 
1a10: 76 65 72 73 69 6f 6e 20 6f 66 20 73 71 6c 69 74  version of sqlit
1a20: 65 46 72 65 65 20 74 68 61 74 20 69 73 20 61 6c  eFree that is al
1a30: 77 61 79 73 20 61 20 66 75 6e 63 74 69 6f 6e 2c  ways a function,
1a40: 20 6e 6f 74 20 61 20 6d 61 63 72 6f 2e 0a 2a 2f   not a macro..*/
1a50: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65  .void sqlite3Fre
1a60: 65 58 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73  eX(void *p){.  s
1a70: 71 6c 69 74 65 46 72 65 65 28 70 29 3b 0a 7d 0a  qliteFree(p);.}.
1a80: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
1a90: 5f 4d 45 4d 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  _MEMDEBUG */../*
1aa0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1ab0: 67 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 6d 61  g versions of ma
1ac0: 6c 6c 6f 63 28 29 20 61 6e 64 20 66 72 65 65 28  lloc() and free(
1ad0: 29 20 61 72 65 20 66 6f 72 20 75 73 65 20 69 6e  ) are for use in
1ae0: 20 61 0a 2a 2a 20 6e 6f 72 6d 61 6c 20 62 75 69   a.** normal bui
1af0: 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  ld..*/.#if !defi
1b00: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45  ned(SQLITE_MEMDE
1b10: 42 55 47 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  BUG)../*.** Allo
1b20: 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f 72 79 20  cate new memory 
1b30: 61 6e 64 20 73 65 74 20 69 74 20 74 6f 20 7a 65  and set it to ze
1b40: 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  ro.  Return NULL
1b50: 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79   if.** no memory
1b60: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20   is available.  
1b70: 53 65 65 20 61 6c 73 6f 20 73 71 6c 69 74 65 4d  See also sqliteM
1b80: 61 6c 6c 6f 63 52 61 77 28 29 2e 0a 2a 2f 0a 76  allocRaw()..*/.v
1b90: 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1ba0: 6f 63 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69  oc(int n){.  voi
1bb0: 64 20 2a 70 3b 0a 20 20 69 66 28 20 28 70 20 3d  d *p;.  if( (p =
1bc0: 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29   malloc(n))==0 )
1bd0: 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20  {.    if( n>0 ) 
1be0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
1bf0: 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d 65 6c 73 65  ailed++;.  }else
1c00: 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20  {.    memset(p, 
1c10: 30 2c 20 6e 29 3b 0a 20 20 7d 0a 20 20 72 65 74  0, n);.  }.  ret
1c20: 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn p;.}../*.** 
1c30: 41 6c 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d  Allocate new mem
1c40: 6f 72 79 20 62 75 74 20 64 6f 20 6e 6f 74 20 73  ory but do not s
1c50: 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20  et it to zero.  
1c60: 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a  Return NULL if.*
1c70: 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61  * no memory is a
1c80: 76 61 69 6c 61 62 6c 65 2e 20 20 53 65 65 20 61  vailable.  See a
1c90: 6c 73 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  lso sqliteMalloc
1ca0: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ()..*/.void *sql
1cb0: 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 69 6e  ite3MallocRaw(in
1cc0: 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  t n){.  void *p;
1cd0: 0a 20 20 69 66 28 20 28 70 20 3d 20 6d 61 6c 6c  .  if( (p = mall
1ce0: 6f 63 28 6e 29 29 3d 3d 30 20 29 7b 0a 20 20 20  oc(n))==0 ){.   
1cf0: 20 69 66 28 20 6e 3e 30 20 29 20 73 71 6c 69 74   if( n>0 ) sqlit
1d00: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
1d10: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
1d20: 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65   p;.}../*.** Fre
1d30: 65 20 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75  e memory previou
1d40: 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  sly obtained fro
1d50: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
1d60: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
1d70: 46 72 65 65 58 28 76 6f 69 64 20 2a 70 29 7b 0a  FreeX(void *p){.
1d80: 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 66    if( p ){.    f
1d90: 72 65 65 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  ree(p);.  }.}../
1da0: 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61 20 70 72  *.** Resize a pr
1db0: 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ior allocation. 
1dc0: 20 49 66 20 70 3d 3d 30 2c 20 74 68 65 6e 20 74   If p==0, then t
1dd0: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
1de0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73  orks just like s
1df0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20  qliteMalloc().  
1e00: 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e 20 74 68  If n==0, then th
1e10: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f  is routine.** wo
1e20: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71  rks just like sq
1e30: 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a 76  liteFree()..*/.v
1e40: 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
1e50: 6c 6f 63 28 76 6f 69 64 20 2a 70 2c 20 69 6e 74  loc(void *p, int
1e60: 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 32 3b   n){.  void *p2;
1e70: 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20  .  if( p==0 ){. 
1e80: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
1e90: 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 7d 0a 20  Malloc(n);.  }. 
1ea0: 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20   if( n==0 ){.   
1eb0: 20 73 71 6c 69 74 65 46 72 65 65 28 70 29 3b 0a   sqliteFree(p);.
1ec0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
1ed0: 7d 0a 20 20 70 32 20 3d 20 72 65 61 6c 6c 6f 63  }.  p2 = realloc
1ee0: 28 70 2c 20 6e 29 3b 0a 20 20 69 66 28 20 70 32  (p, n);.  if( p2
1ef0: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
1f00: 3e 30 20 29 20 73 71 6c 69 74 65 33 5f 6d 61 6c  >0 ) sqlite3_mal
1f10: 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20  loc_failed++;.  
1f20: 7d 0a 20 20 72 65 74 75 72 6e 20 70 32 3b 0a 7d  }.  return p2;.}
1f30: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ../*.** Make a c
1f40: 6f 70 79 20 6f 66 20 61 20 73 74 72 69 6e 67 20  opy of a string 
1f50: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
1f60: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61  ed from sqliteMa
1f70: 6c 6c 6f 63 28 29 0a 2a 2f 0a 63 68 61 72 20 2a  lloc().*/.char *
1f80: 73 71 6c 69 74 65 33 53 74 72 44 75 70 28 63 6f  sqlite3StrDup(co
1f90: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
1fa0: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66  char *zNew;.  if
1fb0: 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( z==0 ) return 
1fc0: 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69  0;.  zNew = sqli
1fd0: 74 65 4d 61 6c 6c 6f 63 52 61 77 28 73 74 72 6c  teMallocRaw(strl
1fe0: 65 6e 28 7a 29 2b 31 29 3b 0a 20 20 69 66 28 20  en(z)+1);.  if( 
1ff0: 7a 4e 65 77 20 29 20 73 74 72 63 70 79 28 7a 4e  zNew ) strcpy(zN
2000: 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ew, z);.  return
2010: 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73   zNew;.}.char *s
2020: 71 6c 69 74 65 33 53 74 72 4e 44 75 70 28 63 6f  qlite3StrNDup(co
2030: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
2040: 20 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65   n){.  char *zNe
2050: 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  w;.  if( z==0 ) 
2060: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77  return 0;.  zNew
2070: 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52   = sqliteMallocR
2080: 61 77 28 6e 2b 31 29 3b 0a 20 20 69 66 28 20 7a  aw(n+1);.  if( z
2090: 4e 65 77 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  New ){.    memcp
20a0: 79 28 7a 4e 65 77 2c 20 7a 2c 20 6e 29 3b 0a 20  y(zNew, z, n);. 
20b0: 20 20 20 7a 4e 65 77 5b 6e 5d 20 3d 20 30 3b 0a     zNew[n] = 0;.
20c0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65    }.  return zNe
20d0: 77 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  w;.}.#endif /* !
20e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
20f0: 45 4d 44 45 42 55 47 29 20 2a 2f 0a 0a 2f 2a 0a  EMDEBUG) */../*.
2100: 2a 2a 20 43 72 65 61 74 65 20 61 20 73 74 72 69  ** Create a stri
2110: 6e 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64 20  ng from the 2nd 
2120: 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 61  and subsequent a
2130: 72 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f 20  rguments (up to 
2140: 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55 4c  the.** first NUL
2150: 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74 6f  L argument), sto
2160: 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 69 6e  re the string in
2170: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
2180: 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65 4d   from.** sqliteM
2190: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b 65  alloc() and make
21a0: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e 64   the pointer ind
21b0: 69 63 61 74 65 64 20 62 79 20 74 68 65 20 31 73  icated by the 1s
21c0: 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70 6f  t argument.** po
21d0: 69 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72 69  int to that stri
21e0: 6e 67 2e 20 20 54 68 65 20 31 73 74 20 61 72 67  ng.  The 1st arg
21f0: 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68 65  ument must eithe
2200: 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a 2a  r be NULL or .**
2210: 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72 79   point to memory
2220: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
2230: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a  qliteMalloc()..*
2240: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  /.void sqlite3Se
2250: 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 70  tString(char **p
2260: 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  z, const char *z
2270: 46 69 72 73 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76  First, ...){.  v
2280: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69 6e 74  a_list ap;.  int
2290: 20 6e 42 79 74 65 3b 0a 20 20 63 6f 6e 73 74 20   nByte;.  const 
22a0: 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20  char *z;.  char 
22b0: 2a 7a 52 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28  *zResult;..  if(
22c0: 20 70 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b   pz==0 ) return;
22d0: 0a 20 20 6e 42 79 74 65 20 3d 20 73 74 72 6c 65  .  nByte = strle
22e0: 6e 28 7a 46 69 72 73 74 29 20 2b 20 31 3b 0a 20  n(zFirst) + 1;. 
22f0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2300: 69 72 73 74 29 3b 0a 20 20 77 68 69 6c 65 28 20  irst);.  while( 
2310: 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  (z = va_arg(ap, 
2320: 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30  const char*))!=0
2330: 20 29 7b 0a 20 20 20 20 6e 42 79 74 65 20 2b 3d   ){.    nByte +=
2340: 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 7d 0a   strlen(z);.  }.
2350: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
2360: 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 29 3b  sqliteFree(*pz);
2370: 0a 20 20 2a 70 7a 20 3d 20 7a 52 65 73 75 6c 74  .  *pz = zResult
2380: 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52   = sqliteMallocR
2390: 61 77 28 20 6e 42 79 74 65 20 29 3b 0a 20 20 69  aw( nByte );.  i
23a0: 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30 20 29 7b  f( zResult==0 ){
23b0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
23c0: 0a 20 20 73 74 72 63 70 79 28 7a 52 65 73 75 6c  .  strcpy(zResul
23d0: 74 2c 20 7a 46 69 72 73 74 29 3b 0a 20 20 7a 52  t, zFirst);.  zR
23e0: 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c 65 6e 28  esult += strlen(
23f0: 7a 52 65 73 75 6c 74 29 3b 0a 20 20 76 61 5f 73  zResult);.  va_s
2400: 74 61 72 74 28 61 70 2c 20 7a 46 69 72 73 74 29  tart(ap, zFirst)
2410: 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a 20 3d 20  ;.  while( (z = 
2420: 76 61 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73 74  va_arg(ap, const
2430: 20 63 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20   char*))!=0 ){. 
2440: 20 20 20 73 74 72 63 70 79 28 7a 52 65 73 75 6c     strcpy(zResul
2450: 74 2c 20 7a 29 3b 0a 20 20 20 20 7a 52 65 73 75  t, z);.    zResu
2460: 6c 74 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 52 65  lt += strlen(zRe
2470: 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20 76 61 5f  sult);.  }.  va_
2480: 65 6e 64 28 61 70 29 3b 0a 23 69 66 64 65 66 20  end(ap);.#ifdef 
2490: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 69 66  SQLITE_DEBUG.#if
24a0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e 31 0a   SQLITE_DEBUG>1.
24b0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
24c0: 2c 22 73 74 72 69 6e 67 20 61 74 20 30 78 25 78  ,"string at 0x%x
24d0: 20 69 73 20 25 73 5c 6e 22 2c 20 28 69 6e 74 29   is %s\n", (int)
24e0: 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23 65 6e 64 69  *pz, *pz);.#endi
24f0: 66 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a  f.#endif.}../*.*
2500: 2a 20 53 65 74 20 74 68 65 20 6d 6f 73 74 20 72  * Set the most r
2510: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
2520: 20 61 6e 64 20 65 72 72 6f 72 20 73 74 72 69 6e   and error strin
2530: 67 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  g for the sqlite
2540: 0a 2a 2a 20 68 61 6e 64 6c 65 20 22 64 62 22 2e  .** handle "db".
2550: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
2560: 69 73 20 73 65 74 20 74 6f 20 22 65 72 72 5f 63  is set to "err_c
2570: 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69  ode"..**.** If i
2580: 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 73  t is not NULL, s
2590: 74 72 69 6e 67 20 7a 46 6f 72 6d 61 74 20 73 70  tring zFormat sp
25a0: 65 63 69 66 69 65 73 20 74 68 65 20 66 6f 72 6d  ecifies the form
25b0: 61 74 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72  at of the.** err
25c0: 6f 72 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65  or string in the
25d0: 20 73 74 79 6c 65 20 6f 66 20 74 68 65 20 70 72   style of the pr
25e0: 69 6e 74 66 20 66 75 6e 63 74 69 6f 6e 73 3a 20  intf functions: 
25f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  The following.**
2600: 20 66 6f 72 6d 61 74 20 63 68 61 72 61 63 74 65   format characte
2610: 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a 0a  rs are allowed:.
2620: 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20 20 20  **.**      %s   
2630: 20 20 20 49 6e 73 65 72 74 20 61 20 73 74 72 69     Insert a stri
2640: 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20 20  ng.**      %z   
2650: 20 20 20 41 20 73 74 72 69 6e 67 20 74 68 61 74     A string that
2660: 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
2670: 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20 20 20   after use.**   
2680: 20 20 20 25 64 20 20 20 20 20 20 49 6e 73 65 72     %d      Inser
2690: 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  t an integer.** 
26a0: 20 20 20 20 20 25 54 20 20 20 20 20 20 49 6e 73       %T      Ins
26b0: 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20  ert a token.**  
26c0: 20 20 20 20 25 53 20 20 20 20 20 20 49 6e 73 65      %S      Inse
26d0: 72 74 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  rt the first ele
26e0: 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c 69 73  ment of a SrcLis
26f0: 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f 72 6d 61 74 20  t.**.** zFormat 
2700: 61 6e 64 20 61 6e 79 20 73 74 72 69 6e 67 20 74  and any string t
2710: 6f 6b 65 6e 73 20 74 68 61 74 20 66 6f 6c 6c 6f  okens that follo
2720: 77 20 69 74 20 61 72 65 20 61 73 73 75 6d 65 64  w it are assumed
2730: 20 74 6f 20 62 65 0a 2a 2a 20 65 6e 63 6f 64 65   to be.** encode
2740: 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 0a 2a  d in UTF-8..**.*
2750: 2a 20 54 6f 20 63 6c 65 61 72 20 74 68 65 20 6d  * To clear the m
2760: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
2770: 20 66 6f 72 20 73 6c 71 69 74 65 20 68 61 6e 64   for slqite hand
2780: 6c 65 20 22 64 62 22 2c 20 73 71 6c 69 74 65 33  le "db", sqlite3
2790: 45 72 72 6f 72 0a 2a 2a 20 73 68 6f 75 6c 64 20  Error.** should 
27a0: 62 65 20 63 61 6c 6c 65 64 20 77 69 74 68 20 65  be called with e
27b0: 72 72 5f 63 6f 64 65 20 73 65 74 20 74 6f 20 53  rr_code set to S
27c0: 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 7a 46 6f  QLITE_OK and zFo
27d0: 72 6d 61 74 20 73 65 74 0a 2a 2a 20 74 6f 20 4e  rmat set.** to N
27e0: 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ULL..*/.void sql
27f0: 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2800: 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f 63  3 *db, int err_c
2810: 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ode, const char 
2820: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
2830: 20 20 69 66 28 20 64 62 20 26 26 20 28 64 62 2d    if( db && (db-
2840: 3e 70 45 72 72 20 7c 7c 20 28 64 62 2d 3e 70 45  >pErr || (db->pE
2850: 72 72 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  rr = sqlite3Valu
2860: 65 4e 65 77 28 29 29 29 20 29 7b 0a 20 20 20 20  eNew())) ){.    
2870: 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 65 72  db->errCode = er
2880: 72 5f 63 6f 64 65 3b 0a 20 20 20 20 69 66 28 20  r_code;.    if( 
2890: 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  zFormat ){.     
28a0: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20   char *z;.      
28b0: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20 20  va_list ap;.    
28c0: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
28d0: 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20 20 20 7a  Format);.      z
28e0: 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e   = sqlite3VMPrin
28f0: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
2900: 0a 20 20 20 20 20 20 76 61 5f 65 6e 64 28 61 70  .      va_end(ap
2910: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2920: 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e  ValueSetStr(db->
2930: 70 45 72 72 2c 20 2d 31 2c 20 7a 2c 20 53 51 4c  pErr, -1, z, SQL
2940: 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
2950: 33 46 72 65 65 58 29 3b 0a 20 20 20 20 7d 65 6c  3FreeX);.    }el
2960: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
2970: 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d  3ValueSetStr(db-
2980: 3e 70 45 72 72 2c 20 30 2c 20 30 2c 20 53 51 4c  >pErr, 0, 0, SQL
2990: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
29a0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a  _STATIC);.    }.
29b0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64 64    }.}../*.** Add
29c0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
29d0: 65 20 74 6f 20 70 50 61 72 73 65 2d 3e 7a 45 72  e to pParse->zEr
29e0: 72 4d 73 67 20 61 6e 64 20 69 6e 63 72 65 6d 65  rMsg and increme
29f0: 6e 74 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2e  nt pParse->nErr.
2a00: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
2a10: 67 20 66 6f 72 6d 61 74 74 69 6e 67 20 63 68 61  g formatting cha
2a20: 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c 6f  racters are allo
2a30: 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  wed:.**.**      
2a40: 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %s      Insert a
2a50: 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20   string.**      
2a60: 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e 67  %z      A string
2a70: 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
2a80: 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65 0a  freed after use.
2a90: 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20 20  **      %d      
2aa0: 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67 65  Insert an intege
2ab0: 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20 20  r.**      %T    
2ac0: 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65 6e    Insert a token
2ad0: 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20 20  .**      %S     
2ae0: 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72 73   Insert the firs
2af0: 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 53  t element of a S
2b00: 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 54 68 69  rcList.**.** Thi
2b10: 73 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  s function shoul
2b20: 64 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 70  d be used to rep
2b30: 6f 72 74 20 61 6e 79 20 65 72 72 6f 72 20 74 68  ort any error th
2b40: 61 74 20 6f 63 63 75 72 73 20 77 68 69 6c 73 74  at occurs whilst
2b50: 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 61 6e  .** compiling an
2b60: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28   SQL statement (
2b70: 69 2e 65 2e 20 77 69 74 68 69 6e 20 73 71 6c 69  i.e. within sqli
2b80: 74 65 33 5f 70 72 65 70 61 72 65 28 29 29 2e 20  te3_prepare()). 
2b90: 54 68 65 0a 2a 2a 20 6c 61 73 74 20 74 68 69 6e  The.** last thin
2ba0: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70 72  g the sqlite3_pr
2bb0: 65 70 61 72 65 28 29 20 66 75 6e 63 74 69 6f 6e  epare() function
2bc0: 20 64 6f 65 73 20 69 73 20 63 6f 70 79 20 74 68   does is copy th
2bd0: 65 20 65 72 72 6f 72 0a 2a 2a 20 73 74 6f 72 65  e error.** store
2be0: 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74 69  d by this functi
2bf0: 6f 6e 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  on into the data
2c00: 62 61 73 65 20 68 61 6e 64 6c 65 20 75 73 69 6e  base handle usin
2c10: 67 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 29  g sqlite3Error()
2c20: 2e 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 73 71  ..** Function sq
2c30: 6c 69 74 65 33 45 72 72 6f 72 28 29 20 73 68 6f  lite3Error() sho
2c40: 75 6c 64 20 62 65 20 75 73 65 64 20 64 75 72 69  uld be used duri
2c50: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 65 78 65  ng statement exe
2c60: 63 75 74 69 6f 6e 0a 2a 2a 20 28 73 71 6c 69 74  cution.** (sqlit
2c70: 65 33 5f 73 74 65 70 28 29 20 65 74 63 2e 29 2e  e3_step() etc.).
2c80: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2c90: 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 20 2a  ErrorMsg(Parse *
2ca0: 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2cb0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
2cc0: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
2cd0: 0a 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b  .  pParse->nErr+
2ce0: 2b 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  +;.  sqliteFree(
2cf0: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29  pParse->zErrMsg)
2d00: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
2d10: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 70 50 61   zFormat);.  pPa
2d20: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73  rse->zErrMsg = s
2d30: 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 7a  qlite3VMPrintf(z
2d40: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76  Format, ap);.  v
2d50: 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a  a_end(ap);.}../*
2d60: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20 53  .** Convert an S
2d70: 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74 65 64 20  QL-style quoted 
2d80: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e 6f  string into a no
2d90: 72 6d 61 6c 20 73 74 72 69 6e 67 20 62 79 20 72  rmal string by r
2da0: 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68 65 20 71  emoving.** the q
2db0: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 2e  uote characters.
2dc0: 20 20 54 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e    The conversion
2dd0: 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70 6c 61 63   is done in-plac
2de0: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 69 6e  e.  If the.** in
2df0: 70 75 74 20 64 6f 65 73 20 6e 6f 74 20 62 65 67  put does not beg
2e00: 69 6e 20 77 69 74 68 20 61 20 71 75 6f 74 65 20  in with a quote 
2e10: 63 68 61 72 61 63 74 65 72 2c 20 74 68 65 6e 20  character, then 
2e20: 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  this routine.** 
2e30: 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a  is a no-op..**.*
2e40: 2a 20 32 30 30 32 2d 46 65 62 2d 31 34 3a 20 54  * 2002-Feb-14: T
2e50: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 65  his routine is e
2e60: 78 74 65 6e 64 65 64 20 74 6f 20 72 65 6d 6f 76  xtended to remov
2e70: 65 20 4d 53 2d 41 63 63 65 73 73 20 73 74 79 6c  e MS-Access styl
2e80: 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73 20 66 72  e.** brackets fr
2e90: 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65 6e 74 69  om around identi
2ea0: 66 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  fers.  For examp
2eb0: 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d 22 20 62  le:  "[a-b-c]" b
2ec0: 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d 63  ecomes.** "a-b-c
2ed0: 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  "..*/.void sqlit
2ee0: 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 20 2a  e3Dequote(char *
2ef0: 7a 29 7b 0a 20 20 69 6e 74 20 71 75 6f 74 65 3b  z){.  int quote;
2f00: 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 69  .  int i, j;.  i
2f10: 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( z==0 ) return
2f20: 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a 5b 30 5d  ;.  quote = z[0]
2f30: 3b 0a 20 20 73 77 69 74 63 68 28 20 71 75 6f 74  ;.  switch( quot
2f40: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27 5c  e ){.    case '\
2f50: 27 27 3a 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  '':  break;.    
2f60: 63 61 73 65 20 27 22 27 3a 20 20 20 62 72 65 61  case '"':   brea
2f70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 27 5b 27 3a  k;.    case '[':
2f80: 20 20 20 71 75 6f 74 65 20 3d 20 27 5d 27 3b 20     quote = ']'; 
2f90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
2fa0: 75 6c 74 3a 20 20 20 20 72 65 74 75 72 6e 3b 0a  ult:    return;.
2fb0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a    }.  for(i=1, j
2fc0: 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  =0; z[i]; i++){.
2fd0: 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75      if( z[i]==qu
2fe0: 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ote ){.      if(
2ff0: 20 7a 5b 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29   z[i+1]==quote )
3000: 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d  {.        z[j++]
3010: 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 20 20   = quote;.      
3020: 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c    i++;.      }el
3030: 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b  se{.        z[j+
3040: 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  +] = 0;.        
3050: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
3060: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3070: 7a 5b 6a 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20  z[j++] = z[i];. 
3080: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41     }.  }.}../* A
3090: 6e 20 61 72 72 61 79 20 74 6f 20 6d 61 70 20 61  n array to map a
30a0: 6c 6c 20 75 70 70 65 72 2d 63 61 73 65 20 63 68  ll upper-case ch
30b0: 61 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68  aracters into th
30c0: 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  eir correspondin
30d0: 67 0a 2a 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20  g.** lower-case 
30e0: 63 68 61 72 61 63 74 65 72 2e 20 0a 2a 2f 0a 63  character. .*/.c
30f0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
3100: 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
3110: 6f 4c 6f 77 65 72 5b 5d 20 3d 20 7b 0a 20 20 20  oLower[] = {.   
3120: 20 20 20 30 2c 20 20 31 2c 20 20 32 2c 20 20 33     0,  1,  2,  3
3130: 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c 20 20 37  ,  4,  5,  6,  7
3140: 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c 20 31 31  ,  8,  9, 10, 11
3150: 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c 20 31 35  , 12, 13, 14, 15
3160: 2c 20 31 36 2c 20 31 37 2c 0a 20 20 20 20 20 31  , 16, 17,.     1
3170: 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c 20 32  8, 19, 20, 21, 2
3180: 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20 32  2, 23, 24, 25, 2
3190: 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20 33  6, 27, 28, 29, 3
31a0: 30 2c 20 33 31 2c 20 33 32 2c 20 33 33 2c 20 33  0, 31, 32, 33, 3
31b0: 34 2c 20 33 35 2c 0a 20 20 20 20 20 33 36 2c 20  4, 35,.     36, 
31c0: 33 37 2c 20 33 38 2c 20 33 39 2c 20 34 30 2c 20  37, 38, 39, 40, 
31d0: 34 31 2c 20 34 32 2c 20 34 33 2c 20 34 34 2c 20  41, 42, 43, 44, 
31e0: 34 35 2c 20 34 36 2c 20 34 37 2c 20 34 38 2c 20  45, 46, 47, 48, 
31f0: 34 39 2c 20 35 30 2c 20 35 31 2c 20 35 32 2c 20  49, 50, 51, 52, 
3200: 35 33 2c 0a 20 20 20 20 20 35 34 2c 20 35 35 2c  53,.     54, 55,
3210: 20 35 36 2c 20 35 37 2c 20 35 38 2c 20 35 39 2c   56, 57, 58, 59,
3220: 20 36 30 2c 20 36 31 2c 20 36 32 2c 20 36 33 2c   60, 61, 62, 63,
3230: 20 36 34 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c   64, 97, 98, 99,
3240: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
3250: 0a 20 20 20 20 31 30 34 2c 31 30 35 2c 31 30 36  .    104,105,106
3260: 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c 31 31 30  ,107,108,109,110
3270: 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31 34  ,111,112,113,114
3280: 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38  ,115,116,117,118
3290: 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 0a 20 20  ,119,120,121,.  
32a0: 20 20 31 32 32 2c 20 39 31 2c 20 39 32 2c 20 39    122, 91, 92, 9
32b0: 33 2c 20 39 34 2c 20 39 35 2c 20 39 36 2c 20 39  3, 94, 95, 96, 9
32c0: 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c 31 30  7, 98, 99,100,10
32d0: 31 2c 31 30 32 2c 31 30 33 2c 31 30 34 2c 31 30  1,102,103,104,10
32e0: 35 2c 31 30 36 2c 31 30 37 2c 0a 20 20 20 20 31  5,106,107,.    1
32f0: 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c 31  08,109,110,111,1
3300: 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35 2c 31  12,113,114,115,1
3310: 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39 2c 31  16,117,118,119,1
3320: 32 30 2c 31 32 31 2c 31 32 32 2c 31 32 33 2c 31  20,121,122,123,1
3330: 32 34 2c 31 32 35 2c 0a 20 20 20 20 31 32 36 2c  24,125,.    126,
3340: 31 32 37 2c 31 32 38 2c 31 32 39 2c 31 33 30 2c  127,128,129,130,
3350: 31 33 31 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c  131,132,133,134,
3360: 31 33 35 2c 31 33 36 2c 31 33 37 2c 31 33 38 2c  135,136,137,138,
3370: 31 33 39 2c 31 34 30 2c 31 34 31 2c 31 34 32 2c  139,140,141,142,
3380: 31 34 33 2c 0a 20 20 20 20 31 34 34 2c 31 34 35  143,.    144,145
3390: 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c 31 34 39  ,146,147,148,149
33a0: 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c 31 35 33  ,150,151,152,153
33b0: 2c 31 35 34 2c 31 35 35 2c 31 35 36 2c 31 35 37  ,154,155,156,157
33c0: 2c 31 35 38 2c 31 35 39 2c 31 36 30 2c 31 36 31  ,158,159,160,161
33d0: 2c 0a 20 20 20 20 31 36 32 2c 31 36 33 2c 31 36  ,.    162,163,16
33e0: 34 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c 31 36  4,165,166,167,16
33f0: 38 2c 31 36 39 2c 31 37 30 2c 31 37 31 2c 31 37  8,169,170,171,17
3400: 32 2c 31 37 33 2c 31 37 34 2c 31 37 35 2c 31 37  2,173,174,175,17
3410: 36 2c 31 37 37 2c 31 37 38 2c 31 37 39 2c 0a 20  6,177,178,179,. 
3420: 20 20 20 31 38 30 2c 31 38 31 2c 31 38 32 2c 31     180,181,182,1
3430: 38 33 2c 31 38 34 2c 31 38 35 2c 31 38 36 2c 31  83,184,185,186,1
3440: 38 37 2c 31 38 38 2c 31 38 39 2c 31 39 30 2c 31  87,188,189,190,1
3450: 39 31 2c 31 39 32 2c 31 39 33 2c 31 39 34 2c 31  91,192,193,194,1
3460: 39 35 2c 31 39 36 2c 31 39 37 2c 0a 20 20 20 20  95,196,197,.    
3470: 31 39 38 2c 31 39 39 2c 32 30 30 2c 32 30 31 2c  198,199,200,201,
3480: 32 30 32 2c 32 30 33 2c 32 30 34 2c 32 30 35 2c  202,203,204,205,
3490: 32 30 36 2c 32 30 37 2c 32 30 38 2c 32 30 39 2c  206,207,208,209,
34a0: 32 31 30 2c 32 31 31 2c 32 31 32 2c 32 31 33 2c  210,211,212,213,
34b0: 32 31 34 2c 32 31 35 2c 0a 20 20 20 20 32 31 36  214,215,.    216
34c0: 2c 32 31 37 2c 32 31 38 2c 32 31 39 2c 32 32 30  ,217,218,219,220
34d0: 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c 32 32 34  ,221,222,223,224
34e0: 2c 32 32 35 2c 32 32 36 2c 32 32 37 2c 32 32 38  ,225,226,227,228
34f0: 2c 32 32 39 2c 32 33 30 2c 32 33 31 2c 32 33 32  ,229,230,231,232
3500: 2c 32 33 33 2c 0a 20 20 20 20 32 33 34 2c 32 33  ,233,.    234,23
3510: 35 2c 32 33 36 2c 32 33 37 2c 32 33 38 2c 32 33  5,236,237,238,23
3520: 39 2c 32 34 30 2c 32 34 31 2c 32 34 32 2c 32 34  9,240,241,242,24
3530: 33 2c 32 34 34 2c 32 34 35 2c 32 34 36 2c 32 34  3,244,245,246,24
3540: 37 2c 32 34 38 2c 32 34 39 2c 32 35 30 2c 32 35  7,248,249,250,25
3550: 31 2c 0a 20 20 20 20 32 35 32 2c 32 35 33 2c 32  1,.    252,253,2
3560: 35 34 2c 32 35 35 0a 7d 3b 0a 23 64 65 66 69 6e  54,255.};.#defin
3570: 65 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 20 73  e UpperToLower s
3580: 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
3590: 65 72 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 73  er../*.** Some s
35a0: 79 73 74 65 6d 73 20 68 61 76 65 20 73 74 72 69  ystems have stri
35b0: 63 6d 70 28 29 2e 20 20 4f 74 68 65 72 73 20 68  cmp().  Others h
35c0: 61 76 65 20 73 74 72 63 61 73 65 63 6d 70 28 29  ave strcasecmp()
35d0: 2e 20 20 42 65 63 61 75 73 65 0a 2a 2a 20 74 68  .  Because.** th
35e0: 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 69 73  ere is no consis
35f0: 74 65 6e 63 79 2c 20 77 65 20 77 69 6c 6c 20 64  tency, we will d
3600: 65 66 69 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a 2a  efine our own..*
3610: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
3620: 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20  ICmp(const char 
3630: 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68  *zLeft, const ch
3640: 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 72  ar *zRight){.  r
3650: 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64  egister unsigned
3660: 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20   char *a, *b;.  
3670: 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  a = (unsigned ch
3680: 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20  ar *)zLeft;.  b 
3690: 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  = (unsigned char
36a0: 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68 69   *)zRight;.  whi
36b0: 6c 65 28 20 2a 61 21 3d 30 20 26 26 20 55 70 70  le( *a!=0 && Upp
36c0: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55  erToLower[*a]==U
36d0: 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29  pperToLower[*b])
36e0: 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20  { a++; b++; }.  
36f0: 72 65 74 75 72 6e 20 55 70 70 65 72 54 6f 4c 6f  return UpperToLo
3700: 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54  wer[*a] - UpperT
3710: 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 69 6e  oLower[*b];.}.in
3720: 74 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  t sqlite3StrNICm
3730: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c  p(const char *zL
3740: 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  eft, const char 
3750: 2a 7a 52 69 67 68 74 2c 20 69 6e 74 20 4e 29 7b  *zRight, int N){
3760: 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69  .  register unsi
3770: 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62  gned char *a, *b
3780: 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  a = (unsigne
3790: 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a  d char *)zLeft;.
37a0: 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    b = (unsigned 
37b0: 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20  char *)zRight;. 
37c0: 20 77 68 69 6c 65 28 20 4e 2d 2d 20 3e 20 30 20   while( N-- > 0 
37d0: 26 26 20 2a 61 21 3d 30 20 26 26 20 55 70 70 65  && *a!=0 && Uppe
37e0: 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70  rToLower[*a]==Up
37f0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b  perToLower[*b]){
3800: 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72   a++; b++; }.  r
3810: 65 74 75 72 6e 20 4e 3c 30 20 3f 20 30 20 3a 20  eturn N<0 ? 0 : 
3820: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d  UpperToLower[*a]
3830: 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b   - UpperToLower[
3840: 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  *b];.}../*.** Re
3850: 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a 20 69  turn TRUE if z i
3860: 73 20 61 20 70 75 72 65 20 6e 75 6d 65 72 69 63  s a pure numeric
3870: 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75 72 6e   string.  Return
3880: 20 46 41 4c 53 45 20 69 66 20 74 68 65 0a 2a 2a   FALSE if the.**
3890: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73   string contains
38a0: 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20 77   any character w
38b0: 68 69 63 68 20 69 73 20 6e 6f 74 20 70 61 72 74  hich is not part
38c0: 20 6f 66 20 61 20 6e 75 6d 62 65 72 2e 20 49 66   of a number. If
38d0: 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67 20 69  .** the string i
38e0: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 63 6f  s numeric and co
38f0: 6e 74 61 69 6e 73 20 74 68 65 20 27 2e 27 20 63  ntains the '.' c
3900: 68 61 72 61 63 74 65 72 2c 20 73 65 74 20 2a 72  haracter, set *r
3910: 65 61 6c 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52 55  ealnum.** to TRU
3920: 45 20 28 6f 74 68 65 72 77 69 73 65 20 46 41 4c  E (otherwise FAL
3930: 53 45 29 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 6d  SE)..**.** An em
3940: 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 63 6f  pty string is co
3950: 6e 73 69 64 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d  nsidered non-num
3960: 65 72 69 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  eric..*/.int sql
3970: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e  ite3IsNumber(con
3980: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
3990: 2a 72 65 61 6c 6e 75 6d 2c 20 75 38 20 65 6e 63  *realnum, u8 enc
39a0: 29 7b 0a 20 20 69 6e 74 20 69 6e 63 72 20 3d 20  ){.  int incr = 
39b0: 28 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  (enc==SQLITE_UTF
39c0: 38 3f 31 3a 32 29 3b 0a 20 20 69 66 28 20 65 6e  8?1:2);.  if( en
39d0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
39e0: 45 20 29 20 7a 2b 2b 3b 0a 20 20 69 66 28 20 2a  E ) z++;.  if( *
39f0: 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27 2b  z=='-' || *z=='+
3a00: 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20  ' ) z += incr;. 
3a10: 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a 28   if( !isdigit(*(
3a20: 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 72 65  u8*)z) ){.    re
3a30: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 20  turn 0;.  }.  z 
3a40: 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66 28 20 72  += incr;.  if( r
3a50: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
3a60: 6d 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20  m = 0;.  while( 
3a70: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
3a80: 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d   ){ z += incr; }
3a90: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29  .  if( *z=='.' )
3aa0: 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b  {.    z += incr;
3ab0: 0a 20 20 20 20 69 66 28 20 21 69 73 64 69 67 69  .    if( !isdigi
3ac0: 74 28 2a 28 75 38 2a 29 7a 29 20 29 20 72 65 74  t(*(u8*)z) ) ret
3ad0: 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65  urn 0;.    while
3ae0: 28 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29  ( isdigit(*(u8*)
3af0: 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b  z) ){ z += incr;
3b00: 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e   }.    if( realn
3b10: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
3b20: 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d  1;.  }.  if( *z=
3b30: 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20  ='e' || *z=='E' 
3b40: 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72  ){.    z += incr
3b50: 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b  ;.    if( *z=='+
3b60: 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a  ' || *z=='-' ) z
3b70: 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69 66   += incr;.    if
3b80: 28 20 21 69 73 64 69 67 69 74 28 2a 28 75 38 2a  ( !isdigit(*(u8*
3b90: 29 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  )z) ) return 0;.
3ba0: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
3bb0: 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 20 7a  it(*(u8*)z) ){ z
3bc0: 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20   += incr; }.    
3bd0: 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72  if( realnum ) *r
3be0: 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a  ealnum = 1;.  }.
3bf0: 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a    return *z==0;.
3c00: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72  }../*.** The str
3c10: 69 6e 67 20 7a 5b 5d 20 69 73 20 61 6e 20 61 73  ing z[] is an as
3c20: 63 69 69 20 72 65 70 72 65 73 65 6e 74 61 74 69  cii representati
3c30: 6f 6e 20 6f 66 20 61 20 72 65 61 6c 20 6e 75 6d  on of a real num
3c40: 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ber..** Convert 
3c50: 74 68 69 73 20 73 74 72 69 6e 67 20 74 6f 20 61  this string to a
3c60: 20 64 6f 75 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54   double..**.** T
3c70: 68 69 73 20 72 6f 75 74 69 6e 65 20 61 73 73 75  his routine assu
3c80: 6d 65 73 20 74 68 61 74 20 7a 5b 5d 20 72 65 61  mes that z[] rea
3c90: 6c 6c 79 20 69 73 20 61 20 76 61 6c 69 64 20 6e  lly is a valid n
3ca0: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 0a 2a 2a  umber.  If it.**
3cb0: 20 69 73 20 6e 6f 74 2c 20 74 68 65 20 72 65 73   is not, the res
3cc0: 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ult is undefined
3cd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
3ce0: 74 69 6e 65 20 69 73 20 75 73 65 64 20 69 6e 73  tine is used ins
3cf0: 74 65 61 64 20 6f 66 20 74 68 65 20 6c 69 62 72  tead of the libr
3d00: 61 72 79 20 61 74 6f 66 28 29 20 66 75 6e 63 74  ary atof() funct
3d10: 69 6f 6e 20 62 65 63 61 75 73 65 0a 2a 2a 20 74  ion because.** t
3d20: 68 65 20 6c 69 62 72 61 72 79 20 61 74 6f 66 28  he library atof(
3d30: 29 20 6d 69 67 68 74 20 77 61 6e 74 20 74 6f 20  ) might want to 
3d40: 75 73 65 20 22 2c 22 20 61 73 20 74 68 65 20 64  use "," as the d
3d50: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 73  ecimal point ins
3d60: 74 65 61 64 0a 2a 2a 20 6f 66 20 22 2e 22 20 64  tead.** of "." d
3d70: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 68 6f 77 20  epending on how 
3d80: 6c 6f 63 61 6c 65 20 69 73 20 73 65 74 2e 20 20  locale is set.  
3d90: 42 75 74 20 74 68 61 74 20 77 6f 75 6c 64 20 63  But that would c
3da0: 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 0a 2a 2a  ause problems.**
3db0: 20 66 6f 72 20 53 51 4c 2e 20 20 53 6f 20 74 68   for SQL.  So th
3dc0: 69 73 20 72 6f 75 74 69 6e 65 20 61 6c 77 61 79  is routine alway
3dd0: 73 20 75 73 65 73 20 22 2e 22 20 72 65 67 61 72  s uses "." regar
3de0: 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
3df0: 0a 2a 2f 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74  .*/.double sqlit
3e00: 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
3e10: 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72  r *z, const char
3e20: 20 2a 2a 70 7a 45 6e 64 29 7b 0a 20 20 69 6e 74   **pzEnd){.  int
3e30: 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20 4c 4f 4e   sign = 1;.  LON
3e40: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 76 31 20  GDOUBLE_TYPE v1 
3e50: 3d 20 30 2e 30 3b 0a 20 20 69 66 28 20 2a 7a 3d  = 0.0;.  if( *z=
3e60: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 73 69 67 6e  ='-' ){.    sign
3e70: 20 3d 20 2d 31 3b 0a 20 20 20 20 7a 2b 2b 3b 0a   = -1;.    z++;.
3e80: 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d    }else if( *z==
3e90: 27 2b 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a  '+' ){.    z++;.
3ea0: 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 69 73 64    }.  while( isd
3eb0: 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b  igit(*(u8*)z) ){
3ec0: 0a 20 20 20 20 76 31 20 3d 20 76 31 2a 31 30 2e  .    v1 = v1*10.
3ed0: 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a  0 + (*z - '0');.
3ee0: 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69      z++;.  }.  i
3ef0: 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20  f( *z=='.' ){.  
3f00: 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50    LONGDOUBLE_TYP
3f10: 45 20 64 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b  E divisor = 1.0;
3f20: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 77 68  .    z++;.    wh
3f30: 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28 75  ile( isdigit(*(u
3f40: 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 20 20 76  8*)z) ){.      v
3f50: 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a  1 = v1*10.0 + (*
3f60: 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 20 20  z - '0');.      
3f70: 64 69 76 69 73 6f 72 20 2a 3d 20 31 30 2e 30 3b  divisor *= 10.0;
3f80: 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
3f90: 7d 0a 20 20 20 20 76 31 20 2f 3d 20 64 69 76 69  }.    v1 /= divi
3fa0: 73 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a  sor;.  }.  if( *
3fb0: 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45  z=='e' || *z=='E
3fc0: 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 73 69  ' ){.    int esi
3fd0: 67 6e 20 3d 20 31 3b 0a 20 20 20 20 69 6e 74 20  gn = 1;.    int 
3fe0: 65 76 61 6c 20 3d 20 30 3b 0a 20 20 20 20 4c 4f  eval = 0;.    LO
3ff0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 63  NGDOUBLE_TYPE sc
4000: 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a  ale = 1.0;.    z
4010: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d  ++;.    if( *z==
4020: 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65 73 69  '-' ){.      esi
4030: 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7a  gn = -1;.      z
4040: 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ++;.    }else if
4050: 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  ( *z=='+' ){.   
4060: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
4070: 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74    while( isdigit
4080: 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20  (*(u8*)z) ){.   
4090: 20 20 20 65 76 61 6c 20 3d 20 65 76 61 6c 2a 31     eval = eval*1
40a0: 30 20 2b 20 2a 7a 20 2d 20 27 30 27 3b 0a 20 20  0 + *z - '0';.  
40b0: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20      z++;.    }. 
40c0: 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d     while( eval>=
40d0: 36 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  64 ){ scale *= 1
40e0: 2e 30 65 2b 36 34 3b 20 65 76 61 6c 20 2d 3d 20  .0e+64; eval -= 
40f0: 36 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28  64; }.    while(
4100: 20 65 76 61 6c 3e 3d 31 36 20 29 7b 20 73 63 61   eval>=16 ){ sca
4110: 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 36 3b 20 65  le *= 1.0e+16; e
4120: 76 61 6c 20 2d 3d 20 31 36 3b 20 7d 0a 20 20 20  val -= 16; }.   
4130: 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 34 20   while( eval>=4 
4140: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65  ){ scale *= 1.0e
4150: 2b 34 3b 20 65 76 61 6c 20 2d 3d 20 34 3b 20 7d  +4; eval -= 4; }
4160: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
4170: 3e 3d 31 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20  >=1 ){ scale *= 
4180: 31 2e 30 65 2b 31 3b 20 65 76 61 6c 20 2d 3d 20  1.0e+1; eval -= 
4190: 31 3b 20 7d 0a 20 20 20 20 69 66 28 20 65 73 69  1; }.    if( esi
41a0: 67 6e 3c 30 20 29 7b 0a 20 20 20 20 20 20 76 31  gn<0 ){.      v1
41b0: 20 2f 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d   /= scale;.    }
41c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 76 31 20 2a  else{.      v1 *
41d0: 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 0a 20  = scale;.    }. 
41e0: 20 7d 0a 20 20 69 66 28 20 70 7a 45 6e 64 20 29   }.  if( pzEnd )
41f0: 20 2a 70 7a 45 6e 64 20 3d 20 7a 3b 0a 20 20 72   *pzEnd = z;.  r
4200: 65 74 75 72 6e 20 73 69 67 6e 3c 30 20 3f 20 2d  eturn sign<0 ? -
4210: 76 31 20 3a 20 76 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  v1 : v1;.}../*.*
4220: 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66  * Return TRUE if
4230: 20 7a 4e 75 6d 20 69 73 20 61 20 36 34 2d 62 69   zNum is a 64-bi
4240: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
4250: 20 61 6e 64 20 77 72 69 74 65 0a 2a 2a 20 74 68   and write.** th
4260: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
4270: 6e 74 65 67 65 72 20 69 6e 74 6f 20 2a 70 4e 75  nteger into *pNu
4280: 6d 2e 20 20 49 66 20 7a 4e 75 6d 20 69 73 20 6e  m.  If zNum is n
4290: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ot an integer.**
42a0: 20 6f 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65   or is an intege
42b0: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
42c0: 72 67 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  rge to be expres
42d0: 73 65 64 20 77 69 74 68 20 36 34 20 62 69 74 73  sed with 64 bits
42e0: 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 74 75 72 6e  ,.** then return
42f0: 20 66 61 6c 73 65 2e 20 20 49 66 20 6e 3e 30 20   false.  If n>0 
4300: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
4310: 69 73 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  is string is not
4320: 0a 2a 2a 20 65 78 61 63 74 6c 79 20 6e 20 62 79  .** exactly n by
4330: 74 65 73 20 6c 6f 6e 67 2c 20 72 65 74 75 72 6e  tes long, return
4340: 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20 57 68   false..**.** Wh
4350: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
4360: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 77  was originally w
4370: 72 69 74 74 65 6e 20 69 74 20 64 65 61 6c 74 20  ritten it dealt 
4380: 77 69 74 68 20 6f 6e 6c 79 0a 2a 2a 20 33 32 2d  with only.** 32-
4390: 62 69 74 20 6e 75 6d 62 65 72 73 2e 20 20 41 74  bit numbers.  At
43a0: 20 74 68 61 74 20 74 69 6d 65 2c 20 69 74 20 77   that time, it w
43b0: 61 73 20 6d 75 63 68 20 66 61 73 74 65 72 20 74  as much faster t
43c0: 68 61 6e 20 74 68 65 0a 2a 2a 20 61 74 6f 69 28  han the.** atoi(
43d0: 29 20 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e  ) library routin
43e0: 65 20 69 6e 20 52 65 64 48 61 74 20 37 2e 32 2e  e in RedHat 7.2.
43f0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 61  .*/.int sqlite3a
4400: 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
4410: 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 4e 75   *zNum, i64 *pNu
4420: 6d 29 7b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b  m){.  i64 v = 0;
4430: 0a 20 20 69 6e 74 20 6e 65 67 3b 0a 20 20 69 6e  .  int neg;.  in
4440: 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a  t i, c;.  if( *z
4450: 4e 75 6d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  Num=='-' ){.    
4460: 6e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a 4e 75  neg = 1;.    zNu
4470: 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  m++;.  }else if(
4480: 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20   *zNum=='+' ){. 
4490: 20 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20 20 20     neg = 0;.    
44a0: 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  zNum++;.  }else{
44b0: 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20  .    neg = 0;.  
44c0: 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d  }.  for(i=0; (c=
44d0: 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26  zNum[i])>='0' &&
44e0: 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 0a 20   c<='9'; i++){. 
44f0: 20 20 20 76 20 3d 20 76 2a 31 30 20 2b 20 63 20     v = v*10 + c 
4500: 2d 20 27 30 27 3b 0a 20 20 7d 0a 20 20 2a 70 4e  - '0';.  }.  *pN
4510: 75 6d 20 3d 20 6e 65 67 20 3f 20 2d 76 20 3a 20  um = neg ? -v : 
4520: 76 3b 0a 20 20 72 65 74 75 72 6e 20 63 3d 3d 30  v;.  return c==0
4530: 20 26 26 20 69 3e 30 20 26 26 20 0a 20 20 20 20   && i>0 && .    
4540: 20 20 28 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31    (i<19 || (i==1
4550: 39 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d  9 && memcmp(zNum
4560: 2c 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37  ,"92233720368547
4570: 37 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 29 3b  75807",19)<=0));
4580: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74  .}../*.** The st
4590: 72 69 6e 67 20 7a 4e 75 6d 20 72 65 70 72 65 73  ring zNum repres
45a0: 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ents an integer.
45b0: 20 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65    There might be
45c0: 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69   some other.** i
45d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f  nformation follo
45e0: 77 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72  wing the integer
45f0: 20 74 6f 6f 2c 20 62 75 74 20 74 68 61 74 20 70   too, but that p
4600: 61 72 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a  art is ignored..
4610: 2a 2a 20 49 66 20 74 68 65 20 69 6e 74 65 67 65  ** If the intege
4620: 72 20 74 68 61 74 20 74 68 65 20 70 72 65 66 69  r that the prefi
4630: 78 20 6f 66 20 7a 4e 75 6d 20 72 65 70 72 65 73  x of zNum repres
4640: 65 6e 74 73 20 77 69 6c 6c 20 66 69 74 20 69 6e  ents will fit in
4650: 20 61 0a 2a 2a 20 33 32 2d 62 69 74 20 73 69 67   a.** 32-bit sig
4660: 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 72 65 74  ned integer, ret
4670: 75 72 6e 20 54 52 55 45 2e 20 20 4f 74 68 65 72  urn TRUE.  Other
4680: 77 69 73 65 20 72 65 74 75 72 6e 20 46 41 4c 53  wise return FALS
4690: 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  E..**.** This ro
46a0: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 46 41  utine returns FA
46b0: 4c 53 45 20 66 6f 72 20 74 68 65 20 73 74 72 69  LSE for the stri
46c0: 6e 67 20 2d 32 31 34 37 34 38 33 36 34 38 20 65  ng -2147483648 e
46d0: 76 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74  ven that.** that
46e0: 20 6e 75 6d 62 65 72 20 77 69 6c 6c 20 69 6e 20   number will in 
46f0: 66 61 63 74 20 66 69 74 20 69 6e 20 61 20 33 32  fact fit in a 32
4700: 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 20 20 42  -bit integer.  B
4710: 75 74 20 70 6f 73 69 74 69 76 65 0a 2a 2a 20 32  ut positive.** 2
4720: 31 34 37 34 38 33 36 34 38 20 77 69 6c 6c 20 6e  147483648 will n
4730: 6f 74 20 66 69 74 20 69 6e 20 33 32 20 62 69 74  ot fit in 32 bit
4740: 73 2e 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20  s.  So it seems 
4750: 73 61 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a  safer to return.
4760: 2a 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61  ** false..*/.sta
4770: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 46  tic int sqlite3F
4780: 69 74 73 49 6e 33 32 42 69 74 73 28 63 6f 6e 73  itsIn32Bits(cons
4790: 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20  t char *zNum){. 
47a0: 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28   int i, c;.  if(
47b0: 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a   *zNum=='-' || *
47c0: 7a 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d  zNum=='+' ) zNum
47d0: 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28  ++;.  for(i=0; (
47e0: 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20  c=zNum[i])>='0' 
47f0: 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b  && c<='9'; i++){
4800: 7d 0a 20 20 72 65 74 75 72 6e 20 69 3c 31 30 20  }.  return i<10 
4810: 7c 7c 20 28 69 3d 3d 31 30 20 26 26 20 6d 65 6d  || (i==10 && mem
4820: 63 6d 70 28 7a 4e 75 6d 2c 22 32 31 34 37 34 38  cmp(zNum,"214748
4830: 33 36 34 37 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d  3647",10)<=0);.}
4840: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20  ../*.** If zNum 
4850: 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e  represents an in
4860: 74 65 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20  teger that will 
4870: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2c 20  fit in 32-bits, 
4880: 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61  then set.** *pVa
4890: 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65  lue to that inte
48a0: 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ger and return t
48b0: 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20  rue.  Otherwise 
48c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f  return false..*/
48d0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
48e0: 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
48f0: 2a 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c  *zNum, int *pVal
4900: 75 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  ue){.  if( sqlit
4910: 65 33 46 69 74 73 49 6e 33 32 42 69 74 73 28 7a  e3FitsIn32Bits(z
4920: 4e 75 6d 29 20 29 7b 0a 20 20 20 20 2a 70 56 61  Num) ){.    *pVa
4930: 6c 75 65 20 3d 20 61 74 6f 69 28 7a 4e 75 6d 29  lue = atoi(zNum)
4940: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
4950: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
4960: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72  }../*.** The str
4970: 69 6e 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65  ing zNum represe
4980: 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  nts an integer. 
4990: 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65 20   There might be 
49a0: 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e  some other.** in
49b0: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77  formation follow
49c0: 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72 20  ing the integer 
49d0: 74 6f 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61  too, but that pa
49e0: 72 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a  rt is ignored..*
49f0: 2a 20 49 66 20 74 68 65 20 69 6e 74 65 67 65 72  * If the integer
4a00: 20 74 68 61 74 20 74 68 65 20 70 72 65 66 69 78   that the prefix
4a10: 20 6f 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65   of zNum represe
4a20: 6e 74 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  nts will fit in 
4a30: 61 0a 2a 2a 20 36 34 2d 62 69 74 20 73 69 67 6e  a.** 64-bit sign
4a40: 65 64 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75  ed integer, retu
4a50: 72 6e 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77  rn TRUE.  Otherw
4a60: 69 73 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45  ise return FALSE
4a70: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
4a80: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c  tine returns FAL
4a90: 53 45 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e  SE for the strin
4aa0: 67 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  g -9223372036854
4ab0: 37 37 35 38 30 38 20 65 76 65 6e 20 74 68 61 74  775808 even that
4ac0: 0a 2a 2a 20 74 68 61 74 20 6e 75 6d 62 65 72 20  .** that number 
4ad0: 77 69 6c 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20  will, in theory 
4ae0: 66 69 74 20 69 6e 20 61 20 36 34 2d 62 69 74 20  fit in a 64-bit 
4af0: 69 6e 74 65 67 65 72 2e 20 20 50 6f 73 69 74 69  integer.  Positi
4b00: 76 65 0a 2a 2a 20 39 32 32 33 33 37 33 30 33 36  ve.** 9223373036
4b10: 38 35 34 37 37 35 38 30 38 20 77 69 6c 6c 20 6e  854775808 will n
4b20: 6f 74 20 66 69 74 20 69 6e 20 36 34 20 62 69 74  ot fit in 64 bit
4b30: 73 2e 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20  s.  So it seems 
4b40: 73 61 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a  safer to return.
4b50: 2a 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74  ** false..*/.int
4b60: 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34   sqlite3FitsIn64
4b70: 42 69 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20  Bits(const char 
4b80: 2a 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c  *zNum){.  int i,
4b90: 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d   c;.  if( *zNum=
4ba0: 3d 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27  ='-' || *zNum=='
4bb0: 2b 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66  +' ) zNum++;.  f
4bc0: 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b  or(i=0; (c=zNum[
4bd0: 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27  i])>='0' && c<='
4be0: 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74  9'; i++){}.  ret
4bf0: 75 72 6e 20 69 3c 31 39 20 7c 7c 20 28 69 3d 3d  urn i<19 || (i==
4c00: 31 39 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75  19 && memcmp(zNu
4c10: 6d 2c 22 39 32 32 33 33 37 32 30 33 36 38 35 34  m,"9223372036854
4c20: 37 37 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 3b  775807",19)<=0);
4c30: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67  .}.../*.** Chang
4c40: 65 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67  e the sqlite.mag
4c50: 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d  ic from SQLITE_M
4c60: 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20 53 51 4c  AGIC_OPEN to SQL
4c70: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 2e 0a  ITE_MAGIC_BUSY..
4c80: 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65 72 72  ** Return an err
4c90: 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66  or (non-zero) if
4ca0: 20 74 68 65 20 6d 61 67 69 63 20 77 61 73 20 6e   the magic was n
4cb0: 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ot SQLITE_MAGIC_
4cc0: 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74 68 69  OPEN.** when thi
4cd0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c  s routine is cal
4ce0: 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  led..**.** This 
4cf0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 61 74 74  routine is a att
4d00: 65 6d 70 74 20 74 6f 20 64 65 74 65 63 74 20 69  empt to detect i
4d10: 66 20 74 77 6f 20 74 68 72 65 61 64 73 20 75 73  f two threads us
4d20: 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 73 71  e the.** same sq
4d30: 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72 20 61 74  lite* pointer at
4d40: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 20   the same time. 
4d50: 20 54 68 65 72 65 20 69 73 20 61 20 72 61 63 65   There is a race
4d60: 20 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 20 73   .** condition s
4d70: 6f 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  o it is possible
4d80: 20 74 68 61 74 20 74 68 65 20 65 72 72 6f 72 20   that the error 
4d90: 69 73 20 6e 6f 74 20 64 65 74 65 63 74 65 64 2e  is not detected.
4da0: 0a 2a 2a 20 42 75 74 20 75 73 75 61 6c 6c 79 20  .** But usually 
4db0: 74 68 65 20 70 72 6f 62 6c 65 6d 20 77 69 6c 6c  the problem will
4dc0: 20 62 65 20 73 65 65 6e 2e 20 20 54 68 65 20 72   be seen.  The r
4dd0: 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 61 6e  esult will be an
4de0: 0a 2a 2a 20 65 72 72 6f 72 20 77 68 69 63 68 20  .** error which 
4df0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64  can be used to d
4e00: 65 62 75 67 20 74 68 65 20 61 70 70 6c 69 63 61  ebug the applica
4e10: 74 69 6f 6e 20 74 68 61 74 20 69 73 0a 2a 2a 20  tion that is.** 
4e20: 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69 6e 63  using SQLite inc
4e30: 6f 72 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20  orrectly..**.** 
4e40: 54 69 63 6b 65 74 20 23 32 30 32 3a 20 20 49 66  Ticket #202:  If
4e50: 20 64 62 2d 3e 6d 61 67 69 63 20 69 73 20 6e 6f   db->magic is no
4e60: 74 20 61 20 76 61 6c 69 64 20 6f 70 65 6e 20 76  t a valid open v
4e70: 61 6c 75 65 2c 20 74 61 6b 65 20 63 61 72 65 20  alue, take care 
4e80: 6e 6f 74 0a 2a 2a 20 74 6f 20 6d 6f 64 69 66 79  not.** to modify
4e90: 20 74 68 65 20 64 62 20 73 74 72 75 63 74 75 72   the db structur
4ea0: 65 20 61 74 20 61 6c 6c 2e 20 20 49 74 20 63 6f  e at all.  It co
4eb0: 75 6c 64 20 62 65 20 74 68 61 74 20 64 62 20 69  uld be that db i
4ec0: 73 20 61 20 73 74 61 6c 65 0a 2a 2a 20 70 6f 69  s a stale.** poi
4ed0: 6e 74 65 72 2e 20 20 49 6e 20 6f 74 68 65 72 20  nter.  In other 
4ee0: 77 6f 72 64 73 2c 20 69 74 20 63 6f 75 6c 64 20  words, it could 
4ef0: 62 65 20 74 68 61 74 20 74 68 65 72 65 20 68 61  be that there ha
4f00: 73 20 62 65 65 6e 20 61 20 70 72 69 6f 72 0a 2a  s been a prior.*
4f10: 2a 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  * call to sqlite
4f20: 33 5f 63 6c 6f 73 65 28 64 62 29 20 61 6e 64 20  3_close(db) and 
4f30: 64 62 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c  db has been deal
4f40: 6c 6f 63 61 74 65 64 2e 20 20 41 6e 64 20 77 65  located.  And we
4f50: 20 64 6f 0a 2a 2a 20 6e 6f 74 20 77 61 6e 74 20   do.** not want 
4f60: 74 6f 20 77 72 69 74 65 20 69 6e 74 6f 20 64 65  to write into de
4f70: 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79  allocated memory
4f80: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4f90: 53 61 66 65 74 79 4f 6e 28 73 71 6c 69 74 65 33  SafetyOn(sqlite3
4fa0: 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d   *db){.  if( db-
4fb0: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
4fc0: 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20  AGIC_OPEN ){.   
4fd0: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
4fe0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a  ITE_MAGIC_BUSY;.
4ff0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
5000: 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61  }else if( db->ma
5010: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
5020: 43 5f 42 55 53 59 20 7c 7c 20 64 62 2d 3e 6d 61  C_BUSY || db->ma
5030: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
5040: 43 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 64  C_ERROR ){.    d
5050: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
5060: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
5070: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
5080: 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74  SQLITE_Interrupt
5090: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31  ;.  }.  return 1
50a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67  ;.}../*.** Chang
50b0: 65 20 74 68 65 20 6d 61 67 69 63 20 66 72 6f 6d  e the magic from
50c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
50d0: 53 59 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47  SY to SQLITE_MAG
50e0: 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20 52 65 74 75  IC_OPEN..** Retu
50f0: 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e 6f 6e  rn an error (non
5100: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 6d 61  -zero) if the ma
5110: 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51 4c 49  gic was not SQLI
5120: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 0a 2a 2a  TE_MAGIC_BUSY.**
5130: 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   when this routi
5140: 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ne is called..*/
5150: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
5160: 74 79 4f 66 66 28 73 71 6c 69 74 65 33 20 2a 64  tyOff(sqlite3 *d
5170: 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  b){.  if( db->ma
5180: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
5190: 43 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 64 62  C_BUSY ){.    db
51a0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
51b0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 20  _MAGIC_OPEN;.   
51c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c   return 0;.  }el
51d0: 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  se if( db->magic
51e0: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  ==SQLITE_MAGIC_O
51f0: 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67 69 63  PEN || db->magic
5200: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  ==SQLITE_MAGIC_E
5210: 52 52 4f 52 20 29 7b 0a 20 20 20 20 64 62 2d 3e  RROR ){.    db->
5220: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
5230: 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20  AGIC_ERROR;.    
5240: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
5250: 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20  ITE_Interrupt;. 
5260: 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
5270: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
5280: 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 68 61   make sure we ha
5290: 76 65 20 61 20 76 61 6c 69 64 20 64 62 20 70 6f  ve a valid db po
52a0: 69 6e 74 65 72 2e 20 20 54 68 69 73 20 74 65 73  inter.  This tes
52b0: 74 20 69 73 20 6e 6f 74 0a 2a 2a 20 66 6f 6f 6c  t is not.** fool
52c0: 70 72 6f 6f 66 20 62 75 74 20 69 74 20 64 6f 65  proof but it doe
52d0: 73 20 70 72 6f 76 69 64 65 20 73 6f 6d 65 20 6d  s provide some m
52e0: 65 61 73 75 72 65 20 6f 66 20 70 72 6f 74 65 63  easure of protec
52f0: 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 2a 2a 20  tion against.** 
5300: 6d 69 73 75 73 65 20 6f 66 20 74 68 65 20 69 6e  misuse of the in
5310: 74 65 72 66 61 63 65 20 73 75 63 68 20 61 73 20  terface such as 
5320: 70 61 73 73 69 6e 67 20 69 6e 20 64 62 20 70 6f  passing in db po
5330: 69 6e 74 65 72 73 20 74 68 61 74 20 61 72 65 0a  inters that are.
5340: 2a 2a 20 4e 55 4c 4c 20 6f 72 20 77 68 69 63 68  ** NULL or which
5350: 20 68 61 76 65 20 62 65 65 6e 20 70 72 65 76 69   have been previ
5360: 6f 75 73 6c 79 20 63 6c 6f 73 65 64 2e 20 20 49  ously closed.  I
5370: 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  f this routine r
5380: 65 74 75 72 6e 73 0a 2a 2a 20 54 52 55 45 20 69  eturns.** TRUE i
5390: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
53a0: 20 64 62 20 70 6f 69 6e 74 65 72 20 69 73 20 69   db pointer is i
53b0: 6e 76 61 6c 69 64 20 61 6e 64 20 73 68 6f 75 6c  nvalid and shoul
53c0: 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 64 65 72 65  d not be.** dere
53d0: 66 65 72 65 6e 63 65 64 20 66 6f 72 20 61 6e 79  ferenced for any
53e0: 20 72 65 61 73 6f 6e 2e 20 20 54 68 65 20 63 61   reason.  The ca
53f0: 6c 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  lling function s
5400: 68 6f 75 6c 64 20 69 6e 76 6f 6b 65 0a 2a 2a 20  hould invoke.** 
5410: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 69 6d  SQLITE_MISUSE im
5420: 6d 65 64 69 61 74 65 6c 79 2e 0a 2a 2f 0a 69 6e  mediately..*/.in
5430: 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
5440: 68 65 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  heck(sqlite3 *db
5450: 29 7b 0a 20 20 69 6e 74 20 6d 61 67 69 63 3b 0a  ){.  int magic;.
5460: 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 72 65    if( db==0 ) re
5470: 74 75 72 6e 20 31 3b 0a 20 20 6d 61 67 69 63 20  turn 1;.  magic 
5480: 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a 20 20 69  = db->magic;.  i
5490: 66 28 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45  f( magic!=SQLITE
54a0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 26 26  _MAGIC_CLOSED &&
54b0: 0a 20 20 20 20 20 20 20 20 20 6d 61 67 69 63 21  .         magic!
54c0: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50  =SQLITE_MAGIC_OP
54d0: 45 4e 20 26 26 0a 20 20 20 20 20 20 20 20 20 6d  EN &&.         m
54e0: 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47  agic!=SQLITE_MAG
54f0: 49 43 5f 42 55 53 59 20 29 20 72 65 74 75 72 6e  IC_BUSY ) return
5500: 20 31 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a   1;.  return 0;.
5510: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 61 72  }../*.** The var
5520: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
5530: 65 67 65 72 20 65 6e 63 6f 64 69 6e 67 20 69 73  eger encoding is
5540: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a   as follows:.**.
5550: 2a 2a 20 4b 45 59 3a 0a 2a 2a 20 20 20 20 20 20  ** KEY:.**      
5560: 20 20 20 41 20 3d 20 30 78 78 78 78 78 78 78 20     A = 0xxxxxxx 
5570: 20 20 20 37 20 62 69 74 73 20 6f 66 20 64 61 74     7 bits of dat
5580: 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62  a and one flag b
5590: 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 42 20  it.**         B 
55a0: 3d 20 31 78 78 78 78 78 78 78 20 20 20 20 37 20  = 1xxxxxxx    7 
55b0: 62 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64  bits of data and
55c0: 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a   one flag bit.**
55d0: 20 20 20 20 20 20 20 20 20 43 20 3d 20 78 78 78           C = xxx
55e0: 78 78 78 78 78 20 20 20 20 38 20 62 69 74 73 20  xxxxx    8 bits 
55f0: 6f 66 20 64 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37  of data.**.**  7
5600: 20 62 69 74 73 20 2d 20 41 0a 2a 2a 20 31 34 20   bits - A.** 14 
5610: 62 69 74 73 20 2d 20 42 41 0a 2a 2a 20 32 31 20  bits - BA.** 21 
5620: 62 69 74 73 20 2d 20 42 42 41 0a 2a 2a 20 32 38  bits - BBA.** 28
5630: 20 62 69 74 73 20 2d 20 42 42 42 41 0a 2a 2a 20   bits - BBBA.** 
5640: 33 35 20 62 69 74 73 20 2d 20 42 42 42 42 41 0a  35 bits - BBBBA.
5650: 2a 2a 20 34 32 20 62 69 74 73 20 2d 20 42 42 42  ** 42 bits - BBB
5660: 42 42 41 0a 2a 2a 20 34 39 20 62 69 74 73 20 2d  BBA.** 49 bits -
5670: 20 42 42 42 42 42 42 41 0a 2a 2a 20 35 36 20 62   BBBBBBA.** 56 b
5680: 69 74 73 20 2d 20 42 42 42 42 42 42 42 41 0a 2a  its - BBBBBBBA.*
5690: 2a 20 36 34 20 62 69 74 73 20 2d 20 42 42 42 42  * 64 bits - BBBB
56a0: 42 42 42 42 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  BBBBC.*/../*.** 
56b0: 57 72 69 74 65 20 61 20 36 34 2d 62 69 74 20 76  Write a 64-bit v
56c0: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
56d0: 6e 74 65 67 65 72 20 74 6f 20 6d 65 6d 6f 72 79  nteger to memory
56e0: 20 73 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30   starting at p[0
56f0: 5d 2e 0a 2a 2a 20 54 68 65 20 6c 65 6e 67 74 68  ]..** The length
5700: 20 6f 66 20 64 61 74 61 20 77 72 69 74 65 20 77   of data write w
5710: 69 6c 6c 20 62 65 20 62 65 74 77 65 65 6e 20 31  ill be between 1
5720: 20 61 6e 64 20 39 20 62 79 74 65 73 2e 20 20 54   and 9 bytes.  T
5730: 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20  he number.** of 
5740: 62 79 74 65 73 20 77 72 69 74 74 65 6e 20 69 73  bytes written is
5750: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a   returned..**.**
5760: 20 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   A variable-leng
5770: 74 68 20 69 6e 74 65 67 65 72 20 63 6f 6e 73 69  th integer consi
5780: 73 74 73 20 6f 66 20 74 68 65 20 6c 6f 77 65 72  sts of the lower
5790: 20 37 20 62 69 74 73 20 6f 66 20 65 61 63 68 20   7 bits of each 
57a0: 62 79 74 65 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20  byte.** for all 
57b0: 62 79 74 65 73 20 74 68 61 74 20 68 61 76 65 20  bytes that have 
57c0: 74 68 65 20 38 74 68 20 62 69 74 20 73 65 74 20  the 8th bit set 
57d0: 61 6e 64 20 6f 6e 65 20 62 79 74 65 20 77 69 74  and one byte wit
57e0: 68 20 74 68 65 20 38 74 68 0a 2a 2a 20 62 69 74  h the 8th.** bit
57f0: 20 63 6c 65 61 72 2e 20 20 45 78 63 65 70 74 2c   clear.  Except,
5800: 20 69 66 20 77 65 20 67 65 74 20 74 6f 20 74 68   if we get to th
5810: 65 20 39 74 68 20 62 79 74 65 2c 20 69 74 20 73  e 9th byte, it s
5820: 74 6f 72 65 73 20 74 68 65 20 66 75 6c 6c 0a 2a  tores the full.*
5830: 2a 20 38 20 62 69 74 73 20 61 6e 64 20 69 73 20  * 8 bits and is 
5840: 74 68 65 20 6c 61 73 74 20 62 79 74 65 2e 0a 2a  the last byte..*
5850: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
5860: 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
5870: 63 68 61 72 20 2a 70 2c 20 75 36 34 20 76 29 7b  char *p, u64 v){
5880: 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a  .  int i, j, n;.
5890: 20 20 75 38 20 62 75 66 5b 31 30 5d 3b 0a 20 20    u8 buf[10];.  
58a0: 69 66 28 20 76 20 26 20 28 28 28 75 36 34 29 30  if( v & (((u64)0
58b0: 78 66 66 30 30 30 30 30 30 29 3c 3c 33 32 29 20  xff000000)<<32) 
58c0: 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d 20 76 3b  ){.    p[8] = v;
58d0: 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b 0a 20 20  .    v >>= 8;.  
58e0: 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e 3d 30 3b    for(i=7; i>=0;
58f0: 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 70 5b 69   i--){.      p[i
5900: 5d 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c  ] = (v & 0x7f) |
5910: 20 30 78 38 30 3b 0a 20 20 20 20 20 20 76 20 3e   0x80;.      v >
5920: 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >= 7;.    }.    
5930: 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d 20 20 20  return 9;.  }   
5940: 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 64 6f 7b   .  n = 0;.  do{
5950: 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d 20 3d 20  .    buf[n++] = 
5960: 28 76 20 26 20 30 78 37 66 29 20 7c 20 30 78 38  (v & 0x7f) | 0x8
5970: 30 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a  0;.    v >>= 7;.
5980: 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20 29    }while( v!=0 )
5990: 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d 20 30 78  ;.  buf[0] &= 0x
59a0: 37 66 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3c  7f;.  assert( n<
59b0: 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 2c  =9 );.  for(i=0,
59c0: 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b 20 6a 2d   j=n-1; j>=0; j-
59d0: 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 70 5b 69  -, i++){.    p[i
59e0: 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20 20 7d 0a  ] = buf[j];.  }.
59f0: 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f    return n;.}../
5a00: 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36 34 2d 62  *.** Read a 64-b
5a10: 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  it variable-leng
5a20: 74 68 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20  th integer from 
5a30: 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20  memory starting 
5a40: 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75  at p[0]..** Retu
5a50: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
5a60: 20 62 79 74 65 73 20 72 65 61 64 2e 20 20 54 68   bytes read.  Th
5a70: 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65  e value is store
5a80: 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20  d in *v..*/.int 
5a90: 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
5aa0: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
5ab0: 63 68 61 72 20 2a 70 2c 20 75 36 34 20 2a 76 29  char *p, u64 *v)
5ac0: 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20 75 36 34  {.  u32 x;.  u64
5ad0: 20 78 36 34 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20   x64;.  int n;. 
5ae0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63   unsigned char c
5af0: 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b  ;.  if( ((c = p[
5b00: 30 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29  0]) & 0x80)==0 )
5b10: 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20  {.    *v = c;.  
5b20: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
5b30: 20 20 78 20 3d 20 63 20 26 20 30 78 37 66 3b 0a    x = c & 0x7f;.
5b40: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 31 5d    if( ((c = p[1]
5b50: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
5b60: 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20      *v = (x<<7) 
5b70: 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | c;.    return 
5b80: 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c  2;.  }.  x = (x<
5b90: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
5ba0: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 32 5d    if( ((c = p[2]
5bb0: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
5bc0: 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20      *v = (x<<7) 
5bd0: 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | c;.    return 
5be0: 33 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c  3;.  }.  x = (x<
5bf0: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
5c00: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 33 5d    if( ((c = p[3]
5c10: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
5c20: 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20      *v = (x<<7) 
5c30: 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | c;.    return 
5c40: 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20 3d 20 28  4;.  }.  x64 = (
5c50: 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29  x<<7) | (c&0x7f)
5c60: 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20 64 6f 7b  ;.  n = 4;.  do{
5c70: 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b 2b 5d 3b  .    c = p[n++];
5c80: 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39 20 29 7b  .    if( n==9 ){
5c90: 0a 20 20 20 20 20 20 78 36 34 20 3d 20 28 78 36  .      x64 = (x6
5ca0: 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20 20 20 20  4<<8) | c;.     
5cb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
5cc0: 20 20 78 36 34 20 3d 20 28 78 36 34 3c 3c 37 29    x64 = (x64<<7)
5cd0: 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 7d   | (c&0x7f);.  }
5ce0: 77 68 69 6c 65 28 20 28 63 20 26 20 30 78 38 30  while( (c & 0x80
5cf0: 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20 3d 20 78  )!=0 );.  *v = x
5d00: 36 34 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a  64;.  return n;.
5d10: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20  }../*.** Read a 
5d20: 33 32 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d  32-bit variable-
5d30: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66  length integer f
5d40: 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74  rom memory start
5d50: 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20  ing at p[0]..** 
5d60: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
5d70: 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e  r of bytes read.
5d80: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73    The value is s
5d90: 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a  tored in *v..*/.
5da0: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
5db0: 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
5dc0: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75  igned char *p, u
5dd0: 33 32 20 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b  32 *v){.  u32 x;
5de0: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69  .  int n;.  unsi
5df0: 67 6e 65 64 20 63 68 61 72 20 63 3b 0a 20 20 69  gned char c;.  i
5e00: 66 28 20 28 28 73 69 67 6e 65 64 20 63 68 61 72  f( ((signed char
5e10: 2a 29 70 29 5b 30 5d 3e 3d 30 20 29 7b 0a 20 20  *)p)[0]>=0 ){.  
5e20: 20 20 2a 76 20 3d 20 70 5b 30 5d 3b 0a 20 20 20    *v = p[0];.   
5e30: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
5e40: 20 78 20 3d 20 70 5b 30 5d 20 26 20 30 78 37 66   x = p[0] & 0x7f
5e50: 3b 0a 20 20 69 66 28 20 28 28 73 69 67 6e 65 64  ;.  if( ((signed
5e60: 20 63 68 61 72 2a 29 70 29 5b 31 5d 3e 3d 30 20   char*)p)[1]>=0 
5e70: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
5e80: 37 29 20 7c 20 70 5b 31 5d 3b 0a 20 20 20 20 72  7) | p[1];.    r
5e90: 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78  eturn 2;.  }.  x
5ea0: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 70 5b 31   = (x<<7) | (p[1
5eb0: 5d 20 26 20 30 78 37 66 29 3b 0a 20 20 6e 20 3d  ] & 0x7f);.  n =
5ec0: 20 32 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 78 20   2;.  do{.    x 
5ed0: 3d 20 28 78 3c 3c 37 29 20 7c 20 28 28 63 20 3d  = (x<<7) | ((c =
5ee0: 20 70 5b 6e 2b 2b 5d 29 26 30 78 37 66 29 3b 0a   p[n++])&0x7f);.
5ef0: 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30    }while( (c & 0
5f00: 78 38 30 29 21 3d 30 20 26 26 20 6e 3c 39 20 29  x80)!=0 && n<9 )
5f10: 3b 0a 20 20 2a 76 20 3d 20 78 3b 0a 20 20 72 65  ;.  *v = x;.  re
5f20: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
5f30: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
5f40: 65 72 20 6f 66 20 62 79 74 65 73 20 74 68 61 74  er of bytes that
5f50: 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20   will be needed 
5f60: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 67 69 76  to store the giv
5f70: 65 6e 0a 2a 2a 20 36 34 2d 62 69 74 20 69 6e 74  en.** 64-bit int
5f80: 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  eger..*/.int sql
5f90: 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
5fa0: 34 20 76 29 7b 0a 20 20 69 6e 74 20 69 20 3d 20  4 v){.  int i = 
5fb0: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69 2b 2b  0;.  do{.    i++
5fc0: 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20  ;.    v >>= 7;. 
5fd0: 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20 26 26   }while( v!=0 &&
5fe0: 20 69 3c 39 20 29 3b 0a 20 20 72 65 74 75 72 6e   i<9 );.  return
5ff0: 20 69 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69   i;.}..#if !defi
6000: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
6010: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20 7c 7c  BLOB_LITERAL) ||
6020: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6030: 48 41 53 5f 43 4f 44 45 43 29 20 5c 0a 20 20 20  HAS_CODEC) \.   
6040: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
6050: 54 45 5f 54 45 53 54 29 0a 2f 2a 0a 2a 2a 20 54  TE_TEST)./*.** T
6060: 72 61 6e 73 6c 61 74 65 20 61 20 73 69 6e 67 6c  ranslate a singl
6070: 65 20 62 79 74 65 20 6f 66 20 48 65 78 20 69 6e  e byte of Hex in
6080: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  to an integer..*
6090: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78  /.static int hex
60a0: 54 6f 49 6e 74 28 69 6e 74 20 68 29 7b 0a 20 20  ToInt(int h){.  
60b0: 69 66 28 20 68 3e 3d 27 30 27 20 26 26 20 68 3c  if( h>='0' && h<
60c0: 3d 27 39 27 20 29 7b 0a 20 20 20 20 72 65 74 75  ='9' ){.    retu
60d0: 72 6e 20 68 20 2d 20 27 30 27 3b 0a 20 20 7d 65  rn h - '0';.  }e
60e0: 6c 73 65 20 69 66 28 20 68 3e 3d 27 61 27 20 26  lse if( h>='a' &
60f0: 26 20 68 3c 3d 27 66 27 20 29 7b 0a 20 20 20 20  & h<='f' ){.    
6100: 72 65 74 75 72 6e 20 68 20 2d 20 27 61 27 20 2b  return h - 'a' +
6110: 20 31 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   10;.  }else{.  
6120: 20 20 61 73 73 65 72 74 28 20 68 3e 3d 27 41 27    assert( h>='A'
6130: 20 26 26 20 68 3c 3d 27 46 27 20 29 3b 0a 20 20   && h<='F' );.  
6140: 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27 41 27    return h - 'A'
6150: 20 2b 20 31 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e   + 10;.  }.}.#en
6160: 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f  dif /* !SQLITE_O
6170: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
6180: 20 7c 7c 20 53 51 4c 49 54 45 5f 48 41 53 5f 43   || SQLITE_HAS_C
6190: 4f 44 45 43 20 7c 7c 20 53 51 4c 49 54 45 5f 54  ODEC || SQLITE_T
61a0: 45 53 54 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  EST */..#if !def
61b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
61c0: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20 7c  _BLOB_LITERAL) |
61d0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
61e0: 5f 48 41 53 5f 43 4f 44 45 43 29 0a 2f 2a 0a 2a  _HAS_CODEC)./*.*
61f0: 2a 20 43 6f 6e 76 65 72 74 20 61 20 42 4c 4f 42  * Convert a BLOB
6200: 20 6c 69 74 65 72 61 6c 20 6f 66 20 74 68 65 20   literal of the 
6210: 66 6f 72 6d 20 22 78 27 68 68 68 68 68 68 27 22  form "x'hhhhhh'"
6220: 20 69 6e 74 6f 20 69 74 73 20 62 69 6e 61 72 79   into its binary
6230: 0a 2a 2a 20 76 61 6c 75 65 2e 20 20 52 65 74 75  .** value.  Retu
6240: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
6250: 69 74 73 20 62 69 6e 61 72 79 20 76 61 6c 75 65  its binary value
6260: 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  .  Space to hold
6270: 20 74 68 65 0a 2a 2a 20 62 69 6e 61 72 79 20 76   the.** binary v
6280: 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 6f 62  alue has been ob
6290: 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
62a0: 6f 63 20 61 6e 64 20 6d 75 73 74 20 62 65 20 66  oc and must be f
62b0: 72 65 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 63  reed by.** the c
62c0: 61 6c 6c 69 6e 67 20 72 6f 75 74 69 6e 65 2e 0a  alling routine..
62d0: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
62e0: 48 65 78 54 6f 42 6c 6f 62 28 63 6f 6e 73 74 20  HexToBlob(const 
62f0: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72  char *z){.  char
6300: 20 2a 7a 42 6c 6f 62 3b 0a 20 20 69 6e 74 20 69   *zBlob;.  int i
6310: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c  ;.  int n = strl
6320: 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 6e 25 32  en(z);.  if( n%2
6330: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20   ) return 0;..  
6340: 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29  zBlob = (char *)
6350: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 2f 32  sqliteMalloc(n/2
6360: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
6370: 6e 3b 20 69 2b 3d 32 29 7b 0a 20 20 20 20 7a 42  n; i+=2){.    zB
6380: 6c 6f 62 5b 69 2f 32 5d 20 3d 20 28 68 65 78 54  lob[i/2] = (hexT
6390: 6f 49 6e 74 28 7a 5b 69 5d 29 3c 3c 34 29 20 7c  oInt(z[i])<<4) |
63a0: 20 68 65 78 54 6f 49 6e 74 28 7a 5b 69 2b 31 5d   hexToInt(z[i+1]
63b0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
63c0: 7a 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64 69 66 20  zBlob;.}.#endif 
63d0: 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  /* !SQLITE_OMIT_
63e0: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 7c 7c 20  BLOB_LITERAL || 
63f0: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
6400: 20 2a 2f 0a 0a 23 69 66 20 64 65 66 69 6e 65 64   */..#if defined
6410: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 2f 2a  (SQLITE_TEST)./*
6420: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 65 78 74  .** Convert text
6430: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
6440: 65 20 22 25 70 22 20 63 6f 6e 76 65 72 73 69 6f  e "%p" conversio
6450: 6e 20 66 6f 72 6d 61 74 20 62 61 63 6b 20 69 6e  n format back in
6460: 74 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 2e  to.** a pointer.
6470: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
6480: 33 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  3TextToPtr(const
6490: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 76 6f 69   char *z){.  voi
64a0: 64 20 2a 70 3b 0a 20 20 75 36 34 20 76 3b 0a 20  d *p;.  u64 v;. 
64b0: 20 75 33 32 20 76 32 3b 0a 20 20 69 66 28 20 7a   u32 v2;.  if( z
64c0: 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 5b 31 5d  [0]=='0' && z[1]
64d0: 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 7a 20 2b  =='x' ){.    z +
64e0: 3d 20 32 3b 0a 20 20 7d 0a 20 20 76 20 3d 20 30  = 2;.  }.  v = 0
64f0: 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b  ;.  while( *z ){
6500: 0a 20 20 20 20 76 20 3d 20 28 76 3c 3c 34 29 20  .    v = (v<<4) 
6510: 2b 20 68 65 78 54 6f 49 6e 74 28 2a 7a 29 3b 0a  + hexToInt(*z);.
6520: 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69      z++;.  }.  i
6530: 66 28 20 73 69 7a 65 6f 66 28 70 29 3d 3d 73 69  f( sizeof(p)==si
6540: 7a 65 6f 66 28 76 29 20 29 7b 0a 20 20 20 20 70  zeof(v) ){.    p
6550: 20 3d 20 2a 28 76 6f 69 64 2a 2a 29 26 76 3b 0a   = *(void**)&v;.
6560: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
6570: 65 72 74 28 20 73 69 7a 65 6f 66 28 70 29 3d 3d  ert( sizeof(p)==
6580: 73 69 7a 65 6f 66 28 76 32 29 20 29 3b 0a 20 20  sizeof(v2) );.  
6590: 20 20 76 32 20 3d 20 28 75 33 32 29 76 3b 0a 20    v2 = (u32)v;. 
65a0: 20 20 20 70 20 3d 20 2a 28 76 6f 69 64 2a 2a 29     p = *(void**)
65b0: 26 76 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  &v2;.  }.  retur
65c0: 6e 20 70 3b 0a 7d 0a 23 65 6e 64 69 66 0a        n p;.}.#endif.