/ Hex Artifact Content
Login

Artifact 2aacc79b7bf5df5859813dafd3bf3258f67a5234:


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: 31 31 20 32 30 30 34 2f 30 37 2f 31 35 20 31 33  11 2004/07/15 13
0230: 3a 32 33 3a 32 32 20 64 72 68 20 45 78 70 20 24  :23:22 drh Exp $
0240: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0250: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0260: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0270: 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
0280: 3e 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  >..#if SQLITE_DE
0290: 42 55 47 3e 32 20 26 26 20 64 65 66 69 6e 65 64  BUG>2 && defined
02a0: 28 5f 5f 47 4c 49 42 43 5f 5f 29 0a 23 69 6e 63  (__GLIBC__).#inc
02b0: 6c 75 64 65 20 3c 65 78 65 63 69 6e 66 6f 2e 68  lude <execinfo.h
02c0: 3e 0a 76 6f 69 64 20 70 72 69 6e 74 5f 73 74 61  >.void print_sta
02d0: 63 6b 5f 74 72 61 63 65 28 29 7b 0a 20 20 76 6f  ck_trace(){.  vo
02e0: 69 64 20 2a 62 74 5b 33 30 5d 3b 0a 20 20 69 6e  id *bt[30];.  in
02f0: 74 20 69 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 62  t i;.  int n = b
0300: 61 63 6b 74 72 61 63 65 28 62 74 2c 20 33 30 29  acktrace(bt, 30)
0310: 3b 0a 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64  ;..  fprintf(std
0320: 65 72 72 2c 20 22 53 54 41 43 4b 3a 20 22 29 3b  err, "STACK: ");
0330: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
0340: 69 2b 2b 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  i++){.    fprint
0350: 66 28 73 74 64 65 72 72 2c 20 22 25 70 20 22 2c  f(stderr, "%p ",
0360: 20 62 74 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 66   bt[i]);.  }.  f
0370: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
0380: 5c 6e 22 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23 64  \n");.}.#else.#d
0390: 65 66 69 6e 65 20 70 72 69 6e 74 5f 73 74 61 63  efine print_stac
03a0: 6b 5f 74 72 61 63 65 28 29 0a 23 65 6e 64 69 66  k_trace().#endif
03b0: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6d 61 6c 6c 6f  ../*.** If mallo
03c0: 63 28 29 20 65 76 65 72 20 66 61 69 6c 73 2c 20  c() ever fails, 
03d0: 74 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69  this global vari
03e0: 61 62 6c 65 20 67 65 74 73 20 73 65 74 20 74 6f  able gets set to
03f0: 20 31 2e 0a 2a 2a 20 54 68 69 73 20 63 61 75 73   1..** This caus
0400: 65 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 74  es the library t
0410: 6f 20 61 62 6f 72 74 20 61 6e 64 20 6e 65 76 65  o abort and neve
0420: 72 20 61 67 61 69 6e 20 66 75 6e 63 74 69 6f 6e  r again function
0430: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
0440: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 3d  _malloc_failed =
0450: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51   0;../*.** If SQ
0460: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
0470: 66 69 6e 65 64 2c 20 74 68 65 6e 20 75 73 65 20  fined, then use 
0480: 76 65 72 73 69 6f 6e 73 20 6f 66 20 6d 61 6c 6c  versions of mall
0490: 6f 63 28 29 20 61 6e 64 0a 2a 2a 20 66 72 65 65  oc() and.** free
04a0: 28 29 20 74 68 61 74 20 74 72 61 63 6b 20 6d 65  () that track me
04b0: 6d 6f 72 79 20 75 73 61 67 65 20 61 6e 64 20 63  mory usage and c
04c0: 68 65 63 6b 20 66 6f 72 20 62 75 66 66 65 72 20  heck for buffer 
04d0: 6f 76 65 72 72 75 6e 73 2e 0a 2a 2f 0a 23 69 66  overruns..*/.#if
04e0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
04f0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 6b 65 65 70  ../*.** For keep
0500: 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 74 68 65  ing track of the
0510: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
0520: 63 73 20 61 6e 64 20 66 72 65 65 73 2e 20 20 20  cs and frees.   
0530: 54 68 69 73 0a 2a 2a 20 69 73 20 75 73 65 64 20  This.** is used 
0540: 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 6d 65 6d  to check for mem
0550: 6f 72 79 20 6c 65 61 6b 73 2e 0a 2a 2f 0a 69 6e  ory leaks..*/.in
0560: 74 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f  t sqlite3_nMallo
0570: 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  c;         /* Nu
0580: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 4d 61  mber of sqliteMa
0590: 6c 6c 6f 63 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  lloc() calls */.
05a0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e 46 72 65  int sqlite3_nFre
05b0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
05c0: 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65  Number of sqlite
05d0: 46 72 65 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  Free() calls */.
05e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  int sqlite3_iMal
05f0: 6c 6f 63 46 61 69 6c 3b 20 20 20 20 20 2f 2a 20  locFail;     /* 
0600: 46 61 69 6c 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  Fail sqliteMallo
0610: 63 28 29 20 61 66 74 65 72 20 74 68 69 73 20 6d  c() after this m
0620: 61 6e 79 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66  any calls */.#if
0630: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e 31 0a   SQLITE_DEBUG>1.
0640: 73 74 61 74 69 63 20 69 6e 74 20 6d 65 6d 63 6e  static int memcn
0650: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0660: 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20 33  *.** Number of 3
0670: 32 2d 62 69 74 20 67 75 61 72 64 20 77 6f 72 64  2-bit guard word
0680: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 5f 47  s.*/.#define N_G
0690: 55 41 52 44 20 31 0a 0a 2f 2a 0a 2a 2a 20 41 6c  UARD 1../*.** Al
06a0: 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f 72  locate new memor
06b0: 79 20 61 6e 64 20 73 65 74 20 69 74 20 74 6f 20  y and set it to 
06c0: 7a 65 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55  zero.  Return NU
06d0: 4c 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f  LL if.** no memo
06e0: 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ry is available.
06f0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
0700: 33 4d 61 6c 6c 6f 63 5f 28 69 6e 74 20 6e 2c 20  3Malloc_(int n, 
0710: 69 6e 74 20 62 5a 65 72 6f 2c 20 63 68 61 72 20  int bZero, char 
0720: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
0730: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
0740: 69 6e 74 20 2a 70 69 3b 0a 20 20 69 6e 74 20 69  int *pi;.  int i
0750: 2c 20 6b 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  , k;.  if( sqlit
0760: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3e 3d  e3_iMallocFail>=
0770: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
0780: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 2d 2d 3b 0a  _iMallocFail--;.
0790: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
07a0: 69 4d 61 6c 6c 6f 63 46 61 69 6c 3d 3d 30 20 29  iMallocFail==0 )
07b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
07c0: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b  malloc_failed++;
07d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
07e0: 47 3e 31 0a 20 20 20 20 20 20 66 70 72 69 6e 74  G>1.      fprint
07f0: 66 28 73 74 64 65 72 72 2c 22 2a 2a 2a 2a 20 66  f(stderr,"**** f
0800: 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74  ailed to allocat
0810: 65 20 25 64 20 62 79 74 65 73 20 61 74 20 25 73  e %d bytes at %s
0820: 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  :%d\n",.        
0830: 20 20 20 20 20 20 6e 2c 20 7a 46 69 6c 65 2c 6c        n, zFile,l
0840: 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  ine);.#endif.   
0850: 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c     sqlite3_iMall
0860: 6f 63 46 61 69 6c 2d 2d 3b 0a 20 20 20 20 20 20  ocFail--;.      
0870: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a  return 0;.    }.
0880: 20 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29    }.  if( n==0 )
0890: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6b 20 3d   return 0;.  k =
08a0: 20 28 6e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d   (n+sizeof(int)-
08b0: 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a  1)/sizeof(int);.
08c0: 20 20 70 69 20 3d 20 6d 61 6c 6c 6f 63 28 20 28    pi = malloc( (
08d0: 4e 5f 47 55 41 52 44 2a 32 2b 31 2b 6b 29 2a 73  N_GUARD*2+1+k)*s
08e0: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 69  izeof(int));.  i
08f0: 66 28 20 70 69 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pi==0 ){.    
0900: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
0910: 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 72 65 74  ailed++;.    ret
0920: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
0930: 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b 3b 0a  ite3_nMalloc++;.
0940: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47    for(i=0; i<N_G
0950: 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b 69 5d  UARD; i++) pi[i]
0960: 20 3d 20 30 78 64 65 61 64 31 31 32 32 3b 0a 20   = 0xdead1122;. 
0970: 20 70 69 5b 4e 5f 47 55 41 52 44 5d 20 3d 20 6e   pi[N_GUARD] = n
0980: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
0990: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b  _GUARD; i++) pi[
09a0: 6b 2b 31 2b 4e 5f 47 55 41 52 44 2b 69 5d 20 3d  k+1+N_GUARD+i] =
09b0: 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20 20 70   0xdead3344;.  p
09c0: 20 3d 20 26 70 69 5b 4e 5f 47 55 41 52 44 2b 31   = &pi[N_GUARD+1
09d0: 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2c 20 62  ];.  memset(p, b
09e0: 5a 65 72 6f 3d 3d 30 2c 20 6e 29 3b 0a 23 69 66  Zero==0, n);.#if
09f0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e 31 0a   SQLITE_DEBUG>1.
0a00: 20 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72    print_stack_tr
0a10: 61 63 65 28 29 3b 0a 20 20 66 70 72 69 6e 74 66  ace();.  fprintf
0a20: 28 73 74 64 65 72 72 2c 22 25 30 36 64 20 6d 61  (stderr,"%06d ma
0a30: 6c 6c 6f 63 20 25 64 20 62 79 74 65 73 20 61 74  lloc %d bytes at
0a40: 20 30 78 25 78 20 66 72 6f 6d 20 25 73 3a 25 64   0x%x from %s:%d
0a50: 5c 6e 22 2c 0a 20 20 20 20 20 20 2b 2b 6d 65 6d  \n",.      ++mem
0a60: 63 6e 74 2c 20 6e 2c 20 28 69 6e 74 29 70 2c 20  cnt, n, (int)p, 
0a70: 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e  zFile,line);.#en
0a80: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a  dif.  return p;.
0a90: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
0aa0: 6f 20 73 65 65 20 69 66 20 74 68 65 20 67 69 76  o see if the giv
0ab0: 65 6e 20 70 6f 69 6e 74 65 72 20 77 61 73 20 6f  en pointer was o
0ac0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
0ad0: 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 61  iteMalloc().** a
0ae0: 6e 64 20 69 73 20 61 62 6c 65 20 74 6f 20 68 6f  nd is able to ho
0af0: 6c 64 20 61 74 20 6c 65 61 73 74 20 4e 20 62 79  ld at least N by
0b00: 74 65 73 2e 20 20 52 61 69 73 65 20 61 6e 20 65  tes.  Raise an e
0b10: 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69 73  xception if this
0b20: 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 63  .** is not the c
0b30: 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ase..**.** This 
0b40: 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64 20  routine is used 
0b50: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
0b60: 6f 73 65 73 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76 6f  oses only..*/.vo
0b70: 69 64 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4d  id sqlite3CheckM
0b80: 65 6d 6f 72 79 28 76 6f 69 64 20 2a 70 2c 20 69  emory(void *p, i
0b90: 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 2a 70 69  nt N){.  int *pi
0ba0: 20 3d 20 70 3b 0a 20 20 69 6e 74 20 6e 2c 20 69   = p;.  int n, i
0bb0: 2c 20 6b 3b 0a 20 20 70 69 20 2d 3d 20 4e 5f 47  , k;.  pi -= N_G
0bc0: 55 41 52 44 2b 31 3b 0a 20 20 66 6f 72 28 69 3d  UARD+1;.  for(i=
0bd0: 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b  0; i<N_GUARD; i+
0be0: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
0bf0: 70 69 5b 69 5d 3d 3d 30 78 64 65 61 64 31 31 32  pi[i]==0xdead112
0c00: 32 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  2 );.  }.  n = p
0c10: 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a 20 20 61 73  i[N_GUARD];.  as
0c20: 73 65 72 74 28 20 4e 3e 3d 30 20 26 26 20 4e 3c  sert( N>=0 && N<
0c30: 6e 20 29 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73 69  n );.  k = (n+si
0c40: 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a  zeof(int)-1)/siz
0c50: 65 6f 66 28 69 6e 74 29 3b 0a 20 20 66 6f 72 28  eof(int);.  for(
0c60: 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20  i=0; i<N_GUARD; 
0c70: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
0c80: 28 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31  ( pi[k+N_GUARD+1
0c90: 2b 69 5d 3d 3d 30 78 64 65 61 64 33 33 34 34 20  +i]==0xdead3344 
0ca0: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
0cb0: 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72 65 76  Free memory prev
0cc0: 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20  iously obtained 
0cd0: 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  from sqliteMallo
0ce0: 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  c().*/.void sqli
0cf0: 74 65 33 46 72 65 65 5f 28 76 6f 69 64 20 2a 70  te3Free_(void *p
0d00: 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69  , char *zFile, i
0d10: 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69 66 28 20  nt line){.  if( 
0d20: 70 20 29 7b 0a 20 20 20 20 69 6e 74 20 2a 70 69  p ){.    int *pi
0d30: 2c 20 69 2c 20 6b 2c 20 6e 3b 0a 20 20 20 20 70  , i, k, n;.    p
0d40: 69 20 3d 20 70 3b 0a 20 20 20 20 70 69 20 2d 3d  i = p;.    pi -=
0d50: 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20 20 20   N_GUARD+1;.    
0d60: 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2b 2b 3b  sqlite3_nFree++;
0d70: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
0d80: 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20  N_GUARD; i++){. 
0d90: 20 20 20 20 20 69 66 28 20 70 69 5b 69 5d 21 3d       if( pi[i]!=
0da0: 30 78 64 65 61 64 31 31 32 32 20 29 7b 0a 20 20  0xdead1122 ){.  
0db0: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
0dc0: 64 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20 6d 65  derr,"Low-end me
0dd0: 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 20  mory corruption 
0de0: 61 74 20 30 78 25 78 5c 6e 22 2c 20 28 69 6e 74  at 0x%x\n", (int
0df0: 29 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  )p);.        ret
0e00: 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
0e10: 20 7d 0a 20 20 20 20 6e 20 3d 20 70 69 5b 4e 5f   }.    n = pi[N_
0e20: 47 55 41 52 44 5d 3b 0a 20 20 20 20 6b 20 3d 20  GUARD];.    k = 
0e30: 28 6e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31  (n+sizeof(int)-1
0e40: 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20  )/sizeof(int);. 
0e50: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f     for(i=0; i<N_
0e60: 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20  GUARD; i++){.   
0e70: 20 20 20 69 66 28 20 70 69 5b 6b 2b 4e 5f 47 55     if( pi[k+N_GU
0e80: 41 52 44 2b 31 2b 69 5d 21 3d 30 78 64 65 61 64  ARD+1+i]!=0xdead
0e90: 33 33 34 34 20 29 7b 0a 20 20 20 20 20 20 20 20  3344 ){.        
0ea0: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  fprintf(stderr,"
0eb0: 48 69 67 68 2d 65 6e 64 20 6d 65 6d 6f 72 79 20  High-end memory 
0ec0: 63 6f 72 72 75 70 74 69 6f 6e 20 61 74 20 30 78  corruption at 0x
0ed0: 25 78 5c 6e 22 2c 20 28 69 6e 74 29 70 29 3b 0a  %x\n", (int)p);.
0ee0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a          return;.
0ef0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
0f00: 20 20 6d 65 6d 73 65 74 28 70 69 2c 20 30 78 66    memset(pi, 0xf
0f10: 66 2c 20 28 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b  f, (k+N_GUARD*2+
0f20: 31 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b  1)*sizeof(int));
0f30: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
0f40: 47 3e 31 0a 20 20 20 20 66 70 72 69 6e 74 66 28  G>1.    fprintf(
0f50: 73 74 64 65 72 72 2c 22 25 30 36 64 20 66 72 65  stderr,"%06d fre
0f60: 65 20 25 64 20 62 79 74 65 73 20 61 74 20 30 78  e %d bytes at 0x
0f70: 25 78 20 66 72 6f 6d 20 25 73 3a 25 64 5c 6e 22  %x from %s:%d\n"
0f80: 2c 0a 20 20 20 20 20 20 20 20 20 2b 2b 6d 65 6d  ,.         ++mem
0f90: 63 6e 74 2c 20 6e 2c 20 28 69 6e 74 29 70 2c 20  cnt, n, (int)p, 
0fa0: 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e  zFile,line);.#en
0fb0: 64 69 66 0a 20 20 20 20 66 72 65 65 28 70 69 29  dif.    free(pi)
0fc0: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ;.  }.}../*.** R
0fd0: 65 73 69 7a 65 20 61 20 70 72 69 6f 72 20 61 6c  esize a prior al
0fe0: 6c 6f 63 61 74 69 6f 6e 2e 20 20 49 66 20 70 3d  location.  If p=
0ff0: 3d 30 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  =0, then this ro
1000: 75 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a  utine.** works j
1010: 75 73 74 20 6c 69 6b 65 20 73 71 6c 69 74 65 4d  ust like sqliteM
1020: 61 6c 6c 6f 63 28 29 2e 20 20 49 66 20 6e 3d 3d  alloc().  If n==
1030: 30 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  0, then this rou
1040: 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75  tine.** works ju
1050: 73 74 20 6c 69 6b 65 20 73 71 6c 69 74 65 46 72  st like sqliteFr
1060: 65 65 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  ee()..*/.void *s
1070: 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 5f 28 76  qlite3Realloc_(v
1080: 6f 69 64 20 2a 6f 6c 64 50 2c 20 69 6e 74 20 6e  oid *oldP, int n
1090: 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69  , char *zFile, i
10a0: 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69 6e 74 20  nt line){.  int 
10b0: 2a 6f 6c 64 50 69 2c 20 2a 70 69 2c 20 69 2c 20  *oldPi, *pi, i, 
10c0: 6b 2c 20 6f 6c 64 4e 2c 20 6f 6c 64 4b 3b 0a 20  k, oldN, oldK;. 
10d0: 20 76 6f 69 64 20 2a 70 3b 0a 20 20 69 66 28 20   void *p;.  if( 
10e0: 6f 6c 64 50 3d 3d 30 20 29 7b 0a 20 20 20 20 72  oldP==0 ){.    r
10f0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61 6c  eturn sqlite3Mal
1100: 6c 6f 63 5f 28 6e 2c 31 2c 7a 46 69 6c 65 2c 6c  loc_(n,1,zFile,l
1110: 69 6e 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ine);.  }.  if( 
1120: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  n==0 ){.    sqli
1130: 74 65 33 46 72 65 65 5f 28 6f 6c 64 50 2c 7a 46  te3Free_(oldP,zF
1140: 69 6c 65 2c 6c 69 6e 65 29 3b 0a 20 20 20 20 72  ile,line);.    r
1150: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 6f  eturn 0;.  }.  o
1160: 6c 64 50 69 20 3d 20 6f 6c 64 50 3b 0a 20 20 6f  ldPi = oldP;.  o
1170: 6c 64 50 69 20 2d 3d 20 4e 5f 47 55 41 52 44 2b  ldPi -= N_GUARD+
1180: 31 3b 0a 20 20 69 66 28 20 6f 6c 64 50 69 5b 30  1;.  if( oldPi[0
1190: 5d 21 3d 30 78 64 65 61 64 31 31 32 32 20 29 7b  ]!=0xdead1122 ){
11a0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
11b0: 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20 6d 65 6d  err,"Low-end mem
11c0: 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ory corruption i
11d0: 6e 20 72 65 61 6c 6c 6f 63 20 61 74 20 30 78 25  n realloc at 0x%
11e0: 78 5c 6e 22 2c 20 28 69 6e 74 29 6f 6c 64 50 29  x\n", (int)oldP)
11f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
1200: 20 20 7d 0a 20 20 6f 6c 64 4e 20 3d 20 6f 6c 64    }.  oldN = old
1210: 50 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a 20 20 6f  Pi[N_GUARD];.  o
1220: 6c 64 4b 20 3d 20 28 6f 6c 64 4e 2b 73 69 7a 65  ldK = (oldN+size
1230: 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f  of(int)-1)/sizeo
1240: 66 28 69 6e 74 29 3b 0a 20 20 66 6f 72 28 69 3d  f(int);.  for(i=
1250: 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b  0; i<N_GUARD; i+
1260: 2b 29 7b 0a 20 20 20 20 69 66 28 20 6f 6c 64 50  +){.    if( oldP
1270: 69 5b 6f 6c 64 4b 2b 4e 5f 47 55 41 52 44 2b 31  i[oldK+N_GUARD+1
1280: 2b 69 5d 21 3d 30 78 64 65 61 64 33 33 34 34 20  +i]!=0xdead3344 
1290: 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  ){.      fprintf
12a0: 28 73 74 64 65 72 72 2c 22 48 69 67 68 2d 65 6e  (stderr,"High-en
12b0: 64 20 6d 65 6d 6f 72 79 20 63 6f 72 72 75 70 74  d memory corrupt
12c0: 69 6f 6e 20 69 6e 20 72 65 61 6c 6c 6f 63 20 61  ion in realloc a
12d0: 74 20 30 78 25 78 5c 6e 22 2c 0a 20 20 20 20 20  t 0x%x\n",.     
12e0: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 6f 6c           (int)ol
12f0: 64 50 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  dP);.      retur
1300: 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  n 0;.    }.  }. 
1310: 20 6b 20 3d 20 28 6e 20 2b 20 73 69 7a 65 6f 66   k = (n + sizeof
1320: 28 69 6e 74 29 20 2d 20 31 29 2f 73 69 7a 65 6f  (int) - 1)/sizeo
1330: 66 28 69 6e 74 29 3b 0a 20 20 70 69 20 3d 20 6d  f(int);.  pi = m
1340: 61 6c 6c 6f 63 28 20 28 6b 2b 4e 5f 47 55 41 52  alloc( (k+N_GUAR
1350: 44 2a 32 2b 31 29 2a 73 69 7a 65 6f 66 28 69 6e  D*2+1)*sizeof(in
1360: 74 29 20 29 3b 0a 20 20 69 66 28 20 70 69 3d 3d  t) );.  if( pi==
1370: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
1380: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b  _malloc_failed++
1390: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
13a0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69    }.  for(i=0; i
13b0: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70  <N_GUARD; i++) p
13c0: 69 5b 69 5d 20 3d 20 30 78 64 65 61 64 31 31 32  i[i] = 0xdead112
13d0: 32 3b 0a 20 20 70 69 5b 4e 5f 47 55 41 52 44 5d  2;.  pi[N_GUARD]
13e0: 20 3d 20 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b   = n;.  for(i=0;
13f0: 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29   i<N_GUARD; i++)
1400: 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b   pi[k+N_GUARD+1+
1410: 69 5d 20 3d 20 30 78 64 65 61 64 33 33 34 34 3b  i] = 0xdead3344;
1420: 0a 20 20 70 20 3d 20 26 70 69 5b 4e 5f 47 55 41  .  p = &pi[N_GUA
1430: 52 44 2b 31 5d 3b 0a 20 20 6d 65 6d 63 70 79 28  RD+1];.  memcpy(
1440: 70 2c 20 6f 6c 64 50 2c 20 6e 3e 6f 6c 64 4e 20  p, oldP, n>oldN 
1450: 3f 20 6f 6c 64 4e 20 3a 20 6e 29 3b 0a 20 20 69  ? oldN : n);.  i
1460: 66 28 20 6e 3e 6f 6c 64 4e 20 29 7b 0a 20 20 20  f( n>oldN ){.   
1470: 20 6d 65 6d 73 65 74 28 26 28 28 63 68 61 72 2a   memset(&((char*
1480: 29 70 29 5b 6f 6c 64 4e 5d 2c 20 30 78 35 35 2c  )p)[oldN], 0x55,
1490: 20 6e 2d 6f 6c 64 4e 29 3b 0a 20 20 7d 0a 20 20   n-oldN);.  }.  
14a0: 6d 65 6d 73 65 74 28 6f 6c 64 50 69 2c 20 30 78  memset(oldPi, 0x
14b0: 61 62 2c 20 28 6f 6c 64 4b 2b 4e 5f 47 55 41 52  ab, (oldK+N_GUAR
14c0: 44 2b 32 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29  D+2)*sizeof(int)
14d0: 29 3b 0a 20 20 66 72 65 65 28 6f 6c 64 50 69 29  );.  free(oldPi)
14e0: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ;.#if SQLITE_DEB
14f0: 55 47 3e 31 0a 20 20 70 72 69 6e 74 5f 73 74 61  UG>1.  print_sta
1500: 63 6b 5f 74 72 61 63 65 28 29 3b 0a 20 20 66 70  ck_trace();.  fp
1510: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 30  rintf(stderr,"%0
1520: 36 64 20 72 65 61 6c 6c 6f 63 20 25 64 20 74 6f  6d realloc %d to
1530: 20 25 64 20 62 79 74 65 73 20 61 74 20 30 78 25   %d bytes at 0x%
1540: 78 20 74 6f 20 30 78 25 78 20 61 74 20 25 73 3a  x to 0x%x at %s:
1550: 25 64 5c 6e 22 2c 0a 20 20 20 20 2b 2b 6d 65 6d  %d\n",.    ++mem
1560: 63 6e 74 2c 20 6f 6c 64 4e 2c 20 6e 2c 20 28 69  cnt, oldN, n, (i
1570: 6e 74 29 6f 6c 64 50 2c 20 28 69 6e 74 29 70 2c  nt)oldP, (int)p,
1580: 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 23   zFile, line);.#
1590: 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 70  endif.  return p
15a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  ;.}../*.** Make 
15b0: 61 20 64 75 70 6c 69 63 61 74 65 20 6f 66 20 61  a duplicate of a
15c0: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 6d 65 6d   string into mem
15d0: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
15e0: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 46 72  m malloc().** Fr
15f0: 65 65 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ee the original 
1600: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 73 71 6c  string using sql
1610: 69 74 65 46 72 65 65 28 29 2e 0a 2a 2a 0a 2a 2a  iteFree()..**.**
1620: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
1630: 20 63 61 6c 6c 65 64 20 6f 6e 20 61 6c 6c 20 73   called on all s
1640: 74 72 69 6e 67 73 20 74 68 61 74 20 61 72 65 20  trings that are 
1650: 70 61 73 73 65 64 20 6f 75 74 73 69 64 65 20 6f  passed outside o
1660: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 69 74 65 20  f.** the SQLite 
1670: 6c 69 62 72 61 72 79 2e 20 20 54 68 61 74 20 77  library.  That w
1680: 61 79 20 63 6c 69 65 6e 74 73 20 63 61 6e 20 66  ay clients can f
1690: 72 65 65 20 74 68 65 20 73 74 72 69 6e 67 20 75  ree the string u
16a0: 73 69 6e 67 20 66 72 65 65 28 29 0a 2a 2a 20 72  sing free().** r
16b0: 61 74 68 65 72 20 74 68 61 6e 20 68 61 76 69 6e  ather than havin
16c0: 67 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65  g to call sqlite
16d0: 46 72 65 65 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  Free()..*/.void 
16e0: 73 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c 6f  sqlite3StrReallo
16f0: 63 28 63 68 61 72 20 2a 2a 70 7a 29 7b 0a 20 20  c(char **pz){.  
1700: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66  char *zNew;.  if
1710: 28 20 70 7a 3d 3d 30 20 7c 7c 20 2a 70 7a 3d 3d  ( pz==0 || *pz==
1720: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 7a 4e  0 ) return;.  zN
1730: 65 77 20 3d 20 6d 61 6c 6c 6f 63 28 20 73 74 72  ew = malloc( str
1740: 6c 65 6e 28 2a 70 7a 29 20 2b 20 31 20 29 3b 0a  len(*pz) + 1 );.
1750: 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b    if( zNew==0 ){
1760: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c  .    sqlite3_mal
1770: 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20  loc_failed++;.  
1780: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a    sqliteFree(*pz
1790: 29 3b 0a 20 20 20 20 2a 70 7a 20 3d 20 30 3b 0a  );.    *pz = 0;.
17a0: 20 20 7d 0a 20 20 73 74 72 63 70 79 28 7a 4e 65    }.  strcpy(zNe
17b0: 77 2c 20 2a 70 7a 29 3b 0a 20 20 73 71 6c 69 74  w, *pz);.  sqlit
17c0: 65 46 72 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70  eFree(*pz);.  *p
17d0: 7a 20 3d 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a  z = zNew;.}../*.
17e0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
17f0: 66 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  f a string in me
1800: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
1810: 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  om sqliteMalloc(
1820: 29 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ).*/.char *sqlit
1830: 65 33 53 74 72 44 75 70 5f 28 63 6f 6e 73 74 20  e3StrDup_(const 
1840: 63 68 61 72 20 2a 7a 2c 20 63 68 61 72 20 2a 7a  char *z, char *z
1850: 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b  File, int line){
1860: 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20  .  char *zNew;. 
1870: 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75   if( z==0 ) retu
1880: 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73  rn 0;.  zNew = s
1890: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 73 74  qlite3Malloc_(st
18a0: 72 6c 65 6e 28 7a 29 2b 31 2c 20 30 2c 20 7a 46  rlen(z)+1, 0, zF
18b0: 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69 66  ile, line);.  if
18c0: 28 20 7a 4e 65 77 20 29 20 73 74 72 63 70 79 28  ( zNew ) strcpy(
18d0: 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75  zNew, z);.  retu
18e0: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20  rn zNew;.}.char 
18f0: 2a 73 71 6c 69 74 65 33 53 74 72 4e 44 75 70 5f  *sqlite3StrNDup_
1900: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
1910: 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69  int n, char *zFi
1920: 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20  le, int line){. 
1930: 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69   char *zNew;.  i
1940: 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( z==0 ) return
1950: 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c   0;.  zNew = sql
1960: 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2b 31 2c  ite3Malloc_(n+1,
1970: 20 30 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29   0, zFile, line)
1980: 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a  ;.  if( zNew ){.
1990: 20 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c      memcpy(zNew,
19a0: 20 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77   z, n);.    zNew
19b0: 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  [n] = 0;.  }.  r
19c0: 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f  eturn zNew;.}../
19d0: 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f  *.** A version o
19e0: 66 20 73 71 6c 69 74 65 46 72 65 65 20 74 68 61  f sqliteFree tha
19f0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 75  t is always a fu
1a00: 6e 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d 61  nction, not a ma
1a10: 63 72 6f 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  cro..*/.void sql
1a20: 69 74 65 33 46 72 65 65 58 28 76 6f 69 64 20 2a  ite3FreeX(void *
1a30: 70 29 7b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  p){.  sqliteFree
1a40: 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  (p);.}.#endif /*
1a50: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
1a60: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1a70: 6f 77 69 6e 67 20 76 65 72 73 69 6f 6e 73 20 6f  owing versions o
1a80: 66 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 66  f malloc() and f
1a90: 72 65 65 28 29 20 61 72 65 20 66 6f 72 20 75 73  ree() are for us
1aa0: 65 20 69 6e 20 61 0a 2a 2a 20 6e 6f 72 6d 61 6c  e in a.** normal
1ab0: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
1ac0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1ad0: 45 42 55 47 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  EBUG)../*.** All
1ae0: 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f 72 79  ocate new memory
1af0: 20 61 6e 64 20 73 65 74 20 69 74 20 74 6f 20 7a   and set it to z
1b00: 65 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c  ero.  Return NUL
1b10: 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72  L if.** no memor
1b20: 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
1b30: 20 53 65 65 20 61 6c 73 6f 20 73 71 6c 69 74 65   See also sqlite
1b40: 4d 61 6c 6c 6f 63 52 61 77 28 29 2e 0a 2a 2f 0a  MallocRaw()..*/.
1b50: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1b60: 6c 6f 63 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f  loc(int n){.  vo
1b70: 69 64 20 2a 70 3b 0a 20 20 69 66 28 20 28 70 20  id *p;.  if( (p 
1b80: 3d 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20  = malloc(n))==0 
1b90: 29 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29  ){.    if( n>0 )
1ba0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
1bb0: 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d 65 6c 73  failed++;.  }els
1bc0: 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 2c  e{.    memset(p,
1bd0: 20 30 2c 20 6e 29 3b 0a 20 20 7d 0a 20 20 72 65   0, n);.  }.  re
1be0: 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn p;.}../*.**
1bf0: 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65   Allocate new me
1c00: 6d 6f 72 79 20 62 75 74 20 64 6f 20 6e 6f 74 20  mory but do not 
1c10: 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20  set it to zero. 
1c20: 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a   Return NULL if.
1c30: 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20  ** no memory is 
1c40: 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 65 65 20  available.  See 
1c50: 61 6c 73 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  also sqliteMallo
1c60: 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  c()..*/.void *sq
1c70: 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 69  lite3MallocRaw(i
1c80: 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70  nt n){.  void *p
1c90: 3b 0a 20 20 69 66 28 20 28 70 20 3d 20 6d 61 6c  ;.  if( (p = mal
1ca0: 6c 6f 63 28 6e 29 29 3d 3d 30 20 29 7b 0a 20 20  loc(n))==0 ){.  
1cb0: 20 20 69 66 28 20 6e 3e 30 20 29 20 73 71 6c 69    if( n>0 ) sqli
1cc0: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
1cd0: 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  d++;.  }.  retur
1ce0: 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72  n p;.}../*.** Fr
1cf0: 65 65 20 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f  ee memory previo
1d00: 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72  usly obtained fr
1d10: 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  om sqliteMalloc(
1d20: 29 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ).*/.void sqlite
1d30: 33 46 72 65 65 58 28 76 6f 69 64 20 2a 70 29 7b  3FreeX(void *p){
1d40: 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20  .  if( p ){.    
1d50: 66 72 65 65 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a  free(p);.  }.}..
1d60: 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61 20 70  /*.** Resize a p
1d70: 72 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  rior allocation.
1d80: 20 20 49 66 20 70 3d 3d 30 2c 20 74 68 65 6e 20    If p==0, then 
1d90: 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  this routine.** 
1da0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
1db0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20  sqliteMalloc(). 
1dc0: 20 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e 20 74   If n==0, then t
1dd0: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
1de0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73  orks just like s
1df0: 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a  qliteFree()..*/.
1e00: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
1e10: 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 2c 20 69 6e  lloc(void *p, in
1e20: 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 32  t n){.  void *p2
1e30: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a  ;.  if( p==0 ){.
1e40: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
1e50: 65 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 7d 0a  eMalloc(n);.  }.
1e60: 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20    if( n==0 ){.  
1e70: 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 29 3b    sqliteFree(p);
1e80: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
1e90: 20 7d 0a 20 20 70 32 20 3d 20 72 65 61 6c 6c 6f   }.  p2 = reallo
1ea0: 63 28 70 2c 20 6e 29 3b 0a 20 20 69 66 28 20 70  c(p, n);.  if( p
1eb0: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  2==0 ){.    sqli
1ec0: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
1ed0: 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  d++;.  }.  retur
1ee0: 6e 20 70 32 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d  n p2;.}../*.** M
1ef0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61 20  ake a copy of a 
1f00: 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79  string in memory
1f10: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
1f20: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f  qliteMalloc().*/
1f30: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
1f40: 72 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20  rDup(const char 
1f50: 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65  *z){.  char *zNe
1f60: 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  w;.  if( z==0 ) 
1f70: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77  return 0;.  zNew
1f80: 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52   = sqliteMallocR
1f90: 61 77 28 73 74 72 6c 65 6e 28 7a 29 2b 31 29 3b  aw(strlen(z)+1);
1fa0: 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 20 73 74  .  if( zNew ) st
1fb0: 72 63 70 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20  rcpy(zNew, z);. 
1fc0: 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a   return zNew;.}.
1fd0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
1fe0: 4e 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20  NDup(const char 
1ff0: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68  *z, int n){.  ch
2000: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20  ar *zNew;.  if( 
2010: 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  z==0 ) return 0;
2020: 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  zNew = sqlite
2030: 4d 61 6c 6c 6f 63 52 61 77 28 6e 2b 31 29 3b 0a  MallocRaw(n+1);.
2040: 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20    if( zNew ){.  
2050: 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a    memcpy(zNew, z
2060: 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e  , n);.    zNew[n
2070: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74  ] = 0;.  }.  ret
2080: 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 23 65 6e 64  urn zNew;.}.#end
2090: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
20a0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 2a 2f 0a  QLITE_DEBUG) */.
20b0: 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61 20  ./*.** Create a 
20c0: 73 74 72 69 6e 67 20 66 72 6f 6d 20 74 68 65 20  string from the 
20d0: 32 6e 64 20 61 6e 64 20 73 75 62 73 65 71 75 65  2nd and subseque
20e0: 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 28 75 70  nt arguments (up
20f0: 20 74 6f 20 74 68 65 0a 2a 2a 20 66 69 72 73 74   to the.** first
2100: 20 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 29 2c   NULL argument),
2110: 20 73 74 6f 72 65 20 74 68 65 20 73 74 72 69 6e   store the strin
2120: 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61  g in memory obta
2130: 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c  ined from.** sql
2140: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  iteMalloc() and 
2150: 6d 61 6b 65 20 74 68 65 20 70 6f 69 6e 74 65 72  make the pointer
2160: 20 69 6e 64 69 63 61 74 65 64 20 62 79 20 74 68   indicated by th
2170: 65 20 31 73 74 20 61 72 67 75 6d 65 6e 74 0a 2a  e 1st argument.*
2180: 2a 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20  * point to that 
2190: 73 74 72 69 6e 67 2e 20 20 54 68 65 20 31 73 74  string.  The 1st
21a0: 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 65   argument must e
21b0: 69 74 68 65 72 20 62 65 20 4e 55 4c 4c 20 6f 72  ither be NULL or
21c0: 20 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f 20 6d 65   .** point to me
21d0: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
21e0: 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  om sqliteMalloc(
21f0: 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  )..*/.void sqlit
2200: 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
2210: 20 2a 2a 70 7a 2c 20 63 6f 6e 73 74 20 63 68 61   **pz, const cha
2220: 72 20 2a 7a 46 69 72 73 74 2c 20 2e 2e 2e 29 7b  r *zFirst, ...){
2230: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
2240: 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 63 6f   int nByte;.  co
2250: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63  nst char *z;.  c
2260: 68 61 72 20 2a 7a 52 65 73 75 6c 74 3b 0a 0a 20  har *zResult;.. 
2270: 20 69 66 28 20 70 7a 3d 3d 30 20 29 20 72 65 74   if( pz==0 ) ret
2280: 75 72 6e 3b 0a 20 20 6e 42 79 74 65 20 3d 20 73  urn;.  nByte = s
2290: 74 72 6c 65 6e 28 7a 46 69 72 73 74 29 20 2b 20  trlen(zFirst) + 
22a0: 31 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  1;.  va_start(ap
22b0: 2c 20 7a 46 69 72 73 74 29 3b 0a 20 20 77 68 69  , zFirst);.  whi
22c0: 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72 67 28  le( (z = va_arg(
22d0: 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  ap, const char*)
22e0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 6e 42 79 74  )!=0 ){.    nByt
22f0: 65 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a  e += strlen(z);.
2300: 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29    }.  va_end(ap)
2310: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a  ;.  sqliteFree(*
2320: 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a 52 65  pz);.  *pz = zRe
2330: 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 4d 61 6c  sult = sqliteMal
2340: 6c 6f 63 52 61 77 28 20 6e 42 79 74 65 20 29 3b  locRaw( nByte );
2350: 0a 20 20 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d  .  if( zResult==
2360: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  0 ){.    return;
2370: 0a 20 20 7d 0a 20 20 73 74 72 63 70 79 28 7a 52  .  }.  strcpy(zR
2380: 65 73 75 6c 74 2c 20 7a 46 69 72 73 74 29 3b 0a  esult, zFirst);.
2390: 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20 73 74 72    zResult += str
23a0: 6c 65 6e 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20  len(zResult);.  
23b0: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 69  va_start(ap, zFi
23c0: 72 73 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 28  rst);.  while( (
23d0: 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 63  z = va_arg(ap, c
23e0: 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30 20  onst char*))!=0 
23f0: 29 7b 0a 20 20 20 20 73 74 72 63 70 79 28 7a 52  ){.    strcpy(zR
2400: 65 73 75 6c 74 2c 20 7a 29 3b 0a 20 20 20 20 7a  esult, z);.    z
2410: 52 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c 65 6e  Result += strlen
2420: 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20  (zResult);.  }. 
2430: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 23 69 66   va_end(ap);.#if
2440: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2450: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
2460: 47 3e 31 0a 20 20 66 70 72 69 6e 74 66 28 73 74  G>1.  fprintf(st
2470: 64 65 72 72 2c 22 73 74 72 69 6e 67 20 61 74 20  derr,"string at 
2480: 30 78 25 78 20 69 73 20 25 73 5c 6e 22 2c 20 28  0x%x is %s\n", (
2490: 69 6e 74 29 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23  int)*pz, *pz);.#
24a0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 7d 0a 0a  endif.#endif.}..
24b0: 2f 2a 0a 2a 2a 20 57 6f 72 6b 73 20 6c 69 6b 65  /*.** Works like
24c0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
24d0: 67 2c 20 62 75 74 20 65 61 63 68 20 73 74 72 69  g, but each stri
24e0: 6e 67 20 69 73 20 6e 6f 77 20 66 6f 6c 6c 6f 77  ng is now follow
24f0: 65 64 20 62 79 0a 2a 2a 20 61 20 6c 65 6e 67 74  ed by.** a lengt
2500: 68 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  h integer which 
2510: 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 75  specifies how mu
2520: 63 68 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  ch of the source
2530: 20 73 74 72 69 6e 67 20 0a 2a 2a 20 74 6f 20 63   string .** to c
2540: 6f 70 79 20 28 69 6e 20 62 79 74 65 73 29 2e 20  opy (in bytes). 
2550: 20 2d 31 20 6d 65 61 6e 73 20 75 73 65 20 74 68   -1 means use th
2560: 65 20 77 68 6f 6c 65 20 73 74 72 69 6e 67 2e 20  e whole string. 
2570: 20 54 68 65 20 31 73 74 20 0a 2a 2a 20 61 72 67   The 1st .** arg
2580: 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68 65  ument must eithe
2590: 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 70 6f 69  r be NULL or poi
25a0: 6e 74 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  nt to memory obt
25b0: 61 69 6e 65 64 20 66 72 6f 6d 20 0a 2a 2a 20 73  ained from .** s
25c0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a  qliteMalloc()..*
25d0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  /.void sqlite3Se
25e0: 74 4e 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  tNString(char **
25f0: 70 7a 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  pz, ...){.  va_l
2600: 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42  ist ap;.  int nB
2610: 79 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  yte;.  const cha
2620: 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52  r *z;.  char *zR
2630: 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 6e 3b 0a  esult;.  int n;.
2640: 0a 20 20 69 66 28 20 70 7a 3d 3d 30 20 29 20 72  .  if( pz==0 ) r
2650: 65 74 75 72 6e 3b 0a 20 20 6e 42 79 74 65 20 3d  eturn;.  nByte =
2660: 20 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61   0;.  va_start(a
2670: 70 2c 20 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28  p, pz);.  while(
2680: 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   (z = va_arg(ap,
2690: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d   const char*))!=
26a0: 30 20 29 7b 0a 20 20 20 20 6e 20 3d 20 76 61 5f  0 ){.    n = va_
26b0: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
26c0: 20 20 69 66 28 20 6e 3c 3d 30 20 29 20 6e 20 3d    if( n<=0 ) n =
26d0: 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20   strlen(z);.    
26e0: 6e 42 79 74 65 20 2b 3d 20 6e 3b 0a 20 20 7d 0a  nByte += n;.  }.
26f0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
2700: 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 29 3b  sqliteFree(*pz);
2710: 0a 20 20 2a 70 7a 20 3d 20 7a 52 65 73 75 6c 74  .  *pz = zResult
2720: 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52   = sqliteMallocR
2730: 61 77 28 20 6e 42 79 74 65 20 2b 20 31 20 29 3b  aw( nByte + 1 );
2740: 0a 20 20 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d  .  if( zResult==
2750: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61  0 ) return;.  va
2760: 5f 73 74 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a  _start(ap, pz);.
2770: 20 20 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61    while( (z = va
2780: 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63  _arg(ap, const c
2790: 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20  har*))!=0 ){.   
27a0: 20 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20   n = va_arg(ap, 
27b0: 69 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 3c  int);.    if( n<
27c0: 3d 30 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28  =0 ) n = strlen(
27d0: 7a 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a  z);.    memcpy(z
27e0: 52 65 73 75 6c 74 2c 20 7a 2c 20 6e 29 3b 0a 20  Result, z, n);. 
27f0: 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20 6e 3b     zResult += n;
2800: 0a 20 20 7d 0a 20 20 2a 7a 52 65 73 75 6c 74 20  .  }.  *zResult 
2810: 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
2820: 54 45 5f 44 45 42 55 47 0a 23 69 66 20 53 51 4c  TE_DEBUG.#if SQL
2830: 49 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 66 70  ITE_DEBUG>1.  fp
2840: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 73 74  rintf(stderr,"st
2850: 72 69 6e 67 20 61 74 20 30 78 25 78 20 69 73 20  ring at 0x%x is 
2860: 25 73 5c 6e 22 2c 20 28 69 6e 74 29 2a 70 7a 2c  %s\n", (int)*pz,
2870: 20 2a 70 7a 29 3b 0a 23 65 6e 64 69 66 0a 23 65   *pz);.#endif.#e
2880: 6e 64 69 66 0a 20 20 76 61 5f 65 6e 64 28 61 70  ndif.  va_end(ap
2890: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  );.}../*.** Set 
28a0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
28b0: 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65  error code and e
28c0: 72 72 6f 72 20 73 74 72 69 6e 67 20 66 6f 72 20  rror string for 
28d0: 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61  the sqlite.** ha
28e0: 6e 64 6c 65 20 22 64 62 22 2e 20 54 68 65 20 65  ndle "db". The e
28f0: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 65 74  rror code is set
2900: 20 74 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e 0a   to "err_code"..
2910: 2a 2a 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e  **.** If it is n
2920: 6f 74 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67 20  ot NULL, string 
2930: 7a 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65  zFormat specifie
2940: 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
2950: 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74 72  the.** error str
2960: 69 6e 67 20 69 6e 20 74 68 65 20 73 74 79 6c 65  ing in the style
2970: 20 6f 66 20 74 68 65 20 70 72 69 6e 74 66 20 66   of the printf f
2980: 75 6e 63 74 69 6f 6e 73 3a 20 54 68 65 20 66 6f  unctions: The fo
2990: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61  llowing.** forma
29a0: 74 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65  t characters are
29b0: 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20   allowed:.**.** 
29c0: 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e 73       %s      Ins
29d0: 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20  ert a string.** 
29e0: 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20 73       %z      A s
29f0: 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c  tring that shoul
2a00: 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65 72  d be freed after
2a10: 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20   use.**      %d 
2a20: 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69       Insert an i
2a30: 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25  nteger.**      %
2a40: 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20  T      Insert a 
2a50: 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53  token.**      %S
2a60: 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68 65        Insert the
2a70: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
2a80: 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a  f a SrcList.**.*
2a90: 2a 20 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61 6e  * zFormat and an
2aa0: 79 20 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73 20  y string tokens 
2ab0: 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20 61  that follow it a
2ac0: 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  re assumed to be
2ad0: 0a 2a 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20 55  .** encoded in U
2ae0: 54 46 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63  TF-8..**.** To c
2af0: 6c 65 61 72 20 74 68 65 20 6d 6f 73 74 20 72 65  lear the most re
2b00: 63 65 6e 74 20 65 72 72 6f 72 20 66 6f 72 20 73  cent error for s
2b10: 6c 71 69 74 65 20 68 61 6e 64 6c 65 20 22 64 62  lqite handle "db
2b20: 22 2c 20 73 71 6c 69 74 65 33 45 72 72 6f 72 0a  ", sqlite3Error.
2b30: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c  ** should be cal
2b40: 6c 65 64 20 77 69 74 68 20 65 72 72 5f 63 6f 64  led with err_cod
2b50: 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
2b60: 4f 4b 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20 73  OK and zFormat s
2b70: 65 74 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  et.** to NULL..*
2b80: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  /.void sqlite3Er
2b90: 72 6f 72 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  ror(sqlite *db, 
2ba0: 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f  int err_code, co
2bb0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
2bc0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 69 66 28 20 64  t, ...){.  if( d
2bd0: 62 20 26 26 20 28 64 62 2d 3e 70 45 72 72 20 7c  b && (db->pErr |
2be0: 7c 20 28 64 62 2d 3e 70 45 72 72 20 3d 20 73 71  | (db->pErr = sq
2bf0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 29  lite3ValueNew())
2c00: 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 65 72 72  ) ){.    db->err
2c10: 43 6f 64 65 20 3d 20 65 72 72 5f 63 6f 64 65 3b  Code = err_code;
2c20: 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d 61 74  .    if( zFormat
2c30: 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2c40: 7a 3b 0a 20 20 20 20 20 20 76 61 5f 6c 69 73 74  z;.      va_list
2c50: 20 61 70 3b 0a 20 20 20 20 20 20 76 61 5f 73 74   ap;.      va_st
2c60: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
2c70: 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69  ;.      z = sqli
2c80: 74 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72  te3VMPrintf(zFor
2c90: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20 20 20 20  mat, ap);.      
2ca0: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 20 20  va_end(ap);.    
2cb0: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
2cc0: 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d  tStr(db->pErr, -
2cd0: 31 2c 20 7a 2c 20 53 51 4c 49 54 45 5f 55 54 46  1, z, SQLITE_UTF
2ce0: 38 2c 20 73 71 6c 69 74 65 33 46 72 65 65 58 29  8, sqlite3FreeX)
2cf0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2d00: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53     sqlite3ValueS
2d10: 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20  etStr(db->pErr, 
2d20: 30 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46  0, 0, SQLITE_UTF
2d30: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
2d40: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
2d50: 2f 2a 0a 2a 2a 20 41 64 64 20 61 6e 20 65 72 72  /*.** Add an err
2d60: 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20 70 50  or message to pP
2d70: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e  arse->zErrMsg an
2d80: 64 20 69 6e 63 72 65 6d 65 6e 74 20 70 50 61 72  d increment pPar
2d90: 73 65 2d 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65  se->nErr..** The
2da0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61   following forma
2db0: 74 74 69 6e 67 20 63 68 61 72 61 63 74 65 72 73  tting characters
2dc0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a   are allowed:.**
2dd0: 0a 2a 2a 20 20 20 20 20 20 25 73 20 20 20 20 20  .**      %s     
2de0: 20 49 6e 73 65 72 74 20 61 20 73 74 72 69 6e 67   Insert a string
2df0: 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20 20 20 20  .**      %z     
2e00: 20 41 20 73 74 72 69 6e 67 20 74 68 61 74 20 73   A string that s
2e10: 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 61  hould be freed a
2e20: 66 74 65 72 20 75 73 65 0a 2a 2a 20 20 20 20 20  fter use.**     
2e30: 20 25 64 20 20 20 20 20 20 49 6e 73 65 72 74 20   %d      Insert 
2e40: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20  an integer.**   
2e50: 20 20 20 25 54 20 20 20 20 20 20 49 6e 73 65 72     %T      Inser
2e60: 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20  t a token.**    
2e70: 20 20 25 53 20 20 20 20 20 20 49 6e 73 65 72 74    %S      Insert
2e80: 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
2e90: 6e 74 20 6f 66 20 61 20 53 72 63 4c 69 73 74 0a  nt of a SrcList.
2ea0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  **.** This funct
2eb0: 69 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ion should be us
2ec0: 65 64 20 74 6f 20 72 65 70 6f 72 74 20 61 6e 79  ed to report any
2ed0: 20 65 72 72 6f 72 20 74 68 61 74 20 6f 63 63 75   error that occu
2ee0: 72 73 20 77 68 69 6c 73 74 0a 2a 2a 20 63 6f 6d  rs whilst.** com
2ef0: 70 69 6c 69 6e 67 20 61 6e 20 53 51 4c 20 73 74  piling an SQL st
2f00: 61 74 65 6d 65 6e 74 20 28 69 2e 65 2e 20 77 69  atement (i.e. wi
2f10: 74 68 69 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  thin sqlite3_pre
2f20: 70 61 72 65 28 29 29 2e 20 54 68 65 0a 2a 2a 20  pare()). The.** 
2f30: 6c 61 73 74 20 74 68 69 6e 67 20 74 68 65 20 73  last thing the s
2f40: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
2f50: 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 69   function does i
2f60: 73 20 63 6f 70 79 20 74 68 65 20 65 72 72 6f 72  s copy the error
2f70: 0a 2a 2a 20 73 74 6f 72 65 64 20 62 79 20 74 68  .** stored by th
2f80: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  is function into
2f90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
2fa0: 6e 64 6c 65 20 75 73 69 6e 67 20 73 71 6c 69 74  ndle using sqlit
2fb0: 65 33 45 72 72 6f 72 28 29 2e 0a 2a 2a 20 46 75  e3Error()..** Fu
2fc0: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 45 72  nction sqlite3Er
2fd0: 72 6f 72 28 29 20 73 68 6f 75 6c 64 20 62 65 20  ror() should be 
2fe0: 75 73 65 64 20 64 75 72 69 6e 67 20 73 74 61 74  used during stat
2ff0: 65 6d 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 0a  ement execution.
3000: 2a 2a 20 28 73 71 6c 69 74 65 33 5f 73 74 65 70  ** (sqlite3_step
3010: 28 29 20 65 74 63 2e 29 2e 0a 2a 2f 0a 76 6f 69  () etc.)..*/.voi
3020: 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
3030: 67 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  g(Parse *pParse,
3040: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
3050: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
3060: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 70 50 61 72  _list ap;.  pPar
3070: 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 73 71  se->nErr++;.  sq
3080: 6c 69 74 65 46 72 65 65 28 70 50 61 72 73 65 2d  liteFree(pParse-
3090: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 76 61 5f  >zErrMsg);.  va_
30a0: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
30b0: 74 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a 45  t);.  pParse->zE
30c0: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 56  rrMsg = sqlite3V
30d0: 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c  MPrintf(zFormat,
30e0: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
30f0: 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  p);.}../*.** Con
3100: 76 65 72 74 20 61 6e 20 53 51 4c 2d 73 74 79 6c  vert an SQL-styl
3110: 65 20 71 75 6f 74 65 64 20 73 74 72 69 6e 67 20  e quoted string 
3120: 69 6e 74 6f 20 61 20 6e 6f 72 6d 61 6c 20 73 74  into a normal st
3130: 72 69 6e 67 20 62 79 20 72 65 6d 6f 76 69 6e 67  ring by removing
3140: 0a 2a 2a 20 74 68 65 20 71 75 6f 74 65 20 63 68  .** the quote ch
3150: 61 72 61 63 74 65 72 73 2e 20 20 54 68 65 20 63  aracters.  The c
3160: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 64 6f 6e  onversion is don
3170: 65 20 69 6e 2d 70 6c 61 63 65 2e 20 20 49 66 20  e in-place.  If 
3180: 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20 64 6f 65  the.** input doe
3190: 73 20 6e 6f 74 20 62 65 67 69 6e 20 77 69 74 68  s not begin with
31a0: 20 61 20 71 75 6f 74 65 20 63 68 61 72 61 63 74   a quote charact
31b0: 65 72 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  er, then this ro
31c0: 75 74 69 6e 65 0a 2a 2a 20 69 73 20 61 20 6e 6f  utine.** is a no
31d0: 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 32 2d  -op..**.** 2002-
31e0: 46 65 62 2d 31 34 3a 20 54 68 69 73 20 72 6f 75  Feb-14: This rou
31f0: 74 69 6e 65 20 69 73 20 65 78 74 65 6e 64 65 64  tine is extended
3200: 20 74 6f 20 72 65 6d 6f 76 65 20 4d 53 2d 41 63   to remove MS-Ac
3210: 63 65 73 73 20 73 74 79 6c 65 0a 2a 2a 20 62 72  cess style.** br
3220: 61 63 6b 65 74 73 20 66 72 6f 6d 20 61 72 6f 75  ackets from arou
3230: 6e 64 20 69 64 65 6e 74 69 66 65 72 73 2e 20 20  nd identifers.  
3240: 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 20 22 5b  For example:  "[
3250: 61 2d 62 2d 63 5d 22 20 62 65 63 6f 6d 65 73 0a  a-b-c]" becomes.
3260: 2a 2a 20 22 61 2d 62 2d 63 22 2e 0a 2a 2f 0a 76  ** "a-b-c"..*/.v
3270: 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
3280: 74 65 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  te(char *z){.  i
3290: 6e 74 20 71 75 6f 74 65 3b 0a 20 20 69 6e 74 20  nt quote;.  int 
32a0: 69 2c 20 6a 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  i, j;.  if( z==0
32b0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 71 75 6f   ) return;.  quo
32c0: 74 65 20 3d 20 7a 5b 30 5d 3b 0a 20 20 73 77 69  te = z[0];.  swi
32d0: 74 63 68 28 20 71 75 6f 74 65 20 29 7b 0a 20 20  tch( quote ){.  
32e0: 20 20 63 61 73 65 20 27 5c 27 27 3a 20 20 62 72    case '\'':  br
32f0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27 22  eak;.    case '"
3300: 27 3a 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ':   break;.    
3310: 63 61 73 65 20 27 5b 27 3a 20 20 20 71 75 6f 74  case '[':   quot
3320: 65 20 3d 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b  e = ']';  break;
3330: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
3340: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 66   return;.  }.  f
3350: 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20 7a 5b 69  or(i=1, j=0; z[i
3360: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ]; i++){.    if(
3370: 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a   z[i]==quote ){.
3380: 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d        if( z[i+1]
3390: 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 20  ==quote ){.     
33a0: 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71 75 6f 74     z[j++] = quot
33b0: 65 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  e;.        i++;.
33c0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
33d0: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 30 3b       z[j++] = 0;
33e0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
33f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
3400: 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20  e{.      z[j++] 
3410: 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20  = z[i];.    }.  
3420: 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61 72 72 61 79  }.}../* An array
3430: 20 74 6f 20 6d 61 70 20 61 6c 6c 20 75 70 70 65   to map all uppe
3440: 72 2d 63 61 73 65 20 63 68 61 72 61 63 74 65 72  r-case character
3450: 73 20 69 6e 74 6f 20 74 68 65 69 72 20 63 6f 72  s into their cor
3460: 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6c 6f  responding.** lo
3470: 77 65 72 2d 63 61 73 65 20 63 68 61 72 61 63 74  wer-case charact
3480: 65 72 2e 20 0a 2a 2f 0a 73 74 61 74 69 63 20 75  er. .*/.static u
3490: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 55 70 70  nsigned char Upp
34a0: 65 72 54 6f 4c 6f 77 65 72 5b 5d 20 3d 20 7b 0a  erToLower[] = {.
34b0: 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 32 2c        0,  1,  2,
34c0: 20 20 33 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c    3,  4,  5,  6,
34d0: 20 20 37 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c    7,  8,  9, 10,
34e0: 20 31 31 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c   11, 12, 13, 14,
34f0: 20 31 35 2c 20 31 36 2c 20 31 37 2c 0a 20 20 20   15, 16, 17,.   
3500: 20 20 31 38 2c 20 31 39 2c 20 32 30 2c 20 32 31    18, 19, 20, 21
3510: 2c 20 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35  , 22, 23, 24, 25
3520: 2c 20 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39  , 26, 27, 28, 29
3530: 2c 20 33 30 2c 20 33 31 2c 20 33 32 2c 20 33 33  , 30, 31, 32, 33
3540: 2c 20 33 34 2c 20 33 35 2c 0a 20 20 20 20 20 33  , 34, 35,.     3
3550: 36 2c 20 33 37 2c 20 33 38 2c 20 33 39 2c 20 34  6, 37, 38, 39, 4
3560: 30 2c 20 34 31 2c 20 34 32 2c 20 34 33 2c 20 34  0, 41, 42, 43, 4
3570: 34 2c 20 34 35 2c 20 34 36 2c 20 34 37 2c 20 34  4, 45, 46, 47, 4
3580: 38 2c 20 34 39 2c 20 35 30 2c 20 35 31 2c 20 35  8, 49, 50, 51, 5
3590: 32 2c 20 35 33 2c 0a 20 20 20 20 20 35 34 2c 20  2, 53,.     54, 
35a0: 35 35 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c 20  55, 56, 57, 58, 
35b0: 35 39 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c 20  59, 60, 61, 62, 
35c0: 36 33 2c 20 36 34 2c 20 39 37 2c 20 39 38 2c 20  63, 64, 97, 98, 
35d0: 39 39 2c 31 30 30 2c 31 30 31 2c 31 30 32 2c 31  99,100,101,102,1
35e0: 30 33 2c 0a 20 20 20 20 31 30 34 2c 31 30 35 2c  03,.    104,105,
35f0: 31 30 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c  106,107,108,109,
3600: 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c  110,111,112,113,
3610: 31 31 34 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c  114,115,116,117,
3620: 31 31 38 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c  118,119,120,121,
3630: 0a 20 20 20 20 31 32 32 2c 20 39 31 2c 20 39 32  .    122, 91, 92
3640: 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c 20 39 36  , 93, 94, 95, 96
3650: 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30  , 97, 98, 99,100
3660: 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c 31 30 34  ,101,102,103,104
3670: 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c 0a 20 20  ,105,106,107,.  
3680: 20 20 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31    108,109,110,11
3690: 31 2c 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31  1,112,113,114,11
36a0: 35 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31  5,116,117,118,11
36b0: 39 2c 31 32 30 2c 31 32 31 2c 31 32 32 2c 31 32  9,120,121,122,12
36c0: 33 2c 31 32 34 2c 31 32 35 2c 0a 20 20 20 20 31  3,124,125,.    1
36d0: 32 36 2c 31 32 37 2c 31 32 38 2c 31 32 39 2c 31  26,127,128,129,1
36e0: 33 30 2c 31 33 31 2c 31 33 32 2c 31 33 33 2c 31  30,131,132,133,1
36f0: 33 34 2c 31 33 35 2c 31 33 36 2c 31 33 37 2c 31  34,135,136,137,1
3700: 33 38 2c 31 33 39 2c 31 34 30 2c 31 34 31 2c 31  38,139,140,141,1
3710: 34 32 2c 31 34 33 2c 0a 20 20 20 20 31 34 34 2c  42,143,.    144,
3720: 31 34 35 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c  145,146,147,148,
3730: 31 34 39 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c  149,150,151,152,
3740: 31 35 33 2c 31 35 34 2c 31 35 35 2c 31 35 36 2c  153,154,155,156,
3750: 31 35 37 2c 31 35 38 2c 31 35 39 2c 31 36 30 2c  157,158,159,160,
3760: 31 36 31 2c 0a 20 20 20 20 31 36 32 2c 31 36 33  161,.    162,163
3770: 2c 31 36 34 2c 31 36 35 2c 31 36 36 2c 31 36 37  ,164,165,166,167
3780: 2c 31 36 38 2c 31 36 39 2c 31 37 30 2c 31 37 31  ,168,169,170,171
3790: 2c 31 37 32 2c 31 37 33 2c 31 37 34 2c 31 37 35  ,172,173,174,175
37a0: 2c 31 37 36 2c 31 37 37 2c 31 37 38 2c 31 37 39  ,176,177,178,179
37b0: 2c 0a 20 20 20 20 31 38 30 2c 31 38 31 2c 31 38  ,.    180,181,18
37c0: 32 2c 31 38 33 2c 31 38 34 2c 31 38 35 2c 31 38  2,183,184,185,18
37d0: 36 2c 31 38 37 2c 31 38 38 2c 31 38 39 2c 31 39  6,187,188,189,19
37e0: 30 2c 31 39 31 2c 31 39 32 2c 31 39 33 2c 31 39  0,191,192,193,19
37f0: 34 2c 31 39 35 2c 31 39 36 2c 31 39 37 2c 0a 20  4,195,196,197,. 
3800: 20 20 20 31 39 38 2c 31 39 39 2c 32 30 30 2c 32     198,199,200,2
3810: 30 31 2c 32 30 32 2c 32 30 33 2c 32 30 34 2c 32  01,202,203,204,2
3820: 30 35 2c 32 30 36 2c 32 30 37 2c 32 30 38 2c 32  05,206,207,208,2
3830: 30 39 2c 32 31 30 2c 32 31 31 2c 32 31 32 2c 32  09,210,211,212,2
3840: 31 33 2c 32 31 34 2c 32 31 35 2c 0a 20 20 20 20  13,214,215,.    
3850: 32 31 36 2c 32 31 37 2c 32 31 38 2c 32 31 39 2c  216,217,218,219,
3860: 32 32 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c  220,221,222,223,
3870: 32 32 34 2c 32 32 35 2c 32 32 36 2c 32 32 37 2c  224,225,226,227,
3880: 32 32 38 2c 32 32 39 2c 32 33 30 2c 32 33 31 2c  228,229,230,231,
3890: 32 33 32 2c 32 33 33 2c 0a 20 20 20 20 32 33 34  232,233,.    234
38a0: 2c 32 33 35 2c 32 33 36 2c 32 33 37 2c 32 33 38  ,235,236,237,238
38b0: 2c 32 33 39 2c 32 34 30 2c 32 34 31 2c 32 34 32  ,239,240,241,242
38c0: 2c 32 34 33 2c 32 34 34 2c 32 34 35 2c 32 34 36  ,243,244,245,246
38d0: 2c 32 34 37 2c 32 34 38 2c 32 34 39 2c 32 35 30  ,247,248,249,250
38e0: 2c 32 35 31 2c 0a 20 20 20 20 32 35 32 2c 32 35  ,251,.    252,25
38f0: 33 2c 32 35 34 2c 32 35 35 0a 7d 3b 0a 0a 2f 2a  3,254,255.};../*
3900: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3910: 6e 20 63 6f 6d 70 75 74 65 73 20 61 20 68 61 73  n computes a has
3920: 68 20 6f 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  h on the name of
3930: 20 61 20 6b 65 79 77 6f 72 64 2e 0a 2a 2a 20 43   a keyword..** C
3940: 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69  ase is not signi
3950: 66 69 63 61 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  ficant..*/.int s
3960: 71 6c 69 74 65 33 48 61 73 68 4e 6f 43 61 73 65  qlite3HashNoCase
3970: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
3980: 69 6e 74 20 6e 29 7b 0a 20 20 69 6e 74 20 68 20  int n){.  int h 
3990: 3d 20 30 3b 0a 20 20 69 66 28 20 6e 3c 3d 30 20  = 0;.  if( n<=0 
39a0: 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b  ) n = strlen(z);
39b0: 0a 20 20 77 68 69 6c 65 28 20 6e 20 3e 20 30 20  .  while( n > 0 
39c0: 20 29 7b 0a 20 20 20 20 68 20 3d 20 28 68 3c 3c   ){.    h = (h<<
39d0: 33 29 20 5e 20 68 20 5e 20 55 70 70 65 72 54 6f  3) ^ h ^ UpperTo
39e0: 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
39f0: 63 68 61 72 29 2a 7a 2b 2b 5d 3b 0a 20 20 20 20  char)*z++];.    
3a00: 6e 2d 2d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n--;.  }.  retur
3a10: 6e 20 68 20 26 20 30 78 37 66 66 66 66 66 66 66  n h & 0x7fffffff
3a20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  ;.}../*.** Some 
3a30: 73 79 73 74 65 6d 73 20 68 61 76 65 20 73 74 72  systems have str
3a40: 69 63 6d 70 28 29 2e 20 20 4f 74 68 65 72 73 20  icmp().  Others 
3a50: 68 61 76 65 20 73 74 72 63 61 73 65 63 6d 70 28  have strcasecmp(
3a60: 29 2e 20 20 42 65 63 61 75 73 65 0a 2a 2a 20 74  ).  Because.** t
3a70: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 69  here is no consi
3a80: 73 74 65 6e 63 79 2c 20 77 65 20 77 69 6c 6c 20  stency, we will 
3a90: 64 65 66 69 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a  define our own..
3aa0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
3ab0: 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  rICmp(const char
3ac0: 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63   *zLeft, const c
3ad0: 68 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20  har *zRight){.  
3ae0: 72 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65  register unsigne
3af0: 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20  d char *a, *b;. 
3b00: 20 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63   a = (unsigned c
3b10: 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62  har *)zLeft;.  b
3b20: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
3b30: 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68  r *)zRight;.  wh
3b40: 69 6c 65 28 20 2a 61 21 3d 30 20 26 26 20 55 70  ile( *a!=0 && Up
3b50: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d  perToLower[*a]==
3b60: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
3b70: 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20  ){ a++; b++; }. 
3b80: 20 72 65 74 75 72 6e 20 55 70 70 65 72 54 6f 4c   return UpperToL
3b90: 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72  ower[*a] - Upper
3ba0: 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 69  ToLower[*b];.}.i
3bb0: 6e 74 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  nt sqlite3StrNIC
3bc0: 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  mp(const char *z
3bd0: 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  Left, const char
3be0: 20 2a 7a 52 69 67 68 74 2c 20 69 6e 74 20 4e 29   *zRight, int N)
3bf0: 7b 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73  {.  register uns
3c00: 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a  igned char *a, *
3c10: 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e  b;.  a = (unsign
3c20: 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b  ed char *)zLeft;
3c30: 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64  .  b = (unsigned
3c40: 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a   char *)zRight;.
3c50: 20 20 77 68 69 6c 65 28 20 4e 2d 2d 20 3e 20 30    while( N-- > 0
3c60: 20 26 26 20 2a 61 21 3d 30 20 26 26 20 55 70 70   && *a!=0 && Upp
3c70: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55  erToLower[*a]==U
3c80: 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29  pperToLower[*b])
3c90: 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20  { a++; b++; }.  
3ca0: 72 65 74 75 72 6e 20 4e 3c 30 20 3f 20 30 20 3a  return N<0 ? 0 :
3cb0: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61   UpperToLower[*a
3cc0: 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65 72  ] - UpperToLower
3cd0: 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  [*b];.}../*.** R
3ce0: 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a 20  eturn TRUE if z 
3cf0: 69 73 20 61 20 70 75 72 65 20 6e 75 6d 65 72 69  is a pure numeri
3d00: 63 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75 72  c string.  Retur
3d10: 6e 20 46 41 4c 53 45 20 69 66 20 74 68 65 0a 2a  n FALSE if the.*
3d20: 2a 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  * string contain
3d30: 73 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20  s any character 
3d40: 77 68 69 63 68 20 69 73 20 6e 6f 74 20 70 61 72  which is not par
3d50: 74 20 6f 66 20 61 20 6e 75 6d 62 65 72 2e 20 49  t of a number. I
3d60: 66 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67 20  f.** the string 
3d70: 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 63  is numeric and c
3d80: 6f 6e 74 61 69 6e 73 20 74 68 65 20 27 2e 27 20  ontains the '.' 
3d90: 63 68 61 72 61 63 74 65 72 2c 20 73 65 74 20 2a  character, set *
3da0: 72 65 61 6c 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52  realnum.** to TR
3db0: 55 45 20 28 6f 74 68 65 72 77 69 73 65 20 46 41  UE (otherwise FA
3dc0: 4c 53 45 29 2e 0a 2a 2a 0a 2a 2a 20 41 6d 20 65  LSE)..**.** Am e
3dd0: 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 63  mpty string is c
3de0: 6f 6e 73 69 64 65 72 65 64 20 6e 6f 6e 2d 6e 75  onsidered non-nu
3df0: 6d 65 72 69 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71  meric..*/.int sq
3e00: 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63 6f  lite3IsNumber(co
3e10: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
3e20: 20 2a 72 65 61 6c 6e 75 6d 2c 20 75 38 20 65 6e   *realnum, u8 en
3e30: 63 29 7b 0a 20 20 69 6e 74 20 69 6e 63 72 20 3d  c){.  int incr =
3e40: 20 28 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54   (enc==SQLITE_UT
3e50: 46 38 3f 31 3a 32 29 3b 0a 20 20 69 66 28 20 65  F8?1:2);.  if( e
3e60: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
3e70: 42 45 20 29 20 7a 2b 2b 3b 0a 20 20 69 66 28 20  BE ) z++;.  if( 
3e80: 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='-' || *z=='
3e90: 2b 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a  +' ) z += incr;.
3ea0: 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a    if( !isdigit(*
3eb0: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
3ec0: 20 30 3b 0a 20 20 7d 0a 20 20 7a 20 2b 3d 20 69   0;.  }.  z += i
3ed0: 6e 63 72 3b 0a 20 20 69 66 28 20 72 65 61 6c 6e  ncr;.  if( realn
3ee0: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
3ef0: 30 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 64 69  0;.  while( isdi
3f00: 67 69 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20  git(*z) ){ z += 
3f10: 69 6e 63 72 3b 20 7d 0a 20 20 69 66 28 20 2a 7a  incr; }.  if( *z
3f20: 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a 20 2b  =='.' ){.    z +
3f30: 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20  = incr;.    if( 
3f40: 21 69 73 64 69 67 69 74 28 2a 7a 29 20 29 20 72  !isdigit(*z) ) r
3f50: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69  eturn 0;.    whi
3f60: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20  le( isdigit(*z) 
3f70: 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a  ){ z += incr; }.
3f80: 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20      if( realnum 
3f90: 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a  ) *realnum = 1;.
3fa0: 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65    }.  if( *z=='e
3fb0: 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a  ' || *z=='E' ){.
3fc0: 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20      z += incr;. 
3fd0: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
3fe0: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 20 2b 3d  | *z=='-' ) z +=
3ff0: 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21   incr;.    if( !
4000: 69 73 64 69 67 69 74 28 2a 7a 29 20 29 20 72 65  isdigit(*z) ) re
4010: 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c  turn 0;.    whil
4020: 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29  e( isdigit(*z) )
4030: 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20  { z += incr; }. 
4040: 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29     if( realnum )
4050: 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20   *realnum = 1;. 
4060: 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d   }.  return *z==
4070: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0;.}../*.** The 
4080: 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20 61 6e  string z[] is an
4090: 20 61 73 63 69 69 20 72 65 70 72 65 73 65 6e 74   ascii represent
40a0: 61 74 69 6f 6e 20 6f 66 20 61 20 72 65 61 6c 20  ation of a real 
40b0: 6e 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76 65  number..** Conve
40c0: 72 74 20 74 68 69 73 20 73 74 72 69 6e 67 20 74  rt this string t
40d0: 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a 0a 2a  o a double..**.*
40e0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 61  * This routine a
40f0: 73 73 75 6d 65 73 20 74 68 61 74 20 7a 5b 5d 20  ssumes that z[] 
4100: 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61 6c 69  really is a vali
4110: 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74  d number.  If it
4120: 0a 2a 2a 20 69 73 20 6e 6f 74 2c 20 74 68 65 20  .** is not, the 
4130: 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66 69  result is undefi
4140: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ned..**.** This 
4150: 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64 20  routine is used 
4160: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 6c  instead of the l
4170: 69 62 72 61 72 79 20 61 74 6f 66 28 29 20 66 75  ibrary atof() fu
4180: 6e 63 74 69 6f 6e 20 62 65 63 61 75 73 65 0a 2a  nction because.*
4190: 2a 20 74 68 65 20 6c 69 62 72 61 72 79 20 61 74  * the library at
41a0: 6f 66 28 29 20 6d 69 67 68 74 20 77 61 6e 74 20  of() might want 
41b0: 74 6f 20 75 73 65 20 22 2c 22 20 61 73 20 74 68  to use "," as th
41c0: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
41d0: 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 22 2e  instead.** of ".
41e0: 22 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 68  " depending on h
41f0: 6f 77 20 6c 6f 63 61 6c 65 20 69 73 20 73 65 74  ow locale is set
4200: 2e 20 20 42 75 74 20 74 68 61 74 20 77 6f 75 6c  .  But that woul
4210: 64 20 63 61 75 73 65 20 70 72 6f 62 6c 65 6d 73  d cause problems
4220: 0a 2a 2a 20 66 6f 72 20 53 51 4c 2e 20 20 53 6f  .** for SQL.  So
4230: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61 6c   this routine al
4240: 77 61 79 73 20 75 73 65 73 20 22 2e 22 20 72 65  ways uses "." re
4250: 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
4260: 6c 65 2e 0a 2a 2f 0a 64 6f 75 62 6c 65 20 73 71  le..*/.double sq
4270: 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
4280: 63 68 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63  char *z, const c
4290: 68 61 72 20 2a 2a 70 7a 45 6e 64 29 7b 0a 20 20  har **pzEnd){.  
42a0: 69 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20  int sign = 1;.  
42b0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
42c0: 76 31 20 3d 20 30 2e 30 3b 0a 20 20 69 66 28 20  v1 = 0.0;.  if( 
42d0: 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 73  *z=='-' ){.    s
42e0: 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 7a 2b  ign = -1;.    z+
42f0: 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  +;.  }else if( *
4300: 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 2b  z=='+' ){.    z+
4310: 2b 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20  +;.  }.  while( 
4320: 69 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20  isdigit(*z) ){. 
4330: 20 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20     v1 = v1*10.0 
4340: 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20  + (*z - '0');.  
4350: 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28    z++;.  }.  if(
4360: 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20   *z=='.' ){.    
4370: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4380: 64 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b 0a 20  divisor = 1.0;. 
4390: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 77 68 69 6c     z++;.    whil
43a0: 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29  e( isdigit(*z) )
43b0: 7b 0a 20 20 20 20 20 20 76 31 20 3d 20 76 31 2a  {.      v1 = v1*
43c0: 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27  10.0 + (*z - '0'
43d0: 29 3b 0a 20 20 20 20 20 20 64 69 76 69 73 6f 72  );.      divisor
43e0: 20 2a 3d 20 31 30 2e 30 3b 0a 20 20 20 20 20 20   *= 10.0;.      
43f0: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76  z++;.    }.    v
4400: 31 20 2f 3d 20 64 69 76 69 73 6f 72 3b 0a 20 20  1 /= divisor;.  
4410: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27 20  }.  if( *z=='e' 
4420: 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20 20  || *z=='E' ){.  
4430: 20 20 69 6e 74 20 65 73 69 67 6e 20 3d 20 31 3b    int esign = 1;
4440: 0a 20 20 20 20 69 6e 74 20 65 76 61 6c 20 3d 20  .    int eval = 
4450: 30 3b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c  0;.    LONGDOUBL
4460: 45 5f 54 59 50 45 20 73 63 61 6c 65 20 3d 20 31  E_TYPE scale = 1
4470: 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  .0;.    z++;.   
4480: 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a   if( *z=='-' ){.
4490: 20 20 20 20 20 20 65 73 69 67 6e 20 3d 20 2d 31        esign = -1
44a0: 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
44b0: 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27   }else if( *z=='
44c0: 2b 27 20 29 7b 0a 20 20 20 20 20 20 7a 2b 2b 3b  +' ){.      z++;
44d0: 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
44e0: 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29 7b  ( isdigit(*z) ){
44f0: 0a 20 20 20 20 20 20 65 76 61 6c 20 3d 20 65 76  .      eval = ev
4500: 61 6c 2a 31 30 20 2b 20 2a 7a 20 2d 20 27 30 27  al*10 + *z - '0'
4510: 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
4520: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76   }.    while( ev
4530: 61 6c 3e 3d 36 34 20 29 7b 20 73 63 61 6c 65 20  al>=64 ){ scale 
4540: 2a 3d 20 31 2e 30 65 2b 36 34 3b 20 65 76 61 6c  *= 1.0e+64; eval
4550: 20 2d 3d 20 36 34 3b 20 7d 0a 20 20 20 20 77 68   -= 64; }.    wh
4560: 69 6c 65 28 20 65 76 61 6c 3e 3d 31 36 20 29 7b  ile( eval>=16 ){
4570: 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31   scale *= 1.0e+1
4580: 36 3b 20 65 76 61 6c 20 2d 3d 20 31 36 3b 20 7d  6; eval -= 16; }
4590: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
45a0: 3e 3d 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20  >=4 ){ scale *= 
45b0: 31 2e 30 65 2b 34 3b 20 65 76 61 6c 20 2d 3d 20  1.0e+4; eval -= 
45c0: 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20  4; }.    while( 
45d0: 65 76 61 6c 3e 3d 31 20 29 7b 20 73 63 61 6c 65  eval>=1 ){ scale
45e0: 20 2a 3d 20 31 2e 30 65 2b 31 3b 20 65 76 61 6c   *= 1.0e+1; eval
45f0: 20 2d 3d 20 31 3b 20 7d 0a 20 20 20 20 69 66 28   -= 1; }.    if(
4600: 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20 20   esign<0 ){.    
4610: 20 20 76 31 20 2f 3d 20 73 63 61 6c 65 3b 0a 20    v1 /= scale;. 
4620: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4630: 76 31 20 2a 3d 20 73 63 61 6c 65 3b 0a 20 20 20  v1 *= scale;.   
4640: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 7a 45   }.  }.  if( pzE
4650: 6e 64 20 29 20 2a 70 7a 45 6e 64 20 3d 20 7a 3b  nd ) *pzEnd = z;
4660: 0a 20 20 72 65 74 75 72 6e 20 73 69 67 6e 3c 30  .  return sign<0
4670: 20 3f 20 2d 76 31 20 3a 20 76 31 3b 0a 7d 0a 0a   ? -v1 : v1;.}..
4680: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  /*.** Return TRU
4690: 45 20 69 66 20 7a 4e 75 6d 20 69 73 20 61 20 36  E if zNum is a 6
46a0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
46b0: 65 67 65 72 20 61 6e 64 20 77 72 69 74 65 0a 2a  eger and write.*
46c0: 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
46d0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20  he integer into 
46e0: 2a 70 4e 75 6d 2e 20 20 49 66 20 7a 4e 75 6d 20  *pNum.  If zNum 
46f0: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
4700: 72 0a 2a 2a 20 6f 72 20 69 73 20 61 6e 20 69 6e  r.** or is an in
4710: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
4720: 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 65 78  o large to be ex
4730: 70 72 65 73 73 65 64 20 77 69 74 68 20 36 34 20  pressed with 64 
4740: 62 69 74 73 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  bits,.** then re
4750: 74 75 72 6e 20 66 61 6c 73 65 2e 20 20 49 66 20  turn false.  If 
4760: 6e 3e 30 20 61 6e 64 20 74 68 65 20 69 6e 74 65  n>0 and the inte
4770: 67 65 72 20 69 73 20 73 74 72 69 6e 67 20 69 73  ger is string is
4780: 20 6e 6f 74 0a 2a 2a 20 65 78 61 63 74 6c 79 20   not.** exactly 
4790: 6e 20 62 79 74 65 73 20 6c 6f 6e 67 2c 20 72 65  n bytes long, re
47a0: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a  turn false..**.*
47b0: 2a 20 57 68 65 6e 20 74 68 69 73 20 72 6f 75 74  * When this rout
47c0: 69 6e 65 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ine was original
47d0: 6c 79 20 77 72 69 74 74 65 6e 20 69 74 20 64 65  ly written it de
47e0: 61 6c 74 20 77 69 74 68 20 6f 6e 6c 79 0a 2a 2a  alt with only.**
47f0: 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72 73 2e   32-bit numbers.
4800: 20 20 41 74 20 74 68 61 74 20 74 69 6d 65 2c 20    At that time, 
4810: 69 74 20 77 61 73 20 6d 75 63 68 20 66 61 73 74  it was much fast
4820: 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 61  er than the.** a
4830: 74 6f 69 28 29 20 6c 69 62 72 61 72 79 20 72 6f  toi() library ro
4840: 75 74 69 6e 65 20 69 6e 20 52 65 64 48 61 74 20  utine in RedHat 
4850: 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  7.2..*/.int sqli
4860: 74 65 33 61 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3atoi64(const 
4870: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20  char *zNum, i64 
4880: 2a 70 4e 75 6d 29 7b 0a 20 20 69 36 34 20 76 20  *pNum){.  i64 v 
4890: 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67 3b 0a  = 0;.  int neg;.
48a0: 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66    int i, c;.  if
48b0: 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b 0a  ( *zNum=='-' ){.
48c0: 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20 20      neg = 1;.   
48d0: 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65   zNum++;.  }else
48e0: 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20   if( *zNum=='+' 
48f0: 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b 0a  ){.    neg = 0;.
4900: 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65      zNum++;.  }e
4910: 6c 73 65 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30  lse{.    neg = 0
4920: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  ;.  }.  for(i=0;
4930: 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30   (c=zNum[i])>='0
4940: 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b  ' && c<='9'; i++
4950: 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31 30 20  ){.    v = v*10 
4960: 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 7d 0a 20  + c - '0';.  }. 
4970: 20 2a 70 4e 75 6d 20 3d 20 6e 65 67 20 3f 20 2d   *pNum = neg ? -
4980: 76 20 3a 20 76 3b 0a 20 20 72 65 74 75 72 6e 20  v : v;.  return 
4990: 63 3d 3d 30 20 26 26 20 69 3e 30 20 26 26 20 0a  c==0 && i>0 && .
49a0: 20 20 20 20 20 20 28 69 3c 31 39 20 7c 7c 20 28        (i<19 || (
49b0: 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d 70 28  i==19 && memcmp(
49c0: 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32 30 33 36  zNum,"9223372036
49d0: 38 35 34 37 37 35 38 30 37 22 2c 31 39 29 3c 3d  854775807",19)<=
49e0: 30 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  0));.}../*.** Th
49f0: 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72 65  e string zNum re
4a00: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
4a10: 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69 67 68  ger.  There migh
4a20: 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 0a  t be some other.
4a30: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ** information f
4a40: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e 74  ollowing the int
4a50: 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20 74 68  eger too, but th
4a60: 61 74 20 70 61 72 74 20 69 73 20 69 67 6e 6f 72  at part is ignor
4a70: 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e  ed..** If the in
4a80: 74 65 67 65 72 20 74 68 61 74 20 74 68 65 20 70  teger that the p
4a90: 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72 65  refix of zNum re
4aa0: 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20 66 69  presents will fi
4ab0: 74 20 69 6e 20 61 0a 2a 2a 20 33 32 2d 62 69 74  t in a.** 32-bit
4ac0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
4ad0: 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20 20 4f   return TRUE.  O
4ae0: 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20  therwise return 
4af0: 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  FALSE..**.** Thi
4b00: 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
4b10: 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68 65 20  s FALSE for the 
4b20: 73 74 72 69 6e 67 20 2d 32 31 34 37 34 38 33 36  string -21474836
4b30: 34 38 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a 20  48 even that.** 
4b40: 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69 6c 6c  that number will
4b50: 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69 74 20  , in theory fit 
4b60: 69 6e 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  in a 32-bit inte
4b70: 67 65 72 2e 20 20 42 75 74 20 70 6f 73 69 74 69  ger.  But positi
4b80: 76 65 0a 2a 2a 20 32 31 34 37 34 38 33 36 34 38  ve.** 2147483648
4b90: 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e   will not fit in
4ba0: 20 33 32 20 62 69 74 73 2e 20 20 53 6f 20 69 74   32 bits.  So it
4bb0: 20 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20   seems safer to 
4bc0: 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e  return.** false.
4bd0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
4be0: 71 6c 69 74 65 33 46 69 74 73 49 6e 33 32 42 69  qlite3FitsIn32Bi
4bf0: 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ts(const char *z
4c00: 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63  Num){.  int i, c
4c10: 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27  ;.  if( *zNum=='
4c20: 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  -' || *zNum=='+'
4c30: 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72   ) zNum++;.  for
4c40: 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d  (i=0; (c=zNum[i]
4c50: 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  )>='0' && c<='9'
4c60: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72  ; i++){}.  retur
4c70: 6e 20 69 3c 31 30 20 7c 7c 20 28 69 3d 3d 31 30  n i<10 || (i==10
4c80: 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c   && memcmp(zNum,
4c90: 22 32 31 34 37 34 38 33 36 34 37 22 2c 31 30 29  "2147483647",10)
4ca0: 3c 3d 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  <=0);.}../*.** I
4cb0: 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  f zNum represent
4cc0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
4cd0: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 33 32  t will fit in 32
4ce0: 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a  -bits, then set.
4cf0: 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68  ** *pValue to th
4d00: 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72  at integer and r
4d10: 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68  eturn true.  Oth
4d20: 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 66 61  erwise return fa
4d30: 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  lse..*/.int sqli
4d40: 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
4d50: 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e  t char *zNum, in
4d60: 74 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66  t *pValue){.  if
4d70: 28 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e 33  ( sqlite3FitsIn3
4d80: 32 42 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20  2Bits(zNum) ){. 
4d90: 20 20 20 2a 70 56 61 6c 75 65 20 3d 20 61 74 6f     *pValue = ato
4da0: 69 28 7a 4e 75 6d 29 3b 0a 20 20 20 20 72 65 74  i(zNum);.    ret
4db0: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
4dc0: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
4dd0: 54 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20  The string zNum 
4de0: 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e  represents an in
4df0: 74 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69  teger.  There mi
4e00: 67 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65  ght be some othe
4e10: 72 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  r.** information
4e20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69   following the i
4e30: 6e 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20  nteger too, but 
4e40: 74 68 61 74 20 70 61 72 74 20 69 73 20 69 67 6e  that part is ign
4e50: 6f 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ored..** If the 
4e60: 69 6e 74 65 67 65 72 20 74 68 61 74 20 74 68 65  integer that the
4e70: 20 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20   prefix of zNum 
4e80: 72 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20  represents will 
4e90: 66 69 74 20 69 6e 20 61 0a 2a 2a 20 36 34 2d 62  fit in a.** 64-b
4ea0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
4eb0: 72 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20  r, return TRUE. 
4ec0: 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72   Otherwise retur
4ed0: 6e 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54  n FALSE..**.** T
4ee0: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
4ef0: 72 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68  rns FALSE for th
4f00: 65 20 73 74 72 69 6e 67 20 2d 39 32 32 33 33 37  e string -922337
4f10: 32 30 33 36 38 35 34 37 37 35 38 30 38 20 65 76  2036854775808 ev
4f20: 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74 20  en that.** that 
4f30: 6e 75 6d 62 65 72 20 77 69 6c 6c 2c 20 69 6e 20  number will, in 
4f40: 74 68 65 6f 72 79 20 66 69 74 20 69 6e 20 61 20  theory fit in a 
4f50: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 20  64-bit integer. 
4f60: 20 50 6f 73 69 74 69 76 65 0a 2a 2a 20 39 32 32   Positive.** 922
4f70: 33 33 37 33 30 33 36 38 35 34 37 37 35 38 30 38  3373036854775808
4f80: 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e   will not fit in
4f90: 20 36 34 20 62 69 74 73 2e 20 20 53 6f 20 69 74   64 bits.  So it
4fa0: 20 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20   seems safer to 
4fb0: 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e  return.** false.
4fc0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  .*/.int sqlite3F
4fd0: 69 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73  itsIn64Bits(cons
4fe0: 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20  t char *zNum){. 
4ff0: 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28   int i, c;.  if(
5000: 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a   *zNum=='-' || *
5010: 7a 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d  zNum=='+' ) zNum
5020: 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28  ++;.  for(i=0; (
5030: 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20  c=zNum[i])>='0' 
5040: 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b  && c<='9'; i++){
5050: 7d 0a 20 20 72 65 74 75 72 6e 20 69 3c 31 39 20  }.  return i<19 
5060: 7c 7c 20 28 69 3d 3d 31 39 20 26 26 20 6d 65 6d  || (i==19 && mem
5070: 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32 33 33 37  cmp(zNum,"922337
5080: 32 30 33 36 38 35 34 37 37 35 38 30 37 22 2c 31  2036854775807",1
5090: 39 29 3c 3d 30 29 3b 0a 7d 0a 0a 23 69 66 20 31  9)<=0);.}..#if 1
50a0: 20 20 2f 2a 20 57 65 20 61 72 65 20 6e 6f 77 20    /* We are now 
50b0: 61 6c 77 61 79 73 20 55 54 46 2d 38 20 2a 2f 0a  always UTF-8 */.
50c0: 2f 2a 0a 2a 2a 20 58 20 69 73 20 61 20 70 6f 69  /*.** X is a poi
50d0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
50e0: 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
50f0: 38 20 63 68 61 72 61 63 74 65 72 2e 20 20 49 6e  8 character.  In
5100: 63 72 65 6d 65 6e 74 0a 2a 2a 20 58 20 73 6f 20  crement.** X so 
5110: 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
5120: 6f 20 74 68 65 20 6e 65 78 74 20 63 68 61 72 61  o the next chara
5130: 63 74 65 72 2e 20 20 54 68 69 73 20 6f 6e 6c 79  cter.  This only
5140: 20 77 6f 72 6b 73 20 72 69 67 68 74 0a 2a 2a 20   works right.** 
5150: 69 66 20 58 20 70 6f 69 6e 74 73 20 74 6f 20 61  if X points to a
5160: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 55 54 46   well-formed UTF
5170: 2d 38 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64  -8 string..*/.#d
5180: 65 66 69 6e 65 20 73 71 6c 69 74 65 4e 65 78 74  efine sqliteNext
5190: 43 68 61 72 28 58 29 20 20 77 68 69 6c 65 28 20  Char(X)  while( 
51a0: 28 30 78 63 30 26 2a 2b 2b 28 58 29 29 3d 3d 30  (0xc0&*++(X))==0
51b0: 78 38 30 20 29 7b 7d 0a 23 64 65 66 69 6e 65 20  x80 ){}.#define 
51c0: 73 71 6c 69 74 65 43 68 61 72 56 61 6c 28 58 29  sqliteCharVal(X)
51d0: 20 20 20 73 71 6c 69 74 65 33 52 65 61 64 55 74     sqlite3ReadUt
51e0: 66 38 28 58 29 0a 0a 23 65 6c 73 65 20 2f 2a 20  f8(X)..#else /* 
51f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
5200: 55 54 46 38 29 20 2a 2f 0a 2f 2a 0a 2a 2a 20 46  UTF8) */./*.** F
5210: 6f 72 20 69 73 6f 38 38 35 39 20 65 6e 63 6f 64  or iso8859 encod
5220: 69 6e 67 2c 20 74 68 65 20 6e 65 78 74 20 63 68  ing, the next ch
5230: 61 72 61 63 74 65 72 20 69 73 20 6a 75 73 74 20  aracter is just 
5240: 74 68 65 20 6e 65 78 74 20 62 79 74 65 2e 0a 2a  the next byte..*
5250: 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
5260: 4e 65 78 74 43 68 61 72 28 58 29 20 20 28 2b 2b  NextChar(X)  (++
5270: 28 58 29 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  (X));.#define sq
5280: 6c 69 74 65 43 68 61 72 56 61 6c 28 58 29 20 20  liteCharVal(X)  
5290: 20 28 28 69 6e 74 29 2a 28 58 29 29 0a 0a 23 65   ((int)*(X))..#e
52a0: 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28  ndif /* defined(
52b0: 53 51 4c 49 54 45 5f 55 54 46 38 29 20 2a 2f 0a  SQLITE_UTF8) */.
52c0: 0a 0a 23 69 66 20 31 20 20 2f 2a 20 57 65 20 61  ..#if 1  /* We a
52d0: 72 65 20 6e 6f 77 20 61 6c 77 61 79 73 20 55 54  re now always UT
52e0: 46 2d 38 20 2a 2f 0a 2f 2a 0a 2a 2a 20 43 6f 6e  F-8 */./*.** Con
52f0: 76 65 72 74 20 74 68 65 20 55 54 46 2d 38 20 63  vert the UTF-8 c
5300: 68 61 72 61 63 74 65 72 20 74 6f 20 77 68 69 63  haracter to whic
5310: 68 20 7a 20 70 6f 69 6e 74 73 20 69 6e 74 6f 20  h z points into 
5320: 61 20 33 31 2d 62 69 74 0a 2a 2a 20 55 43 53 20  a 31-bit.** UCS 
5330: 63 68 61 72 61 63 74 65 72 2e 20 20 54 68 69 73  character.  This
5340: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 72 69 67 68   only works righ
5350: 74 20 69 66 20 7a 20 70 6f 69 6e 74 73 20 74 6f  t if z points to
5360: 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 2a   a well-formed.*
5370: 2a 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 0a  * UTF-8 string..
5380: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  */.int sqlite3Re
5390: 61 64 55 74 66 38 28 63 6f 6e 73 74 20 75 6e 73  adUtf8(const uns
53a0: 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 29 7b 0a  igned char *z){.
53b0: 20 20 69 6e 74 20 63 3b 0a 20 20 73 74 61 74 69    int c;.  stati
53c0: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 6e 69 74  c const int init
53d0: 56 61 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Val[] = {.      
53e0: 30 2c 20 20 20 31 2c 20 20 20 32 2c 20 20 20 33  0,   1,   2,   3
53f0: 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20 36 2c  ,   4,   5,   6,
5400: 20 20 20 37 2c 20 20 20 38 2c 20 20 20 39 2c 20     7,   8,   9, 
5410: 20 31 30 2c 20 20 31 31 2c 20 20 31 32 2c 20 20   10,  11,  12,  
5420: 31 33 2c 20 20 31 34 2c 0a 20 20 20 20 20 31 35  13,  14,.     15
5430: 2c 20 20 31 36 2c 20 20 31 37 2c 20 20 31 38 2c  ,  16,  17,  18,
5440: 20 20 31 39 2c 20 20 32 30 2c 20 20 32 31 2c 20    19,  20,  21, 
5450: 20 32 32 2c 20 20 32 33 2c 20 20 32 34 2c 20 20   22,  23,  24,  
5460: 32 35 2c 20 20 32 36 2c 20 20 32 37 2c 20 20 32  25,  26,  27,  2
5470: 38 2c 20 20 32 39 2c 0a 20 20 20 20 20 33 30 2c  8,  29,.     30,
5480: 20 20 33 31 2c 20 20 33 32 2c 20 20 33 33 2c 20    31,  32,  33, 
5490: 20 33 34 2c 20 20 33 35 2c 20 20 33 36 2c 20 20   34,  35,  36,  
54a0: 33 37 2c 20 20 33 38 2c 20 20 33 39 2c 20 20 34  37,  38,  39,  4
54b0: 30 2c 20 20 34 31 2c 20 20 34 32 2c 20 20 34 33  0,  41,  42,  43
54c0: 2c 20 20 34 34 2c 0a 20 20 20 20 20 34 35 2c 20  ,  44,.     45, 
54d0: 20 34 36 2c 20 20 34 37 2c 20 20 34 38 2c 20 20   46,  47,  48,  
54e0: 34 39 2c 20 20 35 30 2c 20 20 35 31 2c 20 20 35  49,  50,  51,  5
54f0: 32 2c 20 20 35 33 2c 20 20 35 34 2c 20 20 35 35  2,  53,  54,  55
5500: 2c 20 20 35 36 2c 20 20 35 37 2c 20 20 35 38 2c  ,  56,  57,  58,
5510: 20 20 35 39 2c 0a 20 20 20 20 20 36 30 2c 20 20    59,.     60,  
5520: 36 31 2c 20 20 36 32 2c 20 20 36 33 2c 20 20 36  61,  62,  63,  6
5530: 34 2c 20 20 36 35 2c 20 20 36 36 2c 20 20 36 37  4,  65,  66,  67
5540: 2c 20 20 36 38 2c 20 20 36 39 2c 20 20 37 30 2c  ,  68,  69,  70,
5550: 20 20 37 31 2c 20 20 37 32 2c 20 20 37 33 2c 20    71,  72,  73, 
5560: 20 37 34 2c 0a 20 20 20 20 20 37 35 2c 20 20 37   74,.     75,  7
5570: 36 2c 20 20 37 37 2c 20 20 37 38 2c 20 20 37 39  6,  77,  78,  79
5580: 2c 20 20 38 30 2c 20 20 38 31 2c 20 20 38 32 2c  ,  80,  81,  82,
5590: 20 20 38 33 2c 20 20 38 34 2c 20 20 38 35 2c 20    83,  84,  85, 
55a0: 20 38 36 2c 20 20 38 37 2c 20 20 38 38 2c 20 20   86,  87,  88,  
55b0: 38 39 2c 0a 20 20 20 20 20 39 30 2c 20 20 39 31  89,.     90,  91
55c0: 2c 20 20 39 32 2c 20 20 39 33 2c 20 20 39 34 2c  ,  92,  93,  94,
55d0: 20 20 39 35 2c 20 20 39 36 2c 20 20 39 37 2c 20    95,  96,  97, 
55e0: 20 39 38 2c 20 20 39 39 2c 20 31 30 30 2c 20 31   98,  99, 100, 1
55f0: 30 31 2c 20 31 30 32 2c 20 31 30 33 2c 20 31 30  01, 102, 103, 10
5600: 34 2c 0a 20 20 20 20 31 30 35 2c 20 31 30 36 2c  4,.    105, 106,
5610: 20 31 30 37 2c 20 31 30 38 2c 20 31 30 39 2c 20   107, 108, 109, 
5620: 31 31 30 2c 20 31 31 31 2c 20 31 31 32 2c 20 31  110, 111, 112, 1
5630: 31 33 2c 20 31 31 34 2c 20 31 31 35 2c 20 31 31  13, 114, 115, 11
5640: 36 2c 20 31 31 37 2c 20 31 31 38 2c 20 31 31 39  6, 117, 118, 119
5650: 2c 0a 20 20 20 20 31 32 30 2c 20 31 32 31 2c 20  ,.    120, 121, 
5660: 31 32 32 2c 20 31 32 33 2c 20 31 32 34 2c 20 31  122, 123, 124, 1
5670: 32 35 2c 20 31 32 36 2c 20 31 32 37 2c 20 31 32  25, 126, 127, 12
5680: 38 2c 20 31 32 39 2c 20 31 33 30 2c 20 31 33 31  8, 129, 130, 131
5690: 2c 20 31 33 32 2c 20 31 33 33 2c 20 31 33 34 2c  , 132, 133, 134,
56a0: 0a 20 20 20 20 31 33 35 2c 20 31 33 36 2c 20 31  .    135, 136, 1
56b0: 33 37 2c 20 31 33 38 2c 20 31 33 39 2c 20 31 34  37, 138, 139, 14
56c0: 30 2c 20 31 34 31 2c 20 31 34 32 2c 20 31 34 33  0, 141, 142, 143
56d0: 2c 20 31 34 34 2c 20 31 34 35 2c 20 31 34 36 2c  , 144, 145, 146,
56e0: 20 31 34 37 2c 20 31 34 38 2c 20 31 34 39 2c 0a   147, 148, 149,.
56f0: 20 20 20 20 31 35 30 2c 20 31 35 31 2c 20 31 35      150, 151, 15
5700: 32 2c 20 31 35 33 2c 20 31 35 34 2c 20 31 35 35  2, 153, 154, 155
5710: 2c 20 31 35 36 2c 20 31 35 37 2c 20 31 35 38 2c  , 156, 157, 158,
5720: 20 31 35 39 2c 20 31 36 30 2c 20 31 36 31 2c 20   159, 160, 161, 
5730: 31 36 32 2c 20 31 36 33 2c 20 31 36 34 2c 0a 20  162, 163, 164,. 
5740: 20 20 20 31 36 35 2c 20 31 36 36 2c 20 31 36 37     165, 166, 167
5750: 2c 20 31 36 38 2c 20 31 36 39 2c 20 31 37 30 2c  , 168, 169, 170,
5760: 20 31 37 31 2c 20 31 37 32 2c 20 31 37 33 2c 20   171, 172, 173, 
5770: 31 37 34 2c 20 31 37 35 2c 20 31 37 36 2c 20 31  174, 175, 176, 1
5780: 37 37 2c 20 31 37 38 2c 20 31 37 39 2c 0a 20 20  77, 178, 179,.  
5790: 20 20 31 38 30 2c 20 31 38 31 2c 20 31 38 32 2c    180, 181, 182,
57a0: 20 31 38 33 2c 20 31 38 34 2c 20 31 38 35 2c 20   183, 184, 185, 
57b0: 31 38 36 2c 20 31 38 37 2c 20 31 38 38 2c 20 31  186, 187, 188, 1
57c0: 38 39 2c 20 31 39 30 2c 20 31 39 31 2c 20 20 20  89, 190, 191,   
57d0: 30 2c 20 20 20 31 2c 20 20 20 32 2c 0a 20 20 20  0,   1,   2,.   
57e0: 20 20 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20     3,   4,   5, 
57f0: 20 20 36 2c 20 20 20 37 2c 20 20 20 38 2c 20 20    6,   7,   8,  
5800: 20 39 2c 20 20 31 30 2c 20 20 31 31 2c 20 20 31   9,  10,  11,  1
5810: 32 2c 20 20 31 33 2c 20 20 31 34 2c 20 20 31 35  2,  13,  14,  15
5820: 2c 20 20 31 36 2c 20 20 31 37 2c 0a 20 20 20 20  ,  16,  17,.    
5830: 20 31 38 2c 20 20 31 39 2c 20 20 32 30 2c 20 20   18,  19,  20,  
5840: 32 31 2c 20 20 32 32 2c 20 20 32 33 2c 20 20 32  21,  22,  23,  2
5850: 34 2c 20 20 32 35 2c 20 20 32 36 2c 20 20 32 37  4,  25,  26,  27
5860: 2c 20 20 32 38 2c 20 20 32 39 2c 20 20 33 30 2c  ,  28,  29,  30,
5870: 20 20 33 31 2c 20 20 20 30 2c 0a 20 20 20 20 20    31,   0,.     
5880: 20 31 2c 20 20 20 32 2c 20 20 20 33 2c 20 20 20   1,   2,   3,   
5890: 34 2c 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37  4,   5,   6,   7
58a0: 2c 20 20 20 38 2c 20 20 20 39 2c 20 20 31 30 2c  ,   8,   9,  10,
58b0: 20 20 31 31 2c 20 20 31 32 2c 20 20 31 33 2c 20    11,  12,  13, 
58c0: 20 31 34 2c 20 20 31 35 2c 0a 20 20 20 20 20 20   14,  15,.      
58d0: 30 2c 20 20 20 31 2c 20 20 20 32 2c 20 20 20 33  0,   1,   2,   3
58e0: 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20 36 2c  ,   4,   5,   6,
58f0: 20 20 20 37 2c 20 20 20 30 2c 20 20 20 31 2c 20     7,   0,   1, 
5900: 20 20 32 2c 20 20 20 33 2c 20 20 20 30 2c 20 20    2,   3,   0,  
5910: 20 31 2c 20 32 35 34 2c 0a 20 20 20 20 32 35 35   1, 254,.    255
5920: 2c 0a 20 20 7d 3b 0a 20 20 63 20 3d 20 69 6e 69  ,.  };.  c = ini
5930: 74 56 61 6c 5b 2a 28 7a 2b 2b 29 5d 3b 0a 20 20  tVal[*(z++)];.  
5940: 77 68 69 6c 65 28 20 28 30 78 63 30 26 2a 7a 29  while( (0xc0&*z)
5950: 3d 3d 30 78 38 30 20 29 7b 0a 20 20 20 20 63 20  ==0x80 ){.    c 
5960: 3d 20 28 63 3c 3c 36 29 20 7c 20 28 30 78 33 66  = (c<<6) | (0x3f
5970: 26 2a 28 7a 2b 2b 29 29 3b 0a 20 20 7d 0a 20 20  &*(z++));.  }.  
5980: 72 65 74 75 72 6e 20 63 3b 0a 7d 0a 23 65 6e 64  return c;.}.#end
5990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72  if../*.** Compar
59a0: 65 20 74 77 6f 20 55 54 46 2d 38 20 73 74 72 69  e two UTF-8 stri
59b0: 6e 67 73 20 66 6f 72 20 65 71 75 61 6c 69 74 79  ngs for equality
59c0: 20 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74   where the first
59d0: 20 73 74 72 69 6e 67 20 63 61 6e 0a 2a 2a 20 70   string can.** p
59e0: 6f 74 65 6e 74 69 61 6c 6c 79 20 62 65 20 61 20  otentially be a 
59f0: 22 67 6c 6f 62 22 20 65 78 70 72 65 73 73 69 6f  "glob" expressio
5a00: 6e 2e 20 20 52 65 74 75 72 6e 20 74 72 75 65 20  n.  Return true 
5a10: 28 31 29 20 69 66 20 74 68 65 79 0a 2a 2a 20 61  (1) if they.** a
5a20: 72 65 20 74 68 65 20 73 61 6d 65 20 61 6e 64 20  re the same and 
5a30: 66 61 6c 73 65 20 28 30 29 20 69 66 20 74 68 65  false (0) if the
5a40: 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e  y are different.
5a50: 0a 2a 2a 0a 2a 2a 20 47 6c 6f 62 62 69 6e 67 20  .**.** Globbing 
5a60: 72 75 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rules:.**.**    
5a70: 20 20 27 2a 27 20 20 20 20 20 20 20 4d 61 74 63    '*'       Matc
5a80: 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65  hes any sequence
5a90: 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
5aa0: 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
5ab0: 2a 2a 20 20 20 20 20 20 27 3f 27 20 20 20 20 20  **      '?'     
5ac0: 20 20 4d 61 74 63 68 65 73 20 65 78 61 63 74 6c    Matches exactl
5ad0: 79 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 2e  y one character.
5ae0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 2e 2e 2e 5d  .**.**     [...]
5af0: 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e        Matches on
5b00: 65 20 63 68 61 72 61 63 74 65 72 20 66 72 6f 6d  e character from
5b10: 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69   the enclosed li
5b20: 73 74 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  st of.**        
5b30: 20 20 20 20 20 20 20 20 63 68 61 72 61 63 74 65          characte
5b40: 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 5e  rs..**.**     [^
5b50: 2e 2e 2e 5d 20 20 20 20 20 4d 61 74 63 68 65 73  ...]     Matches
5b60: 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20 6e   one character n
5b70: 6f 74 20 69 6e 20 74 68 65 20 65 6e 63 6c 6f 73  ot in the enclos
5b80: 65 64 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 57  ed list..**.** W
5b90: 69 74 68 20 74 68 65 20 5b 2e 2e 2e 5d 20 61 6e  ith the [...] an
5ba0: 64 20 5b 5e 2e 2e 2e 5d 20 6d 61 74 63 68 69 6e  d [^...] matchin
5bb0: 67 2c 20 61 20 27 5d 27 20 63 68 61 72 61 63 74  g, a ']' charact
5bc0: 65 72 20 63 61 6e 20 62 65 20 69 6e 63 6c 75 64  er can be includ
5bd0: 65 64 0a 2a 2a 20 69 6e 20 74 68 65 20 6c 69 73  ed.** in the lis
5be0: 74 20 62 79 20 6d 61 6b 69 6e 67 20 69 74 20 74  t by making it t
5bf0: 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
5c00: 65 72 20 61 66 74 65 72 20 27 5b 27 20 6f 72 20  er after '[' or 
5c10: 27 5e 27 2e 20 20 41 0a 2a 2a 20 72 61 6e 67 65  '^'.  A.** range
5c20: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 63   of characters c
5c30: 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64 20  an be specified 
5c40: 75 73 69 6e 67 20 27 2d 27 2e 20 20 45 78 61 6d  using '-'.  Exam
5c50: 70 6c 65 3a 0a 2a 2a 20 22 5b 61 2d 7a 5d 22 20  ple:.** "[a-z]" 
5c60: 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67  matches any sing
5c70: 6c 65 20 6c 6f 77 65 72 2d 63 61 73 65 20 6c 65  le lower-case le
5c80: 74 74 65 72 2e 20 20 54 6f 20 6d 61 74 63 68 20  tter.  To match 
5c90: 61 20 27 2d 27 2c 20 6d 61 6b 65 0a 2a 2a 20 69  a '-', make.** i
5ca0: 74 20 74 68 65 20 6c 61 73 74 20 63 68 61 72 61  t the last chara
5cb0: 63 74 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  cter in the list
5cc0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
5cd0: 74 69 6e 65 20 69 73 20 75 73 75 61 6c 6c 79 20  tine is usually 
5ce0: 71 75 69 63 6b 2c 20 62 75 74 20 63 61 6e 20 62  quick, but can b
5cf0: 65 20 4e 2a 2a 32 20 69 6e 20 74 68 65 20 77 6f  e N**2 in the wo
5d00: 72 73 74 20 63 61 73 65 2e 0a 2a 2a 0a 2a 2a 20  rst case..**.** 
5d10: 48 69 6e 74 73 3a 20 74 6f 20 6d 61 74 63 68 20  Hints: to match 
5d20: 27 2a 27 20 6f 72 20 27 3f 27 2c 20 70 75 74 20  '*' or '?', put 
5d30: 74 68 65 6d 20 69 6e 20 22 5b 5d 22 2e 20 20 4c  them in "[]".  L
5d40: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
5d50: 20 20 20 20 20 20 20 20 61 62 63 5b 2a 5d 78 79          abc[*]xy
5d60: 7a 20 20 20 20 20 20 20 20 4d 61 74 63 68 65 73  z        Matches
5d70: 20 22 61 62 63 2a 78 79 7a 22 20 6f 6e 6c 79 0a   "abc*xyz" only.
5d80: 2a 2f 0a 69 6e 74 20 0a 73 71 6c 69 74 65 33 47  */.int .sqlite3G
5d90: 6c 6f 62 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74  lobCompare(const
5da0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
5db0: 7a 50 61 74 74 65 72 6e 2c 20 63 6f 6e 73 74 20  zPattern, const 
5dc0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
5dd0: 53 74 72 69 6e 67 29 7b 0a 20 20 72 65 67 69 73  String){.  regis
5de0: 74 65 72 20 69 6e 74 20 63 3b 0a 20 20 69 6e 74  ter int c;.  int
5df0: 20 69 6e 76 65 72 74 3b 0a 20 20 69 6e 74 20 73   invert;.  int s
5e00: 65 65 6e 3b 0a 20 20 69 6e 74 20 63 32 3b 0a 0a  een;.  int c2;..
5e10: 20 20 77 68 69 6c 65 28 20 28 63 20 3d 20 2a 7a    while( (c = *z
5e20: 50 61 74 74 65 72 6e 29 21 3d 30 20 29 7b 0a 20  Pattern)!=0 ){. 
5e30: 20 20 20 73 77 69 74 63 68 28 20 63 20 29 7b 0a     switch( c ){.
5e40: 20 20 20 20 20 20 63 61 73 65 20 27 2a 27 3a 0a        case '*':.
5e50: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 28          while( (
5e60: 63 3d 7a 50 61 74 74 65 72 6e 5b 31 5d 29 20 3d  c=zPattern[1]) =
5e70: 3d 20 27 2a 27 20 7c 7c 20 63 20 3d 3d 20 27 3f  = '*' || c == '?
5e80: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ' ){.          i
5e90: 66 28 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20 20  f( c=='?' ){.   
5ea0: 20 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53           if( *zS
5eb0: 74 72 69 6e 67 3d 3d 30 20 29 20 72 65 74 75 72  tring==0 ) retur
5ec0: 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  n 0;.           
5ed0: 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28   sqliteNextChar(
5ee0: 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  zString);.      
5ef0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
5f00: 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20  zPattern++;.    
5f10: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
5f20: 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( c==0 ) return 
5f30: 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  1;.        if( c
5f40: 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20 20  =='[' ){.       
5f50: 20 20 20 77 68 69 6c 65 28 20 2a 7a 53 74 72 69     while( *zStri
5f60: 6e 67 20 26 26 20 73 71 6c 69 74 65 33 47 6c 6f  ng && sqlite3Glo
5f70: 62 43 6f 6d 70 61 72 65 28 26 7a 50 61 74 74 65  bCompare(&zPatte
5f80: 72 6e 5b 31 5d 2c 7a 53 74 72 69 6e 67 29 3d 3d  rn[1],zString)==
5f90: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
5fa0: 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28   sqliteNextChar(
5fb0: 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  zString);.      
5fc0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
5fd0: 72 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e 67 21  return *zString!
5fe0: 3d 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  =0;.        }els
5ff0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  e{.          whi
6000: 6c 65 28 20 28 63 32 20 3d 20 2a 7a 53 74 72 69  le( (c2 = *zStri
6010: 6e 67 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ng)!=0 ){.      
6020: 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 32 20        while( c2 
6030: 21 3d 20 30 20 26 26 20 63 32 20 21 3d 20 63 20  != 0 && c2 != c 
6040: 29 7b 20 63 32 20 3d 20 2a 2b 2b 7a 53 74 72 69  ){ c2 = *++zStri
6050: 6e 67 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  ng; }.          
6060: 20 20 69 66 28 20 63 32 3d 3d 30 20 29 20 72 65    if( c2==0 ) re
6070: 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20  turn 0;.        
6080: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
6090: 6c 6f 62 43 6f 6d 70 61 72 65 28 26 7a 50 61 74  lobCompare(&zPat
60a0: 74 65 72 6e 5b 31 5d 2c 7a 53 74 72 69 6e 67 29  tern[1],zString)
60b0: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20   ) return 1;.   
60c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 4e           sqliteN
60d0: 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67 29  extChar(zString)
60e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
60f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
6100: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6110: 20 20 63 61 73 65 20 27 3f 27 3a 20 7b 0a 20 20    case '?': {.  
6120: 20 20 20 20 20 20 69 66 28 20 2a 7a 53 74 72 69        if( *zStri
6130: 6e 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ng==0 ) return 0
6140: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
6150: 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67  NextChar(zString
6160: 29 3b 0a 20 20 20 20 20 20 20 20 7a 50 61 74 74  );.        zPatt
6170: 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 62  ern++;.        b
6180: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
6190: 20 20 20 20 63 61 73 65 20 27 5b 27 3a 20 7b 0a      case '[': {.
61a0: 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 69 6f          int prio
61b0: 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  r_c = 0;.       
61c0: 20 73 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20   seen = 0;.     
61d0: 20 20 20 69 6e 76 65 72 74 20 3d 20 30 3b 0a 20     invert = 0;. 
61e0: 20 20 20 20 20 20 20 63 20 3d 20 73 71 6c 69 74         c = sqlit
61f0: 65 43 68 61 72 56 61 6c 28 7a 53 74 72 69 6e 67  eCharVal(zString
6200: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  );.        if( c
6210: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
6220: 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 2b 2b          c2 = *++
6230: 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20 20  zPattern;.      
6240: 20 20 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b    if( c2=='^' ){
6250: 20 69 6e 76 65 72 74 20 3d 20 31 3b 20 63 32 20   invert = 1; c2 
6260: 3d 20 2a 2b 2b 7a 50 61 74 74 65 72 6e 3b 20 7d  = *++zPattern; }
6270: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d  .        if( c2=
6280: 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  =']' ){.        
6290: 20 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20 73    if( c==']' ) s
62a0: 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  een = 1;.       
62b0: 20 20 20 63 32 20 3d 20 2a 2b 2b 7a 50 61 74 74     c2 = *++zPatt
62c0: 65 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ern;.        }. 
62d0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63         while( (c
62e0: 32 20 3d 20 73 71 6c 69 74 65 43 68 61 72 56 61  2 = sqliteCharVa
62f0: 6c 28 7a 50 61 74 74 65 72 6e 29 29 21 3d 30 20  l(zPattern))!=0 
6300: 26 26 20 63 32 21 3d 27 5d 27 20 29 7b 0a 20 20  && c2!=']' ){.  
6310: 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d          if( c2==
6320: 27 2d 27 20 26 26 20 7a 50 61 74 74 65 72 6e 5b  '-' && zPattern[
6330: 31 5d 21 3d 27 5d 27 20 26 26 20 7a 50 61 74 74  1]!=']' && zPatt
6340: 65 72 6e 5b 31 5d 21 3d 30 20 26 26 20 70 72 69  ern[1]!=0 && pri
6350: 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20 20 20 20  or_c>0 ){.      
6360: 20 20 20 20 20 20 7a 50 61 74 74 65 72 6e 2b 2b        zPattern++
6370: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 32  ;.            c2
6380: 20 3d 20 73 71 6c 69 74 65 43 68 61 72 56 61 6c   = sqliteCharVal
6390: 28 7a 50 61 74 74 65 72 6e 29 3b 0a 20 20 20 20  (zPattern);.    
63a0: 20 20 20 20 20 20 20 20 69 66 28 20 63 3e 3d 70          if( c>=p
63b0: 72 69 6f 72 5f 63 20 26 26 20 63 3c 3d 63 32 20  rior_c && c<=c2 
63c0: 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20  ) seen = 1;.    
63d0: 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63 20          prior_c 
63e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 0;.          }
63f0: 65 6c 73 65 20 69 66 28 20 63 3d 3d 63 32 20 29  else if( c==c2 )
6400: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
6410: 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
6420: 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 63 32      prior_c = c2
6430: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
6440: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  e{.            p
6450: 72 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20  rior_c = c2;.   
6460: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6470: 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61     sqliteNextCha
6480: 72 28 7a 50 61 74 74 65 72 6e 29 3b 0a 20 20 20  r(zPattern);.   
6490: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
64a0: 66 28 20 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65  f( c2==0 || (see
64b0: 6e 20 5e 20 69 6e 76 65 72 74 29 3d 3d 30 20 29  n ^ invert)==0 )
64c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
64d0: 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61     sqliteNextCha
64e0: 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20  r(zString);.    
64f0: 20 20 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a      zPattern++;.
6500: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
6510: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
6520: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
6530: 69 66 28 20 63 20 21 3d 20 2a 7a 53 74 72 69 6e  if( c != *zStrin
6540: 67 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  g ) return 0;.  
6550: 20 20 20 20 20 20 7a 50 61 74 74 65 72 6e 2b 2b        zPattern++
6560: 3b 0a 20 20 20 20 20 20 20 20 7a 53 74 72 69 6e  ;.        zStrin
6570: 67 2b 2b 3b 0a 20 20 20 20 20 20 20 20 62 72 65  g++;.        bre
6580: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
6590: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a  }.  }.  return *
65a0: 7a 53 74 72 69 6e 67 3d 3d 30 3b 0a 7d 0a 0a 2f  zString==0;.}../
65b0: 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
65c0: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 72 6f  sqlite.magic fro
65d0: 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  m SQLITE_MAGIC_O
65e0: 50 45 4e 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41  PEN to SQLITE_MA
65f0: 47 49 43 5f 42 55 53 59 2e 0a 2a 2a 20 52 65 74  GIC_BUSY..** Ret
6600: 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e 6f  urn an error (no
6610: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 6d  n-zero) if the m
6620: 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51 4c  agic was not SQL
6630: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 0a 2a  ITE_MAGIC_OPEN.*
6640: 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74  * when this rout
6650: 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a 2a  ine is called..*
6660: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
6670: 65 20 69 73 20 61 20 61 74 74 65 6d 70 74 20 74  e is a attempt t
6680: 6f 20 64 65 74 65 63 74 20 69 66 20 74 77 6f 20  o detect if two 
6690: 74 68 72 65 61 64 73 20 75 73 65 20 74 68 65 0a  threads use the.
66a0: 2a 2a 20 73 61 6d 65 20 73 71 6c 69 74 65 2a 20  ** same sqlite* 
66b0: 70 6f 69 6e 74 65 72 20 61 74 20 74 68 65 20 73  pointer at the s
66c0: 61 6d 65 20 74 69 6d 65 2e 20 20 54 68 65 72 65  ame time.  There
66d0: 20 69 73 20 61 20 72 61 63 65 20 0a 2a 2a 20 63   is a race .** c
66e0: 6f 6e 64 69 74 69 6f 6e 20 73 6f 20 69 74 20 69  ondition so it i
66f0: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
6700: 74 68 65 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  the error is not
6710: 20 64 65 74 65 63 74 65 64 2e 0a 2a 2a 20 42 75   detected..** Bu
6720: 74 20 75 73 75 61 6c 6c 79 20 74 68 65 20 70 72  t usually the pr
6730: 6f 62 6c 65 6d 20 77 69 6c 6c 20 62 65 20 73 65  oblem will be se
6740: 65 6e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  en.  The result 
6750: 77 69 6c 6c 20 62 65 20 61 6e 0a 2a 2a 20 65 72  will be an.** er
6760: 72 6f 72 20 77 68 69 63 68 20 63 61 6e 20 62 65  ror which can be
6770: 20 75 73 65 64 20 74 6f 20 64 65 62 75 67 20 74   used to debug t
6780: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
6790: 68 61 74 20 69 73 0a 2a 2a 20 75 73 69 6e 67 20  hat is.** using 
67a0: 53 51 4c 69 74 65 20 69 6e 63 6f 72 72 65 63 74  SQLite incorrect
67b0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  ly..**.** Ticket
67c0: 20 23 32 30 32 3a 20 20 49 66 20 64 62 2d 3e 6d   #202:  If db->m
67d0: 61 67 69 63 20 69 73 20 6e 6f 74 20 61 20 76 61  agic is not a va
67e0: 6c 69 64 20 6f 70 65 6e 20 76 61 6c 75 65 2c 20  lid open value, 
67f0: 74 61 6b 65 20 63 61 72 65 20 6e 6f 74 0a 2a 2a  take care not.**
6800: 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 64   to modify the d
6810: 62 20 73 74 72 75 63 74 75 72 65 20 61 74 20 61  b structure at a
6820: 6c 6c 2e 20 20 49 74 20 63 6f 75 6c 64 20 62 65  ll.  It could be
6830: 20 74 68 61 74 20 64 62 20 69 73 20 61 20 73 74   that db is a st
6840: 61 6c 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 2e 20  ale.** pointer. 
6850: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
6860: 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61   it could be tha
6870: 74 20 74 68 65 72 65 20 68 61 73 20 62 65 65 6e  t there has been
6880: 20 61 20 70 72 69 6f 72 0a 2a 2a 20 63 61 6c 6c   a prior.** call
6890: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73   to sqlite3_clos
68a0: 65 28 64 62 29 20 61 6e 64 20 64 62 20 68 61 73  e(db) and db has
68b0: 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65   been deallocate
68c0: 64 2e 20 20 41 6e 64 20 77 65 20 64 6f 0a 2a 2a  d.  And we do.**
68d0: 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20 77 72 69   not want to wri
68e0: 74 65 20 69 6e 74 6f 20 64 65 61 6c 6c 6f 63 61  te into dealloca
68f0: 74 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 69  ted memory..*/.i
6900: 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
6910: 4f 6e 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  On(sqlite *db){.
6920: 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d    if( db->magic=
6930: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50  =SQLITE_MAGIC_OP
6940: 45 4e 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  EN ){.    db->ma
6950: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
6960: 49 43 5f 42 55 53 59 3b 0a 20 20 20 20 72 65 74  IC_BUSY;.    ret
6970: 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69  urn 0;.  }else i
6980: 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51  f( db->magic==SQ
6990: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
69a0: 7c 7c 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51  || db->magic==SQ
69b0: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
69c0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
69d0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
69e0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62 2d 3e  _ERROR;.    db->
69f0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
6a00: 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  Interrupt;.  }. 
6a10: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
6a20: 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6d  .** Change the m
6a30: 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45  agic from SQLITE
6a40: 5f 4d 41 47 49 43 5f 42 55 53 59 20 74 6f 20 53  _MAGIC_BUSY to S
6a50: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
6a60: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65  ..** Return an e
6a70: 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  rror (non-zero) 
6a80: 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61 73  if the magic was
6a90: 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49   not SQLITE_MAGI
6aa0: 43 5f 42 55 53 59 0a 2a 2a 20 77 68 65 6e 20 74  C_BUSY.** when t
6ab0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
6ac0: 61 6c 6c 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  alled..*/.int sq
6ad0: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 73  lite3SafetyOff(s
6ae0: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 66  qlite *db){.  if
6af0: 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c  ( db->magic==SQL
6b00: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29  ITE_MAGIC_BUSY )
6b10: 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
6b20: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  = SQLITE_MAGIC_O
6b30: 50 45 4e 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  PEN;.    return 
6b40: 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  0;.  }else if( d
6b50: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
6b60: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 7c 7c 20 64  _MAGIC_OPEN || d
6b70: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
6b80: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 29 7b 0a  _MAGIC_ERROR ){.
6b90: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
6ba0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
6bb0: 4f 52 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  OR;.    db->flag
6bc0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
6bd0: 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74  rrupt;.  }.  ret
6be0: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
6bf0: 43 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75  Check to make su
6c00: 72 65 20 77 65 20 61 72 65 20 6e 6f 74 20 63 75  re we are not cu
6c10: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
6c20: 67 20 61 6e 20 73 71 6c 69 74 65 33 5f 65 78 65  g an sqlite3_exe
6c30: 63 28 29 2e 0a 2a 2a 20 49 66 20 77 65 20 61 72  c()..** If we ar
6c40: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  e currently in a
6c50: 6e 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  n sqlite3_exec()
6c60: 2c 20 72 65 74 75 72 6e 20 74 72 75 65 20 61 6e  , return true an
6c70: 64 20 73 65 74 0a 2a 2a 20 73 71 6c 69 74 65 2e  d set.** sqlite.
6c80: 6d 61 67 69 63 20 74 6f 20 53 51 4c 49 54 45 5f  magic to SQLITE_
6c90: 4d 41 47 49 43 5f 45 52 52 4f 52 2e 20 20 54 68  MAGIC_ERROR.  Th
6ca0: 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 61 20  is will cause a 
6cb0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 73 68 75 74  complete.** shut
6cc0: 64 6f 77 6e 20 6f 66 20 74 68 65 20 64 61 74 61  down of the data
6cd0: 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  base..**.** This
6ce0: 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64   routine is used
6cf0: 20 74 6f 20 74 72 79 20 74 6f 20 64 65 74 65 63   to try to detec
6d00: 74 20 77 68 65 6e 20 41 50 49 20 72 6f 75 74 69  t when API routi
6d10: 6e 65 73 20 61 72 65 20 63 61 6c 6c 65 64 0a 2a  nes are called.*
6d20: 2a 20 61 74 20 74 68 65 20 77 72 6f 6e 67 20 74  * at the wrong t
6d30: 69 6d 65 20 6f 72 20 69 6e 20 74 68 65 20 77 72  ime or in the wr
6d40: 6f 6e 67 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2f  ong sequence..*/
6d50: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
6d60: 74 79 43 68 65 63 6b 28 73 71 6c 69 74 65 20 2a  tyCheck(sqlite *
6d70: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 70  db){.  if( db->p
6d80: 56 64 62 65 21 3d 30 20 29 7b 0a 20 20 20 20 64  Vdbe!=0 ){.    d
6d90: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
6da0: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
6db0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
6dc0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
6dd0: 2f 2a 0a 2a 2a 20 54 68 65 20 76 61 72 69 61 62  /*.** The variab
6de0: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
6df0: 72 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 61 73  r encoding is as
6e00: 20 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20   follows:.**.** 
6e10: 4b 45 59 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20  KEY:.**         
6e20: 41 20 3d 20 30 78 78 78 78 78 78 78 20 20 20 20  A = 0xxxxxxx    
6e30: 37 20 62 69 74 73 20 6f 66 20 64 61 74 61 20 61  7 bits of data a
6e40: 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a  nd one flag bit.
6e50: 2a 2a 20 20 20 20 20 20 20 20 20 42 20 3d 20 31  **         B = 1
6e60: 78 78 78 78 78 78 78 20 20 20 20 37 20 62 69 74  xxxxxxx    7 bit
6e70: 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e  s of data and on
6e80: 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20  e flag bit.**   
6e90: 20 20 20 20 20 20 43 20 3d 20 78 78 78 78 78 78        C = xxxxxx
6ea0: 78 78 20 20 20 20 38 20 62 69 74 73 20 6f 66 20  xx    8 bits of 
6eb0: 64 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69  data.**.**  7 bi
6ec0: 74 73 20 2d 20 41 0a 2a 2a 20 31 34 20 62 69 74  ts - A.** 14 bit
6ed0: 73 20 2d 20 42 41 0a 2a 2a 20 32 31 20 62 69 74  s - BA.** 21 bit
6ee0: 73 20 2d 20 42 42 41 0a 2a 2a 20 32 38 20 62 69  s - BBA.** 28 bi
6ef0: 74 73 20 2d 20 42 42 42 41 0a 2a 2a 20 33 35 20  ts - BBBA.** 35 
6f00: 62 69 74 73 20 2d 20 42 42 42 42 41 0a 2a 2a 20  bits - BBBBA.** 
6f10: 34 32 20 62 69 74 73 20 2d 20 42 42 42 42 42 41  42 bits - BBBBBA
6f20: 0a 2a 2a 20 34 39 20 62 69 74 73 20 2d 20 42 42  .** 49 bits - BB
6f30: 42 42 42 42 41 0a 2a 2a 20 35 36 20 62 69 74 73  BBBBA.** 56 bits
6f40: 20 2d 20 42 42 42 42 42 42 42 41 0a 2a 2a 20 36   - BBBBBBBA.** 6
6f50: 34 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42  4 bits - BBBBBBB
6f60: 42 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69  BC.*/../*.** Wri
6f70: 74 65 20 61 20 36 34 2d 62 69 74 20 76 61 72 69  te a 64-bit vari
6f80: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
6f90: 67 65 72 20 74 6f 20 6d 65 6d 6f 72 79 20 73 74  ger to memory st
6fa0: 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a  arting at p[0]..
6fb0: 2a 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  ** The length of
6fc0: 20 64 61 74 61 20 77 72 69 74 65 20 77 69 6c 6c   data write will
6fd0: 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
6fe0: 64 20 39 20 62 79 74 65 73 2e 20 20 54 68 65 20  d 9 bytes.  The 
6ff0: 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20 62 79 74  number.** of byt
7000: 65 73 20 77 72 69 74 74 65 6e 20 69 73 20 72 65  es written is re
7010: 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  turned..**.** A 
7020: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
7030: 69 6e 74 65 67 65 72 20 63 6f 6e 73 69 73 74 73  integer consists
7040: 20 6f 66 20 74 68 65 20 6c 6f 77 65 72 20 37 20   of the lower 7 
7050: 62 69 74 73 20 6f 66 20 65 61 63 68 20 62 79 74  bits of each byt
7060: 65 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20 62 79 74  e.** for all byt
7070: 65 73 20 74 68 61 74 20 68 61 76 65 20 74 68 65  es that have the
7080: 20 38 74 68 20 62 69 74 20 73 65 74 20 61 6e 64   8th bit set and
7090: 20 6f 6e 65 20 62 79 74 65 20 77 69 74 68 20 74   one byte with t
70a0: 68 65 20 38 74 68 0a 2a 2a 20 62 69 74 20 63 6c  he 8th.** bit cl
70b0: 65 61 72 2e 20 20 45 78 63 65 70 74 2c 20 69 66  ear.  Except, if
70c0: 20 77 65 20 67 65 74 20 74 6f 20 74 68 65 20 39   we get to the 9
70d0: 74 68 20 62 79 74 65 2c 20 69 74 20 73 74 6f 72  th byte, it stor
70e0: 65 73 20 74 68 65 20 66 75 6c 6c 0a 2a 2a 20 38  es the full.** 8
70f0: 20 62 69 74 73 20 61 6e 64 20 69 73 20 74 68 65   bits and is the
7100: 20 6c 61 73 74 20 62 79 74 65 2e 0a 2a 2f 0a 69   last byte..*/.i
7110: 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
7120: 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
7130: 72 20 2a 70 2c 20 75 36 34 20 76 29 7b 0a 20 20  r *p, u64 v){.  
7140: 69 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75  int i, j, n;.  u
7150: 38 20 62 75 66 5b 31 30 5d 3b 0a 20 20 69 66 28  8 buf[10];.  if(
7160: 20 76 20 26 20 30 78 66 66 30 30 30 30 30 30 30   v & 0xff0000000
7170: 30 30 30 30 30 30 30 20 29 7b 0a 20 20 20 20 70  0000000 ){.    p
7180: 5b 38 5d 20 3d 20 76 3b 0a 20 20 20 20 76 20 3e  [8] = v;.    v >
7190: 3e 3d 20 38 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >= 8;.    for(i=
71a0: 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20  7; i>=0; i--){. 
71b0: 20 20 20 20 20 70 5b 69 5d 20 3d 20 28 76 20 26       p[i] = (v &
71c0: 20 30 78 37 66 29 20 7c 20 30 78 38 30 3b 0a 20   0x7f) | 0x80;. 
71d0: 20 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20       v >>= 7;.  
71e0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 39    }.    return 9
71f0: 3b 0a 20 20 7d 20 20 20 20 0a 20 20 6e 20 3d 20  ;.  }    .  n = 
7200: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 62 75 66  0;.  do{.    buf
7210: 5b 6e 2b 2b 5d 20 3d 20 28 76 20 26 20 30 78 37  [n++] = (v & 0x7
7220: 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 76  f) | 0x80;.    v
7230: 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65   >>= 7;.  }while
7240: 28 20 76 21 3d 30 20 29 3b 0a 20 20 62 75 66 5b  ( v!=0 );.  buf[
7250: 30 5d 20 26 3d 20 30 78 37 66 3b 0a 20 20 61 73  0] &= 0x7f;.  as
7260: 73 65 72 74 28 20 6e 3c 3d 39 20 29 3b 0a 20 20  sert( n<=9 );.  
7270: 66 6f 72 28 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20  for(i=0, j=n-1; 
7280: 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b  j>=0; j--, i++){
7290: 0a 20 20 20 20 70 5b 69 5d 20 3d 20 62 75 66 5b  .    p[i] = buf[
72a0: 6a 5d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  j];.  }.  return
72b0: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61   n;.}../*.** Rea
72c0: 64 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61  d a 64-bit varia
72d0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
72e0: 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73  er from memory s
72f0: 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e  tarting at p[0].
7300: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
7310: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
7320: 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ead.  The value 
7330: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e  is stored in *v.
7340: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
7350: 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
7360: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
7370: 20 75 36 34 20 2a 76 29 7b 0a 20 20 75 33 32 20   u64 *v){.  u32 
7380: 78 3b 0a 20 20 75 36 34 20 78 36 34 3b 0a 20 20  x;.  u64 x64;.  
7390: 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65  int n;.  unsigne
73a0: 64 20 63 68 61 72 20 63 3b 0a 20 20 69 66 28 20  d char c;.  if( 
73b0: 28 28 63 20 3d 20 70 5b 30 5d 29 20 26 20 30 78  ((c = p[0]) & 0x
73c0: 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76  80)==0 ){.    *v
73d0: 20 3d 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e   = c;.    return
73e0: 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 63 20   1;.  }.  x = c 
73f0: 26 20 30 78 37 66 3b 0a 20 20 69 66 28 20 28 28  & 0x7f;.  if( ((
7400: 63 20 3d 20 70 5b 31 5d 29 20 26 20 30 78 38 30  c = p[1]) & 0x80
7410: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
7420: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
7430: 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 20   return 2;.  }. 
7440: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63   x = (x<<7) | (c
7450: 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20 28 28  &0x7f);.  if( ((
7460: 63 20 3d 20 70 5b 32 5d 29 20 26 20 30 78 38 30  c = p[2]) & 0x80
7470: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
7480: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
7490: 20 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d 0a 20   return 3;.  }. 
74a0: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63   x = (x<<7) | (c
74b0: 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20 28 28  &0x7f);.  if( ((
74c0: 63 20 3d 20 70 5b 33 5d 29 20 26 20 30 78 38 30  c = p[3]) & 0x80
74d0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
74e0: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
74f0: 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a 20   return 4;.  }. 
7500: 20 78 36 34 20 3d 20 28 78 3c 3c 37 29 20 7c 20   x64 = (x<<7) | 
7510: 28 63 26 30 78 37 66 29 3b 0a 20 20 6e 20 3d 20  (c&0x7f);.  n = 
7520: 34 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 63 20 3d  4;.  do{.    c =
7530: 20 70 5b 6e 2b 2b 5d 3b 0a 20 20 20 20 69 66 28   p[n++];.    if(
7540: 20 6e 3d 3d 39 20 29 7b 0a 20 20 20 20 20 20 78   n==9 ){.      x
7550: 36 34 20 3d 20 28 78 36 34 3c 3c 38 29 20 7c 20  64 = (x64<<8) | 
7560: 63 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  c;.      break;.
7570: 20 20 20 20 7d 0a 20 20 20 20 78 36 34 20 3d 20      }.    x64 = 
7580: 28 78 36 34 3c 3c 37 29 20 7c 20 28 63 26 30 78  (x64<<7) | (c&0x
7590: 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28  7f);.  }while( (
75a0: 63 20 26 20 30 78 38 30 29 21 3d 30 20 29 3b 0a  c & 0x80)!=0 );.
75b0: 20 20 2a 76 20 3d 20 78 36 34 3b 0a 20 20 72 65    *v = x64;.  re
75c0: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
75d0: 20 52 65 61 64 20 61 20 33 32 2d 62 69 74 20 76   Read a 32-bit v
75e0: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
75f0: 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f  nteger from memo
7600: 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70  ry starting at p
7610: 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  [0]..** Return t
7620: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
7630: 65 73 20 72 65 61 64 2e 20 20 54 68 65 20 76 61  es read.  The va
7640: 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  lue is stored in
7650: 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69   *v..*/.int sqli
7660: 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
7670: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
7680: 61 72 20 2a 70 2c 20 75 33 32 20 2a 76 29 7b 0a  ar *p, u32 *v){.
7690: 20 20 75 33 32 20 78 3b 0a 20 20 69 6e 74 20 6e    u32 x;.  int n
76a0: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
76b0: 72 20 63 3b 0a 20 20 69 66 28 20 28 28 63 20 3d  r c;.  if( ((c =
76c0: 20 70 5b 30 5d 29 20 26 20 30 78 38 30 29 3d 3d   p[0]) & 0x80)==
76d0: 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b  0 ){.    *v = c;
76e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
76f0: 20 7d 0a 20 20 78 20 3d 20 63 20 26 20 30 78 37   }.  x = c & 0x7
7700: 66 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  f;.  if( ((c = p
7710: 5b 31 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [1]) & 0x80)==0 
7720: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
7730: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
7740: 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 2;.  }.  x = 
7750: 28 78 3c 3c 37 29 20 7c 20 28 63 20 26 20 30 78  (x<<7) | (c & 0x
7760: 37 66 29 3b 0a 20 20 6e 20 3d 20 32 3b 0a 20 20  7f);.  n = 2;.  
7770: 64 6f 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c 3c  do{.    x = (x<<
7780: 37 29 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b 2b  7) | ((c = p[n++
7790: 5d 29 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69  ])&0x7f);.  }whi
77a0: 6c 65 28 20 28 63 20 26 20 30 78 38 30 29 21 3d  le( (c & 0x80)!=
77b0: 30 20 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a 76  0 && n<9 );.  *v
77c0: 20 3d 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 6e   = x;.  return n
77d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
77e0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
77f0: 62 79 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20  bytes that will 
7800: 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73 74 6f  be needed to sto
7810: 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a 20  re the given.** 
7820: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 0a  64-bit integer..
7830: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  */.int sqlite3Va
7840: 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b 0a  rintLen(u64 v){.
7850: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 64    int i = 0;.  d
7860: 6f 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20  o{.    i++;.    
7870: 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c  v >>= 7;.  }whil
7880: 65 28 20 76 21 3d 30 20 26 26 20 69 3c 39 20 29  e( v!=0 && i<9 )
7890: 3b 0a 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a  ;.  return i;.}.
78a0: 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 6c 61 74 65  ./*.** Translate
78b0: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 6f   a single byte o
78c0: 66 20 48 65 78 20 69 6e 74 6f 20 61 6e 20 69 6e  f Hex into an in
78d0: 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  teger..*/.static
78e0: 20 69 6e 74 20 68 65 78 54 6f 49 6e 74 28 69 6e   int hexToInt(in
78f0: 74 20 68 29 7b 0a 20 20 69 66 28 20 68 3e 3d 27  t h){.  if( h>='
7900: 30 27 20 26 26 20 68 3c 3d 27 39 27 20 29 7b 0a  0' && h<='9' ){.
7910: 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27      return h - '
7920: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
7930: 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d 27 66 27  h>='a' && h<='f'
7940: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68   ){.    return h
7950: 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 7d   - 'a' + 10;.  }
7960: 65 6c 73 65 20 69 66 28 20 68 3e 3d 27 41 27 20  else if( h>='A' 
7970: 26 26 20 68 3c 3d 27 46 27 20 29 7b 0a 20 20 20  && h<='F' ){.   
7980: 20 72 65 74 75 72 6e 20 68 20 2d 20 27 41 27 20   return h - 'A' 
7990: 2b 20 31 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  + 10;.  }else{. 
79a0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
79b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  .}../*.** Conver
79c0: 74 20 61 20 42 4c 4f 42 20 6c 69 74 65 72 61 6c  t a BLOB literal
79d0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 78 27   of the form "x'
79e0: 68 68 68 68 68 68 27 22 20 69 6e 74 6f 20 69 74  hhhhhh'" into it
79f0: 73 20 62 69 6e 61 72 79 0a 2a 2a 20 76 61 6c 75  s binary.** valu
7a00: 65 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  e.  Return a poi
7a10: 6e 74 65 72 20 74 6f 20 69 74 73 20 62 69 6e 61  nter to its bina
7a20: 72 79 20 76 61 6c 75 65 2e 20 20 53 70 61 63 65  ry value.  Space
7a30: 20 74 6f 20 68 6f 6c 64 20 74 68 65 0a 2a 2a 20   to hold the.** 
7a40: 62 69 6e 61 72 79 20 76 61 6c 75 65 20 68 61 73  binary value has
7a50: 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66   been obtained f
7a60: 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20 6d  rom malloc and m
7a70: 75 73 74 20 62 65 20 66 72 65 65 64 20 62 79 0a  ust be freed by.
7a80: 2a 2a 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 72  ** the calling r
7a90: 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20  outine..*/.void 
7aa0: 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
7ab0: 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  b(const char *z)
7ac0: 7b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 3b  {.  char *zBlob;
7ad0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
7ae0: 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20  n = strlen(z);. 
7af0: 20 69 66 28 20 6e 25 32 20 29 20 72 65 74 75 72   if( n%2 ) retur
7b00: 6e 20 30 3b 0a 0a 20 20 7a 42 6c 6f 62 20 3d 20  n 0;..  zBlob = 
7b10: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 4d 61  (char *)sqliteMa
7b20: 6c 6c 6f 63 28 6e 2f 32 29 3b 0a 20 20 66 6f 72  lloc(n/2);.  for
7b30: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 3d 32 29  (i=0; i<n; i+=2)
7b40: 7b 0a 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d  {.    zBlob[i/2]
7b50: 20 3d 20 28 68 65 78 54 6f 49 6e 74 28 7a 5b 69   = (hexToInt(z[i
7b60: 5d 29 3c 3c 34 29 20 7c 20 68 65 78 54 6f 49 6e  ])<<4) | hexToIn
7b70: 74 28 7a 5b 69 2b 31 5d 29 3b 0a 20 20 7d 0a 20  t(z[i+1]);.  }. 
7b80: 20 72 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d   return zBlob;.}
7b90: 0a                                               .