/ Hex Artifact Content
Login

Artifact e59ee2afc6650bd62466b8d26560794c844ff66d:


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 34 20 32 30 30 34 2f 30 36 2f 31 38 20 31 37  04 2004/06/18 17
0230: 3a 31 30 3a 31 37 20 64 72 68 20 45 78 70 20 24  :10:17 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 2f 0a  of a SrcList.*/.
2ea0: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2eb0: 72 4d 73 67 28 50 61 72 73 65 20 2a 70 50 61 72  rMsg(Parse *pPar
2ec0: 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
2ed0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
2ee0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 70   va_list ap;.  p
2ef0: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
2f00: 20 73 71 6c 69 74 65 46 72 65 65 28 70 50 61 72   sqliteFree(pPar
2f10: 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  se->zErrMsg);.  
2f20: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
2f30: 72 6d 61 74 29 3b 0a 20 20 70 50 61 72 73 65 2d  rmat);.  pParse-
2f40: 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
2f50: 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d  e3VMPrintf(zForm
2f60: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
2f70: 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  d(ap);.}../*.** 
2f80: 43 6f 6e 76 65 72 74 20 61 6e 20 53 51 4c 2d 73  Convert an SQL-s
2f90: 74 79 6c 65 20 71 75 6f 74 65 64 20 73 74 72 69  tyle quoted stri
2fa0: 6e 67 20 69 6e 74 6f 20 61 20 6e 6f 72 6d 61 6c  ng into a normal
2fb0: 20 73 74 72 69 6e 67 20 62 79 20 72 65 6d 6f 76   string by remov
2fc0: 69 6e 67 0a 2a 2a 20 74 68 65 20 71 75 6f 74 65  ing.** the quote
2fd0: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 54 68   characters.  Th
2fe0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
2ff0: 64 6f 6e 65 20 69 6e 2d 70 6c 61 63 65 2e 20 20  done in-place.  
3000: 49 66 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20  If the.** input 
3010: 64 6f 65 73 20 6e 6f 74 20 62 65 67 69 6e 20 77  does not begin w
3020: 69 74 68 20 61 20 71 75 6f 74 65 20 63 68 61 72  ith a quote char
3030: 61 63 74 65 72 2c 20 74 68 65 6e 20 74 68 69 73  acter, then this
3040: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20 61   routine.** is a
3050: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 32 30   no-op..**.** 20
3060: 30 32 2d 46 65 62 2d 31 34 3a 20 54 68 69 73 20  02-Feb-14: This 
3070: 72 6f 75 74 69 6e 65 20 69 73 20 65 78 74 65 6e  routine is exten
3080: 64 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 4d 53  ded to remove MS
3090: 2d 41 63 63 65 73 73 20 73 74 79 6c 65 0a 2a 2a  -Access style.**
30a0: 20 62 72 61 63 6b 65 74 73 20 66 72 6f 6d 20 61   brackets from a
30b0: 72 6f 75 6e 64 20 69 64 65 6e 74 69 66 65 72 73  round identifers
30c0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20  .  For example: 
30d0: 20 22 5b 61 2d 62 2d 63 5d 22 20 62 65 63 6f 6d   "[a-b-c]" becom
30e0: 65 73 0a 2a 2a 20 22 61 2d 62 2d 63 22 2e 0a 2a  es.** "a-b-c"..*
30f0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  /.void sqlite3De
3100: 71 75 6f 74 65 28 63 68 61 72 20 2a 7a 29 7b 0a  quote(char *z){.
3110: 20 20 69 6e 74 20 71 75 6f 74 65 3b 0a 20 20 69    int quote;.  i
3120: 6e 74 20 69 2c 20 6a 3b 0a 20 20 69 66 28 20 7a  nt i, j;.  if( z
3130: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
3140: 71 75 6f 74 65 20 3d 20 7a 5b 30 5d 3b 0a 20 20  quote = z[0];.  
3150: 73 77 69 74 63 68 28 20 71 75 6f 74 65 20 29 7b  switch( quote ){
3160: 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a 20  .    case '\'': 
3170: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3180: 20 27 22 27 3a 20 20 20 62 72 65 61 6b 3b 0a 20   '"':   break;. 
3190: 20 20 20 63 61 73 65 20 27 5b 27 3a 20 20 20 71     case '[':   q
31a0: 75 6f 74 65 20 3d 20 27 5d 27 3b 20 20 62 72 65  uote = ']';  bre
31b0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
31c0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
31d0: 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20    for(i=1, j=0; 
31e0: 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  z[i]; i++){.    
31f0: 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20  if( z[i]==quote 
3200: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69  ){.      if( z[i
3210: 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20  +1]==quote ){.  
3220: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71        z[j++] = q
3230: 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69 2b  uote;.        i+
3240: 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  +;.      }else{.
3250: 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d          z[j++] =
3260: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
3270: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
3280: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b  else{.      z[j+
3290: 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d  +] = z[i];.    }
32a0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61 72  .  }.}../* An ar
32b0: 72 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20 75  ray to map all u
32c0: 70 70 65 72 2d 63 61 73 65 20 63 68 61 72 61 63  pper-case charac
32d0: 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72 20  ters into their 
32e0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
32f0: 20 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61 72   lower-case char
3300: 61 63 74 65 72 2e 20 0a 2a 2f 0a 73 74 61 74 69  acter. .*/.stati
3310: 63 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  c unsigned char 
3320: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 20 3d  UpperToLower[] =
3330: 20 7b 0a 20 20 20 20 20 20 30 2c 20 20 31 2c 20   {.      0,  1, 
3340: 20 32 2c 20 20 33 2c 20 20 34 2c 20 20 35 2c 20   2,  3,  4,  5, 
3350: 20 36 2c 20 20 37 2c 20 20 38 2c 20 20 39 2c 20   6,  7,  8,  9, 
3360: 31 30 2c 20 31 31 2c 20 31 32 2c 20 31 33 2c 20  10, 11, 12, 13, 
3370: 31 34 2c 20 31 35 2c 20 31 36 2c 20 31 37 2c 0a  14, 15, 16, 17,.
3380: 20 20 20 20 20 31 38 2c 20 31 39 2c 20 32 30 2c       18, 19, 20,
3390: 20 32 31 2c 20 32 32 2c 20 32 33 2c 20 32 34 2c   21, 22, 23, 24,
33a0: 20 32 35 2c 20 32 36 2c 20 32 37 2c 20 32 38 2c   25, 26, 27, 28,
33b0: 20 32 39 2c 20 33 30 2c 20 33 31 2c 20 33 32 2c   29, 30, 31, 32,
33c0: 20 33 33 2c 20 33 34 2c 20 33 35 2c 0a 20 20 20   33, 34, 35,.   
33d0: 20 20 33 36 2c 20 33 37 2c 20 33 38 2c 20 33 39    36, 37, 38, 39
33e0: 2c 20 34 30 2c 20 34 31 2c 20 34 32 2c 20 34 33  , 40, 41, 42, 43
33f0: 2c 20 34 34 2c 20 34 35 2c 20 34 36 2c 20 34 37  , 44, 45, 46, 47
3400: 2c 20 34 38 2c 20 34 39 2c 20 35 30 2c 20 35 31  , 48, 49, 50, 51
3410: 2c 20 35 32 2c 20 35 33 2c 0a 20 20 20 20 20 35  , 52, 53,.     5
3420: 34 2c 20 35 35 2c 20 35 36 2c 20 35 37 2c 20 35  4, 55, 56, 57, 5
3430: 38 2c 20 35 39 2c 20 36 30 2c 20 36 31 2c 20 36  8, 59, 60, 61, 6
3440: 32 2c 20 36 33 2c 20 36 34 2c 20 39 37 2c 20 39  2, 63, 64, 97, 9
3450: 38 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31 30  8, 99,100,101,10
3460: 32 2c 31 30 33 2c 0a 20 20 20 20 31 30 34 2c 31  2,103,.    104,1
3470: 30 35 2c 31 30 36 2c 31 30 37 2c 31 30 38 2c 31  05,106,107,108,1
3480: 30 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c 31  09,110,111,112,1
3490: 31 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c 31  13,114,115,116,1
34a0: 31 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c 31  17,118,119,120,1
34b0: 32 31 2c 0a 20 20 20 20 31 32 32 2c 20 39 31 2c  21,.    122, 91,
34c0: 20 39 32 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c   92, 93, 94, 95,
34d0: 20 39 36 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c   96, 97, 98, 99,
34e0: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
34f0: 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c  104,105,106,107,
3500: 0a 20 20 20 20 31 30 38 2c 31 30 39 2c 31 31 30  .    108,109,110
3510: 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31 34  ,111,112,113,114
3520: 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38  ,115,116,117,118
3530: 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 31 32 32  ,119,120,121,122
3540: 2c 31 32 33 2c 31 32 34 2c 31 32 35 2c 0a 20 20  ,123,124,125,.  
3550: 20 20 31 32 36 2c 31 32 37 2c 31 32 38 2c 31 32    126,127,128,12
3560: 39 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c 31 33  9,130,131,132,13
3570: 33 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c 31 33  3,134,135,136,13
3580: 37 2c 31 33 38 2c 31 33 39 2c 31 34 30 2c 31 34  7,138,139,140,14
3590: 31 2c 31 34 32 2c 31 34 33 2c 0a 20 20 20 20 31  1,142,143,.    1
35a0: 34 34 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c 31  44,145,146,147,1
35b0: 34 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c 31  48,149,150,151,1
35c0: 35 32 2c 31 35 33 2c 31 35 34 2c 31 35 35 2c 31  52,153,154,155,1
35d0: 35 36 2c 31 35 37 2c 31 35 38 2c 31 35 39 2c 31  56,157,158,159,1
35e0: 36 30 2c 31 36 31 2c 0a 20 20 20 20 31 36 32 2c  60,161,.    162,
35f0: 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36 36 2c  163,164,165,166,
3600: 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37 30 2c  167,168,169,170,
3610: 31 37 31 2c 31 37 32 2c 31 37 33 2c 31 37 34 2c  171,172,173,174,
3620: 31 37 35 2c 31 37 36 2c 31 37 37 2c 31 37 38 2c  175,176,177,178,
3630: 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 31 38 31  179,.    180,181
3640: 2c 31 38 32 2c 31 38 33 2c 31 38 34 2c 31 38 35  ,182,183,184,185
3650: 2c 31 38 36 2c 31 38 37 2c 31 38 38 2c 31 38 39  ,186,187,188,189
3660: 2c 31 39 30 2c 31 39 31 2c 31 39 32 2c 31 39 33  ,190,191,192,193
3670: 2c 31 39 34 2c 31 39 35 2c 31 39 36 2c 31 39 37  ,194,195,196,197
3680: 2c 0a 20 20 20 20 31 39 38 2c 31 39 39 2c 32 30  ,.    198,199,20
3690: 30 2c 32 30 31 2c 32 30 32 2c 32 30 33 2c 32 30  0,201,202,203,20
36a0: 34 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c 32 30  4,205,206,207,20
36b0: 38 2c 32 30 39 2c 32 31 30 2c 32 31 31 2c 32 31  8,209,210,211,21
36c0: 32 2c 32 31 33 2c 32 31 34 2c 32 31 35 2c 0a 20  2,213,214,215,. 
36d0: 20 20 20 32 31 36 2c 32 31 37 2c 32 31 38 2c 32     216,217,218,2
36e0: 31 39 2c 32 32 30 2c 32 32 31 2c 32 32 32 2c 32  19,220,221,222,2
36f0: 32 33 2c 32 32 34 2c 32 32 35 2c 32 32 36 2c 32  23,224,225,226,2
3700: 32 37 2c 32 32 38 2c 32 32 39 2c 32 33 30 2c 32  27,228,229,230,2
3710: 33 31 2c 32 33 32 2c 32 33 33 2c 0a 20 20 20 20  31,232,233,.    
3720: 32 33 34 2c 32 33 35 2c 32 33 36 2c 32 33 37 2c  234,235,236,237,
3730: 32 33 38 2c 32 33 39 2c 32 34 30 2c 32 34 31 2c  238,239,240,241,
3740: 32 34 32 2c 32 34 33 2c 32 34 34 2c 32 34 35 2c  242,243,244,245,
3750: 32 34 36 2c 32 34 37 2c 32 34 38 2c 32 34 39 2c  246,247,248,249,
3760: 32 35 30 2c 32 35 31 2c 0a 20 20 20 20 32 35 32  250,251,.    252
3770: 2c 32 35 33 2c 32 35 34 2c 32 35 35 0a 7d 3b 0a  ,253,254,255.};.
3780: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
3790: 74 69 6f 6e 20 63 6f 6d 70 75 74 65 73 20 61 20  tion computes a 
37a0: 68 61 73 68 20 6f 6e 20 74 68 65 20 6e 61 6d 65  hash on the name
37b0: 20 6f 66 20 61 20 6b 65 79 77 6f 72 64 2e 0a 2a   of a keyword..*
37c0: 2a 20 43 61 73 65 20 69 73 20 6e 6f 74 20 73 69  * Case is not si
37d0: 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2f 0a 69 6e  gnificant..*/.in
37e0: 74 20 73 71 6c 69 74 65 33 48 61 73 68 4e 6f 43  t sqlite3HashNoC
37f0: 61 73 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ase(const char *
3800: 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69 6e 74  z, int n){.  int
3810: 20 68 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 3c   h = 0;.  if( n<
3820: 3d 30 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28  =0 ) n = strlen(
3830: 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e 20 3e  z);.  while( n >
3840: 20 30 20 20 29 7b 0a 20 20 20 20 68 20 3d 20 28   0  ){.    h = (
3850: 68 3c 3c 33 29 20 5e 20 68 20 5e 20 55 70 70 65  h<<3) ^ h ^ Uppe
3860: 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
3870: 65 64 20 63 68 61 72 29 2a 7a 2b 2b 5d 3b 0a 20  ed char)*z++];. 
3880: 20 20 20 6e 2d 2d 3b 0a 20 20 7d 0a 20 20 72 65     n--;.  }.  re
3890: 74 75 72 6e 20 68 20 26 20 30 78 37 66 66 66 66  turn h & 0x7ffff
38a0: 66 66 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6f  fff;.}../*.** So
38b0: 6d 65 20 73 79 73 74 65 6d 73 20 68 61 76 65 20  me systems have 
38c0: 73 74 72 69 63 6d 70 28 29 2e 20 20 4f 74 68 65  stricmp().  Othe
38d0: 72 73 20 68 61 76 65 20 73 74 72 63 61 73 65 63  rs have strcasec
38e0: 6d 70 28 29 2e 20 20 42 65 63 61 75 73 65 0a 2a  mp().  Because.*
38f0: 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * there is no co
3900: 6e 73 69 73 74 65 6e 63 79 2c 20 77 65 20 77 69  nsistency, we wi
3910: 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72 20 6f 77  ll define our ow
3920: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
3930: 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
3940: 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73  har *zLeft, cons
3950: 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 29 7b  t char *zRight){
3960: 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69  .  register unsi
3970: 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62  gned char *a, *b
3980: 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  a = (unsigne
3990: 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a  d char *)zLeft;.
39a0: 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    b = (unsigned 
39b0: 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20  char *)zRight;. 
39c0: 20 77 68 69 6c 65 28 20 2a 61 21 3d 30 20 26 26   while( *a!=0 &&
39d0: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61   UpperToLower[*a
39e0: 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  ]==UpperToLower[
39f0: 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20  *b]){ a++; b++; 
3a00: 7d 0a 20 20 72 65 74 75 72 6e 20 2a 61 20 2d 20  }.  return *a - 
3a10: 2a 62 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  *b;.}.int sqlite
3a20: 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74 20  3StrNICmp(const 
3a30: 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e  char *zLeft, con
3a40: 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 2c  st char *zRight,
3a50: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 67 69 73   int N){.  regis
3a60: 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ter unsigned cha
3a70: 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20  r *a, *b;.  a = 
3a80: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
3a90: 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28 75  )zLeft;.  b = (u
3aa0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a  nsigned char *)z
3ab0: 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28 20  Right;.  while( 
3ac0: 4e 2d 2d 20 3e 20 30 20 26 26 20 2a 61 21 3d 30  N-- > 0 && *a!=0
3ad0: 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72   && UpperToLower
3ae0: 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77  [*a]==UpperToLow
3af0: 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b  er[*b]){ a++; b+
3b00: 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3c  +; }.  return N<
3b10: 30 20 3f 20 30 20 3a 20 55 70 70 65 72 54 6f 4c  0 ? 0 : UpperToL
3b20: 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72  ower[*a] - Upper
3b30: 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 0a  ToLower[*b];.}..
3b40: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  /*.** Return TRU
3b50: 45 20 69 66 20 7a 20 69 73 20 61 20 70 75 72 65  E if z is a pure
3b60: 20 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 2e   numeric string.
3b70: 20 20 52 65 74 75 72 6e 20 46 41 4c 53 45 20 69    Return FALSE i
3b80: 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
3b90: 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 63 68 61  contains any cha
3ba0: 72 61 63 74 65 72 20 77 68 69 63 68 20 69 73 20  racter which is 
3bb0: 6e 6f 74 20 70 61 72 74 20 6f 66 20 61 20 6e 75  not part of a nu
3bc0: 6d 62 65 72 2e 20 49 66 0a 2a 2a 20 74 68 65 20  mber. If.** the 
3bd0: 73 74 72 69 6e 67 20 69 73 20 6e 75 6d 65 72 69  string is numeri
3be0: 63 20 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74  c and contains t
3bf0: 68 65 20 27 2e 27 20 63 68 61 72 61 63 74 65 72  he '.' character
3c00: 2c 20 73 65 74 20 2a 72 65 61 6c 6e 75 6d 0a 2a  , set *realnum.*
3c10: 2a 20 74 6f 20 54 52 55 45 20 28 6f 74 68 65 72  * to TRUE (other
3c20: 77 69 73 65 20 46 41 4c 53 45 29 2e 0a 2a 2a 0a  wise FALSE)..**.
3c30: 2a 2a 20 41 6d 20 65 6d 70 74 79 20 73 74 72 69  ** Am empty stri
3c40: 6e 67 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ng is considered
3c50: 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 2e 0a 2a 2f   non-numeric..*/
3c60: 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 75  .int sqlite3IsNu
3c70: 6d 62 65 72 28 63 6f 6e 73 74 20 63 68 61 72 20  mber(const char 
3c80: 2a 7a 2c 20 69 6e 74 20 2a 72 65 61 6c 6e 75 6d  *z, int *realnum
3c90: 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20 69 6e 74  , u8 enc){.  int
3ca0: 20 69 6e 63 72 20 3d 20 28 65 6e 63 3d 3d 53 51   incr = (enc==SQ
3cb0: 4c 49 54 45 5f 55 54 46 38 3f 31 3a 32 29 3b 0a  LITE_UTF8?1:2);.
3cc0: 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54    if( enc==SQLIT
3cd0: 45 5f 55 54 46 31 36 4c 45 20 29 20 7a 2b 2b 3b  E_UTF16LE ) z++;
3ce0: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c  .  if( *z=='-' |
3cf0: 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a 20 2b 3d  | *z=='+' ) z +=
3d00: 20 69 6e 63 72 3b 0a 20 20 69 66 28 20 21 69 73   incr;.  if( !is
3d10: 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20  digit(*z) ){.   
3d20: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
3d30: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66   z += incr;.  if
3d40: 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61  ( realnum ) *rea
3d50: 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69 6c  lnum = 0;.  whil
3d60: 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29  e( isdigit(*z) )
3d70: 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20  { z += incr; }. 
3d80: 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a   if( *z=='.' ){.
3d90: 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20      z += incr;. 
3da0: 20 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28     if( !isdigit(
3db0: 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  *z) ) return 0;.
3dc0: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
3dd0: 69 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69  it(*z) ){ z += i
3de0: 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72  ncr; }.    if( r
3df0: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
3e00: 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28  m = 1;.  }.  if(
3e10: 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d   *z=='e' || *z==
3e20: 27 45 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20  'E' ){.    z += 
3e30: 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 2a 7a  incr;.    if( *z
3e40: 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27  =='+' || *z=='-'
3e50: 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20   ) z += incr;.  
3e60: 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a    if( !isdigit(*
3e70: 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  z) ) return 0;. 
3e80: 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69     while( isdigi
3e90: 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e  t(*z) ){ z += in
3ea0: 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  cr; }.    if( re
3eb0: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3ec0: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 1;.  }.  retu
3ed0: 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  rn *z==0;.}../*.
3ee0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a 5b  ** The string z[
3ef0: 5d 20 69 73 20 61 6e 20 61 73 63 69 69 20 72 65  ] is an ascii re
3f00: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3f10: 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2e 0a 2a  a real number..*
3f20: 2a 20 43 6f 6e 76 65 72 74 20 74 68 69 73 20 73  * Convert this s
3f30: 74 72 69 6e 67 20 74 6f 20 61 20 64 6f 75 62 6c  tring to a doubl
3f40: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  e..**.** This ro
3f50: 75 74 69 6e 65 20 61 73 73 75 6d 65 73 20 74 68  utine assumes th
3f60: 61 74 20 7a 5b 5d 20 72 65 61 6c 6c 79 20 69 73  at z[] really is
3f70: 20 61 20 76 61 6c 69 64 20 6e 75 6d 62 65 72 2e   a valid number.
3f80: 20 20 49 66 20 69 74 0a 2a 2a 20 69 73 20 6e 6f    If it.** is no
3f90: 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  t, the result is
3fa0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
3fb0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
3fc0: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f  s used instead o
3fd0: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 61 74  f the library at
3fe0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 62 65  of() function be
3ff0: 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 6c 69 62  cause.** the lib
4000: 72 61 72 79 20 61 74 6f 66 28 29 20 6d 69 67 68  rary atof() migh
4010: 74 20 77 61 6e 74 20 74 6f 20 75 73 65 20 22 2c  t want to use ",
4020: 22 20 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c  " as the decimal
4030: 20 70 6f 69 6e 74 20 69 6e 73 74 65 61 64 0a 2a   point instead.*
4040: 2a 20 6f 66 20 22 2e 22 20 64 65 70 65 6e 64 69  * of "." dependi
4050: 6e 67 20 6f 6e 20 68 6f 77 20 6c 6f 63 61 6c 65  ng on how locale
4060: 20 69 73 20 73 65 74 2e 20 20 42 75 74 20 74 68   is set.  But th
4070: 61 74 20 77 6f 75 6c 64 20 63 61 75 73 65 20 70  at would cause p
4080: 72 6f 62 6c 65 6d 73 0a 2a 2a 20 66 6f 72 20 53  roblems.** for S
4090: 51 4c 2e 20 20 53 6f 20 74 68 69 73 20 72 6f 75  QL.  So this rou
40a0: 74 69 6e 65 20 61 6c 77 61 79 73 20 75 73 65 73  tine always uses
40b0: 20 22 2e 22 20 72 65 67 61 72 64 6c 65 73 73 20   "." regardless 
40c0: 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 64 6f  of locale..*/.do
40d0: 75 62 6c 65 20 73 71 6c 69 74 65 33 41 74 6f 46  uble sqlite3AtoF
40e0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
40f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 45  const char **pzE
4100: 6e 64 29 7b 0a 20 20 69 6e 74 20 73 69 67 6e 20  nd){.  int sign 
4110: 3d 20 31 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c  = 1;.  LONGDOUBL
4120: 45 5f 54 59 50 45 20 76 31 20 3d 20 30 2e 30 3b  E_TYPE v1 = 0.0;
4130: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29  .  if( *z=='-' )
4140: 7b 0a 20 20 20 20 73 69 67 6e 20 3d 20 2d 31 3b  {.    sign = -1;
4150: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 65 6c 73  .    z++;.  }els
4160: 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b  e if( *z=='+' ){
4170: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20  .    z++;.  }.  
4180: 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a  while( isdigit(*
4190: 7a 29 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 76  z) ){.    v1 = v
41a0: 31 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27  1*10.0 + (*z - '
41b0: 30 27 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20  0');.    z++;.  
41c0: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20  }.  if( *z=='.' 
41d0: 29 7b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c  ){.    LONGDOUBL
41e0: 45 5f 54 59 50 45 20 64 69 76 69 73 6f 72 20 3d  E_TYPE divisor =
41f0: 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20   1.0;.    z++;. 
4200: 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69     while( isdigi
4210: 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20 76  t(*z) ){.      v
4220: 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a  1 = v1*10.0 + (*
4230: 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 20 20  z - '0');.      
4240: 64 69 76 69 73 6f 72 20 2a 3d 20 31 30 2e 30 3b  divisor *= 10.0;
4250: 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
4260: 7d 0a 20 20 20 20 76 31 20 2f 3d 20 64 69 76 69  }.    v1 /= divi
4270: 73 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a  sor;.  }.  if( *
4280: 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45  z=='e' || *z=='E
4290: 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 73 69  ' ){.    int esi
42a0: 67 6e 20 3d 20 31 3b 0a 20 20 20 20 69 6e 74 20  gn = 1;.    int 
42b0: 65 76 61 6c 20 3d 20 30 3b 0a 20 20 20 20 4c 4f  eval = 0;.    LO
42c0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 63  NGDOUBLE_TYPE sc
42d0: 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a  ale = 1.0;.    z
42e0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d  ++;.    if( *z==
42f0: 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65 73 69  '-' ){.      esi
4300: 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7a  gn = -1;.      z
4310: 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ++;.    }else if
4320: 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  ( *z=='+' ){.   
4330: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
4340: 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74    while( isdigit
4350: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20 65 76  (*z) ){.      ev
4360: 61 6c 20 3d 20 65 76 61 6c 2a 31 30 20 2b 20 2a  al = eval*10 + *
4370: 7a 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a  z - '0';.      z
4380: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68  ++;.    }.    wh
4390: 69 6c 65 28 20 65 76 61 6c 3e 3d 36 34 20 29 7b  ile( eval>=64 ){
43a0: 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 36   scale *= 1.0e+6
43b0: 34 3b 20 65 76 61 6c 20 2d 3d 20 36 34 3b 20 7d  4; eval -= 64; }
43c0: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
43d0: 3e 3d 31 36 20 29 7b 20 73 63 61 6c 65 20 2a 3d  >=16 ){ scale *=
43e0: 20 31 2e 30 65 2b 31 36 3b 20 65 76 61 6c 20 2d   1.0e+16; eval -
43f0: 3d 20 31 36 3b 20 7d 0a 20 20 20 20 77 68 69 6c  = 16; }.    whil
4400: 65 28 20 65 76 61 6c 3e 3d 34 20 29 7b 20 73 63  e( eval>=4 ){ sc
4410: 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 34 3b 20 65  ale *= 1.0e+4; e
4420: 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a 20 20 20 20  val -= 4; }.    
4430: 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31 20 29  while( eval>=1 )
4440: 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b  { scale *= 1.0e+
4450: 31 3b 20 65 76 61 6c 20 2d 3d 20 31 3b 20 7d 0a  1; eval -= 1; }.
4460: 20 20 20 20 69 66 28 20 65 73 69 67 6e 3c 30 20      if( esign<0 
4470: 29 7b 0a 20 20 20 20 20 20 76 31 20 2f 3d 20 73  ){.      v1 /= s
4480: 63 61 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  cale;.    }else{
4490: 0a 20 20 20 20 20 20 76 31 20 2a 3d 20 73 63 61  .      v1 *= sca
44a0: 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  le;.    }.  }.  
44b0: 69 66 28 20 70 7a 45 6e 64 20 29 20 2a 70 7a 45  if( pzEnd ) *pzE
44c0: 6e 64 20 3d 20 7a 3b 0a 20 20 72 65 74 75 72 6e  nd = z;.  return
44d0: 20 73 69 67 6e 3c 30 20 3f 20 2d 76 31 20 3a 20   sign<0 ? -v1 : 
44e0: 76 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  v1;.}../*.** Ret
44f0: 75 72 6e 20 54 52 55 45 20 69 66 20 7a 4e 75 6d  urn TRUE if zNum
4500: 20 69 73 20 61 20 36 34 2d 62 69 74 20 73 69 67   is a 64-bit sig
4510: 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e 64 20  ned integer and 
4520: 77 72 69 74 65 0a 2a 2a 20 74 68 65 20 76 61 6c  write.** the val
4530: 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
4540: 72 20 69 6e 74 6f 20 2a 70 4e 75 6d 2e 20 20 49  r into *pNum.  I
4550: 66 20 7a 4e 75 6d 20 69 73 20 6e 6f 74 20 61 6e  f zNum is not an
4560: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6f 72 20 69   integer.** or i
4570: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
4580: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74  t is too large t
4590: 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20 77  o be expressed w
45a0: 69 74 68 20 36 34 20 62 69 74 73 2c 0a 2a 2a 20  ith 64 bits,.** 
45b0: 74 68 65 6e 20 72 65 74 75 72 6e 20 66 61 6c 73  then return fals
45c0: 65 2e 20 20 49 66 20 6e 3e 30 20 61 6e 64 20 74  e.  If n>0 and t
45d0: 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 73 74  he integer is st
45e0: 72 69 6e 67 20 69 73 20 6e 6f 74 0a 2a 2a 20 65  ring is not.** e
45f0: 78 61 63 74 6c 79 20 6e 20 62 79 74 65 73 20 6c  xactly n bytes l
4600: 6f 6e 67 2c 20 72 65 74 75 72 6e 20 66 61 6c 73  ong, return fals
4610: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  e..**.** When th
4620: 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 6f  is routine was o
4630: 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74 65  riginally writte
4640: 6e 20 69 74 20 64 65 61 6c 74 20 77 69 74 68 20  n it dealt with 
4650: 6f 6e 6c 79 0a 2a 2a 20 33 32 2d 62 69 74 20 6e  only.** 32-bit n
4660: 75 6d 62 65 72 73 2e 20 20 41 74 20 74 68 61 74  umbers.  At that
4670: 20 74 69 6d 65 2c 20 69 74 20 77 61 73 20 6d 75   time, it was mu
4680: 63 68 20 66 61 73 74 65 72 20 74 68 61 6e 20 74  ch faster than t
4690: 68 65 0a 2a 2a 20 61 74 6f 69 28 29 20 6c 69 62  he.** atoi() lib
46a0: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 69 6e 20  rary routine in 
46b0: 52 65 64 48 61 74 20 37 2e 32 2e 0a 2a 2f 0a 69  RedHat 7.2..*/.i
46c0: 6e 74 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34  nt sqlite3atoi64
46d0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
46e0: 6d 2c 20 69 36 34 20 2a 70 4e 75 6d 29 7b 0a 20  m, i64 *pNum){. 
46f0: 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20 69 6e   i64 v = 0;.  in
4700: 74 20 6e 65 67 3b 0a 20 20 69 6e 74 20 69 2c 20  t neg;.  int i, 
4710: 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d  c;.  if( *zNum==
4720: 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d  '-' ){.    neg =
4730: 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a   1;.    zNum++;.
4740: 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e 75    }else if( *zNu
4750: 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 6e 65  m=='+' ){.    ne
4760: 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75 6d 2b  g = 0;.    zNum+
4770: 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  +;.  }else{.    
4780: 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 66  neg = 0;.  }.  f
4790: 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b  or(i=0; (c=zNum[
47a0: 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27  i])>='0' && c<='
47b0: 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76 20  9'; i++){.    v 
47c0: 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20 27 30 27  = v*10 + c - '0'
47d0: 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20 3d 20  ;.  }.  *pNum = 
47e0: 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a 20 20  neg ? -v : v;.  
47f0: 72 65 74 75 72 6e 20 63 3d 3d 30 20 26 26 20 69  return c==0 && i
4800: 3e 30 20 26 26 20 0a 20 20 20 20 20 20 28 69 3c  >0 && .      (i<
4810: 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26 20  19 || (i==19 && 
4820: 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32  memcmp(zNum,"922
4830: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
4840: 22 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d 0a 0a 2f  ",19)<=0));.}../
4850: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
4860: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
4870: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65  an integer.  The
4880: 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d 65  re might be some
4890: 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d   other.** inform
48a0: 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20  ation following 
48b0: 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f 2c  the integer too,
48c0: 20 62 75 74 20 74 68 61 74 20 70 61 72 74 20 69   but that part i
48d0: 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66  s ignored..** If
48e0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 68 61   the integer tha
48f0: 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
4900: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
4910: 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a 2a  will fit in a.**
4920: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
4930: 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20 54  nteger, return T
4940: 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65 20  RUE.  Otherwise 
4950: 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a  return FALSE..**
4960: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
4970: 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20 66   returns FALSE f
4980: 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d 32  or the string -2
4990: 31 34 37 34 38 33 36 34 38 20 65 76 65 6e 20 74  147483648 even t
49a0: 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d 62  hat.** that numb
49b0: 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74 68 65 6f  er will, in theo
49c0: 72 79 20 66 69 74 20 69 6e 20 61 20 33 32 2d 62  ry fit in a 32-b
49d0: 69 74 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  it integer.  But
49e0: 20 70 6f 73 69 74 69 76 65 0a 2a 2a 20 32 31 34   positive.** 214
49f0: 37 34 38 33 36 34 38 20 77 69 6c 6c 20 6e 6f 74  7483648 will not
4a00: 20 66 69 74 20 69 6e 20 33 32 20 62 69 74 73 2e   fit in 32 bits.
4a10: 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61    So it seems sa
4a20: 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a  fer to return.**
4a30: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69   false..*/.stati
4a40: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74  c int sqlite3Fit
4a50: 73 49 6e 33 32 42 69 74 73 28 63 6f 6e 73 74 20  sIn32Bits(const 
4a60: 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69  char *zNum){.  i
4a70: 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a  nt i, c;.  if( *
4a80: 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e  zNum=='-' || *zN
4a90: 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b  um=='+' ) zNum++
4aa0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d  ;.  for(i=0; (c=
4ab0: 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26  zNum[i])>='0' &&
4ac0: 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a   c<='9'; i++){}.
4ad0: 20 20 72 65 74 75 72 6e 20 69 3c 31 30 20 7c 7c    return i<10 ||
4ae0: 20 28 69 3d 3d 31 30 20 26 26 20 6d 65 6d 63 6d   (i==10 && memcm
4af0: 70 28 7a 4e 75 6d 2c 22 32 31 34 37 34 38 33 36  p(zNum,"21474836
4b00: 34 37 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d 0a 0a  47",10)<=0);.}..
4b10: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
4b20: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
4b30: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
4b40: 74 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68  t in 32-bits, th
4b50: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
4b60: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
4b70: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
4b80: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
4b90: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69  turn false..*/.i
4ba0: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
4bb0: 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  32(const char *z
4bc0: 4e 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75 65  Num, int *pValue
4bd0: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
4be0: 46 69 74 73 49 6e 33 32 42 69 74 73 28 7a 4e 75  FitsIn32Bits(zNu
4bf0: 6d 29 20 29 7b 0a 20 20 20 20 2a 70 56 61 6c 75  m) ){.    *pValu
4c00: 65 20 3d 20 61 74 6f 69 28 7a 4e 75 6d 29 3b 0a  e = atoi(zNum);.
4c10: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
4c20: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4c30: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  ./*.** The strin
4c40: 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  g zNum represent
4c50: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54  s an integer.  T
4c60: 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f  here might be so
4c70: 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f  me other.** info
4c80: 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e  rmation followin
4c90: 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f  g the integer to
4ca0: 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74  o, but that part
4cb0: 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20   is ignored..** 
4cc0: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74  If the integer t
4cd0: 68 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  hat the prefix o
4ce0: 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  f zNum represent
4cf0: 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a  s will fit in a.
4d00: 2a 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  ** 64-bit signed
4d10: 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e   integer, return
4d20: 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73   TRUE.  Otherwis
4d30: 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a  e return FALSE..
4d40: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
4d50: 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45  ne returns FALSE
4d60: 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20   for the string 
4d70: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
4d80: 35 38 30 38 20 65 76 65 6e 20 74 68 61 74 0a 2a  5808 even that.*
4d90: 2a 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69  * that number wi
4da0: 6c 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69  ll, in theory fi
4db0: 74 20 69 6e 20 61 20 36 34 2d 62 69 74 20 69 6e  t in a 64-bit in
4dc0: 74 65 67 65 72 2e 20 20 50 6f 73 69 74 69 76 65  teger.  Positive
4dd0: 0a 2a 2a 20 39 32 32 33 33 37 33 30 33 36 38 35  .** 922337303685
4de0: 34 37 37 35 38 30 38 20 77 69 6c 6c 20 6e 6f 74  4775808 will not
4df0: 20 66 69 74 20 69 6e 20 36 34 20 62 69 74 73 2e   fit in 64 bits.
4e00: 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61    So it seems sa
4e10: 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a  fer to return.**
4e20: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73   false..*/.int s
4e30: 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
4e40: 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ts(const char *z
4e50: 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63  Num){.  int i, c
4e60: 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27  ;.  if( *zNum=='
4e70: 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  -' || *zNum=='+'
4e80: 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72   ) zNum++;.  for
4e90: 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d  (i=0; (c=zNum[i]
4ea0: 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  )>='0' && c<='9'
4eb0: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72  ; i++){}.  retur
4ec0: 6e 20 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39  n i<19 || (i==19
4ed0: 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c   && memcmp(zNum,
4ee0: 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  "922337203685477
4ef0: 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 3b 0a 7d  5807",19)<=0);.}
4f00: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20  ../*.** If zNum 
4f10: 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e  represents an in
4f20: 74 65 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20  teger that will 
4f30: 66 69 74 20 69 6e 20 36 34 2d 62 69 74 73 2c 20  fit in 64-bits, 
4f40: 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61  then set.** *pVa
4f50: 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65  lue to that inte
4f60: 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ger and return t
4f70: 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20  rue.  Otherwise 
4f80: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f  return false..*/
4f90: 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
4fa0: 6e 74 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20  nt64(const char 
4fb0: 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c  *zNum, i64 *pVal
4fc0: 75 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  ue){.  if( sqlit
4fd0: 65 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 7a  e3FitsIn64Bits(z
4fe0: 4e 75 6d 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  Num) ){.    sqli
4ff0: 74 65 33 61 74 6f 69 36 34 28 7a 4e 75 6d 2c 20  te3atoi64(zNum, 
5000: 70 56 61 6c 75 65 29 3b 0a 20 20 20 20 72 65 74  pValue);.    ret
5010: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
5020: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 69  urn 0;.}../* Thi
5030: 73 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  s comparison rou
5040: 74 69 6e 65 20 69 73 20 77 68 61 74 20 77 65 20  tine is what we 
5050: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
5060: 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  on operations.**
5070: 20 62 65 74 77 65 65 6e 20 6e 75 6d 65 72 69 63   between numeric
5080: 20 76 61 6c 75 65 73 20 69 6e 20 61 6e 20 53 51   values in an SQ
5090: 4c 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 22  L expression.  "
50a0: 4e 75 6d 65 72 69 63 22 20 69 73 20 61 20 6c 69  Numeric" is a li
50b0: 74 74 6c 65 0a 2a 2a 20 62 69 74 20 6d 69 73 6c  ttle.** bit misl
50c0: 65 61 64 69 6e 67 20 68 65 72 65 2e 20 20 57 68  eading here.  Wh
50d0: 61 74 20 77 65 20 6d 65 61 6e 20 69 73 20 74 68  at we mean is th
50e0: 61 74 20 74 68 65 20 73 74 72 69 6e 67 73 20 68  at the strings h
50f0: 61 76 65 20 61 0a 2a 2a 20 74 79 70 65 20 6f 66  ave a.** type of
5100: 20 22 6e 75 6d 65 72 69 63 22 20 66 72 6f 6d 20   "numeric" from 
5110: 74 68 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65  the point of vie
5120: 77 20 6f 66 20 53 51 4c 2e 20 20 54 68 65 20 73  w of SQL.  The s
5130: 74 72 69 6e 67 73 0a 2a 2a 20 64 6f 20 6e 6f 74  trings.** do not
5140: 20 6e 65 63 65 73 73 61 72 69 6c 79 20 63 6f 6e   necessarily con
5150: 74 61 69 6e 20 6e 75 6d 62 65 72 73 2e 20 20 54  tain numbers.  T
5160: 68 65 79 20 63 6f 75 6c 64 20 63 6f 6e 74 61 69  hey could contai
5170: 6e 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  n text..**.** If
5180: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
5190: 67 73 20 62 6f 74 68 20 6c 6f 6f 6b 20 6c 69 6b  gs both look lik
51a0: 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 73  e actual numbers
51b0: 20 74 68 65 6e 20 74 68 65 79 0a 2a 2a 20 63 6f   then they.** co
51c0: 6d 70 61 72 65 20 69 6e 20 6e 75 6d 65 72 69 63  mpare in numeric
51d0: 61 6c 20 6f 72 64 65 72 2e 20 20 4e 75 6d 65 72  al order.  Numer
51e0: 69 63 61 6c 20 73 74 72 69 6e 67 73 20 61 72 65  ical strings are
51f0: 20 61 6c 77 61 79 73 20 6c 65 73 73 20 0a 2a 2a   always less .**
5200: 20 74 68 61 6e 20 6e 6f 6e 2d 6e 75 6d 65 72 69   than non-numeri
5210: 63 20 73 74 72 69 6e 67 73 20 73 6f 20 69 66 20  c strings so if 
5220: 6f 6e 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67  one input string
5230: 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 0a 2a 2a   looks like a.**
5240: 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20   number and the 
5250: 6f 74 68 65 72 20 64 6f 65 73 20 6e 6f 74 2c 20  other does not, 
5260: 74 68 65 6e 20 74 68 65 20 6f 6e 65 20 74 68 61  then the one tha
5270: 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 0a 2a 2a 20  t looks like.** 
5280: 61 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  a number is the 
5290: 73 6d 61 6c 6c 65 72 2e 20 20 4e 6f 6e 2d 6e 75  smaller.  Non-nu
52a0: 6d 65 72 69 63 20 73 74 72 69 6e 67 73 20 63 6f  meric strings co
52b0: 6d 70 61 72 65 20 69 6e 20 0a 2a 2a 20 6c 65 78  mpare in .** lex
52c0: 69 67 72 61 70 68 69 63 61 6c 20 6f 72 64 65 72  igraphical order
52d0: 20 28 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72   (the same order
52e0: 20 61 73 20 73 74 72 63 6d 70 28 29 29 2e 0a 2a   as strcmp())..*
52f0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6d  /.int sqlite3Com
5300: 70 61 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20  pare(const char 
5310: 2a 61 74 65 78 74 2c 20 63 6f 6e 73 74 20 63 68  *atext, const ch
5320: 61 72 20 2a 62 74 65 78 74 29 7b 0a 20 20 69 6e  ar *btext){.  in
5330: 74 20 72 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  t result;.  int 
5340: 69 73 4e 75 6d 41 2c 20 69 73 4e 75 6d 42 3b 0a  isNumA, isNumB;.
5350: 20 20 69 66 28 20 61 74 65 78 74 3d 3d 30 20 29    if( atext==0 )
5360: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b  {.    return -1;
5370: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 62 74 65  .  }else if( bte
5380: 78 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  xt==0 ){.    ret
5390: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 73 4e  urn 1;.  }.  isN
53a0: 75 6d 41 20 3d 20 73 71 6c 69 74 65 33 49 73 4e  umA = sqlite3IsN
53b0: 75 6d 62 65 72 28 61 74 65 78 74 2c 20 30 2c 20  umber(atext, 0, 
53c0: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
53d0: 69 73 4e 75 6d 42 20 3d 20 73 71 6c 69 74 65 33  isNumB = sqlite3
53e0: 49 73 4e 75 6d 62 65 72 28 62 74 65 78 74 2c 20  IsNumber(btext, 
53f0: 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  0, SQLITE_UTF8);
5400: 0a 20 20 69 66 28 20 69 73 4e 75 6d 41 20 29 7b  .  if( isNumA ){
5410: 0a 20 20 20 20 69 66 28 20 21 69 73 4e 75 6d 42  .    if( !isNumB
5420: 20 29 7b 0a 20 20 20 20 20 20 72 65 73 75 6c 74   ){.      result
5430: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   = -1;.    }else
5440: 7b 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72  {.      double r
5450: 41 2c 20 72 42 3b 0a 20 20 20 20 20 20 72 41 20  A, rB;.      rA 
5460: 3d 20 73 71 6c 69 74 65 33 41 74 6f 46 28 61 74  = sqlite3AtoF(at
5470: 65 78 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 72  ext, 0);.      r
5480: 42 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46 28  B = sqlite3AtoF(
5490: 62 74 65 78 74 2c 20 30 29 3b 0a 20 20 20 20 20  btext, 0);.     
54a0: 20 69 66 28 20 72 41 3c 72 42 20 29 7b 0a 20 20   if( rA<rB ){.  
54b0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 2d        result = -
54c0: 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
54d0: 66 28 20 72 41 3e 72 42 20 29 7b 0a 20 20 20 20  f( rA>rB ){.    
54e0: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 2b 31 3b      result = +1;
54f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
5500: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 30        result = 0
5510: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5520: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75    }else if( isNu
5530: 6d 42 20 29 7b 0a 20 20 20 20 72 65 73 75 6c 74  mB ){.    result
5540: 20 3d 20 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 7b   = +1;.  }else {
5550: 0a 20 20 20 20 72 65 73 75 6c 74 20 3d 20 73 74  .    result = st
5560: 72 63 6d 70 28 61 74 65 78 74 2c 20 62 74 65 78  rcmp(atext, btex
5570: 74 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  t);.  }.  return
5580: 20 72 65 73 75 6c 74 3b 20 0a 7d 0a 0a 2f 2a 0a   result; .}../*.
5590: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
55a0: 69 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74  is used for sort
55b0: 69 6e 67 2e 20 20 45 61 63 68 20 6b 65 79 20 69  ing.  Each key i
55c0: 73 20 61 20 6c 69 73 74 20 6f 66 20 6f 6e 65 20  s a list of one 
55d0: 6f 72 20 6d 6f 72 65 0a 2a 2a 20 6e 75 6c 6c 2d  or more.** null-
55e0: 74 65 72 6d 69 6e 61 74 65 64 20 65 6c 65 6d 65  terminated eleme
55f0: 6e 74 73 2e 20 20 54 68 65 20 6c 69 73 74 20 69  nts.  The list i
5600: 73 20 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20  s terminated by 
5610: 74 77 6f 20 6e 75 6c 6c 73 20 69 6e 0a 2a 2a 20  two nulls in.** 
5620: 61 20 72 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  a row.  For exam
5630: 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ple, the followi
5640: 6e 67 20 74 65 78 74 20 69 73 20 61 20 6b 65 79  ng text is a key
5650: 20 77 69 74 68 20 74 68 72 65 65 20 65 6c 65 6d   with three elem
5660: 65 6e 74 73 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  ents.**.**      
5670: 20 20 20 20 20 20 41 6f 6e 65 5c 30 30 30 44 74        Aone\000Dt
5680: 77 6f 5c 30 30 30 41 74 68 72 65 65 5c 30 30 30  wo\000Athree\000
5690: 5c 30 30 30 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 65  \000.**.** All e
56a0: 6c 65 6d 65 6e 74 73 20 62 65 67 69 6e 20 77 69  lements begin wi
56b0: 74 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 68  th one of the ch
56c0: 61 72 61 63 74 65 72 73 20 22 2b 2d 41 44 22 20  aracters "+-AD" 
56d0: 61 6e 64 20 65 6e 64 20 77 69 74 68 20 22 5c 30  and end with "\0
56e0: 30 30 22 0a 2a 2a 20 77 69 74 68 20 7a 65 72 6f  00".** with zero
56f0: 20 6f 72 20 6d 6f 72 65 20 74 65 78 74 20 65 6c   or more text el
5700: 65 6d 65 6e 74 73 20 69 6e 20 62 65 74 77 65 65  ements in betwee
5710: 6e 2e 20 20 45 78 63 65 70 74 2c 20 4e 55 4c 4c  n.  Except, NULL
5720: 20 65 6c 65 6d 65 6e 74 73 0a 2a 2a 20 63 6f 6e   elements.** con
5730: 73 69 73 74 20 6f 66 20 74 68 65 20 73 70 65 63  sist of the spec
5740: 69 61 6c 20 74 77 6f 2d 63 68 61 72 61 63 74 65  ial two-characte
5750: 72 20 73 65 71 75 65 6e 63 65 20 22 4e 5c 30 30  r sequence "N\00
5760: 30 22 2e 0a 2a 2a 0a 2a 2a 20 42 6f 74 68 20 61  0"..**.** Both a
5770: 72 67 75 6d 65 6e 74 73 20 77 69 6c 6c 20 68 61  rguments will ha
5780: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62  ve the same numb
5790: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 2e 20  er of elements. 
57a0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   This routine.**
57b0: 20 72 65 74 75 72 6e 73 20 6e 65 67 61 74 69 76   returns negativ
57c0: 65 2c 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69  e, zero, or posi
57d0: 74 69 76 65 20 69 66 20 74 68 65 20 66 69 72 73  tive if the firs
57e0: 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6c 65  t argument is le
57f0: 73 73 0a 2a 2a 20 74 68 61 6e 2c 20 65 71 75 61  ss.** than, equa
5800: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
5810: 20 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 2e   than the first.
5820: 20 20 28 52 65 73 75 6c 74 20 69 73 20 61 2d 62    (Result is a-b
5830: 29 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 65 6c  )..**.** Each el
5840: 65 6d 65 6e 74 20 62 65 67 69 6e 73 20 77 69 74  ement begins wit
5850: 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 68 61  h one of the cha
5860: 72 61 63 74 65 72 73 20 22 2b 22 2c 20 22 2d 22  racters "+", "-"
5870: 2c 20 22 41 22 2c 20 22 44 22 2e 0a 2a 2a 20 54  , "A", "D"..** T
5880: 68 69 73 20 63 68 61 72 61 63 74 65 72 20 64 65  his character de
5890: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 73 6f 72  termines the sor
58a0: 74 20 6f 72 64 65 72 20 61 6e 64 20 63 6f 6c 6c  t order and coll
58b0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 0a  ating sequence:.
58c0: 2a 2a 0a 2a 2a 20 20 20 20 20 2b 20 20 20 20 20  **.**     +     
58d0: 20 53 6f 72 74 20 6e 75 6d 65 72 69 63 61 6c 6c   Sort numericall
58e0: 79 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  y in ascending o
58f0: 72 64 65 72 0a 2a 2a 20 20 20 20 20 2d 20 20 20  rder.**     -   
5900: 20 20 20 53 6f 72 74 20 6e 75 6d 65 72 69 63 61     Sort numerica
5910: 6c 6c 79 20 69 6e 20 64 65 73 63 65 6e 64 69 6e  lly in descendin
5920: 67 20 6f 72 64 65 72 0a 2a 2a 20 20 20 20 20 41  g order.**     A
5930: 20 20 20 20 20 20 53 6f 72 74 20 61 73 20 73 74        Sort as st
5940: 72 69 6e 67 73 20 69 6e 20 61 73 63 65 6e 64 69  rings in ascendi
5950: 6e 67 20 6f 72 64 65 72 0a 2a 2a 20 20 20 20 20  ng order.**     
5960: 44 20 20 20 20 20 20 53 6f 72 74 20 61 73 20 73  D      Sort as s
5970: 74 72 69 6e 67 73 20 69 6e 20 64 65 73 63 65 6e  trings in descen
5980: 64 69 6e 67 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  ding order..**.*
5990: 2a 20 46 6f 72 20 74 68 65 20 22 2b 22 20 61 6e  * For the "+" an
59a0: 64 20 22 2d 22 20 73 6f 72 74 69 6e 67 2c 20 70  d "-" sorting, p
59b0: 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74 72 69  ure numeric stri
59c0: 6e 67 73 20 28 73 74 72 69 6e 67 73 20 66 6f 72  ngs (strings for
59d0: 20 77 68 69 63 68 20 74 68 65 0a 2a 2a 20 69 73   which the.** is
59e0: 4e 75 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  Num() function a
59f0: 62 6f 76 65 20 72 65 74 75 72 6e 73 20 54 52 55  bove returns TRU
5a00: 45 29 20 61 6c 77 61 79 73 20 63 6f 6d 70 61 72  E) always compar
5a10: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
5a20: 6e 67 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  ngs.** that are 
5a30: 6e 6f 74 20 70 75 72 65 20 6e 75 6d 65 72 69 63  not pure numeric
5a40: 73 2e 20 20 4e 6f 6e 2d 6e 75 6d 65 72 69 63 20  s.  Non-numeric 
5a50: 73 74 72 69 6e 67 73 20 63 6f 6d 70 61 72 65 20  strings compare 
5a60: 69 6e 20 6d 65 6d 63 6d 70 28 29 0a 2a 2a 20 6f  in memcmp().** o
5a70: 72 64 65 72 2e 20 20 54 68 69 73 20 69 73 20 74  rder.  This is t
5a80: 68 65 20 73 61 6d 65 20 73 6f 72 74 20 6f 72 64  he same sort ord
5a90: 65 72 20 61 73 20 74 68 65 20 73 71 6c 69 74 65  er as the sqlite
5aa0: 33 43 6f 6d 70 61 72 65 28 29 20 66 75 6e 63 74  3Compare() funct
5ab0: 69 6f 6e 0a 2a 2a 20 61 62 6f 76 65 20 67 65 6e  ion.** above gen
5ac0: 65 72 61 74 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  erates..**.** Th
5ad0: 65 20 6c 61 73 74 20 70 6f 69 6e 74 20 69 73 20  e last point is 
5ae0: 61 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 76 65  a change from ve
5af0: 72 73 69 6f 6e 20 32 2e 36 2e 33 20 74 6f 20 76  rsion 2.6.3 to v
5b00: 65 72 73 69 6f 6e 20 32 2e 37 2e 30 2e 20 20 49  ersion 2.7.0.  I
5b10: 6e 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 32 2e 36  n.** version 2.6
5b20: 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2c 20  .3 and earlier, 
5b30: 73 75 62 73 74 72 69 6e 67 73 20 6f 66 20 64 69  substrings of di
5b40: 67 69 74 73 20 63 6f 6d 70 61 72 65 20 69 6e 20  gits compare in 
5b50: 6e 75 6d 65 72 69 63 61 6c 20 0a 2a 2a 20 61 6e  numerical .** an
5b60: 64 20 63 61 73 65 20 77 61 73 20 75 73 65 64 20  d case was used 
5b70: 6f 6e 6c 79 20 74 6f 20 62 72 65 61 6b 20 61 20  only to break a 
5b80: 74 69 65 2e 0a 2a 2a 0a 2a 2a 20 45 6c 65 6d 65  tie..**.** Eleme
5b90: 6e 74 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nts that begin w
5ba0: 69 74 68 20 27 41 27 20 6f 72 20 27 44 27 20 63  ith 'A' or 'D' c
5bb0: 6f 6d 70 61 72 65 20 69 6e 20 6d 65 6d 63 6d 70  ompare in memcmp
5bc0: 28 29 20 6f 72 64 65 72 20 72 65 67 61 72 64 6c  () order regardl
5bd0: 65 73 73 0a 2a 2a 20 6f 66 20 77 68 65 74 68 65  ess.** of whethe
5be0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 79 20 6c 6f  r or not they lo
5bf0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
5c00: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
5c10: 74 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72  t the sort order
5c20: 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20   imposed by the 
5c30: 72 75 6c 65 73 20 61 62 6f 76 65 20 69 73 20 74  rules above is t
5c40: 68 65 20 73 61 6d 65 0a 2a 2a 20 66 72 6f 6d 20  he same.** from 
5c50: 74 68 65 20 6f 72 64 65 72 69 6e 67 20 64 65 66  the ordering def
5c60: 69 6e 65 64 20 62 79 20 74 68 65 20 22 3c 22 2c  ined by the "<",
5c70: 20 22 3c 3d 22 2c 20 22 3e 22 2c 20 61 6e 64 20   "<=", ">", and 
5c80: 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 73 0a 2a  ">=" operators.*
5c90: 2a 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  * of expressions
5ca0: 20 61 6e 64 20 66 6f 72 20 69 6e 64 69 63 65 73   and for indices
5cb0: 2e 20 20 54 68 69 73 20 77 61 73 20 6e 6f 74 20  .  This was not 
5cc0: 74 68 65 20 63 61 73 65 20 66 6f 72 20 76 65 72  the case for ver
5cd0: 73 69 6f 6e 0a 2a 2a 20 32 2e 36 2e 33 20 61 6e  sion.** 2.6.3 an
5ce0: 64 20 65 61 72 6c 69 65 72 2e 0a 2a 2f 0a 69 6e  d earlier..*/.in
5cf0: 74 20 73 71 6c 69 74 65 33 53 6f 72 74 43 6f 6d  t sqlite3SortCom
5d00: 70 61 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20  pare(const char 
5d10: 2a 61 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *a, const char *
5d20: 62 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20  b){.  int res = 
5d30: 30 3b 0a 20 20 69 6e 74 20 69 73 4e 75 6d 41 2c  0;.  int isNumA,
5d40: 20 69 73 4e 75 6d 42 3b 0a 20 20 69 6e 74 20 64   isNumB;.  int d
5d50: 69 72 20 3d 20 30 3b 0a 0a 20 20 77 68 69 6c 65  ir = 0;..  while
5d60: 28 20 72 65 73 3d 3d 30 20 26 26 20 2a 61 20 26  ( res==0 && *a &
5d70: 26 20 2a 62 20 29 7b 0a 20 20 20 20 69 66 28 20  & *b ){.    if( 
5d80: 61 5b 30 5d 3d 3d 27 4e 27 20 7c 7c 20 62 5b 30  a[0]=='N' || b[0
5d90: 5d 3d 3d 27 4e 27 20 29 7b 0a 20 20 20 20 20 20  ]=='N' ){.      
5da0: 69 66 28 20 61 5b 30 5d 3d 3d 62 5b 30 5d 20 29  if( a[0]==b[0] )
5db0: 7b 0a 20 20 20 20 20 20 20 20 61 20 2b 3d 20 32  {.        a += 2
5dc0: 3b 0a 20 20 20 20 20 20 20 20 62 20 2b 3d 20 32  ;.        b += 2
5dd0: 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e  ;.        contin
5de0: 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ue;.      }.    
5df0: 20 20 69 66 28 20 61 5b 30 5d 3d 3d 27 4e 27 20    if( a[0]=='N' 
5e00: 29 7b 0a 20 20 20 20 20 20 20 20 64 69 72 20 3d  ){.        dir =
5e10: 20 62 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 72   b[0];.        r
5e20: 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7d  es = -1;.      }
5e30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 69  else{.        di
5e40: 72 20 3d 20 61 5b 30 5d 3b 0a 20 20 20 20 20 20  r = a[0];.      
5e50: 20 20 72 65 73 20 3d 20 2b 31 3b 0a 20 20 20 20    res = +1;.    
5e60: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
5e70: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
5e80: 74 28 20 61 5b 30 5d 3d 3d 62 5b 30 5d 20 29 3b  t( a[0]==b[0] );
5e90: 0a 20 20 20 20 69 66 28 20 28 64 69 72 3d 61 5b  .    if( (dir=a[
5ea0: 30 5d 29 3d 3d 27 41 27 20 7c 7c 20 61 5b 30 5d  0])=='A' || a[0]
5eb0: 3d 3d 27 44 27 20 29 7b 0a 20 20 20 20 20 20 72  =='D' ){.      r
5ec0: 65 73 20 3d 20 73 74 72 63 6d 70 28 26 61 5b 31  es = strcmp(&a[1
5ed0: 5d 2c 26 62 5b 31 5d 29 3b 0a 20 20 20 20 20 20  ],&b[1]);.      
5ee0: 69 66 28 20 72 65 73 20 29 20 62 72 65 61 6b 3b  if( res ) break;
5ef0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
5f00: 20 20 69 73 4e 75 6d 41 20 3d 20 73 71 6c 69 74    isNumA = sqlit
5f10: 65 33 49 73 4e 75 6d 62 65 72 28 26 61 5b 31 5d  e3IsNumber(&a[1]
5f20: 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 0, SQLITE_UTF8
5f30: 29 3b 0a 20 20 20 20 20 20 69 73 4e 75 6d 42 20  );.      isNumB 
5f40: 3d 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65  = sqlite3IsNumbe
5f50: 72 28 26 62 5b 31 5d 2c 20 30 2c 20 53 51 4c 49  r(&b[1], 0, SQLI
5f60: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
5f70: 69 66 28 20 69 73 4e 75 6d 41 20 29 7b 0a 20 20  if( isNumA ){.  
5f80: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 41 2c        double rA,
5f90: 20 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28   rB;.        if(
5fa0: 20 21 69 73 4e 75 6d 42 20 29 7b 0a 20 20 20 20   !isNumB ){.    
5fb0: 20 20 20 20 20 20 72 65 73 20 3d 20 2d 31 3b 0a        res = -1;.
5fc0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5fd0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5fe0: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 41     rA = sqlite3A
5ff0: 74 6f 46 28 26 61 5b 31 5d 2c 20 30 29 3b 0a 20  toF(&a[1], 0);. 
6000: 20 20 20 20 20 20 20 72 42 20 3d 20 73 71 6c 69         rB = sqli
6010: 74 65 33 41 74 6f 46 28 26 62 5b 31 5d 2c 20 30  te3AtoF(&b[1], 0
6020: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
6030: 41 3c 72 42 20 29 7b 0a 20 20 20 20 20 20 20 20  A<rB ){.        
6040: 20 20 72 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20    res = -1;.    
6050: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6060: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
6070: 66 28 20 72 41 3e 72 42 20 29 7b 0a 20 20 20 20  f( rA>rB ){.    
6080: 20 20 20 20 20 20 72 65 73 20 3d 20 2b 31 3b 0a        res = +1;.
6090: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
60a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
60b0: 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75 6d   }else if( isNum
60c0: 42 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73  B ){.        res
60d0: 20 3d 20 2b 31 3b 0a 20 20 20 20 20 20 20 20 62   = +1;.        b
60e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  reak;.      }els
60f0: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
6100: 20 73 74 72 63 6d 70 28 26 61 5b 31 5d 2c 26 62   strcmp(&a[1],&b
6110: 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  [1]);.        if
6120: 28 20 72 65 73 20 29 20 62 72 65 61 6b 3b 0a 20  ( res ) break;. 
6130: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
6140: 20 61 20 2b 3d 20 73 74 72 6c 65 6e 28 26 61 5b   a += strlen(&a[
6150: 31 5d 29 20 2b 20 32 3b 0a 20 20 20 20 62 20 2b  1]) + 2;.    b +
6160: 3d 20 73 74 72 6c 65 6e 28 26 62 5b 31 5d 29 20  = strlen(&b[1]) 
6170: 2b 20 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  + 2;.  }.  if( d
6180: 69 72 3d 3d 27 2d 27 20 7c 7c 20 64 69 72 3d 3d  ir=='-' || dir==
6190: 27 44 27 20 29 20 72 65 73 20 3d 20 2d 72 65 73  'D' ) res = -res
61a0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a  ;.  return res;.
61b0: 7d 0a 0a 23 69 66 20 31 20 20 2f 2a 20 57 65 20  }..#if 1  /* We 
61c0: 61 72 65 20 6e 6f 77 20 61 6c 77 61 79 73 20 55  are now always U
61d0: 54 46 2d 38 20 2a 2f 0a 2f 2a 0a 2a 2a 20 58 20  TF-8 */./*.** X 
61e0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
61f0: 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
6200: 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
6210: 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 0a  ter.  Increment.
6220: 2a 2a 20 58 20 73 6f 20 74 68 61 74 20 69 74 20  ** X so that it 
6230: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
6240: 78 74 20 63 68 61 72 61 63 74 65 72 2e 20 20 54  xt character.  T
6250: 68 69 73 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 72  his only works r
6260: 69 67 68 74 0a 2a 2a 20 69 66 20 58 20 70 6f 69  ight.** if X poi
6270: 6e 74 73 20 74 6f 20 61 20 77 65 6c 6c 2d 66 6f  nts to a well-fo
6280: 72 6d 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  rmed UTF-8 strin
6290: 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  g..*/.#define sq
62a0: 6c 69 74 65 4e 65 78 74 43 68 61 72 28 58 29 20  liteNextChar(X) 
62b0: 20 77 68 69 6c 65 28 20 28 30 78 63 30 26 2a 2b   while( (0xc0&*+
62c0: 2b 28 58 29 29 3d 3d 30 78 38 30 20 29 7b 7d 0a  +(X))==0x80 ){}.
62d0: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 43 68  #define sqliteCh
62e0: 61 72 56 61 6c 28 58 29 20 20 20 73 71 6c 69 74  arVal(X)   sqlit
62f0: 65 33 52 65 61 64 55 74 66 38 28 58 29 0a 0a 23  e3ReadUtf8(X)..#
6300: 65 6c 73 65 20 2f 2a 20 21 64 65 66 69 6e 65 64  else /* !defined
6310: 28 53 51 4c 49 54 45 5f 55 54 46 38 29 20 2a 2f  (SQLITE_UTF8) */
6320: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 69 73 6f 38 38  ./*.** For iso88
6330: 35 39 20 65 6e 63 6f 64 69 6e 67 2c 20 74 68 65  59 encoding, the
6340: 20 6e 65 78 74 20 63 68 61 72 61 63 74 65 72 20   next character 
6350: 69 73 20 6a 75 73 74 20 74 68 65 20 6e 65 78 74  is just the next
6360: 20 62 79 74 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   byte..*/.#defin
6370: 65 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72  e sqliteNextChar
6380: 28 58 29 20 20 28 2b 2b 28 58 29 29 3b 0a 23 64  (X)  (++(X));.#d
6390: 65 66 69 6e 65 20 73 71 6c 69 74 65 43 68 61 72  efine sqliteChar
63a0: 56 61 6c 28 58 29 20 20 20 28 28 69 6e 74 29 2a  Val(X)   ((int)*
63b0: 28 58 29 29 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  (X))..#endif /* 
63c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55  defined(SQLITE_U
63d0: 54 46 38 29 20 2a 2f 0a 0a 0a 23 69 66 20 31 20  TF8) */...#if 1 
63e0: 20 2f 2a 20 57 65 20 61 72 65 20 6e 6f 77 20 61   /* We are now a
63f0: 6c 77 61 79 73 20 55 54 46 2d 38 20 2a 2f 0a 2f  lways UTF-8 */./
6400: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
6410: 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
6420: 20 74 6f 20 77 68 69 63 68 20 7a 20 70 6f 69 6e   to which z poin
6430: 74 73 20 69 6e 74 6f 20 61 20 33 31 2d 62 69 74  ts into a 31-bit
6440: 0a 2a 2a 20 55 43 53 20 63 68 61 72 61 63 74 65  .** UCS characte
6450: 72 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 77 6f  r.  This only wo
6460: 72 6b 73 20 72 69 67 68 74 20 69 66 20 7a 20 70  rks right if z p
6470: 6f 69 6e 74 73 20 74 6f 20 61 20 77 65 6c 6c 2d  oints to a well-
6480: 66 6f 72 6d 65 64 0a 2a 2a 20 55 54 46 2d 38 20  formed.** UTF-8 
6490: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 69 6e 74 20 73  string..*/.int s
64a0: 71 6c 69 74 65 33 52 65 61 64 55 74 66 38 28 63  qlite3ReadUtf8(c
64b0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
64c0: 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63 3b  ar *z){.  int c;
64d0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
64e0: 69 6e 74 20 69 6e 69 74 56 61 6c 5b 5d 20 3d 20  int initVal[] = 
64f0: 7b 0a 20 20 20 20 20 20 30 2c 20 20 20 31 2c 20  {.      0,   1, 
6500: 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20 20    2,   3,   4,  
6510: 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20 20   5,   6,   7,   
6520: 38 2c 20 20 20 39 2c 20 20 31 30 2c 20 20 31 31  8,   9,  10,  11
6530: 2c 20 20 31 32 2c 20 20 31 33 2c 20 20 31 34 2c  ,  12,  13,  14,
6540: 0a 20 20 20 20 20 31 35 2c 20 20 31 36 2c 20 20  .     15,  16,  
6550: 31 37 2c 20 20 31 38 2c 20 20 31 39 2c 20 20 32  17,  18,  19,  2
6560: 30 2c 20 20 32 31 2c 20 20 32 32 2c 20 20 32 33  0,  21,  22,  23
6570: 2c 20 20 32 34 2c 20 20 32 35 2c 20 20 32 36 2c  ,  24,  25,  26,
6580: 20 20 32 37 2c 20 20 32 38 2c 20 20 32 39 2c 0a    27,  28,  29,.
6590: 20 20 20 20 20 33 30 2c 20 20 33 31 2c 20 20 33       30,  31,  3
65a0: 32 2c 20 20 33 33 2c 20 20 33 34 2c 20 20 33 35  2,  33,  34,  35
65b0: 2c 20 20 33 36 2c 20 20 33 37 2c 20 20 33 38 2c  ,  36,  37,  38,
65c0: 20 20 33 39 2c 20 20 34 30 2c 20 20 34 31 2c 20    39,  40,  41, 
65d0: 20 34 32 2c 20 20 34 33 2c 20 20 34 34 2c 0a 20   42,  43,  44,. 
65e0: 20 20 20 20 34 35 2c 20 20 34 36 2c 20 20 34 37      45,  46,  47
65f0: 2c 20 20 34 38 2c 20 20 34 39 2c 20 20 35 30 2c  ,  48,  49,  50,
6600: 20 20 35 31 2c 20 20 35 32 2c 20 20 35 33 2c 20    51,  52,  53, 
6610: 20 35 34 2c 20 20 35 35 2c 20 20 35 36 2c 20 20   54,  55,  56,  
6620: 35 37 2c 20 20 35 38 2c 20 20 35 39 2c 0a 20 20  57,  58,  59,.  
6630: 20 20 20 36 30 2c 20 20 36 31 2c 20 20 36 32 2c     60,  61,  62,
6640: 20 20 36 33 2c 20 20 36 34 2c 20 20 36 35 2c 20    63,  64,  65, 
6650: 20 36 36 2c 20 20 36 37 2c 20 20 36 38 2c 20 20   66,  67,  68,  
6660: 36 39 2c 20 20 37 30 2c 20 20 37 31 2c 20 20 37  69,  70,  71,  7
6670: 32 2c 20 20 37 33 2c 20 20 37 34 2c 0a 20 20 20  2,  73,  74,.   
6680: 20 20 37 35 2c 20 20 37 36 2c 20 20 37 37 2c 20    75,  76,  77, 
6690: 20 37 38 2c 20 20 37 39 2c 20 20 38 30 2c 20 20   78,  79,  80,  
66a0: 38 31 2c 20 20 38 32 2c 20 20 38 33 2c 20 20 38  81,  82,  83,  8
66b0: 34 2c 20 20 38 35 2c 20 20 38 36 2c 20 20 38 37  4,  85,  86,  87
66c0: 2c 20 20 38 38 2c 20 20 38 39 2c 0a 20 20 20 20  ,  88,  89,.    
66d0: 20 39 30 2c 20 20 39 31 2c 20 20 39 32 2c 20 20   90,  91,  92,  
66e0: 39 33 2c 20 20 39 34 2c 20 20 39 35 2c 20 20 39  93,  94,  95,  9
66f0: 36 2c 20 20 39 37 2c 20 20 39 38 2c 20 20 39 39  6,  97,  98,  99
6700: 2c 20 31 30 30 2c 20 31 30 31 2c 20 31 30 32 2c  , 100, 101, 102,
6710: 20 31 30 33 2c 20 31 30 34 2c 0a 20 20 20 20 31   103, 104,.    1
6720: 30 35 2c 20 31 30 36 2c 20 31 30 37 2c 20 31 30  05, 106, 107, 10
6730: 38 2c 20 31 30 39 2c 20 31 31 30 2c 20 31 31 31  8, 109, 110, 111
6740: 2c 20 31 31 32 2c 20 31 31 33 2c 20 31 31 34 2c  , 112, 113, 114,
6750: 20 31 31 35 2c 20 31 31 36 2c 20 31 31 37 2c 20   115, 116, 117, 
6760: 31 31 38 2c 20 31 31 39 2c 0a 20 20 20 20 31 32  118, 119,.    12
6770: 30 2c 20 31 32 31 2c 20 31 32 32 2c 20 31 32 33  0, 121, 122, 123
6780: 2c 20 31 32 34 2c 20 31 32 35 2c 20 31 32 36 2c  , 124, 125, 126,
6790: 20 31 32 37 2c 20 31 32 38 2c 20 31 32 39 2c 20   127, 128, 129, 
67a0: 31 33 30 2c 20 31 33 31 2c 20 31 33 32 2c 20 31  130, 131, 132, 1
67b0: 33 33 2c 20 31 33 34 2c 0a 20 20 20 20 31 33 35  33, 134,.    135
67c0: 2c 20 31 33 36 2c 20 31 33 37 2c 20 31 33 38 2c  , 136, 137, 138,
67d0: 20 31 33 39 2c 20 31 34 30 2c 20 31 34 31 2c 20   139, 140, 141, 
67e0: 31 34 32 2c 20 31 34 33 2c 20 31 34 34 2c 20 31  142, 143, 144, 1
67f0: 34 35 2c 20 31 34 36 2c 20 31 34 37 2c 20 31 34  45, 146, 147, 14
6800: 38 2c 20 31 34 39 2c 0a 20 20 20 20 31 35 30 2c  8, 149,.    150,
6810: 20 31 35 31 2c 20 31 35 32 2c 20 31 35 33 2c 20   151, 152, 153, 
6820: 31 35 34 2c 20 31 35 35 2c 20 31 35 36 2c 20 31  154, 155, 156, 1
6830: 35 37 2c 20 31 35 38 2c 20 31 35 39 2c 20 31 36  57, 158, 159, 16
6840: 30 2c 20 31 36 31 2c 20 31 36 32 2c 20 31 36 33  0, 161, 162, 163
6850: 2c 20 31 36 34 2c 0a 20 20 20 20 31 36 35 2c 20  , 164,.    165, 
6860: 31 36 36 2c 20 31 36 37 2c 20 31 36 38 2c 20 31  166, 167, 168, 1
6870: 36 39 2c 20 31 37 30 2c 20 31 37 31 2c 20 31 37  69, 170, 171, 17
6880: 32 2c 20 31 37 33 2c 20 31 37 34 2c 20 31 37 35  2, 173, 174, 175
6890: 2c 20 31 37 36 2c 20 31 37 37 2c 20 31 37 38 2c  , 176, 177, 178,
68a0: 20 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 20 31   179,.    180, 1
68b0: 38 31 2c 20 31 38 32 2c 20 31 38 33 2c 20 31 38  81, 182, 183, 18
68c0: 34 2c 20 31 38 35 2c 20 31 38 36 2c 20 31 38 37  4, 185, 186, 187
68d0: 2c 20 31 38 38 2c 20 31 38 39 2c 20 31 39 30 2c  , 188, 189, 190,
68e0: 20 31 39 31 2c 20 20 20 30 2c 20 20 20 31 2c 20   191,   0,   1, 
68f0: 20 20 32 2c 0a 20 20 20 20 20 20 33 2c 20 20 20    2,.      3,   
6900: 34 2c 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37  4,   5,   6,   7
6910: 2c 20 20 20 38 2c 20 20 20 39 2c 20 20 31 30 2c  ,   8,   9,  10,
6920: 20 20 31 31 2c 20 20 31 32 2c 20 20 31 33 2c 20    11,  12,  13, 
6930: 20 31 34 2c 20 20 31 35 2c 20 20 31 36 2c 20 20   14,  15,  16,  
6940: 31 37 2c 0a 20 20 20 20 20 31 38 2c 20 20 31 39  17,.     18,  19
6950: 2c 20 20 32 30 2c 20 20 32 31 2c 20 20 32 32 2c  ,  20,  21,  22,
6960: 20 20 32 33 2c 20 20 32 34 2c 20 20 32 35 2c 20    23,  24,  25, 
6970: 20 32 36 2c 20 20 32 37 2c 20 20 32 38 2c 20 20   26,  27,  28,  
6980: 32 39 2c 20 20 33 30 2c 20 20 33 31 2c 20 20 20  29,  30,  31,   
6990: 30 2c 0a 20 20 20 20 20 20 31 2c 20 20 20 32 2c  0,.      1,   2,
69a0: 20 20 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20     3,   4,   5, 
69b0: 20 20 36 2c 20 20 20 37 2c 20 20 20 38 2c 20 20    6,   7,   8,  
69c0: 20 39 2c 20 20 31 30 2c 20 20 31 31 2c 20 20 31   9,  10,  11,  1
69d0: 32 2c 20 20 31 33 2c 20 20 31 34 2c 20 20 31 35  2,  13,  14,  15
69e0: 2c 0a 20 20 20 20 20 20 30 2c 20 20 20 31 2c 20  ,.      0,   1, 
69f0: 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20 20    2,   3,   4,  
6a00: 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20 20   5,   6,   7,   
6a10: 30 2c 20 20 20 31 2c 20 20 20 32 2c 20 20 20 33  0,   1,   2,   3
6a20: 2c 20 20 20 30 2c 20 20 20 31 2c 20 32 35 34 2c  ,   0,   1, 254,
6a30: 0a 20 20 20 20 32 35 35 2c 0a 20 20 7d 3b 0a 20  .    255,.  };. 
6a40: 20 63 20 3d 20 69 6e 69 74 56 61 6c 5b 2a 28 7a   c = initVal[*(z
6a50: 2b 2b 29 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28  ++)];.  while( (
6a60: 30 78 63 30 26 2a 7a 29 3d 3d 30 78 38 30 20 29  0xc0&*z)==0x80 )
6a70: 7b 0a 20 20 20 20 63 20 3d 20 28 63 3c 3c 36 29  {.    c = (c<<6)
6a80: 20 7c 20 28 30 78 33 66 26 2a 28 7a 2b 2b 29 29   | (0x3f&*(z++))
6a90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 63  ;.  }.  return c
6aa0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
6ab0: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 55 54  * Compare two UT
6ac0: 46 2d 38 20 73 74 72 69 6e 67 73 20 66 6f 72 20  F-8 strings for 
6ad0: 65 71 75 61 6c 69 74 79 20 77 68 65 72 65 20 74  equality where t
6ae0: 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
6af0: 63 61 6e 0a 2a 2a 20 70 6f 74 65 6e 74 69 61 6c  can.** potential
6b00: 6c 79 20 62 65 20 61 20 22 67 6c 6f 62 22 20 65  ly be a "glob" e
6b10: 78 70 72 65 73 73 69 6f 6e 2e 20 20 52 65 74 75  xpression.  Retu
6b20: 72 6e 20 74 72 75 65 20 28 31 29 20 69 66 20 74  rn true (1) if t
6b30: 68 65 79 0a 2a 2a 20 61 72 65 20 74 68 65 20 73  hey.** are the s
6b40: 61 6d 65 20 61 6e 64 20 66 61 6c 73 65 20 28 30  ame and false (0
6b50: 29 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  ) if they are di
6b60: 66 66 65 72 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 47  fferent..**.** G
6b70: 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a 2a  lobbing rules:.*
6b80: 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20 20 20  *.**      '*'   
6b90: 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79 20      Matches any 
6ba0: 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f  sequence of zero
6bb0: 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74   or more charact
6bc0: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  ers..**.**      
6bd0: 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63 68 65  '?'       Matche
6be0: 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 63 68  s exactly one ch
6bf0: 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 20  aracter..**.**  
6c00: 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d 61     [...]      Ma
6c10: 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61 63  tches one charac
6c20: 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65 6e 63  ter from the enc
6c30: 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a 2a  losed list of.**
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c50: 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a  characters..**.*
6c60: 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20 20  *     [^...]    
6c70: 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61   Matches one cha
6c80: 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20 74 68  racter not in th
6c90: 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 2e  e enclosed list.
6ca0: 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
6cb0: 5b 2e 2e 2e 5d 20 61 6e 64 20 5b 5e 2e 2e 2e 5d  [...] and [^...]
6cc0: 20 6d 61 74 63 68 69 6e 67 2c 20 61 20 27 5d 27   matching, a ']'
6cd0: 20 63 68 61 72 61 63 74 65 72 20 63 61 6e 20 62   character can b
6ce0: 65 20 69 6e 63 6c 75 64 65 64 0a 2a 2a 20 69 6e  e included.** in
6cf0: 20 74 68 65 20 6c 69 73 74 20 62 79 20 6d 61 6b   the list by mak
6d00: 69 6e 67 20 69 74 20 74 68 65 20 66 69 72 73 74  ing it the first
6d10: 20 63 68 61 72 61 63 74 65 72 20 61 66 74 65 72   character after
6d20: 20 27 5b 27 20 6f 72 20 27 5e 27 2e 20 20 41 0a   '[' or '^'.  A.
6d30: 2a 2a 20 72 61 6e 67 65 20 6f 66 20 63 68 61 72  ** range of char
6d40: 61 63 74 65 72 73 20 63 61 6e 20 62 65 20 73 70  acters can be sp
6d50: 65 63 69 66 69 65 64 20 75 73 69 6e 67 20 27 2d  ecified using '-
6d60: 27 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 2a 2a 20  '.  Example:.** 
6d70: 22 5b 61 2d 7a 5d 22 20 6d 61 74 63 68 65 73 20  "[a-z]" matches 
6d80: 61 6e 79 20 73 69 6e 67 6c 65 20 6c 6f 77 65 72  any single lower
6d90: 2d 63 61 73 65 20 6c 65 74 74 65 72 2e 20 20 54  -case letter.  T
6da0: 6f 20 6d 61 74 63 68 20 61 20 27 2d 27 2c 20 6d  o match a '-', m
6db0: 61 6b 65 0a 2a 2a 20 69 74 20 74 68 65 20 6c 61  ake.** it the la
6dc0: 73 74 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  st character in 
6dd0: 74 68 65 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20  the list..**.** 
6de0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
6df0: 75 73 75 61 6c 6c 79 20 71 75 69 63 6b 2c 20 62  usually quick, b
6e00: 75 74 20 63 61 6e 20 62 65 20 4e 2a 2a 32 20 69  ut can be N**2 i
6e10: 6e 20 74 68 65 20 77 6f 72 73 74 20 63 61 73 65  n the worst case
6e20: 2e 0a 2a 2a 0a 2a 2a 20 48 69 6e 74 73 3a 20 74  ..**.** Hints: t
6e30: 6f 20 6d 61 74 63 68 20 27 2a 27 20 6f 72 20 27  o match '*' or '
6e40: 3f 27 2c 20 70 75 74 20 74 68 65 6d 20 69 6e 20  ?', put them in 
6e50: 22 5b 5d 22 2e 20 20 4c 69 6b 65 20 74 68 69 73  "[]".  Like this
6e60: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
6e70: 61 62 63 5b 2a 5d 78 79 7a 20 20 20 20 20 20 20  abc[*]xyz       
6e80: 20 4d 61 74 63 68 65 73 20 22 61 62 63 2a 78 79   Matches "abc*xy
6e90: 7a 22 20 6f 6e 6c 79 0a 2a 2f 0a 69 6e 74 20 0a  z" only.*/.int .
6ea0: 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61  sqlite3GlobCompa
6eb0: 72 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  re(const unsigne
6ec0: 64 20 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e  d char *zPattern
6ed0: 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  , const unsigned
6ee0: 20 63 68 61 72 20 2a 7a 53 74 72 69 6e 67 29 7b   char *zString){
6ef0: 0a 20 20 72 65 67 69 73 74 65 72 20 69 6e 74 20  .  register int 
6f00: 63 3b 0a 20 20 69 6e 74 20 69 6e 76 65 72 74 3b  c;.  int invert;
6f10: 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a 20 20 69  .  int seen;.  i
6f20: 6e 74 20 63 32 3b 0a 0a 20 20 77 68 69 6c 65 28  nt c2;..  while(
6f30: 20 28 63 20 3d 20 2a 7a 50 61 74 74 65 72 6e 29   (c = *zPattern)
6f40: 21 3d 30 20 29 7b 0a 20 20 20 20 73 77 69 74 63  !=0 ){.    switc
6f50: 68 28 20 63 20 29 7b 0a 20 20 20 20 20 20 63 61  h( c ){.      ca
6f60: 73 65 20 27 2a 27 3a 0a 20 20 20 20 20 20 20 20  se '*':.        
6f70: 77 68 69 6c 65 28 20 28 63 3d 7a 50 61 74 74 65  while( (c=zPatte
6f80: 72 6e 5b 31 5d 29 20 3d 3d 20 27 2a 27 20 7c 7c  rn[1]) == '*' ||
6f90: 20 63 20 3d 3d 20 27 3f 27 20 29 7b 0a 20 20 20   c == '?' ){.   
6fa0: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 3f         if( c=='?
6fb0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
6fc0: 20 69 66 28 20 2a 7a 53 74 72 69 6e 67 3d 3d 30   if( *zString==0
6fd0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
6fe0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 4e           sqliteN
6ff0: 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67 29  extChar(zString)
7000: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
7010: 20 20 20 20 20 20 20 20 7a 50 61 74 74 65 72 6e          zPattern
7020: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
7030: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29        if( c==0 )
7040: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
7050: 20 20 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b     if( c=='[' ){
7060: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65  .          while
7070: 28 20 2a 7a 53 74 72 69 6e 67 20 26 26 20 73 71  ( *zString && sq
7080: 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72 65  lite3GlobCompare
7090: 28 26 7a 50 61 74 74 65 72 6e 5b 31 5d 2c 7a 53  (&zPattern[1],zS
70a0: 74 72 69 6e 67 29 3d 3d 30 20 29 7b 0a 20 20 20  tring)==0 ){.   
70b0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 4e           sqliteN
70c0: 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67 29  extChar(zString)
70d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
70e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2a          return *
70f0: 7a 53 74 72 69 6e 67 21 3d 30 3b 0a 20 20 20 20  zString!=0;.    
7100: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7110: 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 32 20       while( (c2 
7120: 3d 20 2a 7a 53 74 72 69 6e 67 29 21 3d 30 20 29  = *zString)!=0 )
7130: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  {.            wh
7140: 69 6c 65 28 20 63 32 20 21 3d 20 30 20 26 26 20  ile( c2 != 0 && 
7150: 63 32 20 21 3d 20 63 20 29 7b 20 63 32 20 3d 20  c2 != c ){ c2 = 
7160: 2a 2b 2b 7a 53 74 72 69 6e 67 3b 20 7d 0a 20 20  *++zString; }.  
7170: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 32            if( c2
7180: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
7190: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
71a0: 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61  sqlite3GlobCompa
71b0: 72 65 28 26 7a 50 61 74 74 65 72 6e 5b 31 5d 2c  re(&zPattern[1],
71c0: 7a 53 74 72 69 6e 67 29 20 29 20 72 65 74 75 72  zString) ) retur
71d0: 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20  n 1;.           
71e0: 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28   sqliteNextChar(
71f0: 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  zString);.      
7200: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
7210: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
7220: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
7230: 3f 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  ?': {.        if
7240: 28 20 2a 7a 53 74 72 69 6e 67 3d 3d 30 20 29 20  ( *zString==0 ) 
7250: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
7260: 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72    sqliteNextChar
7270: 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20  (zString);.     
7280: 20 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20     zPattern++;. 
7290: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
72a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
72b0: 20 27 5b 27 3a 20 7b 0a 20 20 20 20 20 20 20 20   '[': {.        
72c0: 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b  int prior_c = 0;
72d0: 0a 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d 20  .        seen = 
72e0: 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 76 65 72  0;.        inver
72f0: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63  t = 0;.        c
7300: 20 3d 20 73 71 6c 69 74 65 43 68 61 72 56 61 6c   = sqliteCharVal
7310: 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20  (zString);.     
7320: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65     if( c==0 ) re
7330: 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20  turn 0;.        
7340: 63 32 20 3d 20 2a 2b 2b 7a 50 61 74 74 65 72 6e  c2 = *++zPattern
7350: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 32  ;.        if( c2
7360: 3d 3d 27 5e 27 20 29 7b 20 69 6e 76 65 72 74 20  =='^' ){ invert 
7370: 3d 20 31 3b 20 63 32 20 3d 20 2a 2b 2b 7a 50 61  = 1; c2 = *++zPa
7380: 74 74 65 72 6e 3b 20 7d 0a 20 20 20 20 20 20 20  ttern; }.       
7390: 20 69 66 28 20 63 32 3d 3d 27 5d 27 20 29 7b 0a   if( c2==']' ){.
73a0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d            if( c=
73b0: 3d 27 5d 27 20 29 20 73 65 65 6e 20 3d 20 31 3b  =']' ) seen = 1;
73c0: 0a 20 20 20 20 20 20 20 20 20 20 63 32 20 3d 20  .          c2 = 
73d0: 2a 2b 2b 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20  *++zPattern;.   
73e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77       }.        w
73f0: 68 69 6c 65 28 20 28 63 32 20 3d 20 73 71 6c 69  hile( (c2 = sqli
7400: 74 65 43 68 61 72 56 61 6c 28 7a 50 61 74 74 65  teCharVal(zPatte
7410: 72 6e 29 29 21 3d 30 20 26 26 20 63 32 21 3d 27  rn))!=0 && c2!='
7420: 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ]' ){.          
7430: 69 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20 7a  if( c2=='-' && z
7440: 50 61 74 74 65 72 6e 5b 31 5d 21 3d 27 5d 27 20  Pattern[1]!=']' 
7450: 26 26 20 7a 50 61 74 74 65 72 6e 5b 31 5d 21 3d  && zPattern[1]!=
7460: 30 20 26 26 20 70 72 69 6f 72 5f 63 3e 30 20 29  0 && prior_c>0 )
7470: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 50  {.            zP
7480: 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20  attern++;.      
7490: 20 20 20 20 20 20 63 32 20 3d 20 73 71 6c 69 74        c2 = sqlit
74a0: 65 43 68 61 72 56 61 6c 28 7a 50 61 74 74 65 72  eCharVal(zPatter
74b0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n);.            
74c0: 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20 26  if( c>=prior_c &
74d0: 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20 3d  & c<=c2 ) seen =
74e0: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
74f0: 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20  prior_c = 0;.   
7500: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
7510: 20 63 3d 3d 63 32 20 29 7b 0a 20 20 20 20 20 20   c==c2 ){.      
7520: 20 20 20 20 20 20 73 65 65 6e 20 3d 20 31 3b 0a        seen = 1;.
7530: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6f              prio
7540: 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20 20  r_c = c2;.      
7550: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7560: 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63 20 3d         prior_c =
7570: 20 63 32 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   c2;.          }
7580: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
7590: 65 4e 65 78 74 43 68 61 72 28 7a 50 61 74 74 65  eNextChar(zPatte
75a0: 72 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rn);.        }. 
75b0: 20 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30         if( c2==0
75c0: 20 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e 76 65   || (seen ^ inve
75d0: 72 74 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  rt)==0 ) return 
75e0: 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  0;.        sqlit
75f0: 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e  eNextChar(zStrin
7600: 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 50 61 74  g);.        zPat
7610: 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20  tern++;.        
7620: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
7630: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
7640: 20 20 20 20 20 20 20 20 69 66 28 20 63 20 21 3d          if( c !=
7650: 20 2a 7a 53 74 72 69 6e 67 20 29 20 72 65 74 75   *zString ) retu
7660: 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 50  rn 0;.        zP
7670: 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20  attern++;.      
7680: 20 20 7a 53 74 72 69 6e 67 2b 2b 3b 0a 20 20 20    zString++;.   
7690: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
76a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
76b0: 72 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e 67 3d  return *zString=
76c0: 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61  =0;.}../*.** Cha
76d0: 6e 67 65 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  nge the sqlite.m
76e0: 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45  agic from SQLITE
76f0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20 53  _MAGIC_OPEN to S
7700: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
7710: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65  ..** Return an e
7720: 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  rror (non-zero) 
7730: 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61 73  if the magic was
7740: 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49   not SQLITE_MAGI
7750: 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74  C_OPEN.** when t
7760: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
7770: 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  alled..**.** Thi
7780: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 61  s routine is a a
7790: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 63 74  ttempt to detect
77a0: 20 69 66 20 74 77 6f 20 74 68 72 65 61 64 73 20   if two threads 
77b0: 75 73 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  use the.** same 
77c0: 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72 20  sqlite* pointer 
77d0: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
77e0: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 72 61  .  There is a ra
77f0: 63 65 20 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e  ce .** condition
7800: 20 73 6f 20 69 74 20 69 73 20 70 6f 73 73 69 62   so it is possib
7810: 6c 65 20 74 68 61 74 20 74 68 65 20 65 72 72 6f  le that the erro
7820: 72 20 69 73 20 6e 6f 74 20 64 65 74 65 63 74 65  r is not detecte
7830: 64 2e 0a 2a 2a 20 42 75 74 20 75 73 75 61 6c 6c  d..** But usuall
7840: 79 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 77 69  y the problem wi
7850: 6c 6c 20 62 65 20 73 65 65 6e 2e 20 20 54 68 65  ll be seen.  The
7860: 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
7870: 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 77 68 69 63  an.** error whic
7880: 68 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h can be used to
7890: 20 64 65 62 75 67 20 74 68 65 20 61 70 70 6c 69   debug the appli
78a0: 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 0a 2a  cation that is.*
78b0: 2a 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69  * using SQLite i
78c0: 6e 63 6f 72 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a  ncorrectly..**.*
78d0: 2a 20 54 69 63 6b 65 74 20 23 32 30 32 3a 20 20  * Ticket #202:  
78e0: 49 66 20 64 62 2d 3e 6d 61 67 69 63 20 69 73 20  If db->magic is 
78f0: 6e 6f 74 20 61 20 76 61 6c 69 64 20 6f 70 65 6e  not a valid open
7900: 20 76 61 6c 75 65 2c 20 74 61 6b 65 20 63 61 72   value, take car
7910: 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20 6d 6f 64 69  e not.** to modi
7920: 66 79 20 74 68 65 20 64 62 20 73 74 72 75 63 74  fy the db struct
7930: 75 72 65 20 61 74 20 61 6c 6c 2e 20 20 49 74 20  ure at all.  It 
7940: 63 6f 75 6c 64 20 62 65 20 74 68 61 74 20 64 62  could be that db
7950: 20 69 73 20 61 20 73 74 61 6c 65 0a 2a 2a 20 70   is a stale.** p
7960: 6f 69 6e 74 65 72 2e 20 20 49 6e 20 6f 74 68 65  ointer.  In othe
7970: 72 20 77 6f 72 64 73 2c 20 69 74 20 63 6f 75 6c  r words, it coul
7980: 64 20 62 65 20 74 68 61 74 20 74 68 65 72 65 20  d be that there 
7990: 68 61 73 20 62 65 65 6e 20 61 20 70 72 69 6f 72  has been a prior
79a0: 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  .** call to sqli
79b0: 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 20 61 6e  te3_close(db) an
79c0: 64 20 64 62 20 68 61 73 20 62 65 65 6e 20 64 65  d db has been de
79d0: 61 6c 6c 6f 63 61 74 65 64 2e 20 20 41 6e 64 20  allocated.  And 
79e0: 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74 20 77 61 6e  we do.** not wan
79f0: 74 20 74 6f 20 77 72 69 74 65 20 69 6e 74 6f 20  t to write into 
7a00: 64 65 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  deallocated memo
7a10: 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ry..*/.int sqlit
7a20: 65 33 53 61 66 65 74 79 4f 6e 28 73 71 6c 69 74  e3SafetyOn(sqlit
7a30: 65 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  e *db){.  if( db
7a40: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
7a50: 4d 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20  MAGIC_OPEN ){.  
7a60: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
7a70: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b  LITE_MAGIC_BUSY;
7a80: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
7a90: 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d   }else if( db->m
7aa0: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
7ab0: 49 43 5f 42 55 53 59 20 7c 7c 20 64 62 2d 3e 6d  IC_BUSY || db->m
7ac0: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
7ad0: 49 43 5f 45 52 52 4f 52 0a 20 20 20 20 20 20 20  IC_ERROR.       
7ae0: 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 77 61 6e        || db->wan
7af0: 74 5f 74 6f 5f 63 6c 6f 73 65 20 29 7b 0a 20 20  t_to_close ){.  
7b00: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
7b10: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
7b20: 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
7b30: 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72  |= SQLITE_Interr
7b40: 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  upt;.  }.  retur
7b50: 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68  n 1;.}../*.** Ch
7b60: 61 6e 67 65 20 74 68 65 20 6d 61 67 69 63 20 66  ange the magic f
7b70: 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  rom SQLITE_MAGIC
7b80: 5f 42 55 53 59 20 74 6f 20 53 51 4c 49 54 45 5f  _BUSY to SQLITE_
7b90: 4d 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20 52  MAGIC_OPEN..** R
7ba0: 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28  eturn an error (
7bb0: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
7bc0: 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53   magic was not S
7bd0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
7be0: 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f  .** when this ro
7bf0: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e  utine is called.
7c00: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
7c10: 61 66 65 74 79 4f 66 66 28 73 71 6c 69 74 65 20  afetyOff(sqlite 
7c20: 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e  *db){.  if( db->
7c30: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
7c40: 47 49 43 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  GIC_BUSY ){.    
7c50: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
7c60: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20  TE_MAGIC_OPEN;. 
7c70: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
7c80: 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67  else if( db->mag
7c90: 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic==SQLITE_MAGIC
7ca0: 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67  _OPEN || db->mag
7cb0: 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic==SQLITE_MAGIC
7cc0: 5f 45 52 52 4f 52 0a 20 20 20 20 20 20 20 20 20  _ERROR.         
7cd0: 20 20 20 20 7c 7c 20 64 62 2d 3e 77 61 6e 74 5f      || db->want_
7ce0: 74 6f 5f 63 6c 6f 73 65 20 29 7b 0a 20 20 20 20  to_close ){.    
7cf0: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
7d00: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a  TE_MAGIC_ERROR;.
7d10: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
7d20: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70   SQLITE_Interrup
7d30: 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  t;.  }.  return 
7d40: 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  1;.}../*.** Chec
7d50: 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77  k to make sure w
7d60: 65 20 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e  e are not curren
7d70: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 61 6e  tly executing an
7d80: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e   sqlite3_exec().
7d90: 0a 2a 2a 20 49 66 20 77 65 20 61 72 65 20 63 75  .** If we are cu
7da0: 72 72 65 6e 74 6c 79 20 69 6e 20 61 6e 20 73 71  rrently in an sq
7db0: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 72 65  lite3_exec(), re
7dc0: 74 75 72 6e 20 74 72 75 65 20 61 6e 64 20 73 65  turn true and se
7dd0: 74 0a 2a 2a 20 73 71 6c 69 74 65 2e 6d 61 67 69  t.** sqlite.magi
7de0: 63 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49  c to SQLITE_MAGI
7df0: 43 5f 45 52 52 4f 52 2e 20 20 54 68 69 73 20 77  C_ERROR.  This w
7e00: 69 6c 6c 20 63 61 75 73 65 20 61 20 63 6f 6d 70  ill cause a comp
7e10: 6c 65 74 65 0a 2a 2a 20 73 68 75 74 64 6f 77 6e  lete.** shutdown
7e20: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
7e30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
7e40: 74 69 6e 65 20 69 73 20 75 73 65 64 20 74 6f 20  tine is used to 
7e50: 74 72 79 20 74 6f 20 64 65 74 65 63 74 20 77 68  try to detect wh
7e60: 65 6e 20 41 50 49 20 72 6f 75 74 69 6e 65 73 20  en API routines 
7e70: 61 72 65 20 63 61 6c 6c 65 64 0a 2a 2a 20 61 74  are called.** at
7e80: 20 74 68 65 20 77 72 6f 6e 67 20 74 69 6d 65 20   the wrong time 
7e90: 6f 72 20 69 6e 20 74 68 65 20 77 72 6f 6e 67 20  or in the wrong 
7ea0: 73 65 71 75 65 6e 63 65 2e 0a 2a 2f 0a 69 6e 74  sequence..*/.int
7eb0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
7ec0: 65 63 6b 28 73 71 6c 69 74 65 20 2a 64 62 29 7b  eck(sqlite *db){
7ed0: 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65  .  if( db->pVdbe
7ee0: 21 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  !=0 ){.    db->m
7ef0: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
7f00: 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72  GIC_ERROR;.    r
7f10: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
7f20: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
7f30: 2a 20 54 68 65 20 76 61 72 69 61 62 6c 65 2d 6c  * The variable-l
7f40: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 65 6e  ength integer en
7f50: 63 6f 64 69 6e 67 20 69 73 20 61 73 20 66 6f 6c  coding is as fol
7f60: 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a  lows:.**.** KEY:
7f70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 41 20 3d 20  .**         A = 
7f80: 30 78 78 78 78 78 78 78 20 20 20 20 37 20 62 69  0xxxxxxx    7 bi
7f90: 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f  ts of data and o
7fa0: 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20  ne flag bit.**  
7fb0: 20 20 20 20 20 20 20 42 20 3d 20 31 78 78 78 78         B = 1xxxx
7fc0: 78 78 78 20 20 20 20 37 20 62 69 74 73 20 6f 66  xxx    7 bits of
7fd0: 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c   data and one fl
7fe0: 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20  ag bit.**       
7ff0: 20 20 43 20 3d 20 78 78 78 78 78 78 78 78 20 20    C = xxxxxxxx  
8000: 20 20 38 20 62 69 74 73 20 6f 66 20 64 61 74 61    8 bits of data
8010: 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69 74 73 20 2d  .**.**  7 bits -
8020: 20 41 0a 2a 2a 20 31 34 20 62 69 74 73 20 2d 20   A.** 14 bits - 
8030: 42 41 0a 2a 2a 20 32 31 20 62 69 74 73 20 2d 20  BA.** 21 bits - 
8040: 42 42 41 0a 2a 2a 20 32 38 20 62 69 74 73 20 2d  BBA.** 28 bits -
8050: 20 42 42 42 41 0a 2a 2a 20 33 35 20 62 69 74 73   BBBA.** 35 bits
8060: 20 2d 20 42 42 42 42 41 0a 2a 2a 20 34 32 20 62   - BBBBA.** 42 b
8070: 69 74 73 20 2d 20 42 42 42 42 42 41 0a 2a 2a 20  its - BBBBBA.** 
8080: 34 39 20 62 69 74 73 20 2d 20 42 42 42 42 42 42  49 bits - BBBBBB
8090: 41 0a 2a 2a 20 35 36 20 62 69 74 73 20 2d 20 42  A.** 56 bits - B
80a0: 42 42 42 42 42 42 41 0a 2a 2a 20 36 34 20 62 69  BBBBBBA.** 64 bi
80b0: 74 73 20 2d 20 42 42 42 42 42 42 42 42 43 0a 2a  ts - BBBBBBBBC.*
80c0: 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61  /../*.** Write a
80d0: 20 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65   64-bit variable
80e0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20  -length integer 
80f0: 74 6f 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69  to memory starti
8100: 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54  ng at p[0]..** T
8110: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 64 61 74  he length of dat
8120: 61 20 77 72 69 74 65 20 77 69 6c 6c 20 62 65 20  a write will be 
8130: 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
8140: 62 79 74 65 73 2e 20 20 54 68 65 20 6e 75 6d 62  bytes.  The numb
8150: 65 72 0a 2a 2a 20 6f 66 20 62 79 74 65 73 20 77  er.** of bytes w
8160: 72 69 74 74 65 6e 20 69 73 20 72 65 74 75 72 6e  ritten is return
8170: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72 69  ed..**.** A vari
8180: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
8190: 67 65 72 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ger consists of 
81a0: 74 68 65 20 6c 6f 77 65 72 20 37 20 62 69 74 73  the lower 7 bits
81b0: 20 6f 66 20 65 61 63 68 20 62 79 74 65 0a 2a 2a   of each byte.**
81c0: 20 66 6f 72 20 61 6c 6c 20 62 79 74 65 73 20 74   for all bytes t
81d0: 68 61 74 20 68 61 76 65 20 74 68 65 20 38 74 68  hat have the 8th
81e0: 20 62 69 74 20 73 65 74 20 61 6e 64 20 6f 6e 65   bit set and one
81f0: 20 62 79 74 65 20 77 69 74 68 20 74 68 65 20 38   byte with the 8
8200: 74 68 0a 2a 2a 20 62 69 74 20 63 6c 65 61 72 2e  th.** bit clear.
8210: 20 20 45 78 63 65 70 74 2c 20 69 66 20 77 65 20    Except, if we 
8220: 67 65 74 20 74 6f 20 74 68 65 20 39 74 68 20 62  get to the 9th b
8230: 79 74 65 2c 20 69 74 20 73 74 6f 72 65 73 20 74  yte, it stores t
8240: 68 65 20 66 75 6c 6c 0a 2a 2a 20 38 20 62 69 74  he full.** 8 bit
8250: 73 20 61 6e 64 20 69 73 20 74 68 65 20 6c 61 73  s and is the las
8260: 74 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73  t byte..*/.int s
8270: 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
8280: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70  unsigned char *p
8290: 2c 20 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20  , u64 v){.  int 
82a0: 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20 62 75  i, j, n;.  u8 bu
82b0: 66 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76 20 26  f[10];.  if( v &
82c0: 20 30 78 66 66 30 30 30 30 30 30 30 30 30 30 30   0xff00000000000
82d0: 30 30 30 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20  000 ){.    p[8] 
82e0: 3d 20 76 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38  = v;.    v >>= 8
82f0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b 20 69  ;.    for(i=7; i
8300: 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20  >=0; i--){.     
8310: 20 70 5b 69 5d 20 3d 20 28 76 20 26 20 30 78 37   p[i] = (v & 0x7
8320: 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 20  f) | 0x80;.     
8330: 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a   v >>= 7;.    }.
8340: 20 20 20 20 72 65 74 75 72 6e 20 39 3b 0a 20 20      return 9;.  
8350: 7d 20 20 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20  }    .  n = 0;. 
8360: 20 64 6f 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b   do{.    buf[n++
8370: 5d 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c  ] = (v & 0x7f) |
8380: 20 30 78 38 30 3b 0a 20 20 20 20 76 20 3e 3e 3d   0x80;.    v >>=
8390: 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21   7;.  }while( v!
83a0: 3d 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26  =0 );.  buf[0] &
83b0: 3d 20 30 78 37 66 3b 0a 20 20 61 73 73 65 72 74  = 0x7f;.  assert
83c0: 28 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28  ( n<=9 );.  for(
83d0: 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30  i=0, j=n-1; j>=0
83e0: 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20  ; j--, i++){.   
83f0: 20 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a   p[i] = buf[j];.
8400: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a    }.  return n;.
8410: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20  }../*.** Read a 
8420: 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d  64-bit variable-
8430: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66  length integer f
8440: 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74  rom memory start
8450: 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20  ing at p[0]..** 
8460: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
8470: 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e  r of bytes read.
8480: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73    The value is s
8490: 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a  tored in *v..*/.
84a0: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
84b0: 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
84c0: 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34  ned char *p, u64
84d0: 20 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20   *v){.  u32 x;. 
84e0: 20 75 36 34 20 78 36 34 3b 0a 20 20 69 6e 74 20   u64 x64;.  int 
84f0: 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68  n;.  unsigned ch
8500: 61 72 20 63 3b 0a 20 20 69 66 28 20 28 28 63 20  ar c;.  if( ((c 
8510: 3d 20 70 5b 30 5d 29 20 26 20 30 78 38 30 29 3d  = p[0]) & 0x80)=
8520: 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63  =0 ){.    *v = c
8530: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
8540: 20 20 7d 0a 20 20 78 20 3d 20 63 20 26 20 30 78    }.  x = c & 0x
8550: 37 66 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20  7f;.  if( ((c = 
8560: 70 5b 31 5d 29 20 26 20 30 78 38 30 29 3d 3d 30  p[1]) & 0x80)==0
8570: 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c   ){.    *v = (x<
8580: 3c 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74  <7) | c;.    ret
8590: 75 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d  urn 2;.  }.  x =
85a0: 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37   (x<<7) | (c&0x7
85b0: 66 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20  f);.  if( ((c = 
85c0: 70 5b 32 5d 29 20 26 20 30 78 38 30 29 3d 3d 30  p[2]) & 0x80)==0
85d0: 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c   ){.    *v = (x<
85e0: 3c 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74  <7) | c;.    ret
85f0: 75 72 6e 20 33 3b 0a 20 20 7d 0a 20 20 78 20 3d  urn 3;.  }.  x =
8600: 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37   (x<<7) | (c&0x7
8610: 66 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20  f);.  if( ((c = 
8620: 70 5b 33 5d 29 20 26 20 30 78 38 30 29 3d 3d 30  p[3]) & 0x80)==0
8630: 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c   ){.    *v = (x<
8640: 3c 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74  <7) | c;.    ret
8650: 75 72 6e 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34  urn 4;.  }.  x64
8660: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30   = (x<<7) | (c&0
8670: 78 37 66 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20  x7f);.  n = 4;. 
8680: 20 64 6f 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e   do{.    c = p[n
8690: 2b 2b 5d 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d  ++];.    if( n==
86a0: 39 20 29 7b 0a 20 20 20 20 20 20 78 36 34 20 3d  9 ){.      x64 =
86b0: 20 28 78 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20   (x64<<8) | c;. 
86c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
86d0: 7d 0a 20 20 20 20 78 36 34 20 3d 20 28 78 36 34  }.    x64 = (x64
86e0: 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b  <<7) | (c&0x7f);
86f0: 0a 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20  .  }while( (c & 
8700: 30 78 38 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76  0x80)!=0 );.  *v
8710: 20 3d 20 78 36 34 3b 0a 20 20 72 65 74 75 72 6e   = x64;.  return
8720: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61   n;.}../*.** Rea
8730: 64 20 61 20 33 32 2d 62 69 74 20 76 61 72 69 61  d a 32-bit varia
8740: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
8750: 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73  er from memory s
8760: 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e  tarting at p[0].
8770: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
8780: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
8790: 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ead.  The value 
87a0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e  is stored in *v.
87b0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
87c0: 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
87d0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
87e0: 70 2c 20 75 33 32 20 2a 76 29 7b 0a 20 20 75 33  p, u32 *v){.  u3
87f0: 32 20 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  2 x;.  int n;.  
8800: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 3b  unsigned char c;
8810: 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 30  .  if( ((c = p[0
8820: 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b  ]) & 0x80)==0 ){
8830: 0a 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20  .    *v = c;.   
8840: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
8850: 20 78 20 3d 20 63 20 26 20 30 78 37 66 3b 0a 20   x = c & 0x7f;. 
8860: 20 69 66 28 20 28 28 63 20 3d 20 70 5b 31 5d 29   if( ((c = p[1])
8870: 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20   & 0x80)==0 ){. 
8880: 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c     *v = (x<<7) |
8890: 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32   c;.    return 2
88a0: 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c  ;.  }.  x = (x<<
88b0: 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20  7) | (c&0x7f);. 
88c0: 20 69 66 28 20 28 28 63 20 3d 20 70 5b 32 5d 29   if( ((c = p[2])
88d0: 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20   & 0x80)==0 ){. 
88e0: 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c     *v = (x<<7) |
88f0: 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 33   c;.    return 3
8900: 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c  ;.  }.  x = (x<<
8910: 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20  7) | (c&0x7f);. 
8920: 20 69 66 28 20 28 28 63 20 3d 20 70 5b 33 5d 29   if( ((c = p[3])
8930: 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20   & 0x80)==0 ){. 
8940: 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c     *v = (x<<7) |
8950: 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 34   c;.    return 4
8960: 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 34 3b 0a 20  ;.  }.  n = 4;. 
8970: 20 64 6f 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c   do{.    x = (x<
8980: 3c 37 29 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b  <7) | ((c = p[n+
8990: 2b 5d 29 26 30 78 37 66 29 3b 0a 20 20 7d 77 68  +])&0x7f);.  }wh
89a0: 69 6c 65 28 20 28 63 20 26 20 30 78 38 30 29 21  ile( (c & 0x80)!
89b0: 3d 30 20 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a  =0 && n<9 );.  *
89c0: 76 20 3d 20 78 3b 0a 20 20 72 65 74 75 72 6e 20  v = x;.  return 
89d0: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  n;.}../*.** Retu
89e0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
89f0: 20 62 79 74 65 73 20 74 68 61 74 20 77 69 6c 6c   bytes that will
8a00: 20 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73 74   be needed to st
8a10: 6f 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a  ore the given.**
8a20: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e   64-bit integer.
8a30: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
8a40: 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b  arintLen(u64 v){
8a50: 0a 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20  .  int i = 0;.  
8a60: 64 6f 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20  do{.    i++;.   
8a70: 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69   v >>= 7;.  }whi
8a80: 6c 65 28 20 76 21 3d 30 20 26 26 20 69 3c 39 20  le( v!=0 && i<9 
8a90: 29 3b 0a 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d  );.  return i;.}
8aa0: 0a 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ..void *sqlite3H
8ab0: 65 78 54 6f 42 6c 6f 62 28 63 6f 6e 73 74 20 63  exToBlob(const c
8ac0: 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20  har *z){.  char 
8ad0: 2a 7a 42 6c 6f 62 3b 0a 20 20 69 6e 74 20 69 3b  *zBlob;.  int i;
8ae0: 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65  .  int n = strle
8af0: 6e 28 7a 29 3b 0a 20 20 69 66 28 20 6e 25 32 20  n(z);.  if( n%2 
8b00: 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 7a  ) return 0;..  z
8b10: 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29 73  Blob = (char *)s
8b20: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 2f 32 29  qliteMalloc(n/2)
8b30: 3b 0a 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ;..  for(i=0; i<
8b40: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 75 38 20  n; i++){.    u8 
8b50: 63 3b 0a 0a 20 20 20 20 69 66 20 20 20 20 20 28  c;..    if     (
8b60: 20 7a 5b 69 5d 3e 34 37 20 26 26 20 7a 5b 69 5d   z[i]>47 && z[i]
8b70: 3c 35 38 20 29 20 63 20 3d 20 28 7a 5b 69 5d 2d  <58 ) c = (z[i]-
8b80: 34 38 29 3c 3c 34 3b 0a 20 20 20 20 65 6c 73 65  48)<<4;.    else
8b90: 20 69 66 28 20 7a 5b 69 5d 3e 36 34 20 26 26 20   if( z[i]>64 && 
8ba0: 7a 5b 69 5d 3c 37 31 20 29 20 63 20 3d 20 28 7a  z[i]<71 ) c = (z
8bb0: 5b 69 5d 2d 35 35 29 3c 3c 34 3b 0a 20 20 20 20  [i]-55)<<4;.    
8bc0: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3e 39 36  else if( z[i]>96
8bd0: 20 26 26 20 7a 5b 69 5d 3c 31 30 33 20 29 20 63   && z[i]<103 ) c
8be0: 20 3d 20 28 7a 5b 69 5d 2d 38 37 29 3c 3c 34 3b   = (z[i]-87)<<4;
8bf0: 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20  .    else {.    
8c00: 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 42 6c    sqliteFree(zBl
8c10: 6f 62 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ob);.      retur
8c20: 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 0;.    }.    i
8c30: 2b 2b 3b 0a 20 20 20 20 69 66 20 20 20 20 20 28  ++;.    if     (
8c40: 20 7a 5b 69 5d 3e 34 37 20 26 26 20 7a 5b 69 5d   z[i]>47 && z[i]
8c50: 3c 35 38 20 29 20 63 20 2b 3d 20 28 7a 5b 69 5d  <58 ) c += (z[i]
8c60: 2d 34 38 29 3b 0a 20 20 20 20 65 6c 73 65 20 69  -48);.    else i
8c70: 66 28 20 7a 5b 69 5d 3e 36 34 20 26 26 20 7a 5b  f( z[i]>64 && z[
8c80: 69 5d 3c 37 31 20 29 20 63 20 2b 3d 20 28 7a 5b  i]<71 ) c += (z[
8c90: 69 5d 2d 35 35 29 3b 0a 20 20 20 20 65 6c 73 65  i]-55);.    else
8ca0: 20 69 66 28 20 7a 5b 69 5d 3e 39 36 20 26 26 20   if( z[i]>96 && 
8cb0: 7a 5b 69 5d 3c 31 30 33 20 29 20 63 20 2b 3d 20  z[i]<103 ) c += 
8cc0: 28 7a 5b 69 5d 2d 38 37 29 3b 0a 20 20 20 20 65  (z[i]-87);.    e
8cd0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  lse {.      sqli
8ce0: 74 65 46 72 65 65 28 7a 42 6c 6f 62 29 3b 0a 20  teFree(zBlob);. 
8cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
8d00: 20 20 20 7d 0a 0a 20 20 20 20 7a 42 6c 6f 62 5b     }..    zBlob[
8d10: 69 2f 32 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20  i/2] = c;.  }.  
8d20: 72 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a  return zBlob;.}.