/ Hex Artifact Content
Login

Artifact 1f6e8febdd15be17e5ee867a7e015596d2bb62de:


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: 30 20 32 30 30 34 2f 30 35 2f 32 37 20 30 33 3a  0 2004/05/27 03:
0230: 31 32 3a 35 35 20 64 72 68 20 45 78 70 20 24 0a  12:55 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 73 74 72 6e 63 70 79 28 7a  );.    strncpy(z
2600: 52 65 73 75 6c 74 2c 20 7a 2c 20 6e 29 3b 0a 20  Result, z, n);. 
2610: 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20 6e 3b     zResult += n;
2620: 0a 20 20 7d 0a 20 20 2a 7a 52 65 73 75 6c 74 20  .  }.  *zResult 
2630: 3d 20 30 3b 0a 23 69 66 64 65 66 20 4d 45 4d 4f  = 0;.#ifdef MEMO
2640: 52 59 5f 44 45 42 55 47 0a 23 69 66 20 4d 45 4d  RY_DEBUG.#if MEM
2650: 4f 52 59 5f 44 45 42 55 47 3e 31 0a 20 20 66 70  ORY_DEBUG>1.  fp
2660: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 73 74  rintf(stderr,"st
2670: 72 69 6e 67 20 61 74 20 30 78 25 78 20 69 73 20  ring at 0x%x is 
2680: 25 73 5c 6e 22 2c 20 28 69 6e 74 29 2a 70 7a 2c  %s\n", (int)*pz,
2690: 20 2a 70 7a 29 3b 0a 23 65 6e 64 69 66 0a 23 65   *pz);.#endif.#e
26a0: 6e 64 69 66 0a 20 20 76 61 5f 65 6e 64 28 61 70  ndif.  va_end(ap
26b0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  );.}../*.** Set 
26c0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
26d0: 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65  error code and e
26e0: 72 72 6f 72 20 73 74 72 69 6e 67 20 66 6f 72 20  rror string for 
26f0: 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61  the sqlite.** ha
2700: 6e 64 6c 65 20 22 64 62 22 2e 20 54 68 65 20 65  ndle "db". The e
2710: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 65 74  rror code is set
2720: 20 74 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e 0a   to "err_code"..
2730: 2a 2a 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e  **.** If it is n
2740: 6f 74 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67 20  ot NULL, string 
2750: 7a 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65  zFormat specifie
2760: 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
2770: 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74 72  the.** error str
2780: 69 6e 67 20 69 6e 20 74 68 65 20 73 74 79 6c 65  ing in the style
2790: 20 6f 66 20 74 68 65 20 70 72 69 6e 74 66 20 66   of the printf f
27a0: 75 6e 63 74 69 6f 6e 73 3a 20 54 68 65 20 66 6f  unctions: The fo
27b0: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61  llowing.** forma
27c0: 74 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65  t characters are
27d0: 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20   allowed:.**.** 
27e0: 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e 73       %s      Ins
27f0: 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20  ert a string.** 
2800: 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20 73       %z      A s
2810: 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c  tring that shoul
2820: 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65 72  d be freed after
2830: 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20   use.**      %d 
2840: 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69       Insert an i
2850: 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25  nteger.**      %
2860: 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20  T      Insert a 
2870: 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53  token.**      %S
2880: 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68 65        Insert the
2890: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
28a0: 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a  f a SrcList.**.*
28b0: 2a 20 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61 6e  * zFormat and an
28c0: 79 20 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73 20  y string tokens 
28d0: 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20 61  that follow it a
28e0: 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  re assumed to be
28f0: 0a 2a 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20 55  .** encoded in U
2900: 54 46 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63  TF-8..**.** To c
2910: 6c 65 61 72 20 74 68 65 20 6d 6f 73 74 20 72 65  lear the most re
2920: 63 65 6e 74 20 65 72 72 6f 72 20 66 6f 72 20 73  cent error for s
2930: 6c 71 69 74 65 20 68 61 6e 64 6c 65 20 22 64 62  lqite handle "db
2940: 22 2c 20 73 71 6c 69 74 65 33 45 72 72 6f 72 0a  ", sqlite3Error.
2950: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c  ** should be cal
2960: 6c 65 64 20 77 69 74 68 20 65 72 72 5f 63 6f 64  led with err_cod
2970: 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
2980: 4f 4b 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20 73  OK and zFormat s
2990: 65 74 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  et.** to NULL..*
29a0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  /.void sqlite3Er
29b0: 72 6f 72 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  ror(sqlite *db, 
29c0: 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f  int err_code, co
29d0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
29e0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 2f 2a 20 46 72  t, ...){.  /* Fr
29f0: 65 65 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20  ee any existing 
2a00: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 2a  error message. *
2a10: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 7a 45 72 72  /.  if( db->zErr
2a20: 4d 73 67 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Msg ){.    sqlit
2a30: 65 46 72 65 65 28 64 62 2d 3e 7a 45 72 72 4d 73  eFree(db->zErrMs
2a40: 67 29 3b 0a 20 20 20 20 64 62 2d 3e 7a 45 72 72  g);.    db->zErr
2a50: 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  Msg = 0;.  }.  i
2a60: 66 28 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36  f( db->zErrMsg16
2a70: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72   ){.    sqliteFr
2a80: 65 65 28 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36  ee(db->zErrMsg16
2a90: 29 3b 0a 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d  );.    db->zErrM
2aa0: 73 67 31 36 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20  sg16 = 0;.  }.. 
2ab0: 20 2f 2a 20 53 65 74 20 74 68 65 20 6e 65 77 20   /* Set the new 
2ac0: 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65  error code and e
2ad0: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 2a 2f  rror message. */
2ae0: 0a 20 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d  .  db->errCode =
2af0: 20 65 72 72 5f 63 6f 64 65 3b 0a 20 20 69 66 28   err_code;.  if(
2b00: 20 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20   zFormat ){.    
2b10: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20 20  va_list ap;.    
2b20: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
2b30: 72 6d 61 74 29 3b 0a 20 20 20 20 64 62 2d 3e 7a  rmat);.    db->z
2b40: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
2b50: 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  VMPrintf(zFormat
2b60: 2c 20 61 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e  , ap);.    va_en
2b70: 64 28 61 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  d(ap);.  }.}../*
2b80: 0a 2a 2a 20 41 64 64 20 61 6e 20 65 72 72 6f 72  .** Add an error
2b90: 20 6d 65 73 73 61 67 65 20 74 6f 20 70 50 61 72   message to pPar
2ba0: 73 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64 20  se->zErrMsg and 
2bb0: 69 6e 63 72 65 6d 65 6e 74 20 70 50 61 72 73 65  increment pParse
2bc0: 2d 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20 66  ->nErr..** The f
2bd0: 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 74  ollowing formatt
2be0: 69 6e 67 20 63 68 61 72 61 63 74 65 72 73 20 61  ing characters a
2bf0: 72 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a  re allowed:.**.*
2c00: 2a 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49  *      %s      I
2c10: 6e 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a  nsert a string.*
2c20: 2a 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41  *      %z      A
2c30: 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f   string that sho
2c40: 75 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74  uld be freed aft
2c50: 65 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25  er use.**      %
2c60: 64 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e  d      Insert an
2c70: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20   integer.**     
2c80: 20 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20   %T      Insert 
2c90: 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20  a token.**      
2ca0: 25 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74  %S      Insert t
2cb0: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
2cc0: 20 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2f   of a SrcList.*/
2cd0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2ce0: 6f 72 4d 73 67 28 50 61 72 73 65 20 2a 70 50 61  orMsg(Parse *pPa
2cf0: 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  rse, const char 
2d00: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
2d10: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
2d20: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
2d30: 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 50 61    sqliteFree(pPa
2d40: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  rse->zErrMsg);. 
2d50: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2d60: 6f 72 6d 61 74 29 3b 0a 20 20 70 50 61 72 73 65  ormat);.  pParse
2d70: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
2d80: 74 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72  te3VMPrintf(zFor
2d90: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65  mat, ap);.  va_e
2da0: 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  nd(ap);.}../*.**
2db0: 20 43 6f 6e 76 65 72 74 20 61 6e 20 53 51 4c 2d   Convert an SQL-
2dc0: 73 74 79 6c 65 20 71 75 6f 74 65 64 20 73 74 72  style quoted str
2dd0: 69 6e 67 20 69 6e 74 6f 20 61 20 6e 6f 72 6d 61  ing into a norma
2de0: 6c 20 73 74 72 69 6e 67 20 62 79 20 72 65 6d 6f  l string by remo
2df0: 76 69 6e 67 0a 2a 2a 20 74 68 65 20 71 75 6f 74  ving.** the quot
2e00: 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 54  e characters.  T
2e10: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
2e20: 20 64 6f 6e 65 20 69 6e 2d 70 6c 61 63 65 2e 20   done in-place. 
2e30: 20 49 66 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74   If the.** input
2e40: 20 64 6f 65 73 20 6e 6f 74 20 62 65 67 69 6e 20   does not begin 
2e50: 77 69 74 68 20 61 20 71 75 6f 74 65 20 63 68 61  with a quote cha
2e60: 72 61 63 74 65 72 2c 20 74 68 65 6e 20 74 68 69  racter, then thi
2e70: 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20  s routine.** is 
2e80: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 32  a no-op..**.** 2
2e90: 30 30 32 2d 46 65 62 2d 31 34 3a 20 54 68 69 73  002-Feb-14: This
2ea0: 20 72 6f 75 74 69 6e 65 20 69 73 20 65 78 74 65   routine is exte
2eb0: 6e 64 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 4d  nded to remove M
2ec0: 53 2d 41 63 63 65 73 73 20 73 74 79 6c 65 0a 2a  S-Access style.*
2ed0: 2a 20 62 72 61 63 6b 65 74 73 20 66 72 6f 6d 20  * brackets from 
2ee0: 61 72 6f 75 6e 64 20 69 64 65 6e 74 69 66 65 72  around identifer
2ef0: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  s.  For example:
2f00: 20 20 22 5b 61 2d 62 2d 63 5d 22 20 62 65 63 6f    "[a-b-c]" beco
2f10: 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d 63 22 2e 0a  mes.** "a-b-c"..
2f20: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  */.void sqlite3D
2f30: 65 71 75 6f 74 65 28 63 68 61 72 20 2a 7a 29 7b  equote(char *z){
2f40: 0a 20 20 69 6e 74 20 71 75 6f 74 65 3b 0a 20 20  .  int quote;.  
2f50: 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 69 66 28 20  int i, j;.  if( 
2f60: 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  z==0 ) return;. 
2f70: 20 71 75 6f 74 65 20 3d 20 7a 5b 30 5d 3b 0a 20   quote = z[0];. 
2f80: 20 73 77 69 74 63 68 28 20 71 75 6f 74 65 20 29   switch( quote )
2f90: 7b 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a  {.    case '\'':
2fa0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
2fb0: 65 20 27 22 27 3a 20 20 20 62 72 65 61 6b 3b 0a  e '"':   break;.
2fc0: 20 20 20 20 63 61 73 65 20 27 5b 27 3a 20 20 20      case '[':   
2fd0: 71 75 6f 74 65 20 3d 20 27 5d 27 3b 20 20 62 72  quote = ']';  br
2fe0: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
2ff0: 3a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  :    return;.  }
3000: 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b  .  for(i=1, j=0;
3010: 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20   z[i]; i++){.   
3020: 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65   if( z[i]==quote
3030: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b   ){.      if( z[
3040: 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20  i+1]==quote ){. 
3050: 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20         z[j++] = 
3060: 71 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69  quote;.        i
3070: 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ++;.      }else{
3080: 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20  .        z[j++] 
3090: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 0;.        bre
30a0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
30b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a  }else{.      z[j
30c0: 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20  ++] = z[i];.    
30d0: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61  }.  }.}../* An a
30e0: 72 72 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20  rray to map all 
30f0: 75 70 70 65 72 2d 63 61 73 65 20 63 68 61 72 61  upper-case chara
3100: 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72  cters into their
3110: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
3120: 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61  * lower-case cha
3130: 72 61 63 74 65 72 2e 20 0a 2a 2f 0a 73 74 61 74  racter. .*/.stat
3140: 69 63 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ic unsigned char
3150: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 20   UpperToLower[] 
3160: 3d 20 7b 0a 20 20 20 20 20 20 30 2c 20 20 31 2c  = {.      0,  1,
3170: 20 20 32 2c 20 20 33 2c 20 20 34 2c 20 20 35 2c    2,  3,  4,  5,
3180: 20 20 36 2c 20 20 37 2c 20 20 38 2c 20 20 39 2c    6,  7,  8,  9,
3190: 20 31 30 2c 20 31 31 2c 20 31 32 2c 20 31 33 2c   10, 11, 12, 13,
31a0: 20 31 34 2c 20 31 35 2c 20 31 36 2c 20 31 37 2c   14, 15, 16, 17,
31b0: 0a 20 20 20 20 20 31 38 2c 20 31 39 2c 20 32 30  .     18, 19, 20
31c0: 2c 20 32 31 2c 20 32 32 2c 20 32 33 2c 20 32 34  , 21, 22, 23, 24
31d0: 2c 20 32 35 2c 20 32 36 2c 20 32 37 2c 20 32 38  , 25, 26, 27, 28
31e0: 2c 20 32 39 2c 20 33 30 2c 20 33 31 2c 20 33 32  , 29, 30, 31, 32
31f0: 2c 20 33 33 2c 20 33 34 2c 20 33 35 2c 0a 20 20  , 33, 34, 35,.  
3200: 20 20 20 33 36 2c 20 33 37 2c 20 33 38 2c 20 33     36, 37, 38, 3
3210: 39 2c 20 34 30 2c 20 34 31 2c 20 34 32 2c 20 34  9, 40, 41, 42, 4
3220: 33 2c 20 34 34 2c 20 34 35 2c 20 34 36 2c 20 34  3, 44, 45, 46, 4
3230: 37 2c 20 34 38 2c 20 34 39 2c 20 35 30 2c 20 35  7, 48, 49, 50, 5
3240: 31 2c 20 35 32 2c 20 35 33 2c 0a 20 20 20 20 20  1, 52, 53,.     
3250: 35 34 2c 20 35 35 2c 20 35 36 2c 20 35 37 2c 20  54, 55, 56, 57, 
3260: 35 38 2c 20 35 39 2c 20 36 30 2c 20 36 31 2c 20  58, 59, 60, 61, 
3270: 36 32 2c 20 36 33 2c 20 36 34 2c 20 39 37 2c 20  62, 63, 64, 97, 
3280: 39 38 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31  98, 99,100,101,1
3290: 30 32 2c 31 30 33 2c 0a 20 20 20 20 31 30 34 2c  02,103,.    104,
32a0: 31 30 35 2c 31 30 36 2c 31 30 37 2c 31 30 38 2c  105,106,107,108,
32b0: 31 30 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c  109,110,111,112,
32c0: 31 31 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c  113,114,115,116,
32d0: 31 31 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c  117,118,119,120,
32e0: 31 32 31 2c 0a 20 20 20 20 31 32 32 2c 20 39 31  121,.    122, 91
32f0: 2c 20 39 32 2c 20 39 33 2c 20 39 34 2c 20 39 35  , 92, 93, 94, 95
3300: 2c 20 39 36 2c 20 39 37 2c 20 39 38 2c 20 39 39  , 96, 97, 98, 99
3310: 2c 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33  ,100,101,102,103
3320: 2c 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37  ,104,105,106,107
3330: 2c 0a 20 20 20 20 31 30 38 2c 31 30 39 2c 31 31  ,.    108,109,11
3340: 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31  0,111,112,113,11
3350: 34 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31  4,115,116,117,11
3360: 38 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 31 32  8,119,120,121,12
3370: 32 2c 31 32 33 2c 31 32 34 2c 31 32 35 2c 0a 20  2,123,124,125,. 
3380: 20 20 20 31 32 36 2c 31 32 37 2c 31 32 38 2c 31     126,127,128,1
3390: 32 39 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c 31  29,130,131,132,1
33a0: 33 33 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c 31  33,134,135,136,1
33b0: 33 37 2c 31 33 38 2c 31 33 39 2c 31 34 30 2c 31  37,138,139,140,1
33c0: 34 31 2c 31 34 32 2c 31 34 33 2c 0a 20 20 20 20  41,142,143,.    
33d0: 31 34 34 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c  144,145,146,147,
33e0: 31 34 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c  148,149,150,151,
33f0: 31 35 32 2c 31 35 33 2c 31 35 34 2c 31 35 35 2c  152,153,154,155,
3400: 31 35 36 2c 31 35 37 2c 31 35 38 2c 31 35 39 2c  156,157,158,159,
3410: 31 36 30 2c 31 36 31 2c 0a 20 20 20 20 31 36 32  160,161,.    162
3420: 2c 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36 36  ,163,164,165,166
3430: 2c 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37 30  ,167,168,169,170
3440: 2c 31 37 31 2c 31 37 32 2c 31 37 33 2c 31 37 34  ,171,172,173,174
3450: 2c 31 37 35 2c 31 37 36 2c 31 37 37 2c 31 37 38  ,175,176,177,178
3460: 2c 31 37 39 2c 0a 20 20 20 20 31 38 30 2c 31 38  ,179,.    180,18
3470: 31 2c 31 38 32 2c 31 38 33 2c 31 38 34 2c 31 38  1,182,183,184,18
3480: 35 2c 31 38 36 2c 31 38 37 2c 31 38 38 2c 31 38  5,186,187,188,18
3490: 39 2c 31 39 30 2c 31 39 31 2c 31 39 32 2c 31 39  9,190,191,192,19
34a0: 33 2c 31 39 34 2c 31 39 35 2c 31 39 36 2c 31 39  3,194,195,196,19
34b0: 37 2c 0a 20 20 20 20 31 39 38 2c 31 39 39 2c 32  7,.    198,199,2
34c0: 30 30 2c 32 30 31 2c 32 30 32 2c 32 30 33 2c 32  00,201,202,203,2
34d0: 30 34 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c 32  04,205,206,207,2
34e0: 30 38 2c 32 30 39 2c 32 31 30 2c 32 31 31 2c 32  08,209,210,211,2
34f0: 31 32 2c 32 31 33 2c 32 31 34 2c 32 31 35 2c 0a  12,213,214,215,.
3500: 20 20 20 20 32 31 36 2c 32 31 37 2c 32 31 38 2c      216,217,218,
3510: 32 31 39 2c 32 32 30 2c 32 32 31 2c 32 32 32 2c  219,220,221,222,
3520: 32 32 33 2c 32 32 34 2c 32 32 35 2c 32 32 36 2c  223,224,225,226,
3530: 32 32 37 2c 32 32 38 2c 32 32 39 2c 32 33 30 2c  227,228,229,230,
3540: 32 33 31 2c 32 33 32 2c 32 33 33 2c 0a 20 20 20  231,232,233,.   
3550: 20 32 33 34 2c 32 33 35 2c 32 33 36 2c 32 33 37   234,235,236,237
3560: 2c 32 33 38 2c 32 33 39 2c 32 34 30 2c 32 34 31  ,238,239,240,241
3570: 2c 32 34 32 2c 32 34 33 2c 32 34 34 2c 32 34 35  ,242,243,244,245
3580: 2c 32 34 36 2c 32 34 37 2c 32 34 38 2c 32 34 39  ,246,247,248,249
3590: 2c 32 35 30 2c 32 35 31 2c 0a 20 20 20 20 32 35  ,250,251,.    25
35a0: 32 2c 32 35 33 2c 32 35 34 2c 32 35 35 0a 7d 3b  2,253,254,255.};
35b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
35c0: 63 74 69 6f 6e 20 63 6f 6d 70 75 74 65 73 20 61  ction computes a
35d0: 20 68 61 73 68 20 6f 6e 20 74 68 65 20 6e 61 6d   hash on the nam
35e0: 65 20 6f 66 20 61 20 6b 65 79 77 6f 72 64 2e 0a  e of a keyword..
35f0: 2a 2a 20 43 61 73 65 20 69 73 20 6e 6f 74 20 73  ** Case is not s
3600: 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2f 0a 69  ignificant..*/.i
3610: 6e 74 20 73 71 6c 69 74 65 33 48 61 73 68 4e 6f  nt sqlite3HashNo
3620: 43 61 73 65 28 63 6f 6e 73 74 20 63 68 61 72 20  Case(const char 
3630: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69 6e  *z, int n){.  in
3640: 74 20 68 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e  t h = 0;.  if( n
3650: 3c 3d 30 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e  <=0 ) n = strlen
3660: 28 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e 20  (z);.  while( n 
3670: 3e 20 30 20 20 29 7b 0a 20 20 20 20 68 20 3d 20  > 0  ){.    h = 
3680: 28 68 3c 3c 33 29 20 5e 20 68 20 5e 20 55 70 70  (h<<3) ^ h ^ Upp
3690: 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
36a0: 6e 65 64 20 63 68 61 72 29 2a 7a 2b 2b 5d 3b 0a  ned char)*z++];.
36b0: 20 20 20 20 6e 2d 2d 3b 0a 20 20 7d 0a 20 20 72      n--;.  }.  r
36c0: 65 74 75 72 6e 20 68 20 26 20 30 78 37 66 66 66  eturn h & 0x7fff
36d0: 66 66 66 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  ffff;.}../*.** S
36e0: 6f 6d 65 20 73 79 73 74 65 6d 73 20 68 61 76 65  ome systems have
36f0: 20 73 74 72 69 63 6d 70 28 29 2e 20 20 4f 74 68   stricmp().  Oth
3700: 65 72 73 20 68 61 76 65 20 73 74 72 63 61 73 65  ers have strcase
3710: 63 6d 70 28 29 2e 20 20 42 65 63 61 75 73 65 0a  cmp().  Because.
3720: 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 20 63  ** there is no c
3730: 6f 6e 73 69 73 74 65 6e 63 79 2c 20 77 65 20 77  onsistency, we w
3740: 69 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72 20 6f  ill define our o
3750: 77 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  wn..*/.int sqlit
3760: 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
3770: 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e  char *zLeft, con
3780: 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 29  st char *zRight)
3790: 7b 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73  {.  register uns
37a0: 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a  igned char *a, *
37b0: 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e  b;.  a = (unsign
37c0: 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b  ed char *)zLeft;
37d0: 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64  .  b = (unsigned
37e0: 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a   char *)zRight;.
37f0: 20 20 77 68 69 6c 65 28 20 2a 61 21 3d 30 20 26    while( *a!=0 &
3800: 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  & UpperToLower[*
3810: 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72  a]==UpperToLower
3820: 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b  [*b]){ a++; b++;
3830: 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 61 20 2d   }.  return *a -
3840: 20 2a 62 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74   *b;.}.int sqlit
3850: 65 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74  e3StrNICmp(const
3860: 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f   char *zLeft, co
3870: 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74  nst char *zRight
3880: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 67 69  , int N){.  regi
3890: 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68  ster unsigned ch
38a0: 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d  ar *a, *b;.  a =
38b0: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
38c0: 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28  *)zLeft;.  b = (
38d0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
38e0: 7a 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28  zRight;.  while(
38f0: 20 4e 2d 2d 20 3e 20 30 20 26 26 20 2a 61 21 3d   N-- > 0 && *a!=
3900: 30 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77 65  0 && UpperToLowe
3910: 72 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f  r[*a]==UpperToLo
3920: 77 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62  wer[*b]){ a++; b
3930: 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e  ++; }.  return N
3940: 3c 30 20 3f 20 30 20 3a 20 2a 61 20 2d 20 2a 62  <0 ? 0 : *a - *b
3950: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
3960: 6e 20 54 52 55 45 20 69 66 20 7a 20 69 73 20 61  n TRUE if z is a
3970: 20 70 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74   pure numeric st
3980: 72 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 46 41  ring.  Return FA
3990: 4c 53 45 20 69 66 20 74 68 65 0a 2a 2a 20 73 74  LSE if the.** st
39a0: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ring contains an
39b0: 79 20 63 68 61 72 61 63 74 65 72 20 77 68 69 63  y character whic
39c0: 68 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66  h is not part of
39d0: 20 61 20 6e 75 6d 62 65 72 2e 20 49 66 0a 2a 2a   a number. If.**
39e0: 20 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 6e   the string is n
39f0: 75 6d 65 72 69 63 20 61 6e 64 20 63 6f 6e 74 61  umeric and conta
3a00: 69 6e 73 20 74 68 65 20 27 2e 27 20 63 68 61 72  ins the '.' char
3a10: 61 63 74 65 72 2c 20 73 65 74 20 2a 72 65 61 6c  acter, set *real
3a20: 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52 55 45 20 28  num.** to TRUE (
3a30: 6f 74 68 65 72 77 69 73 65 20 46 41 4c 53 45 29  otherwise FALSE)
3a40: 2e 0a 2a 2a 0a 2a 2a 20 41 6d 20 65 6d 70 74 79  ..**.** Am empty
3a50: 20 73 74 72 69 6e 67 20 69 73 20 63 6f 6e 73 69   string is consi
3a60: 64 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69  dered non-numeri
3a70: 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  c..*/.int sqlite
3a80: 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20  3IsNumber(const 
3a90: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65  char *z, int *re
3aa0: 61 6c 6e 75 6d 2c 20 75 38 20 65 6e 63 29 7b 0a  alnum, u8 enc){.
3ab0: 20 20 69 6e 74 20 69 6e 63 72 20 3d 20 28 65 6e    int incr = (en
3ac0: 63 3d 3d 54 45 58 54 5f 55 74 66 38 3f 31 3a 32  c==TEXT_Utf8?1:2
3ad0: 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d 54 45  );.  if( enc==TE
3ae0: 58 54 5f 55 74 66 31 36 62 65 20 29 20 7a 2b 2b  XT_Utf16be ) z++
3af0: 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20  ;.  if( *z=='-' 
3b00: 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a 20 2b  || *z=='+' ) z +
3b10: 3d 20 69 6e 63 72 3b 0a 20 20 69 66 28 20 21 69  = incr;.  if( !i
3b20: 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20  sdigit(*z) ){.  
3b30: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
3b40: 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69    z += incr;.  i
3b50: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
3b60: 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69  alnum = 0;.  whi
3b70: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 7a 29 20  le( isdigit(*z) 
3b80: 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a  ){ z += incr; }.
3b90: 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b    if( *z=='.' ){
3ba0: 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a  .    z += incr;.
3bb0: 20 20 20 20 69 66 28 20 21 69 73 64 69 67 69 74      if( !isdigit
3bc0: 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b  (*z) ) return 0;
3bd0: 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69  .    while( isdi
3be0: 67 69 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20  git(*z) ){ z += 
3bf0: 69 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20  incr; }.    if( 
3c00: 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e  realnum ) *realn
3c10: 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66  um = 1;.  }.  if
3c20: 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d  ( *z=='e' || *z=
3c30: 3d 27 45 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d  ='E' ){.    z +=
3c40: 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 2a   incr;.    if( *
3c50: 7a 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d  z=='+' || *z=='-
3c60: 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20  ' ) z += incr;. 
3c70: 20 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28     if( !isdigit(
3c80: 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  *z) ) return 0;.
3c90: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
3ca0: 69 74 28 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69  it(*z) ){ z += i
3cb0: 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72  ncr; }.    if( r
3cc0: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
3cd0: 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  m = 1;.  }.  ret
3ce0: 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a  urn *z==0;.}../*
3cf0: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a  .** The string z
3d00: 5b 5d 20 69 73 20 61 6e 20 61 73 63 69 69 20 72  [] is an ascii r
3d10: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
3d20: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2e 0a   a real number..
3d30: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 69 73 20  ** Convert this 
3d40: 73 74 72 69 6e 67 20 74 6f 20 61 20 64 6f 75 62  string to a doub
3d50: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  le..**.** This r
3d60: 6f 75 74 69 6e 65 20 61 73 73 75 6d 65 73 20 74  outine assumes t
3d70: 68 61 74 20 7a 5b 5d 20 72 65 61 6c 6c 79 20 69  hat z[] really i
3d80: 73 20 61 20 76 61 6c 69 64 20 6e 75 6d 62 65 72  s a valid number
3d90: 2e 20 20 49 66 20 69 74 0a 2a 2a 20 69 73 20 6e  .  If it.** is n
3da0: 6f 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ot, the result i
3db0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
3dc0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
3dd0: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20  is used instead 
3de0: 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 61  of the library a
3df0: 74 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 62  tof() function b
3e00: 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 6c 69  ecause.** the li
3e10: 62 72 61 72 79 20 61 74 6f 66 28 29 20 6d 69 67  brary atof() mig
3e20: 68 74 20 77 61 6e 74 20 74 6f 20 75 73 65 20 22  ht want to use "
3e30: 2c 22 20 61 73 20 74 68 65 20 64 65 63 69 6d 61  ," as the decima
3e40: 6c 20 70 6f 69 6e 74 20 69 6e 73 74 65 61 64 0a  l point instead.
3e50: 2a 2a 20 6f 66 20 22 2e 22 20 64 65 70 65 6e 64  ** of "." depend
3e60: 69 6e 67 20 6f 6e 20 68 6f 77 20 6c 6f 63 61 6c  ing on how local
3e70: 65 20 69 73 20 73 65 74 2e 20 20 42 75 74 20 74  e is set.  But t
3e80: 68 61 74 20 77 6f 75 6c 64 20 63 61 75 73 65 20  hat would cause 
3e90: 70 72 6f 62 6c 65 6d 73 0a 2a 2a 20 66 6f 72 20  problems.** for 
3ea0: 53 51 4c 2e 20 20 53 6f 20 74 68 69 73 20 72 6f  SQL.  So this ro
3eb0: 75 74 69 6e 65 20 61 6c 77 61 79 73 20 75 73 65  utine always use
3ec0: 73 20 22 2e 22 20 72 65 67 61 72 64 6c 65 73 73  s "." regardless
3ed0: 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 64   of locale..*/.d
3ee0: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 41 74 6f  ouble sqlite3Ato
3ef0: 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
3f00: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a   const char **pz
3f10: 45 6e 64 29 7b 0a 20 20 69 6e 74 20 73 69 67 6e  End){.  int sign
3f20: 20 3d 20 31 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42   = 1;.  LONGDOUB
3f30: 4c 45 5f 54 59 50 45 20 76 31 20 3d 20 30 2e 30  LE_TYPE v1 = 0.0
3f40: 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20  ;.  if( *z=='-' 
3f50: 29 7b 0a 20 20 20 20 73 69 67 6e 20 3d 20 2d 31  ){.    sign = -1
3f60: 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 65 6c  ;.    z++;.  }el
3f70: 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29  se if( *z=='+' )
3f80: 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20  {.    z++;.  }. 
3f90: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
3fa0: 2a 7a 29 20 29 7b 0a 20 20 20 20 76 31 20 3d 20  *z) ){.    v1 = 
3fb0: 76 31 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20  v1*10.0 + (*z - 
3fc0: 27 30 27 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  '0');.    z++;. 
3fd0: 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27   }.  if( *z=='.'
3fe0: 20 29 7b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42   ){.    LONGDOUB
3ff0: 4c 45 5f 54 59 50 45 20 64 69 76 69 73 6f 72 20  LE_TYPE divisor 
4000: 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a  = 1.0;.    z++;.
4010: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
4020: 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20  it(*z) ){.      
4030: 76 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28  v1 = v1*10.0 + (
4040: 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 20  *z - '0');.     
4050: 20 64 69 76 69 73 6f 72 20 2a 3d 20 31 30 2e 30   divisor *= 10.0
4060: 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
4070: 20 7d 0a 20 20 20 20 76 31 20 2f 3d 20 64 69 76   }.    v1 /= div
4080: 69 73 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20  isor;.  }.  if( 
4090: 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='e' || *z=='
40a0: 45 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 73  E' ){.    int es
40b0: 69 67 6e 20 3d 20 31 3b 0a 20 20 20 20 69 6e 74  ign = 1;.    int
40c0: 20 65 76 61 6c 20 3d 20 30 3b 0a 20 20 20 20 4c   eval = 0;.    L
40d0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
40e0: 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20  cale = 1.0;.    
40f0: 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d  z++;.    if( *z=
4100: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 65 73  ='-' ){.      es
4110: 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20  ign = -1;.      
4120: 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  z++;.    }else i
4130: 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20  f( *z=='+' ){.  
4140: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20      z++;.    }. 
4150: 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69     while( isdigi
4160: 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20 65  t(*z) ){.      e
4170: 76 61 6c 20 3d 20 65 76 61 6c 2a 31 30 20 2b 20  val = eval*10 + 
4180: 2a 7a 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20  *z - '0';.      
4190: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  z++;.    }.    w
41a0: 68 69 6c 65 28 20 65 76 61 6c 3e 3d 36 34 20 29  hile( eval>=64 )
41b0: 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b  { scale *= 1.0e+
41c0: 36 34 3b 20 65 76 61 6c 20 2d 3d 20 36 34 3b 20  64; eval -= 64; 
41d0: 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61  }.    while( eva
41e0: 6c 3e 3d 31 36 20 29 7b 20 73 63 61 6c 65 20 2a  l>=16 ){ scale *
41f0: 3d 20 31 2e 30 65 2b 31 36 3b 20 65 76 61 6c 20  = 1.0e+16; eval 
4200: 2d 3d 20 31 36 3b 20 7d 0a 20 20 20 20 77 68 69  -= 16; }.    whi
4210: 6c 65 28 20 65 76 61 6c 3e 3d 34 20 29 7b 20 73  le( eval>=4 ){ s
4220: 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 34 3b 20  cale *= 1.0e+4; 
4230: 65 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a 20 20 20  eval -= 4; }.   
4240: 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31 20   while( eval>=1 
4250: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65  ){ scale *= 1.0e
4260: 2b 31 3b 20 65 76 61 6c 20 2d 3d 20 31 3b 20 7d  +1; eval -= 1; }
4270: 0a 20 20 20 20 69 66 28 20 65 73 69 67 6e 3c 30  .    if( esign<0
4280: 20 29 7b 0a 20 20 20 20 20 20 76 31 20 2f 3d 20   ){.      v1 /= 
4290: 73 63 61 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65  scale;.    }else
42a0: 7b 0a 20 20 20 20 20 20 76 31 20 2a 3d 20 73 63  {.      v1 *= sc
42b0: 61 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ale;.    }.  }. 
42c0: 20 69 66 28 20 70 7a 45 6e 64 20 29 20 2a 70 7a   if( pzEnd ) *pz
42d0: 45 6e 64 20 3d 20 7a 3b 0a 20 20 72 65 74 75 72  End = z;.  retur
42e0: 6e 20 73 69 67 6e 3c 30 20 3f 20 2d 76 31 20 3a  n sign<0 ? -v1 :
42f0: 20 76 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65   v1;.}../*.** Re
4300: 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a 4e 75  turn TRUE if zNu
4310: 6d 20 69 73 20 61 20 36 34 2d 62 69 74 20 73 69  m is a 64-bit si
4320: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e 64  gned integer and
4330: 20 77 72 69 74 65 0a 2a 2a 20 74 68 65 20 76 61   write.** the va
4340: 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
4350: 65 72 20 69 6e 74 6f 20 2a 70 4e 75 6d 2e 20 20  er into *pNum.  
4360: 49 66 20 7a 4e 75 6d 20 69 73 20 6e 6f 74 20 61  If zNum is not a
4370: 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6f 72 20  n integer.** or 
4380: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
4390: 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  at is too large 
43a0: 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20  to be expressed 
43b0: 77 69 74 68 20 36 34 20 62 69 74 73 2c 0a 2a 2a  with 64 bits,.**
43c0: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 66 61 6c   then return fal
43d0: 73 65 2e 20 20 49 66 20 6e 3e 30 20 61 6e 64 20  se.  If n>0 and 
43e0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 73  the integer is s
43f0: 74 72 69 6e 67 20 69 73 20 6e 6f 74 0a 2a 2a 20  tring is not.** 
4400: 65 78 61 63 74 6c 79 20 6e 20 62 79 74 65 73 20  exactly n bytes 
4410: 6c 6f 6e 67 2c 20 72 65 74 75 72 6e 20 66 61 6c  long, return fal
4420: 73 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74  se..**.** When t
4430: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20  his routine was 
4440: 6f 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74  originally writt
4450: 65 6e 20 69 74 20 64 65 61 6c 74 20 77 69 74 68  en it dealt with
4460: 20 6f 6e 6c 79 0a 2a 2a 20 33 32 2d 62 69 74 20   only.** 32-bit 
4470: 6e 75 6d 62 65 72 73 2e 20 20 41 74 20 74 68 61  numbers.  At tha
4480: 74 20 74 69 6d 65 2c 20 69 74 20 77 61 73 20 6d  t time, it was m
4490: 75 63 68 20 66 61 73 74 65 72 20 74 68 61 6e 20  uch faster than 
44a0: 74 68 65 0a 2a 2a 20 61 74 6f 69 28 29 20 6c 69  the.** atoi() li
44b0: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 69 6e  brary routine in
44c0: 20 52 65 64 48 61 74 20 37 2e 32 2e 0a 2a 2f 0a   RedHat 7.2..*/.
44d0: 69 6e 74 20 73 71 6c 69 74 65 33 61 74 6f 69 36  int sqlite3atoi6
44e0: 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  4(const char *zN
44f0: 75 6d 2c 20 69 36 34 20 2a 70 4e 75 6d 29 7b 0a  um, i64 *pNum){.
4500: 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20 69    i64 v = 0;.  i
4510: 6e 74 20 6e 65 67 3b 0a 20 20 69 6e 74 20 69 2c  nt neg;.  int i,
4520: 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d   c;.  if( *zNum=
4530: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20  ='-' ){.    neg 
4540: 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b  = 1;.    zNum++;
4550: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e  .  }else if( *zN
4560: 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 6e  um=='+' ){.    n
4570: 65 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75 6d  eg = 0;.    zNum
4580: 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ++;.  }else{.   
4590: 20 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20   neg = 0;.  }.  
45a0: 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d  for(i=0; (c=zNum
45b0: 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d  [i])>='0' && c<=
45c0: 27 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76  '9'; i++){.    v
45d0: 20 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20 27 30   = v*10 + c - '0
45e0: 27 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20 3d  ';.  }.  *pNum =
45f0: 20 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a 20   neg ? -v : v;. 
4600: 20 72 65 74 75 72 6e 20 63 3d 3d 30 20 26 26 20   return c==0 && 
4610: 69 3e 30 20 26 26 20 0a 20 20 20 20 20 20 28 69  i>0 && .      (i
4620: 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26  <19 || (i==19 &&
4630: 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32   memcmp(zNum,"92
4640: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
4650: 37 22 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d 0a 0a  7",19)<=0));.}..
4660: 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  /*.** The string
4670: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
4680: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68   an integer.  Th
4690: 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d  ere might be som
46a0: 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72  e other.** infor
46b0: 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67  mation following
46c0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f   the integer too
46d0: 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74 20  , but that part 
46e0: 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49  is ignored..** I
46f0: 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 68  f the integer th
4700: 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  at the prefix of
4710: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
4720: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a   will fit in a.*
4730: 2a 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20  * 32-bit signed 
4740: 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20  integer, return 
4750: 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65  TRUE.  Otherwise
4760: 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a   return FALSE..*
4770: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4780: 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20  e returns FALSE 
4790: 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d  for the string -
47a0: 32 31 34 37 34 38 33 36 34 38 20 65 76 65 6e 20  2147483648 even 
47b0: 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d  that.** that num
47c0: 62 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74 68 65  ber will, in the
47d0: 6f 72 79 20 66 69 74 20 69 6e 20 61 20 33 32 2d  ory fit in a 32-
47e0: 62 69 74 20 69 6e 74 65 67 65 72 2e 20 20 42 75  bit integer.  Bu
47f0: 74 20 70 6f 73 69 74 69 76 65 0a 2a 2a 20 32 31  t positive.** 21
4800: 34 37 34 38 33 36 34 38 20 77 69 6c 6c 20 6e 6f  47483648 will no
4810: 74 20 66 69 74 20 69 6e 20 33 32 20 62 69 74 73  t fit in 32 bits
4820: 2e 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73  .  So it seems s
4830: 61 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a  afer to return.*
4840: 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74  * false..*/.stat
4850: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 46 69  ic int sqlite3Fi
4860: 74 73 49 6e 33 32 42 69 74 73 28 63 6f 6e 73 74  tsIn32Bits(const
4870: 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20   char *zNum){.  
4880: 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20  int i, c;.  if( 
4890: 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a  *zNum=='-' || *z
48a0: 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b  Num=='+' ) zNum+
48b0: 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63  +;.  for(i=0; (c
48c0: 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26  =zNum[i])>='0' &
48d0: 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d  & c<='9'; i++){}
48e0: 0a 20 20 72 65 74 75 72 6e 20 69 3c 31 30 20 7c  .  return i<10 |
48f0: 7c 20 28 69 3d 3d 31 30 20 26 26 20 6d 65 6d 63  | (i==10 && memc
4900: 6d 70 28 7a 4e 75 6d 2c 22 32 31 34 37 34 38 33  mp(zNum,"2147483
4910: 36 34 37 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d 0a  647",10)<=0);.}.
4920: 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72  ./*.** If zNum r
4930: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74  epresents an int
4940: 65 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66  eger that will f
4950: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74  it in 32-bits, t
4960: 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c  hen set.** *pVal
4970: 75 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67  ue to that integ
4980: 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72  er and return tr
4990: 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72  ue.  Otherwise r
49a0: 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a  eturn false..*/.
49b0: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
49c0: 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
49d0: 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75  zNum, int *pValu
49e0: 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e){.  if( sqlite
49f0: 33 46 69 74 73 49 6e 33 32 42 69 74 73 28 7a 4e  3FitsIn32Bits(zN
4a00: 75 6d 29 20 29 7b 0a 20 20 20 20 2a 70 56 61 6c  um) ){.    *pVal
4a10: 75 65 20 3d 20 61 74 6f 69 28 7a 4e 75 6d 29 3b  ue = atoi(zNum);
4a20: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
4a30: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
4a40: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ../*.** The stri
4a50: 6e 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  ng zNum represen
4a60: 74 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  ts an integer.  
4a70: 54 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 73  There might be s
4a80: 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66  ome other.** inf
4a90: 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69  ormation followi
4aa0: 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 74  ng the integer t
4ab0: 6f 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61 72  oo, but that par
4ac0: 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a  t is ignored..**
4ad0: 20 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   If the integer 
4ae0: 74 68 61 74 20 74 68 65 20 70 72 65 66 69 78 20  that the prefix 
4af0: 6f 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  of zNum represen
4b00: 74 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61  ts will fit in a
4b10: 0a 2a 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65  .** 64-bit signe
4b20: 64 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72  d integer, retur
4b30: 6e 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69  n TRUE.  Otherwi
4b40: 73 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e  se return FALSE.
4b50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
4b60: 69 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53  ine returns FALS
4b70: 45 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67  E for the string
4b80: 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
4b90: 37 35 38 30 38 20 65 76 65 6e 20 74 68 61 74 0a  75808 even that.
4ba0: 2a 2a 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77  ** that number w
4bb0: 69 6c 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20 66  ill, in theory f
4bc0: 69 74 20 69 6e 20 61 20 36 34 2d 62 69 74 20 69  it in a 64-bit i
4bd0: 6e 74 65 67 65 72 2e 20 20 50 6f 73 69 74 69 76  nteger.  Positiv
4be0: 65 0a 2a 2a 20 39 32 32 33 33 37 33 30 33 36 38  e.** 92233730368
4bf0: 35 34 37 37 35 38 30 38 20 77 69 6c 6c 20 6e 6f  54775808 will no
4c00: 74 20 66 69 74 20 69 6e 20 36 34 20 62 69 74 73  t fit in 64 bits
4c10: 2e 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73  .  So it seems s
4c20: 61 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a  afer to return.*
4c30: 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20  * false..*/.int 
4c40: 73 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42  sqlite3FitsIn64B
4c50: 69 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  its(const char *
4c60: 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20  zNum){.  int i, 
4c70: 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d  c;.  if( *zNum==
4c80: 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b  '-' || *zNum=='+
4c90: 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f  ' ) zNum++;.  fo
4ca0: 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69  r(i=0; (c=zNum[i
4cb0: 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39  ])>='0' && c<='9
4cc0: 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75  '; i++){}.  retu
4cd0: 72 6e 20 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31  rn i<19 || (i==1
4ce0: 39 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d  9 && memcmp(zNum
4cf0: 2c 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37  ,"92233720368547
4d00: 37 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 3b 0a  75807",19)<=0);.
4d10: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d  }../*.** If zNum
4d20: 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69   represents an i
4d30: 6e 74 65 67 65 72 20 74 68 61 74 20 77 69 6c 6c  nteger that will
4d40: 20 66 69 74 20 69 6e 20 36 34 2d 62 69 74 73 2c   fit in 64-bits,
4d50: 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56   then set.** *pV
4d60: 61 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e 74  alue to that int
4d70: 65 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20  eger and return 
4d80: 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65  true.  Otherwise
4d90: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a   return false..*
4da0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  /.int sqlite3Get
4db0: 49 6e 74 36 34 28 63 6f 6e 73 74 20 63 68 61 72  Int64(const char
4dc0: 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61   *zNum, i64 *pVa
4dd0: 6c 75 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  lue){.  if( sqli
4de0: 74 65 33 46 69 74 73 49 6e 36 34 42 69 74 73 28  te3FitsIn64Bits(
4df0: 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20 73 71 6c  zNum) ){.    sql
4e00: 69 74 65 33 61 74 6f 69 36 34 28 7a 4e 75 6d 2c  ite3atoi64(zNum,
4e10: 20 70 56 61 6c 75 65 29 3b 0a 20 20 20 20 72 65   pValue);.    re
4e20: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65  turn 1;.  }.  re
4e30: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 20 54 68  turn 0;.}../* Th
4e40: 69 73 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f  is comparison ro
4e50: 75 74 69 6e 65 20 69 73 20 77 68 61 74 20 77 65  utine is what we
4e60: 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69   use for compari
4e70: 73 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  son operations.*
4e80: 2a 20 62 65 74 77 65 65 6e 20 6e 75 6d 65 72 69  * between numeri
4e90: 63 20 76 61 6c 75 65 73 20 69 6e 20 61 6e 20 53  c values in an S
4ea0: 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  QL expression.  
4eb0: 22 4e 75 6d 65 72 69 63 22 20 69 73 20 61 20 6c  "Numeric" is a l
4ec0: 69 74 74 6c 65 0a 2a 2a 20 62 69 74 20 6d 69 73  ittle.** bit mis
4ed0: 6c 65 61 64 69 6e 67 20 68 65 72 65 2e 20 20 57  leading here.  W
4ee0: 68 61 74 20 77 65 20 6d 65 61 6e 20 69 73 20 74  hat we mean is t
4ef0: 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 73 20  hat the strings 
4f00: 68 61 76 65 20 61 0a 2a 2a 20 74 79 70 65 20 6f  have a.** type o
4f10: 66 20 22 6e 75 6d 65 72 69 63 22 20 66 72 6f 6d  f "numeric" from
4f20: 20 74 68 65 20 70 6f 69 6e 74 20 6f 66 20 76 69   the point of vi
4f30: 65 77 20 6f 66 20 53 51 4c 2e 20 20 54 68 65 20  ew of SQL.  The 
4f40: 73 74 72 69 6e 67 73 0a 2a 2a 20 64 6f 20 6e 6f  strings.** do no
4f50: 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 63 6f  t necessarily co
4f60: 6e 74 61 69 6e 20 6e 75 6d 62 65 72 73 2e 20 20  ntain numbers.  
4f70: 54 68 65 79 20 63 6f 75 6c 64 20 63 6f 6e 74 61  They could conta
4f80: 69 6e 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49  in text..**.** I
4f90: 66 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  f the input stri
4fa0: 6e 67 73 20 62 6f 74 68 20 6c 6f 6f 6b 20 6c 69  ngs both look li
4fb0: 6b 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72  ke actual number
4fc0: 73 20 74 68 65 6e 20 74 68 65 79 0a 2a 2a 20 63  s then they.** c
4fd0: 6f 6d 70 61 72 65 20 69 6e 20 6e 75 6d 65 72 69  ompare in numeri
4fe0: 63 61 6c 20 6f 72 64 65 72 2e 20 20 4e 75 6d 65  cal order.  Nume
4ff0: 72 69 63 61 6c 20 73 74 72 69 6e 67 73 20 61 72  rical strings ar
5000: 65 20 61 6c 77 61 79 73 20 6c 65 73 73 20 0a 2a  e always less .*
5010: 2a 20 74 68 61 6e 20 6e 6f 6e 2d 6e 75 6d 65 72  * than non-numer
5020: 69 63 20 73 74 72 69 6e 67 73 20 73 6f 20 69 66  ic strings so if
5030: 20 6f 6e 65 20 69 6e 70 75 74 20 73 74 72 69 6e   one input strin
5040: 67 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 0a 2a  g looks like a.*
5050: 2a 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65  * number and the
5060: 20 6f 74 68 65 72 20 64 6f 65 73 20 6e 6f 74 2c   other does not,
5070: 20 74 68 65 6e 20 74 68 65 20 6f 6e 65 20 74 68   then the one th
5080: 61 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 0a 2a 2a  at looks like.**
5090: 20 61 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65   a number is the
50a0: 20 73 6d 61 6c 6c 65 72 2e 20 20 4e 6f 6e 2d 6e   smaller.  Non-n
50b0: 75 6d 65 72 69 63 20 73 74 72 69 6e 67 73 20 63  umeric strings c
50c0: 6f 6d 70 61 72 65 20 69 6e 20 0a 2a 2a 20 6c 65  ompare in .** le
50d0: 78 69 67 72 61 70 68 69 63 61 6c 20 6f 72 64 65  xigraphical orde
50e0: 72 20 28 74 68 65 20 73 61 6d 65 20 6f 72 64 65  r (the same orde
50f0: 72 20 61 73 20 73 74 72 63 6d 70 28 29 29 2e 0a  r as strcmp())..
5100: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
5110: 6d 70 61 72 65 28 63 6f 6e 73 74 20 63 68 61 72  mpare(const char
5120: 20 2a 61 74 65 78 74 2c 20 63 6f 6e 73 74 20 63   *atext, const c
5130: 68 61 72 20 2a 62 74 65 78 74 29 7b 0a 20 20 69  har *btext){.  i
5140: 6e 74 20 72 65 73 75 6c 74 3b 0a 20 20 69 6e 74  nt result;.  int
5150: 20 69 73 4e 75 6d 41 2c 20 69 73 4e 75 6d 42 3b   isNumA, isNumB;
5160: 0a 20 20 69 66 28 20 61 74 65 78 74 3d 3d 30 20  .  if( atext==0 
5170: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31  ){.    return -1
5180: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 62 74  ;.  }else if( bt
5190: 65 78 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  ext==0 ){.    re
51a0: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 73  turn 1;.  }.  is
51b0: 4e 75 6d 41 20 3d 20 73 71 6c 69 74 65 33 49 73  NumA = sqlite3Is
51c0: 4e 75 6d 62 65 72 28 61 74 65 78 74 2c 20 30 2c  Number(atext, 0,
51d0: 20 54 45 58 54 5f 55 74 66 38 29 3b 0a 20 20 69   TEXT_Utf8);.  i
51e0: 73 4e 75 6d 42 20 3d 20 73 71 6c 69 74 65 33 49  sNumB = sqlite3I
51f0: 73 4e 75 6d 62 65 72 28 62 74 65 78 74 2c 20 30  sNumber(btext, 0
5200: 2c 20 54 45 58 54 5f 55 74 66 38 29 3b 0a 20 20  , TEXT_Utf8);.  
5210: 69 66 28 20 69 73 4e 75 6d 41 20 29 7b 0a 20 20  if( isNumA ){.  
5220: 20 20 69 66 28 20 21 69 73 4e 75 6d 42 20 29 7b    if( !isNumB ){
5230: 0a 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20  .      result = 
5240: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
5250: 20 20 20 20 20 64 6f 75 62 6c 65 20 72 41 2c 20       double rA, 
5260: 72 42 3b 0a 20 20 20 20 20 20 72 41 20 3d 20 73  rB;.      rA = s
5270: 71 6c 69 74 65 33 41 74 6f 46 28 61 74 65 78 74  qlite3AtoF(atext
5280: 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 42 20 3d  , 0);.      rB =
5290: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 62 74 65   sqlite3AtoF(bte
52a0: 78 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  xt, 0);.      if
52b0: 28 20 72 41 3c 72 42 20 29 7b 0a 20 20 20 20 20  ( rA<rB ){.     
52c0: 20 20 20 72 65 73 75 6c 74 20 3d 20 2d 31 3b 0a     result = -1;.
52d0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
52e0: 72 41 3e 72 42 20 29 7b 0a 20 20 20 20 20 20 20  rA>rB ){.       
52f0: 20 72 65 73 75 6c 74 20 3d 20 2b 31 3b 0a 20 20   result = +1;.  
5300: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5310: 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20     result = 0;. 
5320: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
5330: 65 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 42 20  else if( isNumB 
5340: 29 7b 0a 20 20 20 20 72 65 73 75 6c 74 20 3d 20  ){.    result = 
5350: 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 7b 0a 20 20  +1;.  }else {.  
5360: 20 20 72 65 73 75 6c 74 20 3d 20 73 74 72 63 6d    result = strcm
5370: 70 28 61 74 65 78 74 2c 20 62 74 65 78 74 29 3b  p(atext, btext);
5380: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 65  .  }.  return re
5390: 73 75 6c 74 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  sult; .}../*.** 
53a0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
53b0: 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
53c0: 2e 20 20 45 61 63 68 20 6b 65 79 20 69 73 20 61  .  Each key is a
53d0: 20 6c 69 73 74 20 6f 66 20 6f 6e 65 20 6f 72 20   list of one or 
53e0: 6d 6f 72 65 0a 2a 2a 20 6e 75 6c 6c 2d 74 65 72  more.** null-ter
53f0: 6d 69 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  minated elements
5400: 2e 20 20 54 68 65 20 6c 69 73 74 20 69 73 20 74  .  The list is t
5410: 65 72 6d 69 6e 61 74 65 64 20 62 79 20 74 77 6f  erminated by two
5420: 20 6e 75 6c 6c 73 20 69 6e 0a 2a 2a 20 61 20 72   nulls in.** a r
5430: 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ow.  For example
5440: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
5450: 74 65 78 74 20 69 73 20 61 20 6b 65 79 20 77 69  text is a key wi
5460: 74 68 20 74 68 72 65 65 20 65 6c 65 6d 65 6e 74  th three element
5470: 73 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  s.**.**         
5480: 20 20 20 41 6f 6e 65 5c 30 30 30 44 74 77 6f 5c     Aone\000Dtwo\
5490: 30 30 30 41 74 68 72 65 65 5c 30 30 30 5c 30 30  000Athree\000\00
54a0: 30 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 65 6c 65 6d  0.**.** All elem
54b0: 65 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20  ents begin with 
54c0: 6f 6e 65 20 6f 66 20 74 68 65 20 63 68 61 72 61  one of the chara
54d0: 63 74 65 72 73 20 22 2b 2d 41 44 22 20 61 6e 64  cters "+-AD" and
54e0: 20 65 6e 64 20 77 69 74 68 20 22 5c 30 30 30 22   end with "\000"
54f0: 0a 2a 2a 20 77 69 74 68 20 7a 65 72 6f 20 6f 72  .** with zero or
5500: 20 6d 6f 72 65 20 74 65 78 74 20 65 6c 65 6d 65   more text eleme
5510: 6e 74 73 20 69 6e 20 62 65 74 77 65 65 6e 2e 20  nts in between. 
5520: 20 45 78 63 65 70 74 2c 20 4e 55 4c 4c 20 65 6c   Except, NULL el
5530: 65 6d 65 6e 74 73 0a 2a 2a 20 63 6f 6e 73 69 73  ements.** consis
5540: 74 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c  t of the special
5550: 20 74 77 6f 2d 63 68 61 72 61 63 74 65 72 20 73   two-character s
5560: 65 71 75 65 6e 63 65 20 22 4e 5c 30 30 30 22 2e  equence "N\000".
5570: 0a 2a 2a 0a 2a 2a 20 42 6f 74 68 20 61 72 67 75  .**.** Both argu
5580: 6d 65 6e 74 73 20 77 69 6c 6c 20 68 61 76 65 20  ments will have 
5590: 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20  the same number 
55a0: 6f 66 20 65 6c 65 6d 65 6e 74 73 2e 20 20 54 68  of elements.  Th
55b0: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 72 65  is routine.** re
55c0: 74 75 72 6e 73 20 6e 65 67 61 74 69 76 65 2c 20  turns negative, 
55d0: 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76  zero, or positiv
55e0: 65 20 69 66 20 74 68 65 20 66 69 72 73 74 20 61  e if the first a
55f0: 72 67 75 6d 65 6e 74 20 69 73 20 6c 65 73 73 0a  rgument is less.
5600: 2a 2a 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74  ** than, equal t
5610: 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
5620: 61 6e 20 74 68 65 20 66 69 72 73 74 2e 20 20 28  an the first.  (
5630: 52 65 73 75 6c 74 20 69 73 20 61 2d 62 29 2e 0a  Result is a-b)..
5640: 2a 2a 0a 2a 2a 20 45 61 63 68 20 65 6c 65 6d 65  **.** Each eleme
5650: 6e 74 20 62 65 67 69 6e 73 20 77 69 74 68 20 6f  nt begins with o
5660: 6e 65 20 6f 66 20 74 68 65 20 63 68 61 72 61 63  ne of the charac
5670: 74 65 72 73 20 22 2b 22 2c 20 22 2d 22 2c 20 22  ters "+", "-", "
5680: 41 22 2c 20 22 44 22 2e 0a 2a 2a 20 54 68 69 73  A", "D"..** This
5690: 20 63 68 61 72 61 63 74 65 72 20 64 65 74 65 72   character deter
56a0: 6d 69 6e 65 73 20 74 68 65 20 73 6f 72 74 20 6f  mines the sort o
56b0: 72 64 65 72 20 61 6e 64 20 63 6f 6c 6c 61 74 69  rder and collati
56c0: 6e 67 20 73 65 71 75 65 6e 63 65 3a 0a 2a 2a 0a  ng sequence:.**.
56d0: 2a 2a 20 20 20 20 20 2b 20 20 20 20 20 20 53 6f  **     +      So
56e0: 72 74 20 6e 75 6d 65 72 69 63 61 6c 6c 79 20 69  rt numerically i
56f0: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
5700: 72 0a 2a 2a 20 20 20 20 20 2d 20 20 20 20 20 20  r.**     -      
5710: 53 6f 72 74 20 6e 75 6d 65 72 69 63 61 6c 6c 79  Sort numerically
5720: 20 69 6e 20 64 65 73 63 65 6e 64 69 6e 67 20 6f   in descending o
5730: 72 64 65 72 0a 2a 2a 20 20 20 20 20 41 20 20 20  rder.**     A   
5740: 20 20 20 53 6f 72 74 20 61 73 20 73 74 72 69 6e     Sort as strin
5750: 67 73 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  gs in ascending 
5760: 6f 72 64 65 72 0a 2a 2a 20 20 20 20 20 44 20 20  order.**     D  
5770: 20 20 20 20 53 6f 72 74 20 61 73 20 73 74 72 69      Sort as stri
5780: 6e 67 73 20 69 6e 20 64 65 73 63 65 6e 64 69 6e  ngs in descendin
5790: 67 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 46  g order..**.** F
57a0: 6f 72 20 74 68 65 20 22 2b 22 20 61 6e 64 20 22  or the "+" and "
57b0: 2d 22 20 73 6f 72 74 69 6e 67 2c 20 70 75 72 65  -" sorting, pure
57c0: 20 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 73   numeric strings
57d0: 20 28 73 74 72 69 6e 67 73 20 66 6f 72 20 77 68   (strings for wh
57e0: 69 63 68 20 74 68 65 0a 2a 2a 20 69 73 4e 75 6d  ich the.** isNum
57f0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 62 6f 76  () function abov
5800: 65 20 72 65 74 75 72 6e 73 20 54 52 55 45 29 20  e returns TRUE) 
5810: 61 6c 77 61 79 73 20 63 6f 6d 70 61 72 65 20 6c  always compare l
5820: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
5830: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 6e 6f 74  .** that are not
5840: 20 70 75 72 65 20 6e 75 6d 65 72 69 63 73 2e 20   pure numerics. 
5850: 20 4e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72   Non-numeric str
5860: 69 6e 67 73 20 63 6f 6d 70 61 72 65 20 69 6e 20  ings compare in 
5870: 6d 65 6d 63 6d 70 28 29 0a 2a 2a 20 6f 72 64 65  memcmp().** orde
5880: 72 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20  r.  This is the 
5890: 73 61 6d 65 20 73 6f 72 74 20 6f 72 64 65 72 20  same sort order 
58a0: 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 43 6f  as the sqlite3Co
58b0: 6d 70 61 72 65 28 29 20 66 75 6e 63 74 69 6f 6e  mpare() function
58c0: 0a 2a 2a 20 61 62 6f 76 65 20 67 65 6e 65 72 61  .** above genera
58d0: 74 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  tes..**.** The l
58e0: 61 73 74 20 70 6f 69 6e 74 20 69 73 20 61 20 63  ast point is a c
58f0: 68 61 6e 67 65 20 66 72 6f 6d 20 76 65 72 73 69  hange from versi
5900: 6f 6e 20 32 2e 36 2e 33 20 74 6f 20 76 65 72 73  on 2.6.3 to vers
5910: 69 6f 6e 20 32 2e 37 2e 30 2e 20 20 49 6e 0a 2a  ion 2.7.0.  In.*
5920: 2a 20 76 65 72 73 69 6f 6e 20 32 2e 36 2e 33 20  * version 2.6.3 
5930: 61 6e 64 20 65 61 72 6c 69 65 72 2c 20 73 75 62  and earlier, sub
5940: 73 74 72 69 6e 67 73 20 6f 66 20 64 69 67 69 74  strings of digit
5950: 73 20 63 6f 6d 70 61 72 65 20 69 6e 20 6e 75 6d  s compare in num
5960: 65 72 69 63 61 6c 20 0a 2a 2a 20 61 6e 64 20 63  erical .** and c
5970: 61 73 65 20 77 61 73 20 75 73 65 64 20 6f 6e 6c  ase was used onl
5980: 79 20 74 6f 20 62 72 65 61 6b 20 61 20 74 69 65  y to break a tie
5990: 2e 0a 2a 2a 0a 2a 2a 20 45 6c 65 6d 65 6e 74 73  ..**.** Elements
59a0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
59b0: 20 27 41 27 20 6f 72 20 27 44 27 20 63 6f 6d 70   'A' or 'D' comp
59c0: 61 72 65 20 69 6e 20 6d 65 6d 63 6d 70 28 29 20  are in memcmp() 
59d0: 6f 72 64 65 72 20 72 65 67 61 72 64 6c 65 73 73  order regardless
59e0: 0a 2a 2a 20 6f 66 20 77 68 65 74 68 65 72 20 6f  .** of whether o
59f0: 72 20 6e 6f 74 20 74 68 65 79 20 6c 6f 6f 6b 20  r not they look 
5a00: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 0a 2a  like a number..*
5a10: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74  *.** Note that t
5a20: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 69 6d  he sort order im
5a30: 70 6f 73 65 64 20 62 79 20 74 68 65 20 72 75 6c  posed by the rul
5a40: 65 73 20 61 62 6f 76 65 20 69 73 20 74 68 65 20  es above is the 
5a50: 73 61 6d 65 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  same.** from the
5a60: 20 6f 72 64 65 72 69 6e 67 20 64 65 66 69 6e 65   ordering define
5a70: 64 20 62 79 20 74 68 65 20 22 3c 22 2c 20 22 3c  d by the "<", "<
5a80: 3d 22 2c 20 22 3e 22 2c 20 61 6e 64 20 22 3e 3d  =", ">", and ">=
5a90: 22 20 6f 70 65 72 61 74 6f 72 73 0a 2a 2a 20 6f  " operators.** o
5aa0: 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e  f expressions an
5ab0: 64 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  d for indices.  
5ac0: 54 68 69 73 20 77 61 73 20 6e 6f 74 20 74 68 65  This was not the
5ad0: 20 63 61 73 65 20 66 6f 72 20 76 65 72 73 69 6f   case for versio
5ae0: 6e 0a 2a 2a 20 32 2e 36 2e 33 20 61 6e 64 20 65  n.** 2.6.3 and e
5af0: 61 72 6c 69 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73  arlier..*/.int s
5b00: 71 6c 69 74 65 33 53 6f 72 74 43 6f 6d 70 61 72  qlite3SortCompar
5b10: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 2c  e(const char *a,
5b20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 62 29 7b   const char *b){
5b30: 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a  .  int res = 0;.
5b40: 20 20 69 6e 74 20 69 73 4e 75 6d 41 2c 20 69 73    int isNumA, is
5b50: 4e 75 6d 42 3b 0a 20 20 69 6e 74 20 64 69 72 20  NumB;.  int dir 
5b60: 3d 20 30 3b 0a 0a 20 20 77 68 69 6c 65 28 20 72  = 0;..  while( r
5b70: 65 73 3d 3d 30 20 26 26 20 2a 61 20 26 26 20 2a  es==0 && *a && *
5b80: 62 20 29 7b 0a 20 20 20 20 69 66 28 20 61 5b 30  b ){.    if( a[0
5b90: 5d 3d 3d 27 4e 27 20 7c 7c 20 62 5b 30 5d 3d 3d  ]=='N' || b[0]==
5ba0: 27 4e 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28  'N' ){.      if(
5bb0: 20 61 5b 30 5d 3d 3d 62 5b 30 5d 20 29 7b 0a 20   a[0]==b[0] ){. 
5bc0: 20 20 20 20 20 20 20 61 20 2b 3d 20 32 3b 0a 20         a += 2;. 
5bd0: 20 20 20 20 20 20 20 62 20 2b 3d 20 32 3b 0a 20         b += 2;. 
5be0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
5bf0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5c00: 66 28 20 61 5b 30 5d 3d 3d 27 4e 27 20 29 7b 0a  f( a[0]=='N' ){.
5c10: 20 20 20 20 20 20 20 20 64 69 72 20 3d 20 62 5b          dir = b[
5c20: 30 5d 3b 0a 20 20 20 20 20 20 20 20 72 65 73 20  0];.        res 
5c30: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = -1;.      }els
5c40: 65 7b 0a 20 20 20 20 20 20 20 20 64 69 72 20 3d  e{.        dir =
5c50: 20 61 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 72   a[0];.        r
5c60: 65 73 20 3d 20 2b 31 3b 0a 20 20 20 20 20 20 7d  es = +1;.      }
5c70: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
5c80: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
5c90: 61 5b 30 5d 3d 3d 62 5b 30 5d 20 29 3b 0a 20 20  a[0]==b[0] );.  
5ca0: 20 20 69 66 28 20 28 64 69 72 3d 61 5b 30 5d 29    if( (dir=a[0])
5cb0: 3d 3d 27 41 27 20 7c 7c 20 61 5b 30 5d 3d 3d 27  =='A' || a[0]=='
5cc0: 44 27 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  D' ){.      res 
5cd0: 3d 20 73 74 72 63 6d 70 28 26 61 5b 31 5d 2c 26  = strcmp(&a[1],&
5ce0: 62 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28  b[1]);.      if(
5cf0: 20 72 65 73 20 29 20 62 72 65 61 6b 3b 0a 20 20   res ) break;.  
5d00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
5d10: 73 4e 75 6d 41 20 3d 20 73 71 6c 69 74 65 33 49  sNumA = sqlite3I
5d20: 73 4e 75 6d 62 65 72 28 26 61 5b 31 5d 2c 20 30  sNumber(&a[1], 0
5d30: 2c 20 54 45 58 54 5f 55 74 66 38 29 3b 0a 20 20  , TEXT_Utf8);.  
5d40: 20 20 20 20 69 73 4e 75 6d 42 20 3d 20 73 71 6c      isNumB = sql
5d50: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 26 62 5b  ite3IsNumber(&b[
5d60: 31 5d 2c 20 30 2c 20 54 45 58 54 5f 55 74 66 38  1], 0, TEXT_Utf8
5d70: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 4e  );.      if( isN
5d80: 75 6d 41 20 29 7b 0a 20 20 20 20 20 20 20 20 64  umA ){.        d
5d90: 6f 75 62 6c 65 20 72 41 2c 20 72 42 3b 0a 20 20  ouble rA, rB;.  
5da0: 20 20 20 20 20 20 69 66 28 20 21 69 73 4e 75 6d        if( !isNum
5db0: 42 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  B ){.          r
5dc0: 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20  es = -1;.       
5dd0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5de0: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 41 20 3d    }.        rA =
5df0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 26 61 5b   sqlite3AtoF(&a[
5e00: 31 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  1], 0);.        
5e10: 72 42 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46  rB = sqlite3AtoF
5e20: 28 26 62 5b 31 5d 2c 20 30 29 3b 0a 20 20 20 20  (&b[1], 0);.    
5e30: 20 20 20 20 69 66 28 20 72 41 3c 72 42 20 29 7b      if( rA<rB ){
5e40: 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
5e50: 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62   -1;.          b
5e60: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
5e70: 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3e 72          if( rA>r
5e80: 42 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  B ){.          r
5e90: 65 73 20 3d 20 2b 31 3b 0a 20 20 20 20 20 20 20  es = +1;.       
5ea0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5eb0: 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
5ec0: 69 66 28 20 69 73 4e 75 6d 42 20 29 7b 0a 20 20  if( isNumB ){.  
5ed0: 20 20 20 20 20 20 72 65 73 20 3d 20 2b 31 3b 0a        res = +1;.
5ee0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5ef0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5f00: 20 20 20 20 72 65 73 20 3d 20 73 74 72 63 6d 70      res = strcmp
5f10: 28 26 61 5b 31 5d 2c 26 62 5b 31 5d 29 3b 0a 20  (&a[1],&b[1]);. 
5f20: 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
5f30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
5f40: 20 20 20 20 7d 0a 20 20 20 20 61 20 2b 3d 20 73      }.    a += s
5f50: 74 72 6c 65 6e 28 26 61 5b 31 5d 29 20 2b 20 32  trlen(&a[1]) + 2
5f60: 3b 0a 20 20 20 20 62 20 2b 3d 20 73 74 72 6c 65  ;.    b += strle
5f70: 6e 28 26 62 5b 31 5d 29 20 2b 20 32 3b 0a 20 20  n(&b[1]) + 2;.  
5f80: 7d 0a 20 20 69 66 28 20 64 69 72 3d 3d 27 2d 27  }.  if( dir=='-'
5f90: 20 7c 7c 20 64 69 72 3d 3d 27 44 27 20 29 20 72   || dir=='D' ) r
5fa0: 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 72 65 74  es = -res;.  ret
5fb0: 75 72 6e 20 72 65 73 3b 0a 7d 0a 0a 23 69 66 64  urn res;.}..#ifd
5fc0: 65 66 20 53 51 4c 49 54 45 5f 55 54 46 38 0a 2f  ef SQLITE_UTF8./
5fd0: 2a 0a 2a 2a 20 58 20 69 73 20 61 20 70 6f 69 6e  *.** X is a poin
5fe0: 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
5ff0: 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
6000: 20 63 68 61 72 61 63 74 65 72 2e 20 20 49 6e 63   character.  Inc
6010: 72 65 6d 65 6e 74 0a 2a 2a 20 58 20 73 6f 20 74  rement.** X so t
6020: 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
6030: 20 74 68 65 20 6e 65 78 74 20 63 68 61 72 61 63   the next charac
6040: 74 65 72 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20  ter.  This only 
6050: 77 6f 72 6b 73 20 72 69 67 68 74 0a 2a 2a 20 69  works right.** i
6060: 66 20 58 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  f X points to a 
6070: 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 55 54 46 2d  well-formed UTF-
6080: 38 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65  8 string..*/.#de
6090: 66 69 6e 65 20 73 71 6c 69 74 65 4e 65 78 74 43  fine sqliteNextC
60a0: 68 61 72 28 58 29 20 20 77 68 69 6c 65 28 20 28  har(X)  while( (
60b0: 30 78 63 30 26 2a 2b 2b 28 58 29 29 3d 3d 30 78  0xc0&*++(X))==0x
60c0: 38 30 20 29 7b 7d 0a 23 64 65 66 69 6e 65 20 73  80 ){}.#define s
60d0: 71 6c 69 74 65 43 68 61 72 56 61 6c 28 58 29 20  qliteCharVal(X) 
60e0: 20 20 73 71 6c 69 74 65 5f 75 74 66 38 5f 74 6f    sqlite_utf8_to
60f0: 5f 69 6e 74 28 58 29 0a 0a 23 65 6c 73 65 20 2f  _int(X)..#else /
6100: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
6110: 45 5f 55 54 46 38 29 20 2a 2f 0a 2f 2a 0a 2a 2a  E_UTF8) */./*.**
6120: 20 46 6f 72 20 69 73 6f 38 38 35 39 20 65 6e 63   For iso8859 enc
6130: 6f 64 69 6e 67 2c 20 74 68 65 20 6e 65 78 74 20  oding, the next 
6140: 63 68 61 72 61 63 74 65 72 20 69 73 20 6a 75 73  character is jus
6150: 74 20 74 68 65 20 6e 65 78 74 20 62 79 74 65 2e  t the next byte.
6160: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
6170: 74 65 4e 65 78 74 43 68 61 72 28 58 29 20 20 28  teNextChar(X)  (
6180: 2b 2b 28 58 29 29 3b 0a 23 64 65 66 69 6e 65 20  ++(X));.#define 
6190: 73 71 6c 69 74 65 43 68 61 72 56 61 6c 28 58 29  sqliteCharVal(X)
61a0: 20 20 20 28 28 69 6e 74 29 2a 28 58 29 29 0a 0a     ((int)*(X))..
61b0: 23 65 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65  #endif /* define
61c0: 64 28 53 51 4c 49 54 45 5f 55 54 46 38 29 20 2a  d(SQLITE_UTF8) *
61d0: 2f 0a 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  /...#ifdef SQLIT
61e0: 45 5f 55 54 46 38 0a 2f 2a 0a 2a 2a 20 43 6f 6e  E_UTF8./*.** Con
61f0: 76 65 72 74 20 74 68 65 20 55 54 46 2d 38 20 63  vert the UTF-8 c
6200: 68 61 72 61 63 74 65 72 20 74 6f 20 77 68 69 63  haracter to whic
6210: 68 20 7a 20 70 6f 69 6e 74 73 20 69 6e 74 6f 20  h z points into 
6220: 61 20 33 31 2d 62 69 74 0a 2a 2a 20 55 43 53 20  a 31-bit.** UCS 
6230: 63 68 61 72 61 63 74 65 72 2e 20 20 54 68 69 73  character.  This
6240: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 72 69 67 68   only works righ
6250: 74 20 69 66 20 7a 20 70 6f 69 6e 74 73 20 74 6f  t if z points to
6260: 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 2a   a well-formed.*
6270: 2a 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 0a  * UTF-8 string..
6280: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6290: 6c 69 74 65 5f 75 74 66 38 5f 74 6f 5f 69 6e 74  lite_utf8_to_int
62a0: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
62b0: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
62c0: 63 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  c;.  static cons
62d0: 74 20 69 6e 74 20 69 6e 69 74 56 61 6c 5b 5d 20  t int initVal[] 
62e0: 3d 20 7b 0a 20 20 20 20 20 20 30 2c 20 20 20 31  = {.      0,   1
62f0: 2c 20 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c  ,   2,   3,   4,
6300: 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20     5,   6,   7, 
6310: 20 20 38 2c 20 20 20 39 2c 20 20 31 30 2c 20 20    8,   9,  10,  
6320: 31 31 2c 20 20 31 32 2c 20 20 31 33 2c 20 20 31  11,  12,  13,  1
6330: 34 2c 0a 20 20 20 20 20 31 35 2c 20 20 31 36 2c  4,.     15,  16,
6340: 20 20 31 37 2c 20 20 31 38 2c 20 20 31 39 2c 20    17,  18,  19, 
6350: 20 32 30 2c 20 20 32 31 2c 20 20 32 32 2c 20 20   20,  21,  22,  
6360: 32 33 2c 20 20 32 34 2c 20 20 32 35 2c 20 20 32  23,  24,  25,  2
6370: 36 2c 20 20 32 37 2c 20 20 32 38 2c 20 20 32 39  6,  27,  28,  29
6380: 2c 0a 20 20 20 20 20 33 30 2c 20 20 33 31 2c 20  ,.     30,  31, 
6390: 20 33 32 2c 20 20 33 33 2c 20 20 33 34 2c 20 20   32,  33,  34,  
63a0: 33 35 2c 20 20 33 36 2c 20 20 33 37 2c 20 20 33  35,  36,  37,  3
63b0: 38 2c 20 20 33 39 2c 20 20 34 30 2c 20 20 34 31  8,  39,  40,  41
63c0: 2c 20 20 34 32 2c 20 20 34 33 2c 20 20 34 34 2c  ,  42,  43,  44,
63d0: 0a 20 20 20 20 20 34 35 2c 20 20 34 36 2c 20 20  .     45,  46,  
63e0: 34 37 2c 20 20 34 38 2c 20 20 34 39 2c 20 20 35  47,  48,  49,  5
63f0: 30 2c 20 20 35 31 2c 20 20 35 32 2c 20 20 35 33  0,  51,  52,  53
6400: 2c 20 20 35 34 2c 20 20 35 35 2c 20 20 35 36 2c  ,  54,  55,  56,
6410: 20 20 35 37 2c 20 20 35 38 2c 20 20 35 39 2c 0a    57,  58,  59,.
6420: 20 20 20 20 20 36 30 2c 20 20 36 31 2c 20 20 36       60,  61,  6
6430: 32 2c 20 20 36 33 2c 20 20 36 34 2c 20 20 36 35  2,  63,  64,  65
6440: 2c 20 20 36 36 2c 20 20 36 37 2c 20 20 36 38 2c  ,  66,  67,  68,
6450: 20 20 36 39 2c 20 20 37 30 2c 20 20 37 31 2c 20    69,  70,  71, 
6460: 20 37 32 2c 20 20 37 33 2c 20 20 37 34 2c 0a 20   72,  73,  74,. 
6470: 20 20 20 20 37 35 2c 20 20 37 36 2c 20 20 37 37      75,  76,  77
6480: 2c 20 20 37 38 2c 20 20 37 39 2c 20 20 38 30 2c  ,  78,  79,  80,
6490: 20 20 38 31 2c 20 20 38 32 2c 20 20 38 33 2c 20    81,  82,  83, 
64a0: 20 38 34 2c 20 20 38 35 2c 20 20 38 36 2c 20 20   84,  85,  86,  
64b0: 38 37 2c 20 20 38 38 2c 20 20 38 39 2c 0a 20 20  87,  88,  89,.  
64c0: 20 20 20 39 30 2c 20 20 39 31 2c 20 20 39 32 2c     90,  91,  92,
64d0: 20 20 39 33 2c 20 20 39 34 2c 20 20 39 35 2c 20    93,  94,  95, 
64e0: 20 39 36 2c 20 20 39 37 2c 20 20 39 38 2c 20 20   96,  97,  98,  
64f0: 39 39 2c 20 31 30 30 2c 20 31 30 31 2c 20 31 30  99, 100, 101, 10
6500: 32 2c 20 31 30 33 2c 20 31 30 34 2c 0a 20 20 20  2, 103, 104,.   
6510: 20 31 30 35 2c 20 31 30 36 2c 20 31 30 37 2c 20   105, 106, 107, 
6520: 31 30 38 2c 20 31 30 39 2c 20 31 31 30 2c 20 31  108, 109, 110, 1
6530: 31 31 2c 20 31 31 32 2c 20 31 31 33 2c 20 31 31  11, 112, 113, 11
6540: 34 2c 20 31 31 35 2c 20 31 31 36 2c 20 31 31 37  4, 115, 116, 117
6550: 2c 20 31 31 38 2c 20 31 31 39 2c 0a 20 20 20 20  , 118, 119,.    
6560: 31 32 30 2c 20 31 32 31 2c 20 31 32 32 2c 20 31  120, 121, 122, 1
6570: 32 33 2c 20 31 32 34 2c 20 31 32 35 2c 20 31 32  23, 124, 125, 12
6580: 36 2c 20 31 32 37 2c 20 31 32 38 2c 20 31 32 39  6, 127, 128, 129
6590: 2c 20 31 33 30 2c 20 31 33 31 2c 20 31 33 32 2c  , 130, 131, 132,
65a0: 20 31 33 33 2c 20 31 33 34 2c 0a 20 20 20 20 31   133, 134,.    1
65b0: 33 35 2c 20 31 33 36 2c 20 31 33 37 2c 20 31 33  35, 136, 137, 13
65c0: 38 2c 20 31 33 39 2c 20 31 34 30 2c 20 31 34 31  8, 139, 140, 141
65d0: 2c 20 31 34 32 2c 20 31 34 33 2c 20 31 34 34 2c  , 142, 143, 144,
65e0: 20 31 34 35 2c 20 31 34 36 2c 20 31 34 37 2c 20   145, 146, 147, 
65f0: 31 34 38 2c 20 31 34 39 2c 0a 20 20 20 20 31 35  148, 149,.    15
6600: 30 2c 20 31 35 31 2c 20 31 35 32 2c 20 31 35 33  0, 151, 152, 153
6610: 2c 20 31 35 34 2c 20 31 35 35 2c 20 31 35 36 2c  , 154, 155, 156,
6620: 20 31 35 37 2c 20 31 35 38 2c 20 31 35 39 2c 20   157, 158, 159, 
6630: 31 36 30 2c 20 31 36 31 2c 20 31 36 32 2c 20 31  160, 161, 162, 1
6640: 36 33 2c 20 31 36 34 2c 0a 20 20 20 20 31 36 35  63, 164,.    165
6650: 2c 20 31 36 36 2c 20 31 36 37 2c 20 31 36 38 2c  , 166, 167, 168,
6660: 20 31 36 39 2c 20 31 37 30 2c 20 31 37 31 2c 20   169, 170, 171, 
6670: 31 37 32 2c 20 31 37 33 2c 20 31 37 34 2c 20 31  172, 173, 174, 1
6680: 37 35 2c 20 31 37 36 2c 20 31 37 37 2c 20 31 37  75, 176, 177, 17
6690: 38 2c 20 31 37 39 2c 0a 20 20 20 20 31 38 30 2c  8, 179,.    180,
66a0: 20 31 38 31 2c 20 31 38 32 2c 20 31 38 33 2c 20   181, 182, 183, 
66b0: 31 38 34 2c 20 31 38 35 2c 20 31 38 36 2c 20 31  184, 185, 186, 1
66c0: 38 37 2c 20 31 38 38 2c 20 31 38 39 2c 20 31 39  87, 188, 189, 19
66d0: 30 2c 20 31 39 31 2c 20 20 20 30 2c 20 20 20 31  0, 191,   0,   1
66e0: 2c 20 20 20 32 2c 0a 20 20 20 20 20 20 33 2c 20  ,   2,.      3, 
66f0: 20 20 34 2c 20 20 20 35 2c 20 20 20 36 2c 20 20    4,   5,   6,  
6700: 20 37 2c 20 20 20 38 2c 20 20 20 39 2c 20 20 31   7,   8,   9,  1
6710: 30 2c 20 20 31 31 2c 20 20 31 32 2c 20 20 31 33  0,  11,  12,  13
6720: 2c 20 20 31 34 2c 20 20 31 35 2c 20 20 31 36 2c  ,  14,  15,  16,
6730: 20 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20 20    17,.     18,  
6740: 31 39 2c 20 20 32 30 2c 20 20 32 31 2c 20 20 32  19,  20,  21,  2
6750: 32 2c 20 20 32 33 2c 20 20 32 34 2c 20 20 32 35  2,  23,  24,  25
6760: 2c 20 20 32 36 2c 20 20 32 37 2c 20 20 32 38 2c  ,  26,  27,  28,
6770: 20 20 32 39 2c 20 20 33 30 2c 20 20 33 31 2c 20    29,  30,  31, 
6780: 20 20 30 2c 0a 20 20 20 20 20 20 31 2c 20 20 20    0,.      1,   
6790: 32 2c 20 20 20 33 2c 20 20 20 34 2c 20 20 20 35  2,   3,   4,   5
67a0: 2c 20 20 20 36 2c 20 20 20 37 2c 20 20 20 38 2c  ,   6,   7,   8,
67b0: 20 20 20 39 2c 20 20 31 30 2c 20 20 31 31 2c 20     9,  10,  11, 
67c0: 20 31 32 2c 20 20 31 33 2c 20 20 31 34 2c 20 20   12,  13,  14,  
67d0: 31 35 2c 0a 20 20 20 20 20 20 30 2c 20 20 20 31  15,.      0,   1
67e0: 2c 20 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c  ,   2,   3,   4,
67f0: 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20     5,   6,   7, 
6800: 20 20 30 2c 20 20 20 31 2c 20 20 20 32 2c 20 20    0,   1,   2,  
6810: 20 33 2c 20 20 20 30 2c 20 20 20 31 2c 20 32 35   3,   0,   1, 25
6820: 34 2c 0a 20 20 20 20 32 35 35 2c 0a 20 20 7d 3b  4,.    255,.  };
6830: 0a 20 20 63 20 3d 20 69 6e 69 74 56 61 6c 5b 2a  .  c = initVal[*
6840: 28 7a 2b 2b 29 5d 3b 0a 20 20 77 68 69 6c 65 28  (z++)];.  while(
6850: 20 28 30 78 63 30 26 2a 7a 29 3d 3d 30 78 38 30   (0xc0&*z)==0x80
6860: 20 29 7b 0a 20 20 20 20 63 20 3d 20 28 63 3c 3c   ){.    c = (c<<
6870: 36 29 20 7c 20 28 30 78 33 66 26 2a 28 7a 2b 2b  6) | (0x3f&*(z++
6880: 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ));.  }.  return
6890: 20 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a   c;.}.#endif../*
68a0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20  .** Compare two 
68b0: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 20 66 6f  UTF-8 strings fo
68c0: 72 20 65 71 75 61 6c 69 74 79 20 77 68 65 72 65  r equality where
68d0: 20 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e   the first strin
68e0: 67 20 63 61 6e 0a 2a 2a 20 70 6f 74 65 6e 74 69  g can.** potenti
68f0: 61 6c 6c 79 20 62 65 20 61 20 22 67 6c 6f 62 22  ally be a "glob"
6900: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 52 65   expression.  Re
6910: 74 75 72 6e 20 74 72 75 65 20 28 31 29 20 69 66  turn true (1) if
6920: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 74 68 65   they.** are the
6930: 20 73 61 6d 65 20 61 6e 64 20 66 61 6c 73 65 20   same and false 
6940: 28 30 29 20 69 66 20 74 68 65 79 20 61 72 65 20  (0) if they are 
6950: 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 0a 2a 2a  different..**.**
6960: 20 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a   Globbing rules:
6970: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20  .**.**      '*' 
6980: 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e        Matches an
6990: 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65  y sequence of ze
69a0: 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61  ro or more chara
69b0: 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  cters..**.**    
69c0: 20 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63    '?'       Matc
69d0: 68 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  hes exactly one 
69e0: 63 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a  character..**.**
69f0: 20 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20       [...]      
6a00: 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72  Matches one char
6a10: 61 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65  acter from the e
6a20: 6e 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a  nclosed list of.
6a30: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
6a40: 20 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a    characters..**
6a50: 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20  .**     [^...]  
6a60: 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63     Matches one c
6a70: 68 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20  haracter not in 
6a80: 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73  the enclosed lis
6a90: 74 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  t..**.** With th
6aa0: 65 20 5b 2e 2e 2e 5d 20 61 6e 64 20 5b 5e 2e 2e  e [...] and [^..
6ab0: 2e 5d 20 6d 61 74 63 68 69 6e 67 2c 20 61 20 27  .] matching, a '
6ac0: 5d 27 20 63 68 61 72 61 63 74 65 72 20 63 61 6e  ]' character can
6ad0: 20 62 65 20 69 6e 63 6c 75 64 65 64 0a 2a 2a 20   be included.** 
6ae0: 69 6e 20 74 68 65 20 6c 69 73 74 20 62 79 20 6d  in the list by m
6af0: 61 6b 69 6e 67 20 69 74 20 74 68 65 20 66 69 72  aking it the fir
6b00: 73 74 20 63 68 61 72 61 63 74 65 72 20 61 66 74  st character aft
6b10: 65 72 20 27 5b 27 20 6f 72 20 27 5e 27 2e 20 20  er '[' or '^'.  
6b20: 41 0a 2a 2a 20 72 61 6e 67 65 20 6f 66 20 63 68  A.** range of ch
6b30: 61 72 61 63 74 65 72 73 20 63 61 6e 20 62 65 20  aracters can be 
6b40: 73 70 65 63 69 66 69 65 64 20 75 73 69 6e 67 20  specified using 
6b50: 27 2d 27 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 2a  '-'.  Example:.*
6b60: 2a 20 22 5b 61 2d 7a 5d 22 20 6d 61 74 63 68 65  * "[a-z]" matche
6b70: 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 6c 6f 77  s any single low
6b80: 65 72 2d 63 61 73 65 20 6c 65 74 74 65 72 2e 20  er-case letter. 
6b90: 20 54 6f 20 6d 61 74 63 68 20 61 20 27 2d 27 2c   To match a '-',
6ba0: 20 6d 61 6b 65 0a 2a 2a 20 69 74 20 74 68 65 20   make.** it the 
6bb0: 6c 61 73 74 20 63 68 61 72 61 63 74 65 72 20 69  last character i
6bc0: 6e 20 74 68 65 20 6c 69 73 74 2e 0a 2a 2a 0a 2a  n the list..**.*
6bd0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
6be0: 73 20 75 73 75 61 6c 6c 79 20 71 75 69 63 6b 2c  s usually quick,
6bf0: 20 62 75 74 20 63 61 6e 20 62 65 20 4e 2a 2a 32   but can be N**2
6c00: 20 69 6e 20 74 68 65 20 77 6f 72 73 74 20 63 61   in the worst ca
6c10: 73 65 2e 0a 2a 2a 0a 2a 2a 20 48 69 6e 74 73 3a  se..**.** Hints:
6c20: 20 74 6f 20 6d 61 74 63 68 20 27 2a 27 20 6f 72   to match '*' or
6c30: 20 27 3f 27 2c 20 70 75 74 20 74 68 65 6d 20 69   '?', put them i
6c40: 6e 20 22 5b 5d 22 2e 20 20 4c 69 6b 65 20 74 68  n "[]".  Like th
6c50: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
6c60: 20 20 61 62 63 5b 2a 5d 78 79 7a 20 20 20 20 20    abc[*]xyz     
6c70: 20 20 20 4d 61 74 63 68 65 73 20 22 61 62 63 2a     Matches "abc*
6c80: 78 79 7a 22 20 6f 6e 6c 79 0a 2a 2f 0a 69 6e 74  xyz" only.*/.int
6c90: 20 0a 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d   .sqlite3GlobCom
6ca0: 70 61 72 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  pare(const unsig
6cb0: 6e 65 64 20 63 68 61 72 20 2a 7a 50 61 74 74 65  ned char *zPatte
6cc0: 72 6e 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  rn, const unsign
6cd0: 65 64 20 63 68 61 72 20 2a 7a 53 74 72 69 6e 67  ed char *zString
6ce0: 29 7b 0a 20 20 72 65 67 69 73 74 65 72 20 69 6e  ){.  register in
6cf0: 74 20 63 3b 0a 20 20 69 6e 74 20 69 6e 76 65 72  t c;.  int inver
6d00: 74 3b 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a 20  t;.  int seen;. 
6d10: 20 69 6e 74 20 63 32 3b 0a 0a 20 20 77 68 69 6c   int c2;..  whil
6d20: 65 28 20 28 63 20 3d 20 2a 7a 50 61 74 74 65 72  e( (c = *zPatter
6d30: 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 77 69  n)!=0 ){.    swi
6d40: 74 63 68 28 20 63 20 29 7b 0a 20 20 20 20 20 20  tch( c ){.      
6d50: 63 61 73 65 20 27 2a 27 3a 0a 20 20 20 20 20 20  case '*':.      
6d60: 20 20 77 68 69 6c 65 28 20 28 63 3d 7a 50 61 74    while( (c=zPat
6d70: 74 65 72 6e 5b 31 5d 29 20 3d 3d 20 27 2a 27 20  tern[1]) == '*' 
6d80: 7c 7c 20 63 20 3d 3d 20 27 3f 27 20 29 7b 0a 20  || c == '?' ){. 
6d90: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d           if( c==
6da0: 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '?' ){.         
6db0: 20 20 20 69 66 28 20 2a 7a 53 74 72 69 6e 67 3d     if( *zString=
6dc0: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
6dd0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
6de0: 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e  eNextChar(zStrin
6df0: 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  g);.          }.
6e00: 20 20 20 20 20 20 20 20 20 20 7a 50 61 74 74 65            zPatte
6e10: 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rn++;.        }.
6e20: 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30          if( c==0
6e30: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20   ) return 1;.   
6e40: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5b 27 20       if( c=='[' 
6e50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  ){.          whi
6e60: 6c 65 28 20 2a 7a 53 74 72 69 6e 67 20 26 26 20  le( *zString && 
6e70: 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61  sqlite3GlobCompa
6e80: 72 65 28 26 7a 50 61 74 74 65 72 6e 5b 31 5d 2c  re(&zPattern[1],
6e90: 7a 53 74 72 69 6e 67 29 3d 3d 30 20 29 7b 0a 20  zString)==0 ){. 
6ea0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
6eb0: 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72 69 6e  eNextChar(zStrin
6ec0: 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  g);.          }.
6ed0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6ee0: 20 2a 7a 53 74 72 69 6e 67 21 3d 30 3b 0a 20 20   *zString!=0;.  
6ef0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
6f00: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63         while( (c
6f10: 32 20 3d 20 2a 7a 53 74 72 69 6e 67 29 21 3d 30  2 = *zString)!=0
6f20: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
6f30: 77 68 69 6c 65 28 20 63 32 20 21 3d 20 30 20 26  while( c2 != 0 &
6f40: 26 20 63 32 20 21 3d 20 63 20 29 7b 20 63 32 20  & c2 != c ){ c2 
6f50: 3d 20 2a 2b 2b 7a 53 74 72 69 6e 67 3b 20 7d 0a  = *++zString; }.
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
6f70: 63 32 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  c2==0 ) return 0
6f80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
6f90: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d  ( sqlite3GlobCom
6fa0: 70 61 72 65 28 26 7a 50 61 74 74 65 72 6e 5b 31  pare(&zPattern[1
6fb0: 5d 2c 7a 53 74 72 69 6e 67 29 20 29 20 72 65 74  ],zString) ) ret
6fc0: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 20  urn 1;.         
6fd0: 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61     sqliteNextCha
6fe0: 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20 20  r(zString);.    
6ff0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7000: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
7010: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
7020: 20 27 3f 27 3a 20 7b 0a 20 20 20 20 20 20 20 20   '?': {.        
7030: 69 66 28 20 2a 7a 53 74 72 69 6e 67 3d 3d 30 20  if( *zString==0 
7040: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
7050: 20 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68      sqliteNextCh
7060: 61 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20  ar(zString);.   
7070: 20 20 20 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b       zPattern++;
7080: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
7090: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
70a0: 73 65 20 27 5b 27 3a 20 7b 0a 20 20 20 20 20 20  se '[': {.      
70b0: 20 20 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d 20    int prior_c = 
70c0: 30 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 20  0;.        seen 
70d0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 76  = 0;.        inv
70e0: 65 72 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ert = 0;.       
70f0: 20 63 20 3d 20 73 71 6c 69 74 65 43 68 61 72 56   c = sqliteCharV
7100: 61 6c 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20  al(zString);.   
7110: 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20       if( c==0 ) 
7120: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
7130: 20 20 63 32 20 3d 20 2a 2b 2b 7a 50 61 74 74 65    c2 = *++zPatte
7140: 72 6e 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rn;.        if( 
7150: 63 32 3d 3d 27 5e 27 20 29 7b 20 69 6e 76 65 72  c2=='^' ){ inver
7160: 74 20 3d 20 31 3b 20 63 32 20 3d 20 2a 2b 2b 7a  t = 1; c2 = *++z
7170: 50 61 74 74 65 72 6e 3b 20 7d 0a 20 20 20 20 20  Pattern; }.     
7180: 20 20 20 69 66 28 20 63 32 3d 3d 27 5d 27 20 29     if( c2==']' )
7190: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
71a0: 63 3d 3d 27 5d 27 20 29 20 73 65 65 6e 20 3d 20  c==']' ) seen = 
71b0: 31 3b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20  1;.          c2 
71c0: 3d 20 2a 2b 2b 7a 50 61 74 74 65 72 6e 3b 0a 20  = *++zPattern;. 
71d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
71e0: 20 77 68 69 6c 65 28 20 28 63 32 20 3d 20 73 71   while( (c2 = sq
71f0: 6c 69 74 65 43 68 61 72 56 61 6c 28 7a 50 61 74  liteCharVal(zPat
7200: 74 65 72 6e 29 29 21 3d 30 20 26 26 20 63 32 21  tern))!=0 && c2!
7210: 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  =']' ){.        
7220: 20 20 69 66 28 20 63 32 3d 3d 27 2d 27 20 26 26    if( c2=='-' &&
7230: 20 7a 50 61 74 74 65 72 6e 5b 31 5d 21 3d 27 5d   zPattern[1]!=']
7240: 27 20 26 26 20 7a 50 61 74 74 65 72 6e 5b 31 5d  ' && zPattern[1]
7250: 21 3d 30 20 26 26 20 70 72 69 6f 72 5f 63 3e 30  !=0 && prior_c>0
7260: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
7270: 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20  zPattern++;.    
7280: 20 20 20 20 20 20 20 20 63 32 20 3d 20 73 71 6c          c2 = sql
7290: 69 74 65 43 68 61 72 56 61 6c 28 7a 50 61 74 74  iteCharVal(zPatt
72a0: 65 72 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ern);.          
72b0: 20 20 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63    if( c>=prior_c
72c0: 20 26 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e   && c<=c2 ) seen
72d0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
72e0: 20 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20    prior_c = 0;. 
72f0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
7300: 66 28 20 63 3d 3d 63 32 20 29 7b 0a 20 20 20 20  f( c==c2 ){.    
7310: 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d 20 31          seen = 1
7320: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ;.            pr
7330: 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20  ior_c = c2;.    
7340: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
7350: 20 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63           prior_c
7360: 20 3d 20 63 32 3b 0a 20 20 20 20 20 20 20 20 20   = c2;.         
7370: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
7380: 69 74 65 4e 65 78 74 43 68 61 72 28 7a 50 61 74  iteNextChar(zPat
7390: 74 65 72 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d  tern);.        }
73a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d  .        if( c2=
73b0: 3d 30 20 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e  =0 || (seen ^ in
73c0: 76 65 72 74 29 3d 3d 30 20 29 20 72 65 74 75 72  vert)==0 ) retur
73d0: 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  n 0;.        sql
73e0: 69 74 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72  iteNextChar(zStr
73f0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 50  ing);.        zP
7400: 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20  attern++;.      
7410: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
7420: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
7430: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 20  {.        if( c 
7440: 21 3d 20 2a 7a 53 74 72 69 6e 67 20 29 20 72 65  != *zString ) re
7450: 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20  turn 0;.        
7460: 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20  zPattern++;.    
7470: 20 20 20 20 7a 53 74 72 69 6e 67 2b 2b 3b 0a 20      zString++;. 
7480: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
7490: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
74a0: 20 20 72 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e    return *zStrin
74b0: 67 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  g==0;.}../*.** C
74c0: 6f 6d 70 61 72 65 20 74 77 6f 20 55 54 46 2d 38  ompare two UTF-8
74d0: 20 73 74 72 69 6e 67 73 20 66 6f 72 20 65 71 75   strings for equ
74e0: 61 6c 69 74 79 20 75 73 69 6e 67 20 74 68 65 20  ality using the 
74f0: 22 4c 49 4b 45 22 20 6f 70 65 72 61 74 6f 72 20  "LIKE" operator 
7500: 6f 66 0a 2a 2a 20 53 51 4c 2e 20 20 54 68 65 20  of.** SQL.  The 
7510: 27 25 27 20 63 68 61 72 61 63 74 65 72 20 6d 61  '%' character ma
7520: 74 63 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e  tches any sequen
7530: 63 65 20 6f 66 20 30 20 6f 72 20 6d 6f 72 65 0a  ce of 0 or more.
7540: 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20 61 6e  ** characters an
7550: 64 20 27 5f 27 20 6d 61 74 63 68 65 73 20 61 6e  d '_' matches an
7560: 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  y single charact
7570: 65 72 2e 20 20 43 61 73 65 20 69 73 0a 2a 2a 20  er.  Case is.** 
7580: 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 2e  not significant.
7590: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
75a0: 69 6e 65 20 69 73 20 6a 75 73 74 20 61 6e 20 61  ine is just an a
75b0: 64 61 70 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  daptation of the
75c0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d 70   sqlite3GlobComp
75d0: 61 72 65 28 29 0a 2a 2a 20 72 6f 75 74 69 6e 65  are().** routine
75e0: 20 61 62 6f 76 65 2e 0a 2a 2f 0a 69 6e 74 20 0a   above..*/.int .
75f0: 73 71 6c 69 74 65 33 4c 69 6b 65 43 6f 6d 70 61  sqlite3LikeCompa
7600: 72 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  re(const unsigne
7610: 64 20 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e  d char *zPattern
7620: 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  , const unsigned
7630: 20 63 68 61 72 20 2a 7a 53 74 72 69 6e 67 29 7b   char *zString){
7640: 0a 20 20 72 65 67 69 73 74 65 72 20 69 6e 74 20  .  register int 
7650: 63 3b 0a 20 20 69 6e 74 20 63 32 3b 0a 0a 20 20  c;.  int c2;..  
7660: 77 68 69 6c 65 28 20 28 63 20 3d 20 55 70 70 65  while( (c = Uppe
7670: 72 54 6f 4c 6f 77 65 72 5b 2a 7a 50 61 74 74 65  rToLower[*zPatte
7680: 72 6e 5d 29 21 3d 30 20 29 7b 0a 20 20 20 20 73  rn])!=0 ){.    s
7690: 77 69 74 63 68 28 20 63 20 29 7b 0a 20 20 20 20  witch( c ){.    
76a0: 20 20 63 61 73 65 20 27 25 27 3a 20 7b 0a 20 20    case '%': {.  
76b0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d        while( (c=
76c0: 7a 50 61 74 74 65 72 6e 5b 31 5d 29 20 3d 3d 20  zPattern[1]) == 
76d0: 27 25 27 20 7c 7c 20 63 20 3d 3d 20 27 5f 27 20  '%' || c == '_' 
76e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
76f0: 20 63 3d 3d 27 5f 27 20 29 7b 0a 20 20 20 20 20   c=='_' ){.     
7700: 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53 74 72         if( *zStr
7710: 69 6e 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ing==0 ) return 
7720: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  0;.            s
7730: 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28 7a 53  qliteNextChar(zS
7740: 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  tring);.        
7750: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7a 50    }.          zP
7760: 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20  attern++;.      
7770: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
7780: 63 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  c==0 ) return 1;
7790: 0a 20 20 20 20 20 20 20 20 63 20 3d 20 55 70 70  .        c = Upp
77a0: 65 72 54 6f 4c 6f 77 65 72 5b 63 5d 3b 0a 20 20  erToLower[c];.  
77b0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 32        while( (c2
77c0: 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 7a  =UpperToLower[*z
77d0: 53 74 72 69 6e 67 5d 29 21 3d 30 20 29 7b 0a 20  String])!=0 ){. 
77e0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
77f0: 63 32 20 21 3d 20 30 20 26 26 20 63 32 20 21 3d  c2 != 0 && c2 !=
7800: 20 63 20 29 7b 20 63 32 20 3d 20 55 70 70 65 72   c ){ c2 = Upper
7810: 54 6f 4c 6f 77 65 72 5b 2a 2b 2b 7a 53 74 72 69  ToLower[*++zStri
7820: 6e 67 5d 3b 20 7d 0a 20 20 20 20 20 20 20 20 20  ng]; }.         
7830: 20 69 66 28 20 63 32 3d 3d 30 20 29 20 72 65 74   if( c2==0 ) ret
7840: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 20  urn 0;.         
7850: 20 69 66 28 20 73 71 6c 69 74 65 33 4c 69 6b 65   if( sqlite3Like
7860: 43 6f 6d 70 61 72 65 28 26 7a 50 61 74 74 65 72  Compare(&zPatter
7870: 6e 5b 31 5d 2c 7a 53 74 72 69 6e 67 29 20 29 20  n[1],zString) ) 
7880: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20  return 1;.      
7890: 20 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43 68      sqliteNextCh
78a0: 61 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20 20  ar(zString);.   
78b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
78c0: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d  eturn 0;.      }
78d0: 0a 20 20 20 20 20 20 63 61 73 65 20 27 5f 27 3a  .      case '_':
78e0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a   {.        if( *
78f0: 7a 53 74 72 69 6e 67 3d 3d 30 20 29 20 72 65 74  zString==0 ) ret
7900: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 73  urn 0;.        s
7910: 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28 7a 53  qliteNextChar(zS
7920: 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  tring);.        
7930: 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20  zPattern++;.    
7940: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
7950: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
7960: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
7970: 63 20 21 3d 20 55 70 70 65 72 54 6f 4c 6f 77 65  c != UpperToLowe
7980: 72 5b 2a 7a 53 74 72 69 6e 67 5d 20 29 20 72 65  r[*zString] ) re
7990: 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20  turn 0;.        
79a0: 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20  zPattern++;.    
79b0: 20 20 20 20 7a 53 74 72 69 6e 67 2b 2b 3b 0a 20      zString++;. 
79c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
79d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
79e0: 20 20 72 65 74 75 72 6e 20 2a 7a 53 74 72 69 6e    return *zStrin
79f0: 67 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  g==0;.}../*.** C
7a00: 68 61 6e 67 65 20 74 68 65 20 73 71 6c 69 74 65  hange the sqlite
7a10: 2e 6d 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49  .magic from SQLI
7a20: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f  TE_MAGIC_OPEN to
7a30: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
7a40: 53 59 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e  SY..** Return an
7a50: 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f   error (non-zero
7a60: 29 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 77  ) if the magic w
7a70: 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41  as not SQLITE_MA
7a80: 47 49 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e  GIC_OPEN.** when
7a90: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
7aa0: 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   called..**.** T
7ab0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
7ac0: 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65   attempt to dete
7ad0: 63 74 20 69 66 20 74 77 6f 20 74 68 72 65 61 64  ct if two thread
7ae0: 73 20 75 73 65 20 74 68 65 0a 2a 2a 20 73 61 6d  s use the.** sam
7af0: 65 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65  e sqlite* pointe
7b00: 72 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  r at the same ti
7b10: 6d 65 2e 20 20 54 68 65 72 65 20 69 73 20 61 20  me.  There is a 
7b20: 72 61 63 65 20 0a 2a 2a 20 63 6f 6e 64 69 74 69  race .** conditi
7b30: 6f 6e 20 73 6f 20 69 74 20 69 73 20 70 6f 73 73  on so it is poss
7b40: 69 62 6c 65 20 74 68 61 74 20 74 68 65 20 65 72  ible that the er
7b50: 72 6f 72 20 69 73 20 6e 6f 74 20 64 65 74 65 63  ror is not detec
7b60: 74 65 64 2e 0a 2a 2a 20 42 75 74 20 75 73 75 61  ted..** But usua
7b70: 6c 6c 79 20 74 68 65 20 70 72 6f 62 6c 65 6d 20  lly the problem 
7b80: 77 69 6c 6c 20 62 65 20 73 65 65 6e 2e 20 20 54  will be seen.  T
7b90: 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
7ba0: 65 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 77 68  e an.** error wh
7bb0: 69 63 68 20 63 61 6e 20 62 65 20 75 73 65 64 20  ich can be used 
7bc0: 74 6f 20 64 65 62 75 67 20 74 68 65 20 61 70 70  to debug the app
7bd0: 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  lication that is
7be0: 0a 2a 2a 20 75 73 69 6e 67 20 53 51 4c 69 74 65  .** using SQLite
7bf0: 20 69 6e 63 6f 72 72 65 63 74 6c 79 2e 0a 2a 2a   incorrectly..**
7c00: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 30 32 3a  .** Ticket #202:
7c10: 20 20 49 66 20 64 62 2d 3e 6d 61 67 69 63 20 69    If db->magic i
7c20: 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 6f 70  s not a valid op
7c30: 65 6e 20 76 61 6c 75 65 2c 20 74 61 6b 65 20 63  en value, take c
7c40: 61 72 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20 6d 6f  are not.** to mo
7c50: 64 69 66 79 20 74 68 65 20 64 62 20 73 74 72 75  dify the db stru
7c60: 63 74 75 72 65 20 61 74 20 61 6c 6c 2e 20 20 49  cture at all.  I
7c70: 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61 74 20  t could be that 
7c80: 64 62 20 69 73 20 61 20 73 74 61 6c 65 0a 2a 2a  db is a stale.**
7c90: 20 70 6f 69 6e 74 65 72 2e 20 20 49 6e 20 6f 74   pointer.  In ot
7ca0: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 20 63 6f  her words, it co
7cb0: 75 6c 64 20 62 65 20 74 68 61 74 20 74 68 65 72  uld be that ther
7cc0: 65 20 68 61 73 20 62 65 65 6e 20 61 20 70 72 69  e has been a pri
7cd0: 6f 72 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20 73 71  or.** call to sq
7ce0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 20  lite3_close(db) 
7cf0: 61 6e 64 20 64 62 20 68 61 73 20 62 65 65 6e 20  and db has been 
7d00: 64 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20 41 6e  deallocated.  An
7d10: 64 20 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74 20 77  d we do.** not w
7d20: 61 6e 74 20 74 6f 20 77 72 69 74 65 20 69 6e 74  ant to write int
7d30: 6f 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 6d 65  o deallocated me
7d40: 6d 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  mory..*/.int sql
7d50: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 73 71 6c  ite3SafetyOn(sql
7d60: 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 66 28 20  ite *db){.  if( 
7d70: 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54  db->magic==SQLIT
7d80: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a  E_MAGIC_OPEN ){.
7d90: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
7da0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
7db0: 59 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  Y;.    return 0;
7dc0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d  .  }else if( db-
7dd0: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
7de0: 41 47 49 43 5f 42 55 53 59 20 7c 7c 20 64 62 2d  AGIC_BUSY || db-
7df0: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
7e00: 41 47 49 43 5f 45 52 52 4f 52 0a 20 20 20 20 20  AGIC_ERROR.     
7e10: 20 20 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 77          || db->w
7e20: 61 6e 74 5f 74 6f 5f 63 6c 6f 73 65 20 29 7b 0a  ant_to_close ){.
7e30: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
7e40: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
7e50: 4f 52 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  OR;.    db->flag
7e60: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
7e70: 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74  rrupt;.  }.  ret
7e80: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
7e90: 43 68 61 6e 67 65 20 74 68 65 20 6d 61 67 69 63  Change the magic
7ea0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47   from SQLITE_MAG
7eb0: 49 43 5f 42 55 53 59 20 74 6f 20 53 51 4c 49 54  IC_BUSY to SQLIT
7ec0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a  E_MAGIC_OPEN..**
7ed0: 20 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   Return an error
7ee0: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
7ef0: 68 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74  he magic was not
7f00: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
7f10: 53 59 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20  SY.** when this 
7f20: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
7f30: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
7f40: 33 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69 74  3SafetyOff(sqlit
7f50: 65 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  e *db){.  if( db
7f60: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
7f70: 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a 20 20  MAGIC_BUSY ){.  
7f80: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
7f90: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b  LITE_MAGIC_OPEN;
7fa0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
7fb0: 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d   }else if( db->m
7fc0: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
7fd0: 49 43 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d  IC_OPEN || db->m
7fe0: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
7ff0: 49 43 5f 45 52 52 4f 52 0a 20 20 20 20 20 20 20  IC_ERROR.       
8000: 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 77 61 6e        || db->wan
8010: 74 5f 74 6f 5f 63 6c 6f 73 65 20 29 7b 0a 20 20  t_to_close ){.  
8020: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
8030: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
8040: 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
8050: 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72  |= SQLITE_Interr
8060: 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  upt;.  }.  retur
8070: 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68  n 1;.}../*.** Ch
8080: 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  eck to make sure
8090: 20 77 65 20 61 72 65 20 6e 6f 74 20 63 75 72 72   we are not curr
80a0: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
80b0: 61 6e 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  an sqlite3_exec(
80c0: 29 2e 0a 2a 2a 20 49 66 20 77 65 20 61 72 65 20  )..** If we are 
80d0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 6e 20  currently in an 
80e0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
80f0: 72 65 74 75 72 6e 20 74 72 75 65 20 61 6e 64 20  return true and 
8100: 73 65 74 0a 2a 2a 20 73 71 6c 69 74 65 2e 6d 61  set.** sqlite.ma
8110: 67 69 63 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41  gic to SQLITE_MA
8120: 47 49 43 5f 45 52 52 4f 52 2e 20 20 54 68 69 73  GIC_ERROR.  This
8130: 20 77 69 6c 6c 20 63 61 75 73 65 20 61 20 63 6f   will cause a co
8140: 6d 70 6c 65 74 65 0a 2a 2a 20 73 68 75 74 64 6f  mplete.** shutdo
8150: 77 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  wn of the databa
8160: 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  se..**.** This r
8170: 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64 20 74  outine is used t
8180: 6f 20 74 72 79 20 74 6f 20 64 65 74 65 63 74 20  o try to detect 
8190: 77 68 65 6e 20 41 50 49 20 72 6f 75 74 69 6e 65  when API routine
81a0: 73 20 61 72 65 20 63 61 6c 6c 65 64 0a 2a 2a 20  s are called.** 
81b0: 61 74 20 74 68 65 20 77 72 6f 6e 67 20 74 69 6d  at the wrong tim
81c0: 65 20 6f 72 20 69 6e 20 74 68 65 20 77 72 6f 6e  e or in the wron
81d0: 67 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2f 0a 69  g sequence..*/.i
81e0: 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
81f0: 43 68 65 63 6b 28 73 71 6c 69 74 65 20 2a 64 62  Check(sqlite *db
8200: 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64  ){.  if( db->pVd
8210: 62 65 21 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  be!=0 ){.    db-
8220: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
8230: 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20  MAGIC_ERROR;.   
8240: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
8250: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
8260: 0a 2a 2a 20 54 68 65 20 76 61 72 69 61 62 6c 65  .** The variable
8270: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20  -length integer 
8280: 65 6e 63 6f 64 69 6e 67 20 69 73 20 61 73 20 66  encoding is as f
8290: 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45  ollows:.**.** KE
82a0: 59 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 41 20  Y:.**         A 
82b0: 3d 20 30 78 78 78 78 78 78 78 20 20 20 20 37 20  = 0xxxxxxx    7 
82c0: 62 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64  bits of data and
82d0: 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a   one flag bit.**
82e0: 20 20 20 20 20 20 20 20 20 42 20 3d 20 31 78 78           B = 1xx
82f0: 78 78 78 78 78 20 20 20 20 37 20 62 69 74 73 20  xxxxx    7 bits 
8300: 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20  of data and one 
8310: 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20  flag bit.**     
8320: 20 20 20 20 43 20 3d 20 78 78 78 78 78 78 78 78      C = xxxxxxxx
8330: 20 20 20 20 38 20 62 69 74 73 20 6f 66 20 64 61      8 bits of da
8340: 74 61 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69 74 73  ta.**.**  7 bits
8350: 20 2d 20 41 0a 2a 2a 20 31 34 20 62 69 74 73 20   - A.** 14 bits 
8360: 2d 20 42 41 0a 2a 2a 20 32 31 20 62 69 74 73 20  - BA.** 21 bits 
8370: 2d 20 42 42 41 0a 2a 2a 20 32 38 20 62 69 74 73  - BBA.** 28 bits
8380: 20 2d 20 42 42 42 41 0a 2a 2a 20 33 35 20 62 69   - BBBA.** 35 bi
8390: 74 73 20 2d 20 42 42 42 42 41 0a 2a 2a 20 34 32  ts - BBBBA.** 42
83a0: 20 62 69 74 73 20 2d 20 42 42 42 42 42 41 0a 2a   bits - BBBBBA.*
83b0: 2a 20 34 39 20 62 69 74 73 20 2d 20 42 42 42 42  * 49 bits - BBBB
83c0: 42 42 41 0a 2a 2a 20 35 36 20 62 69 74 73 20 2d  BBA.** 56 bits -
83d0: 20 42 42 42 42 42 42 42 41 0a 2a 2a 20 36 34 20   BBBBBBBA.** 64 
83e0: 62 69 74 73 20 2d 20 42 42 42 42 42 42 42 42 43  bits - BBBBBBBBC
83f0: 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65  .*/../*.** Write
8400: 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61 62   a 64-bit variab
8410: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
8420: 72 20 74 6f 20 6d 65 6d 6f 72 79 20 73 74 61 72  r to memory star
8430: 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a  ting at p[0]..**
8440: 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 64   The length of d
8450: 61 74 61 20 77 72 69 74 65 20 77 69 6c 6c 20 62  ata write will b
8460: 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
8470: 39 20 62 79 74 65 73 2e 20 20 54 68 65 20 6e 75  9 bytes.  The nu
8480: 6d 62 65 72 0a 2a 2a 20 6f 66 20 62 79 74 65 73  mber.** of bytes
8490: 20 77 72 69 74 74 65 6e 20 69 73 20 72 65 74 75   written is retu
84a0: 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61  rned..**.** A va
84b0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
84c0: 74 65 67 65 72 20 63 6f 6e 73 69 73 74 73 20 6f  teger consists o
84d0: 66 20 74 68 65 20 6c 6f 77 65 72 20 37 20 62 69  f the lower 7 bi
84e0: 74 73 20 6f 66 20 65 61 63 68 20 62 79 74 65 0a  ts of each byte.
84f0: 2a 2a 20 66 6f 72 20 61 6c 6c 20 62 79 74 65 73  ** for all bytes
8500: 20 74 68 61 74 20 68 61 76 65 20 74 68 65 20 38   that have the 8
8510: 74 68 20 62 69 74 20 73 65 74 20 61 6e 64 20 6f  th bit set and o
8520: 6e 65 20 62 79 74 65 20 77 69 74 68 20 74 68 65  ne byte with the
8530: 20 38 74 68 0a 2a 2a 20 62 69 74 20 63 6c 65 61   8th.** bit clea
8540: 72 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 77  r.  Except, if w
8550: 65 20 67 65 74 20 74 6f 20 74 68 65 20 39 74 68  e get to the 9th
8560: 20 62 79 74 65 2c 20 69 74 20 73 74 6f 72 65 73   byte, it stores
8570: 20 74 68 65 20 66 75 6c 6c 0a 2a 2a 20 38 20 62   the full.** 8 b
8580: 69 74 73 20 61 6e 64 20 69 73 20 74 68 65 20 6c  its and is the l
8590: 61 73 74 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e 74  ast byte..*/.int
85a0: 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
85b0: 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t(unsigned char 
85c0: 2a 70 2c 20 75 36 34 20 76 29 7b 0a 20 20 69 6e  *p, u64 v){.  in
85d0: 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20  t i, j, n;.  u8 
85e0: 62 75 66 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76  buf[10];.  if( v
85f0: 20 26 20 30 78 66 66 30 30 30 30 30 30 30 30 30   & 0xff000000000
8600: 30 30 30 30 30 20 29 7b 0a 20 20 20 20 70 5b 38  00000 ){.    p[8
8610: 5d 20 3d 20 76 3b 0a 20 20 20 20 76 20 3e 3e 3d  ] = v;.    v >>=
8620: 20 38 3b 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b   8;.    for(i=7;
8630: 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20   i>=0; i--){.   
8640: 20 20 20 70 5b 69 5d 20 3d 20 28 76 20 26 20 30     p[i] = (v & 0
8650: 78 37 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20  x7f) | 0x80;.   
8660: 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 20 20     v >>= 7;.    
8670: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 39 3b 0a  }.    return 9;.
8680: 20 20 7d 20 20 20 20 0a 20 20 6e 20 3d 20 30 3b    }    .  n = 0;
8690: 0a 20 20 64 6f 7b 0a 20 20 20 20 62 75 66 5b 6e  .  do{.    buf[n
86a0: 2b 2b 5d 20 3d 20 28 76 20 26 20 30 78 37 66 29  ++] = (v & 0x7f)
86b0: 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 76 20 3e   | 0x80;.    v >
86c0: 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20  >= 7;.  }while( 
86d0: 76 21 3d 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d  v!=0 );.  buf[0]
86e0: 20 26 3d 20 30 78 37 66 3b 0a 20 20 61 73 73 65   &= 0x7f;.  asse
86f0: 72 74 28 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f  rt( n<=9 );.  fo
8700: 72 28 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e  r(i=0, j=n-1; j>
8710: 3d 30 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20  =0; j--, i++){. 
8720: 20 20 20 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d     p[i] = buf[j]
8730: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e  ;.  }.  return n
8740: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20  ;.}../*.** Read 
8750: 61 20 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c  a 64-bit variabl
8760: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
8770: 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61   from memory sta
8780: 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a  rting at p[0]..*
8790: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
87a0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 61  ber of bytes rea
87b0: 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  d.  The value is
87c0: 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a   stored in *v..*
87d0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  /.int sqlite3Get
87e0: 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
87f0: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75  igned char *p, u
8800: 36 34 20 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b  64 *v){.  u32 x;
8810: 0a 20 20 75 36 34 20 78 36 34 3b 0a 20 20 69 6e  .  u64 x64;.  in
8820: 74 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  t n;.  unsigned 
8830: 63 68 61 72 20 63 3b 0a 20 20 63 20 3d 20 70 5b  char c;.  c = p[
8840: 30 5d 3b 0a 20 20 69 66 28 20 28 63 20 26 20 30  0];.  if( (c & 0
8850: 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a  x80)==0 ){.    *
8860: 76 20 3d 20 63 3b 0a 20 20 20 20 72 65 74 75 72  v = c;.    retur
8870: 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 63  n 1;.  }.  x = c
8880: 20 26 20 30 78 37 66 3b 0a 20 20 63 20 3d 20 70   & 0x7f;.  c = p
8890: 5b 31 5d 3b 0a 20 20 69 66 28 20 28 63 20 26 20  [1];.  if( (c & 
88a0: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
88b0: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
88c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20  .    return 2;. 
88d0: 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20   }.  x = (x<<7) 
88e0: 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 63 20  | (c&0x7f);.  c 
88f0: 3d 20 70 5b 32 5d 3b 0a 20 20 69 66 28 20 28 63  = p[2];.  if( (c
8900: 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20   & 0x80)==0 ){. 
8910: 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c     *v = (x<<7) |
8920: 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 33   c;.    return 3
8930: 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c  ;.  }.  x = (x<<
8940: 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20  7) | (c&0x7f);. 
8950: 20 63 20 3d 20 70 5b 33 5d 3b 0a 20 20 69 66 28   c = p[3];.  if(
8960: 20 28 63 20 26 20 30 78 38 30 29 3d 3d 30 20 29   (c & 0x80)==0 )
8970: 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37  {.    *v = (x<<7
8980: 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72  ) | c;.    retur
8990: 6e 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20 3d  n 4;.  }.  x64 =
89a0: 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37   (x<<7) | (c&0x7
89b0: 66 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20 64  f);.  n = 4;.  d
89c0: 6f 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b 2b  o{.    c = p[n++
89d0: 5d 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39 20  ];.    if( n==9 
89e0: 29 7b 0a 20 20 20 20 20 20 78 36 34 20 3d 20 28  ){.      x64 = (
89f0: 78 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20 20  x64<<8) | c;.   
8a00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
8a10: 20 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c 3c      x64 = (x64<<
8a20: 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20  7) | (c&0x7f);. 
8a30: 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30 78   }while( (c & 0x
8a40: 38 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20 3d  80)!=0 );.  *v =
8a50: 20 78 36 34 3b 0a 20 20 72 65 74 75 72 6e 20 6e   x64;.  return n
8a60: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20  ;.}../*.** Read 
8a70: 61 20 33 32 2d 62 69 74 20 76 61 72 69 61 62 6c  a 32-bit variabl
8a80: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
8a90: 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61   from memory sta
8aa0: 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a  rting at p[0]..*
8ab0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
8ac0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 61  ber of bytes rea
8ad0: 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  d.  The value is
8ae0: 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a   stored in *v..*
8af0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  /.int sqlite3Get
8b00: 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
8b10: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
8b20: 20 75 33 32 20 2a 76 29 7b 0a 20 20 69 6e 74 20   u32 *v){.  int 
8b30: 6e 20 3d 20 31 3b 0a 20 20 75 6e 73 69 67 6e 65  n = 1;.  unsigne
8b40: 64 20 63 68 61 72 20 63 20 3d 20 70 5b 30 5d 3b  d char c = p[0];
8b50: 0a 20 20 75 33 32 20 78 20 3d 20 63 20 26 20 30  .  u32 x = c & 0
8b60: 78 37 66 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  x7f;.  while( (c
8b70: 20 26 20 30 78 38 30 29 21 3d 30 20 26 26 20 6e   & 0x80)!=0 && n
8b80: 3c 39 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 5b  <9 ){.    c = p[
8b90: 6e 2b 2b 5d 3b 0a 20 20 20 20 78 20 3d 20 28 78  n++];.    x = (x
8ba0: 3c 3c 37 29 20 7c 20 28 63 20 26 20 30 78 37 66  <<7) | (c & 0x7f
8bb0: 29 3b 0a 20 20 7d 0a 20 20 2a 76 20 3d 20 78 3b  );.  }.  *v = x;
8bc0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a  .  return n;.}..
8bd0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
8be0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8bf0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 6e 65   that will be ne
8c00: 65 64 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  eded to store th
8c10: 65 20 67 69 76 65 6e 0a 2a 2a 20 36 34 2d 62 69  e given.** 64-bi
8c20: 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69 6e  t integer..*/.in
8c30: 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
8c40: 65 6e 28 75 36 34 20 76 29 7b 0a 20 20 69 6e 74  en(u64 v){.  int
8c50: 20 69 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20   i = 0;.  do{.  
8c60: 20 20 69 2b 2b 3b 0a 20 20 20 20 76 20 3e 3e 3d    i++;.    v >>=
8c70: 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21   7;.  }while( v!
8c80: 3d 30 20 26 26 20 69 3c 39 20 29 3b 0a 20 20 72  =0 && i<9 );.  r
8c90: 65 74 75 72 6e 20 69 3b 0a 7d 0a                 eturn i;.}.