/ Hex Artifact Content
Login

Artifact d3d2f62ec94160db3cb2b092267405ba99122152:


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 39  Id: util.c,v 1.9
0220: 36 20 32 30 30 34 2f 30 36 2f 30 32 20 30 30 3a  6 2004/06/02 00:
0230: 34 31 3a 31 30 20 64 72 68 20 45 78 70 20 24 0a  41:10 drh Exp $.
0240: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0250: 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75  iteInt.h".#inclu
0260: 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23 69  de <stdarg.h>.#i
0270: 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
0280: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6d 61 6c 6c 6f  ../*.** If mallo
0290: 63 28 29 20 65 76 65 72 20 66 61 69 6c 73 2c 20  c() ever fails, 
02a0: 74 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69  this global vari
02b0: 61 62 6c 65 20 67 65 74 73 20 73 65 74 20 74 6f  able gets set to
02c0: 20 31 2e 0a 2a 2a 20 54 68 69 73 20 63 61 75 73   1..** This caus
02d0: 65 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 74  es the library t
02e0: 6f 20 61 62 6f 72 74 20 61 6e 64 20 6e 65 76 65  o abort and neve
02f0: 72 20 61 67 61 69 6e 20 66 75 6e 63 74 69 6f 6e  r again function
0300: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
0310: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 3d  _malloc_failed =
0320: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 4d 45   0;../*.** If ME
0330: 4d 4f 52 59 5f 44 45 42 55 47 20 69 73 20 64 65  MORY_DEBUG is de
0340: 66 69 6e 65 64 2c 20 74 68 65 6e 20 75 73 65 20  fined, then use 
0350: 76 65 72 73 69 6f 6e 73 20 6f 66 20 6d 61 6c 6c  versions of mall
0360: 6f 63 28 29 20 61 6e 64 0a 2a 2a 20 66 72 65 65  oc() and.** free
0370: 28 29 20 74 68 61 74 20 74 72 61 63 6b 20 6d 65  () that track me
0380: 6d 6f 72 79 20 75 73 61 67 65 20 61 6e 64 20 63  mory usage and c
0390: 68 65 63 6b 20 66 6f 72 20 62 75 66 66 65 72 20  heck for buffer 
03a0: 6f 76 65 72 72 75 6e 73 2e 0a 2a 2f 0a 23 69 66  overruns..*/.#if
03b0: 64 65 66 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47  def MEMORY_DEBUG
03c0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 6b 65 65 70  ../*.** For keep
03d0: 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 74 68 65  ing track of the
03e0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
03f0: 63 73 20 61 6e 64 20 66 72 65 65 73 2e 20 20 20  cs and frees.   
0400: 54 68 69 73 0a 2a 2a 20 69 73 20 75 73 65 64 20  This.** is used 
0410: 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 6d 65 6d  to check for mem
0420: 6f 72 79 20 6c 65 61 6b 73 2e 0a 2a 2f 0a 69 6e  ory leaks..*/.in
0430: 74 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f  t sqlite3_nMallo
0440: 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  c;         /* Nu
0450: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 4d 61  mber of sqliteMa
0460: 6c 6c 6f 63 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  lloc() calls */.
0470: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e 46 72 65  int sqlite3_nFre
0480: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
0490: 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65  Number of sqlite
04a0: 46 72 65 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  Free() calls */.
04b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  int sqlite3_iMal
04c0: 6c 6f 63 46 61 69 6c 3b 20 20 20 20 20 2f 2a 20  locFail;     /* 
04d0: 46 61 69 6c 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  Fail sqliteMallo
04e0: 63 28 29 20 61 66 74 65 72 20 74 68 69 73 20 6d  c() after this m
04f0: 61 6e 79 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66  any calls */.#if
0500: 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47 3e 31 0a   MEMORY_DEBUG>1.
0510: 73 74 61 74 69 63 20 69 6e 74 20 6d 65 6d 63 6e  static int memcn
0520: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0530: 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20 33  *.** Number of 3
0540: 32 2d 62 69 74 20 67 75 61 72 64 20 77 6f 72 64  2-bit guard word
0550: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 5f 47  s.*/.#define N_G
0560: 55 41 52 44 20 31 0a 0a 2f 2a 0a 2a 2a 20 41 6c  UARD 1../*.** Al
0570: 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f 72  locate new memor
0580: 79 20 61 6e 64 20 73 65 74 20 69 74 20 74 6f 20  y and set it to 
0590: 7a 65 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55  zero.  Return NU
05a0: 4c 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f  LL if.** no memo
05b0: 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ry is available.
05c0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
05d0: 33 4d 61 6c 6c 6f 63 5f 28 69 6e 74 20 6e 2c 20  3Malloc_(int n, 
05e0: 69 6e 74 20 62 5a 65 72 6f 2c 20 63 68 61 72 20  int bZero, char 
05f0: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
0600: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
0610: 69 6e 74 20 2a 70 69 3b 0a 20 20 69 6e 74 20 69  int *pi;.  int i
0620: 2c 20 6b 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  , k;.  if( sqlit
0630: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3e 3d  e3_iMallocFail>=
0640: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
0650: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 2d 2d 3b 0a  _iMallocFail--;.
0660: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
0670: 69 4d 61 6c 6c 6f 63 46 61 69 6c 3d 3d 30 20 29  iMallocFail==0 )
0680: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
0690: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b  malloc_failed++;
06a0: 0a 23 69 66 20 4d 45 4d 4f 52 59 5f 44 45 42 55  .#if MEMORY_DEBU
06b0: 47 3e 31 0a 20 20 20 20 20 20 66 70 72 69 6e 74  G>1.      fprint
06c0: 66 28 73 74 64 65 72 72 2c 22 2a 2a 2a 2a 20 66  f(stderr,"**** f
06d0: 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74  ailed to allocat
06e0: 65 20 25 64 20 62 79 74 65 73 20 61 74 20 25 73  e %d bytes at %s
06f0: 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  :%d\n",.        
0700: 20 20 20 20 20 20 6e 2c 20 7a 46 69 6c 65 2c 6c        n, zFile,l
0710: 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  ine);.#endif.   
0720: 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c     sqlite3_iMall
0730: 6f 63 46 61 69 6c 2d 2d 3b 0a 20 20 20 20 20 20  ocFail--;.      
0740: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a  return 0;.    }.
0750: 20 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29    }.  if( n==0 )
0760: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6b 20 3d   return 0;.  k =
0770: 20 28 6e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d   (n+sizeof(int)-
0780: 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a  1)/sizeof(int);.
0790: 20 20 70 69 20 3d 20 6d 61 6c 6c 6f 63 28 20 28    pi = malloc( (
07a0: 4e 5f 47 55 41 52 44 2a 32 2b 31 2b 6b 29 2a 73  N_GUARD*2+1+k)*s
07b0: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 69  izeof(int));.  i
07c0: 66 28 20 70 69 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pi==0 ){.    
07d0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
07e0: 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 72 65 74  ailed++;.    ret
07f0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
0800: 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b 3b 0a  ite3_nMalloc++;.
0810: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47    for(i=0; i<N_G
0820: 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b 69 5d  UARD; i++) pi[i]
0830: 20 3d 20 30 78 64 65 61 64 31 31 32 32 3b 0a 20   = 0xdead1122;. 
0840: 20 70 69 5b 4e 5f 47 55 41 52 44 5d 20 3d 20 6e   pi[N_GUARD] = n
0850: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
0860: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b  _GUARD; i++) pi[
0870: 6b 2b 31 2b 4e 5f 47 55 41 52 44 2b 69 5d 20 3d  k+1+N_GUARD+i] =
0880: 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20 20 70   0xdead3344;.  p
0890: 20 3d 20 26 70 69 5b 4e 5f 47 55 41 52 44 2b 31   = &pi[N_GUARD+1
08a0: 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2c 20 62  ];.  memset(p, b
08b0: 5a 65 72 6f 3d 3d 30 2c 20 6e 29 3b 0a 23 69 66  Zero==0, n);.#if
08c0: 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47 3e 31 0a   MEMORY_DEBUG>1.
08d0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
08e0: 2c 22 25 30 36 64 20 6d 61 6c 6c 6f 63 20 25 64  ,"%06d malloc %d
08f0: 20 62 79 74 65 73 20 61 74 20 30 78 25 78 20 66   bytes at 0x%x f
0900: 72 6f 6d 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20  rom %s:%d\n",.  
0910: 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c      ++memcnt, n,
0920: 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 6c   (int)p, zFile,l
0930: 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72  ine);.#endif.  r
0940: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
0950: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
0960: 66 20 74 68 65 20 67 69 76 65 6e 20 70 6f 69 6e  f the given poin
0970: 74 65 72 20 77 61 73 20 6f 62 74 61 69 6e 65 64  ter was obtained
0980: 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c   from sqliteMall
0990: 6f 63 28 29 0a 2a 2a 20 61 6e 64 20 69 73 20 61  oc().** and is a
09a0: 62 6c 65 20 74 6f 20 68 6f 6c 64 20 61 74 20 6c  ble to hold at l
09b0: 65 61 73 74 20 4e 20 62 79 74 65 73 2e 20 20 52  east N bytes.  R
09c0: 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
09d0: 6e 20 69 66 20 74 68 69 73 0a 2a 2a 20 69 73 20  n if this.** is 
09e0: 6e 6f 74 20 74 68 65 20 63 61 73 65 2e 0a 2a 2a  not the case..**
09f0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
0a00: 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73   is used for tes
0a10: 74 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e  ting purposes on
0a20: 6c 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ly..*/.void sqli
0a30: 74 65 33 43 68 65 63 6b 4d 65 6d 6f 72 79 28 76  te3CheckMemory(v
0a40: 6f 69 64 20 2a 70 2c 20 69 6e 74 20 4e 29 7b 0a  oid *p, int N){.
0a50: 20 20 69 6e 74 20 2a 70 69 20 3d 20 70 3b 0a 20    int *pi = p;. 
0a60: 20 69 6e 74 20 6e 2c 20 69 2c 20 6b 3b 0a 20 20   int n, i, k;.  
0a70: 70 69 20 2d 3d 20 4e 5f 47 55 41 52 44 2b 31 3b  pi -= N_GUARD+1;
0a80: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f  .  for(i=0; i<N_
0a90: 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20  GUARD; i++){.   
0aa0: 20 61 73 73 65 72 74 28 20 70 69 5b 69 5d 3d 3d   assert( pi[i]==
0ab0: 30 78 64 65 61 64 31 31 32 32 20 29 3b 0a 20 20  0xdead1122 );.  
0ac0: 7d 0a 20 20 6e 20 3d 20 70 69 5b 4e 5f 47 55 41  }.  n = pi[N_GUA
0ad0: 52 44 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 4e  RD];.  assert( N
0ae0: 3e 3d 30 20 26 26 20 4e 3c 6e 20 29 3b 0a 20 20  >=0 && N<n );.  
0af0: 6b 20 3d 20 28 6e 2b 73 69 7a 65 6f 66 28 69 6e  k = (n+sizeof(in
0b00: 74 29 2d 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74  t)-1)/sizeof(int
0b10: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
0b20: 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20  N_GUARD; i++){. 
0b30: 20 20 20 61 73 73 65 72 74 28 20 70 69 5b 6b 2b     assert( pi[k+
0b40: 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 3d 3d 30 78  N_GUARD+1+i]==0x
0b50: 64 65 61 64 33 33 34 34 20 29 3b 0a 20 20 7d 0a  dead3344 );.  }.
0b60: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 6d 65  }../*.** Free me
0b70: 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79 20  mory previously 
0b80: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
0b90: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a  liteMalloc().*/.
0ba0: 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
0bb0: 5f 28 76 6f 69 64 20 2a 70 2c 20 63 68 61 72 20  _(void *p, char 
0bc0: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
0bd0: 29 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  ){.  if( p ){.  
0be0: 20 20 69 6e 74 20 2a 70 69 2c 20 69 2c 20 6b 2c    int *pi, i, k,
0bf0: 20 6e 3b 0a 20 20 20 20 70 69 20 3d 20 70 3b 0a   n;.    pi = p;.
0c00: 20 20 20 20 70 69 20 2d 3d 20 4e 5f 47 55 41 52      pi -= N_GUAR
0c10: 44 2b 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  D+1;.    sqlite3
0c20: 5f 6e 46 72 65 65 2b 2b 3b 0a 20 20 20 20 66 6f  _nFree++;.    fo
0c30: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
0c40: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
0c50: 28 20 70 69 5b 69 5d 21 3d 30 78 64 65 61 64 31  ( pi[i]!=0xdead1
0c60: 31 32 32 20 29 7b 0a 20 20 20 20 20 20 20 20 66  122 ){.        f
0c70: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 4c  printf(stderr,"L
0c80: 6f 77 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f  ow-end memory co
0c90: 72 72 75 70 74 69 6f 6e 20 61 74 20 30 78 25 78  rruption at 0x%x
0ca0: 5c 6e 22 2c 20 28 69 6e 74 29 70 29 3b 0a 20 20  \n", (int)p);.  
0cb0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
0cc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
0cd0: 6e 20 3d 20 70 69 5b 4e 5f 47 55 41 52 44 5d 3b  n = pi[N_GUARD];
0ce0: 0a 20 20 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65  .    k = (n+size
0cf0: 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f  of(int)-1)/sizeo
0d00: 66 28 69 6e 74 29 3b 0a 20 20 20 20 66 6f 72 28  f(int);.    for(
0d10: 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20  i=0; i<N_GUARD; 
0d20: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
0d30: 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69  pi[k+N_GUARD+1+i
0d40: 5d 21 3d 30 78 64 65 61 64 33 33 34 34 20 29 7b  ]!=0xdead3344 ){
0d50: 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
0d60: 28 73 74 64 65 72 72 2c 22 48 69 67 68 2d 65 6e  (stderr,"High-en
0d70: 64 20 6d 65 6d 6f 72 79 20 63 6f 72 72 75 70 74  d memory corrupt
0d80: 69 6f 6e 20 61 74 20 30 78 25 78 5c 6e 22 2c 20  ion at 0x%x\n", 
0d90: 28 69 6e 74 29 70 29 3b 0a 20 20 20 20 20 20 20  (int)p);.       
0da0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d   return;.      }
0db0: 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 73 65  .    }.    memse
0dc0: 74 28 70 69 2c 20 30 78 66 66 2c 20 28 6b 2b 4e  t(pi, 0xff, (k+N
0dd0: 5f 47 55 41 52 44 2a 32 2b 31 29 2a 73 69 7a 65  _GUARD*2+1)*size
0de0: 6f 66 28 69 6e 74 29 29 3b 0a 23 69 66 20 4d 45  of(int));.#if ME
0df0: 4d 4f 52 59 5f 44 45 42 55 47 3e 31 0a 20 20 20  MORY_DEBUG>1.   
0e00: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
0e10: 22 25 30 36 64 20 66 72 65 65 20 25 64 20 62 79  "%06d free %d by
0e20: 74 65 73 20 61 74 20 30 78 25 78 20 66 72 6f 6d  tes at 0x%x from
0e30: 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20   %s:%d\n",.     
0e40: 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c      ++memcnt, n,
0e50: 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 6c   (int)p, zFile,l
0e60: 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  ine);.#endif.   
0e70: 20 66 72 65 65 28 70 69 29 3b 0a 20 20 7d 0a 7d   free(pi);.  }.}
0e80: 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61  ../*.** Resize a
0e90: 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f   prior allocatio
0ea0: 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20 74 68 65  n.  If p==0, the
0eb0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
0ec0: 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  * works just lik
0ed0: 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  e sqliteMalloc()
0ee0: 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e  .  If n==0, then
0ef0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
0f00: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
0f10: 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a   sqliteFree()..*
0f20: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  /.void *sqlite3R
0f30: 65 61 6c 6c 6f 63 5f 28 76 6f 69 64 20 2a 6f 6c  ealloc_(void *ol
0f40: 64 50 2c 20 69 6e 74 20 6e 2c 20 63 68 61 72 20  dP, int n, char 
0f50: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
0f60: 29 7b 0a 20 20 69 6e 74 20 2a 6f 6c 64 50 69 2c  ){.  int *oldPi,
0f70: 20 2a 70 69 2c 20 69 2c 20 6b 2c 20 6f 6c 64 4e   *pi, i, k, oldN
0f80: 2c 20 6f 6c 64 4b 3b 0a 20 20 76 6f 69 64 20 2a  , oldK;.  void *
0f90: 70 3b 0a 20 20 69 66 28 20 6f 6c 64 50 3d 3d 30  p;.  if( oldP==0
0fa0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73   ){.    return s
0fb0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2c  qlite3Malloc_(n,
0fc0: 31 2c 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 20  1,zFile,line);. 
0fd0: 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b   }.  if( n==0 ){
0fe0: 0a 20 20 20 20 73 71 6c 69 74 65 33 46 72 65 65  .    sqlite3Free
0ff0: 5f 28 6f 6c 64 50 2c 7a 46 69 6c 65 2c 6c 69 6e  _(oldP,zFile,lin
1000: 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  e);.    return 0
1010: 3b 0a 20 20 7d 0a 20 20 6f 6c 64 50 69 20 3d 20  ;.  }.  oldPi = 
1020: 6f 6c 64 50 3b 0a 20 20 6f 6c 64 50 69 20 2d 3d  oldP;.  oldPi -=
1030: 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20 69 66   N_GUARD+1;.  if
1040: 28 20 6f 6c 64 50 69 5b 30 5d 21 3d 30 78 64 65  ( oldPi[0]!=0xde
1050: 61 64 31 31 32 32 20 29 7b 0a 20 20 20 20 66 70  ad1122 ){.    fp
1060: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 4c 6f  rintf(stderr,"Lo
1070: 77 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72  w-end memory cor
1080: 72 75 70 74 69 6f 6e 20 69 6e 20 72 65 61 6c 6c  ruption in reall
1090: 6f 63 20 61 74 20 30 78 25 78 5c 6e 22 2c 20 28  oc at 0x%x\n", (
10a0: 69 6e 74 29 6f 6c 64 50 29 3b 0a 20 20 20 20 72  int)oldP);.    r
10b0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 6f  eturn 0;.  }.  o
10c0: 6c 64 4e 20 3d 20 6f 6c 64 50 69 5b 4e 5f 47 55  ldN = oldPi[N_GU
10d0: 41 52 44 5d 3b 0a 20 20 6f 6c 64 4b 20 3d 20 28  ARD];.  oldK = (
10e0: 6f 6c 64 4e 2b 73 69 7a 65 6f 66 28 69 6e 74 29  oldN+sizeof(int)
10f0: 2d 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b  -1)/sizeof(int);
1100: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f  .  for(i=0; i<N_
1110: 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20  GUARD; i++){.   
1120: 20 69 66 28 20 6f 6c 64 50 69 5b 6f 6c 64 4b 2b   if( oldPi[oldK+
1130: 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 21 3d 30 78  N_GUARD+1+i]!=0x
1140: 64 65 61 64 33 33 34 34 20 29 7b 0a 20 20 20 20  dead3344 ){.    
1150: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
1160: 2c 22 48 69 67 68 2d 65 6e 64 20 6d 65 6d 6f 72  ,"High-end memor
1170: 79 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20  y corruption in 
1180: 72 65 61 6c 6c 6f 63 20 61 74 20 30 78 25 78 5c  realloc at 0x%x\
1190: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
11a0: 20 20 28 69 6e 74 29 6f 6c 64 50 29 3b 0a 20 20    (int)oldP);.  
11b0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
11c0: 20 20 7d 0a 20 20 7d 0a 20 20 6b 20 3d 20 28 6e    }.  }.  k = (n
11d0: 20 2b 20 73 69 7a 65 6f 66 28 69 6e 74 29 20 2d   + sizeof(int) -
11e0: 20 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b   1)/sizeof(int);
11f0: 0a 20 20 70 69 20 3d 20 6d 61 6c 6c 6f 63 28 20  .  pi = malloc( 
1200: 28 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b 31 29 2a  (k+N_GUARD*2+1)*
1210: 73 69 7a 65 6f 66 28 69 6e 74 29 20 29 3b 0a 20  sizeof(int) );. 
1220: 20 69 66 28 20 70 69 3d 3d 30 20 29 7b 0a 20 20   if( pi==0 ){.  
1230: 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63    sqlite3_malloc
1240: 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 72  _failed++;.    r
1250: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 66  eturn 0;.  }.  f
1260: 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52  or(i=0; i<N_GUAR
1270: 44 3b 20 69 2b 2b 29 20 70 69 5b 69 5d 20 3d 20  D; i++) pi[i] = 
1280: 30 78 64 65 61 64 31 31 32 32 3b 0a 20 20 70 69  0xdead1122;.  pi
1290: 5b 4e 5f 47 55 41 52 44 5d 20 3d 20 6e 3b 0a 20  [N_GUARD] = n;. 
12a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55   for(i=0; i<N_GU
12b0: 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 4e  ARD; i++) pi[k+N
12c0: 5f 47 55 41 52 44 2b 31 2b 69 5d 20 3d 20 30 78  _GUARD+1+i] = 0x
12d0: 64 65 61 64 33 33 34 34 3b 0a 20 20 70 20 3d 20  dead3344;.  p = 
12e0: 26 70 69 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a  &pi[N_GUARD+1];.
12f0: 20 20 6d 65 6d 63 70 79 28 70 2c 20 6f 6c 64 50    memcpy(p, oldP
1300: 2c 20 6e 3e 6f 6c 64 4e 20 3f 20 6f 6c 64 4e 20  , n>oldN ? oldN 
1310: 3a 20 6e 29 3b 0a 20 20 69 66 28 20 6e 3e 6f 6c  : n);.  if( n>ol
1320: 64 4e 20 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74  dN ){.    memset
1330: 28 26 28 28 63 68 61 72 2a 29 70 29 5b 6f 6c 64  (&((char*)p)[old
1340: 4e 5d 2c 20 30 2c 20 6e 2d 6f 6c 64 4e 29 3b 0a  N], 0, n-oldN);.
1350: 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28 6f 6c 64    }.  memset(old
1360: 50 69 2c 20 30 78 61 62 2c 20 28 6f 6c 64 4b 2b  Pi, 0xab, (oldK+
1370: 4e 5f 47 55 41 52 44 2b 32 29 2a 73 69 7a 65 6f  N_GUARD+2)*sizeo
1380: 66 28 69 6e 74 29 29 3b 0a 20 20 66 72 65 65 28  f(int));.  free(
1390: 6f 6c 64 50 69 29 3b 0a 23 69 66 20 4d 45 4d 4f  oldPi);.#if MEMO
13a0: 52 59 5f 44 45 42 55 47 3e 31 0a 20 20 66 70 72  RY_DEBUG>1.  fpr
13b0: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 30 36  intf(stderr,"%06
13c0: 64 20 72 65 61 6c 6c 6f 63 20 25 64 20 74 6f 20  d realloc %d to 
13d0: 25 64 20 62 79 74 65 73 20 61 74 20 30 78 25 78  %d bytes at 0x%x
13e0: 20 74 6f 20 30 78 25 78 20 61 74 20 25 73 3a 25   to 0x%x at %s:%
13f0: 64 5c 6e 22 2c 0a 20 20 20 20 2b 2b 6d 65 6d 63  d\n",.    ++memc
1400: 6e 74 2c 20 6f 6c 64 4e 2c 20 6e 2c 20 28 69 6e  nt, oldN, n, (in
1410: 74 29 6f 6c 64 50 2c 20 28 69 6e 74 29 70 2c 20  t)oldP, (int)p, 
1420: 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 23 65  zFile, line);.#e
1430: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 70 3b  ndif.  return p;
1440: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61  .}../*.** Make a
1450: 20 64 75 70 6c 69 63 61 74 65 20 6f 66 20 61 20   duplicate of a 
1460: 73 74 72 69 6e 67 20 69 6e 74 6f 20 6d 65 6d 6f  string into memo
1470: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
1480: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 46 72 65   malloc().** Fre
1490: 65 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73  e the original s
14a0: 74 72 69 6e 67 20 75 73 69 6e 67 20 73 71 6c 69  tring using sqli
14b0: 74 65 46 72 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  teFree()..**.** 
14c0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
14d0: 63 61 6c 6c 65 64 20 6f 6e 20 61 6c 6c 20 73 74  called on all st
14e0: 72 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 70  rings that are p
14f0: 61 73 73 65 64 20 6f 75 74 73 69 64 65 20 6f 66  assed outside of
1500: 0a 2a 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c  .** the SQLite l
1510: 69 62 72 61 72 79 2e 20 20 54 68 61 74 20 77 61  ibrary.  That wa
1520: 79 20 63 6c 69 65 6e 74 73 20 63 61 6e 20 66 72  y clients can fr
1530: 65 65 20 74 68 65 20 73 74 72 69 6e 67 20 75 73  ee the string us
1540: 69 6e 67 20 66 72 65 65 28 29 0a 2a 2a 20 72 61  ing free().** ra
1550: 74 68 65 72 20 74 68 61 6e 20 68 61 76 69 6e 67  ther than having
1560: 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 46   to call sqliteF
1570: 72 65 65 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ree()..*/.void s
1580: 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63  qlite3StrRealloc
1590: 28 63 68 61 72 20 2a 2a 70 7a 29 7b 0a 20 20 63  (char **pz){.  c
15a0: 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28  har *zNew;.  if(
15b0: 20 70 7a 3d 3d 30 20 7c 7c 20 2a 70 7a 3d 3d 30   pz==0 || *pz==0
15c0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 7a 4e 65   ) return;.  zNe
15d0: 77 20 3d 20 6d 61 6c 6c 6f 63 28 20 73 74 72 6c  w = malloc( strl
15e0: 65 6e 28 2a 70 7a 29 20 2b 20 31 20 29 3b 0a 20  en(*pz) + 1 );. 
15f0: 20 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a   if( zNew==0 ){.
1600: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c      sqlite3_mall
1610: 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 20  oc_failed++;.   
1620: 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 29   sqliteFree(*pz)
1630: 3b 0a 20 20 20 20 2a 70 7a 20 3d 20 30 3b 0a 20  ;.    *pz = 0;. 
1640: 20 7d 0a 20 20 73 74 72 63 70 79 28 7a 4e 65 77   }.  strcpy(zNew
1650: 2c 20 2a 70 7a 29 3b 0a 20 20 73 71 6c 69 74 65  , *pz);.  sqlite
1660: 46 72 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a  Free(*pz);.  *pz
1670: 20 3d 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a   = zNew;.}../*.*
1680: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
1690: 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d   a string in mem
16a0: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
16b0: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
16c0: 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .*/.char *sqlite
16d0: 33 53 74 72 44 75 70 5f 28 63 6f 6e 73 74 20 63  3StrDup_(const c
16e0: 68 61 72 20 2a 7a 2c 20 63 68 61 72 20 2a 7a 46  har *z, char *zF
16f0: 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a  ile, int line){.
1700: 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20    char *zNew;.  
1710: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
1720: 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71  n 0;.  zNew = sq
1730: 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 73 74 72  lite3Malloc_(str
1740: 6c 65 6e 28 7a 29 2b 31 2c 20 30 2c 20 7a 46 69  len(z)+1, 0, zFi
1750: 6c 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69 66 28  le, line);.  if(
1760: 20 7a 4e 65 77 20 29 20 73 74 72 63 70 79 28 7a   zNew ) strcpy(z
1770: 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75 72  New, z);.  retur
1780: 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a  n zNew;.}.char *
1790: 73 71 6c 69 74 65 33 53 74 72 4e 44 75 70 5f 28  sqlite3StrNDup_(
17a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
17b0: 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69 6c  nt n, char *zFil
17c0: 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20  e, int line){.  
17d0: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66  char *zNew;.  if
17e0: 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( z==0 ) return 
17f0: 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69  0;.  zNew = sqli
1800: 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2b 31 2c 20  te3Malloc_(n+1, 
1810: 30 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 3b  0, zFile, line);
1820: 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20  .  if( zNew ){. 
1830: 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20     memcpy(zNew, 
1840: 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b  z, n);.    zNew[
1850: 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65  n] = 0;.  }.  re
1860: 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 23 65 6e  turn zNew;.}.#en
1870: 64 69 66 20 2f 2a 20 4d 45 4d 4f 52 59 5f 44 45  dif /* MEMORY_DE
1880: 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  BUG */../*.** Th
1890: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 65 72 73  e following vers
18a0: 69 6f 6e 73 20 6f 66 20 6d 61 6c 6c 6f 63 28 29  ions of malloc()
18b0: 20 61 6e 64 20 66 72 65 65 28 29 20 61 72 65 20   and free() are 
18c0: 66 6f 72 20 75 73 65 20 69 6e 20 61 0a 2a 2a 20  for use in a.** 
18d0: 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 0a 2a 2f  normal build..*/
18e0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4d 45  .#if !defined(ME
18f0: 4d 4f 52 59 5f 44 45 42 55 47 29 0a 0a 2f 2a 0a  MORY_DEBUG)../*.
1900: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77 20  ** Allocate new 
1910: 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65 74 20 69  memory and set i
1920: 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65 74 75  t to zero.  Retu
1930: 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e 6f  rn NULL if.** no
1940: 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61 69 6c   memory is avail
1950: 61 62 6c 65 2e 20 20 53 65 65 20 61 6c 73 6f 20  able.  See also 
1960: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28  sqliteMallocRaw(
1970: 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  )..*/.void *sqli
1980: 74 65 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e 29 7b  teMalloc(int n){
1990: 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20 69 66  .  void *p;.  if
19a0: 28 20 28 70 20 3d 20 6d 61 6c 6c 6f 63 28 6e 29  ( (p = malloc(n)
19b0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
19c0: 6e 3e 30 20 29 20 73 71 6c 69 74 65 33 5f 6d 61  n>0 ) sqlite3_ma
19d0: 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20  lloc_failed++;. 
19e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73   }else{.    mems
19f0: 65 74 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d  et(p, 0, n);.  }
1a00: 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a  .  return p;.}..
1a10: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e  /*.** Allocate n
1a20: 65 77 20 6d 65 6d 6f 72 79 20 62 75 74 20 64 6f  ew memory but do
1a30: 20 6e 6f 74 20 73 65 74 20 69 74 20 74 6f 20 7a   not set it to z
1a40: 65 72 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c  ero.  Return NUL
1a50: 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72  L if.** no memor
1a60: 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
1a70: 20 53 65 65 20 61 6c 73 6f 20 73 71 6c 69 74 65   See also sqlite
1a80: 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69  Malloc()..*/.voi
1a90: 64 20 2a 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52  d *sqliteMallocR
1aa0: 61 77 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69  aw(int n){.  voi
1ab0: 64 20 2a 70 3b 0a 20 20 69 66 28 20 28 70 20 3d  d *p;.  if( (p =
1ac0: 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29   malloc(n))==0 )
1ad0: 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20  {.    if( n>0 ) 
1ae0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
1af0: 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72  ailed++;.  }.  r
1b00: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
1b10: 2a 20 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72  * Free memory pr
1b20: 65 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65  eviously obtaine
1b30: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c  d from sqliteMal
1b40: 6c 6f 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71  loc().*/.void sq
1b50: 6c 69 74 65 46 72 65 65 28 76 6f 69 64 20 2a 70  liteFree(void *p
1b60: 29 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  ){.  if( p ){.  
1b70: 20 20 66 72 65 65 28 70 29 3b 0a 20 20 7d 0a 7d    free(p);.  }.}
1b80: 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61  ../*.** Resize a
1b90: 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f   prior allocatio
1ba0: 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20 74 68 65  n.  If p==0, the
1bb0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
1bc0: 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  * works just lik
1bd0: 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  e sqliteMalloc()
1be0: 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e  .  If n==0, then
1bf0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
1c00: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1c10: 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a   sqliteFree()..*
1c20: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 52 65  /.void *sqliteRe
1c30: 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 2c 20 69  alloc(void *p, i
1c40: 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70  nt n){.  void *p
1c50: 32 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b  2;.  if( p==0 ){
1c60: 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .    return sqli
1c70: 74 65 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 7d  teMalloc(n);.  }
1c80: 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20  .  if( n==0 ){. 
1c90: 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 29     sqliteFree(p)
1ca0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
1cb0: 20 20 7d 0a 20 20 70 32 20 3d 20 72 65 61 6c 6c    }.  p2 = reall
1cc0: 6f 63 28 70 2c 20 6e 29 3b 0a 20 20 69 66 28 20  oc(p, n);.  if( 
1cd0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  p2==0 ){.    sql
1ce0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
1cf0: 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  ed++;.  }.  retu
1d00: 72 6e 20 70 32 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn p2;.}../*.** 
1d10: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61  Make a copy of a
1d20: 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72   string in memor
1d30: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
1d40: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a  sqliteMalloc().*
1d50: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 53 74  /.char *sqliteSt
1d60: 72 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20  rDup(const char 
1d70: 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65  *z){.  char *zNe
1d80: 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  w;.  if( z==0 ) 
1d90: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77  return 0;.  zNew
1da0: 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52   = sqliteMallocR
1db0: 61 77 28 73 74 72 6c 65 6e 28 7a 29 2b 31 29 3b  aw(strlen(z)+1);
1dc0: 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 20 73 74  .  if( zNew ) st
1dd0: 72 63 70 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20  rcpy(zNew, z);. 
1de0: 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a   return zNew;.}.
1df0: 63 68 61 72 20 2a 73 71 6c 69 74 65 53 74 72 4e  char *sqliteStrN
1e00: 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Dup(const char *
1e10: 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68 61  z, int n){.  cha
1e20: 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a  r *zNew;.  if( z
1e30: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
1e40: 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 4d    zNew = sqliteM
1e50: 61 6c 6c 6f 63 52 61 77 28 6e 2b 31 29 3b 0a 20  allocRaw(n+1);. 
1e60: 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20   if( zNew ){.   
1e70: 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c   memcpy(zNew, z,
1e80: 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d   n);.    zNew[n]
1e90: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 0;.  }.  retu
1ea0: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 23 65 6e 64 69  rn zNew;.}.#endi
1eb0: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 4d 45  f /* !defined(ME
1ec0: 4d 4f 52 59 5f 44 45 42 55 47 29 20 2a 2f 0a 0a  MORY_DEBUG) */..
1ed0: 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 73  /*.** Create a s
1ee0: 74 72 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 32  tring from the 2
1ef0: 6e 64 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e  nd and subsequen
1f00: 74 20 61 72 67 75 6d 65 6e 74 73 20 28 75 70 20  t arguments (up 
1f10: 74 6f 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  to the.** first 
1f20: 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20  NULL argument), 
1f30: 73 74 6f 72 65 20 74 68 65 20 73 74 72 69 6e 67  store the string
1f40: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
1f50: 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69  ned from.** sqli
1f60: 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d  teMalloc() and m
1f70: 61 6b 65 20 74 68 65 20 70 6f 69 6e 74 65 72 20  ake the pointer 
1f80: 69 6e 64 69 63 61 74 65 64 20 62 79 20 74 68 65  indicated by the
1f90: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a   1st argument.**
1fa0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 73   point to that s
1fb0: 74 72 69 6e 67 2e 20 20 54 68 65 20 31 73 74 20  tring.  The 1st 
1fc0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 65 69  argument must ei
1fd0: 74 68 65 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20  ther be NULL or 
1fe0: 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d  .** point to mem
1ff0: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
2000: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
2010: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2020: 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
2030: 2a 2a 70 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72  **pz, const char
2040: 20 2a 7a 46 69 72 73 74 2c 20 2e 2e 2e 29 7b 0a   *zFirst, ...){.
2050: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
2060: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 63 6f 6e  int nByte;.  con
2070: 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68  st char *z;.  ch
2080: 61 72 20 2a 7a 52 65 73 75 6c 74 3b 0a 0a 20 20  ar *zResult;..  
2090: 69 66 28 20 70 7a 3d 3d 30 20 29 20 72 65 74 75  if( pz==0 ) retu
20a0: 72 6e 3b 0a 20 20 6e 42 79 74 65 20 3d 20 73 74  rn;.  nByte = st
20b0: 72 6c 65 6e 28 7a 46 69 72 73 74 29 20 2b 20 31  rlen(zFirst) + 1
20c0: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
20d0: 20 7a 46 69 72 73 74 29 3b 0a 20 20 77 68 69 6c   zFirst);.  whil
20e0: 65 28 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61  e( (z = va_arg(a
20f0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29  p, const char*))
2100: 21 3d 30 20 29 7b 0a 20 20 20 20 6e 42 79 74 65  !=0 ){.    nByte
2110: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20   += strlen(z);. 
2120: 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b   }.  va_end(ap);
2130: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70  .  sqliteFree(*p
2140: 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a 52 65 73  z);.  *pz = zRes
2150: 75 6c 74 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c  ult = sqliteMall
2160: 6f 63 52 61 77 28 20 6e 42 79 74 65 20 29 3b 0a  ocRaw( nByte );.
2170: 20 20 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30    if( zResult==0
2180: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
2190: 20 20 7d 0a 20 20 73 74 72 63 70 79 28 7a 52 65    }.  strcpy(zRe
21a0: 73 75 6c 74 2c 20 7a 46 69 72 73 74 29 3b 0a 20  sult, zFirst);. 
21b0: 20 7a 52 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c   zResult += strl
21c0: 65 6e 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 76  en(zResult);.  v
21d0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 69 72  a_start(ap, zFir
21e0: 73 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a  st);.  while( (z
21f0: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 63 6f   = va_arg(ap, co
2200: 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30 20 29  nst char*))!=0 )
2210: 7b 0a 20 20 20 20 73 74 72 63 70 79 28 7a 52 65  {.    strcpy(zRe
2220: 73 75 6c 74 2c 20 7a 29 3b 0a 20 20 20 20 7a 52  sult, z);.    zR
2230: 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c 65 6e 28  esult += strlen(
2240: 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20  zResult);.  }.  
2250: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 23 69 66 64  va_end(ap);.#ifd
2260: 65 66 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47 0a  ef MEMORY_DEBUG.
2270: 23 69 66 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47  #if MEMORY_DEBUG
2280: 3e 31 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64  >1.  fprintf(std
2290: 65 72 72 2c 22 73 74 72 69 6e 67 20 61 74 20 30  err,"string at 0
22a0: 78 25 78 20 69 73 20 25 73 5c 6e 22 2c 20 28 69  x%x is %s\n", (i
22b0: 6e 74 29 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23 65  nt)*pz, *pz);.#e
22c0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  ndif.#endif.}../
22d0: 2a 0a 2a 2a 20 57 6f 72 6b 73 20 6c 69 6b 65 20  *.** Works like 
22e0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
22f0: 2c 20 62 75 74 20 65 61 63 68 20 73 74 72 69 6e  , but each strin
2300: 67 20 69 73 20 6e 6f 77 20 66 6f 6c 6c 6f 77 65  g is now followe
2310: 64 20 62 79 0a 2a 2a 20 61 20 6c 65 6e 67 74 68  d by.** a length
2320: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 73   integer which s
2330: 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 75 63  pecifies how muc
2340: 68 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  h of the source 
2350: 73 74 72 69 6e 67 20 0a 2a 2a 20 74 6f 20 63 6f  string .** to co
2360: 70 79 20 28 69 6e 20 62 79 74 65 73 29 2e 20 20  py (in bytes).  
2370: 2d 31 20 6d 65 61 6e 73 20 75 73 65 20 74 68 65  -1 means use the
2380: 20 77 68 6f 6c 65 20 73 74 72 69 6e 67 2e 20 20   whole string.  
2390: 54 68 65 20 31 73 74 20 0a 2a 2a 20 61 72 67 75  The 1st .** argu
23a0: 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68 65 72  ment must either
23b0: 20 62 65 20 4e 55 4c 4c 20 6f 72 20 70 6f 69 6e   be NULL or poin
23c0: 74 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  t to memory obta
23d0: 69 6e 65 64 20 66 72 6f 6d 20 0a 2a 2a 20 73 71  ined from .** sq
23e0: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f  liteMalloc()..*/
23f0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
2400: 4e 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 70  NString(char **p
2410: 7a 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  z, ...){.  va_li
2420: 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79  st ap;.  int nBy
2430: 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  te;.  const char
2440: 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65   *z;.  char *zRe
2450: 73 75 6c 74 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  sult;.  int n;..
2460: 20 20 69 66 28 20 70 7a 3d 3d 30 20 29 20 72 65    if( pz==0 ) re
2470: 74 75 72 6e 3b 0a 20 20 6e 42 79 74 65 20 3d 20  turn;.  nByte = 
2480: 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  0;.  va_start(ap
2490: 2c 20 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20  , pz);.  while( 
24a0: 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  (z = va_arg(ap, 
24b0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30  const char*))!=0
24c0: 20 29 7b 0a 20 20 20 20 6e 20 3d 20 76 61 5f 61   ){.    n = va_a
24d0: 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20  rg(ap, int);.   
24e0: 20 69 66 28 20 6e 3c 3d 30 20 29 20 6e 20 3d 20   if( n<=0 ) n = 
24f0: 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 6e  strlen(z);.    n
2500: 42 79 74 65 20 2b 3d 20 6e 3b 0a 20 20 7d 0a 20  Byte += n;.  }. 
2510: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73   va_end(ap);.  s
2520: 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 29 3b 0a  qliteFree(*pz);.
2530: 20 20 2a 70 7a 20 3d 20 7a 52 65 73 75 6c 74 20    *pz = zResult 
2540: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61  = sqliteMallocRa
2550: 77 28 20 6e 42 79 74 65 20 2b 20 31 20 29 3b 0a  w( nByte + 1 );.
2560: 20 20 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30    if( zResult==0
2570: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f   ) return;.  va_
2580: 73 74 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20  start(ap, pz);. 
2590: 20 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f   while( (z = va_
25a0: 61 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68  arg(ap, const ch
25b0: 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ar*))!=0 ){.    
25c0: 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  n = va_arg(ap, i
25d0: 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 3c 3d  nt);.    if( n<=
25e0: 30 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  0 ) n = strlen(z
25f0: 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 52  );.    memcpy(zR
2600: 65 73 75 6c 74 2c 20 7a 2c 20 6e 29 3b 0a 20 20  esult, z, n);.  
2610: 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20 6e 3b 0a    zResult += n;.
2620: 20 20 7d 0a 20 20 2a 7a 52 65 73 75 6c 74 20 3d    }.  *zResult =
2630: 20 30 3b 0a 23 69 66 64 65 66 20 4d 45 4d 4f 52   0;.#ifdef MEMOR
2640: 59 5f 44 45 42 55 47 0a 23 69 66 20 4d 45 4d 4f  Y_DEBUG.#if MEMO
2650: 52 59 5f 44 45 42 55 47 3e 31 0a 20 20 66 70 72  RY_DEBUG>1.  fpr
2660: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 73 74 72  intf(stderr,"str
2670: 69 6e 67 20 61 74 20 30 78 25 78 20 69 73 20 25  ing at 0x%x is %
2680: 73 5c 6e 22 2c 20 28 69 6e 74 29 2a 70 7a 2c 20  s\n", (int)*pz, 
2690: 2a 70 7a 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  *pz);.#endif.#en
26a0: 64 69 66 0a 20 20 76 61 5f 65 6e 64 28 61 70 29  dif.  va_end(ap)
26b0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74  ;.}../*.** Set t
26c0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65  he most recent e
26d0: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65 72  rror code and er
26e0: 72 6f 72 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ror string for t
26f0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
2700: 64 6c 65 20 22 64 62 22 2e 20 54 68 65 20 65 72  dle "db". The er
2710: 72 6f 72 20 63 6f 64 65 20 69 73 20 73 65 74 20  ror code is set 
2720: 74 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e 0a 2a  to "err_code"..*
2730: 2a 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f  *.** If it is no
2740: 74 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67 20 7a  t NULL, string z
2750: 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73  Format specifies
2760: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
2770: 68 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74 72 69  he.** error stri
2780: 6e 67 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20  ng in the style 
2790: 6f 66 20 74 68 65 20 70 72 69 6e 74 66 20 66 75  of the printf fu
27a0: 6e 63 74 69 6f 6e 73 3a 20 54 68 65 20 66 6f 6c  nctions: The fol
27b0: 6c 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74  lowing.** format
27c0: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
27d0: 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20  allowed:.**.**  
27e0: 20 20 20 20 25 73 20 20 20 20 20 20 49 6e 73 65      %s      Inse
27f0: 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20  rt a string.**  
2800: 20 20 20 20 25 7a 20 20 20 20 20 20 41 20 73 74      %z      A st
2810: 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c 64  ring that should
2820: 20 62 65 20 66 72 65 65 64 20 61 66 74 65 72 20   be freed after 
2830: 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20 20  use.**      %d  
2840: 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69 6e      Insert an in
2850: 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25 54  teger.**      %T
2860: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 74        Insert a t
2870: 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20  oken.**      %S 
2880: 20 20 20 20 20 49 6e 73 65 72 74 20 74 68 65 20       Insert the 
2890: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
28a0: 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a   a SrcList.**.**
28b0: 20 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61 6e 79   zFormat and any
28c0: 20 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73 20 74   string tokens t
28d0: 68 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20 61 72  hat follow it ar
28e0: 65 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 0a  e assumed to be.
28f0: 2a 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  ** encoded in UT
2900: 46 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c  F-8..**.** To cl
2910: 65 61 72 20 74 68 65 20 6d 6f 73 74 20 72 65 63  ear the most rec
2920: 65 6e 74 20 65 72 72 6f 72 20 66 6f 72 20 73 6c  ent error for sl
2930: 71 69 74 65 20 68 61 6e 64 6c 65 20 22 64 62 22  qite handle "db"
2940: 2c 20 73 71 6c 69 74 65 33 45 72 72 6f 72 0a 2a  , sqlite3Error.*
2950: 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c  * should be call
2960: 65 64 20 77 69 74 68 20 65 72 72 5f 63 6f 64 65  ed with err_code
2970: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4f   set to SQLITE_O
2980: 4b 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20 73 65  K and zFormat se
2990: 74 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f  t.** to NULL..*/
29a0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
29b0: 6f 72 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69  or(sqlite *db, i
29c0: 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f 6e  nt err_code, con
29d0: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
29e0: 2c 20 2e 2e 2e 29 7b 0a 20 20 2f 2a 20 46 72 65  , ...){.  /* Fre
29f0: 65 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 65  e any existing e
2a00: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 2a 2f  rror message. */
2a10: 0a 20 20 69 66 28 20 64 62 2d 3e 7a 45 72 72 4d  .  if( db->zErrM
2a20: 73 67 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  sg ){.    sqlite
2a30: 46 72 65 65 28 64 62 2d 3e 7a 45 72 72 4d 73 67  Free(db->zErrMsg
2a40: 29 3b 0a 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d  );.    db->zErrM
2a50: 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  sg = 0;.  }.  if
2a60: 28 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20  ( db->zErrMsg16 
2a70: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65  ){.    sqliteFre
2a80: 65 28 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 29  e(db->zErrMsg16)
2a90: 3b 0a 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d 73  ;.    db->zErrMs
2aa0: 67 31 36 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20  g16 = 0;.  }..  
2ab0: 2f 2a 20 53 65 74 20 74 68 65 20 6e 65 77 20 65  /* Set the new e
2ac0: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65 72  rror code and er
2ad0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 2a 2f 0a  ror message. */.
2ae0: 20 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20    db->errCode = 
2af0: 65 72 72 5f 63 6f 64 65 3b 0a 20 20 69 66 28 20  err_code;.  if( 
2b00: 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 76  zFormat ){.    v
2b10: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20 20 76  a_list ap;.    v
2b20: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
2b30: 6d 61 74 29 3b 0a 20 20 20 20 64 62 2d 3e 7a 45  mat);.    db->zE
2b40: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 56  rrMsg = sqlite3V
2b50: 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c  MPrintf(zFormat,
2b60: 20 61 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e 64   ap);.    va_end
2b70: 28 61 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  (ap);.  }.}../*.
2b80: 2a 2a 20 41 64 64 20 61 6e 20 65 72 72 6f 72 20  ** Add an error 
2b90: 6d 65 73 73 61 67 65 20 74 6f 20 70 50 61 72 73  message to pPars
2ba0: 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64 20 69  e->zErrMsg and i
2bb0: 6e 63 72 65 6d 65 6e 74 20 70 50 61 72 73 65 2d  ncrement pParse-
2bc0: 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20 66 6f  >nErr..** The fo
2bd0: 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 74 69  llowing formatti
2be0: 6e 67 20 63 68 61 72 61 63 74 65 72 73 20 61 72  ng characters ar
2bf0: 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a  e allowed:.**.**
2c00: 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e        %s      In
2c10: 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a  sert a string.**
2c20: 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20        %z      A 
2c30: 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75  string that shou
2c40: 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65  ld be freed afte
2c50: 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64  r use.**      %d
2c60: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20        Insert an 
2c70: 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20  integer.**      
2c80: 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %T      Insert a
2c90: 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25   token.**      %
2ca0: 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68  S      Insert th
2cb0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
2cc0: 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2f 0a  of a SrcList.*/.
2cd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2ce0: 72 4d 73 67 28 50 61 72 73 65 20 2a 70 50 61 72  rMsg(Parse *pPar
2cf0: 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
2d00: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
2d10: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 70   va_list ap;.  p
2d20: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
2d30: 20 73 71 6c 69 74 65 46 72 65 65 28 70 50 61 72   sqliteFree(pPar
2d40: 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  se->zErrMsg);.  
2d50: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
2d60: 72 6d 61 74 29 3b 0a 20 20 70 50 61 72 73 65 2d  rmat);.  pParse-
2d70: 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
2d80: 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d  e3VMPrintf(zForm
2d90: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
2da0: 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  d(ap);.}../*.** 
2db0: 43 6f 6e 76 65 72 74 20 61 6e 20 53 51 4c 2d 73  Convert an SQL-s
2dc0: 74 79 6c 65 20 71 75 6f 74 65 64 20 73 74 72 69  tyle quoted stri
2dd0: 6e 67 20 69 6e 74 6f 20 61 20 6e 6f 72 6d 61 6c  ng into a normal
2de0: 20 73 74 72 69 6e 67 20 62 79 20 72 65 6d 6f 76   string by remov
2df0: 69 6e 67 0a 2a 2a 20 74 68 65 20 71 75 6f 74 65  ing.** the quote
2e00: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 54 68   characters.  Th
2e10: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
2e20: 64 6f 6e 65 20 69 6e 2d 70 6c 61 63 65 2e 20 20  done in-place.  
2e30: 49 66 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20  If the.** input 
2e40: 64 6f 65 73 20 6e 6f 74 20 62 65 67 69 6e 20 77  does not begin w
2e50: 69 74 68 20 61 20 71 75 6f 74 65 20 63 68 61 72  ith a quote char
2e60: 61 63 74 65 72 2c 20 74 68 65 6e 20 74 68 69 73  acter, then this
2e70: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20 61   routine.** is a
2e80: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 32 30   no-op..**.** 20
2e90: 30 32 2d 46 65 62 2d 31 34 3a 20 54 68 69 73 20  02-Feb-14: This 
2ea0: 72 6f 75 74 69 6e 65 20 69 73 20 65 78 74 65 6e  routine is exten
2eb0: 64 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 4d 53  ded to remove MS
2ec0: 2d 41 63 63 65 73 73 20 73 74 79 6c 65 0a 2a 2a  -Access style.**
2ed0: 20 62 72 61 63 6b 65 74 73 20 66 72 6f 6d 20 61   brackets from a
2ee0: 72 6f 75 6e 64 20 69 64 65 6e 74 69 66 65 72 73  round identifers
2ef0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20  .  For example: 
2f00: 20 22 5b 61 2d 62 2d 63 5d 22 20 62 65 63 6f 6d   "[a-b-c]" becom
2f10: 65 73 0a 2a 2a 20 22 61 2d 62 2d 63 22 2e 0a 2a  es.** "a-b-c"..*
2f20: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  /.void sqlite3De
2f30: 71 75 6f 74 65 28 63 68 61 72 20 2a 7a 29 7b 0a  quote(char *z){.
2f40: 20 20 69 6e 74 20 71 75 6f 74 65 3b 0a 20 20 69    int quote;.  i
2f50: 6e 74 20 69 2c 20 6a 3b 0a 20 20 69 66 28 20 7a  nt i, j;.  if( z
2f60: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2f70: 71 75 6f 74 65 20 3d 20 7a 5b 30 5d 3b 0a 20 20  quote = z[0];.  
2f80: 73 77 69 74 63 68 28 20 71 75 6f 74 65 20 29 7b  switch( quote ){
2f90: 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a 20  .    case '\'': 
2fa0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
2fb0: 20 27 22 27 3a 20 20 20 62 72 65 61 6b 3b 0a 20   '"':   break;. 
2fc0: 20 20 20 63 61 73 65 20 27 5b 27 3a 20 20 20 71     case '[':   q
2fd0: 75 6f 74 65 20 3d 20 27 5d 27 3b 20 20 62 72 65  uote = ']';  bre
2fe0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
2ff0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
3000: 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20    for(i=1, j=0; 
3010: 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  z[i]; i++){.    
3020: 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20  if( z[i]==quote 
3030: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69  ){.      if( z[i
3040: 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20  +1]==quote ){.  
3050: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71        z[j++] = q
3060: 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69 2b  uote;.        i+
3070: 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  +;.      }else{.
3080: 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d          z[j++] =
3090: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
30a0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
30b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b  else{.      z[j+
30c0: 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d  +] = z[i];.    }
30d0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61 72  .  }.}../* An ar
30e0: 72 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20 75  ray to map all u
30f0: 70 70 65 72 2d 63 61 73 65 20 63 68 61 72 61 63  pper-case charac
3100: 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72 20  ters into their 
3110: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
3120: 20 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61 72   lower-case char
3130: 61 63 74 65 72 2e 20 0a 2a 2f 0a 73 74 61 74 69  acter. .*/.stati
3140: 63 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  c unsigned char 
3150: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 20 3d  UpperToLower[] =
3160: 20 7b 0a 20 20 20 20 20 20 30 2c 20 20 31 2c 20   {.      0,  1, 
3170: 20 32 2c 20 20 33 2c 20 20 34 2c 20 20 35 2c 20   2,  3,  4,  5, 
3180: 20 36 2c 20 20 37 2c 20 20 38 2c 20 20 39 2c 20   6,  7,  8,  9, 
3190: 31 30 2c 20 31 31 2c 20 31 32 2c 20 31 33 2c 20  10, 11, 12, 13, 
31a0: 31 34 2c 20 31 35 2c 20 31 36 2c 20 31 37 2c 0a  14, 15, 16, 17,.
31b0: 20 20 20 20 20 31 38 2c 20 31 39 2c 20 32 30 2c       18, 19, 20,
31c0: 20 32 31 2c 20 32 32 2c 20 32 33 2c 20 32 34 2c   21, 22, 23, 24,
31d0: 20 32 35 2c 20 32 36 2c 20 32 37 2c 20 32 38 2c   25, 26, 27, 28,
31e0: 20 32 39 2c 20 33 30 2c 20 33 31 2c 20 33 32 2c   29, 30, 31, 32,
31f0: 20 33 33 2c 20 33 34 2c 20 33 35 2c 0a 20 20 20   33, 34, 35,.   
3200: 20 20 33 36 2c 20 33 37 2c 20 33 38 2c 20 33 39    36, 37, 38, 39
3210: 2c 20 34 30 2c 20 34 31 2c 20 34 32 2c 20 34 33  , 40, 41, 42, 43
3220: 2c 20 34 34 2c 20 34 35 2c 20 34 36 2c 20 34 37  , 44, 45, 46, 47
3230: 2c 20 34 38 2c 20 34 39 2c 20 35 30 2c 20 35 31  , 48, 49, 50, 51
3240: 2c 20 35 32 2c 20 35 33 2c 0a 20 20 20 20 20 35  , 52, 53,.     5
3250: 34 2c 20 35 35 2c 20 35 36 2c 20 35 37 2c 20 35  4, 55, 56, 57, 5
3260: 38 2c 20 35 39 2c 20 36 30 2c 20 36 31 2c 20 36  8, 59, 60, 61, 6
3270: 32 2c 20 36 33 2c 20 36 34 2c 20 39 37 2c 20 39  2, 63, 64, 97, 9
3280: 38 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31 30  8, 99,100,101,10
3290: 32 2c 31 30 33 2c 0a 20 20 20 20 31 30 34 2c 31  2,103,.    104,1
32a0: 30 35 2c 31 30 36 2c 31 30 37 2c 31 30 38 2c 31  05,106,107,108,1
32b0: 30 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c 31  09,110,111,112,1
32c0: 31 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c 31  13,114,115,116,1
32d0: 31 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c 31  17,118,119,120,1
32e0: 32 31 2c 0a 20 20 20 20 31 32 32 2c 20 39 31 2c  21,.    122, 91,
32f0: 20 39 32 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c   92, 93, 94, 95,
3300: 20 39 36 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c   96, 97, 98, 99,
3310: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
3320: 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c  104,105,106,107,
3330: 0a 20 20 20 20 31 30 38 2c 31 30 39 2c 31 31 30  .    108,109,110
3340: 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31 34  ,111,112,113,114
3350: 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38  ,115,116,117,118
3360: 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 31 32 32  ,119,120,121,122
3370: 2c 31 32 33 2c 31 32 34 2c 31 32 35 2c 0a 20 20  ,123,124,125,.  
3380: 20 20 31 32 36 2c 31 32 37 2c 31 32 38 2c 31 32    126,127,128,12
3390: 39 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c 31 33  9,130,131,132,13
33a0: 33 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c 31 33  3,134,135,136,13
33b0: 37 2c 31 33 38 2c 31 33 39 2c 31 34 30 2c 31 34  7,138,139,140,14
33c0: 31 2c 31 34 32 2c 31 34 33 2c 0a 20 20 20 20 31  1,142,143,.    1
33d0: 34 34 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c 31  44,145,146,147,1
33e0: 34 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c 31  48,149,150,151,1
33f0: 35 32 2c 31 35 33 2c 31 35 34 2c 31 35 35 2c 31  52,153,154,155,1
3400: 35 36 2c 31 35 37 2c 31 35 38 2c 31 35 39 2c 31  56,157,158,159,1
3410: 36 30 2c 31 36 31 2c 0a 20 20 20 20 31 36 32 2c  60,161,.    162,
3420: 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36 36 2c  163,164,165,166,
3430: 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37 30 2c  167,168,169,170,
3440: 31 37 31 2c 31 37 32 2c 31 37 33 2c 31 37 34 2c  171,172,173,174,
3450: 31 37 35 2c 31 37 36 2c 31 37 37 2c 31 37 38 2c  175,176,177,178,
3460: 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 31 38 31  179,.    180,181
3470: 2c 31 38 32 2c 31 38 33 2c 31 38 34 2c 31 38 35  ,182,183,184,185
3480: 2c 31 38 36 2c 31 38 37 2c 31 38 38 2c 31 38 39  ,186,187,188,189
3490: 2c 31 39 30 2c 31 39 31 2c 31 39 32 2c 31 39 33  ,190,191,192,193
34a0: 2c 31 39 34 2c 31 39 35 2c 31 39 36 2c 31 39 37  ,194,195,196,197
34b0: 2c 0a 20 20 20 20 31 39 38 2c 31 39 39 2c 32 30  ,.    198,199,20
34c0: 30 2c 32 30 31 2c 32 30 32 2c 32 30 33 2c 32 30  0,201,202,203,20
34d0: 34 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c 32 30  4,205,206,207,20
34e0: 38 2c 32 30 39 2c 32 31 30 2c 32 31 31 2c 32 31  8,209,210,211,21
34f0: 32 2c 32 31 33 2c 32 31 34 2c 32 31 35 2c 0a 20  2,213,214,215,. 
3500: 20 20 20 32 31 36 2c 32 31 37 2c 32 31 38 2c 32     216,217,218,2
3510: 31 39 2c 32 32 30 2c 32 32 31 2c 32 32 32 2c 32  19,220,221,222,2
3520: 32 33 2c 32 32 34 2c 32 32 35 2c 32 32 36 2c 32  23,224,225,226,2
3530: 32 37 2c 32 32 38 2c 32 32 39 2c 32 33 30 2c 32  27,228,229,230,2
3540: 33 31 2c 32 33 32 2c 32 33 33 2c 0a 20 20 20 20  31,232,233,.    
3550: 32 33 34 2c 32 33 35 2c 32 33 36 2c 32 33 37 2c  234,235,236,237,
3560: 32 33 38 2c 32 33 39 2c 32 34 30 2c 32 34 31 2c  238,239,240,241,
3570: 32 34 32 2c 32 34 33 2c 32 34 34 2c 32 34 35 2c  242,243,244,245,
3580: 32 34 36 2c 32 34 37 2c 32 34 38 2c 32 34 39 2c  246,247,248,249,
3590: 32 35 30 2c 32 35 31 2c 0a 20 20 20 20 32 35 32  250,251,.    252
35a0: 2c 32 35 33 2c 32 35 34 2c 32 35 35 0a 7d 3b 0a  ,253,254,255.};.
35b0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
35c0: 74 69 6f 6e 20 63 6f 6d 70 75 74 65 73 20 61 20  tion computes a 
35d0: 68 61 73 68 20 6f 6e 20 74 68 65 20 6e 61 6d 65  hash on the name
35e0: 20 6f 66 20 61 20 6b 65 79 77 6f 72 64 2e 0a 2a   of a keyword..*
35f0: 2a 20 43 61 73 65 20 69 73 20 6e 6f 74 20 73 69  * Case is not si
3600: 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2f 0a 69 6e  gnificant..*/.in
3610: 74 20 73 71 6c 69 74 65 33 48 61 73 68 4e 6f 43  t sqlite3HashNoC
3620: 61 73 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ase(const char *
3630: 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69 6e 74  z, int n){.  int
3640: 20 68 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 3c   h = 0;.  if( n<
3650: 3d 30 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28  =0 ) n = strlen(
3660: 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e 20 3e  z);.  while( n >
3670: 20 30 20 20 29 7b 0a 20 20 20 20 68 20 3d 20 28   0  ){.    h = (
3680: 68 3c 3c 33 29 20 5e 20 68 20 5e 20 55 70 70 65  h<<3) ^ h ^ Uppe
3690: 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
36a0: 65 64 20 63 68 61 72 29 2a 7a 2b 2b 5d 3b 0a 20  ed char)*z++];. 
36b0: 20 20 20 6e 2d 2d 3b 0a 20 20 7d 0a 20 20 72 65     n--;.  }.  re
36c0: 74 75 72 6e 20 68 20 26 20 30 78 37 66 66 66 66  turn h & 0x7ffff
36d0: 66 66 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6f  fff;.}../*.** So
36e0: 6d 65 20 73 79 73 74 65 6d 73 20 68 61 76 65 20  me systems have 
36f0: 73 74 72 69 63 6d 70 28 29 2e 20 20 4f 74 68 65  stricmp().  Othe
3700: 72 73 20 68 61 76 65 20 73 74 72 63 61 73 65 63  rs have strcasec
3710: 6d 70 28 29 2e 20 20 42 65 63 61 75 73 65 0a 2a  mp().  Because.*
3720: 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * there is no co
3730: 6e 73 69 73 74 65 6e 63 79 2c 20 77 65 20 77 69  nsistency, we wi
3740: 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72 20 6f 77  ll define our ow
3750: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
3760: 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
3770: 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73  har *zLeft, cons
3780: 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 29 7b  t char *zRight){
3790: 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69  .  register unsi
37a0: 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62  gned char *a, *b
37b0: 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  a = (unsigne
37c0: 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a  d char *)zLeft;.
37d0: 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    b = (unsigned 
37e0: 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20  char *)zRight;. 
37f0: 20 77 68 69 6c 65 28 20 2a 61 21 3d 30 20 26 26   while( *a!=0 &&
3800: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61   UpperToLower[*a
3810: 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  ]==UpperToLower[
3820: 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20  *b]){ a++; b++; 
3830: 7d 0a 20 20 72 65 74 75 72 6e 20 2a 61 20 2d 20  }.  return *a - 
3840: 2a 62 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  *b;.}.int sqlite
3850: 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74 20  3StrNICmp(const 
3860: 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e  char *zLeft, con
3870: 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 2c  st char *zRight,
3880: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 67 69 73   int N){.  regis
3890: 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ter unsigned cha
38a0: 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20  r *a, *b;.  a = 
38b0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
38c0: 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28 75  )zLeft;.  b = (u
38d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a  nsigned char *)z
38e0: 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28 20  Right;.  while( 
38f0: 4e 2d 2d 20 3e 20 30 20 26 26 20 2a 61 21 3d 30  N-- > 0 && *a!=0
3900: 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72   && UpperToLower
3910: 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77  [*a]==UpperToLow
3920: 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b  er[*b]){ a++; b+
3930: 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3c  +; }.  return N<
3940: 30 20 3f 20 30 20 3a 20 2a 61 20 2d 20 2a 62 3b  0 ? 0 : *a - *b;
3950: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3960: 20 54 52 55 45 20 69 66 20 7a 20 69 73 20 61 20   TRUE if z is a 
3970: 70 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74 72  pure numeric str
3980: 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 46 41 4c  ing.  Return FAL
3990: 53 45 20 69 66 20 74 68 65 0a 2a 2a 20 73 74 72  SE if the.** str
39a0: 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79  ing contains any
39b0: 20 63 68 61 72 61 63 74 65 72 20 77 68 69 63 68   character which
39c0: 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66 20   is not part of 
39d0: 61 20 6e 75 6d 62 65 72 2e 20 49 66 0a 2a 2a 20  a number. If.** 
39e0: 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 6e 75  the string is nu
39f0: 6d 65 72 69 63 20 61 6e 64 20 63 6f 6e 74 61 69  meric and contai
3a00: 6e 73 20 74 68 65 20 27 2e 27 20 63 68 61 72 61  ns the '.' chara
3a10: 63 74 65 72 2c 20 73 65 74 20 2a 72 65 61 6c 6e  cter, set *realn
3a20: 75 6d 0a 2a 2a 20 74 6f 20 54 52 55 45 20 28 6f  um.** to TRUE (o
3a30: 74 68 65 72 77 69 73 65 20 46 41 4c 53 45 29 2e  therwise FALSE).
3a40: 0a 2a 2a 0a 2a 2a 20 41 6d 20 65 6d 70 74 79 20  .**.** Am empty 
3a50: 73 74 72 69 6e 67 20 69 73 20 63 6f 6e 73 69 64  string is consid
3a60: 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63  ered non-numeric
3a70: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
3a80: 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20 63  IsNumber(const c
3a90: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65 61  har *z, int *rea
3aa0: 6c 6e 75 6d 2c 20 75 38 20 65 6e 63 29 7b 0a 20  lnum, u8 enc){. 
3ab0: 20 69 6e 74 20 69 6e 63 72 20 3d 20 28 65 6e 63   int incr = (enc
3ac0: 3d 3d 54 45 58 54 5f 55 74 66 38 3f 31 3a 32 29  ==TEXT_Utf8?1:2)
3ad0: 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d 54 45 58  ;.  if( enc==TEX
3ae0: 54 5f 55 74 66 31 36 62 65 20 29 20 7a 2b 2b 3b  T_Utf16be ) z++;
3af0: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c  .  if( *z=='-' |
3b00: 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a 20 2b 3d  | *z=='+' ) z +=
3b10: 20 69 6e 63 72 3b 0a 20 20 69 66 28 20 21 69 73   incr;.  if( !is
3b20: 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20  digit(*z) ){.   
3b30: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
3b40: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66   z += incr;.  if
3b50: 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61  ( realnum ) *rea
3b60: 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69 6c  lnum = 0;.  whil
3b70: 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29  e( isdigit(*z) )
3b80: 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20  { z += incr; }. 
3b90: 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a   if( *z=='.' ){.
3ba0: 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20      z += incr;. 
3bb0: 20 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28     if( !isdigit(
3bc0: 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  *z) ) return 0;.
3bd0: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
3be0: 69 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69  it(*z) ){ z += i
3bf0: 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72  ncr; }.    if( r
3c00: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
3c10: 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28  m = 1;.  }.  if(
3c20: 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d   *z=='e' || *z==
3c30: 27 45 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20  'E' ){.    z += 
3c40: 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 2a 7a  incr;.    if( *z
3c50: 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27  =='+' || *z=='-'
3c60: 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20   ) z += incr;.  
3c70: 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a    if( !isdigit(*
3c80: 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  z) ) return 0;. 
3c90: 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69     while( isdigi
3ca0: 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e  t(*z) ){ z += in
3cb0: 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  cr; }.    if( re
3cc0: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3cd0: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 1;.  }.  retu
3ce0: 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  rn *z==0;.}../*.
3cf0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a 5b  ** The string z[
3d00: 5d 20 69 73 20 61 6e 20 61 73 63 69 69 20 72 65  ] is an ascii re
3d10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3d20: 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2e 0a 2a  a real number..*
3d30: 2a 20 43 6f 6e 76 65 72 74 20 74 68 69 73 20 73  * Convert this s
3d40: 74 72 69 6e 67 20 74 6f 20 61 20 64 6f 75 62 6c  tring to a doubl
3d50: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  e..**.** This ro
3d60: 75 74 69 6e 65 20 61 73 73 75 6d 65 73 20 74 68  utine assumes th
3d70: 61 74 20 7a 5b 5d 20 72 65 61 6c 6c 79 20 69 73  at z[] really is
3d80: 20 61 20 76 61 6c 69 64 20 6e 75 6d 62 65 72 2e   a valid number.
3d90: 20 20 49 66 20 69 74 0a 2a 2a 20 69 73 20 6e 6f    If it.** is no
3da0: 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  t, the result is
3db0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
3dc0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
3dd0: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f  s used instead o
3de0: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 61 74  f the library at
3df0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 62 65  of() function be
3e00: 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 6c 69 62  cause.** the lib
3e10: 72 61 72 79 20 61 74 6f 66 28 29 20 6d 69 67 68  rary atof() migh
3e20: 74 20 77 61 6e 74 20 74 6f 20 75 73 65 20 22 2c  t want to use ",
3e30: 22 20 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c  " as the decimal
3e40: 20 70 6f 69 6e 74 20 69 6e 73 74 65 61 64 0a 2a   point instead.*
3e50: 2a 20 6f 66 20 22 2e 22 20 64 65 70 65 6e 64 69  * of "." dependi
3e60: 6e 67 20 6f 6e 20 68 6f 77 20 6c 6f 63 61 6c 65  ng on how locale
3e70: 20 69 73 20 73 65 74 2e 20 20 42 75 74 20 74 68   is set.  But th
3e80: 61 74 20 77 6f 75 6c 64 20 63 61 75 73 65 20 70  at would cause p
3e90: 72 6f 62 6c 65 6d 73 0a 2a 2a 20 66 6f 72 20 53  roblems.** for S
3ea0: 51 4c 2e 20 20 53 6f 20 74 68 69 73 20 72 6f 75  QL.  So this rou
3eb0: 74 69 6e 65 20 61 6c 77 61 79 73 20 75 73 65 73  tine always uses
3ec0: 20 22 2e 22 20 72 65 67 61 72 64 6c 65 73 73 20   "." regardless 
3ed0: 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 64 6f  of locale..*/.do
3ee0: 75 62 6c 65 20 73 71 6c 69 74 65 33 41 74 6f 46  uble sqlite3AtoF
3ef0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
3f00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 45  const char **pzE
3f10: 6e 64 29 7b 0a 20 20 69 6e 74 20 73 69 67 6e 20  nd){.  int sign 
3f20: 3d 20 31 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c  = 1;.  LONGDOUBL
3f30: 45 5f 54 59 50 45 20 76 31 20 3d 20 30 2e 30 3b  E_TYPE v1 = 0.0;
3f40: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29  .  if( *z=='-' )
3f50: 7b 0a 20 20 20 20 73 69 67 6e 20 3d 20 2d 31 3b  {.    sign = -1;
3f60: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 65 6c 73  .    z++;.  }els
3f70: 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b  e if( *z=='+' ){
3f80: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20  .    z++;.  }.  
3f90: 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a  while( isdigit(*
3fa0: 7a 29 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 76  z) ){.    v1 = v
3fb0: 31 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27  1*10.0 + (*z - '
3fc0: 30 27 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20  0');.    z++;.  
3fd0: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20  }.  if( *z=='.' 
3fe0: 29 7b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c  ){.    LONGDOUBL
3ff0: 45 5f 54 59 50 45 20 64 69 76 69 73 6f 72 20 3d  E_TYPE divisor =
4000: 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20   1.0;.    z++;. 
4010: 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69     while( isdigi
4020: 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20 76  t(*z) ){.      v
4030: 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a  1 = v1*10.0 + (*
4040: 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 20 20  z - '0');.      
4050: 64 69 76 69 73 6f 72 20 2a 3d 20 31 30 2e 30 3b  divisor *= 10.0;
4060: 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
4070: 7d 0a 20 20 20 20 76 31 20 2f 3d 20 64 69 76 69  }.    v1 /= divi
4080: 73 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a  sor;.  }.  if( *
4090: 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45  z=='e' || *z=='E
40a0: 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 73 69  ' ){.    int esi
40b0: 67 6e 20 3d 20 31 3b 0a 20 20 20 20 69 6e 74 20  gn = 1;.    int 
40c0: 65 76 61 6c 20 3d 20 30 3b 0a 20 20 20 20 4c 4f  eval = 0;.    LO
40d0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 63  NGDOUBLE_TYPE sc
40e0: 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a  ale = 1.0;.    z
40f0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d  ++;.    if( *z==
4100: 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65 73 69  '-' ){.      esi
4110: 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7a  gn = -1;.      z
4120: 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ++;.    }else if
4130: 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  ( *z=='+' ){.   
4140: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
4150: 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74    while( isdigit
4160: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20 65 76  (*z) ){.      ev
4170: 61 6c 20 3d 20 65 76 61 6c 2a 31 30 20 2b 20 2a  al = eval*10 + *
4180: 7a 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a  z - '0';.      z
4190: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68  ++;.    }.    wh
41a0: 69 6c 65 28 20 65 76 61 6c 3e 3d 36 34 20 29 7b  ile( eval>=64 ){
41b0: 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 36   scale *= 1.0e+6
41c0: 34 3b 20 65 76 61 6c 20 2d 3d 20 36 34 3b 20 7d  4; eval -= 64; }
41d0: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
41e0: 3e 3d 31 36 20 29 7b 20 73 63 61 6c 65 20 2a 3d  >=16 ){ scale *=
41f0: 20 31 2e 30 65 2b 31 36 3b 20 65 76 61 6c 20 2d   1.0e+16; eval -
4200: 3d 20 31 36 3b 20 7d 0a 20 20 20 20 77 68 69 6c  = 16; }.    whil
4210: 65 28 20 65 76 61 6c 3e 3d 34 20 29 7b 20 73 63  e( eval>=4 ){ sc
4220: 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 34 3b 20 65  ale *= 1.0e+4; e
4230: 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a 20 20 20 20  val -= 4; }.    
4240: 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31 20 29  while( eval>=1 )
4250: 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b  { scale *= 1.0e+
4260: 31 3b 20 65 76 61 6c 20 2d 3d 20 31 3b 20 7d 0a  1; eval -= 1; }.
4270: 20 20 20 20 69 66 28 20 65 73 69 67 6e 3c 30 20      if( esign<0 
4280: 29 7b 0a 20 20 20 20 20 20 76 31 20 2f 3d 20 73  ){.      v1 /= s
4290: 63 61 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  cale;.    }else{
42a0: 0a 20 20 20 20 20 20 76 31 20 2a 3d 20 73 63 61  .      v1 *= sca
42b0: 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  le;.    }.  }.  
42c0: 69 66 28 20 70 7a 45 6e 64 20 29 20 2a 70 7a 45  if( pzEnd ) *pzE
42d0: 6e 64 20 3d 20 7a 3b 0a 20 20 72 65 74 75 72 6e  nd = z;.  return
42e0: 20 73 69 67 6e 3c 30 20 3f 20 2d 76 31 20 3a 20   sign<0 ? -v1 : 
42f0: 76 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  v1;.}../*.** Ret
4300: 75 72 6e 20 54 52 55 45 20 69 66 20 7a 4e 75 6d  urn TRUE if zNum
4310: 20 69 73 20 61 20 36 34 2d 62 69 74 20 73 69 67   is a 64-bit sig
4320: 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e 64 20  ned integer and 
4330: 77 72 69 74 65 0a 2a 2a 20 74 68 65 20 76 61 6c  write.** the val
4340: 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
4350: 72 20 69 6e 74 6f 20 2a 70 4e 75 6d 2e 20 20 49  r into *pNum.  I
4360: 66 20 7a 4e 75 6d 20 69 73 20 6e 6f 74 20 61 6e  f zNum is not an
4370: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6f 72 20 69   integer.** or i
4380: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
4390: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74  t is too large t
43a0: 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20 77  o be expressed w
43b0: 69 74 68 20 36 34 20 62 69 74 73 2c 0a 2a 2a 20  ith 64 bits,.** 
43c0: 74 68 65 6e 20 72 65 74 75 72 6e 20 66 61 6c 73  then return fals
43d0: 65 2e 20 20 49 66 20 6e 3e 30 20 61 6e 64 20 74  e.  If n>0 and t
43e0: 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 73 74  he integer is st
43f0: 72 69 6e 67 20 69 73 20 6e 6f 74 0a 2a 2a 20 65  ring is not.** e
4400: 78 61 63 74 6c 79 20 6e 20 62 79 74 65 73 20 6c  xactly n bytes l
4410: 6f 6e 67 2c 20 72 65 74 75 72 6e 20 66 61 6c 73  ong, return fals
4420: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  e..**.** When th
4430: 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 6f  is routine was o
4440: 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74 65  riginally writte
4450: 6e 20 69 74 20 64 65 61 6c 74 20 77 69 74 68 20  n it dealt with 
4460: 6f 6e 6c 79 0a 2a 2a 20 33 32 2d 62 69 74 20 6e  only.** 32-bit n
4470: 75 6d 62 65 72 73 2e 20 20 41 74 20 74 68 61 74  umbers.  At that
4480: 20 74 69 6d 65 2c 20 69 74 20 77 61 73 20 6d 75   time, it was mu
4490: 63 68 20 66 61 73 74 65 72 20 74 68 61 6e 20 74  ch faster than t
44a0: 68 65 0a 2a 2a 20 61 74 6f 69 28 29 20 6c 69 62  he.** atoi() lib
44b0: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 69 6e 20  rary routine in 
44c0: 52 65 64 48 61 74 20 37 2e 32 2e 0a 2a 2f 0a 69  RedHat 7.2..*/.i
44d0: 6e 74 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34  nt sqlite3atoi64
44e0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
44f0: 6d 2c 20 69 36 34 20 2a 70 4e 75 6d 29 7b 0a 20  m, i64 *pNum){. 
4500: 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20 69 6e   i64 v = 0;.  in
4510: 74 20 6e 65 67 3b 0a 20 20 69 6e 74 20 69 2c 20  t neg;.  int i, 
4520: 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d  c;.  if( *zNum==
4530: 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d  '-' ){.    neg =
4540: 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a   1;.    zNum++;.
4550: 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e 75    }else if( *zNu
4560: 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 6e 65  m=='+' ){.    ne
4570: 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75 6d 2b  g = 0;.    zNum+
4580: 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  +;.  }else{.    
4590: 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 66  neg = 0;.  }.  f
45a0: 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b  or(i=0; (c=zNum[
45b0: 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27  i])>='0' && c<='
45c0: 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76 20  9'; i++){.    v 
45d0: 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20 27 30 27  = v*10 + c - '0'
45e0: 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20 3d 20  ;.  }.  *pNum = 
45f0: 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a 20 20  neg ? -v : v;.  
4600: 72 65 74 75 72 6e 20 63 3d 3d 30 20 26 26 20 69  return c==0 && i
4610: 3e 30 20 26 26 20 0a 20 20 20 20 20 20 28 69 3c  >0 && .      (i<
4620: 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26 20  19 || (i==19 && 
4630: 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32  memcmp(zNum,"922
4640: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
4650: 22 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d 0a 0a 2f  ",19)<=0));.}../
4660: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
4670: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
4680: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65  an integer.  The
4690: 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d 65  re might be some
46a0: 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d   other.** inform
46b0: 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20  ation following 
46c0: 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f 2c  the integer too,
46d0: 20 62 75 74 20 74 68 61 74 20 70 61 72 74 20 69   but that part i
46e0: 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66  s ignored..** If
46f0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 68 61   the integer tha
4700: 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
4710: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
4720: 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a 2a  will fit in a.**
4730: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
4740: 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20 54  nteger, return T
4750: 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65 20  RUE.  Otherwise 
4760: 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a  return FALSE..**
4770: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
4780: 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20 66   returns FALSE f
4790: 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d 32  or the string -2
47a0: 31 34 37 34 38 33 36 34 38 20 65 76 65 6e 20 74  147483648 even t
47b0: 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d 62  hat.** that numb
47c0: 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74 68 65 6f  er will, in theo
47d0: 72 79 20 66 69 74 20 69 6e 20 61 20 33 32 2d 62  ry fit in a 32-b
47e0: 69 74 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  it integer.  But
47f0: 20 70 6f 73 69 74 69 76 65 0a 2a 2a 20 32 31 34   positive.** 214
4800: 37 34 38 33 36 34 38 20 77 69 6c 6c 20 6e 6f 74  7483648 will not
4810: 20 66 69 74 20 69 6e 20 33 32 20 62 69 74 73 2e   fit in 32 bits.
4820: 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61    So it seems sa
4830: 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a  fer to return.**
4840: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69   false..*/.stati
4850: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74  c int sqlite3Fit
4860: 73 49 6e 33 32 42 69 74 73 28 63 6f 6e 73 74 20  sIn32Bits(const 
4870: 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69  char *zNum){.  i
4880: 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a  nt i, c;.  if( *
4890: 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e  zNum=='-' || *zN
48a0: 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b  um=='+' ) zNum++
48b0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d  ;.  for(i=0; (c=
48c0: 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26  zNum[i])>='0' &&
48d0: 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a   c<='9'; i++){}.
48e0: 20 20 72 65 74 75 72 6e 20 69 3c 31 30 20 7c 7c    return i<10 ||
48f0: 20 28 69 3d 3d 31 30 20 26 26 20 6d 65 6d 63 6d   (i==10 && memcm
4900: 70 28 7a 4e 75 6d 2c 22 32 31 34 37 34 38 33 36  p(zNum,"21474836
4910: 34 37 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d 0a 0a  47",10)<=0);.}..
4920: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
4930: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
4940: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
4950: 74 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68  t in 32-bits, th
4960: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
4970: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
4980: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
4990: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
49a0: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69  turn false..*/.i
49b0: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
49c0: 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  32(const char *z
49d0: 4e 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75 65  Num, int *pValue
49e0: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
49f0: 46 69 74 73 49 6e 33 32 42 69 74 73 28 7a 4e 75  FitsIn32Bits(zNu
4a00: 6d 29 20 29 7b 0a 20 20 20 20 2a 70 56 61 6c 75  m) ){.    *pValu
4a10: 65 20 3d 20 61 74 6f 69 28 7a 4e 75 6d 29 3b 0a  e = atoi(zNum);.
4a20: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
4a30: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4a40: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  ./*.** The strin
4a50: 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  g zNum represent
4a60: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54  s an integer.  T
4a70: 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f  here might be so
4a80: 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f  me other.** info
4a90: 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e  rmation followin
4aa0: 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f  g the integer to
4ab0: 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74  o, but that part
4ac0: 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20   is ignored..** 
4ad0: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74  If the integer t
4ae0: 68 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  hat the prefix o
4af0: 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  f zNum represent
4b00: 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a  s will fit in a.
4b10: 2a 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  ** 64-bit signed
4b20: 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e   integer, return
4b30: 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73   TRUE.  Otherwis
4b40: 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a  e return FALSE..
4b50: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
4b60: 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45  ne returns FALSE
4b70: 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20   for the string 
4b80: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
4b90: 35 38 30 38 20 65 76 65 6e 20 74 68 61 74 0a 2a  5808 even that.*
4ba0: 2a 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69  * that number wi
4bb0: 6c 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69  ll, in theory fi
4bc0: 74 20 69 6e 20 61 20 36 34 2d 62 69 74 20 69 6e  t in a 64-bit in
4bd0: 74 65 67 65 72 2e 20 20 50 6f 73 69 74 69 76 65  teger.  Positive
4be0: 0a 2a 2a 20 39 32 32 33 33 37 33 30 33 36 38 35  .** 922337303685
4bf0: 34 37 37 35 38 30 38 20 77 69 6c 6c 20 6e 6f 74  4775808 will not
4c00: 20 66 69 74 20 69 6e 20 36 34 20 62 69 74 73 2e   fit in 64 bits.
4c10: 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61    So it seems sa
4c20: 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a  fer to return.**
4c30: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73   false..*/.int s
4c40: 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
4c50: 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ts(const char *z
4c60: 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63  Num){.  int i, c
4c70: 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27  ;.  if( *zNum=='
4c80: 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  -' || *zNum=='+'
4c90: 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72   ) zNum++;.  for
4ca0: 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d  (i=0; (c=zNum[i]
4cb0: 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  )>='0' && c<='9'
4cc0: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72  ; i++){}.  retur
4cd0: 6e 20 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39  n i<19 || (i==19
4ce0: 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c   && memcmp(zNum,
4cf0: 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  "922337203685477
4d00: 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 3b 0a 7d  5807",19)<=0);.}
4d10: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20  ../*.** If zNum 
4d20: 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e  represents an in
4d30: 74 65 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20  teger that will 
4d40: 66 69 74 20 69 6e 20 36 34 2d 62 69 74 73 2c 20  fit in 64-bits, 
4d50: 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61  then set.** *pVa
4d60: 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65  lue to that inte
4d70: 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ger and return t
4d80: 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20  rue.  Otherwise 
4d90: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f  return false..*/
4da0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
4db0: 6e 74 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20  nt64(const char 
4dc0: 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c  *zNum, i64 *pVal
4dd0: 75 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  ue){.  if( sqlit
4de0: 65 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 7a  e3FitsIn64Bits(z
4df0: 4e 75 6d 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  Num) ){.    sqli
4e00: 74 65 33 61 74 6f 69 36 34 28 7a 4e 75 6d 2c 20  te3atoi64(zNum, 
4e10: 70 56 61 6c 75 65 29 3b 0a 20 20 20 20 72 65 74  pValue);.    ret
4e20: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
4e30: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 69  urn 0;.}../* Thi
4e40: 73 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  s comparison rou
4e50: 74 69 6e 65 20 69 73 20 77 68 61 74 20 77 65 20  tine is what we 
4e60: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
4e70: 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  on operations.**
4e80: 20 62 65 74 77 65 65 6e 20 6e 75 6d 65 72 69 63   between numeric
4e90: 20 76 61 6c 75 65 73 20 69 6e 20 61 6e 20 53 51   values in an SQ
4ea0: 4c 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 22  L expression.  "
4eb0: 4e 75 6d 65 72 69 63 22 20 69 73 20 61 20 6c 69  Numeric" is a li
4ec0: 74 74 6c 65 0a 2a 2a 20 62 69 74 20 6d 69 73 6c  ttle.** bit misl
4ed0: 65 61 64 69 6e 67 20 68 65 72 65 2e 20 20 57 68  eading here.  Wh
4ee0: 61 74 20 77 65 20 6d 65 61 6e 20 69 73 20 74 68  at we mean is th
4ef0: 61 74 20 74 68 65 20 73 74 72 69 6e 67 73 20 68  at the strings h
4f00: 61 76 65 20 61 0a 2a 2a 20 74 79 70 65 20 6f 66  ave a.** type of
4f10: 20 22 6e 75 6d 65 72 69 63 22 20 66 72 6f 6d 20   "numeric" from 
4f20: 74 68 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65  the point of vie
4f30: 77 20 6f 66 20 53 51 4c 2e 20 20 54 68 65 20 73  w of SQL.  The s
4f40: 74 72 69 6e 67 73 0a 2a 2a 20 64 6f 20 6e 6f 74  trings.** do not
4f50: 20 6e 65 63 65 73 73 61 72 69 6c 79 20 63 6f 6e   necessarily con
4f60: 74 61 69 6e 20 6e 75 6d 62 65 72 73 2e 20 20 54  tain numbers.  T
4f70: 68 65 79 20 63 6f 75 6c 64 20 63 6f 6e 74 61 69  hey could contai
4f80: 6e 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  n text..**.** If
4f90: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
4fa0: 67 73 20 62 6f 74 68 20 6c 6f 6f 6b 20 6c 69 6b  gs both look lik
4fb0: 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 73  e actual numbers
4fc0: 20 74 68 65 6e 20 74 68 65 79 0a 2a 2a 20 63 6f   then they.** co
4fd0: 6d 70 61 72 65 20 69 6e 20 6e 75 6d 65 72 69 63  mpare in numeric
4fe0: 61 6c 20 6f 72 64 65 72 2e 20 20 4e 75 6d 65 72  al order.  Numer
4ff0: 69 63 61 6c 20 73 74 72 69 6e 67 73 20 61 72 65  ical strings are
5000: 20 61 6c 77 61 79 73 20 6c 65 73 73 20 0a 2a 2a   always less .**
5010: 20 74 68 61 6e 20 6e 6f 6e 2d 6e 75 6d 65 72 69   than non-numeri
5020: 63 20 73 74 72 69 6e 67 73 20 73 6f 20 69 66 20  c strings so if 
5030: 6f 6e 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67  one input string
5040: 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 0a 2a 2a   looks like a.**
5050: 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20   number and the 
5060: 6f 74 68 65 72 20 64 6f 65 73 20 6e 6f 74 2c 20  other does not, 
5070: 74 68 65 6e 20 74 68 65 20 6f 6e 65 20 74 68 61  then the one tha
5080: 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 0a 2a 2a 20  t looks like.** 
5090: 61 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  a number is the 
50a0: 73 6d 61 6c 6c 65 72 2e 20 20 4e 6f 6e 2d 6e 75  smaller.  Non-nu
50b0: 6d 65 72 69 63 20 73 74 72 69 6e 67 73 20 63 6f  meric strings co
50c0: 6d 70 61 72 65 20 69 6e 20 0a 2a 2a 20 6c 65 78  mpare in .** lex
50d0: 69 67 72 61 70 68 69 63 61 6c 20 6f 72 64 65 72  igraphical order
50e0: 20 28 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72   (the same order
50f0: 20 61 73 20 73 74 72 63 6d 70 28 29 29 2e 0a 2a   as strcmp())..*
5100: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6d  /.int sqlite3Com
5110: 70 61 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20  pare(const char 
5120: 2a 61 74 65 78 74 2c 20 63 6f 6e 73 74 20 63 68  *atext, const ch
5130: 61 72 20 2a 62 74 65 78 74 29 7b 0a 20 20 69 6e  ar *btext){.  in
5140: 74 20 72 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  t result;.  int 
5150: 69 73 4e 75 6d 41 2c 20 69 73 4e 75 6d 42 3b 0a  isNumA, isNumB;.
5160: 20 20 69 66 28 20 61 74 65 78 74 3d 3d 30 20 29    if( atext==0 )
5170: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b  {.    return -1;
5180: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 62 74 65  .  }else if( bte
5190: 78 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  xt==0 ){.    ret
51a0: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 73 4e  urn 1;.  }.  isN
51b0: 75 6d 41 20 3d 20 73 71 6c 69 74 65 33 49 73 4e  umA = sqlite3IsN
51c0: 75 6d 62 65 72 28 61 74 65 78 74 2c 20 30 2c 20  umber(atext, 0, 
51d0: 54 45 58 54 5f 55 74 66 38 29 3b 0a 20 20 69 73  TEXT_Utf8);.  is
51e0: 4e 75 6d 42 20 3d 20 73 71 6c 69 74 65 33 49 73  NumB = sqlite3Is
51f0: 4e 75 6d 62 65 72 28 62 74 65 78 74 2c 20 30 2c  Number(btext, 0,
5200: 20 54 45 58 54 5f 55 74 66 38 29 3b 0a 20 20 69   TEXT_Utf8);.  i
5210: 66 28 20 69 73 4e 75 6d 41 20 29 7b 0a 20 20 20  f( isNumA ){.   
5220: 20 69 66 28 20 21 69 73 4e 75 6d 42 20 29 7b 0a   if( !isNumB ){.
5230: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 2d        result = -
5240: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
5250: 20 20 20 20 64 6f 75 62 6c 65 20 72 41 2c 20 72      double rA, r
5260: 42 3b 0a 20 20 20 20 20 20 72 41 20 3d 20 73 71  B;.      rA = sq
5270: 6c 69 74 65 33 41 74 6f 46 28 61 74 65 78 74 2c  lite3AtoF(atext,
5280: 20 30 29 3b 0a 20 20 20 20 20 20 72 42 20 3d 20   0);.      rB = 
5290: 73 71 6c 69 74 65 33 41 74 6f 46 28 62 74 65 78  sqlite3AtoF(btex
52a0: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  t, 0);.      if(
52b0: 20 72 41 3c 72 42 20 29 7b 0a 20 20 20 20 20 20   rA<rB ){.      
52c0: 20 20 72 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20    result = -1;. 
52d0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72       }else if( r
52e0: 41 3e 72 42 20 29 7b 0a 20 20 20 20 20 20 20 20  A>rB ){.        
52f0: 72 65 73 75 6c 74 20 3d 20 2b 31 3b 0a 20 20 20  result = +1;.   
5300: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5310: 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20    result = 0;.  
5320: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
5330: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 42 20 29  lse if( isNumB )
5340: 7b 0a 20 20 20 20 72 65 73 75 6c 74 20 3d 20 2b  {.    result = +
5350: 31 3b 0a 20 20 7d 65 6c 73 65 20 7b 0a 20 20 20  1;.  }else {.   
5360: 20 72 65 73 75 6c 74 20 3d 20 73 74 72 63 6d 70   result = strcmp
5370: 28 61 74 65 78 74 2c 20 62 74 65 78 74 29 3b 0a  (atext, btext);.
5380: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 65 73    }.  return res
5390: 75 6c 74 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  ult; .}../*.** T
53a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75  his routine is u
53b0: 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 2e  sed for sorting.
53c0: 20 20 45 61 63 68 20 6b 65 79 20 69 73 20 61 20    Each key is a 
53d0: 6c 69 73 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d  list of one or m
53e0: 6f 72 65 0a 2a 2a 20 6e 75 6c 6c 2d 74 65 72 6d  ore.** null-term
53f0: 69 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 2e  inated elements.
5400: 20 20 54 68 65 20 6c 69 73 74 20 69 73 20 74 65    The list is te
5410: 72 6d 69 6e 61 74 65 64 20 62 79 20 74 77 6f 20  rminated by two 
5420: 6e 75 6c 6c 73 20 69 6e 0a 2a 2a 20 61 20 72 6f  nulls in.** a ro
5430: 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  w.  For example,
5440: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
5450: 65 78 74 20 69 73 20 61 20 6b 65 79 20 77 69 74  ext is a key wit
5460: 68 20 74 68 72 65 65 20 65 6c 65 6d 65 6e 74 73  h three elements
5470: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
5480: 20 20 41 6f 6e 65 5c 30 30 30 44 74 77 6f 5c 30    Aone\000Dtwo\0
5490: 30 30 41 74 68 72 65 65 5c 30 30 30 5c 30 30 30  00Athree\000\000
54a0: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 65 6c 65 6d 65  .**.** All eleme
54b0: 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 6f  nts begin with o
54c0: 6e 65 20 6f 66 20 74 68 65 20 63 68 61 72 61 63  ne of the charac
54d0: 74 65 72 73 20 22 2b 2d 41 44 22 20 61 6e 64 20  ters "+-AD" and 
54e0: 65 6e 64 20 77 69 74 68 20 22 5c 30 30 30 22 0a  end with "\000".
54f0: 2a 2a 20 77 69 74 68 20 7a 65 72 6f 20 6f 72 20  ** with zero or 
5500: 6d 6f 72 65 20 74 65 78 74 20 65 6c 65 6d 65 6e  more text elemen
5510: 74 73 20 69 6e 20 62 65 74 77 65 65 6e 2e 20 20  ts in between.  
5520: 45 78 63 65 70 74 2c 20 4e 55 4c 4c 20 65 6c 65  Except, NULL ele
5530: 6d 65 6e 74 73 0a 2a 2a 20 63 6f 6e 73 69 73 74  ments.** consist
5540: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20   of the special 
5550: 74 77 6f 2d 63 68 61 72 61 63 74 65 72 20 73 65  two-character se
5560: 71 75 65 6e 63 65 20 22 4e 5c 30 30 30 22 2e 0a  quence "N\000"..
5570: 2a 2a 0a 2a 2a 20 42 6f 74 68 20 61 72 67 75 6d  **.** Both argum
5580: 65 6e 74 73 20 77 69 6c 6c 20 68 61 76 65 20 74  ents will have t
5590: 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f  he same number o
55a0: 66 20 65 6c 65 6d 65 6e 74 73 2e 20 20 54 68 69  f elements.  Thi
55b0: 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 72 65 74  s routine.** ret
55c0: 75 72 6e 73 20 6e 65 67 61 74 69 76 65 2c 20 7a  urns negative, z
55d0: 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
55e0: 20 69 66 20 74 68 65 20 66 69 72 73 74 20 61 72   if the first ar
55f0: 67 75 6d 65 6e 74 20 69 73 20 6c 65 73 73 0a 2a  gument is less.*
5600: 2a 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f  * than, equal to
5610: 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
5620: 6e 20 74 68 65 20 66 69 72 73 74 2e 20 20 28 52  n the first.  (R
5630: 65 73 75 6c 74 20 69 73 20 61 2d 62 29 2e 0a 2a  esult is a-b)..*
5640: 2a 0a 2a 2a 20 45 61 63 68 20 65 6c 65 6d 65 6e  *.** Each elemen
5650: 74 20 62 65 67 69 6e 73 20 77 69 74 68 20 6f 6e  t begins with on
5660: 65 20 6f 66 20 74 68 65 20 63 68 61 72 61 63 74  e of the charact
5670: 65 72 73 20 22 2b 22 2c 20 22 2d 22 2c 20 22 41  ers "+", "-", "A
5680: 22 2c 20 22 44 22 2e 0a 2a 2a 20 54 68 69 73 20  ", "D"..** This 
5690: 63 68 61 72 61 63 74 65 72 20 64 65 74 65 72 6d  character determ
56a0: 69 6e 65 73 20 74 68 65 20 73 6f 72 74 20 6f 72  ines the sort or
56b0: 64 65 72 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  der and collatin
56c0: 67 20 73 65 71 75 65 6e 63 65 3a 0a 2a 2a 0a 2a  g sequence:.**.*
56d0: 2a 20 20 20 20 20 2b 20 20 20 20 20 20 53 6f 72  *     +      Sor
56e0: 74 20 6e 75 6d 65 72 69 63 61 6c 6c 79 20 69 6e  t numerically in
56f0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
5700: 0a 2a 2a 20 20 20 20 20 2d 20 20 20 20 20 20 53  .**     -      S
5710: 6f 72 74 20 6e 75 6d 65 72 69 63 61 6c 6c 79 20  ort numerically 
5720: 69 6e 20 64 65 73 63 65 6e 64 69 6e 67 20 6f 72  in descending or
5730: 64 65 72 0a 2a 2a 20 20 20 20 20 41 20 20 20 20  der.**     A    
5740: 20 20 53 6f 72 74 20 61 73 20 73 74 72 69 6e 67    Sort as string
5750: 73 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  s in ascending o
5760: 72 64 65 72 0a 2a 2a 20 20 20 20 20 44 20 20 20  rder.**     D   
5770: 20 20 20 53 6f 72 74 20 61 73 20 73 74 72 69 6e     Sort as strin
5780: 67 73 20 69 6e 20 64 65 73 63 65 6e 64 69 6e 67  gs in descending
5790: 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 46 6f   order..**.** Fo
57a0: 72 20 74 68 65 20 22 2b 22 20 61 6e 64 20 22 2d  r the "+" and "-
57b0: 22 20 73 6f 72 74 69 6e 67 2c 20 70 75 72 65 20  " sorting, pure 
57c0: 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 73 20  numeric strings 
57d0: 28 73 74 72 69 6e 67 73 20 66 6f 72 20 77 68 69  (strings for whi
57e0: 63 68 20 74 68 65 0a 2a 2a 20 69 73 4e 75 6d 28  ch the.** isNum(
57f0: 29 20 66 75 6e 63 74 69 6f 6e 20 61 62 6f 76 65  ) function above
5800: 20 72 65 74 75 72 6e 73 20 54 52 55 45 29 20 61   returns TRUE) a
5810: 6c 77 61 79 73 20 63 6f 6d 70 61 72 65 20 6c 65  lways compare le
5820: 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 0a  ss than strings.
5830: 2a 2a 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ** that are not 
5840: 70 75 72 65 20 6e 75 6d 65 72 69 63 73 2e 20 20  pure numerics.  
5850: 4e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 69  Non-numeric stri
5860: 6e 67 73 20 63 6f 6d 70 61 72 65 20 69 6e 20 6d  ngs compare in m
5870: 65 6d 63 6d 70 28 29 0a 2a 2a 20 6f 72 64 65 72  emcmp().** order
5880: 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73  .  This is the s
5890: 61 6d 65 20 73 6f 72 74 20 6f 72 64 65 72 20 61  ame sort order a
58a0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 43 6f 6d  s the sqlite3Com
58b0: 70 61 72 65 28 29 20 66 75 6e 63 74 69 6f 6e 0a  pare() function.
58c0: 2a 2a 20 61 62 6f 76 65 20 67 65 6e 65 72 61 74  ** above generat
58d0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 61  es..**.** The la
58e0: 73 74 20 70 6f 69 6e 74 20 69 73 20 61 20 63 68  st point is a ch
58f0: 61 6e 67 65 20 66 72 6f 6d 20 76 65 72 73 69 6f  ange from versio
5900: 6e 20 32 2e 36 2e 33 20 74 6f 20 76 65 72 73 69  n 2.6.3 to versi
5910: 6f 6e 20 32 2e 37 2e 30 2e 20 20 49 6e 0a 2a 2a  on 2.7.0.  In.**
5920: 20 76 65 72 73 69 6f 6e 20 32 2e 36 2e 33 20 61   version 2.6.3 a
5930: 6e 64 20 65 61 72 6c 69 65 72 2c 20 73 75 62 73  nd earlier, subs
5940: 74 72 69 6e 67 73 20 6f 66 20 64 69 67 69 74 73  trings of digits
5950: 20 63 6f 6d 70 61 72 65 20 69 6e 20 6e 75 6d 65   compare in nume
5960: 72 69 63 61 6c 20 0a 2a 2a 20 61 6e 64 20 63 61  rical .** and ca
5970: 73 65 20 77 61 73 20 75 73 65 64 20 6f 6e 6c 79  se was used only
5980: 20 74 6f 20 62 72 65 61 6b 20 61 20 74 69 65 2e   to break a tie.
5990: 0a 2a 2a 0a 2a 2a 20 45 6c 65 6d 65 6e 74 73 20  .**.** Elements 
59a0: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
59b0: 27 41 27 20 6f 72 20 27 44 27 20 63 6f 6d 70 61  'A' or 'D' compa
59c0: 72 65 20 69 6e 20 6d 65 6d 63 6d 70 28 29 20 6f  re in memcmp() o
59d0: 72 64 65 72 20 72 65 67 61 72 64 6c 65 73 73 0a  rder regardless.
59e0: 2a 2a 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ** of whether or
59f0: 20 6e 6f 74 20 74 68 65 79 20 6c 6f 6f 6b 20 6c   not they look l
5a00: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ike a number..**
5a10: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
5a20: 65 20 73 6f 72 74 20 6f 72 64 65 72 20 69 6d 70  e sort order imp
5a30: 6f 73 65 64 20 62 79 20 74 68 65 20 72 75 6c 65  osed by the rule
5a40: 73 20 61 62 6f 76 65 20 69 73 20 74 68 65 20 73  s above is the s
5a50: 61 6d 65 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  ame.** from the 
5a60: 6f 72 64 65 72 69 6e 67 20 64 65 66 69 6e 65 64  ordering defined
5a70: 20 62 79 20 74 68 65 20 22 3c 22 2c 20 22 3c 3d   by the "<", "<=
5a80: 22 2c 20 22 3e 22 2c 20 61 6e 64 20 22 3e 3d 22  ", ">", and ">="
5a90: 20 6f 70 65 72 61 74 6f 72 73 0a 2a 2a 20 6f 66   operators.** of
5aa0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64   expressions and
5ab0: 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
5ac0: 68 69 73 20 77 61 73 20 6e 6f 74 20 74 68 65 20  his was not the 
5ad0: 63 61 73 65 20 66 6f 72 20 76 65 72 73 69 6f 6e  case for version
5ae0: 0a 2a 2a 20 32 2e 36 2e 33 20 61 6e 64 20 65 61  .** 2.6.3 and ea
5af0: 72 6c 69 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71  rlier..*/.int sq
5b00: 6c 69 74 65 33 53 6f 72 74 43 6f 6d 70 61 72 65  lite3SortCompare
5b10: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 2c 20  (const char *a, 
5b20: 63 6f 6e 73 74 20 63 68 61 72 20 2a 62 29 7b 0a  const char *b){.
5b30: 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20    int res = 0;. 
5b40: 20 69 6e 74 20 69 73 4e 75 6d 41 2c 20 69 73 4e   int isNumA, isN
5b50: 75 6d 42 3b 0a 20 20 69 6e 74 20 64 69 72 20 3d  umB;.  int dir =
5b60: 20 30 3b 0a 0a 20 20 77 68 69 6c 65 28 20 72 65   0;..  while( re
5b70: 73 3d 3d 30 20 26 26 20 2a 61 20 26 26 20 2a 62  s==0 && *a && *b
5b80: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 5b 30 5d   ){.    if( a[0]
5b90: 3d 3d 27 4e 27 20 7c 7c 20 62 5b 30 5d 3d 3d 27  =='N' || b[0]=='
5ba0: 4e 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  N' ){.      if( 
5bb0: 61 5b 30 5d 3d 3d 62 5b 30 5d 20 29 7b 0a 20 20  a[0]==b[0] ){.  
5bc0: 20 20 20 20 20 20 61 20 2b 3d 20 32 3b 0a 20 20        a += 2;.  
5bd0: 20 20 20 20 20 20 62 20 2b 3d 20 32 3b 0a 20 20        b += 2;.  
5be0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
5bf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5c00: 28 20 61 5b 30 5d 3d 3d 27 4e 27 20 29 7b 0a 20  ( a[0]=='N' ){. 
5c10: 20 20 20 20 20 20 20 64 69 72 20 3d 20 62 5b 30         dir = b[0
5c20: 5d 3b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  ];.        res =
5c30: 20 2d 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   -1;.      }else
5c40: 7b 0a 20 20 20 20 20 20 20 20 64 69 72 20 3d 20  {.        dir = 
5c50: 61 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 72 65  a[0];.        re
5c60: 73 20 3d 20 2b 31 3b 0a 20 20 20 20 20 20 7d 0a  s = +1;.      }.
5c70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5c80: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 61   }.    assert( a
5c90: 5b 30 5d 3d 3d 62 5b 30 5d 20 29 3b 0a 20 20 20  [0]==b[0] );.   
5ca0: 20 69 66 28 20 28 64 69 72 3d 61 5b 30 5d 29 3d   if( (dir=a[0])=
5cb0: 3d 27 41 27 20 7c 7c 20 61 5b 30 5d 3d 3d 27 44  ='A' || a[0]=='D
5cc0: 27 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ' ){.      res =
5cd0: 20 73 74 72 63 6d 70 28 26 61 5b 31 5d 2c 26 62   strcmp(&a[1],&b
5ce0: 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
5cf0: 72 65 73 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  res ) break;.   
5d00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 73   }else{.      is
5d10: 4e 75 6d 41 20 3d 20 73 71 6c 69 74 65 33 49 73  NumA = sqlite3Is
5d20: 4e 75 6d 62 65 72 28 26 61 5b 31 5d 2c 20 30 2c  Number(&a[1], 0,
5d30: 20 54 45 58 54 5f 55 74 66 38 29 3b 0a 20 20 20   TEXT_Utf8);.   
5d40: 20 20 20 69 73 4e 75 6d 42 20 3d 20 73 71 6c 69     isNumB = sqli
5d50: 74 65 33 49 73 4e 75 6d 62 65 72 28 26 62 5b 31  te3IsNumber(&b[1
5d60: 5d 2c 20 30 2c 20 54 45 58 54 5f 55 74 66 38 29  ], 0, TEXT_Utf8)
5d70: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 4e 75  ;.      if( isNu
5d80: 6d 41 20 29 7b 0a 20 20 20 20 20 20 20 20 64 6f  mA ){.        do
5d90: 75 62 6c 65 20 72 41 2c 20 72 42 3b 0a 20 20 20  uble rA, rB;.   
5da0: 20 20 20 20 20 69 66 28 20 21 69 73 4e 75 6d 42       if( !isNumB
5db0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65   ){.          re
5dc0: 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20  s = -1;.        
5dd0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
5de0: 20 7d 0a 20 20 20 20 20 20 20 20 72 41 20 3d 20   }.        rA = 
5df0: 73 71 6c 69 74 65 33 41 74 6f 46 28 26 61 5b 31  sqlite3AtoF(&a[1
5e00: 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 72  ], 0);.        r
5e10: 42 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46 28  B = sqlite3AtoF(
5e20: 26 62 5b 31 5d 2c 20 30 29 3b 0a 20 20 20 20 20  &b[1], 0);.     
5e30: 20 20 20 69 66 28 20 72 41 3c 72 42 20 29 7b 0a     if( rA<rB ){.
5e40: 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
5e50: 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  -1;.          br
5e60: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
5e70: 20 20 20 20 20 20 20 69 66 28 20 72 41 3e 72 42         if( rA>rB
5e80: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65   ){.          re
5e90: 73 20 3d 20 2b 31 3b 0a 20 20 20 20 20 20 20 20  s = +1;.        
5ea0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
5eb0: 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
5ec0: 66 28 20 69 73 4e 75 6d 42 20 29 7b 0a 20 20 20  f( isNumB ){.   
5ed0: 20 20 20 20 20 72 65 73 20 3d 20 2b 31 3b 0a 20       res = +1;. 
5ee0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5ef0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5f00: 20 20 20 72 65 73 20 3d 20 73 74 72 63 6d 70 28     res = strcmp(
5f10: 26 61 5b 31 5d 2c 26 62 5b 31 5d 29 3b 0a 20 20  &a[1],&b[1]);.  
5f20: 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 20        if( res ) 
5f30: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5f40: 20 20 20 7d 0a 20 20 20 20 61 20 2b 3d 20 73 74     }.    a += st
5f50: 72 6c 65 6e 28 26 61 5b 31 5d 29 20 2b 20 32 3b  rlen(&a[1]) + 2;
5f60: 0a 20 20 20 20 62 20 2b 3d 20 73 74 72 6c 65 6e  .    b += strlen
5f70: 28 26 62 5b 31 5d 29 20 2b 20 32 3b 0a 20 20 7d  (&b[1]) + 2;.  }
5f80: 0a 20 20 69 66 28 20 64 69 72 3d 3d 27 2d 27 20  .  if( dir=='-' 
5f90: 7c 7c 20 64 69 72 3d 3d 27 44 27 20 29 20 72 65  || dir=='D' ) re
5fa0: 73 20 3d 20 2d 72 65 73 3b 0a 20 20 72 65 74 75  s = -res;.  retu
5fb0: 72 6e 20 72 65 73 3b 0a 7d 0a 0a 23 69 66 20 31  rn res;.}..#if 1
5fc0: 20 20 2f 2a 20 57 65 20 61 72 65 20 6e 6f 77 20    /* We are now 
5fd0: 61 6c 77 61 79 73 20 55 54 46 2d 38 20 2a 2f 0a  always UTF-8 */.
5fe0: 2f 2a 0a 2a 2a 20 58 20 69 73 20 61 20 70 6f 69  /*.** X is a poi
5ff0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
6000: 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
6010: 38 20 63 68 61 72 61 63 74 65 72 2e 20 20 49 6e  8 character.  In
6020: 63 72 65 6d 65 6e 74 0a 2a 2a 20 58 20 73 6f 20  crement.** X so 
6030: 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
6040: 6f 20 74 68 65 20 6e 65 78 74 20 63 68 61 72 61  o the next chara
6050: 63 74 65 72 2e 20 20 54 68 69 73 20 6f 6e 6c 79  cter.  This only
6060: 20 77 6f 72 6b 73 20 72 69 67 68 74 0a 2a 2a 20   works right.** 
6070: 69 66 20 58 20 70 6f 69 6e 74 73 20 74 6f 20 61  if X points to a
6080: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 55 54 46   well-formed UTF
6090: 2d 38 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64  -8 string..*/.#d
60a0: 65 66 69 6e 65 20 73 71 6c 69 74 65 4e 65 78 74  efine sqliteNext
60b0: 43 68 61 72 28 58 29 20 20 77 68 69 6c 65 28 20  Char(X)  while( 
60c0: 28 30 78 63 30 26 2a 2b 2b 28 58 29 29 3d 3d 30  (0xc0&*++(X))==0
60d0: 78 38 30 20 29 7b 7d 0a 23 64 65 66 69 6e 65 20  x80 ){}.#define 
60e0: 73 71 6c 69 74 65 43 68 61 72 56 61 6c 28 58 29  sqliteCharVal(X)
60f0: 20 20 20 73 71 6c 69 74 65 33 52 65 61 64 55 74     sqlite3ReadUt
6100: 66 38 28 58 29 0a 0a 23 65 6c 73 65 20 2f 2a 20  f8(X)..#else /* 
6110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6120: 55 54 46 38 29 20 2a 2f 0a 2f 2a 0a 2a 2a 20 46  UTF8) */./*.** F
6130: 6f 72 20 69 73 6f 38 38 35 39 20 65 6e 63 6f 64  or iso8859 encod
6140: 69 6e 67 2c 20 74 68 65 20 6e 65 78 74 20 63 68  ing, the next ch
6150: 61 72 61 63 74 65 72 20 69 73 20 6a 75 73 74 20  aracter is just 
6160: 74 68 65 20 6e 65 78 74 20 62 79 74 65 2e 0a 2a  the next byte..*
6170: 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
6180: 4e 65 78 74 43 68 61 72 28 58 29 20 20 28 2b 2b  NextChar(X)  (++
6190: 28 58 29 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  (X));.#define sq
61a0: 6c 69 74 65 43 68 61 72 56 61 6c 28 58 29 20 20  liteCharVal(X)  
61b0: 20 28 28 69 6e 74 29 2a 28 58 29 29 0a 0a 23 65   ((int)*(X))..#e
61c0: 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28  ndif /* defined(
61d0: 53 51 4c 49 54 45 5f 55 54 46 38 29 20 2a 2f 0a  SQLITE_UTF8) */.
61e0: 0a 0a 23 69 66 20 31 20 20 2f 2a 20 57 65 20 61  ..#if 1  /* We a
61f0: 72 65 20 6e 6f 77 20 61 6c 77 61 79 73 20 55 54  re now always UT
6200: 46 2d 38 20 2a 2f 0a 2f 2a 0a 2a 2a 20 43 6f 6e  F-8 */./*.** Con
6210: 76 65 72 74 20 74 68 65 20 55 54 46 2d 38 20 63  vert the UTF-8 c
6220: 68 61 72 61 63 74 65 72 20 74 6f 20 77 68 69 63  haracter to whic
6230: 68 20 7a 20 70 6f 69 6e 74 73 20 69 6e 74 6f 20  h z points into 
6240: 61 20 33 31 2d 62 69 74 0a 2a 2a 20 55 43 53 20  a 31-bit.** UCS 
6250: 63 68 61 72 61 63 74 65 72 2e 20 20 54 68 69 73  character.  This
6260: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 72 69 67 68   only works righ
6270: 74 20 69 66 20 7a 20 70 6f 69 6e 74 73 20 74 6f  t if z points to
6280: 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 2a   a well-formed.*
6290: 2a 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 0a  * UTF-8 string..
62a0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
62b0: 6c 69 74 65 33 52 65 61 64 55 74 66 38 28 63 6f  lite3ReadUtf8(co
62c0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
62d0: 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63 3b 0a  r *z){.  int c;.
62e0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
62f0: 6e 74 20 69 6e 69 74 56 61 6c 5b 5d 20 3d 20 7b  nt initVal[] = {
6300: 0a 20 20 20 20 20 20 30 2c 20 20 20 31 2c 20 20  .      0,   1,  
6310: 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20 20 20   2,   3,   4,   
6320: 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20 20 38  5,   6,   7,   8
6330: 2c 20 20 20 39 2c 20 20 31 30 2c 20 20 31 31 2c  ,   9,  10,  11,
6340: 20 20 31 32 2c 20 20 31 33 2c 20 20 31 34 2c 0a    12,  13,  14,.
6350: 20 20 20 20 20 31 35 2c 20 20 31 36 2c 20 20 31       15,  16,  1
6360: 37 2c 20 20 31 38 2c 20 20 31 39 2c 20 20 32 30  7,  18,  19,  20
6370: 2c 20 20 32 31 2c 20 20 32 32 2c 20 20 32 33 2c  ,  21,  22,  23,
6380: 20 20 32 34 2c 20 20 32 35 2c 20 20 32 36 2c 20    24,  25,  26, 
6390: 20 32 37 2c 20 20 32 38 2c 20 20 32 39 2c 0a 20   27,  28,  29,. 
63a0: 20 20 20 20 33 30 2c 20 20 33 31 2c 20 20 33 32      30,  31,  32
63b0: 2c 20 20 33 33 2c 20 20 33 34 2c 20 20 33 35 2c  ,  33,  34,  35,
63c0: 20 20 33 36 2c 20 20 33 37 2c 20 20 33 38 2c 20    36,  37,  38, 
63d0: 20 33 39 2c 20 20 34 30 2c 20 20 34 31 2c 20 20   39,  40,  41,  
63e0: 34 32 2c 20 20 34 33 2c 20 20 34 34 2c 0a 20 20  42,  43,  44,.  
63f0: 20 20 20 34 35 2c 20 20 34 36 2c 20 20 34 37 2c     45,  46,  47,
6400: 20 20 34 38 2c 20 20 34 39 2c 20 20 35 30 2c 20    48,  49,  50, 
6410: 20 35 31 2c 20 20 35 32 2c 20 20 35 33 2c 20 20   51,  52,  53,  
6420: 35 34 2c 20 20 35 35 2c 20 20 35 36 2c 20 20 35  54,  55,  56,  5
6430: 37 2c 20 20 35 38 2c 20 20 35 39 2c 0a 20 20 20  7,  58,  59,.   
6440: 20 20 36 30 2c 20 20 36 31 2c 20 20 36 32 2c 20    60,  61,  62, 
6450: 20 36 33 2c 20 20 36 34 2c 20 20 36 35 2c 20 20   63,  64,  65,  
6460: 36 36 2c 20 20 36 37 2c 20 20 36 38 2c 20 20 36  66,  67,  68,  6
6470: 39 2c 20 20 37 30 2c 20 20 37 31 2c 20 20 37 32  9,  70,  71,  72
6480: 2c 20 20 37 33 2c 20 20 37 34 2c 0a 20 20 20 20  ,  73,  74,.    
6490: 20 37 35 2c 20 20 37 36 2c 20 20 37 37 2c 20 20   75,  76,  77,  
64a0: 37 38 2c 20 20 37 39 2c 20 20 38 30 2c 20 20 38  78,  79,  80,  8
64b0: 31 2c 20 20 38 32 2c 20 20 38 33 2c 20 20 38 34  1,  82,  83,  84
64c0: 2c 20 20 38 35 2c 20 20 38 36 2c 20 20 38 37 2c  ,  85,  86,  87,
64d0: 20 20 38 38 2c 20 20 38 39 2c 0a 20 20 20 20 20    88,  89,.     
64e0: 39 30 2c 20 20 39 31 2c 20 20 39 32 2c 20 20 39  90,  91,  92,  9
64f0: 33 2c 20 20 39 34 2c 20 20 39 35 2c 20 20 39 36  3,  94,  95,  96
6500: 2c 20 20 39 37 2c 20 20 39 38 2c 20 20 39 39 2c  ,  97,  98,  99,
6510: 20 31 30 30 2c 20 31 30 31 2c 20 31 30 32 2c 20   100, 101, 102, 
6520: 31 30 33 2c 20 31 30 34 2c 0a 20 20 20 20 31 30  103, 104,.    10
6530: 35 2c 20 31 30 36 2c 20 31 30 37 2c 20 31 30 38  5, 106, 107, 108
6540: 2c 20 31 30 39 2c 20 31 31 30 2c 20 31 31 31 2c  , 109, 110, 111,
6550: 20 31 31 32 2c 20 31 31 33 2c 20 31 31 34 2c 20   112, 113, 114, 
6560: 31 31 35 2c 20 31 31 36 2c 20 31 31 37 2c 20 31  115, 116, 117, 1
6570: 31 38 2c 20 31 31 39 2c 0a 20 20 20 20 31 32 30  18, 119,.    120
6580: 2c 20 31 32 31 2c 20 31 32 32 2c 20 31 32 33 2c  , 121, 122, 123,
6590: 20 31 32 34 2c 20 31 32 35 2c 20 31 32 36 2c 20   124, 125, 126, 
65a0: 31 32 37 2c 20 31 32 38 2c 20 31 32 39 2c 20 31  127, 128, 129, 1
65b0: 33 30 2c 20 31 33 31 2c 20 31 33 32 2c 20 31 33  30, 131, 132, 13
65c0: 33 2c 20 31 33 34 2c 0a 20 20 20 20 31 33 35 2c  3, 134,.    135,
65d0: 20 31 33 36 2c 20 31 33 37 2c 20 31 33 38 2c 20   136, 137, 138, 
65e0: 31 33 39 2c 20 31 34 30 2c 20 31 34 31 2c 20 31  139, 140, 141, 1
65f0: 34 32 2c 20 31 34 33 2c 20 31 34 34 2c 20 31 34  42, 143, 144, 14
6600: 35 2c 20 31 34 36 2c 20 31 34 37 2c 20 31 34 38  5, 146, 147, 148
6610: 2c 20 31 34 39 2c 0a 20 20 20 20 31 35 30 2c 20  , 149,.    150, 
6620: 31 35 31 2c 20 31 35 32 2c 20 31 35 33 2c 20 31  151, 152, 153, 1
6630: 35 34 2c 20 31 35 35 2c 20 31 35 36 2c 20 31 35  54, 155, 156, 15
6640: 37 2c 20 31 35 38 2c 20 31 35 39 2c 20 31 36 30  7, 158, 159, 160
6650: 2c 20 31 36 31 2c 20 31 36 32 2c 20 31 36 33 2c  , 161, 162, 163,
6660: 20 31 36 34 2c 0a 20 20 20 20 31 36 35 2c 20 31   164,.    165, 1
6670: 36 36 2c 20 31 36 37 2c 20 31 36 38 2c 20 31 36  66, 167, 168, 16
6680: 39 2c 20 31 37 30 2c 20 31 37 31 2c 20 31 37 32  9, 170, 171, 172
6690: 2c 20 31 37 33 2c 20 31 37 34 2c 20 31 37 35 2c  , 173, 174, 175,
66a0: 20 31 37 36 2c 20 31 37 37 2c 20 31 37 38 2c 20   176, 177, 178, 
66b0: 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 20 31 38  179,.    180, 18
66c0: 31 2c 20 31 38 32 2c 20 31 38 33 2c 20 31 38 34  1, 182, 183, 184
66d0: 2c 20 31 38 35 2c 20 31 38 36 2c 20 31 38 37 2c  , 185, 186, 187,
66e0: 20 31 38 38 2c 20 31 38 39 2c 20 31 39 30 2c 20   188, 189, 190, 
66f0: 31 39 31 2c 20 20 20 30 2c 20 20 20 31 2c 20 20  191,   0,   1,  
6700: 20 32 2c 0a 20 20 20 20 20 20 33 2c 20 20 20 34   2,.      3,   4
6710: 2c 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37 2c  ,   5,   6,   7,
6720: 20 20 20 38 2c 20 20 20 39 2c 20 20 31 30 2c 20     8,   9,  10, 
6730: 20 31 31 2c 20 20 31 32 2c 20 20 31 33 2c 20 20   11,  12,  13,  
6740: 31 34 2c 20 20 31 35 2c 20 20 31 36 2c 20 20 31  14,  15,  16,  1
6750: 37 2c 0a 20 20 20 20 20 31 38 2c 20 20 31 39 2c  7,.     18,  19,
6760: 20 20 32 30 2c 20 20 32 31 2c 20 20 32 32 2c 20    20,  21,  22, 
6770: 20 32 33 2c 20 20 32 34 2c 20 20 32 35 2c 20 20   23,  24,  25,  
6780: 32 36 2c 20 20 32 37 2c 20 20 32 38 2c 20 20 32  26,  27,  28,  2
6790: 39 2c 20 20 33 30 2c 20 20 33 31 2c 20 20 20 30  9,  30,  31,   0
67a0: 2c 0a 20 20 20 20 20 20 31 2c 20 20 20 32 2c 20  ,.      1,   2, 
67b0: 20 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20    3,   4,   5,  
67c0: 20 36 2c 20 20 20 37 2c 20 20 20 38 2c 20 20 20   6,   7,   8,   
67d0: 39 2c 20 20 31 30 2c 20 20 31 31 2c 20 20 31 32  9,  10,  11,  12
67e0: 2c 20 20 31 33 2c 20 20 31 34 2c 20 20 31 35 2c  ,  13,  14,  15,
67f0: 0a 20 20 20 20 20 20 30 2c 20 20 20 31 2c 20 20  .      0,   1,  
6800: 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20 20 20   2,   3,   4,   
6810: 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20 20 30  5,   6,   7,   0
6820: 2c 20 20 20 31 2c 20 20 20 32 2c 20 20 20 33 2c  ,   1,   2,   3,
6830: 20 20 20 30 2c 20 20 20 31 2c 20 32 35 34 2c 0a     0,   1, 254,.
6840: 20 20 20 20 32 35 35 2c 0a 20 20 7d 3b 0a 20 20      255,.  };.  
6850: 63 20 3d 20 69 6e 69 74 56 61 6c 5b 2a 28 7a 2b  c = initVal[*(z+
6860: 2b 29 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 30  +)];.  while( (0
6870: 78 63 30 26 2a 7a 29 3d 3d 30 78 38 30 20 29 7b  xc0&*z)==0x80 ){
6880: 0a 20 20 20 20 63 20 3d 20 28 63 3c 3c 36 29 20  .    c = (c<<6) 
6890: 7c 20 28 30 78 33 66 26 2a 28 7a 2b 2b 29 29 3b  | (0x3f&*(z++));
68a0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 63 3b  .  }.  return c;
68b0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
68c0: 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 55 54 46   Compare two UTF
68d0: 2d 38 20 73 74 72 69 6e 67 73 20 66 6f 72 20 65  -8 strings for e
68e0: 71 75 61 6c 69 74 79 20 77 68 65 72 65 20 74 68  quality where th
68f0: 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 63  e first string c
6900: 61 6e 0a 2a 2a 20 70 6f 74 65 6e 74 69 61 6c 6c  an.** potentiall
6910: 79 20 62 65 20 61 20 22 67 6c 6f 62 22 20 65 78  y be a "glob" ex
6920: 70 72 65 73 73 69 6f 6e 2e 20 20 52 65 74 75 72  pression.  Retur
6930: 6e 20 74 72 75 65 20 28 31 29 20 69 66 20 74 68  n true (1) if th
6940: 65 79 0a 2a 2a 20 61 72 65 20 74 68 65 20 73 61  ey.** are the sa
6950: 6d 65 20 61 6e 64 20 66 61 6c 73 65 20 28 30 29  me and false (0)
6960: 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
6970: 66 65 72 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 47 6c  ferent..**.** Gl
6980: 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a 2a 2a  obbing rules:.**
6990: 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20 20 20 20  .**      '*'    
69a0: 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79 20 73     Matches any s
69b0: 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
69c0: 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
69d0: 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27  rs..**.**      '
69e0: 3f 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73  ?'       Matches
69f0: 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 63 68 61   exactly one cha
6a00: 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 20 20  racter..**.**   
6a10: 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d 61 74    [...]      Mat
6a20: 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61 63 74  ches one charact
6a30: 65 72 20 66 72 6f 6d 20 74 68 65 20 65 6e 63 6c  er from the encl
6a40: 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a 2a 20  osed list of.** 
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6a60: 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a  haracters..**.**
6a70: 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20 20 20       [^...]     
6a80: 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72  Matches one char
6a90: 61 63 74 65 72 20 6e 6f 74 20 69 6e 20 74 68 65  acter not in the
6aa0: 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 2e 0a   enclosed list..
6ab0: 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 5b  **.** With the [
6ac0: 2e 2e 2e 5d 20 61 6e 64 20 5b 5e 2e 2e 2e 5d 20  ...] and [^...] 
6ad0: 6d 61 74 63 68 69 6e 67 2c 20 61 20 27 5d 27 20  matching, a ']' 
6ae0: 63 68 61 72 61 63 74 65 72 20 63 61 6e 20 62 65  character can be
6af0: 20 69 6e 63 6c 75 64 65 64 0a 2a 2a 20 69 6e 20   included.** in 
6b00: 74 68 65 20 6c 69 73 74 20 62 79 20 6d 61 6b 69  the list by maki
6b10: 6e 67 20 69 74 20 74 68 65 20 66 69 72 73 74 20  ng it the first 
6b20: 63 68 61 72 61 63 74 65 72 20 61 66 74 65 72 20  character after 
6b30: 27 5b 27 20 6f 72 20 27 5e 27 2e 20 20 41 0a 2a  '[' or '^'.  A.*
6b40: 2a 20 72 61 6e 67 65 20 6f 66 20 63 68 61 72 61  * range of chara
6b50: 63 74 65 72 73 20 63 61 6e 20 62 65 20 73 70 65  cters can be spe
6b60: 63 69 66 69 65 64 20 75 73 69 6e 67 20 27 2d 27  cified using '-'
6b70: 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 2a 2a 20 22  .  Example:.** "
6b80: 5b 61 2d 7a 5d 22 20 6d 61 74 63 68 65 73 20 61  [a-z]" matches a
6b90: 6e 79 20 73 69 6e 67 6c 65 20 6c 6f 77 65 72 2d  ny single lower-
6ba0: 63 61 73 65 20 6c 65 74 74 65 72 2e 20 20 54 6f  case letter.  To
6bb0: 20 6d 61 74 63 68 20 61 20 27 2d 27 2c 20 6d 61   match a '-', ma
6bc0: 6b 65 0a 2a 2a 20 69 74 20 74 68 65 20 6c 61 73  ke.** it the las
6bd0: 74 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  t character in t
6be0: 68 65 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  he list..**.** T
6bf0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75  his routine is u
6c00: 73 75 61 6c 6c 79 20 71 75 69 63 6b 2c 20 62 75  sually quick, bu
6c10: 74 20 63 61 6e 20 62 65 20 4e 2a 2a 32 20 69 6e  t can be N**2 in
6c20: 20 74 68 65 20 77 6f 72 73 74 20 63 61 73 65 2e   the worst case.
6c30: 0a 2a 2a 0a 2a 2a 20 48 69 6e 74 73 3a 20 74 6f  .**.** Hints: to
6c40: 20 6d 61 74 63 68 20 27 2a 27 20 6f 72 20 27 3f   match '*' or '?
6c50: 27 2c 20 70 75 74 20 74 68 65 6d 20 69 6e 20 22  ', put them in "
6c60: 5b 5d 22 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  []".  Like this:
6c70: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 61  .**.**         a
6c80: 62 63 5b 2a 5d 78 79 7a 20 20 20 20 20 20 20 20  bc[*]xyz        
6c90: 4d 61 74 63 68 65 73 20 22 61 62 63 2a 78 79 7a  Matches "abc*xyz
6ca0: 22 20 6f 6e 6c 79 0a 2a 2f 0a 69 6e 74 20 0a 73  " only.*/.int .s
6cb0: 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72  qlite3GlobCompar
6cc0: 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
6cd0: 20 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 2c   char *zPattern,
6ce0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
6cf0: 63 68 61 72 20 2a 7a 53 74 72 69 6e 67 29 7b 0a  char *zString){.
6d00: 20 20 72 65 67 69 73 74 65 72 20 69 6e 74 20 63    register int c
6d10: 3b 0a 20 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a  ;.  int invert;.
6d20: 20 20 69 6e 74 20 73 65 65 6e 3b 0a 20 20 69 6e    int seen;.  in
6d30: 74 20 63 32 3b 0a 0a 20 20 77 68 69 6c 65 28 20  t c2;..  while( 
6d40: 28 63 20 3d 20 2a 7a 50 61 74 74 65 72 6e 29 21  (c = *zPattern)!
6d50: 3d 30 20 29 7b 0a 20 20 20 20 73 77 69 74 63 68  =0 ){.    switch
6d60: 28 20 63 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ( c ){.      cas
6d70: 65 20 27 2a 27 3a 0a 20 20 20 20 20 20 20 20 77  e '*':.        w
6d80: 68 69 6c 65 28 20 28 63 3d 7a 50 61 74 74 65 72  hile( (c=zPatter
6d90: 6e 5b 31 5d 29 20 3d 3d 20 27 2a 27 20 7c 7c 20  n[1]) == '*' || 
6da0: 63 20 3d 3d 20 27 3f 27 20 29 7b 0a 20 20 20 20  c == '?' ){.    
6db0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 3f 27        if( c=='?'
6dc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
6dd0: 69 66 28 20 2a 7a 53 74 72 69 6e 67 3d 3d 30 20  if( *zString==0 
6de0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
6df0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 4e 65          sqliteNe
6e00: 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67 29 3b  xtChar(zString);
6e10: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
6e20: 20 20 20 20 20 20 20 7a 50 61 74 74 65 72 6e 2b         zPattern+
6e30: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
6e40: 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20       if( c==0 ) 
6e50: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20  return 1;.      
6e60: 20 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a    if( c=='[' ){.
6e70: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
6e80: 20 2a 7a 53 74 72 69 6e 67 20 26 26 20 73 71 6c   *zString && sql
6e90: 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72 65 28  ite3GlobCompare(
6ea0: 26 7a 50 61 74 74 65 72 6e 5b 31 5d 2c 7a 53 74  &zPattern[1],zSt
6eb0: 72 69 6e 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ring)==0 ){.    
6ec0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 4e 65          sqliteNe
6ed0: 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67 29 3b  xtChar(zString);
6ee0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
6ef0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2a 7a         return *z
6f00: 53 74 72 69 6e 67 21 3d 30 3b 0a 20 20 20 20 20  String!=0;.     
6f10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6f20: 20 20 20 20 77 68 69 6c 65 28 20 28 63 32 20 3d      while( (c2 =
6f30: 20 2a 7a 53 74 72 69 6e 67 29 21 3d 30 20 29 7b   *zString)!=0 ){
6f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69  .            whi
6f50: 6c 65 28 20 63 32 20 21 3d 20 30 20 26 26 20 63  le( c2 != 0 && c
6f60: 32 20 21 3d 20 63 20 29 7b 20 63 32 20 3d 20 2a  2 != c ){ c2 = *
6f70: 2b 2b 7a 53 74 72 69 6e 67 3b 20 7d 0a 20 20 20  ++zString; }.   
6f80: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d           if( c2=
6f90: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
6fa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73             if( s
6fb0: 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72  qlite3GlobCompar
6fc0: 65 28 26 7a 50 61 74 74 65 72 6e 5b 31 5d 2c 7a  e(&zPattern[1],z
6fd0: 53 74 72 69 6e 67 29 20 29 20 72 65 74 75 72 6e  String) ) return
6fe0: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
6ff0: 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28 7a  sqliteNextChar(z
7000: 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 20  String);.       
7010: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 72     }.          r
7020: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
7030: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27 3f   }.      case '?
7040: 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ': {.        if(
7050: 20 2a 7a 53 74 72 69 6e 67 3d 3d 30 20 29 20 72   *zString==0 ) r
7060: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
7070: 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28   sqliteNextChar(
7080: 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  zString);.      
7090: 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20    zPattern++;.  
70a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
70b0: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
70c0: 27 5b 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  '[': {.        i
70d0: 6e 74 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a  nt prior_c = 0;.
70e0: 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d 20 30          seen = 0
70f0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 76 65 72 74  ;.        invert
7100: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63 20   = 0;.        c 
7110: 3d 20 73 71 6c 69 74 65 43 68 61 72 56 61 6c 28  = sqliteCharVal(
7120: 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  zString);.      
7130: 20 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74    if( c==0 ) ret
7140: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 63  urn 0;.        c
7150: 32 20 3d 20 2a 2b 2b 7a 50 61 74 74 65 72 6e 3b  2 = *++zPattern;
7160: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d  .        if( c2=
7170: 3d 27 5e 27 20 29 7b 20 69 6e 76 65 72 74 20 3d  ='^' ){ invert =
7180: 20 31 3b 20 63 32 20 3d 20 2a 2b 2b 7a 50 61 74   1; c2 = *++zPat
7190: 74 65 72 6e 3b 20 7d 0a 20 20 20 20 20 20 20 20  tern; }.        
71a0: 69 66 28 20 63 32 3d 3d 27 5d 27 20 29 7b 0a 20  if( c2==']' ){. 
71b0: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d           if( c==
71c0: 27 5d 27 20 29 20 73 65 65 6e 20 3d 20 31 3b 0a  ']' ) seen = 1;.
71d0: 20 20 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a            c2 = *
71e0: 2b 2b 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20  ++zPattern;.    
71f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77 68      }.        wh
7200: 69 6c 65 28 20 28 63 32 20 3d 20 73 71 6c 69 74  ile( (c2 = sqlit
7210: 65 43 68 61 72 56 61 6c 28 7a 50 61 74 74 65 72  eCharVal(zPatter
7220: 6e 29 29 21 3d 30 20 26 26 20 63 32 21 3d 27 5d  n))!=0 && c2!=']
7230: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ' ){.          i
7240: 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20 7a 50  f( c2=='-' && zP
7250: 61 74 74 65 72 6e 5b 31 5d 21 3d 27 5d 27 20 26  attern[1]!=']' &
7260: 26 20 7a 50 61 74 74 65 72 6e 5b 31 5d 21 3d 30  & zPattern[1]!=0
7270: 20 26 26 20 70 72 69 6f 72 5f 63 3e 30 20 29 7b   && prior_c>0 ){
7280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 50 61  .            zPa
7290: 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  ttern++;.       
72a0: 20 20 20 20 20 63 32 20 3d 20 73 71 6c 69 74 65       c2 = sqlite
72b0: 43 68 61 72 56 61 6c 28 7a 50 61 74 74 65 72 6e  CharVal(zPattern
72c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
72d0: 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20 26 26  f( c>=prior_c &&
72e0: 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20 3d 20   c<=c2 ) seen = 
72f0: 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  1;.            p
7300: 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20  rior_c = 0;.    
7310: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
7320: 63 3d 3d 63 32 20 29 7b 0a 20 20 20 20 20 20 20  c==c2 ){.       
7330: 20 20 20 20 20 73 65 65 6e 20 3d 20 31 3b 0a 20       seen = 1;. 
7340: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6f 72             prior
7350: 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20 20 20  _c = c2;.       
7360: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7370: 20 20 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20        prior_c = 
7380: 63 32 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  c2;.          }.
7390: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
73a0: 4e 65 78 74 43 68 61 72 28 7a 50 61 74 74 65 72  NextChar(zPatter
73b0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  n);.        }.  
73c0: 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20        if( c2==0 
73d0: 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e 76 65 72  || (seen ^ inver
73e0: 74 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  t)==0 ) return 0
73f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
7400: 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e 67  NextChar(zString
7410: 29 3b 0a 20 20 20 20 20 20 20 20 7a 50 61 74 74  );.        zPatt
7420: 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 62  ern++;.        b
7430: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
7440: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
7450: 20 20 20 20 20 20 20 69 66 28 20 63 20 21 3d 20         if( c != 
7460: 2a 7a 53 74 72 69 6e 67 20 29 20 72 65 74 75 72  *zString ) retur
7470: 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 50 61  n 0;.        zPa
7480: 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  ttern++;.       
7490: 20 7a 53 74 72 69 6e 67 2b 2b 3b 0a 20 20 20 20   zString++;.    
74a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
74b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
74c0: 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e 67 3d 3d  eturn *zString==
74d0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70  0;.}../*.** Comp
74e0: 61 72 65 20 74 77 6f 20 55 54 46 2d 38 20 73 74  are two UTF-8 st
74f0: 72 69 6e 67 73 20 66 6f 72 20 65 71 75 61 6c 69  rings for equali
7500: 74 79 20 75 73 69 6e 67 20 74 68 65 20 22 4c 49  ty using the "LI
7510: 4b 45 22 20 6f 70 65 72 61 74 6f 72 20 6f 66 0a  KE" operator of.
7520: 2a 2a 20 53 51 4c 2e 20 20 54 68 65 20 27 25 27  ** SQL.  The '%'
7530: 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68   character match
7540: 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20  es any sequence 
7550: 6f 66 20 30 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20  of 0 or more.** 
7560: 63 68 61 72 61 63 74 65 72 73 20 61 6e 64 20 27  characters and '
7570: 5f 27 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73  _' matches any s
7580: 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e  ingle character.
7590: 20 20 43 61 73 65 20 69 73 0a 2a 2a 20 6e 6f 74    Case is.** not
75a0: 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
75b0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
75c0: 20 69 73 20 6a 75 73 74 20 61 6e 20 61 64 61 70   is just an adap
75d0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 71  tation of the sq
75e0: 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72 65  lite3GlobCompare
75f0: 28 29 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 61 62  ().** routine ab
7600: 6f 76 65 2e 0a 2a 2f 0a 69 6e 74 20 0a 73 71 6c  ove..*/.int .sql
7610: 69 74 65 33 4c 69 6b 65 43 6f 6d 70 61 72 65 28  ite3LikeCompare(
7620: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
7630: 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 2c 20 63  har *zPattern, c
7640: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
7650: 61 72 20 2a 7a 53 74 72 69 6e 67 29 7b 0a 20 20  ar *zString){.  
7660: 72 65 67 69 73 74 65 72 20 69 6e 74 20 63 3b 0a  register int c;.
7670: 20 20 69 6e 74 20 63 32 3b 0a 0a 20 20 77 68 69    int c2;..  whi
7680: 6c 65 28 20 28 63 20 3d 20 55 70 70 65 72 54 6f  le( (c = UpperTo
7690: 4c 6f 77 65 72 5b 2a 7a 50 61 74 74 65 72 6e 5d  Lower[*zPattern]
76a0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 77 69 74  )!=0 ){.    swit
76b0: 63 68 28 20 63 20 29 7b 0a 20 20 20 20 20 20 63  ch( c ){.      c
76c0: 61 73 65 20 27 25 27 3a 20 7b 0a 20 20 20 20 20  ase '%': {.     
76d0: 20 20 20 77 68 69 6c 65 28 20 28 63 3d 7a 50 61     while( (c=zPa
76e0: 74 74 65 72 6e 5b 31 5d 29 20 3d 3d 20 27 25 27  ttern[1]) == '%'
76f0: 20 7c 7c 20 63 20 3d 3d 20 27 5f 27 20 29 7b 0a   || c == '_' ){.
7700: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d            if( c=
7710: 3d 27 5f 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='_' ){.        
7720: 20 20 20 20 69 66 28 20 2a 7a 53 74 72 69 6e 67      if( *zString
7730: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
7740: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
7750: 74 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69  teNextChar(zStri
7760: 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ng);.          }
7770: 0a 20 20 20 20 20 20 20 20 20 20 7a 50 61 74 74  .          zPatt
7780: 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  ern++;.        }
7790: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d  .        if( c==
77a0: 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  0 ) return 1;.  
77b0: 20 20 20 20 20 20 63 20 3d 20 55 70 70 65 72 54        c = UpperT
77c0: 6f 4c 6f 77 65 72 5b 63 5d 3b 0a 20 20 20 20 20  oLower[c];.     
77d0: 20 20 20 77 68 69 6c 65 28 20 28 63 32 3d 55 70     while( (c2=Up
77e0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 7a 53 74 72  perToLower[*zStr
77f0: 69 6e 67 5d 29 21 3d 30 20 29 7b 0a 20 20 20 20  ing])!=0 ){.    
7800: 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 32 20        while( c2 
7810: 21 3d 20 30 20 26 26 20 63 32 20 21 3d 20 63 20  != 0 && c2 != c 
7820: 29 7b 20 63 32 20 3d 20 55 70 70 65 72 54 6f 4c  ){ c2 = UpperToL
7830: 6f 77 65 72 5b 2a 2b 2b 7a 53 74 72 69 6e 67 5d  ower[*++zString]
7840: 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ; }.          if
7850: 28 20 63 32 3d 3d 30 20 29 20 72 65 74 75 72 6e  ( c2==0 ) return
7860: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   0;.          if
7870: 28 20 73 71 6c 69 74 65 33 4c 69 6b 65 43 6f 6d  ( sqlite3LikeCom
7880: 70 61 72 65 28 26 7a 50 61 74 74 65 72 6e 5b 31  pare(&zPattern[1
7890: 5d 2c 7a 53 74 72 69 6e 67 29 20 29 20 72 65 74  ],zString) ) ret
78a0: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 20  urn 1;.         
78b0: 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28   sqliteNextChar(
78c0: 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  zString);.      
78d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
78e0: 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 0;.      }.  
78f0: 20 20 20 20 63 61 73 65 20 27 5f 27 3a 20 7b 0a      case '_': {.
7900: 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53 74          if( *zSt
7910: 72 69 6e 67 3d 3d 30 20 29 20 72 65 74 75 72 6e  ring==0 ) return
7920: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
7930: 74 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69  teNextChar(zStri
7940: 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 50 61  ng);.        zPa
7950: 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  ttern++;.       
7960: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
7970: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
7980: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 20 21  .        if( c !
7990: 3d 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  = UpperToLower[*
79a0: 7a 53 74 72 69 6e 67 5d 20 29 20 72 65 74 75 72  zString] ) retur
79b0: 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 50 61  n 0;.        zPa
79c0: 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  ttern++;.       
79d0: 20 7a 53 74 72 69 6e 67 2b 2b 3b 0a 20 20 20 20   zString++;.    
79e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
79f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
7a00: 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e 67 3d 3d  eturn *zString==
7a10: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e  0;.}../*.** Chan
7a20: 67 65 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  ge the sqlite.ma
7a30: 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  gic from SQLITE_
7a40: 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20 53 51  MAGIC_OPEN to SQ
7a50: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 2e  LITE_MAGIC_BUSY.
7a60: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65 72  .** Return an er
7a70: 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69  ror (non-zero) i
7a80: 66 20 74 68 65 20 6d 61 67 69 63 20 77 61 73 20  f the magic was 
7a90: 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  not SQLITE_MAGIC
7aa0: 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74 68  _OPEN.** when th
7ab0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61  is routine is ca
7ac0: 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  lled..**.** This
7ad0: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 61 74   routine is a at
7ae0: 74 65 6d 70 74 20 74 6f 20 64 65 74 65 63 74 20  tempt to detect 
7af0: 69 66 20 74 77 6f 20 74 68 72 65 61 64 73 20 75  if two threads u
7b00: 73 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 73  se the.** same s
7b10: 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72 20 61  qlite* pointer a
7b20: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
7b30: 20 20 54 68 65 72 65 20 69 73 20 61 20 72 61 63    There is a rac
7b40: 65 20 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 20  e .** condition 
7b50: 73 6f 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  so it is possibl
7b60: 65 20 74 68 61 74 20 74 68 65 20 65 72 72 6f 72  e that the error
7b70: 20 69 73 20 6e 6f 74 20 64 65 74 65 63 74 65 64   is not detected
7b80: 2e 0a 2a 2a 20 42 75 74 20 75 73 75 61 6c 6c 79  ..** But usually
7b90: 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 77 69 6c   the problem wil
7ba0: 6c 20 62 65 20 73 65 65 6e 2e 20 20 54 68 65 20  l be seen.  The 
7bb0: 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 61  result will be a
7bc0: 6e 0a 2a 2a 20 65 72 72 6f 72 20 77 68 69 63 68  n.** error which
7bd0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7be0: 64 65 62 75 67 20 74 68 65 20 61 70 70 6c 69 63  debug the applic
7bf0: 61 74 69 6f 6e 20 74 68 61 74 20 69 73 0a 2a 2a  ation that is.**
7c00: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69 6e   using SQLite in
7c10: 63 6f 72 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a  correctly..**.**
7c20: 20 54 69 63 6b 65 74 20 23 32 30 32 3a 20 20 49   Ticket #202:  I
7c30: 66 20 64 62 2d 3e 6d 61 67 69 63 20 69 73 20 6e  f db->magic is n
7c40: 6f 74 20 61 20 76 61 6c 69 64 20 6f 70 65 6e 20  ot a valid open 
7c50: 76 61 6c 75 65 2c 20 74 61 6b 65 20 63 61 72 65  value, take care
7c60: 20 6e 6f 74 0a 2a 2a 20 74 6f 20 6d 6f 64 69 66   not.** to modif
7c70: 79 20 74 68 65 20 64 62 20 73 74 72 75 63 74 75  y the db structu
7c80: 72 65 20 61 74 20 61 6c 6c 2e 20 20 49 74 20 63  re at all.  It c
7c90: 6f 75 6c 64 20 62 65 20 74 68 61 74 20 64 62 20  ould be that db 
7ca0: 69 73 20 61 20 73 74 61 6c 65 0a 2a 2a 20 70 6f  is a stale.** po
7cb0: 69 6e 74 65 72 2e 20 20 49 6e 20 6f 74 68 65 72  inter.  In other
7cc0: 20 77 6f 72 64 73 2c 20 69 74 20 63 6f 75 6c 64   words, it could
7cd0: 20 62 65 20 74 68 61 74 20 74 68 65 72 65 20 68   be that there h
7ce0: 61 73 20 62 65 65 6e 20 61 20 70 72 69 6f 72 0a  as been a prior.
7cf0: 2a 2a 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74  ** call to sqlit
7d00: 65 33 5f 63 6c 6f 73 65 28 64 62 29 20 61 6e 64  e3_close(db) and
7d10: 20 64 62 20 68 61 73 20 62 65 65 6e 20 64 65 61   db has been dea
7d20: 6c 6c 6f 63 61 74 65 64 2e 20 20 41 6e 64 20 77  llocated.  And w
7d30: 65 20 64 6f 0a 2a 2a 20 6e 6f 74 20 77 61 6e 74  e do.** not want
7d40: 20 74 6f 20 77 72 69 74 65 20 69 6e 74 6f 20 64   to write into d
7d50: 65 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72  eallocated memor
7d60: 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  y..*/.int sqlite
7d70: 33 53 61 66 65 74 79 4f 6e 28 73 71 6c 69 74 65  3SafetyOn(sqlite
7d80: 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d   *db){.  if( db-
7d90: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
7da0: 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20  AGIC_OPEN ){.   
7db0: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
7dc0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a  ITE_MAGIC_BUSY;.
7dd0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
7de0: 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61  }else if( db->ma
7df0: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
7e00: 43 5f 42 55 53 59 20 7c 7c 20 64 62 2d 3e 6d 61  C_BUSY || db->ma
7e10: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
7e20: 43 5f 45 52 52 4f 52 0a 20 20 20 20 20 20 20 20  C_ERROR.        
7e30: 20 20 20 20 20 7c 7c 20 64 62 2d 3e 77 61 6e 74       || db->want
7e40: 5f 74 6f 5f 63 6c 6f 73 65 20 29 7b 0a 20 20 20  _to_close ){.   
7e50: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
7e60: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b  ITE_MAGIC_ERROR;
7e70: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
7e80: 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75  = SQLITE_Interru
7e90: 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  pt;.  }.  return
7ea0: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61   1;.}../*.** Cha
7eb0: 6e 67 65 20 74 68 65 20 6d 61 67 69 63 20 66 72  nge the magic fr
7ec0: 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  om SQLITE_MAGIC_
7ed0: 42 55 53 59 20 74 6f 20 53 51 4c 49 54 45 5f 4d  BUSY to SQLITE_M
7ee0: 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20 52 65  AGIC_OPEN..** Re
7ef0: 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e  turn an error (n
7f00: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
7f10: 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51  magic was not SQ
7f20: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 0a  LITE_MAGIC_BUSY.
7f30: 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75  ** when this rou
7f40: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a  tine is called..
7f50: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  */.int sqlite3Sa
7f60: 66 65 74 79 4f 66 66 28 73 71 6c 69 74 65 20 2a  fetyOff(sqlite *
7f70: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  db){.  if( db->m
7f80: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
7f90: 49 43 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 64  IC_BUSY ){.    d
7fa0: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
7fb0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20  E_MAGIC_OPEN;.  
7fc0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
7fd0: 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69  lse if( db->magi
7fe0: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
7ff0: 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67 69  OPEN || db->magi
8000: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
8010: 45 52 52 4f 52 0a 20 20 20 20 20 20 20 20 20 20  ERROR.          
8020: 20 20 20 7c 7c 20 64 62 2d 3e 77 61 6e 74 5f 74     || db->want_t
8030: 6f 5f 63 6c 6f 73 65 20 29 7b 0a 20 20 20 20 64  o_close ){.    d
8040: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
8050: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
8060: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
8070: 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74  SQLITE_Interrupt
8080: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31  ;.  }.  return 1
8090: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  ;.}../*.** Check
80a0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65   to make sure we
80b0: 20 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e 74   are not current
80c0: 6c 79 20 65 78 65 63 75 74 69 6e 67 20 61 6e 20  ly executing an 
80d0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a  sqlite3_exec()..
80e0: 2a 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72  ** If we are cur
80f0: 72 65 6e 74 6c 79 20 69 6e 20 61 6e 20 73 71 6c  rently in an sql
8100: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 72 65 74  ite3_exec(), ret
8110: 75 72 6e 20 74 72 75 65 20 61 6e 64 20 73 65 74  urn true and set
8120: 0a 2a 2a 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  .** sqlite.magic
8130: 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43   to SQLITE_MAGIC
8140: 5f 45 52 52 4f 52 2e 20 20 54 68 69 73 20 77 69  _ERROR.  This wi
8150: 6c 6c 20 63 61 75 73 65 20 61 20 63 6f 6d 70 6c  ll cause a compl
8160: 65 74 65 0a 2a 2a 20 73 68 75 74 64 6f 77 6e 20  ete.** shutdown 
8170: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
8180: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
8190: 69 6e 65 20 69 73 20 75 73 65 64 20 74 6f 20 74  ine is used to t
81a0: 72 79 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ry to detect whe
81b0: 6e 20 41 50 49 20 72 6f 75 74 69 6e 65 73 20 61  n API routines a
81c0: 72 65 20 63 61 6c 6c 65 64 0a 2a 2a 20 61 74 20  re called.** at 
81d0: 74 68 65 20 77 72 6f 6e 67 20 74 69 6d 65 20 6f  the wrong time o
81e0: 72 20 69 6e 20 74 68 65 20 77 72 6f 6e 67 20 73  r in the wrong s
81f0: 65 71 75 65 6e 63 65 2e 0a 2a 2f 0a 69 6e 74 20  equence..*/.int 
8200: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
8210: 63 6b 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  ck(sqlite *db){.
8220: 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65 21    if( db->pVdbe!
8230: 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  =0 ){.    db->ma
8240: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
8250: 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 65  IC_ERROR;.    re
8260: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65  turn 1;.  }.  re
8270: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
8280: 20 54 68 65 20 76 61 72 69 61 62 6c 65 2d 6c 65   The variable-le
8290: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 65 6e 63  ngth integer enc
82a0: 6f 64 69 6e 67 20 69 73 20 61 73 20 66 6f 6c 6c  oding is as foll
82b0: 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a  ows:.**.** KEY:.
82c0: 2a 2a 20 20 20 20 20 20 20 20 20 41 20 3d 20 30  **         A = 0
82d0: 78 78 78 78 78 78 78 20 20 20 20 37 20 62 69 74  xxxxxxx    7 bit
82e0: 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e  s of data and on
82f0: 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20  e flag bit.**   
8300: 20 20 20 20 20 20 42 20 3d 20 31 78 78 78 78 78        B = 1xxxxx
8310: 78 78 20 20 20 20 37 20 62 69 74 73 20 6f 66 20  xx    7 bits of 
8320: 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61  data and one fla
8330: 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20  g bit.**        
8340: 20 43 20 3d 20 78 78 78 78 78 78 78 78 20 20 20   C = xxxxxxxx   
8350: 20 38 20 62 69 74 73 20 6f 66 20 64 61 74 61 0a   8 bits of data.
8360: 2a 2a 0a 2a 2a 20 20 37 20 62 69 74 73 20 2d 20  **.**  7 bits - 
8370: 41 0a 2a 2a 20 31 34 20 62 69 74 73 20 2d 20 42  A.** 14 bits - B
8380: 41 0a 2a 2a 20 32 31 20 62 69 74 73 20 2d 20 42  A.** 21 bits - B
8390: 42 41 0a 2a 2a 20 32 38 20 62 69 74 73 20 2d 20  BA.** 28 bits - 
83a0: 42 42 42 41 0a 2a 2a 20 33 35 20 62 69 74 73 20  BBBA.** 35 bits 
83b0: 2d 20 42 42 42 42 41 0a 2a 2a 20 34 32 20 62 69  - BBBBA.** 42 bi
83c0: 74 73 20 2d 20 42 42 42 42 42 41 0a 2a 2a 20 34  ts - BBBBBA.** 4
83d0: 39 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 41  9 bits - BBBBBBA
83e0: 0a 2a 2a 20 35 36 20 62 69 74 73 20 2d 20 42 42  .** 56 bits - BB
83f0: 42 42 42 42 42 41 0a 2a 2a 20 36 34 20 62 69 74  BBBBBA.** 64 bit
8400: 73 20 2d 20 42 42 42 42 42 42 42 42 43 0a 2a 2f  s - BBBBBBBBC.*/
8410: 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ../*.** Write 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 74  length integer t
8440: 6f 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e  o memory startin
8450: 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54 68  g at p[0]..** Th
8460: 65 20 6c 65 6e 67 74 68 20 6f 66 20 64 61 74 61  e length of data
8470: 20 77 72 69 74 65 20 77 69 6c 6c 20 62 65 20 62   write will be b
8480: 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62  etween 1 and 9 b
8490: 79 74 65 73 2e 20 20 54 68 65 20 6e 75 6d 62 65  ytes.  The numbe
84a0: 72 0a 2a 2a 20 6f 66 20 62 79 74 65 73 20 77 72  r.** of bytes wr
84b0: 69 74 74 65 6e 20 69 73 20 72 65 74 75 72 6e 65  itten is returne
84c0: 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72 69 61  d..**.** A varia
84d0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
84e0: 65 72 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  er consists of t
84f0: 68 65 20 6c 6f 77 65 72 20 37 20 62 69 74 73 20  he lower 7 bits 
8500: 6f 66 20 65 61 63 68 20 62 79 74 65 0a 2a 2a 20  of each byte.** 
8510: 66 6f 72 20 61 6c 6c 20 62 79 74 65 73 20 74 68  for all bytes th
8520: 61 74 20 68 61 76 65 20 74 68 65 20 38 74 68 20  at have the 8th 
8530: 62 69 74 20 73 65 74 20 61 6e 64 20 6f 6e 65 20  bit set and one 
8540: 62 79 74 65 20 77 69 74 68 20 74 68 65 20 38 74  byte with the 8t
8550: 68 0a 2a 2a 20 62 69 74 20 63 6c 65 61 72 2e 20  h.** bit clear. 
8560: 20 45 78 63 65 70 74 2c 20 69 66 20 77 65 20 67   Except, if we g
8570: 65 74 20 74 6f 20 74 68 65 20 39 74 68 20 62 79  et to the 9th by
8580: 74 65 2c 20 69 74 20 73 74 6f 72 65 73 20 74 68  te, it stores th
8590: 65 20 66 75 6c 6c 0a 2a 2a 20 38 20 62 69 74 73  e full.** 8 bits
85a0: 20 61 6e 64 20 69 73 20 74 68 65 20 6c 61 73 74   and is the last
85b0: 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   byte..*/.int sq
85c0: 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
85d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
85e0: 20 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69   u64 v){.  int i
85f0: 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20 62 75 66  , j, n;.  u8 buf
8600: 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76 20 26 20  [10];.  if( v & 
8610: 30 78 66 66 30 30 30 30 30 30 30 30 30 30 30 30  0xff000000000000
8620: 30 30 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d  00 ){.    p[8] =
8630: 20 76 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b   v;.    v >>= 8;
8640: 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e  .    for(i=7; i>
8650: 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20  =0; i--){.      
8660: 70 5b 69 5d 20 3d 20 28 76 20 26 20 30 78 37 66  p[i] = (v & 0x7f
8670: 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 20 20  ) | 0x80;.      
8680: 76 20 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20  v >>= 7;.    }. 
8690: 20 20 20 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d     return 9;.  }
86a0: 20 20 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20      .  n = 0;.  
86b0: 64 6f 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d  do{.    buf[n++]
86c0: 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c 20   = (v & 0x7f) | 
86d0: 30 78 38 30 3b 0a 20 20 20 20 76 20 3e 3e 3d 20  0x80;.    v >>= 
86e0: 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d  7;.  }while( v!=
86f0: 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d  0 );.  buf[0] &=
8700: 20 30 78 37 66 3b 0a 20 20 61 73 73 65 72 74 28   0x7f;.  assert(
8710: 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69   n<=9 );.  for(i
8720: 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b  =0, j=n-1; j>=0;
8730: 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20   j--, i++){.    
8740: 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20  p[i] = buf[j];. 
8750: 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d   }.  return n;.}
8760: 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36  ../*.** Read a 6
8770: 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c  4-bit variable-l
8780: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66 72  ength integer fr
8790: 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69  om memory starti
87a0: 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52  ng at p[0]..** R
87b0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
87c0: 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e 20   of bytes read. 
87d0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73 74   The value is st
87e0: 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69  ored in *v..*/.i
87f0: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  nt sqlite3GetVar
8800: 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
8810: 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20  ed char *p, u64 
8820: 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20  *v){.  u32 x;.  
8830: 75 36 34 20 78 36 34 3b 0a 20 20 69 6e 74 20 6e  u64 x64;.  int n
8840: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
8850: 72 20 63 3b 0a 20 20 69 66 28 20 28 28 63 20 3d  r c;.  if( ((c =
8860: 20 70 5b 30 5d 29 20 26 20 30 78 38 30 29 3d 3d   p[0]) & 0x80)==
8870: 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b  0 ){.    *v = c;
8880: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
8890: 20 7d 0a 20 20 78 20 3d 20 63 20 26 20 30 78 37   }.  x = c & 0x7
88a0: 66 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  f;.  if( ((c = p
88b0: 5b 31 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [1]) & 0x80)==0 
88c0: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
88d0: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
88e0: 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 2;.  }.  x = 
88f0: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
8900: 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  );.  if( ((c = p
8910: 5b 32 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [2]) & 0x80)==0 
8920: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
8930: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
8940: 72 6e 20 33 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 3;.  }.  x = 
8950: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
8960: 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  );.  if( ((c = p
8970: 5b 33 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [3]) & 0x80)==0 
8980: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
8990: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
89a0: 72 6e 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20  rn 4;.  }.  x64 
89b0: 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78  = (x<<7) | (c&0x
89c0: 37 66 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20  7f);.  n = 4;.  
89d0: 64 6f 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b  do{.    c = p[n+
89e0: 2b 5d 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39  +];.    if( n==9
89f0: 20 29 7b 0a 20 20 20 20 20 20 78 36 34 20 3d 20   ){.      x64 = 
8a00: 28 78 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20  (x64<<8) | c;.  
8a10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
8a20: 0a 20 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c  .    x64 = (x64<
8a30: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
8a40: 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30    }while( (c & 0
8a50: 78 38 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20  x80)!=0 );.  *v 
8a60: 3d 20 78 36 34 3b 0a 20 20 72 65 74 75 72 6e 20  = x64;.  return 
8a70: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  n;.}../*.** Read
8a80: 20 61 20 33 32 2d 62 69 74 20 76 61 72 69 61 62   a 32-bit variab
8a90: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
8aa0: 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74  r from memory st
8ab0: 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a  arting at p[0]..
8ac0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
8ad0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
8ae0: 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ad.  The value i
8af0: 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a  s stored in *v..
8b00: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  */.int sqlite3Ge
8b10: 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
8b20: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70  unsigned char *p
8b30: 2c 20 75 33 32 20 2a 76 29 7b 0a 20 20 75 33 32  , u32 *v){.  u32
8b40: 20 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75   x;.  int n;.  u
8b50: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 3b 0a  nsigned char c;.
8b60: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 30 5d    if( ((c = p[0]
8b70: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
8b80: 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20 20      *v = c;.    
8b90: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
8ba0: 78 20 3d 20 63 20 26 20 30 78 37 66 3b 0a 20 20  x = c & 0x7f;.  
8bb0: 69 66 28 20 28 28 63 20 3d 20 70 5b 31 5d 29 20  if( ((c = p[1]) 
8bc0: 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20  & 0x80)==0 ){.  
8bd0: 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20    *v = (x<<7) | 
8be0: 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b  c;.    return 2;
8bf0: 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37  .  }.  x = (x<<7
8c00: 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20  ) | (c&0x7f);.  
8c10: 69 66 28 20 28 28 63 20 3d 20 70 5b 32 5d 29 20  if( ((c = p[2]) 
8c20: 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20  & 0x80)==0 ){.  
8c30: 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20    *v = (x<<7) | 
8c40: 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 33 3b  c;.    return 3;
8c50: 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37  .  }.  x = (x<<7
8c60: 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20  ) | (c&0x7f);.  
8c70: 69 66 28 20 28 28 63 20 3d 20 70 5b 33 5d 29 20  if( ((c = p[3]) 
8c80: 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20  & 0x80)==0 ){.  
8c90: 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20    *v = (x<<7) | 
8ca0: 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 34 3b  c;.    return 4;
8cb0: 0a 20 20 7d 0a 20 20 6e 20 3d 20 34 3b 0a 20 20  .  }.  n = 4;.  
8cc0: 64 6f 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c 3c  do{.    x = (x<<
8cd0: 37 29 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b 2b  7) | ((c = p[n++
8ce0: 5d 29 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69  ])&0x7f);.  }whi
8cf0: 6c 65 28 20 28 63 20 26 20 30 78 38 30 29 21 3d  le( (c & 0x80)!=
8d00: 30 20 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a 76  0 && n<9 );.  *v
8d10: 20 3d 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 6e   = x;.  return n
8d20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
8d30: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
8d40: 62 79 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20  bytes that will 
8d50: 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73 74 6f  be needed to sto
8d60: 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a 20  re the given.** 
8d70: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 0a  64-bit integer..
8d80: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  */.int sqlite3Va
8d90: 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b 0a  rintLen(u64 v){.
8da0: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 64    int i = 0;.  d
8db0: 6f 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20  o{.    i++;.    
8dc0: 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c  v >>= 7;.  }whil
8dd0: 65 28 20 76 21 3d 30 20 26 26 20 69 3c 39 20 29  e( v!=0 && i<9 )
8de0: 3b 0a 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a  ;.  return i;.}.
8df0: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
8e00: 78 54 6f 42 6c 6f 62 28 63 6f 6e 73 74 20 63 68  xToBlob(const ch
8e10: 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a  ar *z){.  char *
8e20: 7a 42 6c 6f 62 3b 0a 20 20 69 6e 74 20 69 3b 0a  zBlob;.  int i;.
8e30: 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e    int n = strlen
8e40: 28 7a 29 3b 0a 20 20 69 66 28 20 6e 25 32 20 29  (z);.  if( n%2 )
8e50: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 7a 42   return 0;..  zB
8e60: 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29 73 71  lob = (char *)sq
8e70: 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 2f 32 29 3b  liteMalloc(n/2);
8e80: 0a 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ..  for(i=0; i<n
8e90: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 75 38 20 63  ; i++){.    u8 c
8ea0: 3b 0a 0a 20 20 20 20 69 66 20 20 20 20 20 28 20  ;..    if     ( 
8eb0: 7a 5b 69 5d 3e 34 37 20 26 26 20 7a 5b 69 5d 3c  z[i]>47 && z[i]<
8ec0: 35 38 20 29 20 63 20 3d 20 28 7a 5b 69 5d 2d 34  58 ) c = (z[i]-4
8ed0: 38 29 3c 3c 34 3b 0a 20 20 20 20 65 6c 73 65 20  8)<<4;.    else 
8ee0: 69 66 28 20 7a 5b 69 5d 3e 36 34 20 26 26 20 7a  if( z[i]>64 && z
8ef0: 5b 69 5d 3c 37 31 20 29 20 63 20 3d 20 28 7a 5b  [i]<71 ) c = (z[
8f00: 69 5d 2d 35 35 29 3c 3c 34 3b 0a 20 20 20 20 65  i]-55)<<4;.    e
8f10: 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3e 39 36 20  lse if( z[i]>96 
8f20: 26 26 20 7a 5b 69 5d 3c 31 30 33 20 29 20 63 20  && z[i]<103 ) c 
8f30: 3d 20 28 7a 5b 69 5d 2d 38 37 29 3c 3c 34 3b 0a  = (z[i]-87)<<4;.
8f40: 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 20      else {.     
8f50: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 42 6c 6f   sqliteFree(zBlo
8f60: 62 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  b);.      return
8f70: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 2b   0;.    }.    i+
8f80: 2b 3b 0a 20 20 20 20 69 66 20 20 20 20 20 28 20  +;.    if     ( 
8f90: 7a 5b 69 5d 3e 34 37 20 26 26 20 7a 5b 69 5d 3c  z[i]>47 && z[i]<
8fa0: 35 38 20 29 20 63 20 2b 3d 20 28 7a 5b 69 5d 2d  58 ) c += (z[i]-
8fb0: 34 38 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66  48);.    else if
8fc0: 28 20 7a 5b 69 5d 3e 36 34 20 26 26 20 7a 5b 69  ( z[i]>64 && z[i
8fd0: 5d 3c 37 31 20 29 20 63 20 2b 3d 20 28 7a 5b 69  ]<71 ) c += (z[i
8fe0: 5d 2d 35 35 29 3b 0a 20 20 20 20 65 6c 73 65 20  ]-55);.    else 
8ff0: 69 66 28 20 7a 5b 69 5d 3e 39 36 20 26 26 20 7a  if( z[i]>96 && z
9000: 5b 69 5d 3c 31 30 33 20 29 20 63 20 2b 3d 20 28  [i]<103 ) c += (
9010: 7a 5b 69 5d 2d 38 37 29 3b 0a 20 20 20 20 65 6c  z[i]-87);.    el
9020: 73 65 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  se {.      sqlit
9030: 65 46 72 65 65 28 7a 42 6c 6f 62 29 3b 0a 20 20  eFree(zBlob);.  
9040: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
9050: 20 20 7d 0a 0a 20 20 20 20 7a 42 6c 6f 62 5b 69    }..    zBlob[i
9060: 2f 32 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 72  /2] = c;.  }.  r
9070: 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a     eturn zBlob;.}.