/ Hex Artifact Content
Login

Artifact 03ba0b0b83b14a2ddbc0aaac0681c92c8ebb0b0c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 55 74 69 6c 69 74  ******.** Utilit
0180: 79 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  y functions used
0190: 20 74 68 72 6f 75 67 68 6f 75 74 20 73 71 6c 69   throughout sqli
01a0: 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  te..**.** This f
01b0: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 66 75 6e  ile contains fun
01c0: 63 74 69 6f 6e 73 20 66 6f 72 20 61 6c 6c 6f 63  ctions for alloc
01d0: 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c 20 63 6f  ating memory, co
01e0: 6d 70 61 72 69 6e 67 0a 2a 2a 20 73 74 72 69 6e  mparing.** strin
01f0: 67 73 2c 20 61 6e 64 20 73 74 75 66 66 20 6c 69  gs, and stuff li
0200: 6b 65 20 74 68 61 74 2e 0a 2a 2a 0a 2a 2a 20 24  ke that..**.** $
0210: 49 64 3a 20 75 74 69 6c 2e 63 2c 76 20 31 2e 31  Id: util.c,v 1.1
0220: 32 36 20 32 30 30 35 2f 30 31 2f 31 33 20 30 32  26 2005/01/13 02
0230: 3a 31 34 3a 32 35 20 64 61 6e 69 65 6c 6b 31 39  :14:25 danielk19
0240: 37 37 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63  77 Exp $.*/.#inc
0250: 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e  lude "sqliteInt.
0260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
0270: 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  arg.h>.#include 
0280: 3c 63 74 79 70 65 2e 68 3e 0a 0a 23 69 66 20 53  <ctype.h>..#if S
0290: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 32  QLITE_MEMDEBUG>2
02a0: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4c   && defined(__GL
02b0: 49 42 43 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20  IBC__).#include 
02c0: 3c 65 78 65 63 69 6e 66 6f 2e 68 3e 0a 76 6f 69  <execinfo.h>.voi
02d0: 64 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72  d print_stack_tr
02e0: 61 63 65 28 29 7b 0a 20 20 76 6f 69 64 20 2a 62  ace(){.  void *b
02f0: 74 5b 33 30 5d 3b 0a 20 20 69 6e 74 20 69 3b 0a  t[30];.  int i;.
0300: 20 20 69 6e 74 20 6e 20 3d 20 62 61 63 6b 74 72    int n = backtr
0310: 61 63 65 28 62 74 2c 20 33 30 29 3b 0a 0a 20 20  ace(bt, 30);..  
0320: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
0330: 74 66 28 22 53 54 41 43 4b 3a 20 22 29 3b 0a 20  tf("STACK: ");. 
0340: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 69 2b   for(i=0; i<n;i+
0350: 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  +){.    sqlite3D
0360: 65 62 75 67 50 72 69 6e 74 66 28 22 25 70 20 22  ebugPrintf("%p "
0370: 2c 20 62 74 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  , bt[i]);.  }.  
0380: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
0390: 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6c 73  tf("\n");.}.#els
03a0: 65 0a 23 64 65 66 69 6e 65 20 70 72 69 6e 74 5f  e.#define print_
03b0: 73 74 61 63 6b 5f 74 72 61 63 65 28 29 0a 23 65  stack_trace().#e
03c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6d  ndif../*.** If m
03d0: 61 6c 6c 6f 63 28 29 20 65 76 65 72 20 66 61 69  alloc() ever fai
03e0: 6c 73 2c 20 74 68 69 73 20 67 6c 6f 62 61 6c 20  ls, this global 
03f0: 76 61 72 69 61 62 6c 65 20 67 65 74 73 20 73 65  variable gets se
0400: 74 20 74 6f 20 31 2e 0a 2a 2a 20 54 68 69 73 20  t to 1..** This 
0410: 63 61 75 73 65 73 20 74 68 65 20 6c 69 62 72 61  causes the libra
0420: 72 79 20 74 6f 20 61 62 6f 72 74 20 61 6e 64 20  ry to abort and 
0430: 6e 65 76 65 72 20 61 67 61 69 6e 20 66 75 6e 63  never again func
0440: 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  tion..*/.int sql
0450: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
0460: 65 64 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49  ed = 0;../*.** I
0470: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
0480: 47 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  G is defined, th
0490: 65 6e 20 75 73 65 20 76 65 72 73 69 6f 6e 73 20  en use versions 
04a0: 6f 66 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 0a  of malloc() and.
04b0: 2a 2a 20 66 72 65 65 28 29 20 74 68 61 74 20 74  ** free() that t
04c0: 72 61 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61 67  rack memory usag
04d0: 65 20 61 6e 64 20 63 68 65 63 6b 20 66 6f 72 20  e and check for 
04e0: 62 75 66 66 65 72 20 6f 76 65 72 72 75 6e 73 2e  buffer overruns.
04f0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
0500: 45 5f 4d 45 4d 44 45 42 55 47 0a 0a 2f 2a 0a 2a  E_MEMDEBUG../*.*
0510: 2a 20 46 6f 72 20 6b 65 65 70 69 6e 67 20 74 72  * For keeping tr
0520: 61 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  ack of the numbe
0530: 72 20 6f 66 20 6d 61 6c 6c 6f 63 73 20 61 6e 64  r of mallocs and
0540: 20 66 72 65 65 73 2e 20 20 20 54 68 69 73 0a 2a   frees.   This.*
0550: 2a 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 65  * is used to che
0560: 63 6b 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6c 65  ck for memory le
0570: 61 6b 73 2e 20 20 54 68 65 20 69 4d 61 6c 6c 6f  aks.  The iMallo
0580: 63 46 61 69 6c 20 61 6e 64 20 69 4d 61 6c 6c 6f  cFail and iMallo
0590: 63 52 65 73 65 74 0a 2a 2a 20 76 61 6c 75 65 73  cReset.** values
05a0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 69 6d   are used to sim
05b0: 75 6c 61 74 65 20 6d 61 6c 6c 6f 63 28 29 20 66  ulate malloc() f
05c0: 61 69 6c 75 72 65 73 20 64 75 72 69 6e 67 20 74  ailures during t
05d0: 65 73 74 69 6e 67 20 69 6e 20 0a 2a 2a 20 6f 72  esting in .** or
05e0: 64 65 72 20 74 6f 20 76 65 72 69 66 79 20 74 68  der to verify th
05f0: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
0600: 6f 72 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 73  orrectly handles
0610: 20 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f 72   an out-of-memor
0620: 79 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a  y.** condition..
0630: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e  */.int sqlite3_n
0640: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
0650: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c  /* Number of sql
0660: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 63 61 6c 6c  iteMalloc() call
0670: 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
0680: 5f 6e 46 72 65 65 3b 20 20 20 20 20 20 20 20 20  _nFree;         
0690: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
06a0: 71 6c 69 74 65 46 72 65 65 28 29 20 63 61 6c 6c  qliteFree() call
06b0: 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
06c0: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3b 20 20 20  _iMallocFail;   
06d0: 20 20 2f 2a 20 46 61 69 6c 20 73 71 6c 69 74 65    /* Fail sqlite
06e0: 4d 61 6c 6c 6f 63 28 29 20 61 66 74 65 72 20 74  Malloc() after t
06f0: 68 69 73 20 6d 61 6e 79 20 63 61 6c 6c 73 20 2a  his many calls *
0700: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 4d  /.int sqlite3_iM
0710: 61 6c 6c 6f 63 52 65 73 65 74 20 3d 20 2d 31 3b  allocReset = -1;
0720: 20 2f 2a 20 57 68 65 6e 20 69 4d 61 6c 6c 6f 63   /* When iMalloc
0730: 46 61 69 6c 20 72 65 61 63 68 65 73 20 30 2c 20  Fail reaches 0, 
0740: 73 65 74 20 74 6f 20 74 68 69 73 20 2a 2f 0a 23  set to this */.#
0750: 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  if SQLITE_MEMDEB
0760: 55 47 3e 31 0a 73 74 61 74 69 63 20 69 6e 74 20  UG>1.static int 
0770: 6d 65 6d 63 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  memcnt = 0;.#end
0780: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72  if../*.** Number
0790: 20 6f 66 20 33 32 2d 62 69 74 20 67 75 61 72 64   of 32-bit guard
07a0: 20 77 6f 72 64 73 0a 2a 2f 0a 23 64 65 66 69 6e   words.*/.#defin
07b0: 65 20 4e 5f 47 55 41 52 44 20 31 0a 0a 2f 2a 0a  e N_GUARD 1../*.
07c0: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77 20  ** Allocate new 
07d0: 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65 74 20 69  memory and set i
07e0: 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65 74 75  t to zero.  Retu
07f0: 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e 6f  rn NULL if.** no
0800: 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61 69 6c   memory is avail
0810: 61 62 6c 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  able..*/.void *s
0820: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 69 6e  qlite3Malloc_(in
0830: 74 20 6e 2c 20 69 6e 74 20 62 5a 65 72 6f 2c 20  t n, int bZero, 
0840: 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74  char *zFile, int
0850: 20 6c 69 6e 65 29 7b 0a 20 20 76 6f 69 64 20 2a   line){.  void *
0860: 70 3b 0a 20 20 69 6e 74 20 2a 70 69 3b 0a 20 20  p;.  int *pi;.  
0870: 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 69 66 28 20  int i, k;.  if( 
0880: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
0890: 61 69 6c 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  ail>=0 ){.    sq
08a0: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
08b0: 6c 2d 2d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  l--;.    if( sql
08c0: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
08d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
08e0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
08f0: 65 64 2b 2b 3b 0a 23 69 66 20 53 51 4c 49 54 45  ed++;.#if SQLITE
0900: 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 20 20  _MEMDEBUG>1.    
0910: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0920: 2c 22 2a 2a 2a 2a 20 66 61 69 6c 65 64 20 74 6f  ,"**** failed to
0930: 20 61 6c 6c 6f 63 61 74 65 20 25 64 20 62 79 74   allocate %d byt
0940: 65 73 20 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a  es at %s:%d\n",.
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 2c                n,
0960: 20 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65   zFile,line);.#e
0970: 6e 64 69 66 0a 20 20 20 20 20 20 73 71 6c 69 74  ndif.      sqlit
0980: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d  e3_iMallocFail =
0990: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
09a0: 52 65 73 65 74 3b 0a 20 20 20 20 20 20 72 65 74  Reset;.      ret
09b0: 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  urn 0;.    }.  }
09c0: 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 20 72 65  .  if( n==0 ) re
09d0: 74 75 72 6e 20 30 3b 0a 20 20 6b 20 3d 20 28 6e  turn 0;.  k = (n
09e0: 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f  +sizeof(int)-1)/
09f0: 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 70  sizeof(int);.  p
0a00: 69 20 3d 20 6d 61 6c 6c 6f 63 28 20 28 4e 5f 47  i = malloc( (N_G
0a10: 55 41 52 44 2a 32 2b 31 2b 6b 29 2a 73 69 7a 65  UARD*2+1+k)*size
0a20: 6f 66 28 69 6e 74 29 29 3b 0a 20 20 69 66 28 20  of(int));.  if( 
0a30: 70 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  pi==0 ){.    sql
0a40: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
0a50: 65 64 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e  ed++;.    return
0a60: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
0a70: 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b 3b 0a 20 20 66  3_nMalloc++;.  f
0a80: 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52  or(i=0; i<N_GUAR
0a90: 44 3b 20 69 2b 2b 29 20 70 69 5b 69 5d 20 3d 20  D; i++) pi[i] = 
0aa0: 30 78 64 65 61 64 31 31 32 32 3b 0a 20 20 70 69  0xdead1122;.  pi
0ab0: 5b 4e 5f 47 55 41 52 44 5d 20 3d 20 6e 3b 0a 20  [N_GUARD] = n;. 
0ac0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55   for(i=0; i<N_GU
0ad0: 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 31  ARD; i++) pi[k+1
0ae0: 2b 4e 5f 47 55 41 52 44 2b 69 5d 20 3d 20 30 78  +N_GUARD+i] = 0x
0af0: 64 65 61 64 33 33 34 34 3b 0a 20 20 70 20 3d 20  dead3344;.  p = 
0b00: 26 70 69 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a  &pi[N_GUARD+1];.
0b10: 20 20 6d 65 6d 73 65 74 28 70 2c 20 62 5a 65 72    memset(p, bZer
0b20: 6f 3d 3d 30 2c 20 6e 29 3b 0a 23 69 66 20 53 51  o==0, n);.#if SQ
0b30: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a  LITE_MEMDEBUG>1.
0b40: 20 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72    print_stack_tr
0b50: 61 63 65 28 29 3b 0a 20 20 66 70 72 69 6e 74 66  ace();.  fprintf
0b60: 28 73 74 64 65 72 72 2c 22 25 30 36 64 20 6d 61  (stderr,"%06d ma
0b70: 6c 6c 6f 63 20 25 64 20 62 79 74 65 73 20 61 74  lloc %d bytes at
0b80: 20 30 78 25 78 20 66 72 6f 6d 20 25 73 3a 25 64   0x%x from %s:%d
0b90: 5c 6e 22 2c 0a 20 20 20 20 20 20 2b 2b 6d 65 6d  \n",.      ++mem
0ba0: 63 6e 74 2c 20 6e 2c 20 28 69 6e 74 29 70 2c 20  cnt, n, (int)p, 
0bb0: 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e  zFile,line);.#en
0bc0: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a  dif.  return p;.
0bd0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
0be0: 6f 20 73 65 65 20 69 66 20 74 68 65 20 67 69 76  o see if the giv
0bf0: 65 6e 20 70 6f 69 6e 74 65 72 20 77 61 73 20 6f  en pointer was o
0c00: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
0c10: 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 61  iteMalloc().** a
0c20: 6e 64 20 69 73 20 61 62 6c 65 20 74 6f 20 68 6f  nd is able to ho
0c30: 6c 64 20 61 74 20 6c 65 61 73 74 20 4e 20 62 79  ld at least N by
0c40: 74 65 73 2e 20 20 52 61 69 73 65 20 61 6e 20 65  tes.  Raise an e
0c50: 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69 73  xception if this
0c60: 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 63  .** is not the c
0c70: 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ase..**.** This 
0c80: 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64 20  routine is used 
0c90: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
0ca0: 6f 73 65 73 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76 6f  oses only..*/.vo
0cb0: 69 64 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4d  id sqlite3CheckM
0cc0: 65 6d 6f 72 79 28 76 6f 69 64 20 2a 70 2c 20 69  emory(void *p, i
0cd0: 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 2a 70 69  nt N){.  int *pi
0ce0: 20 3d 20 70 3b 0a 20 20 69 6e 74 20 6e 2c 20 69   = p;.  int n, i
0cf0: 2c 20 6b 3b 0a 20 20 70 69 20 2d 3d 20 4e 5f 47  , k;.  pi -= N_G
0d00: 55 41 52 44 2b 31 3b 0a 20 20 66 6f 72 28 69 3d  UARD+1;.  for(i=
0d10: 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b  0; i<N_GUARD; i+
0d20: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
0d30: 70 69 5b 69 5d 3d 3d 30 78 64 65 61 64 31 31 32  pi[i]==0xdead112
0d40: 32 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  2 );.  }.  n = p
0d50: 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a 20 20 61 73  i[N_GUARD];.  as
0d60: 73 65 72 74 28 20 4e 3e 3d 30 20 26 26 20 4e 3c  sert( N>=0 && N<
0d70: 6e 20 29 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73 69  n );.  k = (n+si
0d80: 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a  zeof(int)-1)/siz
0d90: 65 6f 66 28 69 6e 74 29 3b 0a 20 20 66 6f 72 28  eof(int);.  for(
0da0: 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20  i=0; i<N_GUARD; 
0db0: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
0dc0: 28 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31  ( pi[k+N_GUARD+1
0dd0: 2b 69 5d 3d 3d 30 78 64 65 61 64 33 33 34 34 20  +i]==0xdead3344 
0de0: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
0df0: 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72 65 76  Free memory prev
0e00: 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20  iously obtained 
0e10: 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  from sqliteMallo
0e20: 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  c().*/.void sqli
0e30: 74 65 33 46 72 65 65 5f 28 76 6f 69 64 20 2a 70  te3Free_(void *p
0e40: 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69  , char *zFile, i
0e50: 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69 66 28 20  nt line){.  if( 
0e60: 70 20 29 7b 0a 20 20 20 20 69 6e 74 20 2a 70 69  p ){.    int *pi
0e70: 2c 20 69 2c 20 6b 2c 20 6e 3b 0a 20 20 20 20 70  , i, k, n;.    p
0e80: 69 20 3d 20 70 3b 0a 20 20 20 20 70 69 20 2d 3d  i = p;.    pi -=
0e90: 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20 20 20   N_GUARD+1;.    
0ea0: 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2b 2b 3b  sqlite3_nFree++;
0eb0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
0ec0: 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20  N_GUARD; i++){. 
0ed0: 20 20 20 20 20 69 66 28 20 70 69 5b 69 5d 21 3d       if( pi[i]!=
0ee0: 30 78 64 65 61 64 31 31 32 32 20 29 7b 0a 20 20  0xdead1122 ){.  
0ef0: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
0f00: 64 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20 6d 65  derr,"Low-end me
0f10: 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 20  mory corruption 
0f20: 61 74 20 30 78 25 78 5c 6e 22 2c 20 28 69 6e 74  at 0x%x\n", (int
0f30: 29 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  )p);.        ret
0f40: 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
0f50: 20 7d 0a 20 20 20 20 6e 20 3d 20 70 69 5b 4e 5f   }.    n = pi[N_
0f60: 47 55 41 52 44 5d 3b 0a 20 20 20 20 6b 20 3d 20  GUARD];.    k = 
0f70: 28 6e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31  (n+sizeof(int)-1
0f80: 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20  )/sizeof(int);. 
0f90: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f     for(i=0; i<N_
0fa0: 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20  GUARD; i++){.   
0fb0: 20 20 20 69 66 28 20 70 69 5b 6b 2b 4e 5f 47 55     if( pi[k+N_GU
0fc0: 41 52 44 2b 31 2b 69 5d 21 3d 30 78 64 65 61 64  ARD+1+i]!=0xdead
0fd0: 33 33 34 34 20 29 7b 0a 20 20 20 20 20 20 20 20  3344 ){.        
0fe0: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  fprintf(stderr,"
0ff0: 48 69 67 68 2d 65 6e 64 20 6d 65 6d 6f 72 79 20  High-end memory 
1000: 63 6f 72 72 75 70 74 69 6f 6e 20 61 74 20 30 78  corruption at 0x
1010: 25 78 5c 6e 22 2c 20 28 69 6e 74 29 70 29 3b 0a  %x\n", (int)p);.
1020: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a          return;.
1030: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1040: 20 20 6d 65 6d 73 65 74 28 70 69 2c 20 30 78 66    memset(pi, 0xf
1050: 66 2c 20 28 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b  f, (k+N_GUARD*2+
1060: 31 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b  1)*sizeof(int));
1070: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  .#if SQLITE_MEMD
1080: 45 42 55 47 3e 31 0a 20 20 20 20 66 70 72 69 6e  EBUG>1.    fprin
1090: 74 66 28 73 74 64 65 72 72 2c 22 25 30 36 64 20  tf(stderr,"%06d 
10a0: 66 72 65 65 20 25 64 20 62 79 74 65 73 20 61 74  free %d bytes at
10b0: 20 30 78 25 78 20 66 72 6f 6d 20 25 73 3a 25 64   0x%x from %s:%d
10c0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 2b 2b  \n",.         ++
10d0: 6d 65 6d 63 6e 74 2c 20 6e 2c 20 28 69 6e 74 29  memcnt, n, (int)
10e0: 70 2c 20 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a  p, zFile,line);.
10f0: 23 65 6e 64 69 66 0a 20 20 20 20 66 72 65 65 28  #endif.    free(
1100: 70 69 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  pi);.  }.}../*.*
1110: 2a 20 52 65 73 69 7a 65 20 61 20 70 72 69 6f 72  * Resize a prior
1120: 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 49 66   allocation.  If
1130: 20 70 3d 3d 30 2c 20 74 68 65 6e 20 74 68 69 73   p==0, then this
1140: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b   routine.** work
1150: 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71 6c 69  s just like sqli
1160: 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 49 66 20  teMalloc().  If 
1170: 6e 3d 3d 30 2c 20 74 68 65 6e 20 74 68 69 73 20  n==0, then this 
1180: 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b 73  routine.** works
1190: 20 6a 75 73 74 20 6c 69 6b 65 20 73 71 6c 69 74   just like sqlit
11a0: 65 46 72 65 65 28 29 2e 0a 2a 2f 0a 76 6f 69 64  eFree()..*/.void
11b0: 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
11c0: 5f 28 76 6f 69 64 20 2a 6f 6c 64 50 2c 20 69 6e  _(void *oldP, in
11d0: 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65  t n, char *zFile
11e0: 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69  , int line){.  i
11f0: 6e 74 20 2a 6f 6c 64 50 69 2c 20 2a 70 69 2c 20  nt *oldPi, *pi, 
1200: 69 2c 20 6b 2c 20 6f 6c 64 4e 2c 20 6f 6c 64 4b  i, k, oldN, oldK
1210: 3b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20 69  ;.  void *p;.  i
1220: 66 28 20 6f 6c 64 50 3d 3d 30 20 29 7b 0a 20 20  f( oldP==0 ){.  
1230: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
1240: 4d 61 6c 6c 6f 63 5f 28 6e 2c 31 2c 7a 46 69 6c  Malloc_(n,1,zFil
1250: 65 2c 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20 20 69  e,line);.  }.  i
1260: 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 73  f( n==0 ){.    s
1270: 71 6c 69 74 65 33 46 72 65 65 5f 28 6f 6c 64 50  qlite3Free_(oldP
1280: 2c 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 20 20  ,zFile,line);.  
1290: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
12a0: 20 20 6f 6c 64 50 69 20 3d 20 6f 6c 64 50 3b 0a    oldPi = oldP;.
12b0: 20 20 6f 6c 64 50 69 20 2d 3d 20 4e 5f 47 55 41    oldPi -= N_GUA
12c0: 52 44 2b 31 3b 0a 20 20 69 66 28 20 6f 6c 64 50  RD+1;.  if( oldP
12d0: 69 5b 30 5d 21 3d 30 78 64 65 61 64 31 31 32 32  i[0]!=0xdead1122
12e0: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
12f0: 73 74 64 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20  stderr,"Low-end 
1300: 6d 65 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f  memory corruptio
1310: 6e 20 69 6e 20 72 65 61 6c 6c 6f 63 20 61 74 20  n in realloc at 
1320: 30 78 25 78 5c 6e 22 2c 20 28 69 6e 74 29 6f 6c  0x%x\n", (int)ol
1330: 64 50 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  dP);.    return 
1340: 30 3b 0a 20 20 7d 0a 20 20 6f 6c 64 4e 20 3d 20  0;.  }.  oldN = 
1350: 6f 6c 64 50 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a  oldPi[N_GUARD];.
1360: 20 20 6f 6c 64 4b 20 3d 20 28 6f 6c 64 4e 2b 73    oldK = (oldN+s
1370: 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69  izeof(int)-1)/si
1380: 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 66 6f 72  zeof(int);.  for
1390: 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b  (i=0; i<N_GUARD;
13a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 6f   i++){.    if( o
13b0: 6c 64 50 69 5b 6f 6c 64 4b 2b 4e 5f 47 55 41 52  ldPi[oldK+N_GUAR
13c0: 44 2b 31 2b 69 5d 21 3d 30 78 64 65 61 64 33 33  D+1+i]!=0xdead33
13d0: 34 34 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69  44 ){.      fpri
13e0: 6e 74 66 28 73 74 64 65 72 72 2c 22 48 69 67 68  ntf(stderr,"High
13f0: 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72 72  -end memory corr
1400: 75 70 74 69 6f 6e 20 69 6e 20 72 65 61 6c 6c 6f  uption in reallo
1410: 63 20 61 74 20 30 78 25 78 5c 6e 22 2c 0a 20 20  c at 0x%x\n",.  
1420: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
1430: 29 6f 6c 64 50 29 3b 0a 20 20 20 20 20 20 72 65  )oldP);.      re
1440: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
1450: 7d 0a 20 20 6b 20 3d 20 28 6e 20 2b 20 73 69 7a  }.  k = (n + siz
1460: 65 6f 66 28 69 6e 74 29 20 2d 20 31 29 2f 73 69  eof(int) - 1)/si
1470: 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 70 69 20  zeof(int);.  pi 
1480: 3d 20 6d 61 6c 6c 6f 63 28 20 28 6b 2b 4e 5f 47  = malloc( (k+N_G
1490: 55 41 52 44 2a 32 2b 31 29 2a 73 69 7a 65 6f 66  UARD*2+1)*sizeof
14a0: 28 69 6e 74 29 20 29 3b 0a 20 20 69 66 28 20 70  (int) );.  if( p
14b0: 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  i==0 ){.    sqli
14c0: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
14d0: 64 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  d++;.    return 
14e0: 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  0;.  }.  for(i=0
14f0: 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b  ; i<N_GUARD; i++
1500: 29 20 70 69 5b 69 5d 20 3d 20 30 78 64 65 61 64  ) pi[i] = 0xdead
1510: 31 31 32 32 3b 0a 20 20 70 69 5b 4e 5f 47 55 41  1122;.  pi[N_GUA
1520: 52 44 5d 20 3d 20 6e 3b 0a 20 20 66 6f 72 28 69  RD] = n;.  for(i
1530: 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69  =0; i<N_GUARD; i
1540: 2b 2b 29 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44  ++) pi[k+N_GUARD
1550: 2b 31 2b 69 5d 20 3d 20 30 78 64 65 61 64 33 33  +1+i] = 0xdead33
1560: 34 34 3b 0a 20 20 70 20 3d 20 26 70 69 5b 4e 5f  44;.  p = &pi[N_
1570: 47 55 41 52 44 2b 31 5d 3b 0a 20 20 6d 65 6d 63  GUARD+1];.  memc
1580: 70 79 28 70 2c 20 6f 6c 64 50 2c 20 6e 3e 6f 6c  py(p, oldP, n>ol
1590: 64 4e 20 3f 20 6f 6c 64 4e 20 3a 20 6e 29 3b 0a  dN ? oldN : n);.
15a0: 20 20 69 66 28 20 6e 3e 6f 6c 64 4e 20 29 7b 0a    if( n>oldN ){.
15b0: 20 20 20 20 6d 65 6d 73 65 74 28 26 28 28 63 68      memset(&((ch
15c0: 61 72 2a 29 70 29 5b 6f 6c 64 4e 5d 2c 20 30 78  ar*)p)[oldN], 0x
15d0: 35 35 2c 20 6e 2d 6f 6c 64 4e 29 3b 0a 20 20 7d  55, n-oldN);.  }
15e0: 0a 20 20 6d 65 6d 73 65 74 28 6f 6c 64 50 69 2c  .  memset(oldPi,
15f0: 20 30 78 61 62 2c 20 28 6f 6c 64 4b 2b 4e 5f 47   0xab, (oldK+N_G
1600: 55 41 52 44 2b 32 29 2a 73 69 7a 65 6f 66 28 69  UARD+2)*sizeof(i
1610: 6e 74 29 29 3b 0a 20 20 66 72 65 65 28 6f 6c 64  nt));.  free(old
1620: 50 69 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  Pi);.#if SQLITE_
1630: 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 70 72 69  MEMDEBUG>1.  pri
1640: 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63 65 28 29  nt_stack_trace()
1650: 3b 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65  ;.  fprintf(stde
1660: 72 72 2c 22 25 30 36 64 20 72 65 61 6c 6c 6f 63  rr,"%06d realloc
1670: 20 25 64 20 74 6f 20 25 64 20 62 79 74 65 73 20   %d to %d bytes 
1680: 61 74 20 30 78 25 78 20 74 6f 20 30 78 25 78 20  at 0x%x to 0x%x 
1690: 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20  at %s:%d\n",.   
16a0: 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6f 6c 64 4e 2c   ++memcnt, oldN,
16b0: 20 6e 2c 20 28 69 6e 74 29 6f 6c 64 50 2c 20 28   n, (int)oldP, (
16c0: 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 20 6c 69  int)p, zFile, li
16d0: 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ne);.#endif.  re
16e0: 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn p;.}../*.**
16f0: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
1700: 61 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f  a string in memo
1710: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
1720: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a   sqliteMalloc().
1730: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  */.char *sqlite3
1740: 53 74 72 44 75 70 5f 28 63 6f 6e 73 74 20 63 68  StrDup_(const ch
1750: 61 72 20 2a 7a 2c 20 63 68 61 72 20 2a 7a 46 69  ar *z, char *zFi
1760: 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20  le, int line){. 
1770: 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69   char *zNew;.  i
1780: 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( z==0 ) return
1790: 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c   0;.  zNew = sql
17a0: 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 73 74 72 6c  ite3Malloc_(strl
17b0: 65 6e 28 7a 29 2b 31 2c 20 30 2c 20 7a 46 69 6c  en(z)+1, 0, zFil
17c0: 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69 66 28 20  e, line);.  if( 
17d0: 7a 4e 65 77 20 29 20 73 74 72 63 70 79 28 7a 4e  zNew ) strcpy(zN
17e0: 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ew, z);.  return
17f0: 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73   zNew;.}.char *s
1800: 71 6c 69 74 65 33 53 74 72 4e 44 75 70 5f 28 63  qlite3StrNDup_(c
1810: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
1820: 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65  t n, char *zFile
1830: 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 63  , int line){.  c
1840: 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28  har *zNew;.  if(
1850: 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30   z==0 ) return 0
1860: 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74  ;.  zNew = sqlit
1870: 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2b 31 2c 20 30  e3Malloc_(n+1, 0
1880: 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a  , zFile, line);.
1890: 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20    if( zNew ){.  
18a0: 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a    memcpy(zNew, z
18b0: 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e  , n);.    zNew[n
18c0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74  ] = 0;.  }.  ret
18d0: 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a  urn zNew;.}../*.
18e0: 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f 66 20  ** A version of 
18f0: 73 71 6c 69 74 65 46 72 65 65 20 74 68 61 74 20  sqliteFree that 
1900: 69 73 20 61 6c 77 61 79 73 20 61 20 66 75 6e 63  is always a func
1910: 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d 61 63 72  tion, not a macr
1920: 6f 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  o..*/.void sqlit
1930: 65 33 46 72 65 65 58 28 76 6f 69 64 20 2a 70 29  e3FreeX(void *p)
1940: 7b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 70  {.  sqliteFree(p
1950: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
1960: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 2a  QLITE_MEMDEBUG *
1970: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
1980: 6c 6f 77 69 6e 67 20 76 65 72 73 69 6f 6e 73 20  lowing versions 
1990: 6f 66 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  of malloc() and 
19a0: 66 72 65 65 28 29 20 61 72 65 20 66 6f 72 20 75  free() are for u
19b0: 73 65 20 69 6e 20 61 0a 2a 2a 20 6e 6f 72 6d 61  se in a.** norma
19c0: 6c 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20  l build..*/.#if 
19d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
19e0: 4d 45 4d 44 45 42 55 47 29 0a 0a 2f 2a 0a 2a 2a  MEMDEBUG)../*.**
19f0: 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65   Allocate new me
1a00: 6d 6f 72 79 20 61 6e 64 20 73 65 74 20 69 74 20  mory and set it 
1a10: 74 6f 20 7a 65 72 6f 2e 20 20 52 65 74 75 72 6e  to zero.  Return
1a20: 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d   NULL if.** no m
1a30: 65 6d 6f 72 79 20 69 73 20 61 76 61 69 6c 61 62  emory is availab
1a40: 6c 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 73 71  le.  See also sq
1a50: 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 29 2e  liteMallocRaw().
1a60: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
1a70: 33 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e 29 7b 0a  3Malloc(int n){.
1a80: 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20 69 66 28    void *p;.  if(
1a90: 20 28 70 20 3d 20 6d 61 6c 6c 6f 63 28 6e 29 29   (p = malloc(n))
1aa0: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
1ab0: 3e 30 20 29 20 73 71 6c 69 74 65 33 5f 6d 61 6c  >0 ) sqlite3_mal
1ac0: 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20  loc_failed++;.  
1ad0: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65  }else{.    memse
1ae0: 74 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d 0a  t(p, 0, n);.  }.
1af0: 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f    return p;.}../
1b00: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65  *.** Allocate ne
1b10: 77 20 6d 65 6d 6f 72 79 20 62 75 74 20 64 6f 20  w memory but do 
1b20: 6e 6f 74 20 73 65 74 20 69 74 20 74 6f 20 7a 65  not set it to ze
1b30: 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  ro.  Return NULL
1b40: 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79   if.** no memory
1b50: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20   is available.  
1b60: 53 65 65 20 61 6c 73 6f 20 73 71 6c 69 74 65 4d  See also sqliteM
1b70: 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64  alloc()..*/.void
1b80: 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52   *sqlite3MallocR
1b90: 61 77 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69  aw(int n){.  voi
1ba0: 64 20 2a 70 3b 0a 20 20 69 66 28 20 28 70 20 3d  d *p;.  if( (p =
1bb0: 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29   malloc(n))==0 )
1bc0: 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20  {.    if( n>0 ) 
1bd0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
1be0: 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72  ailed++;.  }.  r
1bf0: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
1c00: 2a 20 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72  * Free memory pr
1c10: 65 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65  eviously obtaine
1c20: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c  d from sqliteMal
1c30: 6c 6f 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71  loc().*/.void sq
1c40: 6c 69 74 65 33 46 72 65 65 58 28 76 6f 69 64 20  lite3FreeX(void 
1c50: 2a 70 29 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a  *p){.  if( p ){.
1c60: 20 20 20 20 66 72 65 65 28 70 29 3b 0a 20 20 7d      free(p);.  }
1c70: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65  .}../*.** Resize
1c80: 20 61 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61 74   a prior allocat
1c90: 69 6f 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20 74  ion.  If p==0, t
1ca0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
1cb0: 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  .** works just l
1cc0: 69 6b 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  ike sqliteMalloc
1cd0: 28 29 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74 68  ().  If n==0, th
1ce0: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
1cf0: 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  ** works just li
1d00: 6b 65 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e  ke sqliteFree().
1d10: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
1d20: 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70  3Realloc(void *p
1d30: 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64  , int n){.  void
1d40: 20 2a 70 32 3b 0a 20 20 69 66 28 20 70 3d 3d 30   *p2;.  if( p==0
1d50: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73   ){.    return s
1d60: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 29 3b 0a  qliteMalloc(n);.
1d70: 20 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29    }.  if( n==0 )
1d80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  {.    sqliteFree
1d90: 28 70 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  (p);.    return 
1da0: 30 3b 0a 20 20 7d 0a 20 20 70 32 20 3d 20 72 65  0;.  }.  p2 = re
1db0: 61 6c 6c 6f 63 28 70 2c 20 6e 29 3b 0a 20 20 69  alloc(p, n);.  i
1dc0: 66 28 20 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  f( p2==0 ){.    
1dd0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
1de0: 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72  ailed++;.  }.  r
1df0: 65 74 75 72 6e 20 70 32 3b 0a 7d 0a 0a 2f 2a 0a  eturn p2;.}../*.
1e00: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
1e10: 66 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  f a string in me
1e20: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
1e30: 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  om sqliteMalloc(
1e40: 29 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ).*/.char *sqlit
1e50: 65 33 53 74 72 44 75 70 28 63 6f 6e 73 74 20 63  e3StrDup(const c
1e60: 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20  har *z){.  char 
1e70: 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d  *zNew;.  if( z==
1e80: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
1e90: 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 4d 61 6c  zNew = sqliteMal
1ea0: 6c 6f 63 52 61 77 28 73 74 72 6c 65 6e 28 7a 29  locRaw(strlen(z)
1eb0: 2b 31 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20  +1);.  if( zNew 
1ec0: 29 20 73 74 72 63 70 79 28 7a 4e 65 77 2c 20 7a  ) strcpy(zNew, z
1ed0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77  );.  return zNew
1ee0: 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ;.}.char *sqlite
1ef0: 33 53 74 72 4e 44 75 70 28 63 6f 6e 73 74 20 63  3StrNDup(const c
1f00: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a  har *z, int n){.
1f10: 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20    char *zNew;.  
1f20: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
1f30: 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71  n 0;.  zNew = sq
1f40: 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 6e 2b  liteMallocRaw(n+
1f50: 31 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29  1);.  if( zNew )
1f60: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65  {.    memcpy(zNe
1f70: 77 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e  w, z, n);.    zN
1f80: 65 77 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20  ew[n] = 0;.  }. 
1f90: 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a   return zNew;.}.
1fa0: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
1fb0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1fc0: 55 47 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 72  UG) */../*.** Cr
1fd0: 65 61 74 65 20 61 20 73 74 72 69 6e 67 20 66 72  eate a string fr
1fe0: 6f 6d 20 74 68 65 20 32 6e 64 20 61 6e 64 20 73  om the 2nd and s
1ff0: 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65  ubsequent argume
2000: 6e 74 73 20 28 75 70 20 74 6f 20 74 68 65 0a 2a  nts (up to the.*
2010: 2a 20 66 69 72 73 74 20 4e 55 4c 4c 20 61 72 67  * first NULL arg
2020: 75 6d 65 6e 74 29 2c 20 73 74 6f 72 65 20 74 68  ument), store th
2030: 65 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f  e string in memo
2040: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
2050: 0a 2a 2a 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  .** sqliteMalloc
2060: 28 29 20 61 6e 64 20 6d 61 6b 65 20 74 68 65 20  () and make the 
2070: 70 6f 69 6e 74 65 72 20 69 6e 64 69 63 61 74 65  pointer indicate
2080: 64 20 62 79 20 74 68 65 20 31 73 74 20 61 72 67  d by the 1st arg
2090: 75 6d 65 6e 74 0a 2a 2a 20 70 6f 69 6e 74 20 74  ument.** point t
20a0: 6f 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20  o that string.  
20b0: 54 68 65 20 31 73 74 20 61 72 67 75 6d 65 6e 74  The 1st argument
20c0: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
20d0: 4e 55 4c 4c 20 6f 72 20 0a 2a 2a 20 70 6f 69 6e  NULL or .** poin
20e0: 74 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  t to memory obta
20f0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
2100: 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69  Malloc()..*/.voi
2110: 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
2120: 6e 67 28 63 68 61 72 20 2a 2a 70 7a 2c 20 63 6f  ng(char **pz, co
2130: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74  nst char *zFirst
2140: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73  , ...){.  va_lis
2150: 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79 74  t ap;.  int nByt
2160: 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e;.  const char 
2170: 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73  *z;.  char *zRes
2180: 75 6c 74 3b 0a 0a 20 20 69 66 28 20 70 7a 3d 3d  ult;..  if( pz==
2190: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6e 42  0 ) return;.  nB
21a0: 79 74 65 20 3d 20 73 74 72 6c 65 6e 28 7a 46 69  yte = strlen(zFi
21b0: 72 73 74 29 20 2b 20 31 3b 0a 20 20 76 61 5f 73  rst) + 1;.  va_s
21c0: 74 61 72 74 28 61 70 2c 20 7a 46 69 72 73 74 29  tart(ap, zFirst)
21d0: 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a 20 3d 20  ;.  while( (z = 
21e0: 76 61 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73 74  va_arg(ap, const
21f0: 20 63 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20   char*))!=0 ){. 
2200: 20 20 20 6e 42 79 74 65 20 2b 3d 20 73 74 72 6c     nByte += strl
2210: 65 6e 28 7a 29 3b 0a 20 20 7d 0a 20 20 76 61 5f  en(z);.  }.  va_
2220: 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69 74  end(ap);.  sqlit
2230: 65 46 72 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70  eFree(*pz);.  *p
2240: 7a 20 3d 20 7a 52 65 73 75 6c 74 20 3d 20 73 71  z = zResult = sq
2250: 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 20 6e  liteMallocRaw( n
2260: 42 79 74 65 20 29 3b 0a 20 20 69 66 28 20 7a 52  Byte );.  if( zR
2270: 65 73 75 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20  esult==0 ){.    
2280: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 73 74  return;.  }.  st
2290: 72 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a 46  rcpy(zResult, zF
22a0: 69 72 73 74 29 3b 0a 20 20 7a 52 65 73 75 6c 74  irst);.  zResult
22b0: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 52 65 73 75   += strlen(zResu
22c0: 6c 74 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28  lt);.  va_start(
22d0: 61 70 2c 20 7a 46 69 72 73 74 29 3b 0a 20 20 77  ap, zFirst);.  w
22e0: 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72  hile( (z = va_ar
22f0: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
2300: 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74  *))!=0 ){.    st
2310: 72 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a 29  rcpy(zResult, z)
2320: 3b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d  ;.    zResult +=
2330: 20 73 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74 29   strlen(zResult)
2340: 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  ;.  }.  va_end(a
2350: 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p);.#ifdef SQLIT
2360: 45 5f 44 45 42 55 47 0a 23 69 66 20 53 51 4c 49  E_DEBUG.#if SQLI
2370: 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 66 70 72  TE_DEBUG>1.  fpr
2380: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 73 74 72  intf(stderr,"str
2390: 69 6e 67 20 61 74 20 30 78 25 78 20 69 73 20 25  ing at 0x%x is %
23a0: 73 5c 6e 22 2c 20 28 69 6e 74 29 2a 70 7a 2c 20  s\n", (int)*pz, 
23b0: 2a 70 7a 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  *pz);.#endif.#en
23c0: 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  dif.}../*.** Set
23d0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
23e0: 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20   error code and 
23f0: 65 72 72 6f 72 20 73 74 72 69 6e 67 20 66 6f 72  error string for
2400: 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68   the sqlite.** h
2410: 61 6e 64 6c 65 20 22 64 62 22 2e 20 54 68 65 20  andle "db". The 
2420: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 65  error code is se
2430: 74 20 74 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e  t to "err_code".
2440: 0a 2a 2a 0a 2a 2a 20 49 66 20 69 74 20 69 73 20  .**.** If it is 
2450: 6e 6f 74 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67  not NULL, string
2460: 20 7a 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69   zFormat specifi
2470: 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
2480: 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74   the.** error st
2490: 72 69 6e 67 20 69 6e 20 74 68 65 20 73 74 79 6c  ring in the styl
24a0: 65 20 6f 66 20 74 68 65 20 70 72 69 6e 74 66 20  e of the printf 
24b0: 66 75 6e 63 74 69 6f 6e 73 3a 20 54 68 65 20 66  functions: The f
24c0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d  ollowing.** form
24d0: 61 74 20 63 68 61 72 61 63 74 65 72 73 20 61 72  at characters ar
24e0: 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a  e allowed:.**.**
24f0: 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e        %s      In
2500: 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a  sert a string.**
2510: 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20        %z      A 
2520: 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75  string that shou
2530: 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65  ld be freed afte
2540: 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64  r use.**      %d
2550: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20        Insert an 
2560: 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20  integer.**      
2570: 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %T      Insert a
2580: 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25   token.**      %
2590: 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68  S      Insert th
25a0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
25b0: 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a  of a SrcList.**.
25c0: 2a 2a 20 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61  ** zFormat and a
25d0: 6e 79 20 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73  ny string tokens
25e0: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20   that follow it 
25f0: 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 62  are assumed to b
2600: 65 0a 2a 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20  e.** encoded in 
2610: 55 54 46 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  UTF-8..**.** To 
2620: 63 6c 65 61 72 20 74 68 65 20 6d 6f 73 74 20 72  clear the most r
2630: 65 63 65 6e 74 20 65 72 72 6f 72 20 66 6f 72 20  ecent error for 
2640: 73 6c 71 69 74 65 20 68 61 6e 64 6c 65 20 22 64  slqite handle "d
2650: 62 22 2c 20 73 71 6c 69 74 65 33 45 72 72 6f 72  b", sqlite3Error
2660: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 61  .** should be ca
2670: 6c 6c 65 64 20 77 69 74 68 20 65 72 72 5f 63 6f  lled with err_co
2680: 64 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  de set to SQLITE
2690: 5f 4f 4b 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20  _OK and zFormat 
26a0: 73 65 74 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a  set.** to NULL..
26b0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
26c0: 72 72 6f 72 28 73 71 6c 69 74 65 33 20 2a 64 62  rror(sqlite3 *db
26d0: 2c 20 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20  , int err_code, 
26e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
26f0: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 69 66 28  mat, ...){.  if(
2700: 20 64 62 20 26 26 20 28 64 62 2d 3e 70 45 72 72   db && (db->pErr
2710: 20 7c 7c 20 28 64 62 2d 3e 70 45 72 72 20 3d 20   || (db->pErr = 
2720: 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
2730: 29 29 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 65  ))) ){.    db->e
2740: 72 72 43 6f 64 65 20 3d 20 65 72 72 5f 63 6f 64  rrCode = err_cod
2750: 65 3b 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d  e;.    if( zForm
2760: 61 74 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  at ){.      char
2770: 20 2a 7a 3b 0a 20 20 20 20 20 20 76 61 5f 6c 69   *z;.      va_li
2780: 73 74 20 61 70 3b 0a 20 20 20 20 20 20 76 61 5f  st ap;.      va_
2790: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
27a0: 74 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73 71  t);.      z = sq
27b0: 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 7a 46  lite3VMPrintf(zF
27c0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20 20  ormat, ap);.    
27d0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
27e0: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
27f0: 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c  SetStr(db->pErr,
2800: 20 2d 31 2c 20 7a 2c 20 53 51 4c 49 54 45 5f 55   -1, z, SQLITE_U
2810: 54 46 38 2c 20 73 71 6c 69 74 65 33 46 72 65 65  TF8, sqlite3Free
2820: 58 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  X);.    }else{. 
2830: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
2840: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
2850: 2c 20 30 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55  , 0, 0, SQLITE_U
2860: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
2870: 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  IC);.    }.  }.}
2880: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 20 61 6e 20 65  ../*.** Add an e
2890: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20  rror message to 
28a0: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20  pParse->zErrMsg 
28b0: 61 6e 64 20 69 6e 63 72 65 6d 65 6e 74 20 70 50  and increment pP
28c0: 61 72 73 65 2d 3e 6e 45 72 72 2e 0a 2a 2a 20 54  arse->nErr..** T
28d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
28e0: 6d 61 74 74 69 6e 67 20 63 68 61 72 61 63 74 65  matting characte
28f0: 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a 0a  rs are allowed:.
2900: 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20 20 20  **.**      %s   
2910: 20 20 20 49 6e 73 65 72 74 20 61 20 73 74 72 69     Insert a stri
2920: 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20 20  ng.**      %z   
2930: 20 20 20 41 20 73 74 72 69 6e 67 20 74 68 61 74     A string that
2940: 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
2950: 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20 20 20   after use.**   
2960: 20 20 20 25 64 20 20 20 20 20 20 49 6e 73 65 72     %d      Inser
2970: 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  t an integer.** 
2980: 20 20 20 20 20 25 54 20 20 20 20 20 20 49 6e 73       %T      Ins
2990: 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20  ert a token.**  
29a0: 20 20 20 20 25 53 20 20 20 20 20 20 49 6e 73 65      %S      Inse
29b0: 72 74 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  rt the first ele
29c0: 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c 69 73  ment of a SrcLis
29d0: 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  t.**.** This fun
29e0: 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20  ction should be 
29f0: 75 73 65 64 20 74 6f 20 72 65 70 6f 72 74 20 61  used to report a
2a00: 6e 79 20 65 72 72 6f 72 20 74 68 61 74 20 6f 63  ny error that oc
2a10: 63 75 72 73 20 77 68 69 6c 73 74 0a 2a 2a 20 63  curs whilst.** c
2a20: 6f 6d 70 69 6c 69 6e 67 20 61 6e 20 53 51 4c 20  ompiling an SQL 
2a30: 73 74 61 74 65 6d 65 6e 74 20 28 69 2e 65 2e 20  statement (i.e. 
2a40: 77 69 74 68 69 6e 20 73 71 6c 69 74 65 33 5f 70  within sqlite3_p
2a50: 72 65 70 61 72 65 28 29 29 2e 20 54 68 65 0a 2a  repare()). The.*
2a60: 2a 20 6c 61 73 74 20 74 68 69 6e 67 20 74 68 65  * last thing the
2a70: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2a80: 28 29 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  () function does
2a90: 20 69 73 20 63 6f 70 79 20 74 68 65 20 65 72 72   is copy the err
2aa0: 6f 72 0a 2a 2a 20 73 74 6f 72 65 64 20 62 79 20  or.** stored by 
2ab0: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e  this function in
2ac0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2ad0: 68 61 6e 64 6c 65 20 75 73 69 6e 67 20 73 71 6c  handle using sql
2ae0: 69 74 65 33 45 72 72 6f 72 28 29 2e 0a 2a 2a 20  ite3Error()..** 
2af0: 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
2b00: 45 72 72 6f 72 28 29 20 73 68 6f 75 6c 64 20 62  Error() should b
2b10: 65 20 75 73 65 64 20 64 75 72 69 6e 67 20 73 74  e used during st
2b20: 61 74 65 6d 65 6e 74 20 65 78 65 63 75 74 69 6f  atement executio
2b30: 6e 0a 2a 2a 20 28 73 71 6c 69 74 65 33 5f 73 74  n.** (sqlite3_st
2b40: 65 70 28 29 20 65 74 63 2e 29 2e 0a 2a 2f 0a 76  ep() etc.)..*/.v
2b50: 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2b60: 4d 73 67 28 50 61 72 73 65 20 2a 70 50 61 72 73  Msg(Parse *pPars
2b70: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
2b80: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20  Format, ...){.  
2b90: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 70 50  va_list ap;.  pP
2ba0: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2bb0: 73 71 6c 69 74 65 46 72 65 65 28 70 50 61 72 73  sqliteFree(pPars
2bc0: 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 76  e->zErrMsg);.  v
2bd0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
2be0: 6d 61 74 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e  mat);.  pParse->
2bf0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
2c00: 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61  3VMPrintf(zForma
2c10: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
2c20: 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  (ap);.}../*.** C
2c30: 6f 6e 76 65 72 74 20 61 6e 20 53 51 4c 2d 73 74  onvert an SQL-st
2c40: 79 6c 65 20 71 75 6f 74 65 64 20 73 74 72 69 6e  yle quoted strin
2c50: 67 20 69 6e 74 6f 20 61 20 6e 6f 72 6d 61 6c 20  g into a normal 
2c60: 73 74 72 69 6e 67 20 62 79 20 72 65 6d 6f 76 69  string by removi
2c70: 6e 67 0a 2a 2a 20 74 68 65 20 71 75 6f 74 65 20  ng.** the quote 
2c80: 63 68 61 72 61 63 74 65 72 73 2e 20 20 54 68 65  characters.  The
2c90: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 64   conversion is d
2ca0: 6f 6e 65 20 69 6e 2d 70 6c 61 63 65 2e 20 20 49  one in-place.  I
2cb0: 66 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20 64  f the.** input d
2cc0: 6f 65 73 20 6e 6f 74 20 62 65 67 69 6e 20 77 69  oes not begin wi
2cd0: 74 68 20 61 20 71 75 6f 74 65 20 63 68 61 72 61  th a quote chara
2ce0: 63 74 65 72 2c 20 74 68 65 6e 20 74 68 69 73 20  cter, then this 
2cf0: 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20 61 20  routine.** is a 
2d00: 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 32 30 30  no-op..**.** 200
2d10: 32 2d 46 65 62 2d 31 34 3a 20 54 68 69 73 20 72  2-Feb-14: This r
2d20: 6f 75 74 69 6e 65 20 69 73 20 65 78 74 65 6e 64  outine is extend
2d30: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 4d 53 2d  ed to remove MS-
2d40: 41 63 63 65 73 73 20 73 74 79 6c 65 0a 2a 2a 20  Access style.** 
2d50: 62 72 61 63 6b 65 74 73 20 66 72 6f 6d 20 61 72  brackets from ar
2d60: 6f 75 6e 64 20 69 64 65 6e 74 69 66 65 72 73 2e  ound identifers.
2d70: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 20    For example:  
2d80: 22 5b 61 2d 62 2d 63 5d 22 20 62 65 63 6f 6d 65  "[a-b-c]" become
2d90: 73 0a 2a 2a 20 22 61 2d 62 2d 63 22 2e 0a 2a 2f  s.** "a-b-c"..*/
2da0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71  .void sqlite3Deq
2db0: 75 6f 74 65 28 63 68 61 72 20 2a 7a 29 7b 0a 20  uote(char *z){. 
2dc0: 20 69 6e 74 20 71 75 6f 74 65 3b 0a 20 20 69 6e   int quote;.  in
2dd0: 74 20 69 2c 20 6a 3b 0a 20 20 69 66 28 20 7a 3d  t i, j;.  if( z=
2de0: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 71  =0 ) return;.  q
2df0: 75 6f 74 65 20 3d 20 7a 5b 30 5d 3b 0a 20 20 73  uote = z[0];.  s
2e00: 77 69 74 63 68 28 20 71 75 6f 74 65 20 29 7b 0a  witch( quote ){.
2e10: 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a 20 20      case '\'':  
2e20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
2e30: 27 22 27 3a 20 20 20 62 72 65 61 6b 3b 0a 20 20  '"':   break;.  
2e40: 20 20 63 61 73 65 20 27 5b 27 3a 20 20 20 71 75    case '[':   qu
2e50: 6f 74 65 20 3d 20 27 5d 27 3b 20 20 62 72 65 61  ote = ']';  brea
2e60: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
2e70: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
2e80: 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20 7a   for(i=1, j=0; z
2e90: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
2ea0: 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  f( z[i]==quote )
2eb0: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b  {.      if( z[i+
2ec0: 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20  1]==quote ){.   
2ed0: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71 75       z[j++] = qu
2ee0: 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b  ote;.        i++
2ef0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2f00: 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20         z[j++] = 
2f10: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
2f20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
2f30: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b 2b  lse{.      z[j++
2f40: 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d 0a  ] = z[i];.    }.
2f50: 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61 72 72    }.}../* An arr
2f60: 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20 75 70  ay to map all up
2f70: 70 65 72 2d 63 61 73 65 20 63 68 61 72 61 63 74  per-case charact
2f80: 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72 20 63  ers into their c
2f90: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
2fa0: 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61 72 61  lower-case chara
2fb0: 63 74 65 72 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20  cter. .*/.const 
2fc0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2fd0: 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
2fe0: 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 30 2c  r[] = {.      0,
2ff0: 20 20 31 2c 20 20 32 2c 20 20 33 2c 20 20 34 2c    1,  2,  3,  4,
3000: 20 20 35 2c 20 20 36 2c 20 20 37 2c 20 20 38 2c    5,  6,  7,  8,
3010: 20 20 39 2c 20 31 30 2c 20 31 31 2c 20 31 32 2c    9, 10, 11, 12,
3020: 20 31 33 2c 20 31 34 2c 20 31 35 2c 20 31 36 2c   13, 14, 15, 16,
3030: 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20 31 39   17,.     18, 19
3040: 2c 20 32 30 2c 20 32 31 2c 20 32 32 2c 20 32 33  , 20, 21, 22, 23
3050: 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20 32 37  , 24, 25, 26, 27
3060: 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20 33 31  , 28, 29, 30, 31
3070: 2c 20 33 32 2c 20 33 33 2c 20 33 34 2c 20 33 35  , 32, 33, 34, 35
3080: 2c 0a 20 20 20 20 20 33 36 2c 20 33 37 2c 20 33  ,.     36, 37, 3
3090: 38 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c 20 34  8, 39, 40, 41, 4
30a0: 32 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c 20 34  2, 43, 44, 45, 4
30b0: 36 2c 20 34 37 2c 20 34 38 2c 20 34 39 2c 20 35  6, 47, 48, 49, 5
30c0: 30 2c 20 35 31 2c 20 35 32 2c 20 35 33 2c 0a 20  0, 51, 52, 53,. 
30d0: 20 20 20 20 35 34 2c 20 35 35 2c 20 35 36 2c 20      54, 55, 56, 
30e0: 35 37 2c 20 35 38 2c 20 35 39 2c 20 36 30 2c 20  57, 58, 59, 60, 
30f0: 36 31 2c 20 36 32 2c 20 36 33 2c 20 36 34 2c 20  61, 62, 63, 64, 
3100: 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c 31  97, 98, 99,100,1
3110: 30 31 2c 31 30 32 2c 31 30 33 2c 0a 20 20 20 20  01,102,103,.    
3120: 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c  104,105,106,107,
3130: 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c  108,109,110,111,
3140: 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35 2c  112,113,114,115,
3150: 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39 2c  116,117,118,119,
3160: 31 32 30 2c 31 32 31 2c 0a 20 20 20 20 31 32 32  120,121,.    122
3170: 2c 20 39 31 2c 20 39 32 2c 20 39 33 2c 20 39 34  , 91, 92, 93, 94
3180: 2c 20 39 35 2c 20 39 36 2c 20 39 37 2c 20 39 38  , 95, 96, 97, 98
3190: 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31 30 32  , 99,100,101,102
31a0: 2c 31 30 33 2c 31 30 34 2c 31 30 35 2c 31 30 36  ,103,104,105,106
31b0: 2c 31 30 37 2c 0a 20 20 20 20 31 30 38 2c 31 30  ,107,.    108,10
31c0: 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31  9,110,111,112,11
31d0: 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c 31 31  3,114,115,116,11
31e0: 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c 31 32  7,118,119,120,12
31f0: 31 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c 31 32  1,122,123,124,12
3200: 35 2c 0a 20 20 20 20 31 32 36 2c 31 32 37 2c 31  5,.    126,127,1
3210: 32 38 2c 31 32 39 2c 31 33 30 2c 31 33 31 2c 31  28,129,130,131,1
3220: 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35 2c 31  32,133,134,135,1
3230: 33 36 2c 31 33 37 2c 31 33 38 2c 31 33 39 2c 31  36,137,138,139,1
3240: 34 30 2c 31 34 31 2c 31 34 32 2c 31 34 33 2c 0a  40,141,142,143,.
3250: 20 20 20 20 31 34 34 2c 31 34 35 2c 31 34 36 2c      144,145,146,
3260: 31 34 37 2c 31 34 38 2c 31 34 39 2c 31 35 30 2c  147,148,149,150,
3270: 31 35 31 2c 31 35 32 2c 31 35 33 2c 31 35 34 2c  151,152,153,154,
3280: 31 35 35 2c 31 35 36 2c 31 35 37 2c 31 35 38 2c  155,156,157,158,
3290: 31 35 39 2c 31 36 30 2c 31 36 31 2c 0a 20 20 20  159,160,161,.   
32a0: 20 31 36 32 2c 31 36 33 2c 31 36 34 2c 31 36 35   162,163,164,165
32b0: 2c 31 36 36 2c 31 36 37 2c 31 36 38 2c 31 36 39  ,166,167,168,169
32c0: 2c 31 37 30 2c 31 37 31 2c 31 37 32 2c 31 37 33  ,170,171,172,173
32d0: 2c 31 37 34 2c 31 37 35 2c 31 37 36 2c 31 37 37  ,174,175,176,177
32e0: 2c 31 37 38 2c 31 37 39 2c 0a 20 20 20 20 31 38  ,178,179,.    18
32f0: 30 2c 31 38 31 2c 31 38 32 2c 31 38 33 2c 31 38  0,181,182,183,18
3300: 34 2c 31 38 35 2c 31 38 36 2c 31 38 37 2c 31 38  4,185,186,187,18
3310: 38 2c 31 38 39 2c 31 39 30 2c 31 39 31 2c 31 39  8,189,190,191,19
3320: 32 2c 31 39 33 2c 31 39 34 2c 31 39 35 2c 31 39  2,193,194,195,19
3330: 36 2c 31 39 37 2c 0a 20 20 20 20 31 39 38 2c 31  6,197,.    198,1
3340: 39 39 2c 32 30 30 2c 32 30 31 2c 32 30 32 2c 32  99,200,201,202,2
3350: 30 33 2c 32 30 34 2c 32 30 35 2c 32 30 36 2c 32  03,204,205,206,2
3360: 30 37 2c 32 30 38 2c 32 30 39 2c 32 31 30 2c 32  07,208,209,210,2
3370: 31 31 2c 32 31 32 2c 32 31 33 2c 32 31 34 2c 32  11,212,213,214,2
3380: 31 35 2c 0a 20 20 20 20 32 31 36 2c 32 31 37 2c  15,.    216,217,
3390: 32 31 38 2c 32 31 39 2c 32 32 30 2c 32 32 31 2c  218,219,220,221,
33a0: 32 32 32 2c 32 32 33 2c 32 32 34 2c 32 32 35 2c  222,223,224,225,
33b0: 32 32 36 2c 32 32 37 2c 32 32 38 2c 32 32 39 2c  226,227,228,229,
33c0: 32 33 30 2c 32 33 31 2c 32 33 32 2c 32 33 33 2c  230,231,232,233,
33d0: 0a 20 20 20 20 32 33 34 2c 32 33 35 2c 32 33 36  .    234,235,236
33e0: 2c 32 33 37 2c 32 33 38 2c 32 33 39 2c 32 34 30  ,237,238,239,240
33f0: 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32 34 34  ,241,242,243,244
3400: 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32 34 38  ,245,246,247,248
3410: 2c 32 34 39 2c 32 35 30 2c 32 35 31 2c 0a 20 20  ,249,250,251,.  
3420: 20 20 32 35 32 2c 32 35 33 2c 32 35 34 2c 32 35    252,253,254,25
3430: 35 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 55 70 70  5.};.#define Upp
3440: 65 72 54 6f 4c 6f 77 65 72 20 73 71 6c 69 74 65  erToLower sqlite
3450: 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 0a 0a 2f  3UpperToLower../
3460: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3470: 6f 6e 20 63 6f 6d 70 75 74 65 73 20 61 20 68 61  on computes a ha
3480: 73 68 20 6f 6e 20 74 68 65 20 6e 61 6d 65 20 6f  sh on the name o
3490: 66 20 61 20 6b 65 79 77 6f 72 64 2e 0a 2a 2a 20  f a keyword..** 
34a0: 43 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  Case is not sign
34b0: 69 66 69 63 61 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  ificant..*/.int 
34c0: 73 71 6c 69 74 65 33 48 61 73 68 4e 6f 43 61 73  sqlite3HashNoCas
34d0: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  e(const char *z,
34e0: 20 69 6e 74 20 6e 29 7b 0a 20 20 69 6e 74 20 68   int n){.  int h
34f0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 3c 3d 30   = 0;.  if( n<=0
3500: 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29   ) n = strlen(z)
3510: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 20 3e 20 30  ;.  while( n > 0
3520: 20 20 29 7b 0a 20 20 20 20 68 20 3d 20 28 68 3c    ){.    h = (h<
3530: 3c 33 29 20 5e 20 68 20 5e 20 55 70 70 65 72 54  <3) ^ h ^ UpperT
3540: 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
3550: 20 63 68 61 72 29 2a 7a 2b 2b 5d 3b 0a 20 20 20   char)*z++];.   
3560: 20 6e 2d 2d 3b 0a 20 20 7d 0a 20 20 72 65 74 75   n--;.  }.  retu
3570: 72 6e 20 68 20 26 20 30 78 37 66 66 66 66 66 66  rn h & 0x7ffffff
3580: 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  f;.}../*.** Some
3590: 20 73 79 73 74 65 6d 73 20 68 61 76 65 20 73 74   systems have st
35a0: 72 69 63 6d 70 28 29 2e 20 20 4f 74 68 65 72 73  ricmp().  Others
35b0: 20 68 61 76 65 20 73 74 72 63 61 73 65 63 6d 70   have strcasecmp
35c0: 28 29 2e 20 20 42 65 63 61 75 73 65 0a 2a 2a 20  ().  Because.** 
35d0: 74 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  there is no cons
35e0: 69 73 74 65 6e 63 79 2c 20 77 65 20 77 69 6c 6c  istency, we will
35f0: 20 64 65 66 69 6e 65 20 6f 75 72 20 6f 77 6e 2e   define our own.
3600: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
3610: 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
3620: 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20  r *zLeft, const 
3630: 63 68 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20  char *zRight){. 
3640: 20 72 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e   register unsign
3650: 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a  ed char *a, *b;.
3660: 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    a = (unsigned 
3670: 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20  char *)zLeft;.  
3680: 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  b = (unsigned ch
3690: 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77  ar *)zRight;.  w
36a0: 68 69 6c 65 28 20 2a 61 21 3d 30 20 26 26 20 55  hile( *a!=0 && U
36b0: 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d  pperToLower[*a]=
36c0: 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62  =UpperToLower[*b
36d0: 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a  ]){ a++; b++; }.
36e0: 20 20 72 65 74 75 72 6e 20 55 70 70 65 72 54 6f    return UpperTo
36f0: 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65  Lower[*a] - Uppe
3700: 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a  rToLower[*b];.}.
3710: 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 4e 49  int sqlite3StrNI
3720: 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Cmp(const char *
3730: 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61  zLeft, const cha
3740: 72 20 2a 7a 52 69 67 68 74 2c 20 69 6e 74 20 4e  r *zRight, int N
3750: 29 7b 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e  ){.  register un
3760: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20  signed char *a, 
3770: 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67  *b;.  a = (unsig
3780: 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74  ned char *)zLeft
3790: 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  b = (unsigne
37a0: 64 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b  d char *)zRight;
37b0: 0a 20 20 77 68 69 6c 65 28 20 4e 2d 2d 20 3e 20  .  while( N-- > 
37c0: 30 20 26 26 20 2a 61 21 3d 30 20 26 26 20 55 70  0 && *a!=0 && Up
37d0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d  perToLower[*a]==
37e0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
37f0: 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20  ){ a++; b++; }. 
3800: 20 72 65 74 75 72 6e 20 4e 3c 30 20 3f 20 30 20   return N<0 ? 0 
3810: 3a 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  : UpperToLower[*
3820: 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65  a] - UpperToLowe
3830: 72 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  r[*b];.}../*.** 
3840: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a  Return TRUE if z
3850: 20 69 73 20 61 20 70 75 72 65 20 6e 75 6d 65 72   is a pure numer
3860: 69 63 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75  ic string.  Retu
3870: 72 6e 20 46 41 4c 53 45 20 69 66 20 74 68 65 0a  rn FALSE if the.
3880: 2a 2a 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  ** string contai
3890: 6e 73 20 61 6e 79 20 63 68 61 72 61 63 74 65 72  ns any character
38a0: 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 70 61   which is not pa
38b0: 72 74 20 6f 66 20 61 20 6e 75 6d 62 65 72 2e 20  rt of a number. 
38c0: 49 66 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67  If.** the string
38d0: 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
38e0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 27 2e 27  contains the '.'
38f0: 20 63 68 61 72 61 63 74 65 72 2c 20 73 65 74 20   character, set 
3900: 2a 72 65 61 6c 6e 75 6d 0a 2a 2a 20 74 6f 20 54  *realnum.** to T
3910: 52 55 45 20 28 6f 74 68 65 72 77 69 73 65 20 46  RUE (otherwise F
3920: 41 4c 53 45 29 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  ALSE)..**.** An 
3930: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73 20  empty string is 
3940: 63 6f 6e 73 69 64 65 72 65 64 20 6e 6f 6e 2d 6e  considered non-n
3950: 75 6d 65 72 69 63 2e 0a 2a 2f 0a 69 6e 74 20 73  umeric..*/.int s
3960: 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63  qlite3IsNumber(c
3970: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
3980: 74 20 2a 72 65 61 6c 6e 75 6d 2c 20 75 38 20 65  t *realnum, u8 e
3990: 6e 63 29 7b 0a 20 20 69 6e 74 20 69 6e 63 72 20  nc){.  int incr 
39a0: 3d 20 28 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  = (enc==SQLITE_U
39b0: 54 46 38 3f 31 3a 32 29 3b 0a 20 20 69 66 28 20  TF8?1:2);.  if( 
39c0: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
39d0: 36 42 45 20 29 20 7a 2b 2b 3b 0a 20 20 69 66 28  6BE ) z++;.  if(
39e0: 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 3d 3d   *z=='-' || *z==
39f0: 27 2b 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b  '+' ) z += incr;
3a00: 0a 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28  .  if( !isdigit(
3a10: 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20  *(u8*)z) ){.    
3a20: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3a30: 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66 28  z += incr;.  if(
3a40: 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c   realnum ) *real
3a50: 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65  num = 0;.  while
3a60: 28 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29  ( isdigit(*(u8*)
3a70: 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b  z) ){ z += incr;
3a80: 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27   }.  if( *z=='.'
3a90: 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63   ){.    z += inc
3aa0: 72 3b 0a 20 20 20 20 69 66 28 20 21 69 73 64 69  r;.    if( !isdi
3ab0: 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 20 72  git(*(u8*)z) ) r
3ac0: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69  eturn 0;.    whi
3ad0: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28 75 38  le( isdigit(*(u8
3ae0: 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63  *)z) ){ z += inc
3af0: 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61  r; }.    if( rea
3b00: 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20  lnum ) *realnum 
3b10: 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a  = 1;.  }.  if( *
3b20: 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45  z=='e' || *z=='E
3b30: 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e  ' ){.    z += in
3b40: 63 72 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d  cr;.    if( *z==
3b50: 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29  '+' || *z=='-' )
3b60: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20   z += incr;.    
3b70: 69 66 28 20 21 69 73 64 69 67 69 74 28 2a 28 75  if( !isdigit(*(u
3b80: 38 2a 29 7a 29 20 29 20 72 65 74 75 72 6e 20 30  8*)z) ) return 0
3b90: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73 64  ;.    while( isd
3ba0: 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b  igit(*(u8*)z) ){
3bb0: 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20   z += incr; }.  
3bc0: 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20    if( realnum ) 
3bd0: 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20  *realnum = 1;.  
3be0: 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30  }.  return *z==0
3bf0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  ;.}../*.** The s
3c00: 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20 61 6e 20  tring z[] is an 
3c10: 61 73 63 69 69 20 72 65 70 72 65 73 65 6e 74 61  ascii representa
3c20: 74 69 6f 6e 20 6f 66 20 61 20 72 65 61 6c 20 6e  tion of a real n
3c30: 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76 65 72  umber..** Conver
3c40: 74 20 74 68 69 73 20 73 74 72 69 6e 67 20 74 6f  t this string to
3c50: 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a 0a 2a 2a   a double..**.**
3c60: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 61 73   This routine as
3c70: 73 75 6d 65 73 20 74 68 61 74 20 7a 5b 5d 20 72  sumes that z[] r
3c80: 65 61 6c 6c 79 20 69 73 20 61 20 76 61 6c 69 64  eally is a valid
3c90: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 0a   number.  If it.
3ca0: 2a 2a 20 69 73 20 6e 6f 74 2c 20 74 68 65 20 72  ** is not, the r
3cb0: 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e  esult is undefin
3cc0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  ed..**.** This r
3cd0: 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64 20 69  outine is used i
3ce0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 6c 69  nstead of the li
3cf0: 62 72 61 72 79 20 61 74 6f 66 28 29 20 66 75 6e  brary atof() fun
3d00: 63 74 69 6f 6e 20 62 65 63 61 75 73 65 0a 2a 2a  ction because.**
3d10: 20 74 68 65 20 6c 69 62 72 61 72 79 20 61 74 6f   the library ato
3d20: 66 28 29 20 6d 69 67 68 74 20 77 61 6e 74 20 74  f() might want t
3d30: 6f 20 75 73 65 20 22 2c 22 20 61 73 20 74 68 65  o use "," as the
3d40: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69   decimal point i
3d50: 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 22 2e 22  nstead.** of "."
3d60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 68 6f   depending on ho
3d70: 77 20 6c 6f 63 61 6c 65 20 69 73 20 73 65 74 2e  w locale is set.
3d80: 20 20 42 75 74 20 74 68 61 74 20 77 6f 75 6c 64    But that would
3d90: 20 63 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 0a   cause problems.
3da0: 2a 2a 20 66 6f 72 20 53 51 4c 2e 20 20 53 6f 20  ** for SQL.  So 
3db0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61 6c 77  this routine alw
3dc0: 61 79 73 20 75 73 65 73 20 22 2e 22 20 72 65 67  ays uses "." reg
3dd0: 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
3de0: 65 2e 0a 2a 2f 0a 64 6f 75 62 6c 65 20 73 71 6c  e..*/.double sql
3df0: 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
3e00: 68 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68  har *z, const ch
3e10: 61 72 20 2a 2a 70 7a 45 6e 64 29 7b 0a 20 20 69  ar **pzEnd){.  i
3e20: 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20 4c  nt sign = 1;.  L
3e30: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 76  ONGDOUBLE_TYPE v
3e40: 31 20 3d 20 30 2e 30 3b 0a 20 20 69 66 28 20 2a  1 = 0.0;.  if( *
3e50: 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 73 69  z=='-' ){.    si
3e60: 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 7a 2b 2b  gn = -1;.    z++
3e70: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a  ;.  }else if( *z
3e80: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 2b 2b  =='+' ){.    z++
3e90: 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 69  ;.  }.  while( i
3ea0: 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20  sdigit(*(u8*)z) 
3eb0: 29 7b 0a 20 20 20 20 76 31 20 3d 20 76 31 2a 31  ){.    v1 = v1*1
3ec0: 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29  0.0 + (*z - '0')
3ed0: 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20  ;.    z++;.  }. 
3ee0: 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a   if( *z=='.' ){.
3ef0: 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54      LONGDOUBLE_T
3f00: 59 50 45 20 64 69 76 69 73 6f 72 20 3d 20 31 2e  YPE divisor = 1.
3f10: 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  0;.    z++;.    
3f20: 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a  while( isdigit(*
3f30: 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 20  (u8*)z) ){.     
3f40: 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20   v1 = v1*10.0 + 
3f50: 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20  (*z - '0');.    
3f60: 20 20 64 69 76 69 73 6f 72 20 2a 3d 20 31 30 2e    divisor *= 10.
3f70: 30 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20  0;.      z++;.  
3f80: 20 20 7d 0a 20 20 20 20 76 31 20 2f 3d 20 64 69    }.    v1 /= di
3f90: 76 69 73 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28  visor;.  }.  if(
3fa0: 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d   *z=='e' || *z==
3fb0: 27 45 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 65  'E' ){.    int e
3fc0: 73 69 67 6e 20 3d 20 31 3b 0a 20 20 20 20 69 6e  sign = 1;.    in
3fd0: 74 20 65 76 61 6c 20 3d 20 30 3b 0a 20 20 20 20  t eval = 0;.    
3fe0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
3ff0: 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20  scale = 1.0;.   
4000: 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a   z++;.    if( *z
4010: 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65  =='-' ){.      e
4020: 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20  sign = -1;.     
4030: 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20   z++;.    }else 
4040: 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20  if( *z=='+' ){. 
4050: 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a       z++;.    }.
4060: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
4070: 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20  it(*(u8*)z) ){. 
4080: 20 20 20 20 20 65 76 61 6c 20 3d 20 65 76 61 6c       eval = eval
4090: 2a 31 30 20 2b 20 2a 7a 20 2d 20 27 30 27 3b 0a  *10 + *z - '0';.
40a0: 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d        z++;.    }
40b0: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
40c0: 3e 3d 36 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d  >=64 ){ scale *=
40d0: 20 31 2e 30 65 2b 36 34 3b 20 65 76 61 6c 20 2d   1.0e+64; eval -
40e0: 3d 20 36 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c  = 64; }.    whil
40f0: 65 28 20 65 76 61 6c 3e 3d 31 36 20 29 7b 20 73  e( eval>=16 ){ s
4100: 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 36 3b  cale *= 1.0e+16;
4110: 20 65 76 61 6c 20 2d 3d 20 31 36 3b 20 7d 0a 20   eval -= 16; }. 
4120: 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d     while( eval>=
4130: 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e  4 ){ scale *= 1.
4140: 30 65 2b 34 3b 20 65 76 61 6c 20 2d 3d 20 34 3b  0e+4; eval -= 4;
4150: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76   }.    while( ev
4160: 61 6c 3e 3d 31 20 29 7b 20 73 63 61 6c 65 20 2a  al>=1 ){ scale *
4170: 3d 20 31 2e 30 65 2b 31 3b 20 65 76 61 6c 20 2d  = 1.0e+1; eval -
4180: 3d 20 31 3b 20 7d 0a 20 20 20 20 69 66 28 20 65  = 1; }.    if( e
4190: 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20 20 20 20  sign<0 ){.      
41a0: 76 31 20 2f 3d 20 73 63 61 6c 65 3b 0a 20 20 20  v1 /= scale;.   
41b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 76 31   }else{.      v1
41c0: 20 2a 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d   *= scale;.    }
41d0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 7a 45 6e 64  .  }.  if( pzEnd
41e0: 20 29 20 2a 70 7a 45 6e 64 20 3d 20 7a 3b 0a 20   ) *pzEnd = z;. 
41f0: 20 72 65 74 75 72 6e 20 73 69 67 6e 3c 30 20 3f   return sign<0 ?
4200: 20 2d 76 31 20 3a 20 76 31 3b 0a 7d 0a 0a 2f 2a   -v1 : v1;.}../*
4210: 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  .** Return TRUE 
4220: 69 66 20 7a 4e 75 6d 20 69 73 20 61 20 36 34 2d  if zNum is a 64-
4230: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
4240: 65 72 20 61 6e 64 20 77 72 69 74 65 0a 2a 2a 20  er and write.** 
4250: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
4260: 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 2a 70   integer into *p
4270: 4e 75 6d 2e 20 20 49 66 20 7a 4e 75 6d 20 69 73  Num.  If zNum is
4280: 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 0a   not an integer.
4290: 2a 2a 20 6f 72 20 69 73 20 61 6e 20 69 6e 74 65  ** or is an inte
42a0: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
42b0: 6c 61 72 67 65 20 74 6f 20 62 65 20 65 78 70 72  large to be expr
42c0: 65 73 73 65 64 20 77 69 74 68 20 36 34 20 62 69  essed with 64 bi
42d0: 74 73 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 74 75  ts,.** then retu
42e0: 72 6e 20 66 61 6c 73 65 2e 20 20 49 66 20 6e 3e  rn false.  If n>
42f0: 30 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  0 and the intege
4300: 72 20 69 73 20 73 74 72 69 6e 67 20 69 73 20 6e  r is string is n
4310: 6f 74 0a 2a 2a 20 65 78 61 63 74 6c 79 20 6e 20  ot.** exactly n 
4320: 62 79 74 65 73 20 6c 6f 6e 67 2c 20 72 65 74 75  bytes long, retu
4330: 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20  rn false..**.** 
4340: 57 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  When this routin
4350: 65 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  e was originally
4360: 20 77 72 69 74 74 65 6e 20 69 74 20 64 65 61 6c   written it deal
4370: 74 20 77 69 74 68 20 6f 6e 6c 79 0a 2a 2a 20 33  t with only.** 3
4380: 32 2d 62 69 74 20 6e 75 6d 62 65 72 73 2e 20 20  2-bit numbers.  
4390: 41 74 20 74 68 61 74 20 74 69 6d 65 2c 20 69 74  At that time, it
43a0: 20 77 61 73 20 6d 75 63 68 20 66 61 73 74 65 72   was much faster
43b0: 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 61 74 6f   than the.** ato
43c0: 69 28 29 20 6c 69 62 72 61 72 79 20 72 6f 75 74  i() library rout
43d0: 69 6e 65 20 69 6e 20 52 65 64 48 61 74 20 37 2e  ine in RedHat 7.
43e0: 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  2..*/.int sqlite
43f0: 33 61 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3atoi64(const ch
4400: 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70  ar *zNum, i64 *p
4410: 4e 75 6d 29 7b 0a 20 20 69 36 34 20 76 20 3d 20  Num){.  i64 v = 
4420: 30 3b 0a 20 20 69 6e 74 20 6e 65 67 3b 0a 20 20  0;.  int neg;.  
4430: 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20  int i, c;.  if( 
4440: 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b 0a 20 20  *zNum=='-' ){.  
4450: 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a    neg = 1;.    z
4460: 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69  Num++;.  }else i
4470: 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b  f( *zNum=='+' ){
4480: 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20  .    neg = 0;.  
4490: 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73    zNum++;.  }els
44a0: 65 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b 0a  e{.    neg = 0;.
44b0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28    }.  for(i=0; (
44c0: 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20  c=zNum[i])>='0' 
44d0: 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b  && c<='9'; i++){
44e0: 0a 20 20 20 20 76 20 3d 20 76 2a 31 30 20 2b 20  .    v = v*10 + 
44f0: 63 20 2d 20 27 30 27 3b 0a 20 20 7d 0a 20 20 2a  c - '0';.  }.  *
4500: 70 4e 75 6d 20 3d 20 6e 65 67 20 3f 20 2d 76 20  pNum = neg ? -v 
4510: 3a 20 76 3b 0a 20 20 72 65 74 75 72 6e 20 63 3d  : v;.  return c=
4520: 3d 30 20 26 26 20 69 3e 30 20 26 26 20 0a 20 20  =0 && i>0 && .  
4530: 20 20 20 20 28 69 3c 31 39 20 7c 7c 20 28 69 3d      (i<19 || (i=
4540: 3d 31 39 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e  =19 && memcmp(zN
4550: 75 6d 2c 22 39 32 32 33 33 37 32 30 33 36 38 35  um,"922337203685
4560: 34 37 37 35 38 30 37 22 2c 31 39 29 3c 3d 30 29  4775807",19)<=0)
4570: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  );.}../*.** The 
4580: 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72 65 70 72  string zNum repr
4590: 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65  esents an intege
45a0: 72 2e 20 20 54 68 65 72 65 20 6d 69 67 68 74 20  r.  There might 
45b0: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a  be some other.**
45c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c   information fol
45d0: 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e 74 65 67  lowing the integ
45e0: 65 72 20 74 6f 6f 2c 20 62 75 74 20 74 68 61 74  er too, but that
45f0: 20 70 61 72 74 20 69 73 20 69 67 6e 6f 72 65 64   part is ignored
4600: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 74 65  ..** If the inte
4610: 67 65 72 20 74 68 61 74 20 74 68 65 20 70 72 65  ger that the pre
4620: 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72 65 70 72  fix of zNum repr
4630: 65 73 65 6e 74 73 20 77 69 6c 6c 20 66 69 74 20  esents will fit 
4640: 69 6e 20 61 0a 2a 2a 20 33 32 2d 62 69 74 20 73  in a.** 32-bit s
4650: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 72  igned integer, r
4660: 65 74 75 72 6e 20 54 52 55 45 2e 20 20 4f 74 68  eturn TRUE.  Oth
4670: 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 46 41  erwise return FA
4680: 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  LSE..**.** This 
4690: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
46a0: 46 41 4c 53 45 20 66 6f 72 20 74 68 65 20 73 74  FALSE for the st
46b0: 72 69 6e 67 20 2d 32 31 34 37 34 38 33 36 34 38  ring -2147483648
46c0: 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68   even that.** th
46d0: 61 74 20 6e 75 6d 62 65 72 20 77 69 6c 6c 20 69  at number will i
46e0: 6e 20 66 61 63 74 20 66 69 74 20 69 6e 20 61 20  n fact fit in a 
46f0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 20  32-bit integer. 
4700: 20 42 75 74 20 70 6f 73 69 74 69 76 65 0a 2a 2a   But positive.**
4710: 20 32 31 34 37 34 38 33 36 34 38 20 77 69 6c 6c   2147483648 will
4720: 20 6e 6f 74 20 66 69 74 20 69 6e 20 33 32 20 62   not fit in 32 b
4730: 69 74 73 2e 20 20 53 6f 20 69 74 20 73 65 65 6d  its.  So it seem
4740: 73 20 73 61 66 65 72 20 74 6f 20 72 65 74 75 72  s safer to retur
4750: 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73  n.** false..*/.s
4760: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
4770: 33 46 69 74 73 49 6e 33 32 42 69 74 73 28 63 6f  3FitsIn32Bits(co
4780: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b  nst char *zNum){
4790: 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69  .  int i, c;.  i
47a0: 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c  f( *zNum=='-' ||
47b0: 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e   *zNum=='+' ) zN
47c0: 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  um++;.  for(i=0;
47d0: 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30   (c=zNum[i])>='0
47e0: 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b  ' && c<='9'; i++
47f0: 29 7b 7d 0a 20 20 72 65 74 75 72 6e 20 69 3c 31  ){}.  return i<1
4800: 30 20 7c 7c 20 28 69 3d 3d 31 30 20 26 26 20 6d  0 || (i==10 && m
4810: 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 32 31 34 37  emcmp(zNum,"2147
4820: 34 38 33 36 34 37 22 2c 31 30 29 3c 3d 30 29 3b  483647",10)<=0);
4830: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75  .}../*.** If zNu
4840: 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20  m represents an 
4850: 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 69 6c  integer that wil
4860: 6c 20 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73  l fit in 32-bits
4870: 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70  , then set.** *p
4880: 56 61 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e  Value to that in
4890: 74 65 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e  teger and return
48a0: 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73   true.  Otherwis
48b0: 65 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a  e return false..
48c0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  */.int sqlite3Ge
48d0: 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
48e0: 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70 56  r *zNum, int *pV
48f0: 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73 71 6c  alue){.  if( sql
4900: 69 74 65 33 46 69 74 73 49 6e 33 32 42 69 74 73  ite3FitsIn32Bits
4910: 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20 2a 70  (zNum) ){.    *p
4920: 56 61 6c 75 65 20 3d 20 61 74 6f 69 28 7a 4e 75  Value = atoi(zNu
4930: 6d 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  m);.    return 1
4940: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
4950: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  ;.}../*.** The s
4960: 74 72 69 6e 67 20 7a 4e 75 6d 20 72 65 70 72 65  tring zNum repre
4970: 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72  sents an integer
4980: 2e 20 20 54 68 65 72 65 20 6d 69 67 68 74 20 62  .  There might b
4990: 65 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20  e some other.** 
49a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c  information foll
49b0: 6f 77 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65  owing the intege
49c0: 72 20 74 6f 6f 2c 20 62 75 74 20 74 68 61 74 20  r too, but that 
49d0: 70 61 72 74 20 69 73 20 69 67 6e 6f 72 65 64 2e  part is ignored.
49e0: 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 74 65 67  .** If the integ
49f0: 65 72 20 74 68 61 74 20 74 68 65 20 70 72 65 66  er that the pref
4a00: 69 78 20 6f 66 20 7a 4e 75 6d 20 72 65 70 72 65  ix of zNum repre
4a10: 73 65 6e 74 73 20 77 69 6c 6c 20 66 69 74 20 69  sents will fit i
4a20: 6e 20 61 0a 2a 2a 20 36 34 2d 62 69 74 20 73 69  n a.** 64-bit si
4a30: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 72 65  gned integer, re
4a40: 74 75 72 6e 20 54 52 55 45 2e 20 20 4f 74 68 65  turn TRUE.  Othe
4a50: 72 77 69 73 65 20 72 65 74 75 72 6e 20 46 41 4c  rwise return FAL
4a60: 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  SE..**.** This r
4a70: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 46  outine returns F
4a80: 41 4c 53 45 20 66 6f 72 20 74 68 65 20 73 74 72  ALSE for the str
4a90: 69 6e 67 20 2d 39 32 32 33 33 37 32 30 33 36 38  ing -92233720368
4aa0: 35 34 37 37 35 38 30 38 20 65 76 65 6e 20 74 68  54775808 even th
4ab0: 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d 62 65  at.** that numbe
4ac0: 72 20 77 69 6c 6c 2c 20 69 6e 20 74 68 65 6f 72  r will, in theor
4ad0: 79 20 66 69 74 20 69 6e 20 61 20 36 34 2d 62 69  y fit in a 64-bi
4ae0: 74 20 69 6e 74 65 67 65 72 2e 20 20 50 6f 73 69  t integer.  Posi
4af0: 74 69 76 65 0a 2a 2a 20 39 32 32 33 33 37 33 30  tive.** 92233730
4b00: 33 36 38 35 34 37 37 35 38 30 38 20 77 69 6c 6c  36854775808 will
4b10: 20 6e 6f 74 20 66 69 74 20 69 6e 20 36 34 20 62   not fit in 64 b
4b20: 69 74 73 2e 20 20 53 6f 20 69 74 20 73 65 65 6d  its.  So it seem
4b30: 73 20 73 61 66 65 72 20 74 6f 20 72 65 74 75 72  s safer to retur
4b40: 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69  n.** false..*/.i
4b50: 6e 74 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e  nt sqlite3FitsIn
4b60: 36 34 42 69 74 73 28 63 6f 6e 73 74 20 63 68 61  64Bits(const cha
4b70: 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74 20  r *zNum){.  int 
4b80: 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75  i, c;.  if( *zNu
4b90: 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d  m=='-' || *zNum=
4ba0: 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20  ='+' ) zNum++;. 
4bb0: 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75   for(i=0; (c=zNu
4bc0: 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c  m[i])>='0' && c<
4bd0: 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72  ='9'; i++){}.  r
4be0: 65 74 75 72 6e 20 69 3c 31 39 20 7c 7c 20 28 69  eturn i<19 || (i
4bf0: 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d 70 28 7a  ==19 && memcmp(z
4c00: 4e 75 6d 2c 22 39 32 32 33 33 37 32 30 33 36 38  Num,"92233720368
4c10: 35 34 37 37 35 38 30 37 22 2c 31 39 29 3c 3d 30  54775807",19)<=0
4c20: 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 61  );.}.../*.** Cha
4c30: 6e 67 65 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  nge the sqlite.m
4c40: 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45  agic from SQLITE
4c50: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20 53  _MAGIC_OPEN to S
4c60: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
4c70: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65  ..** Return an e
4c80: 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  rror (non-zero) 
4c90: 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61 73  if the magic was
4ca0: 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49   not SQLITE_MAGI
4cb0: 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74  C_OPEN.** when t
4cc0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
4cd0: 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  alled..**.** Thi
4ce0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 61  s routine is a a
4cf0: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 63 74  ttempt to detect
4d00: 20 69 66 20 74 77 6f 20 74 68 72 65 61 64 73 20   if two threads 
4d10: 75 73 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  use the.** same 
4d20: 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72 20  sqlite* pointer 
4d30: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
4d40: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 72 61  .  There is a ra
4d50: 63 65 20 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e  ce .** condition
4d60: 20 73 6f 20 69 74 20 69 73 20 70 6f 73 73 69 62   so it is possib
4d70: 6c 65 20 74 68 61 74 20 74 68 65 20 65 72 72 6f  le that the erro
4d80: 72 20 69 73 20 6e 6f 74 20 64 65 74 65 63 74 65  r is not detecte
4d90: 64 2e 0a 2a 2a 20 42 75 74 20 75 73 75 61 6c 6c  d..** But usuall
4da0: 79 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 77 69  y the problem wi
4db0: 6c 6c 20 62 65 20 73 65 65 6e 2e 20 20 54 68 65  ll be seen.  The
4dc0: 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
4dd0: 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 77 68 69 63  an.** error whic
4de0: 68 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h can be used to
4df0: 20 64 65 62 75 67 20 74 68 65 20 61 70 70 6c 69   debug the appli
4e00: 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 0a 2a  cation that is.*
4e10: 2a 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69  * using SQLite i
4e20: 6e 63 6f 72 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a  ncorrectly..**.*
4e30: 2a 20 54 69 63 6b 65 74 20 23 32 30 32 3a 20 20  * Ticket #202:  
4e40: 49 66 20 64 62 2d 3e 6d 61 67 69 63 20 69 73 20  If db->magic is 
4e50: 6e 6f 74 20 61 20 76 61 6c 69 64 20 6f 70 65 6e  not a valid open
4e60: 20 76 61 6c 75 65 2c 20 74 61 6b 65 20 63 61 72   value, take car
4e70: 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20 6d 6f 64 69  e not.** to modi
4e80: 66 79 20 74 68 65 20 64 62 20 73 74 72 75 63 74  fy the db struct
4e90: 75 72 65 20 61 74 20 61 6c 6c 2e 20 20 49 74 20  ure at all.  It 
4ea0: 63 6f 75 6c 64 20 62 65 20 74 68 61 74 20 64 62  could be that db
4eb0: 20 69 73 20 61 20 73 74 61 6c 65 0a 2a 2a 20 70   is a stale.** p
4ec0: 6f 69 6e 74 65 72 2e 20 20 49 6e 20 6f 74 68 65  ointer.  In othe
4ed0: 72 20 77 6f 72 64 73 2c 20 69 74 20 63 6f 75 6c  r words, it coul
4ee0: 64 20 62 65 20 74 68 61 74 20 74 68 65 72 65 20  d be that there 
4ef0: 68 61 73 20 62 65 65 6e 20 61 20 70 72 69 6f 72  has been a prior
4f00: 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  .** call to sqli
4f10: 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 20 61 6e  te3_close(db) an
4f20: 64 20 64 62 20 68 61 73 20 62 65 65 6e 20 64 65  d db has been de
4f30: 61 6c 6c 6f 63 61 74 65 64 2e 20 20 41 6e 64 20  allocated.  And 
4f40: 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74 20 77 61 6e  we do.** not wan
4f50: 74 20 74 6f 20 77 72 69 74 65 20 69 6e 74 6f 20  t to write into 
4f60: 64 65 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  deallocated memo
4f70: 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ry..*/.int sqlit
4f80: 65 33 53 61 66 65 74 79 4f 6e 28 73 71 6c 69 74  e3SafetyOn(sqlit
4f90: 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64  e3 *db){.  if( d
4fa0: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
4fb0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20  _MAGIC_OPEN ){. 
4fc0: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
4fd0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
4fe0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
4ff0: 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
5000: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
5010: 47 49 43 5f 42 55 53 59 20 7c 7c 20 64 62 2d 3e  GIC_BUSY || db->
5020: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
5030: 47 49 43 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20  GIC_ERROR ){.   
5040: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
5050: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b  ITE_MAGIC_ERROR;
5060: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
5070: 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75  = SQLITE_Interru
5080: 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  pt;.  }.  return
5090: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61   1;.}../*.** Cha
50a0: 6e 67 65 20 74 68 65 20 6d 61 67 69 63 20 66 72  nge the magic fr
50b0: 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  om SQLITE_MAGIC_
50c0: 42 55 53 59 20 74 6f 20 53 51 4c 49 54 45 5f 4d  BUSY to SQLITE_M
50d0: 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20 52 65  AGIC_OPEN..** Re
50e0: 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e  turn an error (n
50f0: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
5100: 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51  magic was not SQ
5110: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 0a  LITE_MAGIC_BUSY.
5120: 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75  ** when this rou
5130: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a  tine is called..
5140: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  */.int sqlite3Sa
5150: 66 65 74 79 4f 66 66 28 73 71 6c 69 74 65 33 20  fetyOff(sqlite3 
5160: 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e  *db){.  if( db->
5170: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
5180: 47 49 43 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  GIC_BUSY ){.    
5190: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
51a0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20  TE_MAGIC_OPEN;. 
51b0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
51c0: 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67  else if( db->mag
51d0: 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic==SQLITE_MAGIC
51e0: 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67  _OPEN || db->mag
51f0: 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic==SQLITE_MAGIC
5200: 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 64 62  _ERROR ){.    db
5210: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
5220: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20  _MAGIC_ERROR;.  
5230: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
5240: 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b  QLITE_Interrupt;
5250: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
5260: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  .}../*.** Check 
5270: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  to make sure we 
5280: 68 61 76 65 20 61 20 76 61 6c 69 64 20 64 62 20  have a valid db 
5290: 70 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 20 74  pointer.  This t
52a0: 65 73 74 20 69 73 20 6e 6f 74 0a 2a 2a 20 66 6f  est is not.** fo
52b0: 6f 6c 70 72 6f 6f 66 20 62 75 74 20 69 74 20 64  olproof but it d
52c0: 6f 65 73 20 70 72 6f 76 69 64 65 20 73 6f 6d 65  oes provide some
52d0: 20 6d 65 61 73 75 72 65 20 6f 66 20 70 72 6f 74   measure of prot
52e0: 65 63 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 2a  ection against.*
52f0: 2a 20 6d 69 73 75 73 65 20 6f 66 20 74 68 65 20  * misuse of the 
5300: 69 6e 74 65 72 66 61 63 65 20 73 75 63 68 20 61  interface such a
5310: 73 20 70 61 73 73 69 6e 67 20 69 6e 20 64 62 20  s passing in db 
5320: 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 61 72  pointers that ar
5330: 65 0a 2a 2a 20 4e 55 4c 4c 20 6f 72 20 77 68 69  e.** NULL or whi
5340: 63 68 20 68 61 76 65 20 62 65 65 6e 20 70 72 65  ch have been pre
5350: 76 69 6f 75 73 6c 79 20 63 6c 6f 73 65 64 2e 20  viously closed. 
5360: 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65   If this routine
5370: 20 72 65 74 75 72 6e 73 0a 2a 2a 20 54 52 55 45   returns.** TRUE
5380: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
5390: 68 65 20 64 62 20 70 6f 69 6e 74 65 72 20 69 73  he db pointer is
53a0: 20 69 6e 76 61 6c 69 64 20 61 6e 64 20 73 68 6f   invalid and sho
53b0: 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 64 65  uld not be.** de
53c0: 72 65 66 65 72 65 6e 63 65 64 20 66 6f 72 20 61  referenced for a
53d0: 6e 79 20 72 65 61 73 6f 6e 2e 20 20 54 68 65 20  ny reason.  The 
53e0: 63 61 6c 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  calling function
53f0: 20 73 68 6f 75 6c 64 20 69 6e 76 6f 6b 65 0a 2a   should invoke.*
5400: 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  * SQLITE_MISUSE 
5410: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0a 2a 2f 0a  immediately..*/.
5420: 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
5430: 79 43 68 65 63 6b 28 73 71 6c 69 74 65 33 20 2a  yCheck(sqlite3 *
5440: 64 62 29 7b 0a 20 20 69 6e 74 20 6d 61 67 69 63  db){.  int magic
5450: 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20  ;.  if( db==0 ) 
5460: 72 65 74 75 72 6e 20 31 3b 0a 20 20 6d 61 67 69  return 1;.  magi
5470: 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a 20  c = db->magic;. 
5480: 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c 49   if( magic!=SQLI
5490: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
54a0: 26 26 0a 20 20 20 20 20 20 20 20 20 6d 61 67 69  &&.         magi
54b0: 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c!=SQLITE_MAGIC_
54c0: 4f 50 45 4e 20 26 26 0a 20 20 20 20 20 20 20 20  OPEN &&.        
54d0: 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d   magic!=SQLITE_M
54e0: 41 47 49 43 5f 42 55 53 59 20 29 20 72 65 74 75  AGIC_BUSY ) retu
54f0: 72 6e 20 31 3b 0a 20 20 72 65 74 75 72 6e 20 30  rn 1;.  return 0
5500: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76  ;.}../*.** The v
5510: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
5520: 6e 74 65 67 65 72 20 65 6e 63 6f 64 69 6e 67 20  nteger encoding 
5530: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 2a  is as follows:.*
5540: 2a 0a 2a 2a 20 4b 45 59 3a 0a 2a 2a 20 20 20 20  *.** KEY:.**    
5550: 20 20 20 20 20 41 20 3d 20 30 78 78 78 78 78 78       A = 0xxxxxx
5560: 78 20 20 20 20 37 20 62 69 74 73 20 6f 66 20 64  x    7 bits of d
5570: 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67  ata and one flag
5580: 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20   bit.**         
5590: 42 20 3d 20 31 78 78 78 78 78 78 78 20 20 20 20  B = 1xxxxxxx    
55a0: 37 20 62 69 74 73 20 6f 66 20 64 61 74 61 20 61  7 bits of data a
55b0: 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a  nd one flag bit.
55c0: 2a 2a 20 20 20 20 20 20 20 20 20 43 20 3d 20 78  **         C = x
55d0: 78 78 78 78 78 78 78 20 20 20 20 38 20 62 69 74  xxxxxxx    8 bit
55e0: 73 20 6f 66 20 64 61 74 61 0a 2a 2a 0a 2a 2a 20  s of data.**.** 
55f0: 20 37 20 62 69 74 73 20 2d 20 41 0a 2a 2a 20 31   7 bits - A.** 1
5600: 34 20 62 69 74 73 20 2d 20 42 41 0a 2a 2a 20 32  4 bits - BA.** 2
5610: 31 20 62 69 74 73 20 2d 20 42 42 41 0a 2a 2a 20  1 bits - BBA.** 
5620: 32 38 20 62 69 74 73 20 2d 20 42 42 42 41 0a 2a  28 bits - BBBA.*
5630: 2a 20 33 35 20 62 69 74 73 20 2d 20 42 42 42 42  * 35 bits - BBBB
5640: 41 0a 2a 2a 20 34 32 20 62 69 74 73 20 2d 20 42  A.** 42 bits - B
5650: 42 42 42 42 41 0a 2a 2a 20 34 39 20 62 69 74 73  BBBBA.** 49 bits
5660: 20 2d 20 42 42 42 42 42 42 41 0a 2a 2a 20 35 36   - BBBBBBA.** 56
5670: 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42 41   bits - BBBBBBBA
5680: 0a 2a 2a 20 36 34 20 62 69 74 73 20 2d 20 42 42  .** 64 bits - BB
5690: 42 42 42 42 42 42 43 0a 2a 2f 0a 0a 2f 2a 0a 2a  BBBBBBC.*/../*.*
56a0: 2a 20 57 72 69 74 65 20 61 20 36 34 2d 62 69 74  * Write a 64-bit
56b0: 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
56c0: 20 69 6e 74 65 67 65 72 20 74 6f 20 6d 65 6d 6f   integer to memo
56d0: 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70  ry starting at p
56e0: 5b 30 5d 2e 0a 2a 2a 20 54 68 65 20 6c 65 6e 67  [0]..** The leng
56f0: 74 68 20 6f 66 20 64 61 74 61 20 77 72 69 74 65  th of data write
5700: 20 77 69 6c 6c 20 62 65 20 62 65 74 77 65 65 6e   will be between
5710: 20 31 20 61 6e 64 20 39 20 62 79 74 65 73 2e 20   1 and 9 bytes. 
5720: 20 54 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f   The number.** o
5730: 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20  f bytes written 
5740: 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a  is returned..**.
5750: 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 2d 6c 65  ** A variable-le
5760: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 63 6f 6e  ngth integer con
5770: 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 6f 77  sists of the low
5780: 65 72 20 37 20 62 69 74 73 20 6f 66 20 65 61 63  er 7 bits of eac
5790: 68 20 62 79 74 65 0a 2a 2a 20 66 6f 72 20 61 6c  h byte.** for al
57a0: 6c 20 62 79 74 65 73 20 74 68 61 74 20 68 61 76  l bytes that hav
57b0: 65 20 74 68 65 20 38 74 68 20 62 69 74 20 73 65  e the 8th bit se
57c0: 74 20 61 6e 64 20 6f 6e 65 20 62 79 74 65 20 77  t and one byte w
57d0: 69 74 68 20 74 68 65 20 38 74 68 0a 2a 2a 20 62  ith the 8th.** b
57e0: 69 74 20 63 6c 65 61 72 2e 20 20 45 78 63 65 70  it clear.  Excep
57f0: 74 2c 20 69 66 20 77 65 20 67 65 74 20 74 6f 20  t, if we get to 
5800: 74 68 65 20 39 74 68 20 62 79 74 65 2c 20 69 74  the 9th byte, it
5810: 20 73 74 6f 72 65 73 20 74 68 65 20 66 75 6c 6c   stores the full
5820: 0a 2a 2a 20 38 20 62 69 74 73 20 61 6e 64 20 69  .** 8 bits and i
5830: 73 20 74 68 65 20 6c 61 73 74 20 62 79 74 65 2e  s the last byte.
5840: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
5850: 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
5860: 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20 76  d char *p, u64 v
5870: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e  ){.  int i, j, n
5880: 3b 0a 20 20 75 38 20 62 75 66 5b 31 30 5d 3b 0a  ;.  u8 buf[10];.
5890: 20 20 69 66 28 20 76 20 26 20 30 78 66 66 30 30    if( v & 0xff00
58a0: 30 30 30 30 30 30 30 30 30 30 30 30 20 29 7b 0a  000000000000 ){.
58b0: 20 20 20 20 70 5b 38 5d 20 3d 20 76 3b 0a 20 20      p[8] = v;.  
58c0: 20 20 76 20 3e 3e 3d 20 38 3b 0a 20 20 20 20 66    v >>= 8;.    f
58d0: 6f 72 28 69 3d 37 3b 20 69 3e 3d 30 3b 20 69 2d  or(i=7; i>=0; i-
58e0: 2d 29 7b 0a 20 20 20 20 20 20 70 5b 69 5d 20 3d  -){.      p[i] =
58f0: 20 28 76 20 26 20 30 78 37 66 29 20 7c 20 30 78   (v & 0x7f) | 0x
5900: 38 30 3b 0a 20 20 20 20 20 20 76 20 3e 3e 3d 20  80;.      v >>= 
5910: 37 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  7;.    }.    ret
5920: 75 72 6e 20 39 3b 0a 20 20 7d 20 20 20 20 0a 20  urn 9;.  }    . 
5930: 20 6e 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20   n = 0;.  do{.  
5940: 20 20 62 75 66 5b 6e 2b 2b 5d 20 3d 20 28 76 20    buf[n++] = (v 
5950: 26 20 30 78 37 66 29 20 7c 20 30 78 38 30 3b 0a  & 0x7f) | 0x80;.
5960: 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d      v >>= 7;.  }
5970: 77 68 69 6c 65 28 20 76 21 3d 30 20 29 3b 0a 20  while( v!=0 );. 
5980: 20 62 75 66 5b 30 5d 20 26 3d 20 30 78 37 66 3b   buf[0] &= 0x7f;
5990: 0a 20 20 61 73 73 65 72 74 28 20 6e 3c 3d 39 20  .  assert( n<=9 
59a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 6a 3d  );.  for(i=0, j=
59b0: 6e 2d 31 3b 20 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20  n-1; j>=0; j--, 
59c0: 69 2b 2b 29 7b 0a 20 20 20 20 70 5b 69 5d 20 3d  i++){.    p[i] =
59d0: 20 62 75 66 5b 6a 5d 3b 0a 20 20 7d 0a 20 20 72   buf[j];.  }.  r
59e0: 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn n;.}../*.*
59f0: 2a 20 52 65 61 64 20 61 20 36 34 2d 62 69 74 20  * Read a 64-bit 
5a00: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
5a10: 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d  integer from mem
5a20: 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20  ory starting at 
5a30: 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  p[0]..** Return 
5a40: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
5a50: 74 65 73 20 72 65 61 64 2e 20 20 54 68 65 20 76  tes read.  The v
5a60: 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20 69  alue is stored i
5a70: 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  n *v..*/.int sql
5a80: 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
5a90: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
5aa0: 72 20 2a 70 2c 20 75 36 34 20 2a 76 29 7b 0a 20  r *p, u64 *v){. 
5ab0: 20 75 33 32 20 78 3b 0a 20 20 75 36 34 20 78 36   u32 x;.  u64 x6
5ac0: 34 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75 6e  4;.  int n;.  un
5ad0: 73 69 67 6e 65 64 20 63 68 61 72 20 63 3b 0a 20  signed char c;. 
5ae0: 20 69 66 28 20 28 28 63 20 3d 20 70 5b 30 5d 29   if( ((c = p[0])
5af0: 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20   & 0x80)==0 ){. 
5b00: 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20 20 72     *v = c;.    r
5b10: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 78  eturn 1;.  }.  x
5b20: 20 3d 20 63 20 26 20 30 78 37 66 3b 0a 20 20 69   = c & 0x7f;.  i
5b30: 66 28 20 28 28 63 20 3d 20 70 5b 31 5d 29 20 26  f( ((c = p[1]) &
5b40: 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20   0x80)==0 ){.   
5b50: 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63   *v = (x<<7) | c
5b60: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  ;.    return 2;.
5b70: 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29    }.  x = (x<<7)
5b80: 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 69   | (c&0x7f);.  i
5b90: 66 28 20 28 28 63 20 3d 20 70 5b 32 5d 29 20 26  f( ((c = p[2]) &
5ba0: 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20   0x80)==0 ){.   
5bb0: 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63   *v = (x<<7) | c
5bc0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 33 3b 0a  ;.    return 3;.
5bd0: 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29    }.  x = (x<<7)
5be0: 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 69   | (c&0x7f);.  i
5bf0: 66 28 20 28 28 63 20 3d 20 70 5b 33 5d 29 20 26  f( ((c = p[3]) &
5c00: 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20   0x80)==0 ){.   
5c10: 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63   *v = (x<<7) | c
5c20: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 34 3b 0a  ;.    return 4;.
5c30: 20 20 7d 0a 20 20 78 36 34 20 3d 20 28 78 3c 3c    }.  x64 = (x<<
5c40: 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20  7) | (c&0x7f);. 
5c50: 20 6e 20 3d 20 34 3b 0a 20 20 64 6f 7b 0a 20 20   n = 4;.  do{.  
5c60: 20 20 63 20 3d 20 70 5b 6e 2b 2b 5d 3b 0a 20 20    c = p[n++];.  
5c70: 20 20 69 66 28 20 6e 3d 3d 39 20 29 7b 0a 20 20    if( n==9 ){.  
5c80: 20 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c 3c      x64 = (x64<<
5c90: 38 29 20 7c 20 63 3b 0a 20 20 20 20 20 20 62 72  8) | c;.      br
5ca0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 78  eak;.    }.    x
5cb0: 36 34 20 3d 20 28 78 36 34 3c 3c 37 29 20 7c 20  64 = (x64<<7) | 
5cc0: 28 63 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69  (c&0x7f);.  }whi
5cd0: 6c 65 28 20 28 63 20 26 20 30 78 38 30 29 21 3d  le( (c & 0x80)!=
5ce0: 30 20 29 3b 0a 20 20 2a 76 20 3d 20 78 36 34 3b  0 );.  *v = x64;
5cf0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a  .  return n;.}..
5d00: 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20 33 32 2d  /*.** Read a 32-
5d10: 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  bit variable-len
5d20: 67 74 68 20 69 6e 74 65 67 65 72 20 66 72 6f 6d  gth integer from
5d30: 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67   memory starting
5d40: 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74   at p[0]..** Ret
5d50: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
5d60: 66 20 62 79 74 65 73 20 72 65 61 64 2e 20 20 54  f bytes read.  T
5d70: 68 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72  he value is stor
5d80: 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74  ed in *v..*/.int
5d90: 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
5da0: 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
5db0: 65 64 20 63 68 61 72 20 2a 70 2c 20 75 33 32 20  ed char *p, u32 
5dc0: 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20  *v){.  u32 x;.  
5dd0: 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65  int n;.  unsigne
5de0: 64 20 63 68 61 72 20 63 3b 0a 23 69 66 20 30 0a  d char c;.#if 0.
5df0: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 30 5d    if( ((c = p[0]
5e00: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
5e10: 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20 20      *v = c;.    
5e20: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
5e30: 78 20 3d 20 63 20 26 20 30 78 37 66 3b 0a 20 20  x = c & 0x7f;.  
5e40: 69 66 28 20 28 28 63 20 3d 20 70 5b 31 5d 29 20  if( ((c = p[1]) 
5e50: 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20  & 0x80)==0 ){.  
5e60: 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20    *v = (x<<7) | 
5e70: 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b  c;.    return 2;
5e80: 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37  .  }.  x = (x<<7
5e90: 29 20 7c 20 28 63 20 26 20 30 78 37 66 29 3b 0a  ) | (c & 0x7f);.
5ea0: 23 65 6c 73 65 0a 20 20 69 66 28 20 28 28 73 69  #else.  if( ((si
5eb0: 67 6e 65 64 20 63 68 61 72 2a 29 70 29 5b 30 5d  gned char*)p)[0]
5ec0: 3e 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20  >=0 ){.    *v = 
5ed0: 70 5b 30 5d 3b 0a 20 20 20 20 72 65 74 75 72 6e  p[0];.    return
5ee0: 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 70 5b   1;.  }.  x = p[
5ef0: 30 5d 20 26 20 30 78 37 66 3b 0a 20 20 69 66 28  0] & 0x7f;.  if(
5f00: 20 28 28 73 69 67 6e 65 64 20 63 68 61 72 2a 29   ((signed char*)
5f10: 70 29 5b 31 5d 3e 3d 30 20 29 7b 0a 20 20 20 20  p)[1]>=0 ){.    
5f20: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 70 5b  *v = (x<<7) | p[
5f30: 31 5d 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32  1];.    return 2
5f40: 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c  ;.  }.  x = (x<<
5f50: 37 29 20 7c 20 28 70 5b 31 5d 20 26 20 30 78 37  7) | (p[1] & 0x7
5f60: 66 29 3b 0a 23 65 6e 64 69 66 0a 20 20 6e 20 3d  f);.#endif.  n =
5f70: 20 32 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 78 20   2;.  do{.    x 
5f80: 3d 20 28 78 3c 3c 37 29 20 7c 20 28 28 63 20 3d  = (x<<7) | ((c =
5f90: 20 70 5b 6e 2b 2b 5d 29 26 30 78 37 66 29 3b 0a   p[n++])&0x7f);.
5fa0: 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30    }while( (c & 0
5fb0: 78 38 30 29 21 3d 30 20 26 26 20 6e 3c 39 20 29  x80)!=0 && n<9 )
5fc0: 3b 0a 20 20 2a 76 20 3d 20 78 3b 0a 20 20 72 65  ;.  *v = x;.  re
5fd0: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
5fe0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
5ff0: 65 72 20 6f 66 20 62 79 74 65 73 20 74 68 61 74  er of bytes that
6000: 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20   will be needed 
6010: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 67 69 76  to store the giv
6020: 65 6e 0a 2a 2a 20 36 34 2d 62 69 74 20 69 6e 74  en.** 64-bit int
6030: 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  eger..*/.int sql
6040: 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
6050: 34 20 76 29 7b 0a 20 20 69 6e 74 20 69 20 3d 20  4 v){.  int i = 
6060: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69 2b 2b  0;.  do{.    i++
6070: 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20  ;.    v >>= 7;. 
6080: 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20 26 26   }while( v!=0 &&
6090: 20 69 3c 39 20 29 3b 0a 20 20 72 65 74 75 72 6e   i<9 );.  return
60a0: 20 69 3b 0a 7d 0a 0a 23 69 66 20 28 21 64 65 66   i;.}..#if (!def
60b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
60c0: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20 26  _BLOB_LITERAL) &
60d0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
60e0: 45 5f 48 41 53 5f 43 4f 44 45 43 29 29 20 5c 0a  E_HAS_CODEC)) \.
60f0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 53      || defined(S
6100: 51 4c 49 54 45 5f 54 45 53 54 29 0a 2f 2a 0a 2a  QLITE_TEST)./*.*
6110: 2a 20 54 72 61 6e 73 6c 61 74 65 20 61 20 73 69  * Translate a si
6120: 6e 67 6c 65 20 62 79 74 65 20 6f 66 20 48 65 78  ngle byte of Hex
6130: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
6140: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
6150: 68 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 7b  hexToInt(int h){
6160: 0a 20 20 69 66 28 20 68 3e 3d 27 30 27 20 26 26  .  if( h>='0' &&
6170: 20 68 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20 72   h<='9' ){.    r
6180: 65 74 75 72 6e 20 68 20 2d 20 27 30 27 3b 0a 20  eturn h - '0';. 
6190: 20 7d 65 6c 73 65 20 69 66 28 20 68 3e 3d 27 61   }else if( h>='a
61a0: 27 20 26 26 20 68 3c 3d 27 66 27 20 29 7b 0a 20  ' && h<='f' ){. 
61b0: 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27 61     return h - 'a
61c0: 27 20 2b 20 31 30 3b 0a 20 20 7d 65 6c 73 65 7b  ' + 10;.  }else{
61d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 68 3e 3d  .    assert( h>=
61e0: 27 41 27 20 26 26 20 68 3c 3d 27 46 27 20 29 3b  'A' && h<='F' );
61f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20  .    return h - 
6200: 27 41 27 20 2b 20 31 30 3b 0a 20 20 7d 0a 7d 0a  'A' + 10;.  }.}.
6210: 23 65 6e 64 69 66 20 2f 2a 20 28 21 53 51 4c 49  #endif /* (!SQLI
6220: 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54  TE_OMIT_BLOB_LIT
6230: 45 52 41 4c 20 26 26 20 21 53 51 4c 49 54 45 5f  ERAL && !SQLITE_
6240: 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 53 51  HAS_CODEC) || SQ
6250: 4c 49 54 45 5f 54 45 53 54 20 2a 2f 0a 0a 23 69  LITE_TEST */..#i
6260: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6270: 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45  E_OMIT_BLOB_LITE
6280: 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  RAL) || defined(
6290: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
62a0: 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  )./*.** Convert 
62b0: 61 20 42 4c 4f 42 20 6c 69 74 65 72 61 6c 20 6f  a BLOB literal o
62c0: 66 20 74 68 65 20 66 6f 72 6d 20 22 78 27 68 68  f the form "x'hh
62d0: 68 68 68 68 27 22 20 69 6e 74 6f 20 69 74 73 20  hhhh'" into its 
62e0: 62 69 6e 61 72 79 0a 2a 2a 20 76 61 6c 75 65 2e  binary.** value.
62f0: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
6300: 65 72 20 74 6f 20 69 74 73 20 62 69 6e 61 72 79  er to its binary
6310: 20 76 61 6c 75 65 2e 20 20 53 70 61 63 65 20 74   value.  Space t
6320: 6f 20 68 6f 6c 64 20 74 68 65 0a 2a 2a 20 62 69  o hold the.** bi
6330: 6e 61 72 79 20 76 61 6c 75 65 20 68 61 73 20 62  nary value has b
6340: 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  een obtained fro
6350: 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20 6d 75 73  m malloc and mus
6360: 74 20 62 65 20 66 72 65 65 64 20 62 79 0a 2a 2a  t be freed by.**
6370: 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 72 6f 75   the calling rou
6380: 74 69 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  tine..*/.void *s
6390: 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
63a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
63b0: 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 3b 0a 20    char *zBlob;. 
63c0: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 20   int i;.  int n 
63d0: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69  = strlen(z);.  i
63e0: 66 28 20 6e 25 32 20 29 20 72 65 74 75 72 6e 20  f( n%2 ) return 
63f0: 30 3b 0a 0a 20 20 7a 42 6c 6f 62 20 3d 20 28 63  0;..  zBlob = (c
6400: 68 61 72 20 2a 29 73 71 6c 69 74 65 4d 61 6c 6c  har *)sqliteMall
6410: 6f 63 28 6e 2f 32 29 3b 0a 20 20 66 6f 72 28 69  oc(n/2);.  for(i
6420: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 3d 32 29 7b 0a  =0; i<n; i+=2){.
6430: 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d      zBlob[i/2] =
6440: 20 28 68 65 78 54 6f 49 6e 74 28 7a 5b 69 5d 29   (hexToInt(z[i])
6450: 3c 3c 34 29 20 7c 20 68 65 78 54 6f 49 6e 74 28  <<4) | hexToInt(
6460: 7a 5b 69 2b 31 5d 29 3b 0a 20 20 7d 0a 20 20 72  z[i+1]);.  }.  r
6470: 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a 23  eturn zBlob;.}.#
6480: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
6490: 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52  _OMIT_BLOB_LITER
64a0: 41 4c 20 7c 7c 20 53 51 4c 49 54 45 5f 48 41 53  AL || SQLITE_HAS
64b0: 5f 43 4f 44 45 43 20 2a 2f 0a 0a 23 69 66 20 64  _CODEC */..#if d
64c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
64d0: 53 54 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  ST)./*.** Conver
64e0: 74 20 74 65 78 74 20 67 65 6e 65 72 61 74 65 64  t text generated
64f0: 20 62 79 20 74 68 65 20 22 25 70 22 20 63 6f 6e   by the "%p" con
6500: 76 65 72 73 69 6f 6e 20 66 6f 72 6d 61 74 20 62  version format b
6510: 61 63 6b 20 69 6e 74 6f 0a 2a 2a 20 61 20 70 6f  ack into.** a po
6520: 69 6e 74 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  inter..*/.void *
6530: 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72  sqlite3TextToPtr
6540: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
6550: 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20 75 36  .  void *p;.  u6
6560: 34 20 76 3b 0a 20 20 75 33 32 20 76 32 3b 0a 20  4 v;.  u32 v2;. 
6570: 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 26   if( z[0]=='0' &
6580: 26 20 7a 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20  & z[1]=='x' ){. 
6590: 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20     z += 2;.  }. 
65a0: 20 76 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28   v = 0;.  while(
65b0: 20 2a 7a 20 29 7b 0a 20 20 20 20 76 20 3d 20 28   *z ){.    v = (
65c0: 76 3c 3c 34 29 20 2b 20 68 65 78 54 6f 49 6e 74  v<<4) + hexToInt
65d0: 28 2a 7a 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  (*z);.    z++;. 
65e0: 20 7d 0a 20 20 69 66 28 20 73 69 7a 65 6f 66 28   }.  if( sizeof(
65f0: 70 29 3d 3d 73 69 7a 65 6f 66 28 76 29 20 29 7b  p)==sizeof(v) ){
6600: 0a 20 20 20 20 70 20 3d 20 2a 28 76 6f 69 64 2a  .    p = *(void*
6610: 2a 29 26 76 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  *)&v;.  }else{. 
6620: 20 20 20 61 73 73 65 72 74 28 20 73 69 7a 65 6f     assert( sizeo
6630: 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76 32 29  f(p)==sizeof(v2)
6640: 20 29 3b 0a 20 20 20 20 76 32 20 3d 20 28 75 33   );.    v2 = (u3
6650: 32 29 76 3b 0a 20 20 20 20 70 20 3d 20 2a 28 76  2)v;.    p = *(v
6660: 6f 69 64 2a 2a 29 26 76 32 3b 0a 20 20 7d 0a 20  oid**)&v2;.  }. 
6670: 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 23 65 6e   return p;.}.#en
6680: 64 69 66 0a                                      dif.