/ Hex Artifact Content
Login

Artifact 43d0289d49f43c66847ebbeddfb85a2a0d1ddd2d:


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: 30 37 20 32 30 30 34 2f 30 36 2f 32 35 20 30 31  07 2004/06/25 01
0230: 3a 31 30 3a 34 38 20 64 72 68 20 45 78 70 20 24  :10:48 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 2c 20 6e 2d  )p)[oldN], 0, n-
1490: 6f 6c 64 4e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  oldN);.  }.  mem
14a0: 73 65 74 28 6f 6c 64 50 69 2c 20 30 78 61 62 2c  set(oldPi, 0xab,
14b0: 20 28 6f 6c 64 4b 2b 4e 5f 47 55 41 52 44 2b 32   (oldK+N_GUARD+2
14c0: 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a  )*sizeof(int));.
14d0: 20 20 66 72 65 65 28 6f 6c 64 50 69 29 3b 0a 23    free(oldPi);.#
14e0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e  if SQLITE_DEBUG>
14f0: 31 0a 20 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f  1.  print_stack_
1500: 74 72 61 63 65 28 29 3b 0a 20 20 66 70 72 69 6e  trace();.  fprin
1510: 74 66 28 73 74 64 65 72 72 2c 22 25 30 36 64 20  tf(stderr,"%06d 
1520: 72 65 61 6c 6c 6f 63 20 25 64 20 74 6f 20 25 64  realloc %d to %d
1530: 20 62 79 74 65 73 20 61 74 20 30 78 25 78 20 74   bytes at 0x%x t
1540: 6f 20 30 78 25 78 20 61 74 20 25 73 3a 25 64 5c  o 0x%x at %s:%d\
1550: 6e 22 2c 0a 20 20 20 20 2b 2b 6d 65 6d 63 6e 74  n",.    ++memcnt
1560: 2c 20 6f 6c 64 4e 2c 20 6e 2c 20 28 69 6e 74 29  , oldN, n, (int)
1570: 6f 6c 64 50 2c 20 28 69 6e 74 29 70 2c 20 7a 46  oldP, (int)p, zF
1580: 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 23 65 6e 64  ile, line);.#end
1590: 69 66 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d  if.  return p;.}
15a0: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 64  ../*.** Make a d
15b0: 75 70 6c 69 63 61 74 65 20 6f 66 20 61 20 73 74  uplicate of a st
15c0: 72 69 6e 67 20 69 6e 74 6f 20 6d 65 6d 6f 72 79  ring into memory
15d0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
15e0: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 46 72 65 65 20  alloc().** Free 
15f0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 74 72  the original str
1600: 69 6e 67 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ing using sqlite
1610: 46 72 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  Free()..**.** Th
1620: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61  is routine is ca
1630: 6c 6c 65 64 20 6f 6e 20 61 6c 6c 20 73 74 72 69  lled on all stri
1640: 6e 67 73 20 74 68 61 74 20 61 72 65 20 70 61 73  ngs that are pas
1650: 73 65 64 20 6f 75 74 73 69 64 65 20 6f 66 0a 2a  sed outside of.*
1660: 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  * the SQLite lib
1670: 72 61 72 79 2e 20 20 54 68 61 74 20 77 61 79 20  rary.  That way 
1680: 63 6c 69 65 6e 74 73 20 63 61 6e 20 66 72 65 65  clients can free
1690: 20 74 68 65 20 73 74 72 69 6e 67 20 75 73 69 6e   the string usin
16a0: 67 20 66 72 65 65 28 29 0a 2a 2a 20 72 61 74 68  g free().** rath
16b0: 65 72 20 74 68 61 6e 20 68 61 76 69 6e 67 20 74  er than having t
16c0: 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 46 72 65  o call sqliteFre
16d0: 65 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  e()..*/.void sql
16e0: 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63 28 63  ite3StrRealloc(c
16f0: 68 61 72 20 2a 2a 70 7a 29 7b 0a 20 20 63 68 61  har **pz){.  cha
1700: 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 70  r *zNew;.  if( p
1710: 7a 3d 3d 30 20 7c 7c 20 2a 70 7a 3d 3d 30 20 29  z==0 || *pz==0 )
1720: 20 72 65 74 75 72 6e 3b 0a 20 20 7a 4e 65 77 20   return;.  zNew 
1730: 3d 20 6d 61 6c 6c 6f 63 28 20 73 74 72 6c 65 6e  = malloc( strlen
1740: 28 2a 70 7a 29 20 2b 20 31 20 29 3b 0a 20 20 69  (*pz) + 1 );.  i
1750: 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20 20  f( zNew==0 ){.  
1760: 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63    sqlite3_malloc
1770: 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 73  _failed++;.    s
1780: 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 29 3b 0a  qliteFree(*pz);.
1790: 20 20 20 20 2a 70 7a 20 3d 20 30 3b 0a 20 20 7d      *pz = 0;.  }
17a0: 0a 20 20 73 74 72 63 70 79 28 7a 4e 65 77 2c 20  .  strcpy(zNew, 
17b0: 2a 70 7a 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  *pz);.  sqliteFr
17c0: 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d  ee(*pz);.  *pz =
17d0: 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   zNew;.}../*.** 
17e0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61  Make a copy of a
17f0: 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72   string in memor
1800: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
1810: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a  sqliteMalloc().*
1820: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  /.char *sqlite3S
1830: 74 72 44 75 70 5f 28 63 6f 6e 73 74 20 63 68 61  trDup_(const cha
1840: 72 20 2a 7a 2c 20 63 68 61 72 20 2a 7a 46 69 6c  r *z, char *zFil
1850: 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20  e, int line){.  
1860: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66  char *zNew;.  if
1870: 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( z==0 ) return 
1880: 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69  0;.  zNew = sqli
1890: 74 65 33 4d 61 6c 6c 6f 63 5f 28 73 74 72 6c 65  te3Malloc_(strle
18a0: 6e 28 7a 29 2b 31 2c 20 30 2c 20 7a 46 69 6c 65  n(z)+1, 0, zFile
18b0: 2c 20 6c 69 6e 65 29 3b 0a 20 20 69 66 28 20 7a  , line);.  if( z
18c0: 4e 65 77 20 29 20 73 74 72 63 70 79 28 7a 4e 65  New ) strcpy(zNe
18d0: 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  w, z);.  return 
18e0: 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73 71  zNew;.}.char *sq
18f0: 6c 69 74 65 33 53 74 72 4e 44 75 70 5f 28 63 6f  lite3StrNDup_(co
1900: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
1910: 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c   n, char *zFile,
1920: 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 63 68   int line){.  ch
1930: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20  ar *zNew;.  if( 
1940: 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  z==0 ) return 0;
1950: 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  zNew = sqlite
1960: 33 4d 61 6c 6c 6f 63 5f 28 6e 2b 31 2c 20 30 2c  3Malloc_(n+1, 0,
1970: 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 20   zFile, line);. 
1980: 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20   if( zNew ){.   
1990: 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c   memcpy(zNew, z,
19a0: 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d   n);.    zNew[n]
19b0: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 0;.  }.  retu
19c0: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn zNew;.}../*.*
19d0: 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  * A version of s
19e0: 71 6c 69 74 65 46 72 65 65 20 74 68 61 74 20 69  qliteFree that i
19f0: 73 20 61 6c 77 61 79 73 20 61 20 66 75 6e 63 74  s always a funct
1a00: 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d 61 63 72 6f  ion, not a macro
1a10: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
1a20: 33 46 72 65 65 58 28 76 6f 69 64 20 2a 70 29 7b  3FreeX(void *p){
1a30: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 29  .  sqliteFree(p)
1a40: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
1a50: 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f  LITE_DEBUG */../
1a60: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1a70: 6e 67 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 6d  ng versions of m
1a80: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 66 72 65 65  alloc() and free
1a90: 28 29 20 61 72 65 20 66 6f 72 20 75 73 65 20 69  () are for use i
1aa0: 6e 20 61 0a 2a 2a 20 6e 6f 72 6d 61 6c 20 62 75  n a.** normal bu
1ab0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
1ac0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
1ad0: 47 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  G)../*.** Alloca
1ae0: 74 65 20 6e 65 77 20 6d 65 6d 6f 72 79 20 61 6e  te new memory an
1af0: 64 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  d set it to zero
1b00: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69  .  Return NULL i
1b10: 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20 69  f.** no memory i
1b20: 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 65  s available.  Se
1b30: 65 20 61 6c 73 6f 20 73 71 6c 69 74 65 4d 61 6c  e also sqliteMal
1b40: 6c 6f 63 52 61 77 28 29 2e 0a 2a 2f 0a 76 6f 69  locRaw()..*/.voi
1b50: 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1b60: 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20  (int n){.  void 
1b70: 2a 70 3b 0a 20 20 69 66 28 20 28 70 20 3d 20 6d  *p;.  if( (p = m
1b80: 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29 7b 0a  alloc(n))==0 ){.
1b90: 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20 73 71      if( n>0 ) sq
1ba0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69  lite3_malloc_fai
1bb0: 6c 65 64 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  led++;.  }else{.
1bc0: 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c      memset(p, 0,
1bd0: 20 6e 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   n);.  }.  retur
1be0: 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  n p;.}../*.** Al
1bf0: 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f 72  locate new memor
1c00: 79 20 62 75 74 20 64 6f 20 6e 6f 74 20 73 65 74  y but do not set
1c10: 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65   it to zero.  Re
1c20: 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20  turn NULL if.** 
1c30: 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61  no memory is ava
1c40: 69 6c 61 62 6c 65 2e 20 20 53 65 65 20 61 6c 73  ilable.  See als
1c50: 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  o sqliteMalloc()
1c60: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
1c70: 65 33 4d 61 6c 6c 6f 63 52 61 77 28 69 6e 74 20  e3MallocRaw(int 
1c80: 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20  n){.  void *p;. 
1c90: 20 69 66 28 20 28 70 20 3d 20 6d 61 6c 6c 6f 63   if( (p = malloc
1ca0: 28 6e 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  (n))==0 ){.    i
1cb0: 66 28 20 6e 3e 30 20 29 20 73 71 6c 69 74 65 33  f( n>0 ) sqlite3
1cc0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b  _malloc_failed++
1cd0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
1ce0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20  ;.}../*.** Free 
1cf0: 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c  memory previousl
1d00: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
1d10: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a  sqliteMalloc().*
1d20: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72  /.void sqlite3Fr
1d30: 65 65 58 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20  eeX(void *p){.  
1d40: 69 66 28 20 70 20 29 7b 0a 20 20 20 20 66 72 65  if( p ){.    fre
1d50: 65 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  e(p);.  }.}../*.
1d60: 2a 2a 20 52 65 73 69 7a 65 20 61 20 70 72 69 6f  ** Resize a prio
1d70: 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 49  r allocation.  I
1d80: 66 20 70 3d 3d 30 2c 20 74 68 65 6e 20 74 68 69  f p==0, then thi
1d90: 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f 72  s routine.** wor
1da0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71 6c  ks just like sql
1db0: 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 49 66  iteMalloc().  If
1dc0: 20 6e 3d 3d 30 2c 20 74 68 65 6e 20 74 68 69 73   n==0, then this
1dd0: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b   routine.** work
1de0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71 6c 69  s just like sqli
1df0: 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a 76 6f 69  teFree()..*/.voi
1e00: 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
1e10: 63 28 76 6f 69 64 20 2a 70 2c 20 69 6e 74 20 6e  c(void *p, int n
1e20: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 32 3b 0a 20  ){.  void *p2;. 
1e30: 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20 20 20   if( p==0 ){.   
1e40: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 4d 61   return sqliteMa
1e50: 6c 6c 6f 63 28 6e 29 3b 0a 20 20 7d 0a 20 20 69  lloc(n);.  }.  i
1e60: 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 73  f( n==0 ){.    s
1e70: 71 6c 69 74 65 46 72 65 65 28 70 29 3b 0a 20 20  qliteFree(p);.  
1e80: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
1e90: 20 20 70 32 20 3d 20 72 65 61 6c 6c 6f 63 28 70    p2 = realloc(p
1ea0: 2c 20 6e 29 3b 0a 20 20 69 66 28 20 70 32 3d 3d  , n);.  if( p2==
1eb0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
1ec0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b  _malloc_failed++
1ed0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
1ee0: 32 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  2;.}../*.** Make
1ef0: 20 61 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72   a copy of a str
1f00: 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62  ing in memory ob
1f10: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
1f20: 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a 63 68  teMalloc().*/.ch
1f30: 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 44 75  ar *sqlite3StrDu
1f40: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  p(const char *z)
1f50: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a  {.  char *zNew;.
1f60: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74    if( z==0 ) ret
1f70: 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20  urn 0;.  zNew = 
1f80: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28  sqliteMallocRaw(
1f90: 73 74 72 6c 65 6e 28 7a 29 2b 31 29 3b 0a 20 20  strlen(z)+1);.  
1fa0: 69 66 28 20 7a 4e 65 77 20 29 20 73 74 72 63 70  if( zNew ) strcp
1fb0: 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65  y(zNew, z);.  re
1fc0: 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61  turn zNew;.}.cha
1fd0: 72 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 44 75  r *sqlite3StrNDu
1fe0: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  p(const char *z,
1ff0: 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68 61 72 20   int n){.  char 
2000: 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d  *zNew;.  if( z==
2010: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
2020: 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 4d 61 6c  zNew = sqliteMal
2030: 6c 6f 63 52 61 77 28 6e 2b 31 29 3b 0a 20 20 69  locRaw(n+1);.  i
2040: 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 6d  f( zNew ){.    m
2050: 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c 20 6e  emcpy(zNew, z, n
2060: 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d 20 3d  );.    zNew[n] =
2070: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
2080: 20 7a 4e 65 77 3b 0a 7d 0a 23 65 6e 64 69 66 20   zNew;.}.#endif 
2090: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
20a0: 54 45 5f 44 45 42 55 47 29 20 2a 2f 0a 0a 2f 2a  TE_DEBUG) */../*
20b0: 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 73 74 72  .** Create a str
20c0: 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64  ing from the 2nd
20d0: 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20   and subsequent 
20e0: 61 72 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f  arguments (up to
20f0: 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55   the.** first NU
2100: 4c 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74  LL argument), st
2110: 6f 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 69  ore the string i
2120: 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  n memory obtaine
2130: 64 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65  d from.** sqlite
2140: 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b  Malloc() and mak
2150: 65 20 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e  e the pointer in
2160: 64 69 63 61 74 65 64 20 62 79 20 74 68 65 20 31  dicated by the 1
2170: 73 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70  st argument.** p
2180: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72  oint to that str
2190: 69 6e 67 2e 20 20 54 68 65 20 31 73 74 20 61 72  ing.  The 1st ar
21a0: 67 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68  gument must eith
21b0: 65 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a  er be NULL or .*
21c0: 2a 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72  * point to memor
21d0: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
21e0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a  sqliteMalloc()..
21f0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
2200: 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
2210: 70 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  pz, const char *
2220: 7a 46 69 72 73 74 2c 20 2e 2e 2e 29 7b 0a 20 20  zFirst, ...){.  
2230: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69 6e  va_list ap;.  in
2240: 74 20 6e 42 79 74 65 3b 0a 20 20 63 6f 6e 73 74  t nByte;.  const
2250: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72   char *z;.  char
2260: 20 2a 7a 52 65 73 75 6c 74 3b 0a 0a 20 20 69 66   *zResult;..  if
2270: 28 20 70 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e  ( pz==0 ) return
2280: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 73 74 72 6c  ;.  nByte = strl
2290: 65 6e 28 7a 46 69 72 73 74 29 20 2b 20 31 3b 0a  en(zFirst) + 1;.
22a0: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
22b0: 46 69 72 73 74 29 3b 0a 20 20 77 68 69 6c 65 28  First);.  while(
22c0: 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   (z = va_arg(ap,
22d0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d   const char*))!=
22e0: 30 20 29 7b 0a 20 20 20 20 6e 42 79 74 65 20 2b  0 ){.    nByte +
22f0: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 7d  = strlen(z);.  }
2300: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
2310: 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 29   sqliteFree(*pz)
2320: 3b 0a 20 20 2a 70 7a 20 3d 20 7a 52 65 73 75 6c  ;.  *pz = zResul
2330: 74 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  t = sqliteMalloc
2340: 52 61 77 28 20 6e 42 79 74 65 20 29 3b 0a 20 20  Raw( nByte );.  
2350: 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30 20 29  if( zResult==0 )
2360: 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  {.    return;.  
2370: 7d 0a 20 20 73 74 72 63 70 79 28 7a 52 65 73 75  }.  strcpy(zResu
2380: 6c 74 2c 20 7a 46 69 72 73 74 29 3b 0a 20 20 7a  lt, zFirst);.  z
2390: 52 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c 65 6e  Result += strlen
23a0: 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 76 61 5f  (zResult);.  va_
23b0: 73 74 61 72 74 28 61 70 2c 20 7a 46 69 72 73 74  start(ap, zFirst
23c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a 20 3d  );.  while( (z =
23d0: 20 76 61 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73   va_arg(ap, cons
23e0: 74 20 63 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a  t char*))!=0 ){.
23f0: 20 20 20 20 73 74 72 63 70 79 28 7a 52 65 73 75      strcpy(zResu
2400: 6c 74 2c 20 7a 29 3b 0a 20 20 20 20 7a 52 65 73  lt, z);.    zRes
2410: 75 6c 74 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 52  ult += strlen(zR
2420: 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20 76 61  esult);.  }.  va
2430: 5f 65 6e 64 28 61 70 29 3b 0a 23 69 66 64 65 66  _end(ap);.#ifdef
2440: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 69   SQLITE_DEBUG.#i
2450: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 3e 31  f SQLITE_DEBUG>1
2460: 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72  .  fprintf(stder
2470: 72 2c 22 73 74 72 69 6e 67 20 61 74 20 30 78 25  r,"string at 0x%
2480: 78 20 69 73 20 25 73 5c 6e 22 2c 20 28 69 6e 74  x is %s\n", (int
2490: 29 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23 65 6e 64  )*pz, *pz);.#end
24a0: 69 66 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  if.#endif.}../*.
24b0: 2a 2a 20 57 6f 72 6b 73 20 6c 69 6b 65 20 73 71  ** Works like sq
24c0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 2c 20  lite3SetString, 
24d0: 62 75 74 20 65 61 63 68 20 73 74 72 69 6e 67 20  but each string 
24e0: 69 73 20 6e 6f 77 20 66 6f 6c 6c 6f 77 65 64 20  is now followed 
24f0: 62 79 0a 2a 2a 20 61 20 6c 65 6e 67 74 68 20 69  by.** a length i
2500: 6e 74 65 67 65 72 20 77 68 69 63 68 20 73 70 65  nteger which spe
2510: 63 69 66 69 65 73 20 68 6f 77 20 6d 75 63 68 20  cifies how much 
2520: 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 73 74  of the source st
2530: 72 69 6e 67 20 0a 2a 2a 20 74 6f 20 63 6f 70 79  ring .** to copy
2540: 20 28 69 6e 20 62 79 74 65 73 29 2e 20 20 2d 31   (in bytes).  -1
2550: 20 6d 65 61 6e 73 20 75 73 65 20 74 68 65 20 77   means use the w
2560: 68 6f 6c 65 20 73 74 72 69 6e 67 2e 20 20 54 68  hole string.  Th
2570: 65 20 31 73 74 20 0a 2a 2a 20 61 72 67 75 6d 65  e 1st .** argume
2580: 6e 74 20 6d 75 73 74 20 65 69 74 68 65 72 20 62  nt must either b
2590: 65 20 4e 55 4c 4c 20 6f 72 20 70 6f 69 6e 74 20  e NULL or point 
25a0: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
25b0: 65 64 20 66 72 6f 6d 20 0a 2a 2a 20 73 71 6c 69  ed from .** sqli
25c0: 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76  teMalloc()..*/.v
25d0: 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4e 53  oid sqlite3SetNS
25e0: 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 70 7a 2c  tring(char **pz,
25f0: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
2600: 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65   ap;.  int nByte
2610: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
2620: 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75  z;.  char *zResu
2630: 6c 74 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  lt;.  int n;..  
2640: 69 66 28 20 70 7a 3d 3d 30 20 29 20 72 65 74 75  if( pz==0 ) retu
2650: 72 6e 3b 0a 20 20 6e 42 79 74 65 20 3d 20 30 3b  rn;.  nByte = 0;
2660: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
2670: 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a  pz);.  while( (z
2680: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 63 6f   = va_arg(ap, co
2690: 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30 20 29  nst char*))!=0 )
26a0: 7b 0a 20 20 20 20 6e 20 3d 20 76 61 5f 61 72 67  {.    n = va_arg
26b0: 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 69  (ap, int);.    i
26c0: 66 28 20 6e 3c 3d 30 20 29 20 6e 20 3d 20 73 74  f( n<=0 ) n = st
26d0: 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 6e 42 79  rlen(z);.    nBy
26e0: 74 65 20 2b 3d 20 6e 3b 0a 20 20 7d 0a 20 20 76  te += n;.  }.  v
26f0: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c  a_end(ap);.  sql
2700: 69 74 65 46 72 65 65 28 2a 70 7a 29 3b 0a 20 20  iteFree(*pz);.  
2710: 2a 70 7a 20 3d 20 7a 52 65 73 75 6c 74 20 3d 20  *pz = zResult = 
2720: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28  sqliteMallocRaw(
2730: 20 6e 42 79 74 65 20 2b 20 31 20 29 3b 0a 20 20   nByte + 1 );.  
2740: 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30 20 29  if( zResult==0 )
2750: 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f 73 74   return;.  va_st
2760: 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77  art(ap, pz);.  w
2770: 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72  hile( (z = va_ar
2780: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
2790: 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 6e 20  *))!=0 ){.    n 
27a0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74  = va_arg(ap, int
27b0: 29 3b 0a 20 20 20 20 69 66 28 20 6e 3c 3d 30 20  );.    if( n<=0 
27c0: 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b  ) n = strlen(z);
27d0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 52 65 73  .    memcpy(zRes
27e0: 75 6c 74 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20  ult, z, n);.    
27f0: 7a 52 65 73 75 6c 74 20 2b 3d 20 6e 3b 0a 20 20  zResult += n;.  
2800: 7d 0a 20 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30  }.  *zResult = 0
2810: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2820: 44 45 42 55 47 0a 23 69 66 20 53 51 4c 49 54 45  DEBUG.#if SQLITE
2830: 5f 44 45 42 55 47 3e 31 0a 20 20 66 70 72 69 6e  _DEBUG>1.  fprin
2840: 74 66 28 73 74 64 65 72 72 2c 22 73 74 72 69 6e  tf(stderr,"strin
2850: 67 20 61 74 20 30 78 25 78 20 69 73 20 25 73 5c  g at 0x%x is %s\
2860: 6e 22 2c 20 28 69 6e 74 29 2a 70 7a 2c 20 2a 70  n", (int)*pz, *p
2870: 7a 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  z);.#endif.#endi
2880: 66 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  f.  va_end(ap);.
2890: 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  }../*.** Set the
28a0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   most recent err
28b0: 6f 72 20 63 6f 64 65 20 61 6e 64 20 65 72 72 6f  or code and erro
28c0: 72 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  r string for the
28d0: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
28e0: 65 20 22 64 62 22 2e 20 54 68 65 20 65 72 72 6f  e "db". The erro
28f0: 72 20 63 6f 64 65 20 69 73 20 73 65 74 20 74 6f  r code is set to
2900: 20 22 65 72 72 5f 63 6f 64 65 22 2e 0a 2a 2a 0a   "err_code"..**.
2910: 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20  ** If it is not 
2920: 4e 55 4c 4c 2c 20 73 74 72 69 6e 67 20 7a 46 6f  NULL, string zFo
2930: 72 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74  rmat specifies t
2940: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
2950: 0a 2a 2a 20 65 72 72 6f 72 20 73 74 72 69 6e 67  .** error string
2960: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
2970: 20 74 68 65 20 70 72 69 6e 74 66 20 66 75 6e 63   the printf func
2980: 74 69 6f 6e 73 3a 20 54 68 65 20 66 6f 6c 6c 6f  tions: The follo
2990: 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74 20 63  wing.** format c
29a0: 68 61 72 61 63 74 65 72 73 20 61 72 65 20 61 6c  haracters are al
29b0: 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  lowed:.**.**    
29c0: 20 20 25 73 20 20 20 20 20 20 49 6e 73 65 72 74    %s      Insert
29d0: 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20   a string.**    
29e0: 20 20 25 7a 20 20 20 20 20 20 41 20 73 74 72 69    %z      A stri
29f0: 6e 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ng that should b
2a00: 65 20 66 72 65 65 64 20 61 66 74 65 72 20 75 73  e freed after us
2a10: 65 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20  e.**      %d    
2a20: 20 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65    Insert an inte
2a30: 67 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20  ger.**      %T  
2a40: 20 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b      Insert a tok
2a50: 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20  en.**      %S   
2a60: 20 20 20 49 6e 73 65 72 74 20 74 68 65 20 66 69     Insert the fi
2a70: 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
2a80: 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 7a   SrcList.**.** z
2a90: 46 6f 72 6d 61 74 20 61 6e 64 20 61 6e 79 20 73  Format and any s
2aa0: 74 72 69 6e 67 20 74 6f 6b 65 6e 73 20 74 68 61  tring tokens tha
2ab0: 74 20 66 6f 6c 6c 6f 77 20 69 74 20 61 72 65 20  t follow it are 
2ac0: 61 73 73 75 6d 65 64 20 74 6f 20 62 65 0a 2a 2a  assumed to be.**
2ad0: 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d   encoded in UTF-
2ae0: 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c 65 61  8..**.** To clea
2af0: 72 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  r the most recen
2b00: 74 20 65 72 72 6f 72 20 66 6f 72 20 73 6c 71 69  t error for slqi
2b10: 74 65 20 68 61 6e 64 6c 65 20 22 64 62 22 2c 20  te handle "db", 
2b20: 73 71 6c 69 74 65 33 45 72 72 6f 72 0a 2a 2a 20  sqlite3Error.** 
2b30: 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64  should be called
2b40: 20 77 69 74 68 20 65 72 72 5f 63 6f 64 65 20 73   with err_code s
2b50: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4f 4b 20  et to SQLITE_OK 
2b60: 61 6e 64 20 7a 46 6f 72 6d 61 74 20 73 65 74 0a  and zFormat set.
2b70: 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76  ** to NULL..*/.v
2b80: 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2b90: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74  (sqlite *db, int
2ba0: 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f 6e 73 74   err_code, const
2bb0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
2bc0: 2e 2e 2e 29 7b 0a 20 20 69 66 28 20 64 62 20 26  ...){.  if( db &
2bd0: 26 20 28 64 62 2d 3e 70 45 72 72 20 7c 7c 20 28  & (db->pErr || (
2be0: 64 62 2d 3e 70 45 72 72 20 3d 20 73 71 6c 69 74  db->pErr = sqlit
2bf0: 65 33 56 61 6c 75 65 4e 65 77 28 29 29 29 20 29  e3ValueNew())) )
2c00: 7b 0a 20 20 20 20 64 62 2d 3e 65 72 72 43 6f 64  {.    db->errCod
2c10: 65 20 3d 20 65 72 72 5f 63 6f 64 65 3b 0a 20 20  e = err_code;.  
2c20: 20 20 69 66 28 20 7a 46 6f 72 6d 61 74 20 29 7b    if( zFormat ){
2c30: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a  .      char *z;.
2c40: 20 20 20 20 20 20 76 61 5f 6c 69 73 74 20 61 70        va_list ap
2c50: 3b 0a 20 20 20 20 20 20 76 61 5f 73 74 61 72 74  ;.      va_start
2c60: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
2c70: 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33       z = sqlite3
2c80: 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  VMPrintf(zFormat
2c90: 2c 20 61 70 29 3b 0a 20 20 20 20 20 20 76 61 5f  , ap);.      va_
2ca0: 65 6e 64 28 61 70 29 3b 0a 20 20 20 20 20 20 73  end(ap);.      s
2cb0: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2cc0: 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d 31 2c 20  r(db->pErr, -1, 
2cd0: 7a 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  z, SQLITE_UTF8, 
2ce0: 73 71 6c 69 74 65 33 46 72 65 65 58 29 3b 0a 20  sqlite3FreeX);. 
2cf0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2d00: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
2d10: 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 30 2c 20  tr(db->pErr, 0, 
2d20: 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  0, SQLITE_UTF8, 
2d30: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
2d40: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2d50: 2a 2a 20 41 64 64 20 61 6e 20 65 72 72 6f 72 20  ** Add an error 
2d60: 6d 65 73 73 61 67 65 20 74 6f 20 70 50 61 72 73  message to pPars
2d70: 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64 20 69  e->zErrMsg and i
2d80: 6e 63 72 65 6d 65 6e 74 20 70 50 61 72 73 65 2d  ncrement pParse-
2d90: 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20 66 6f  >nErr..** The fo
2da0: 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 74 69  llowing formatti
2db0: 6e 67 20 63 68 61 72 61 63 74 65 72 73 20 61 72  ng characters ar
2dc0: 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a  e allowed:.**.**
2dd0: 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e        %s      In
2de0: 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a  sert a string.**
2df0: 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20        %z      A 
2e00: 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75  string that shou
2e10: 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65  ld be freed afte
2e20: 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64  r use.**      %d
2e30: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20        Insert an 
2e40: 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20  integer.**      
2e50: 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %T      Insert a
2e60: 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25   token.**      %
2e70: 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68  S      Insert th
2e80: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
2e90: 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a  of a SrcList.**.
2ea0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
2eb0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
2ec0: 74 6f 20 72 65 70 6f 72 74 20 61 6e 79 20 65 72  to report any er
2ed0: 72 6f 72 20 74 68 61 74 20 6f 63 63 75 72 73 20  ror that occurs 
2ee0: 77 68 69 6c 73 74 0a 2a 2a 20 63 6f 6d 70 69 6c  whilst.** compil
2ef0: 69 6e 67 20 61 6e 20 53 51 4c 20 73 74 61 74 65  ing an SQL state
2f00: 6d 65 6e 74 20 28 69 2e 65 2e 20 77 69 74 68 69  ment (i.e. withi
2f10: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
2f20: 65 28 29 29 2e 20 54 68 65 0a 2a 2a 20 6c 61 73  e()). The.** las
2f30: 74 20 74 68 69 6e 67 20 74 68 65 20 73 71 6c 69  t thing the sqli
2f40: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 66 75  te3_prepare() fu
2f50: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 69 73 20 63  nction does is c
2f60: 6f 70 79 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  opy the error.**
2f70: 20 73 74 6f 72 65 64 20 62 79 20 74 68 69 73 20   stored by this 
2f80: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 74 68  function into th
2f90: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
2fa0: 65 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 45  e using sqlite3E
2fb0: 72 72 6f 72 28 29 2e 0a 2a 2a 20 46 75 6e 63 74  rror()..** Funct
2fc0: 69 6f 6e 20 73 71 6c 69 74 65 33 45 72 72 6f 72  ion sqlite3Error
2fd0: 28 29 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  () should be use
2fe0: 64 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  d during stateme
2ff0: 6e 74 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nt execution.** 
3000: 28 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20  (sqlite3_step() 
3010: 65 74 63 2e 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73  etc.)..*/.void s
3020: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
3030: 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
3040: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
3050: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
3060: 73 74 20 61 70 3b 0a 20 20 70 50 61 72 73 65 2d  st ap;.  pParse-
3070: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 73 71 6c 69 74  >nErr++;.  sqlit
3080: 65 46 72 65 65 28 70 50 61 72 73 65 2d 3e 7a 45  eFree(pParse->zE
3090: 72 72 4d 73 67 29 3b 0a 20 20 76 61 5f 73 74 61  rrMsg);.  va_sta
30a0: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
30b0: 0a 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d  .  pParse->zErrM
30c0: 73 67 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72  sg = sqlite3VMPr
30d0: 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70  intf(zFormat, ap
30e0: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
30f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  .}../*.** Conver
3100: 74 20 61 6e 20 53 51 4c 2d 73 74 79 6c 65 20 71  t an SQL-style q
3110: 75 6f 74 65 64 20 73 74 72 69 6e 67 20 69 6e 74  uoted string int
3120: 6f 20 61 20 6e 6f 72 6d 61 6c 20 73 74 72 69 6e  o a normal strin
3130: 67 20 62 79 20 72 65 6d 6f 76 69 6e 67 0a 2a 2a  g by removing.**
3140: 20 74 68 65 20 71 75 6f 74 65 20 63 68 61 72 61   the quote chara
3150: 63 74 65 72 73 2e 20 20 54 68 65 20 63 6f 6e 76  cters.  The conv
3160: 65 72 73 69 6f 6e 20 69 73 20 64 6f 6e 65 20 69  ersion is done i
3170: 6e 2d 70 6c 61 63 65 2e 20 20 49 66 20 74 68 65  n-place.  If the
3180: 0a 2a 2a 20 69 6e 70 75 74 20 64 6f 65 73 20 6e  .** input does n
3190: 6f 74 20 62 65 67 69 6e 20 77 69 74 68 20 61 20  ot begin with a 
31a0: 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 2c  quote character,
31b0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
31c0: 6e 65 0a 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70  ne.** is a no-op
31d0: 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 32 2d 46 65 62  ..**.** 2002-Feb
31e0: 2d 31 34 3a 20 54 68 69 73 20 72 6f 75 74 69 6e  -14: This routin
31f0: 65 20 69 73 20 65 78 74 65 6e 64 65 64 20 74 6f  e is extended to
3200: 20 72 65 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73   remove MS-Acces
3210: 73 20 73 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b  s style.** brack
3220: 65 74 73 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20  ets from around 
3230: 69 64 65 6e 74 69 66 65 72 73 2e 20 20 46 6f 72  identifers.  For
3240: 20 65 78 61 6d 70 6c 65 3a 20 20 22 5b 61 2d 62   example:  "[a-b
3250: 2d 63 5d 22 20 62 65 63 6f 6d 65 73 0a 2a 2a 20  -c]" becomes.** 
3260: 22 61 2d 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69 64  "a-b-c"..*/.void
3270: 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
3280: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
3290: 71 75 6f 74 65 3b 0a 20 20 69 6e 74 20 69 2c 20  quote;.  int i, 
32a0: 6a 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  j;.  if( z==0 ) 
32b0: 72 65 74 75 72 6e 3b 0a 20 20 71 75 6f 74 65 20  return;.  quote 
32c0: 3d 20 7a 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68  = z[0];.  switch
32d0: 28 20 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 63  ( quote ){.    c
32e0: 61 73 65 20 27 5c 27 27 3a 20 20 62 72 65 61 6b  ase '\'':  break
32f0: 3b 0a 20 20 20 20 63 61 73 65 20 27 22 27 3a 20  ;.    case '"': 
3300: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
3310: 65 20 27 5b 27 3a 20 20 20 71 75 6f 74 65 20 3d  e '[':   quote =
3320: 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b 0a 20 20   ']';  break;.  
3330: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 72 65    default:    re
3340: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  turn;.  }.  for(
3350: 69 3d 31 2c 20 6a 3d 30 3b 20 7a 5b 69 5d 3b 20  i=1, j=0; z[i]; 
3360: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 5b  i++){.    if( z[
3370: 69 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20  i]==quote ){.   
3380: 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3d 3d 71     if( z[i+1]==q
3390: 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20  uote ){.        
33a0: 7a 5b 6a 2b 2b 5d 20 3d 20 71 75 6f 74 65 3b 0a  z[j++] = quote;.
33b0: 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
33c0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
33d0: 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 30 3b 0a 20 20    z[j++] = 0;.  
33e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
33f0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
3400: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 7a        z[j++] = z
3410: 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  [i];.    }.  }.}
3420: 0a 0a 2f 2a 20 41 6e 20 61 72 72 61 79 20 74 6f  ../* An array to
3430: 20 6d 61 70 20 61 6c 6c 20 75 70 70 65 72 2d 63   map all upper-c
3440: 61 73 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ase characters i
3450: 6e 74 6f 20 74 68 65 69 72 20 63 6f 72 72 65 73  nto their corres
3460: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6c 6f 77 65 72  ponding.** lower
3470: 2d 63 61 73 65 20 63 68 61 72 61 63 74 65 72 2e  -case character.
3480: 20 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69   .*/.static unsi
3490: 67 6e 65 64 20 63 68 61 72 20 55 70 70 65 72 54  gned char UpperT
34a0: 6f 4c 6f 77 65 72 5b 5d 20 3d 20 7b 0a 20 20 20  oLower[] = {.   
34b0: 20 20 20 30 2c 20 20 31 2c 20 20 32 2c 20 20 33     0,  1,  2,  3
34c0: 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c 20 20 37  ,  4,  5,  6,  7
34d0: 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c 20 31 31  ,  8,  9, 10, 11
34e0: 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c 20 31 35  , 12, 13, 14, 15
34f0: 2c 20 31 36 2c 20 31 37 2c 0a 20 20 20 20 20 31  , 16, 17,.     1
3500: 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c 20 32  8, 19, 20, 21, 2
3510: 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20 32  2, 23, 24, 25, 2
3520: 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20 33  6, 27, 28, 29, 3
3530: 30 2c 20 33 31 2c 20 33 32 2c 20 33 33 2c 20 33  0, 31, 32, 33, 3
3540: 34 2c 20 33 35 2c 0a 20 20 20 20 20 33 36 2c 20  4, 35,.     36, 
3550: 33 37 2c 20 33 38 2c 20 33 39 2c 20 34 30 2c 20  37, 38, 39, 40, 
3560: 34 31 2c 20 34 32 2c 20 34 33 2c 20 34 34 2c 20  41, 42, 43, 44, 
3570: 34 35 2c 20 34 36 2c 20 34 37 2c 20 34 38 2c 20  45, 46, 47, 48, 
3580: 34 39 2c 20 35 30 2c 20 35 31 2c 20 35 32 2c 20  49, 50, 51, 52, 
3590: 35 33 2c 0a 20 20 20 20 20 35 34 2c 20 35 35 2c  53,.     54, 55,
35a0: 20 35 36 2c 20 35 37 2c 20 35 38 2c 20 35 39 2c   56, 57, 58, 59,
35b0: 20 36 30 2c 20 36 31 2c 20 36 32 2c 20 36 33 2c   60, 61, 62, 63,
35c0: 20 36 34 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c   64, 97, 98, 99,
35d0: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
35e0: 0a 20 20 20 20 31 30 34 2c 31 30 35 2c 31 30 36  .    104,105,106
35f0: 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c 31 31 30  ,107,108,109,110
3600: 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31 34  ,111,112,113,114
3610: 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38  ,115,116,117,118
3620: 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 0a 20 20  ,119,120,121,.  
3630: 20 20 31 32 32 2c 20 39 31 2c 20 39 32 2c 20 39    122, 91, 92, 9
3640: 33 2c 20 39 34 2c 20 39 35 2c 20 39 36 2c 20 39  3, 94, 95, 96, 9
3650: 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c 31 30  7, 98, 99,100,10
3660: 31 2c 31 30 32 2c 31 30 33 2c 31 30 34 2c 31 30  1,102,103,104,10
3670: 35 2c 31 30 36 2c 31 30 37 2c 0a 20 20 20 20 31  5,106,107,.    1
3680: 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c 31  08,109,110,111,1
3690: 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35 2c 31  12,113,114,115,1
36a0: 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39 2c 31  16,117,118,119,1
36b0: 32 30 2c 31 32 31 2c 31 32 32 2c 31 32 33 2c 31  20,121,122,123,1
36c0: 32 34 2c 31 32 35 2c 0a 20 20 20 20 31 32 36 2c  24,125,.    126,
36d0: 31 32 37 2c 31 32 38 2c 31 32 39 2c 31 33 30 2c  127,128,129,130,
36e0: 31 33 31 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c  131,132,133,134,
36f0: 31 33 35 2c 31 33 36 2c 31 33 37 2c 31 33 38 2c  135,136,137,138,
3700: 31 33 39 2c 31 34 30 2c 31 34 31 2c 31 34 32 2c  139,140,141,142,
3710: 31 34 33 2c 0a 20 20 20 20 31 34 34 2c 31 34 35  143,.    144,145
3720: 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c 31 34 39  ,146,147,148,149
3730: 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c 31 35 33  ,150,151,152,153
3740: 2c 31 35 34 2c 31 35 35 2c 31 35 36 2c 31 35 37  ,154,155,156,157
3750: 2c 31 35 38 2c 31 35 39 2c 31 36 30 2c 31 36 31  ,158,159,160,161
3760: 2c 0a 20 20 20 20 31 36 32 2c 31 36 33 2c 31 36  ,.    162,163,16
3770: 34 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c 31 36  4,165,166,167,16
3780: 38 2c 31 36 39 2c 31 37 30 2c 31 37 31 2c 31 37  8,169,170,171,17
3790: 32 2c 31 37 33 2c 31 37 34 2c 31 37 35 2c 31 37  2,173,174,175,17
37a0: 36 2c 31 37 37 2c 31 37 38 2c 31 37 39 2c 0a 20  6,177,178,179,. 
37b0: 20 20 20 31 38 30 2c 31 38 31 2c 31 38 32 2c 31     180,181,182,1
37c0: 38 33 2c 31 38 34 2c 31 38 35 2c 31 38 36 2c 31  83,184,185,186,1
37d0: 38 37 2c 31 38 38 2c 31 38 39 2c 31 39 30 2c 31  87,188,189,190,1
37e0: 39 31 2c 31 39 32 2c 31 39 33 2c 31 39 34 2c 31  91,192,193,194,1
37f0: 39 35 2c 31 39 36 2c 31 39 37 2c 0a 20 20 20 20  95,196,197,.    
3800: 31 39 38 2c 31 39 39 2c 32 30 30 2c 32 30 31 2c  198,199,200,201,
3810: 32 30 32 2c 32 30 33 2c 32 30 34 2c 32 30 35 2c  202,203,204,205,
3820: 32 30 36 2c 32 30 37 2c 32 30 38 2c 32 30 39 2c  206,207,208,209,
3830: 32 31 30 2c 32 31 31 2c 32 31 32 2c 32 31 33 2c  210,211,212,213,
3840: 32 31 34 2c 32 31 35 2c 0a 20 20 20 20 32 31 36  214,215,.    216
3850: 2c 32 31 37 2c 32 31 38 2c 32 31 39 2c 32 32 30  ,217,218,219,220
3860: 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c 32 32 34  ,221,222,223,224
3870: 2c 32 32 35 2c 32 32 36 2c 32 32 37 2c 32 32 38  ,225,226,227,228
3880: 2c 32 32 39 2c 32 33 30 2c 32 33 31 2c 32 33 32  ,229,230,231,232
3890: 2c 32 33 33 2c 0a 20 20 20 20 32 33 34 2c 32 33  ,233,.    234,23
38a0: 35 2c 32 33 36 2c 32 33 37 2c 32 33 38 2c 32 33  5,236,237,238,23
38b0: 39 2c 32 34 30 2c 32 34 31 2c 32 34 32 2c 32 34  9,240,241,242,24
38c0: 33 2c 32 34 34 2c 32 34 35 2c 32 34 36 2c 32 34  3,244,245,246,24
38d0: 37 2c 32 34 38 2c 32 34 39 2c 32 35 30 2c 32 35  7,248,249,250,25
38e0: 31 2c 0a 20 20 20 20 32 35 32 2c 32 35 33 2c 32  1,.    252,253,2
38f0: 35 34 2c 32 35 35 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  54,255.};../*.**
3900: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63   This function c
3910: 6f 6d 70 75 74 65 73 20 61 20 68 61 73 68 20 6f  omputes a hash o
3920: 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  n the name of a 
3930: 6b 65 79 77 6f 72 64 2e 0a 2a 2a 20 43 61 73 65  keyword..** Case
3940: 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63   is not signific
3950: 61 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ant..*/.int sqli
3960: 74 65 33 48 61 73 68 4e 6f 43 61 73 65 28 63 6f  te3HashNoCase(co
3970: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
3980: 20 6e 29 7b 0a 20 20 69 6e 74 20 68 20 3d 20 30   n){.  int h = 0
3990: 3b 0a 20 20 69 66 28 20 6e 3c 3d 30 20 29 20 6e  ;.  if( n<=0 ) n
39a0: 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20   = strlen(z);.  
39b0: 77 68 69 6c 65 28 20 6e 20 3e 20 30 20 20 29 7b  while( n > 0  ){
39c0: 0a 20 20 20 20 68 20 3d 20 28 68 3c 3c 33 29 20  .    h = (h<<3) 
39d0: 5e 20 68 20 5e 20 55 70 70 65 72 54 6f 4c 6f 77  ^ h ^ UpperToLow
39e0: 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
39f0: 72 29 2a 7a 2b 2b 5d 3b 0a 20 20 20 20 6e 2d 2d  r)*z++];.    n--
3a00: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 68  ;.  }.  return h
3a10: 20 26 20 30 78 37 66 66 66 66 66 66 66 3b 0a 7d   & 0x7fffffff;.}
3a20: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 73 79 73  ../*.** Some sys
3a30: 74 65 6d 73 20 68 61 76 65 20 73 74 72 69 63 6d  tems have stricm
3a40: 70 28 29 2e 20 20 4f 74 68 65 72 73 20 68 61 76  p().  Others hav
3a50: 65 20 73 74 72 63 61 73 65 63 6d 70 28 29 2e 20  e strcasecmp(). 
3a60: 20 42 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 72   Because.** ther
3a70: 65 20 69 73 20 6e 6f 20 63 6f 6e 73 69 73 74 65  e is no consiste
3a80: 6e 63 79 2c 20 77 65 20 77 69 6c 6c 20 64 65 66  ncy, we will def
3a90: 69 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a 2a 2f 0a  ine our own..*/.
3aa0: 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43  int sqlite3StrIC
3ab0: 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  mp(const char *z
3ac0: 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  Left, const char
3ad0: 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 72 65 67   *zRight){.  reg
3ae0: 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63  ister unsigned c
3af0: 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20  har *a, *b;.  a 
3b00: 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  = (unsigned char
3b10: 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20   *)zLeft;.  b = 
3b20: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
3b30: 29 7a 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65  )zRight;.  while
3b40: 28 20 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72  ( *a!=0 && Upper
3b50: 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70  ToLower[*a]==Upp
3b60: 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20  erToLower[*b]){ 
3b70: 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65  a++; b++; }.  re
3b80: 74 75 72 6e 20 2a 61 20 2d 20 2a 62 3b 0a 7d 0a  turn *a - *b;.}.
3b90: 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 4e 49  int sqlite3StrNI
3ba0: 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Cmp(const char *
3bb0: 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61  zLeft, const cha
3bc0: 72 20 2a 7a 52 69 67 68 74 2c 20 69 6e 74 20 4e  r *zRight, int N
3bd0: 29 7b 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e  ){.  register un
3be0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20  signed char *a, 
3bf0: 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67  *b;.  a = (unsig
3c00: 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74  ned char *)zLeft
3c10: 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  b = (unsigne
3c20: 64 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b  d char *)zRight;
3c30: 0a 20 20 77 68 69 6c 65 28 20 4e 2d 2d 20 3e 20  .  while( N-- > 
3c40: 30 20 26 26 20 2a 61 21 3d 30 20 26 26 20 55 70  0 && *a!=0 && Up
3c50: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d  perToLower[*a]==
3c60: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
3c70: 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20  ){ a++; b++; }. 
3c80: 20 72 65 74 75 72 6e 20 4e 3c 30 20 3f 20 30 20   return N<0 ? 0 
3c90: 3a 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  : UpperToLower[*
3ca0: 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65  a] - UpperToLowe
3cb0: 72 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  r[*b];.}../*.** 
3cc0: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a  Return TRUE if z
3cd0: 20 69 73 20 61 20 70 75 72 65 20 6e 75 6d 65 72   is a pure numer
3ce0: 69 63 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75  ic string.  Retu
3cf0: 72 6e 20 46 41 4c 53 45 20 69 66 20 74 68 65 0a  rn FALSE if the.
3d00: 2a 2a 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  ** string contai
3d10: 6e 73 20 61 6e 79 20 63 68 61 72 61 63 74 65 72  ns any character
3d20: 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 70 61   which is not pa
3d30: 72 74 20 6f 66 20 61 20 6e 75 6d 62 65 72 2e 20  rt of a number. 
3d40: 49 66 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67  If.** the string
3d50: 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
3d60: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 27 2e 27  contains the '.'
3d70: 20 63 68 61 72 61 63 74 65 72 2c 20 73 65 74 20   character, set 
3d80: 2a 72 65 61 6c 6e 75 6d 0a 2a 2a 20 74 6f 20 54  *realnum.** to T
3d90: 52 55 45 20 28 6f 74 68 65 72 77 69 73 65 20 46  RUE (otherwise F
3da0: 41 4c 53 45 29 2e 0a 2a 2a 0a 2a 2a 20 41 6d 20  ALSE)..**.** Am 
3db0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73 20  empty string is 
3dc0: 63 6f 6e 73 69 64 65 72 65 64 20 6e 6f 6e 2d 6e  considered non-n
3dd0: 75 6d 65 72 69 63 2e 0a 2a 2f 0a 69 6e 74 20 73  umeric..*/.int s
3de0: 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63  qlite3IsNumber(c
3df0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
3e00: 74 20 2a 72 65 61 6c 6e 75 6d 2c 20 75 38 20 65  t *realnum, u8 e
3e10: 6e 63 29 7b 0a 20 20 69 6e 74 20 69 6e 63 72 20  nc){.  int incr 
3e20: 3d 20 28 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  = (enc==SQLITE_U
3e30: 54 46 38 3f 31 3a 32 29 3b 0a 20 20 69 66 28 20  TF8?1:2);.  if( 
3e40: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
3e50: 36 4c 45 20 29 20 7a 2b 2b 3b 0a 20 20 69 66 28  6LE ) z++;.  if(
3e60: 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 3d 3d   *z=='-' || *z==
3e70: 27 2b 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b  '+' ) z += incr;
3e80: 0a 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28  .  if( !isdigit(
3e90: 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  *z) ){.    retur
3ea0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 20 2b 3d 20  n 0;.  }.  z += 
3eb0: 69 6e 63 72 3b 0a 20 20 69 66 28 20 72 65 61 6c  incr;.  if( real
3ec0: 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d  num ) *realnum =
3ed0: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 64   0;.  while( isd
3ee0: 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d  igit(*z) ){ z +=
3ef0: 20 69 6e 63 72 3b 20 7d 0a 20 20 69 66 28 20 2a   incr; }.  if( *
3f00: 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a 20  z=='.' ){.    z 
3f10: 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28  += incr;.    if(
3f20: 20 21 69 73 64 69 67 69 74 28 2a 7a 29 20 29 20   !isdigit(*z) ) 
3f30: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68  return 0;.    wh
3f40: 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29  ile( isdigit(*z)
3f50: 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d   ){ z += incr; }
3f60: 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d  .    if( realnum
3f70: 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b   ) *realnum = 1;
3f80: 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27  .  }.  if( *z=='
3f90: 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b  e' || *z=='E' ){
3fa0: 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a  .    z += incr;.
3fb0: 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20      if( *z=='+' 
3fc0: 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 20 2b  || *z=='-' ) z +
3fd0: 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20  = incr;.    if( 
3fe0: 21 69 73 64 69 67 69 74 28 2a 7a 29 20 29 20 72  !isdigit(*z) ) r
3ff0: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69  eturn 0;.    whi
4000: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20  le( isdigit(*z) 
4010: 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a  ){ z += incr; }.
4020: 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20      if( realnum 
4030: 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a  ) *realnum = 1;.
4040: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d    }.  return *z=
4050: 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  =0;.}../*.** The
4060: 20 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20 61   string z[] is a
4070: 6e 20 61 73 63 69 69 20 72 65 70 72 65 73 65 6e  n ascii represen
4080: 74 61 74 69 6f 6e 20 6f 66 20 61 20 72 65 61 6c  tation of a real
4090: 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76   number..** Conv
40a0: 65 72 74 20 74 68 69 73 20 73 74 72 69 6e 67 20  ert this string 
40b0: 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a 0a  to a double..**.
40c0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
40d0: 61 73 73 75 6d 65 73 20 74 68 61 74 20 7a 5b 5d  assumes that z[]
40e0: 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61 6c   really is a val
40f0: 69 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69  id number.  If i
4100: 74 0a 2a 2a 20 69 73 20 6e 6f 74 2c 20 74 68 65  t.** is not, the
4110: 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66   result is undef
4120: 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ined..**.** This
4130: 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64   routine is used
4140: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
4150: 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29 20 66  library atof() f
4160: 75 6e 63 74 69 6f 6e 20 62 65 63 61 75 73 65 0a  unction because.
4170: 2a 2a 20 74 68 65 20 6c 69 62 72 61 72 79 20 61  ** the library a
4180: 74 6f 66 28 29 20 6d 69 67 68 74 20 77 61 6e 74  tof() might want
4190: 20 74 6f 20 75 73 65 20 22 2c 22 20 61 73 20 74   to use "," as t
41a0: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
41b0: 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 22   instead.** of "
41c0: 2e 22 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ." depending on 
41d0: 68 6f 77 20 6c 6f 63 61 6c 65 20 69 73 20 73 65  how locale is se
41e0: 74 2e 20 20 42 75 74 20 74 68 61 74 20 77 6f 75  t.  But that wou
41f0: 6c 64 20 63 61 75 73 65 20 70 72 6f 62 6c 65 6d  ld cause problem
4200: 73 0a 2a 2a 20 66 6f 72 20 53 51 4c 2e 20 20 53  s.** for SQL.  S
4210: 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61  o this routine a
4220: 6c 77 61 79 73 20 75 73 65 73 20 22 2e 22 20 72  lways uses "." r
4230: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
4240: 61 6c 65 2e 0a 2a 2f 0a 64 6f 75 62 6c 65 20 73  ale..*/.double s
4250: 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
4260: 20 63 68 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20   char *z, const 
4270: 63 68 61 72 20 2a 2a 70 7a 45 6e 64 29 7b 0a 20  char **pzEnd){. 
4280: 20 69 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20   int sign = 1;. 
4290: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
42a0: 20 76 31 20 3d 20 30 2e 30 3b 0a 20 20 69 66 28   v1 = 0.0;.  if(
42b0: 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20   *z=='-' ){.    
42c0: 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 7a  sign = -1;.    z
42d0: 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ++;.  }else if( 
42e0: 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a  *z=='+' ){.    z
42f0: 2b 2b 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28  ++;.  }.  while(
4300: 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a   isdigit(*z) ){.
4310: 20 20 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30      v1 = v1*10.0
4320: 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20   + (*z - '0');. 
4330: 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66     z++;.  }.  if
4340: 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  ( *z=='.' ){.   
4350: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4360: 20 64 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b 0a   divisor = 1.0;.
4370: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 77 68 69      z++;.    whi
4380: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20  le( isdigit(*z) 
4390: 29 7b 0a 20 20 20 20 20 20 76 31 20 3d 20 76 31  ){.      v1 = v1
43a0: 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30  *10.0 + (*z - '0
43b0: 27 29 3b 0a 20 20 20 20 20 20 64 69 76 69 73 6f  ');.      diviso
43c0: 72 20 2a 3d 20 31 30 2e 30 3b 0a 20 20 20 20 20  r *= 10.0;.     
43d0: 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20   z++;.    }.    
43e0: 76 31 20 2f 3d 20 64 69 76 69 73 6f 72 3b 0a 20  v1 /= divisor;. 
43f0: 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27   }.  if( *z=='e'
4400: 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20   || *z=='E' ){. 
4410: 20 20 20 69 6e 74 20 65 73 69 67 6e 20 3d 20 31     int esign = 1
4420: 3b 0a 20 20 20 20 69 6e 74 20 65 76 61 6c 20 3d  ;.    int eval =
4430: 20 30 3b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42   0;.    LONGDOUB
4440: 4c 45 5f 54 59 50 45 20 73 63 61 6c 65 20 3d 20  LE_TYPE scale = 
4450: 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20  1.0;.    z++;.  
4460: 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b    if( *z=='-' ){
4470: 0a 20 20 20 20 20 20 65 73 69 67 6e 20 3d 20 2d  .      esign = -
4480: 31 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20  1;.      z++;.  
4490: 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d    }else if( *z==
44a0: 27 2b 27 20 29 7b 0a 20 20 20 20 20 20 7a 2b 2b  '+' ){.      z++
44b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
44c0: 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29  e( isdigit(*z) )
44d0: 7b 0a 20 20 20 20 20 20 65 76 61 6c 20 3d 20 65  {.      eval = e
44e0: 76 61 6c 2a 31 30 20 2b 20 2a 7a 20 2d 20 27 30  val*10 + *z - '0
44f0: 27 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20  ';.      z++;.  
4500: 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65    }.    while( e
4510: 76 61 6c 3e 3d 36 34 20 29 7b 20 73 63 61 6c 65  val>=64 ){ scale
4520: 20 2a 3d 20 31 2e 30 65 2b 36 34 3b 20 65 76 61   *= 1.0e+64; eva
4530: 6c 20 2d 3d 20 36 34 3b 20 7d 0a 20 20 20 20 77  l -= 64; }.    w
4540: 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31 36 20 29  hile( eval>=16 )
4550: 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b  { scale *= 1.0e+
4560: 31 36 3b 20 65 76 61 6c 20 2d 3d 20 31 36 3b 20  16; eval -= 16; 
4570: 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61  }.    while( eva
4580: 6c 3e 3d 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d  l>=4 ){ scale *=
4590: 20 31 2e 30 65 2b 34 3b 20 65 76 61 6c 20 2d 3d   1.0e+4; eval -=
45a0: 20 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28   4; }.    while(
45b0: 20 65 76 61 6c 3e 3d 31 20 29 7b 20 73 63 61 6c   eval>=1 ){ scal
45c0: 65 20 2a 3d 20 31 2e 30 65 2b 31 3b 20 65 76 61  e *= 1.0e+1; eva
45d0: 6c 20 2d 3d 20 31 3b 20 7d 0a 20 20 20 20 69 66  l -= 1; }.    if
45e0: 28 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20  ( esign<0 ){.   
45f0: 20 20 20 76 31 20 2f 3d 20 73 63 61 6c 65 3b 0a     v1 /= scale;.
4600: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4610: 20 76 31 20 2a 3d 20 73 63 61 6c 65 3b 0a 20 20   v1 *= scale;.  
4620: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 7a    }.  }.  if( pz
4630: 45 6e 64 20 29 20 2a 70 7a 45 6e 64 20 3d 20 7a  End ) *pzEnd = z
4640: 3b 0a 20 20 72 65 74 75 72 6e 20 73 69 67 6e 3c  ;.  return sign<
4650: 30 20 3f 20 2d 76 31 20 3a 20 76 31 3b 0a 7d 0a  0 ? -v1 : v1;.}.
4660: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52  ./*.** Return TR
4670: 55 45 20 69 66 20 7a 4e 75 6d 20 69 73 20 61 20  UE if zNum is a 
4680: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4690: 74 65 67 65 72 20 61 6e 64 20 77 72 69 74 65 0a  teger and write.
46a0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
46b0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  the integer into
46c0: 20 2a 70 4e 75 6d 2e 20 20 49 66 20 7a 4e 75 6d   *pNum.  If zNum
46d0: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
46e0: 65 72 0a 2a 2a 20 6f 72 20 69 73 20 61 6e 20 69  er.** or is an i
46f0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
4700: 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 65  oo large to be e
4710: 78 70 72 65 73 73 65 64 20 77 69 74 68 20 36 34  xpressed with 64
4720: 20 62 69 74 73 2c 0a 2a 2a 20 74 68 65 6e 20 72   bits,.** then r
4730: 65 74 75 72 6e 20 66 61 6c 73 65 2e 20 20 49 66  eturn false.  If
4740: 20 6e 3e 30 20 61 6e 64 20 74 68 65 20 69 6e 74   n>0 and the int
4750: 65 67 65 72 20 69 73 20 73 74 72 69 6e 67 20 69  eger is string i
4760: 73 20 6e 6f 74 0a 2a 2a 20 65 78 61 63 74 6c 79  s not.** exactly
4770: 20 6e 20 62 79 74 65 73 20 6c 6f 6e 67 2c 20 72   n bytes long, r
4780: 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a  eturn false..**.
4790: 2a 2a 20 57 68 65 6e 20 74 68 69 73 20 72 6f 75  ** When this rou
47a0: 74 69 6e 65 20 77 61 73 20 6f 72 69 67 69 6e 61  tine was origina
47b0: 6c 6c 79 20 77 72 69 74 74 65 6e 20 69 74 20 64  lly written it d
47c0: 65 61 6c 74 20 77 69 74 68 20 6f 6e 6c 79 0a 2a  ealt with only.*
47d0: 2a 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72 73  * 32-bit numbers
47e0: 2e 20 20 41 74 20 74 68 61 74 20 74 69 6d 65 2c  .  At that time,
47f0: 20 69 74 20 77 61 73 20 6d 75 63 68 20 66 61 73   it was much fas
4800: 74 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20  ter than the.** 
4810: 61 74 6f 69 28 29 20 6c 69 62 72 61 72 79 20 72  atoi() library r
4820: 6f 75 74 69 6e 65 20 69 6e 20 52 65 64 48 61 74  outine in RedHat
4830: 20 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c   7.2..*/.int sql
4840: 69 74 65 33 61 74 6f 69 36 34 28 63 6f 6e 73 74  ite3atoi64(const
4850: 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34   char *zNum, i64
4860: 20 2a 70 4e 75 6d 29 7b 0a 20 20 69 36 34 20 76   *pNum){.  i64 v
4870: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67 3b   = 0;.  int neg;
4880: 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69  .  int i, c;.  i
4890: 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b  f( *zNum=='-' ){
48a0: 0a 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20  .    neg = 1;.  
48b0: 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73    zNum++;.  }els
48c0: 65 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  e if( *zNum=='+'
48d0: 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b   ){.    neg = 0;
48e0: 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d  .    zNum++;.  }
48f0: 65 6c 73 65 7b 0a 20 20 20 20 6e 65 67 20 3d 20  else{.    neg = 
4900: 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  0;.  }.  for(i=0
4910: 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27  ; (c=zNum[i])>='
4920: 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b  0' && c<='9'; i+
4930: 2b 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31 30  +){.    v = v*10
4940: 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 7d 0a   + c - '0';.  }.
4950: 20 20 2a 70 4e 75 6d 20 3d 20 6e 65 67 20 3f 20    *pNum = neg ? 
4960: 2d 76 20 3a 20 76 3b 0a 20 20 72 65 74 75 72 6e  -v : v;.  return
4970: 20 63 3d 3d 30 20 26 26 20 69 3e 30 20 26 26 20   c==0 && i>0 && 
4980: 0a 20 20 20 20 20 20 28 69 3c 31 39 20 7c 7c 20  .      (i<19 || 
4990: 28 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d 70  (i==19 && memcmp
49a0: 28 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32 30 33  (zNum,"922337203
49b0: 36 38 35 34 37 37 35 38 30 37 22 2c 31 39 29 3c  6854775807",19)<
49c0: 3d 30 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  =0));.}../*.** T
49d0: 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72  he string zNum r
49e0: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74  epresents an int
49f0: 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69 67  eger.  There mig
4a00: 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  ht be some other
4a10: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
4a20: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e  following the in
4a30: 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20 74  teger too, but t
4a40: 68 61 74 20 70 61 72 74 20 69 73 20 69 67 6e 6f  hat part is igno
4a50: 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69  red..** If the i
4a60: 6e 74 65 67 65 72 20 74 68 61 74 20 74 68 65 20  nteger that the 
4a70: 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72  prefix of zNum r
4a80: 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20 66  epresents will f
4a90: 69 74 20 69 6e 20 61 0a 2a 2a 20 33 32 2d 62 69  it in a.** 32-bi
4aa0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
4ab0: 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20 20  , return TRUE.  
4ac0: 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e  Otherwise return
4ad0: 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68   FALSE..**.** Th
4ae0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
4af0: 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68 65  ns FALSE for the
4b00: 20 73 74 72 69 6e 67 20 2d 32 31 34 37 34 38 33   string -2147483
4b10: 36 34 38 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a  648 even that.**
4b20: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69 6c   that number wil
4b30: 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69 74  l, in theory fit
4b40: 20 69 6e 20 61 20 33 32 2d 62 69 74 20 69 6e 74   in a 32-bit int
4b50: 65 67 65 72 2e 20 20 42 75 74 20 70 6f 73 69 74  eger.  But posit
4b60: 69 76 65 0a 2a 2a 20 32 31 34 37 34 38 33 36 34  ive.** 214748364
4b70: 38 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69  8 will not fit i
4b80: 6e 20 33 32 20 62 69 74 73 2e 20 20 53 6f 20 69  n 32 bits.  So i
4b90: 74 20 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f  t seems safer to
4ba0: 20 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65   return.** false
4bb0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
4bc0: 73 71 6c 69 74 65 33 46 69 74 73 49 6e 33 32 42  sqlite3FitsIn32B
4bd0: 69 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  its(const char *
4be0: 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20  zNum){.  int i, 
4bf0: 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d  c;.  if( *zNum==
4c00: 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b  '-' || *zNum=='+
4c10: 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f  ' ) zNum++;.  fo
4c20: 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69  r(i=0; (c=zNum[i
4c30: 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39  ])>='0' && c<='9
4c40: 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75  '; i++){}.  retu
4c50: 72 6e 20 69 3c 31 30 20 7c 7c 20 28 69 3d 3d 31  rn i<10 || (i==1
4c60: 30 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d  0 && memcmp(zNum
4c70: 2c 22 32 31 34 37 34 38 33 36 34 37 22 2c 31 30  ,"2147483647",10
4c80: 29 3c 3d 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  )<=0);.}../*.** 
4c90: 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  If zNum represen
4ca0: 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  ts an integer th
4cb0: 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 33  at will fit in 3
4cc0: 32 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74  2-bits, then set
4cd0: 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74  .** *pValue to t
4ce0: 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20  hat integer and 
4cf0: 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74  return true.  Ot
4d00: 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 66  herwise return f
4d10: 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  alse..*/.int sql
4d20: 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
4d30: 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69  st char *zNum, i
4d40: 6e 74 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69  nt *pValue){.  i
4d50: 66 28 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e  f( sqlite3FitsIn
4d60: 33 32 42 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a  32Bits(zNum) ){.
4d70: 20 20 20 20 2a 70 56 61 6c 75 65 20 3d 20 61 74      *pValue = at
4d80: 6f 69 28 7a 4e 75 6d 29 3b 0a 20 20 20 20 72 65  oi(zNum);.    re
4d90: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65  turn 1;.  }.  re
4da0: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
4db0: 20 54 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d   The string zNum
4dc0: 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69   represents an i
4dd0: 6e 74 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d  nteger.  There m
4de0: 69 67 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68  ight be some oth
4df0: 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  er.** informatio
4e00: 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  n following the 
4e10: 69 6e 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74  integer too, but
4e20: 20 74 68 61 74 20 70 61 72 74 20 69 73 20 69 67   that part is ig
4e30: 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65  nored..** If the
4e40: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 74 68   integer that th
4e50: 65 20 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d  e prefix of zNum
4e60: 20 72 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c   represents will
4e70: 20 66 69 74 20 69 6e 20 61 0a 2a 2a 20 36 34 2d   fit in a.** 64-
4e80: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
4e90: 65 72 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e  er, return TRUE.
4ea0: 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75    Otherwise retu
4eb0: 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20  rn FALSE..**.** 
4ec0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  This routine ret
4ed0: 75 72 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74  urns FALSE for t
4ee0: 68 65 20 73 74 72 69 6e 67 20 2d 39 32 32 33 33  he string -92233
4ef0: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 65  72036854775808 e
4f00: 76 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74  ven that.** that
4f10: 20 6e 75 6d 62 65 72 20 77 69 6c 6c 2c 20 69 6e   number will, in
4f20: 20 74 68 65 6f 72 79 20 66 69 74 20 69 6e 20 61   theory fit in a
4f30: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e   64-bit integer.
4f40: 20 20 50 6f 73 69 74 69 76 65 0a 2a 2a 20 39 32    Positive.** 92
4f50: 32 33 33 37 33 30 33 36 38 35 34 37 37 35 38 30  2337303685477580
4f60: 38 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69  8 will not fit i
4f70: 6e 20 36 34 20 62 69 74 73 2e 20 20 53 6f 20 69  n 64 bits.  So i
4f80: 74 20 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f  t seems safer to
4f90: 20 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65   return.** false
4fa0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4fb0: 46 69 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e  FitsIn64Bits(con
4fc0: 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a  st char *zNum){.
4fd0: 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66    int i, c;.  if
4fe0: 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20  ( *zNum=='-' || 
4ff0: 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75  *zNum=='+' ) zNu
5000: 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  m++;.  for(i=0; 
5010: 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27  (c=zNum[i])>='0'
5020: 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29   && c<='9'; i++)
5030: 7b 7d 0a 20 20 72 65 74 75 72 6e 20 69 3c 31 39  {}.  return i<19
5040: 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26 20 6d 65   || (i==19 && me
5050: 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32 33 33  mcmp(zNum,"92233
5060: 37 32 30 33 36 38 35 34 37 37 35 38 30 37 22 2c  72036854775807",
5070: 31 39 29 3c 3d 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  19)<=0);.}../*.*
5080: 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73  * If zNum repres
5090: 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ents an integer 
50a0: 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e  that will fit in
50b0: 20 36 34 2d 62 69 74 73 2c 20 74 68 65 6e 20 73   64-bits, then s
50c0: 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f  et.** *pValue to
50d0: 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e   that integer an
50e0: 64 20 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20  d return true.  
50f0: 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e  Otherwise return
5100: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73   false..*/.int s
5110: 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34 28 63  qlite3GetInt64(c
5120: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c  onst char *zNum,
5130: 20 69 36 34 20 2a 70 56 61 6c 75 65 29 7b 0a 20   i64 *pValue){. 
5140: 20 69 66 28 20 73 71 6c 69 74 65 33 46 69 74 73   if( sqlite3Fits
5150: 49 6e 36 34 42 69 74 73 28 7a 4e 75 6d 29 20 29  In64Bits(zNum) )
5160: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 61 74 6f  {.    sqlite3ato
5170: 69 36 34 28 7a 4e 75 6d 2c 20 70 56 61 6c 75 65  i64(zNum, pValue
5180: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  );.    return 1;
5190: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
51a0: 0a 7d 0a 0a 23 69 66 20 31 20 20 2f 2a 20 57 65  .}..#if 1  /* We
51b0: 20 61 72 65 20 6e 6f 77 20 61 6c 77 61 79 73 20   are now always 
51c0: 55 54 46 2d 38 20 2a 2f 0a 2f 2a 0a 2a 2a 20 58  UTF-8 */./*.** X
51d0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
51e0: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
51f0: 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
5200: 63 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74  cter.  Increment
5210: 0a 2a 2a 20 58 20 73 6f 20 74 68 61 74 20 69 74  .** X so that it
5220: 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
5230: 65 78 74 20 63 68 61 72 61 63 74 65 72 2e 20 20  ext character.  
5240: 54 68 69 73 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  This only works 
5250: 72 69 67 68 74 0a 2a 2a 20 69 66 20 58 20 70 6f  right.** if X po
5260: 69 6e 74 73 20 74 6f 20 61 20 77 65 6c 6c 2d 66  ints to a well-f
5270: 6f 72 6d 65 64 20 55 54 46 2d 38 20 73 74 72 69  ormed UTF-8 stri
5280: 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73  ng..*/.#define s
5290: 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28 58 29  qliteNextChar(X)
52a0: 20 20 77 68 69 6c 65 28 20 28 30 78 63 30 26 2a    while( (0xc0&*
52b0: 2b 2b 28 58 29 29 3d 3d 30 78 38 30 20 29 7b 7d  ++(X))==0x80 ){}
52c0: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 43  .#define sqliteC
52d0: 68 61 72 56 61 6c 28 58 29 20 20 20 73 71 6c 69  harVal(X)   sqli
52e0: 74 65 33 52 65 61 64 55 74 66 38 28 58 29 0a 0a  te3ReadUtf8(X)..
52f0: 23 65 6c 73 65 20 2f 2a 20 21 64 65 66 69 6e 65  #else /* !define
5300: 64 28 53 51 4c 49 54 45 5f 55 54 46 38 29 20 2a  d(SQLITE_UTF8) *
5310: 2f 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 69 73 6f 38  /./*.** For iso8
5320: 38 35 39 20 65 6e 63 6f 64 69 6e 67 2c 20 74 68  859 encoding, th
5330: 65 20 6e 65 78 74 20 63 68 61 72 61 63 74 65 72  e next character
5340: 20 69 73 20 6a 75 73 74 20 74 68 65 20 6e 65 78   is just the nex
5350: 74 20 62 79 74 65 2e 0a 2a 2f 0a 23 64 65 66 69  t byte..*/.#defi
5360: 6e 65 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61  ne sqliteNextCha
5370: 72 28 58 29 20 20 28 2b 2b 28 58 29 29 3b 0a 23  r(X)  (++(X));.#
5380: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 43 68 61  define sqliteCha
5390: 72 56 61 6c 28 58 29 20 20 20 28 28 69 6e 74 29  rVal(X)   ((int)
53a0: 2a 28 58 29 29 0a 0a 23 65 6e 64 69 66 20 2f 2a  *(X))..#endif /*
53b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
53c0: 55 54 46 38 29 20 2a 2f 0a 0a 0a 23 69 66 20 31  UTF8) */...#if 1
53d0: 20 20 2f 2a 20 57 65 20 61 72 65 20 6e 6f 77 20    /* We are now 
53e0: 61 6c 77 61 79 73 20 55 54 46 2d 38 20 2a 2f 0a  always UTF-8 */.
53f0: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68  /*.** Convert th
5400: 65 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  e UTF-8 characte
5410: 72 20 74 6f 20 77 68 69 63 68 20 7a 20 70 6f 69  r to which z poi
5420: 6e 74 73 20 69 6e 74 6f 20 61 20 33 31 2d 62 69  nts into a 31-bi
5430: 74 0a 2a 2a 20 55 43 53 20 63 68 61 72 61 63 74  t.** UCS charact
5440: 65 72 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 77  er.  This only w
5450: 6f 72 6b 73 20 72 69 67 68 74 20 69 66 20 7a 20  orks right if z 
5460: 70 6f 69 6e 74 73 20 74 6f 20 61 20 77 65 6c 6c  points to a well
5470: 2d 66 6f 72 6d 65 64 0a 2a 2a 20 55 54 46 2d 38  -formed.** UTF-8
5480: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 69 6e 74 20   string..*/.int 
5490: 73 71 6c 69 74 65 33 52 65 61 64 55 74 66 38 28  sqlite3ReadUtf8(
54a0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
54b0: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63  har *z){.  int c
54c0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
54d0: 20 69 6e 74 20 69 6e 69 74 56 61 6c 5b 5d 20 3d   int initVal[] =
54e0: 20 7b 0a 20 20 20 20 20 20 30 2c 20 20 20 31 2c   {.      0,   1,
54f0: 20 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20     2,   3,   4, 
5500: 20 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20    5,   6,   7,  
5510: 20 38 2c 20 20 20 39 2c 20 20 31 30 2c 20 20 31   8,   9,  10,  1
5520: 31 2c 20 20 31 32 2c 20 20 31 33 2c 20 20 31 34  1,  12,  13,  14
5530: 2c 0a 20 20 20 20 20 31 35 2c 20 20 31 36 2c 20  ,.     15,  16, 
5540: 20 31 37 2c 20 20 31 38 2c 20 20 31 39 2c 20 20   17,  18,  19,  
5550: 32 30 2c 20 20 32 31 2c 20 20 32 32 2c 20 20 32  20,  21,  22,  2
5560: 33 2c 20 20 32 34 2c 20 20 32 35 2c 20 20 32 36  3,  24,  25,  26
5570: 2c 20 20 32 37 2c 20 20 32 38 2c 20 20 32 39 2c  ,  27,  28,  29,
5580: 0a 20 20 20 20 20 33 30 2c 20 20 33 31 2c 20 20  .     30,  31,  
5590: 33 32 2c 20 20 33 33 2c 20 20 33 34 2c 20 20 33  32,  33,  34,  3
55a0: 35 2c 20 20 33 36 2c 20 20 33 37 2c 20 20 33 38  5,  36,  37,  38
55b0: 2c 20 20 33 39 2c 20 20 34 30 2c 20 20 34 31 2c  ,  39,  40,  41,
55c0: 20 20 34 32 2c 20 20 34 33 2c 20 20 34 34 2c 0a    42,  43,  44,.
55d0: 20 20 20 20 20 34 35 2c 20 20 34 36 2c 20 20 34       45,  46,  4
55e0: 37 2c 20 20 34 38 2c 20 20 34 39 2c 20 20 35 30  7,  48,  49,  50
55f0: 2c 20 20 35 31 2c 20 20 35 32 2c 20 20 35 33 2c  ,  51,  52,  53,
5600: 20 20 35 34 2c 20 20 35 35 2c 20 20 35 36 2c 20    54,  55,  56, 
5610: 20 35 37 2c 20 20 35 38 2c 20 20 35 39 2c 0a 20   57,  58,  59,. 
5620: 20 20 20 20 36 30 2c 20 20 36 31 2c 20 20 36 32      60,  61,  62
5630: 2c 20 20 36 33 2c 20 20 36 34 2c 20 20 36 35 2c  ,  63,  64,  65,
5640: 20 20 36 36 2c 20 20 36 37 2c 20 20 36 38 2c 20    66,  67,  68, 
5650: 20 36 39 2c 20 20 37 30 2c 20 20 37 31 2c 20 20   69,  70,  71,  
5660: 37 32 2c 20 20 37 33 2c 20 20 37 34 2c 0a 20 20  72,  73,  74,.  
5670: 20 20 20 37 35 2c 20 20 37 36 2c 20 20 37 37 2c     75,  76,  77,
5680: 20 20 37 38 2c 20 20 37 39 2c 20 20 38 30 2c 20    78,  79,  80, 
5690: 20 38 31 2c 20 20 38 32 2c 20 20 38 33 2c 20 20   81,  82,  83,  
56a0: 38 34 2c 20 20 38 35 2c 20 20 38 36 2c 20 20 38  84,  85,  86,  8
56b0: 37 2c 20 20 38 38 2c 20 20 38 39 2c 0a 20 20 20  7,  88,  89,.   
56c0: 20 20 39 30 2c 20 20 39 31 2c 20 20 39 32 2c 20    90,  91,  92, 
56d0: 20 39 33 2c 20 20 39 34 2c 20 20 39 35 2c 20 20   93,  94,  95,  
56e0: 39 36 2c 20 20 39 37 2c 20 20 39 38 2c 20 20 39  96,  97,  98,  9
56f0: 39 2c 20 31 30 30 2c 20 31 30 31 2c 20 31 30 32  9, 100, 101, 102
5700: 2c 20 31 30 33 2c 20 31 30 34 2c 0a 20 20 20 20  , 103, 104,.    
5710: 31 30 35 2c 20 31 30 36 2c 20 31 30 37 2c 20 31  105, 106, 107, 1
5720: 30 38 2c 20 31 30 39 2c 20 31 31 30 2c 20 31 31  08, 109, 110, 11
5730: 31 2c 20 31 31 32 2c 20 31 31 33 2c 20 31 31 34  1, 112, 113, 114
5740: 2c 20 31 31 35 2c 20 31 31 36 2c 20 31 31 37 2c  , 115, 116, 117,
5750: 20 31 31 38 2c 20 31 31 39 2c 0a 20 20 20 20 31   118, 119,.    1
5760: 32 30 2c 20 31 32 31 2c 20 31 32 32 2c 20 31 32  20, 121, 122, 12
5770: 33 2c 20 31 32 34 2c 20 31 32 35 2c 20 31 32 36  3, 124, 125, 126
5780: 2c 20 31 32 37 2c 20 31 32 38 2c 20 31 32 39 2c  , 127, 128, 129,
5790: 20 31 33 30 2c 20 31 33 31 2c 20 31 33 32 2c 20   130, 131, 132, 
57a0: 31 33 33 2c 20 31 33 34 2c 0a 20 20 20 20 31 33  133, 134,.    13
57b0: 35 2c 20 31 33 36 2c 20 31 33 37 2c 20 31 33 38  5, 136, 137, 138
57c0: 2c 20 31 33 39 2c 20 31 34 30 2c 20 31 34 31 2c  , 139, 140, 141,
57d0: 20 31 34 32 2c 20 31 34 33 2c 20 31 34 34 2c 20   142, 143, 144, 
57e0: 31 34 35 2c 20 31 34 36 2c 20 31 34 37 2c 20 31  145, 146, 147, 1
57f0: 34 38 2c 20 31 34 39 2c 0a 20 20 20 20 31 35 30  48, 149,.    150
5800: 2c 20 31 35 31 2c 20 31 35 32 2c 20 31 35 33 2c  , 151, 152, 153,
5810: 20 31 35 34 2c 20 31 35 35 2c 20 31 35 36 2c 20   154, 155, 156, 
5820: 31 35 37 2c 20 31 35 38 2c 20 31 35 39 2c 20 31  157, 158, 159, 1
5830: 36 30 2c 20 31 36 31 2c 20 31 36 32 2c 20 31 36  60, 161, 162, 16
5840: 33 2c 20 31 36 34 2c 0a 20 20 20 20 31 36 35 2c  3, 164,.    165,
5850: 20 31 36 36 2c 20 31 36 37 2c 20 31 36 38 2c 20   166, 167, 168, 
5860: 31 36 39 2c 20 31 37 30 2c 20 31 37 31 2c 20 31  169, 170, 171, 1
5870: 37 32 2c 20 31 37 33 2c 20 31 37 34 2c 20 31 37  72, 173, 174, 17
5880: 35 2c 20 31 37 36 2c 20 31 37 37 2c 20 31 37 38  5, 176, 177, 178
5890: 2c 20 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 20  , 179,.    180, 
58a0: 31 38 31 2c 20 31 38 32 2c 20 31 38 33 2c 20 31  181, 182, 183, 1
58b0: 38 34 2c 20 31 38 35 2c 20 31 38 36 2c 20 31 38  84, 185, 186, 18
58c0: 37 2c 20 31 38 38 2c 20 31 38 39 2c 20 31 39 30  7, 188, 189, 190
58d0: 2c 20 31 39 31 2c 20 20 20 30 2c 20 20 20 31 2c  , 191,   0,   1,
58e0: 20 20 20 32 2c 0a 20 20 20 20 20 20 33 2c 20 20     2,.      3,  
58f0: 20 34 2c 20 20 20 35 2c 20 20 20 36 2c 20 20 20   4,   5,   6,   
5900: 37 2c 20 20 20 38 2c 20 20 20 39 2c 20 20 31 30  7,   8,   9,  10
5910: 2c 20 20 31 31 2c 20 20 31 32 2c 20 20 31 33 2c  ,  11,  12,  13,
5920: 20 20 31 34 2c 20 20 31 35 2c 20 20 31 36 2c 20    14,  15,  16, 
5930: 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20 20 31   17,.     18,  1
5940: 39 2c 20 20 32 30 2c 20 20 32 31 2c 20 20 32 32  9,  20,  21,  22
5950: 2c 20 20 32 33 2c 20 20 32 34 2c 20 20 32 35 2c  ,  23,  24,  25,
5960: 20 20 32 36 2c 20 20 32 37 2c 20 20 32 38 2c 20    26,  27,  28, 
5970: 20 32 39 2c 20 20 33 30 2c 20 20 33 31 2c 20 20   29,  30,  31,  
5980: 20 30 2c 0a 20 20 20 20 20 20 31 2c 20 20 20 32   0,.      1,   2
5990: 2c 20 20 20 33 2c 20 20 20 34 2c 20 20 20 35 2c  ,   3,   4,   5,
59a0: 20 20 20 36 2c 20 20 20 37 2c 20 20 20 38 2c 20     6,   7,   8, 
59b0: 20 20 39 2c 20 20 31 30 2c 20 20 31 31 2c 20 20    9,  10,  11,  
59c0: 31 32 2c 20 20 31 33 2c 20 20 31 34 2c 20 20 31  12,  13,  14,  1
59d0: 35 2c 0a 20 20 20 20 20 20 30 2c 20 20 20 31 2c  5,.      0,   1,
59e0: 20 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20     2,   3,   4, 
59f0: 20 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20    5,   6,   7,  
5a00: 20 30 2c 20 20 20 31 2c 20 20 20 32 2c 20 20 20   0,   1,   2,   
5a10: 33 2c 20 20 20 30 2c 20 20 20 31 2c 20 32 35 34  3,   0,   1, 254
5a20: 2c 0a 20 20 20 20 32 35 35 2c 0a 20 20 7d 3b 0a  ,.    255,.  };.
5a30: 20 20 63 20 3d 20 69 6e 69 74 56 61 6c 5b 2a 28    c = initVal[*(
5a40: 7a 2b 2b 29 5d 3b 0a 20 20 77 68 69 6c 65 28 20  z++)];.  while( 
5a50: 28 30 78 63 30 26 2a 7a 29 3d 3d 30 78 38 30 20  (0xc0&*z)==0x80 
5a60: 29 7b 0a 20 20 20 20 63 20 3d 20 28 63 3c 3c 36  ){.    c = (c<<6
5a70: 29 20 7c 20 28 30 78 33 66 26 2a 28 7a 2b 2b 29  ) | (0x3f&*(z++)
5a80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
5a90: 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c;.}.#endif../*.
5aa0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 55  ** Compare two U
5ab0: 54 46 2d 38 20 73 74 72 69 6e 67 73 20 66 6f 72  TF-8 strings for
5ac0: 20 65 71 75 61 6c 69 74 79 20 77 68 65 72 65 20   equality where 
5ad0: 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67  the first string
5ae0: 20 63 61 6e 0a 2a 2a 20 70 6f 74 65 6e 74 69 61   can.** potentia
5af0: 6c 6c 79 20 62 65 20 61 20 22 67 6c 6f 62 22 20  lly be a "glob" 
5b00: 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 52 65 74  expression.  Ret
5b10: 75 72 6e 20 74 72 75 65 20 28 31 29 20 69 66 20  urn true (1) if 
5b20: 74 68 65 79 0a 2a 2a 20 61 72 65 20 74 68 65 20  they.** are the 
5b30: 73 61 6d 65 20 61 6e 64 20 66 61 6c 73 65 20 28  same and false (
5b40: 30 29 20 69 66 20 74 68 65 79 20 61 72 65 20 64  0) if they are d
5b50: 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  ifferent..**.** 
5b60: 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a  Globbing rules:.
5b70: 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20 20  **.**      '*'  
5b80: 20 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79       Matches any
5b90: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72   sequence of zer
5ba0: 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63  o or more charac
5bb0: 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ters..**.**     
5bc0: 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63 68   '?'       Match
5bd0: 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 63  es exactly one c
5be0: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  haracter..**.** 
5bf0: 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d      [...]      M
5c00: 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61  atches one chara
5c10: 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65 6e  cter from the en
5c20: 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a  closed list of.*
5c30: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
5c40: 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
5c50: 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20  **     [^...]   
5c60: 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68    Matches one ch
5c70: 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20 74  aracter not in t
5c80: 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74  he enclosed list
5c90: 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
5ca0: 20 5b 2e 2e 2e 5d 20 61 6e 64 20 5b 5e 2e 2e 2e   [...] and [^...
5cb0: 5d 20 6d 61 74 63 68 69 6e 67 2c 20 61 20 27 5d  ] matching, a ']
5cc0: 27 20 63 68 61 72 61 63 74 65 72 20 63 61 6e 20  ' character can 
5cd0: 62 65 20 69 6e 63 6c 75 64 65 64 0a 2a 2a 20 69  be included.** i
5ce0: 6e 20 74 68 65 20 6c 69 73 74 20 62 79 20 6d 61  n the list by ma
5cf0: 6b 69 6e 67 20 69 74 20 74 68 65 20 66 69 72 73  king it the firs
5d00: 74 20 63 68 61 72 61 63 74 65 72 20 61 66 74 65  t character afte
5d10: 72 20 27 5b 27 20 6f 72 20 27 5e 27 2e 20 20 41  r '[' or '^'.  A
5d20: 0a 2a 2a 20 72 61 6e 67 65 20 6f 66 20 63 68 61  .** range of cha
5d30: 72 61 63 74 65 72 73 20 63 61 6e 20 62 65 20 73  racters can be s
5d40: 70 65 63 69 66 69 65 64 20 75 73 69 6e 67 20 27  pecified using '
5d50: 2d 27 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 2a 2a  -'.  Example:.**
5d60: 20 22 5b 61 2d 7a 5d 22 20 6d 61 74 63 68 65 73   "[a-z]" matches
5d70: 20 61 6e 79 20 73 69 6e 67 6c 65 20 6c 6f 77 65   any single lowe
5d80: 72 2d 63 61 73 65 20 6c 65 74 74 65 72 2e 20 20  r-case letter.  
5d90: 54 6f 20 6d 61 74 63 68 20 61 20 27 2d 27 2c 20  To match a '-', 
5da0: 6d 61 6b 65 0a 2a 2a 20 69 74 20 74 68 65 20 6c  make.** it the l
5db0: 61 73 74 20 63 68 61 72 61 63 74 65 72 20 69 6e  ast character in
5dc0: 20 74 68 65 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a   the list..**.**
5dd0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
5de0: 20 75 73 75 61 6c 6c 79 20 71 75 69 63 6b 2c 20   usually quick, 
5df0: 62 75 74 20 63 61 6e 20 62 65 20 4e 2a 2a 32 20  but can be N**2 
5e00: 69 6e 20 74 68 65 20 77 6f 72 73 74 20 63 61 73  in the worst cas
5e10: 65 2e 0a 2a 2a 0a 2a 2a 20 48 69 6e 74 73 3a 20  e..**.** Hints: 
5e20: 74 6f 20 6d 61 74 63 68 20 27 2a 27 20 6f 72 20  to match '*' or 
5e30: 27 3f 27 2c 20 70 75 74 20 74 68 65 6d 20 69 6e  '?', put them in
5e40: 20 22 5b 5d 22 2e 20 20 4c 69 6b 65 20 74 68 69   "[]".  Like thi
5e50: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5e60: 20 61 62 63 5b 2a 5d 78 79 7a 20 20 20 20 20 20   abc[*]xyz      
5e70: 20 20 4d 61 74 63 68 65 73 20 22 61 62 63 2a 78    Matches "abc*x
5e80: 79 7a 22 20 6f 6e 6c 79 0a 2a 2f 0a 69 6e 74 20  yz" only.*/.int 
5e90: 0a 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70  .sqlite3GlobComp
5ea0: 61 72 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  are(const unsign
5eb0: 65 64 20 63 68 61 72 20 2a 7a 50 61 74 74 65 72  ed char *zPatter
5ec0: 6e 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  n, const unsigne
5ed0: 64 20 63 68 61 72 20 2a 7a 53 74 72 69 6e 67 29  d char *zString)
5ee0: 7b 0a 20 20 72 65 67 69 73 74 65 72 20 69 6e 74  {.  register int
5ef0: 20 63 3b 0a 20 20 69 6e 74 20 69 6e 76 65 72 74   c;.  int invert
5f00: 3b 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a 20 20  ;.  int seen;.  
5f10: 69 6e 74 20 63 32 3b 0a 0a 20 20 77 68 69 6c 65  int c2;..  while
5f20: 28 20 28 63 20 3d 20 2a 7a 50 61 74 74 65 72 6e  ( (c = *zPattern
5f30: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 77 69 74  )!=0 ){.    swit
5f40: 63 68 28 20 63 20 29 7b 0a 20 20 20 20 20 20 63  ch( c ){.      c
5f50: 61 73 65 20 27 2a 27 3a 0a 20 20 20 20 20 20 20  ase '*':.       
5f60: 20 77 68 69 6c 65 28 20 28 63 3d 7a 50 61 74 74   while( (c=zPatt
5f70: 65 72 6e 5b 31 5d 29 20 3d 3d 20 27 2a 27 20 7c  ern[1]) == '*' |
5f80: 7c 20 63 20 3d 3d 20 27 3f 27 20 29 7b 0a 20 20  | c == '?' ){.  
5f90: 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27          if( c=='
5fa0: 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ?' ){.          
5fb0: 20 20 69 66 28 20 2a 7a 53 74 72 69 6e 67 3d 3d    if( *zString==
5fc0: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
5fd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5fe0: 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67  NextChar(zString
5ff0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
6000: 20 20 20 20 20 20 20 20 20 7a 50 61 74 74 65 72           zPatter
6010: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  n++;.        }. 
6020: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20         if( c==0 
6030: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20  ) return 1;.    
6040: 20 20 20 20 69 66 28 20 63 3d 3d 27 5b 27 20 29      if( c=='[' )
6050: 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  {.          whil
6060: 65 28 20 2a 7a 53 74 72 69 6e 67 20 26 26 20 73  e( *zString && s
6070: 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72  qlite3GlobCompar
6080: 65 28 26 7a 50 61 74 74 65 72 6e 5b 31 5d 2c 7a  e(&zPattern[1],z
6090: 53 74 72 69 6e 67 29 3d 3d 30 20 29 7b 0a 20 20  String)==0 ){.  
60a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
60b0: 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67  NextChar(zString
60c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
60d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
60e0: 2a 7a 53 74 72 69 6e 67 21 3d 30 3b 0a 20 20 20  *zString!=0;.   
60f0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6100: 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 32        while( (c2
6110: 20 3d 20 2a 7a 53 74 72 69 6e 67 29 21 3d 30 20   = *zString)!=0 
6120: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ){.            w
6130: 68 69 6c 65 28 20 63 32 20 21 3d 20 30 20 26 26  hile( c2 != 0 &&
6140: 20 63 32 20 21 3d 20 63 20 29 7b 20 63 32 20 3d   c2 != c ){ c2 =
6150: 20 2a 2b 2b 7a 53 74 72 69 6e 67 3b 20 7d 0a 20   *++zString; }. 
6160: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63             if( c
6170: 32 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  2==0 ) return 0;
6180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
6190: 20 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70   sqlite3GlobComp
61a0: 61 72 65 28 26 7a 50 61 74 74 65 72 6e 5b 31 5d  are(&zPattern[1]
61b0: 2c 7a 53 74 72 69 6e 67 29 20 29 20 72 65 74 75  ,zString) ) retu
61c0: 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20  rn 1;.          
61d0: 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72    sqliteNextChar
61e0: 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20  (zString);.     
61f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
6200: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
6210: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
6220: 27 3f 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  '?': {.        i
6230: 66 28 20 2a 7a 53 74 72 69 6e 67 3d 3d 30 20 29  f( *zString==0 )
6240: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
6250: 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61     sqliteNextCha
6260: 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20  r(zString);.    
6270: 20 20 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a      zPattern++;.
6280: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
6290: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
62a0: 65 20 27 5b 27 3a 20 7b 0a 20 20 20 20 20 20 20  e '[': {.       
62b0: 20 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d 20 30   int prior_c = 0
62c0: 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d  ;.        seen =
62d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 76 65   0;.        inve
62e0: 72 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  rt = 0;.        
62f0: 63 20 3d 20 73 71 6c 69 74 65 43 68 61 72 56 61  c = sqliteCharVa
6300: 6c 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20  l(zString);.    
6310: 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20 72      if( c==0 ) r
6320: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
6330: 20 63 32 20 3d 20 2a 2b 2b 7a 50 61 74 74 65 72   c2 = *++zPatter
6340: 6e 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  n;.        if( c
6350: 32 3d 3d 27 5e 27 20 29 7b 20 69 6e 76 65 72 74  2=='^' ){ invert
6360: 20 3d 20 31 3b 20 63 32 20 3d 20 2a 2b 2b 7a 50   = 1; c2 = *++zP
6370: 61 74 74 65 72 6e 3b 20 7d 0a 20 20 20 20 20 20  attern; }.      
6380: 20 20 69 66 28 20 63 32 3d 3d 27 5d 27 20 29 7b    if( c2==']' ){
6390: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
63a0: 3d 3d 27 5d 27 20 29 20 73 65 65 6e 20 3d 20 31  ==']' ) seen = 1
63b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20 3d  ;.          c2 =
63c0: 20 2a 2b 2b 7a 50 61 74 74 65 72 6e 3b 0a 20 20   *++zPattern;.  
63d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
63e0: 77 68 69 6c 65 28 20 28 63 32 20 3d 20 73 71 6c  while( (c2 = sql
63f0: 69 74 65 43 68 61 72 56 61 6c 28 7a 50 61 74 74  iteCharVal(zPatt
6400: 65 72 6e 29 29 21 3d 30 20 26 26 20 63 32 21 3d  ern))!=0 && c2!=
6410: 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ']' ){.         
6420: 20 69 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20   if( c2=='-' && 
6430: 7a 50 61 74 74 65 72 6e 5b 31 5d 21 3d 27 5d 27  zPattern[1]!=']'
6440: 20 26 26 20 7a 50 61 74 74 65 72 6e 5b 31 5d 21   && zPattern[1]!
6450: 3d 30 20 26 26 20 70 72 69 6f 72 5f 63 3e 30 20  =0 && prior_c>0 
6460: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a  ){.            z
6470: 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20  Pattern++;.     
6480: 20 20 20 20 20 20 20 63 32 20 3d 20 73 71 6c 69         c2 = sqli
6490: 74 65 43 68 61 72 56 61 6c 28 7a 50 61 74 74 65  teCharVal(zPatte
64a0: 72 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  rn);.           
64b0: 20 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20   if( c>=prior_c 
64c0: 26 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20  && c<=c2 ) seen 
64d0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 1;.           
64e0: 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20   prior_c = 0;.  
64f0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
6500: 28 20 63 3d 3d 63 32 20 29 7b 0a 20 20 20 20 20  ( c==c2 ){.     
6510: 20 20 20 20 20 20 20 73 65 65 6e 20 3d 20 31 3b         seen = 1;
6520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6530: 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20  or_c = c2;.     
6540: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6550: 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63 20          prior_c 
6560: 3d 20 63 32 3b 0a 20 20 20 20 20 20 20 20 20 20  = c2;.          
6570: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
6580: 74 65 4e 65 78 74 43 68 61 72 28 7a 50 61 74 74  teNextChar(zPatt
6590: 65 72 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ern);.        }.
65a0: 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d          if( c2==
65b0: 30 20 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e 76  0 || (seen ^ inv
65c0: 65 72 74 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  ert)==0 ) return
65d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
65e0: 74 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69  teNextChar(zStri
65f0: 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 50 61  ng);.        zPa
6600: 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  ttern++;.       
6610: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
6620: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
6630: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 20 21  .        if( c !
6640: 3d 20 2a 7a 53 74 72 69 6e 67 20 29 20 72 65 74  = *zString ) ret
6650: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7a  urn 0;.        z
6660: 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20  Pattern++;.     
6670: 20 20 20 7a 53 74 72 69 6e 67 2b 2b 3b 0a 20 20     zString++;.  
6680: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6690: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
66a0: 20 72 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e 67   return *zString
66b0: 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68  ==0;.}../*.** Ch
66c0: 61 6e 67 65 20 74 68 65 20 73 71 6c 69 74 65 2e  ange the sqlite.
66d0: 6d 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54  magic from SQLIT
66e0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20  E_MAGIC_OPEN to 
66f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
6700: 59 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20  Y..** Return an 
6710: 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29  error (non-zero)
6720: 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61   if the magic wa
6730: 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47  s not SQLITE_MAG
6740: 49 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20  IC_OPEN.** when 
6750: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
6760: 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  called..**.** Th
6770: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
6780: 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 63  attempt to detec
6790: 74 20 69 66 20 74 77 6f 20 74 68 72 65 61 64 73  t if two threads
67a0: 20 75 73 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65   use the.** same
67b0: 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72   sqlite* pointer
67c0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
67d0: 65 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 72  e.  There is a r
67e0: 61 63 65 20 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f  ace .** conditio
67f0: 6e 20 73 6f 20 69 74 20 69 73 20 70 6f 73 73 69  n so it is possi
6800: 62 6c 65 20 74 68 61 74 20 74 68 65 20 65 72 72  ble that the err
6810: 6f 72 20 69 73 20 6e 6f 74 20 64 65 74 65 63 74  or is not detect
6820: 65 64 2e 0a 2a 2a 20 42 75 74 20 75 73 75 61 6c  ed..** But usual
6830: 6c 79 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 77  ly the problem w
6840: 69 6c 6c 20 62 65 20 73 65 65 6e 2e 20 20 54 68  ill be seen.  Th
6850: 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65  e result will be
6860: 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 77 68 69   an.** error whi
6870: 63 68 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  ch can be used t
6880: 6f 20 64 65 62 75 67 20 74 68 65 20 61 70 70 6c  o debug the appl
6890: 69 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 0a  ication that is.
68a0: 2a 2a 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20  ** using SQLite 
68b0: 69 6e 63 6f 72 72 65 63 74 6c 79 2e 0a 2a 2a 0a  incorrectly..**.
68c0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 30 32 3a 20  ** Ticket #202: 
68d0: 20 49 66 20 64 62 2d 3e 6d 61 67 69 63 20 69 73   If db->magic is
68e0: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 6f 70 65   not a valid ope
68f0: 6e 20 76 61 6c 75 65 2c 20 74 61 6b 65 20 63 61  n value, take ca
6900: 72 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20 6d 6f 64  re not.** to mod
6910: 69 66 79 20 74 68 65 20 64 62 20 73 74 72 75 63  ify the db struc
6920: 74 75 72 65 20 61 74 20 61 6c 6c 2e 20 20 49 74  ture at all.  It
6930: 20 63 6f 75 6c 64 20 62 65 20 74 68 61 74 20 64   could be that d
6940: 62 20 69 73 20 61 20 73 74 61 6c 65 0a 2a 2a 20  b is a stale.** 
6950: 70 6f 69 6e 74 65 72 2e 20 20 49 6e 20 6f 74 68  pointer.  In oth
6960: 65 72 20 77 6f 72 64 73 2c 20 69 74 20 63 6f 75  er words, it cou
6970: 6c 64 20 62 65 20 74 68 61 74 20 74 68 65 72 65  ld be that there
6980: 20 68 61 73 20 62 65 65 6e 20 61 20 70 72 69 6f   has been a prio
6990: 72 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20 73 71 6c  r.** call to sql
69a0: 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 20 61  ite3_close(db) a
69b0: 6e 64 20 64 62 20 68 61 73 20 62 65 65 6e 20 64  nd db has been d
69c0: 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20 41 6e 64  eallocated.  And
69d0: 20 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74 20 77 61   we do.** not wa
69e0: 6e 74 20 74 6f 20 77 72 69 74 65 20 69 6e 74 6f  nt to write into
69f0: 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d   deallocated mem
6a00: 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ory..*/.int sqli
6a10: 74 65 33 53 61 66 65 74 79 4f 6e 28 73 71 6c 69  te3SafetyOn(sqli
6a20: 74 65 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64  te *db){.  if( d
6a30: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
6a40: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20  _MAGIC_OPEN ){. 
6a50: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
6a60: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
6a70: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
6a80: 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
6a90: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
6aa0: 47 49 43 5f 42 55 53 59 20 7c 7c 20 64 62 2d 3e  GIC_BUSY || db->
6ab0: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
6ac0: 47 49 43 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20  GIC_ERROR ){.   
6ad0: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
6ae0: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b  ITE_MAGIC_ERROR;
6af0: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
6b00: 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75  = SQLITE_Interru
6b10: 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  pt;.  }.  return
6b20: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61   1;.}../*.** Cha
6b30: 6e 67 65 20 74 68 65 20 6d 61 67 69 63 20 66 72  nge the magic fr
6b40: 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  om SQLITE_MAGIC_
6b50: 42 55 53 59 20 74 6f 20 53 51 4c 49 54 45 5f 4d  BUSY to SQLITE_M
6b60: 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20 52 65  AGIC_OPEN..** Re
6b70: 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e  turn an error (n
6b80: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
6b90: 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51  magic was not SQ
6ba0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 0a  LITE_MAGIC_BUSY.
6bb0: 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75  ** when this rou
6bc0: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a  tine is called..
6bd0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  */.int sqlite3Sa
6be0: 66 65 74 79 4f 66 66 28 73 71 6c 69 74 65 20 2a  fetyOff(sqlite *
6bf0: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  db){.  if( db->m
6c00: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
6c10: 49 43 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 64  IC_BUSY ){.    d
6c20: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
6c30: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20  E_MAGIC_OPEN;.  
6c40: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
6c50: 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69  lse if( db->magi
6c60: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
6c70: 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67 69  OPEN || db->magi
6c80: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
6c90: 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 64 62 2d  ERROR ){.    db-
6ca0: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
6cb0: 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20  MAGIC_ERROR;.   
6cc0: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
6cd0: 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a  LITE_Interrupt;.
6ce0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a    }.  return 1;.
6cf0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
6d00: 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 61  o make sure we a
6d10: 72 65 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  re not currently
6d20: 20 65 78 65 63 75 74 69 6e 67 20 61 6e 20 73 71   executing an sq
6d30: 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2a  lite3_exec()..**
6d40: 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72 65   If we are curre
6d50: 6e 74 6c 79 20 69 6e 20 61 6e 20 73 71 6c 69 74  ntly in an sqlit
6d60: 65 33 5f 65 78 65 63 28 29 2c 20 72 65 74 75 72  e3_exec(), retur
6d70: 6e 20 74 72 75 65 20 61 6e 64 20 73 65 74 0a 2a  n true and set.*
6d80: 2a 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 74  * sqlite.magic t
6d90: 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  o SQLITE_MAGIC_E
6da0: 52 52 4f 52 2e 20 20 54 68 69 73 20 77 69 6c 6c  RROR.  This will
6db0: 20 63 61 75 73 65 20 61 20 63 6f 6d 70 6c 65 74   cause a complet
6dc0: 65 0a 2a 2a 20 73 68 75 74 64 6f 77 6e 20 6f 66  e.** shutdown of
6dd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 2a   the database..*
6de0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
6df0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 74 72 79  e is used to try
6e00: 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
6e10: 41 50 49 20 72 6f 75 74 69 6e 65 73 20 61 72 65  API routines are
6e20: 20 63 61 6c 6c 65 64 0a 2a 2a 20 61 74 20 74 68   called.** at th
6e30: 65 20 77 72 6f 6e 67 20 74 69 6d 65 20 6f 72 20  e wrong time or 
6e40: 69 6e 20 74 68 65 20 77 72 6f 6e 67 20 73 65 71  in the wrong seq
6e50: 75 65 6e 63 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  uence..*/.int sq
6e60: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
6e70: 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20  (sqlite *db){.  
6e80: 69 66 28 20 64 62 2d 3e 70 56 64 62 65 21 3d 30  if( db->pVdbe!=0
6e90: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
6ea0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
6eb0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 65 74 75  _ERROR;.    retu
6ec0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
6ed0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn 0;.}../*.** T
6ee0: 68 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  he variable-leng
6ef0: 74 68 20 69 6e 74 65 67 65 72 20 65 6e 63 6f 64  th integer encod
6f00: 69 6e 67 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ing is as follow
6f10: 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a 2a 2a  s:.**.** KEY:.**
6f20: 20 20 20 20 20 20 20 20 20 41 20 3d 20 30 78 78           A = 0xx
6f30: 78 78 78 78 78 20 20 20 20 37 20 62 69 74 73 20  xxxxx    7 bits 
6f40: 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20  of data and one 
6f50: 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20  flag bit.**     
6f60: 20 20 20 20 42 20 3d 20 31 78 78 78 78 78 78 78      B = 1xxxxxxx
6f70: 20 20 20 20 37 20 62 69 74 73 20 6f 66 20 64 61      7 bits of da
6f80: 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20  ta and one flag 
6f90: 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 43  bit.**         C
6fa0: 20 3d 20 78 78 78 78 78 78 78 78 20 20 20 20 38   = xxxxxxxx    8
6fb0: 20 62 69 74 73 20 6f 66 20 64 61 74 61 0a 2a 2a   bits of data.**
6fc0: 0a 2a 2a 20 20 37 20 62 69 74 73 20 2d 20 41 0a  .**  7 bits - A.
6fd0: 2a 2a 20 31 34 20 62 69 74 73 20 2d 20 42 41 0a  ** 14 bits - BA.
6fe0: 2a 2a 20 32 31 20 62 69 74 73 20 2d 20 42 42 41  ** 21 bits - BBA
6ff0: 0a 2a 2a 20 32 38 20 62 69 74 73 20 2d 20 42 42  .** 28 bits - BB
7000: 42 41 0a 2a 2a 20 33 35 20 62 69 74 73 20 2d 20  BA.** 35 bits - 
7010: 42 42 42 42 41 0a 2a 2a 20 34 32 20 62 69 74 73  BBBBA.** 42 bits
7020: 20 2d 20 42 42 42 42 42 41 0a 2a 2a 20 34 39 20   - BBBBBA.** 49 
7030: 62 69 74 73 20 2d 20 42 42 42 42 42 42 41 0a 2a  bits - BBBBBBA.*
7040: 2a 20 35 36 20 62 69 74 73 20 2d 20 42 42 42 42  * 56 bits - BBBB
7050: 42 42 42 41 0a 2a 2a 20 36 34 20 62 69 74 73 20  BBBA.** 64 bits 
7060: 2d 20 42 42 42 42 42 42 42 42 43 0a 2a 2f 0a 0a  - BBBBBBBBC.*/..
7070: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 36 34  /*.** Write a 64
7080: 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65  -bit variable-le
7090: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 74 6f 20  ngth integer to 
70a0: 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20  memory starting 
70b0: 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54 68 65 20  at p[0]..** The 
70c0: 6c 65 6e 67 74 68 20 6f 66 20 64 61 74 61 20 77  length of data w
70d0: 72 69 74 65 20 77 69 6c 6c 20 62 65 20 62 65 74  rite will be bet
70e0: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
70f0: 65 73 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 0a  es.  The number.
7100: 2a 2a 20 6f 66 20 62 79 74 65 73 20 77 72 69 74  ** of bytes writ
7110: 74 65 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ten is returned.
7120: 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c  .**.** A variabl
7130: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
7140: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
7150: 20 6c 6f 77 65 72 20 37 20 62 69 74 73 20 6f 66   lower 7 bits of
7160: 20 65 61 63 68 20 62 79 74 65 0a 2a 2a 20 66 6f   each byte.** fo
7170: 72 20 61 6c 6c 20 62 79 74 65 73 20 74 68 61 74  r all bytes that
7180: 20 68 61 76 65 20 74 68 65 20 38 74 68 20 62 69   have the 8th bi
7190: 74 20 73 65 74 20 61 6e 64 20 6f 6e 65 20 62 79  t set and one by
71a0: 74 65 20 77 69 74 68 20 74 68 65 20 38 74 68 0a  te with the 8th.
71b0: 2a 2a 20 62 69 74 20 63 6c 65 61 72 2e 20 20 45  ** bit clear.  E
71c0: 78 63 65 70 74 2c 20 69 66 20 77 65 20 67 65 74  xcept, if we get
71d0: 20 74 6f 20 74 68 65 20 39 74 68 20 62 79 74 65   to the 9th byte
71e0: 2c 20 69 74 20 73 74 6f 72 65 73 20 74 68 65 20  , it stores the 
71f0: 66 75 6c 6c 0a 2a 2a 20 38 20 62 69 74 73 20 61  full.** 8 bits a
7200: 6e 64 20 69 73 20 74 68 65 20 6c 61 73 74 20 62  nd is the last b
7210: 79 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  yte..*/.int sqli
7220: 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
7230: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75  igned char *p, u
7240: 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69 2c 20  64 v){.  int i, 
7250: 6a 2c 20 6e 3b 0a 20 20 75 38 20 62 75 66 5b 31  j, n;.  u8 buf[1
7260: 30 5d 3b 0a 20 20 69 66 28 20 76 20 26 20 30 78  0];.  if( v & 0x
7270: 66 66 30 30 30 30 30 30 30 30 30 30 30 30 30 30  ff00000000000000
7280: 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d 20 76   ){.    p[8] = v
7290: 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b 0a 20  ;.    v >>= 8;. 
72a0: 20 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e 3d 30     for(i=7; i>=0
72b0: 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 70 5b  ; i--){.      p[
72c0: 69 5d 20 3d 20 28 76 20 26 20 30 78 37 66 29 20  i] = (v & 0x7f) 
72d0: 7c 20 30 78 38 30 3b 0a 20 20 20 20 20 20 76 20  | 0x80;.      v 
72e0: 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20 20 20  >>= 7;.    }.   
72f0: 20 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d 20 20   return 9;.  }  
7300: 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 64 6f    .  n = 0;.  do
7310: 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d 20 3d  {.    buf[n++] =
7320: 20 28 76 20 26 20 30 78 37 66 29 20 7c 20 30 78   (v & 0x7f) | 0x
7330: 38 30 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b  80;.    v >>= 7;
7340: 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20  .  }while( v!=0 
7350: 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d 20 30  );.  buf[0] &= 0
7360: 78 37 66 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  x7f;.  assert( n
7370: 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  <=9 );.  for(i=0
7380: 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b 20 6a  , j=n-1; j>=0; j
7390: 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 70 5b  --, i++){.    p[
73a0: 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20 20 7d  i] = buf[j];.  }
73b0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a  .  return n;.}..
73c0: 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36 34 2d  /*.** Read a 64-
73d0: 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  bit variable-len
73e0: 67 74 68 20 69 6e 74 65 67 65 72 20 66 72 6f 6d  gth integer from
73f0: 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67   memory starting
7400: 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74   at p[0]..** Ret
7410: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
7420: 66 20 62 79 74 65 73 20 72 65 61 64 2e 20 20 54  f bytes read.  T
7430: 68 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72  he value is stor
7440: 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74  ed in *v..*/.int
7450: 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
7460: 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
7470: 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20 2a 76   char *p, u64 *v
7480: 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20 75 36  ){.  u32 x;.  u6
7490: 34 20 78 36 34 3b 0a 20 20 69 6e 74 20 6e 3b 0a  4 x64;.  int n;.
74a0: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20    unsigned char 
74b0: 63 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  c;.  if( ((c = p
74c0: 5b 30 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [0]) & 0x80)==0 
74d0: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20  ){.    *v = c;. 
74e0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
74f0: 0a 20 20 78 20 3d 20 63 20 26 20 30 78 37 66 3b  .  x = c & 0x7f;
7500: 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 31  .  if( ((c = p[1
7510: 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b  ]) & 0x80)==0 ){
7520: 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29  .    *v = (x<<7)
7530: 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e   | c;.    return
7540: 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78   2;.  }.  x = (x
7550: 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b  <<7) | (c&0x7f);
7560: 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 32  .  if( ((c = p[2
7570: 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b  ]) & 0x80)==0 ){
7580: 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29  .    *v = (x<<7)
7590: 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e   | c;.    return
75a0: 20 33 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78   3;.  }.  x = (x
75b0: 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b  <<7) | (c&0x7f);
75c0: 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 33  .  if( ((c = p[3
75d0: 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b  ]) & 0x80)==0 ){
75e0: 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29  .    *v = (x<<7)
75f0: 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e   | c;.    return
7600: 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20 3d 20   4;.  }.  x64 = 
7610: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
7620: 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20 64 6f  );.  n = 4;.  do
7630: 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b 2b 5d  {.    c = p[n++]
7640: 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39 20 29  ;.    if( n==9 )
7650: 7b 0a 20 20 20 20 20 20 78 36 34 20 3d 20 28 78  {.      x64 = (x
7660: 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20 20 20  64<<8) | c;.    
7670: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
7680: 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c 3c 37     x64 = (x64<<7
7690: 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20  ) | (c&0x7f);.  
76a0: 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30 78 38  }while( (c & 0x8
76b0: 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20 3d 20  0)!=0 );.  *v = 
76c0: 78 36 34 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b  x64;.  return n;
76d0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61  .}../*.** Read a
76e0: 20 33 32 2d 62 69 74 20 76 61 72 69 61 62 6c 65   32-bit variable
76f0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20  -length integer 
7700: 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72  from memory star
7710: 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a  ting at p[0]..**
7720: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
7730: 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64  er of bytes read
7740: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  .  The value is 
7750: 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f  stored in *v..*/
7760: 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56  .int sqlite3GetV
7770: 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
7780: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20  signed char *p, 
7790: 75 33 32 20 2a 76 29 7b 0a 20 20 75 33 32 20 78  u32 *v){.  u32 x
77a0: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75 6e 73  ;.  int n;.  uns
77b0: 69 67 6e 65 64 20 63 68 61 72 20 63 3b 0a 20 20  igned char c;.  
77c0: 69 66 28 20 28 28 63 20 3d 20 70 5b 30 5d 29 20  if( ((c = p[0]) 
77d0: 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20  & 0x80)==0 ){.  
77e0: 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20 20 72 65    *v = c;.    re
77f0: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20  turn 1;.  }.  x 
7800: 3d 20 63 20 26 20 30 78 37 66 3b 0a 20 20 69 66  = c & 0x7f;.  if
7810: 28 20 28 28 63 20 3d 20 70 5b 31 5d 29 20 26 20  ( ((c = p[1]) & 
7820: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
7830: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
7840: 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20  .    return 2;. 
7850: 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20   }.  x = (x<<7) 
7860: 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 69 66  | (c&0x7f);.  if
7870: 28 20 28 28 63 20 3d 20 70 5b 32 5d 29 20 26 20  ( ((c = p[2]) & 
7880: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
7890: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
78a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 33 3b 0a 20  .    return 3;. 
78b0: 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20   }.  x = (x<<7) 
78c0: 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 69 66  | (c&0x7f);.  if
78d0: 28 20 28 28 63 20 3d 20 70 5b 33 5d 29 20 26 20  ( ((c = p[3]) & 
78e0: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
78f0: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
7900: 0a 20 20 20 20 72 65 74 75 72 6e 20 34 3b 0a 20  .    return 4;. 
7910: 20 7d 0a 20 20 6e 20 3d 20 34 3b 0a 20 20 64 6f   }.  n = 4;.  do
7920: 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c 3c 37 29  {.    x = (x<<7)
7930: 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b 2b 5d 29   | ((c = p[n++])
7940: 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65  &0x7f);.  }while
7950: 28 20 28 63 20 26 20 30 78 38 30 29 21 3d 30 20  ( (c & 0x80)!=0 
7960: 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a 76 20 3d  && n<9 );.  *v =
7970: 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a   x;.  return n;.
7980: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
7990: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
79a0: 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  tes that will be
79b0: 20 6e 65 65 64 65 64 20 74 6f 20 73 74 6f 72 65   needed to store
79c0: 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a 20 36 34   the given.** 64
79d0: 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  -bit integer..*/
79e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
79f0: 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b 0a 20 20  ntLen(u64 v){.  
7a00: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 64 6f 7b  int i = 0;.  do{
7a10: 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 76 20  .    i++;.    v 
7a20: 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28  >>= 7;.  }while(
7a30: 20 76 21 3d 30 20 26 26 20 69 3c 39 20 29 3b 0a   v!=0 && i<9 );.
7a40: 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 0a 76    return i;.}..v
7a50: 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
7a60: 6f 42 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72  oBlob(const char
7a70: 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 42   *z){.  char *zB
7a80: 6c 6f 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  lob;.  int i;.  
7a90: 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  int n = strlen(z
7aa0: 29 3b 0a 20 20 69 66 28 20 6e 25 32 20 29 20 72  );.  if( n%2 ) r
7ab0: 65 74 75 72 6e 20 30 3b 0a 0a 20 20 7a 42 6c 6f  eturn 0;..  zBlo
7ac0: 62 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  b = (char *)sqli
7ad0: 74 65 4d 61 6c 6c 6f 63 28 6e 2f 32 29 3b 0a 0a  teMalloc(n/2);..
7ae0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
7af0: 69 2b 2b 29 7b 0a 20 20 20 20 75 38 20 63 3b 0a  i++){.    u8 c;.
7b00: 0a 20 20 20 20 69 66 20 20 20 20 20 28 20 7a 5b  .    if     ( z[
7b10: 69 5d 3e 34 37 20 26 26 20 7a 5b 69 5d 3c 35 38  i]>47 && z[i]<58
7b20: 20 29 20 63 20 3d 20 28 7a 5b 69 5d 2d 34 38 29   ) c = (z[i]-48)
7b30: 3c 3c 34 3b 0a 20 20 20 20 65 6c 73 65 20 69 66  <<4;.    else if
7b40: 28 20 7a 5b 69 5d 3e 36 34 20 26 26 20 7a 5b 69  ( z[i]>64 && z[i
7b50: 5d 3c 37 31 20 29 20 63 20 3d 20 28 7a 5b 69 5d  ]<71 ) c = (z[i]
7b60: 2d 35 35 29 3c 3c 34 3b 0a 20 20 20 20 65 6c 73  -55)<<4;.    els
7b70: 65 20 69 66 28 20 7a 5b 69 5d 3e 39 36 20 26 26  e if( z[i]>96 &&
7b80: 20 7a 5b 69 5d 3c 31 30 33 20 29 20 63 20 3d 20   z[i]<103 ) c = 
7b90: 28 7a 5b 69 5d 2d 38 37 29 3c 3c 34 3b 0a 20 20  (z[i]-87)<<4;.  
7ba0: 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 73    else {.      s
7bb0: 71 6c 69 74 65 46 72 65 65 28 7a 42 6c 6f 62 29  qliteFree(zBlob)
7bc0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ;.      return 0
7bd0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 2b 2b 3b  ;.    }.    i++;
7be0: 0a 20 20 20 20 69 66 20 20 20 20 20 28 20 7a 5b  .    if     ( z[
7bf0: 69 5d 3e 34 37 20 26 26 20 7a 5b 69 5d 3c 35 38  i]>47 && z[i]<58
7c00: 20 29 20 63 20 2b 3d 20 28 7a 5b 69 5d 2d 34 38   ) c += (z[i]-48
7c10: 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 28 20  );.    else if( 
7c20: 7a 5b 69 5d 3e 36 34 20 26 26 20 7a 5b 69 5d 3c  z[i]>64 && z[i]<
7c30: 37 31 20 29 20 63 20 2b 3d 20 28 7a 5b 69 5d 2d  71 ) c += (z[i]-
7c40: 35 35 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66  55);.    else if
7c50: 28 20 7a 5b 69 5d 3e 39 36 20 26 26 20 7a 5b 69  ( z[i]>96 && z[i
7c60: 5d 3c 31 30 33 20 29 20 63 20 2b 3d 20 28 7a 5b  ]<103 ) c += (z[
7c70: 69 5d 2d 38 37 29 3b 0a 20 20 20 20 65 6c 73 65  i]-87);.    else
7c80: 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46   {.      sqliteF
7c90: 72 65 65 28 7a 42 6c 6f 62 29 3b 0a 20 20 20 20  ree(zBlob);.    
7ca0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
7cb0: 7d 0a 0a 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32  }..    zBlob[i/2
7cc0: 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 72 65 74  ] = c;.  }.  ret
7cd0: 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a           urn zBlob;.}.