/ Hex Artifact Content
Login

Artifact a373ba2f631181b3302f3c2ebdfc9772833c6a17:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 55 74 69 6c 69 74  ******.** Utilit
0180: 79 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  y functions used
0190: 20 74 68 72 6f 75 67 68 6f 75 74 20 73 71 6c 69   throughout sqli
01a0: 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  te..**.** This f
01b0: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 66 75 6e  ile contains fun
01c0: 63 74 69 6f 6e 73 20 66 6f 72 20 61 6c 6c 6f 63  ctions for alloc
01d0: 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c 20 63 6f  ating memory, co
01e0: 6d 70 61 72 69 6e 67 0a 2a 2a 20 73 74 72 69 6e  mparing.** strin
01f0: 67 73 2c 20 61 6e 64 20 73 74 75 66 66 20 6c 69  gs, and stuff li
0200: 6b 65 20 74 68 61 74 2e 0a 2a 2a 0a 2a 2a 20 24  ke that..**.** $
0210: 49 64 3a 20 75 74 69 6c 2e 63 2c 76 20 31 2e 31  Id: util.c,v 1.1
0220: 31 30 20 32 30 30 34 2f 30 36 2f 33 30 20 31 32  10 2004/06/30 12
0230: 3a 34 39 3a 34 36 20 64 61 6e 69 65 6c 6b 31 39  :49:46 danielk19
0240: 37 37 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63  77 Exp $.*/.#inc
0250: 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e  lude "sqliteInt.
0260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
0270: 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  arg.h>.#include 
0280: 3c 63 74 79 70 65 2e 68 3e 0a 0a 23 69 66 20 53  <ctype.h>..#if S
0290: 51 4c 49 54 45 5f 44 45 42 55 47 3e 32 20 26 26  QLITE_DEBUG>2 &&
02a0: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4c 49 42 43   defined(__GLIBC
02b0: 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20 3c 65 78  __).#include <ex
02c0: 65 63 69 6e 66 6f 2e 68 3e 0a 76 6f 69 64 20 70  ecinfo.h>.void p
02d0: 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63 65  rint_stack_trace
02e0: 28 29 7b 0a 20 20 76 6f 69 64 20 2a 62 74 5b 33  (){.  void *bt[3
02f0: 30 5d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  0];.  int i;.  i
0300: 6e 74 20 6e 20 3d 20 62 61 63 6b 74 72 61 63 65  nt n = backtrace
0310: 28 62 74 2c 20 33 30 29 3b 0a 0a 20 20 66 70 72  (bt, 30);..  fpr
0320: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 54  intf(stderr, "ST
0330: 41 43 4b 3a 20 22 29 3b 0a 20 20 66 6f 72 28 69  ACK: ");.  for(i
0340: 3d 30 3b 20 69 3c 6e 3b 69 2b 2b 29 7b 0a 20 20  =0; i<n;i++){.  
0350: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0360: 2c 20 22 25 70 20 22 2c 20 62 74 5b 69 5d 29 3b  , "%p ", bt[i]);
0370: 0a 20 20 7d 0a 20 20 66 70 72 69 6e 74 66 28 73  .  }.  fprintf(s
0380: 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a 7d 0a  tderr, "\n");.}.
0390: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 70 72  #else.#define pr
03a0: 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63 65 28  int_stack_trace(
03b0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
03c0: 49 66 20 6d 61 6c 6c 6f 63 28 29 20 65 76 65 72  If malloc() ever
03d0: 20 66 61 69 6c 73 2c 20 74 68 69 73 20 67 6c 6f   fails, this glo
03e0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 67 65 74  bal variable get
03f0: 73 20 73 65 74 20 74 6f 20 31 2e 0a 2a 2a 20 54  s set to 1..** T
0400: 68 69 73 20 63 61 75 73 65 73 20 74 68 65 20 6c  his causes the l
0410: 69 62 72 61 72 79 20 74 6f 20 61 62 6f 72 74 20  ibrary to abort 
0420: 61 6e 64 20 6e 65 76 65 72 20 61 67 61 69 6e 20  and never again 
0430: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74  function..*/.int
0440: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
0450: 66 61 69 6c 65 64 20 3d 20 30 3b 0a 0a 2f 2a 0a  failed = 0;../*.
0460: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 44 45 42  ** If SQLITE_DEB
0470: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  UG is defined, t
0480: 68 65 6e 20 75 73 65 20 76 65 72 73 69 6f 6e 73  hen use versions
0490: 20 6f 66 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64   of malloc() and
04a0: 0a 2a 2a 20 66 72 65 65 28 29 20 74 68 61 74 20  .** free() that 
04b0: 74 72 61 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61  track memory usa
04c0: 67 65 20 61 6e 64 20 63 68 65 63 6b 20 66 6f 72  ge and check for
04d0: 20 62 75 66 66 65 72 20 6f 76 65 72 72 75 6e 73   buffer overruns
04e0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
04f0: 54 45 5f 44 45 42 55 47 0a 0a 2f 2a 0a 2a 2a 20  TE_DEBUG../*.** 
0500: 46 6f 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  For keeping trac
0510: 6b 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  k of the number 
0520: 6f 66 20 6d 61 6c 6c 6f 63 73 20 61 6e 64 20 66  of mallocs and f
0530: 72 65 65 73 2e 20 20 20 54 68 69 73 0a 2a 2a 20  rees.   This.** 
0540: 69 73 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  is used to check
0550: 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6c 65 61 6b   for memory leak
0560: 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  s..*/.int sqlite
0570: 33 5f 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  3_nMalloc;      
0580: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
0590: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 63  sqliteMalloc() c
05a0: 61 6c 6c 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  alls */.int sqli
05b0: 74 65 33 5f 6e 46 72 65 65 3b 20 20 20 20 20 20  te3_nFree;      
05c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
05d0: 66 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 63  f sqliteFree() c
05e0: 61 6c 6c 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  alls */.int sqli
05f0: 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3b  te3_iMallocFail;
0600: 20 20 20 20 20 2f 2a 20 46 61 69 6c 20 73 71 6c       /* Fail sql
0610: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 66 74 65  iteMalloc() afte
0620: 72 20 74 68 69 73 20 6d 61 6e 79 20 63 61 6c 6c  r this many call
0630: 73 20 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  s */.#if SQLITE_
0640: 44 45 42 55 47 3e 31 0a 73 74 61 74 69 63 20 69  DEBUG>1.static i
0650: 6e 74 20 6d 65 6d 63 6e 74 20 3d 20 30 3b 0a 23  nt memcnt = 0;.#
0660: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d  endif../*.** Num
0670: 62 65 72 20 6f 66 20 33 32 2d 62 69 74 20 67 75  ber of 32-bit gu
0680: 61 72 64 20 77 6f 72 64 73 0a 2a 2f 0a 23 64 65  ard words.*/.#de
0690: 66 69 6e 65 20 4e 5f 47 55 41 52 44 20 31 0a 0a  fine N_GUARD 1..
06a0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e  /*.** Allocate n
06b0: 65 77 20 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65  ew memory and se
06c0: 74 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52  t it to zero.  R
06d0: 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a  eturn NULL if.**
06e0: 20 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76   no memory is av
06f0: 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 76 6f 69 64  ailable..*/.void
0700: 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f   *sqlite3Malloc_
0710: 28 69 6e 74 20 6e 2c 20 69 6e 74 20 62 5a 65 72  (int n, int bZer
0720: 6f 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20  o, char *zFile, 
0730: 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 76 6f 69  int line){.  voi
0740: 64 20 2a 70 3b 0a 20 20 69 6e 74 20 2a 70 69 3b  d *p;.  int *pi;
0750: 0a 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 69  .  int i, k;.  i
0760: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
0770: 6f 63 46 61 69 6c 3e 3d 30 20 29 7b 0a 20 20 20  ocFail>=0 ){.   
0780: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
0790: 46 61 69 6c 2d 2d 3b 0a 20 20 20 20 69 66 28 20  Fail--;.    if( 
07a0: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
07b0: 61 69 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ail==0 ){.      
07c0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
07d0: 61 69 6c 65 64 2b 2b 3b 0a 23 69 66 20 53 51 4c  ailed++;.#if SQL
07e0: 49 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 20 20  ITE_DEBUG>1.    
07f0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0800: 2c 22 2a 2a 2a 2a 20 66 61 69 6c 65 64 20 74 6f  ,"**** failed to
0810: 20 61 6c 6c 6f 63 61 74 65 20 25 64 20 62 79 74   allocate %d byt
0820: 65 73 20 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a  es at %s:%d\n",.
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 2c                n,
0840: 20 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65   zFile,line);.#e
0850: 6e 64 69 66 0a 20 20 20 20 20 20 73 71 6c 69 74  ndif.      sqlit
0860: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 2d 2d  e3_iMallocFail--
0870: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ;.      return 0
0880: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
0890: 28 20 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( n==0 ) return 
08a0: 30 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65  0;.  k = (n+size
08b0: 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f  of(int)-1)/sizeo
08c0: 66 28 69 6e 74 29 3b 0a 20 20 70 69 20 3d 20 6d  f(int);.  pi = m
08d0: 61 6c 6c 6f 63 28 20 28 4e 5f 47 55 41 52 44 2a  alloc( (N_GUARD*
08e0: 32 2b 31 2b 6b 29 2a 73 69 7a 65 6f 66 28 69 6e  2+1+k)*sizeof(in
08f0: 74 29 29 3b 0a 20 20 69 66 28 20 70 69 3d 3d 30  t));.  if( pi==0
0900: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
0910: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b  malloc_failed++;
0920: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
0930: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6e 4d 61   }.  sqlite3_nMa
0940: 6c 6c 6f 63 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d  lloc++;.  for(i=
0950: 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b  0; i<N_GUARD; i+
0960: 2b 29 20 70 69 5b 69 5d 20 3d 20 30 78 64 65 61  +) pi[i] = 0xdea
0970: 64 31 31 32 32 3b 0a 20 20 70 69 5b 4e 5f 47 55  d1122;.  pi[N_GU
0980: 41 52 44 5d 20 3d 20 6e 3b 0a 20 20 66 6f 72 28  ARD] = n;.  for(
0990: 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20  i=0; i<N_GUARD; 
09a0: 69 2b 2b 29 20 70 69 5b 6b 2b 31 2b 4e 5f 47 55  i++) pi[k+1+N_GU
09b0: 41 52 44 2b 69 5d 20 3d 20 30 78 64 65 61 64 33  ARD+i] = 0xdead3
09c0: 33 34 34 3b 0a 20 20 70 20 3d 20 26 70 69 5b 4e  344;.  p = &pi[N
09d0: 5f 47 55 41 52 44 2b 31 5d 3b 0a 20 20 6d 65 6d  _GUARD+1];.  mem
09e0: 73 65 74 28 70 2c 20 62 5a 65 72 6f 3d 3d 30 2c  set(p, bZero==0,
09f0: 20 6e 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f   n);.#if SQLITE_
0a00: 44 45 42 55 47 3e 31 0a 20 20 70 72 69 6e 74 5f  DEBUG>1.  print_
0a10: 73 74 61 63 6b 5f 74 72 61 63 65 28 29 3b 0a 20  stack_trace();. 
0a20: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
0a30: 22 25 30 36 64 20 6d 61 6c 6c 6f 63 20 25 64 20  "%06d malloc %d 
0a40: 62 79 74 65 73 20 61 74 20 30 78 25 78 20 66 72  bytes at 0x%x fr
0a50: 6f 6d 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20  om %s:%d\n",.   
0a60: 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c 20     ++memcnt, n, 
0a70: 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 6c 69  (int)p, zFile,li
0a80: 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ne);.#endif.  re
0a90: 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn p;.}../*.**
0aa0: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
0ab0: 20 74 68 65 20 67 69 76 65 6e 20 70 6f 69 6e 74   the given point
0ac0: 65 72 20 77 61 73 20 6f 62 74 61 69 6e 65 64 20  er was obtained 
0ad0: 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  from sqliteMallo
0ae0: 63 28 29 0a 2a 2a 20 61 6e 64 20 69 73 20 61 62  c().** and is ab
0af0: 6c 65 20 74 6f 20 68 6f 6c 64 20 61 74 20 6c 65  le to hold at le
0b00: 61 73 74 20 4e 20 62 79 74 65 73 2e 20 20 52 61  ast N bytes.  Ra
0b10: 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ise an exception
0b20: 20 69 66 20 74 68 69 73 0a 2a 2a 20 69 73 20 6e   if this.** is n
0b30: 6f 74 20 74 68 65 20 63 61 73 65 2e 0a 2a 2a 0a  ot the case..**.
0b40: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
0b50: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b60: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b70: 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  y..*/.void sqlit
0b80: 65 33 43 68 65 63 6b 4d 65 6d 6f 72 79 28 76 6f  e3CheckMemory(vo
0b90: 69 64 20 2a 70 2c 20 69 6e 74 20 4e 29 7b 0a 20  id *p, int N){. 
0ba0: 20 69 6e 74 20 2a 70 69 20 3d 20 70 3b 0a 20 20   int *pi = p;.  
0bb0: 69 6e 74 20 6e 2c 20 69 2c 20 6b 3b 0a 20 20 70  int n, i, k;.  p
0bc0: 69 20 2d 3d 20 4e 5f 47 55 41 52 44 2b 31 3b 0a  i -= N_GUARD+1;.
0bd0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47    for(i=0; i<N_G
0be0: 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  UARD; i++){.    
0bf0: 61 73 73 65 72 74 28 20 70 69 5b 69 5d 3d 3d 30  assert( pi[i]==0
0c00: 78 64 65 61 64 31 31 32 32 20 29 3b 0a 20 20 7d  xdead1122 );.  }
0c10: 0a 20 20 6e 20 3d 20 70 69 5b 4e 5f 47 55 41 52  .  n = pi[N_GUAR
0c20: 44 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 4e 3e  D];.  assert( N>
0c30: 3d 30 20 26 26 20 4e 3c 6e 20 29 3b 0a 20 20 6b  =0 && N<n );.  k
0c40: 20 3d 20 28 6e 2b 73 69 7a 65 6f 66 28 69 6e 74   = (n+sizeof(int
0c50: 29 2d 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29  )-1)/sizeof(int)
0c60: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
0c70: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20  _GUARD; i++){.  
0c80: 20 20 61 73 73 65 72 74 28 20 70 69 5b 6b 2b 4e    assert( pi[k+N
0c90: 5f 47 55 41 52 44 2b 31 2b 69 5d 3d 3d 30 78 64  _GUARD+1+i]==0xd
0ca0: 65 61 64 33 33 34 34 20 29 3b 0a 20 20 7d 0a 7d  ead3344 );.  }.}
0cb0: 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 6d 65 6d  ../*.** Free mem
0cc0: 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ory previously o
0cd0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
0ce0: 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a 76  iteMalloc().*/.v
0cf0: 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65 5f  oid sqlite3Free_
0d00: 28 76 6f 69 64 20 2a 70 2c 20 63 68 61 72 20 2a  (void *p, char *
0d10: 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29  zFile, int line)
0d20: 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20  {.  if( p ){.   
0d30: 20 69 6e 74 20 2a 70 69 2c 20 69 2c 20 6b 2c 20   int *pi, i, k, 
0d40: 6e 3b 0a 20 20 20 20 70 69 20 3d 20 70 3b 0a 20  n;.    pi = p;. 
0d50: 20 20 20 70 69 20 2d 3d 20 4e 5f 47 55 41 52 44     pi -= N_GUARD
0d60: 2b 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  +1;.    sqlite3_
0d70: 6e 46 72 65 65 2b 2b 3b 0a 20 20 20 20 66 6f 72  nFree++;.    for
0d80: 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b  (i=0; i<N_GUARD;
0d90: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
0da0: 20 70 69 5b 69 5d 21 3d 30 78 64 65 61 64 31 31   pi[i]!=0xdead11
0db0: 32 32 20 29 7b 0a 20 20 20 20 20 20 20 20 66 70  22 ){.        fp
0dc0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 4c 6f  rintf(stderr,"Lo
0dd0: 77 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72  w-end memory cor
0de0: 72 75 70 74 69 6f 6e 20 61 74 20 30 78 25 78 5c  ruption at 0x%x\
0df0: 6e 22 2c 20 28 69 6e 74 29 70 29 3b 0a 20 20 20  n", (int)p);.   
0e00: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
0e10: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
0e20: 20 3d 20 70 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a   = pi[N_GUARD];.
0e30: 20 20 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65 6f      k = (n+sizeo
0e40: 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f 66  f(int)-1)/sizeof
0e50: 28 69 6e 74 29 3b 0a 20 20 20 20 66 6f 72 28 69  (int);.    for(i
0e60: 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69  =0; i<N_GUARD; i
0e70: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
0e80: 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d  i[k+N_GUARD+1+i]
0e90: 21 3d 30 78 64 65 61 64 33 33 34 34 20 29 7b 0a  !=0xdead3344 ){.
0ea0: 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
0eb0: 73 74 64 65 72 72 2c 22 48 69 67 68 2d 65 6e 64  stderr,"High-end
0ec0: 20 6d 65 6d 6f 72 79 20 63 6f 72 72 75 70 74 69   memory corrupti
0ed0: 6f 6e 20 61 74 20 30 78 25 78 5c 6e 22 2c 20 28  on at 0x%x\n", (
0ee0: 69 6e 74 29 70 29 3b 0a 20 20 20 20 20 20 20 20  int)p);.        
0ef0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
0f00: 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 73 65 74      }.    memset
0f10: 28 70 69 2c 20 30 78 66 66 2c 20 28 6b 2b 4e 5f  (pi, 0xff, (k+N_
0f20: 47 55 41 52 44 2a 32 2b 31 29 2a 73 69 7a 65 6f  GUARD*2+1)*sizeo
0f30: 66 28 69 6e 74 29 29 3b 0a 23 69 66 20 53 51 4c  f(int));.#if SQL
0f40: 49 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 20 20  ITE_DEBUG>1.    
0f50: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  fprintf(stderr,"
0f60: 25 30 36 64 20 66 72 65 65 20 25 64 20 62 79 74  %06d free %d byt
0f70: 65 73 20 61 74 20 30 78 25 78 20 66 72 6f 6d 20  es at 0x%x from 
0f80: 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20  %s:%d\n",.      
0f90: 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c 20     ++memcnt, n, 
0fa0: 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 6c 69  (int)p, zFile,li
0fb0: 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  ne);.#endif.    
0fc0: 66 72 65 65 28 70 69 29 3b 0a 20 20 7d 0a 7d 0a  free(pi);.  }.}.
0fd0: 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61 20  ./*.** Resize a 
0fe0: 70 72 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f 6e  prior allocation
0ff0: 2e 20 20 49 66 20 70 3d 3d 30 2c 20 74 68 65 6e  .  If p==0, then
1000: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
1010: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1020: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e   sqliteMalloc().
1030: 20 20 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e 20    If n==0, then 
1040: 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  this routine.** 
1050: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
1060: 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f  sqliteFree()..*/
1070: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
1080: 61 6c 6c 6f 63 5f 28 76 6f 69 64 20 2a 6f 6c 64  alloc_(void *old
1090: 50 2c 20 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a  P, int n, char *
10a0: 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29  zFile, int line)
10b0: 7b 0a 20 20 69 6e 74 20 2a 6f 6c 64 50 69 2c 20  {.  int *oldPi, 
10c0: 2a 70 69 2c 20 69 2c 20 6b 2c 20 6f 6c 64 4e 2c  *pi, i, k, oldN,
10d0: 20 6f 6c 64 4b 3b 0a 20 20 76 6f 69 64 20 2a 70   oldK;.  void *p
10e0: 3b 0a 20 20 69 66 28 20 6f 6c 64 50 3d 3d 30 20  ;.  if( oldP==0 
10f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  ){.    return sq
1100: 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2c 31  lite3Malloc_(n,1
1110: 2c 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 20 20  ,zFile,line);.  
1120: 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a  }.  if( n==0 ){.
1130: 20 20 20 20 73 71 6c 69 74 65 33 46 72 65 65 5f      sqlite3Free_
1140: 28 6f 6c 64 50 2c 7a 46 69 6c 65 2c 6c 69 6e 65  (oldP,zFile,line
1150: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  );.    return 0;
1160: 0a 20 20 7d 0a 20 20 6f 6c 64 50 69 20 3d 20 6f  .  }.  oldPi = o
1170: 6c 64 50 3b 0a 20 20 6f 6c 64 50 69 20 2d 3d 20  ldP;.  oldPi -= 
1180: 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20 69 66 28  N_GUARD+1;.  if(
1190: 20 6f 6c 64 50 69 5b 30 5d 21 3d 30 78 64 65 61   oldPi[0]!=0xdea
11a0: 64 31 31 32 32 20 29 7b 0a 20 20 20 20 66 70 72  d1122 ){.    fpr
11b0: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 4c 6f 77  intf(stderr,"Low
11c0: 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72 72  -end memory corr
11d0: 75 70 74 69 6f 6e 20 69 6e 20 72 65 61 6c 6c 6f  uption in reallo
11e0: 63 20 61 74 20 30 78 25 78 5c 6e 22 2c 20 28 69  c at 0x%x\n", (i
11f0: 6e 74 29 6f 6c 64 50 29 3b 0a 20 20 20 20 72 65  nt)oldP);.    re
1200: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 6f 6c  turn 0;.  }.  ol
1210: 64 4e 20 3d 20 6f 6c 64 50 69 5b 4e 5f 47 55 41  dN = oldPi[N_GUA
1220: 52 44 5d 3b 0a 20 20 6f 6c 64 4b 20 3d 20 28 6f  RD];.  oldK = (o
1230: 6c 64 4e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d  ldN+sizeof(int)-
1240: 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a  1)/sizeof(int);.
1250: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47    for(i=0; i<N_G
1260: 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  UARD; i++){.    
1270: 69 66 28 20 6f 6c 64 50 69 5b 6f 6c 64 4b 2b 4e  if( oldPi[oldK+N
1280: 5f 47 55 41 52 44 2b 31 2b 69 5d 21 3d 30 78 64  _GUARD+1+i]!=0xd
1290: 65 61 64 33 33 34 34 20 29 7b 0a 20 20 20 20 20  ead3344 ){.     
12a0: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
12b0: 22 48 69 67 68 2d 65 6e 64 20 6d 65 6d 6f 72 79  "High-end memory
12c0: 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20 72   corruption in r
12d0: 65 61 6c 6c 6f 63 20 61 74 20 30 78 25 78 5c 6e  ealloc at 0x%x\n
12e0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
12f0: 20 28 69 6e 74 29 6f 6c 64 50 29 3b 0a 20 20 20   (int)oldP);.   
1300: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
1310: 20 7d 0a 20 20 7d 0a 20 20 6b 20 3d 20 28 6e 20   }.  }.  k = (n 
1320: 2b 20 73 69 7a 65 6f 66 28 69 6e 74 29 20 2d 20  + sizeof(int) - 
1330: 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a  1)/sizeof(int);.
1340: 20 20 70 69 20 3d 20 6d 61 6c 6c 6f 63 28 20 28    pi = malloc( (
1350: 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b 31 29 2a 73  k+N_GUARD*2+1)*s
1360: 69 7a 65 6f 66 28 69 6e 74 29 20 29 3b 0a 20 20  izeof(int) );.  
1370: 69 66 28 20 70 69 3d 3d 30 20 29 7b 0a 20 20 20  if( pi==0 ){.   
1380: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
1390: 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 72 65  failed++;.    re
13a0: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 66 6f  turn 0;.  }.  fo
13b0: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
13c0: 3b 20 69 2b 2b 29 20 70 69 5b 69 5d 20 3d 20 30  ; i++) pi[i] = 0
13d0: 78 64 65 61 64 31 31 32 32 3b 0a 20 20 70 69 5b  xdead1122;.  pi[
13e0: 4e 5f 47 55 41 52 44 5d 20 3d 20 6e 3b 0a 20 20  N_GUARD] = n;.  
13f0: 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41  for(i=0; i<N_GUA
1400: 52 44 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 4e 5f  RD; i++) pi[k+N_
1410: 47 55 41 52 44 2b 31 2b 69 5d 20 3d 20 30 78 64  GUARD+1+i] = 0xd
1420: 65 61 64 33 33 34 34 3b 0a 20 20 70 20 3d 20 26  ead3344;.  p = &
1430: 70 69 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a 20  pi[N_GUARD+1];. 
1440: 20 6d 65 6d 63 70 79 28 70 2c 20 6f 6c 64 50 2c   memcpy(p, oldP,
1450: 20 6e 3e 6f 6c 64 4e 20 3f 20 6f 6c 64 4e 20 3a   n>oldN ? oldN :
1460: 20 6e 29 3b 0a 20 20 69 66 28 20 6e 3e 6f 6c 64   n);.  if( n>old
1470: 4e 20 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28  N ){.    memset(
1480: 26 28 28 63 68 61 72 2a 29 70 29 5b 6f 6c 64 4e  &((char*)p)[oldN
1490: 5d 2c 20 30 78 35 35 2c 20 6e 2d 6f 6c 64 4e 29  ], 0x55, n-oldN)
14a0: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28 6f  ;.  }.  memset(o
14b0: 6c 64 50 69 2c 20 30 78 61 62 2c 20 28 6f 6c 64  ldPi, 0xab, (old
14c0: 4b 2b 4e 5f 47 55 41 52 44 2b 32 29 2a 73 69 7a  K+N_GUARD+2)*siz
14d0: 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 66 72 65  eof(int));.  fre
14e0: 65 28 6f 6c 64 50 69 29 3b 0a 23 69 66 20 53 51  e(oldPi);.#if SQ
14f0: 4c 49 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 70  LITE_DEBUG>1.  p
1500: 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63 65  rint_stack_trace
1510: 28 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 73 74  ();.  fprintf(st
1520: 64 65 72 72 2c 22 25 30 36 64 20 72 65 61 6c 6c  derr,"%06d reall
1530: 6f 63 20 25 64 20 74 6f 20 25 64 20 62 79 74 65  oc %d to %d byte
1540: 73 20 61 74 20 30 78 25 78 20 74 6f 20 30 78 25  s at 0x%x to 0x%
1550: 78 20 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a 20  x at %s:%d\n",. 
1560: 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6f 6c 64     ++memcnt, old
1570: 4e 2c 20 6e 2c 20 28 69 6e 74 29 6f 6c 64 50 2c  N, n, (int)oldP,
1580: 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 20   (int)p, zFile, 
1590: 6c 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20  line);.#endif.  
15a0: 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a  return p;.}../*.
15b0: 2a 2a 20 4d 61 6b 65 20 61 20 64 75 70 6c 69 63  ** Make a duplic
15c0: 61 74 65 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ate of a string 
15d0: 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
15e0: 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
15f0: 28 29 0a 2a 2a 20 46 72 65 65 20 74 68 65 20 6f  ().** Free the o
1600: 72 69 67 69 6e 61 6c 20 73 74 72 69 6e 67 20 75  riginal string u
1610: 73 69 6e 67 20 73 71 6c 69 74 65 46 72 65 65 28  sing sqliteFree(
1620: 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  )..**.** This ro
1630: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20  utine is called 
1640: 6f 6e 20 61 6c 6c 20 73 74 72 69 6e 67 73 20 74  on all strings t
1650: 68 61 74 20 61 72 65 20 70 61 73 73 65 64 20 6f  hat are passed o
1660: 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65  utside of.** the
1670: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1680: 20 20 54 68 61 74 20 77 61 79 20 63 6c 69 65 6e    That way clien
1690: 74 73 20 63 61 6e 20 66 72 65 65 20 74 68 65 20  ts can free the 
16a0: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 66 72 65  string using fre
16b0: 65 28 29 0a 2a 2a 20 72 61 74 68 65 72 20 74 68  e().** rather th
16c0: 61 6e 20 68 61 76 69 6e 67 20 74 6f 20 63 61 6c  an having to cal
16d0: 6c 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a  l sqliteFree()..
16e0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
16f0: 74 72 52 65 61 6c 6c 6f 63 28 63 68 61 72 20 2a  trRealloc(char *
1700: 2a 70 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  *pz){.  char *zN
1710: 65 77 3b 0a 20 20 69 66 28 20 70 7a 3d 3d 30 20  ew;.  if( pz==0 
1720: 7c 7c 20 2a 70 7a 3d 3d 30 20 29 20 72 65 74 75  || *pz==0 ) retu
1730: 72 6e 3b 0a 20 20 7a 4e 65 77 20 3d 20 6d 61 6c  rn;.  zNew = mal
1740: 6c 6f 63 28 20 73 74 72 6c 65 6e 28 2a 70 7a 29  loc( strlen(*pz)
1750: 20 2b 20 31 20 29 3b 0a 20 20 69 66 28 20 7a 4e   + 1 );.  if( zN
1760: 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  ew==0 ){.    sql
1770: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
1780: 65 64 2b 2b 3b 0a 20 20 20 20 73 71 6c 69 74 65  ed++;.    sqlite
1790: 46 72 65 65 28 2a 70 7a 29 3b 0a 20 20 20 20 2a  Free(*pz);.    *
17a0: 70 7a 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 74  pz = 0;.  }.  st
17b0: 72 63 70 79 28 7a 4e 65 77 2c 20 2a 70 7a 29 3b  rcpy(zNew, *pz);
17c0: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70  .  sqliteFree(*p
17d0: 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a 4e 65 77  z);.  *pz = zNew
17e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  ;.}../*.** Make 
17f0: 61 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72 69  a copy of a stri
1800: 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74  ng in memory obt
1810: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
1820: 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a 63 68 61  eMalloc().*/.cha
1830: 72 20 2a 73 71 6c 69 74 65 33 53 74 72 44 75 70  r *sqlite3StrDup
1840: 5f 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  _(const char *z,
1850: 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e   char *zFile, in
1860: 74 20 6c 69 6e 65 29 7b 0a 20 20 63 68 61 72 20  t line){.  char 
1870: 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d  *zNew;.  if( z==
1880: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
1890: 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 4d 61  zNew = sqlite3Ma
18a0: 6c 6c 6f 63 5f 28 73 74 72 6c 65 6e 28 7a 29 2b  lloc_(strlen(z)+
18b0: 31 2c 20 30 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e  1, 0, zFile, lin
18c0: 65 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29  e);.  if( zNew )
18d0: 20 73 74 72 63 70 79 28 7a 4e 65 77 2c 20 7a 29   strcpy(zNew, z)
18e0: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b  ;.  return zNew;
18f0: 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  .}.char *sqlite3
1900: 53 74 72 4e 44 75 70 5f 28 63 6f 6e 73 74 20 63  StrNDup_(const c
1910: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20 63  har *z, int n, c
1920: 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 20  har *zFile, int 
1930: 6c 69 6e 65 29 7b 0a 20 20 63 68 61 72 20 2a 7a  line){.  char *z
1940: 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  New;.  if( z==0 
1950: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e  ) return 0;.  zN
1960: 65 77 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c  ew = sqlite3Mall
1970: 6f 63 5f 28 6e 2b 31 2c 20 30 2c 20 7a 46 69 6c  oc_(n+1, 0, zFil
1980: 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69 66 28 20  e, line);.  if( 
1990: 7a 4e 65 77 20 29 7b 0a 20 20 20 20 6d 65 6d 63  zNew ){.    memc
19a0: 70 79 28 7a 4e 65 77 2c 20 7a 2c 20 6e 29 3b 0a  py(zNew, z, n);.
19b0: 20 20 20 20 7a 4e 65 77 5b 6e 5d 20 3d 20 30 3b      zNew[n] = 0;
19c0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
19d0: 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 76  ew;.}../*.** A v
19e0: 65 72 73 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65  ersion of sqlite
19f0: 46 72 65 65 20 74 68 61 74 20 69 73 20 61 6c 77  Free that is alw
1a00: 61 79 73 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20  ays a function, 
1a10: 6e 6f 74 20 61 20 6d 61 63 72 6f 2e 0a 2a 2f 0a  not a macro..*/.
1a20: 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
1a30: 58 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71  X(void *p){.  sq
1a40: 6c 69 74 65 46 72 65 65 28 70 29 3b 0a 7d 0a 23  liteFree(p);.}.#
1a50: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1a60: 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
1a70: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 65  The following ve
1a80: 72 73 69 6f 6e 73 20 6f 66 20 6d 61 6c 6c 6f 63  rsions of malloc
1a90: 28 29 20 61 6e 64 20 66 72 65 65 28 29 20 61 72  () and free() ar
1aa0: 65 20 66 6f 72 20 75 73 65 20 69 6e 20 61 0a 2a  e for use in a.*
1ab0: 2a 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 0a  * normal build..
1ac0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1ad0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 0a 2f  SQLITE_DEBUG)../
1ae0: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65  *.** Allocate ne
1af0: 77 20 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65 74  w memory and set
1b00: 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65   it to zero.  Re
1b10: 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20  turn NULL if.** 
1b20: 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61  no memory is ava
1b30: 69 6c 61 62 6c 65 2e 20 20 53 65 65 20 61 6c 73  ilable.  See als
1b40: 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61  o sqliteMallocRa
1b50: 77 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  w()..*/.void *sq
1b60: 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 20  lite3Malloc(int 
1b70: 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20  n){.  void *p;. 
1b80: 20 69 66 28 20 28 70 20 3d 20 6d 61 6c 6c 6f 63   if( (p = malloc
1b90: 28 6e 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  (n))==0 ){.    i
1ba0: 66 28 20 6e 3e 30 20 29 20 73 71 6c 69 74 65 33  f( n>0 ) sqlite3
1bb0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 2b 2b  _malloc_failed++
1bc0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6d  ;.  }else{.    m
1bd0: 65 6d 73 65 74 28 70 2c 20 30 2c 20 6e 29 3b 0a  emset(p, 0, n);.
1be0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a    }.  return p;.
1bf0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
1c00: 65 20 6e 65 77 20 6d 65 6d 6f 72 79 20 62 75 74  e new memory but
1c10: 20 64 6f 20 6e 6f 74 20 73 65 74 20 69 74 20 74   do not set it t
1c20: 6f 20 7a 65 72 6f 2e 20 20 52 65 74 75 72 6e 20  o zero.  Return 
1c30: 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e 6f 20 6d 65  NULL if.** no me
1c40: 6d 6f 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c  mory is availabl
1c50: 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 73 71 6c  e.  See also sql
1c60: 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a  iteMalloc()..*/.
1c70: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1c80: 6c 6f 63 52 61 77 28 69 6e 74 20 6e 29 7b 0a 20  locRaw(int n){. 
1c90: 20 76 6f 69 64 20 2a 70 3b 0a 20 20 69 66 28 20   void *p;.  if( 
1ca0: 28 70 20 3d 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d  (p = malloc(n))=
1cb0: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 3e  =0 ){.    if( n>
1cc0: 30 20 29 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  0 ) sqlite3_mall
1cd0: 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d  oc_failed++;.  }
1ce0: 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a  .  return p;.}..
1cf0: 2f 2a 0a 2a 2a 20 46 72 65 65 20 6d 65 6d 6f 72  /*.** Free memor
1d00: 79 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62 74  y previously obt
1d10: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
1d20: 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a 76 6f 69  eMalloc().*/.voi
1d30: 64 20 73 71 6c 69 74 65 33 46 72 65 65 58 28 76  d sqlite3FreeX(v
1d40: 6f 69 64 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  oid *p){.  if( p
1d50: 20 29 7b 0a 20 20 20 20 66 72 65 65 28 70 29 3b   ){.    free(p);
1d60: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  .  }.}../*.** Re
1d70: 73 69 7a 65 20 61 20 70 72 69 6f 72 20 61 6c 6c  size a prior all
1d80: 6f 63 61 74 69 6f 6e 2e 20 20 49 66 20 70 3d 3d  ocation.  If p==
1d90: 30 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  0, then this rou
1da0: 74 69 6e 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75  tine.** works ju
1db0: 73 74 20 6c 69 6b 65 20 73 71 6c 69 74 65 4d 61  st like sqliteMa
1dc0: 6c 6c 6f 63 28 29 2e 20 20 49 66 20 6e 3d 3d 30  lloc().  If n==0
1dd0: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
1de0: 69 6e 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73  ine.** works jus
1df0: 74 20 6c 69 6b 65 20 73 71 6c 69 74 65 46 72 65  t like sqliteFre
1e00: 65 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  e()..*/.void *sq
1e10: 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1e20: 64 20 2a 70 2c 20 69 6e 74 20 6e 29 7b 0a 20 20  d *p, int n){.  
1e30: 76 6f 69 64 20 2a 70 32 3b 0a 20 20 69 66 28 20  void *p2;.  if( 
1e40: 70 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  p==0 ){.    retu
1e50: 72 6e 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  rn sqliteMalloc(
1e60: 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3d  n);.  }.  if( n=
1e70: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
1e80: 46 72 65 65 28 70 29 3b 0a 20 20 20 20 72 65 74  Free(p);.    ret
1e90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 70 32 20  urn 0;.  }.  p2 
1ea0: 3d 20 72 65 61 6c 6c 6f 63 28 70 2c 20 6e 29 3b  = realloc(p, n);
1eb0: 0a 20 20 69 66 28 20 70 32 3d 3d 30 20 29 7b 0a  .  if( p2==0 ){.
1ec0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c      sqlite3_mall
1ed0: 6f 63 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d  oc_failed++;.  }
1ee0: 0a 20 20 72 65 74 75 72 6e 20 70 32 3b 0a 7d 0a  .  return p2;.}.
1ef0: 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  ./*.** Make a co
1f00: 70 79 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69  py of a string i
1f10: 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  n memory obtaine
1f20: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c  d from sqliteMal
1f30: 6c 6f 63 28 29 0a 2a 2f 0a 63 68 61 72 20 2a 73  loc().*/.char *s
1f40: 71 6c 69 74 65 33 53 74 72 44 75 70 28 63 6f 6e  qlite3StrDup(con
1f50: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63  st char *z){.  c
1f60: 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28  har *zNew;.  if(
1f70: 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30   z==0 ) return 0
1f80: 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74  ;.  zNew = sqlit
1f90: 65 4d 61 6c 6c 6f 63 52 61 77 28 73 74 72 6c 65  eMallocRaw(strle
1fa0: 6e 28 7a 29 2b 31 29 3b 0a 20 20 69 66 28 20 7a  n(z)+1);.  if( z
1fb0: 4e 65 77 20 29 20 73 74 72 63 70 79 28 7a 4e 65  New ) strcpy(zNe
1fc0: 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  w, z);.  return 
1fd0: 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73 71  zNew;.}.char *sq
1fe0: 6c 69 74 65 33 53 74 72 4e 44 75 70 28 63 6f 6e  lite3StrNDup(con
1ff0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
2000: 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77  n){.  char *zNew
2010: 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72  ;.  if( z==0 ) r
2020: 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20  eturn 0;.  zNew 
2030: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61  = sqliteMallocRa
2040: 77 28 6e 2b 31 29 3b 0a 20 20 69 66 28 20 7a 4e  w(n+1);.  if( zN
2050: 65 77 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  ew ){.    memcpy
2060: 28 7a 4e 65 77 2c 20 7a 2c 20 6e 29 3b 0a 20 20  (zNew, z, n);.  
2070: 20 20 7a 4e 65 77 5b 6e 5d 20 3d 20 30 3b 0a 20    zNew[n] = 0;. 
2080: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77   }.  return zNew
2090: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
20a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
20b0: 42 55 47 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  BUG) */../*.** C
20c0: 72 65 61 74 65 20 61 20 73 74 72 69 6e 67 20 66  reate a string f
20d0: 72 6f 6d 20 74 68 65 20 32 6e 64 20 61 6e 64 20  rom the 2nd and 
20e0: 73 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d  subsequent argum
20f0: 65 6e 74 73 20 28 75 70 20 74 6f 20 74 68 65 0a  ents (up to the.
2100: 2a 2a 20 66 69 72 73 74 20 4e 55 4c 4c 20 61 72  ** first NULL ar
2110: 67 75 6d 65 6e 74 29 2c 20 73 74 6f 72 65 20 74  gument), store t
2120: 68 65 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d  he string in mem
2130: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
2140: 6d 0a 2a 2a 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  m.** sqliteMallo
2150: 63 28 29 20 61 6e 64 20 6d 61 6b 65 20 74 68 65  c() and make the
2160: 20 70 6f 69 6e 74 65 72 20 69 6e 64 69 63 61 74   pointer indicat
2170: 65 64 20 62 79 20 74 68 65 20 31 73 74 20 61 72  ed by the 1st ar
2180: 67 75 6d 65 6e 74 0a 2a 2a 20 70 6f 69 6e 74 20  gument.** point 
2190: 74 6f 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20  to that string. 
21a0: 20 54 68 65 20 31 73 74 20 61 72 67 75 6d 65 6e   The 1st argumen
21b0: 74 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  t must either be
21c0: 20 4e 55 4c 4c 20 6f 72 20 0a 2a 2a 20 70 6f 69   NULL or .** poi
21d0: 6e 74 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  nt to memory obt
21e0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
21f0: 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f  eMalloc()..*/.vo
2200: 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
2210: 69 6e 67 28 63 68 61 72 20 2a 2a 70 7a 2c 20 63  ing(char **pz, c
2220: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73  onst char *zFirs
2230: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
2240: 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79  st ap;.  int nBy
2250: 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  te;.  const char
2260: 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65   *z;.  char *zRe
2270: 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 70 7a 3d  sult;..  if( pz=
2280: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6e  =0 ) return;.  n
2290: 42 79 74 65 20 3d 20 73 74 72 6c 65 6e 28 7a 46  Byte = strlen(zF
22a0: 69 72 73 74 29 20 2b 20 31 3b 0a 20 20 76 61 5f  irst) + 1;.  va_
22b0: 73 74 61 72 74 28 61 70 2c 20 7a 46 69 72 73 74  start(ap, zFirst
22c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a 20 3d  );.  while( (z =
22d0: 20 76 61 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73   va_arg(ap, cons
22e0: 74 20 63 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a  t char*))!=0 ){.
22f0: 20 20 20 20 6e 42 79 74 65 20 2b 3d 20 73 74 72      nByte += str
2300: 6c 65 6e 28 7a 29 3b 0a 20 20 7d 0a 20 20 76 61  len(z);.  }.  va
2310: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69  _end(ap);.  sqli
2320: 74 65 46 72 65 65 28 2a 70 7a 29 3b 0a 20 20 2a  teFree(*pz);.  *
2330: 70 7a 20 3d 20 7a 52 65 73 75 6c 74 20 3d 20 73  pz = zResult = s
2340: 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 20  qliteMallocRaw( 
2350: 6e 42 79 74 65 20 29 3b 0a 20 20 69 66 28 20 7a  nByte );.  if( z
2360: 52 65 73 75 6c 74 3d 3d 30 20 29 7b 0a 20 20 20  Result==0 ){.   
2370: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 73   return;.  }.  s
2380: 74 72 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a  trcpy(zResult, z
2390: 46 69 72 73 74 29 3b 0a 20 20 7a 52 65 73 75 6c  First);.  zResul
23a0: 74 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 52 65 73  t += strlen(zRes
23b0: 75 6c 74 29 3b 0a 20 20 76 61 5f 73 74 61 72 74  ult);.  va_start
23c0: 28 61 70 2c 20 7a 46 69 72 73 74 29 3b 0a 20 20  (ap, zFirst);.  
23d0: 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61  while( (z = va_a
23e0: 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61  rg(ap, const cha
23f0: 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 73  r*))!=0 ){.    s
2400: 74 72 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a  trcpy(zResult, z
2410: 29 3b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 2b  );.    zResult +
2420: 3d 20 73 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74  = strlen(zResult
2430: 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28  );.  }.  va_end(
2440: 61 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ap);.#ifdef SQLI
2450: 54 45 5f 44 45 42 55 47 0a 23 69 66 20 53 51 4c  TE_DEBUG.#if SQL
2460: 49 54 45 5f 44 45 42 55 47 3e 31 0a 20 20 66 70  ITE_DEBUG>1.  fp
2470: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 73 74  rintf(stderr,"st
2480: 72 69 6e 67 20 61 74 20 30 78 25 78 20 69 73 20  ring at 0x%x is 
2490: 25 73 5c 6e 22 2c 20 28 69 6e 74 29 2a 70 7a 2c  %s\n", (int)*pz,
24a0: 20 2a 70 7a 29 3b 0a 23 65 6e 64 69 66 0a 23 65   *pz);.#endif.#e
24b0: 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 6f  ndif.}../*.** Wo
24c0: 72 6b 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 33  rks like sqlite3
24d0: 53 65 74 53 74 72 69 6e 67 2c 20 62 75 74 20 65  SetString, but e
24e0: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ach string is no
24f0: 77 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 2a 2a  w followed by.**
2500: 20 61 20 6c 65 6e 67 74 68 20 69 6e 74 65 67 65   a length intege
2510: 72 20 77 68 69 63 68 20 73 70 65 63 69 66 69 65  r which specifie
2520: 73 20 68 6f 77 20 6d 75 63 68 20 6f 66 20 74 68  s how much of th
2530: 65 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20  e source string 
2540: 0a 2a 2a 20 74 6f 20 63 6f 70 79 20 28 69 6e 20  .** to copy (in 
2550: 62 79 74 65 73 29 2e 20 20 2d 31 20 6d 65 61 6e  bytes).  -1 mean
2560: 73 20 75 73 65 20 74 68 65 20 77 68 6f 6c 65 20  s use the whole 
2570: 73 74 72 69 6e 67 2e 20 20 54 68 65 20 31 73 74  string.  The 1st
2580: 20 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 75   .** argument mu
2590: 73 74 20 65 69 74 68 65 72 20 62 65 20 4e 55 4c  st either be NUL
25a0: 4c 20 6f 72 20 70 6f 69 6e 74 20 74 6f 20 6d 65  L or point to me
25b0: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
25c0: 6f 6d 20 0a 2a 2a 20 73 71 6c 69 74 65 4d 61 6c  om .** sqliteMal
25d0: 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73  loc()..*/.void s
25e0: 71 6c 69 74 65 33 53 65 74 4e 53 74 72 69 6e 67  qlite3SetNString
25f0: 28 63 68 61 72 20 2a 2a 70 7a 2c 20 2e 2e 2e 29  (char **pz, ...)
2600: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
2610: 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 63    int nByte;.  c
2620: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20  onst char *z;.  
2630: 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 3b 0a 20  char *zResult;. 
2640: 20 69 6e 74 20 6e 3b 0a 0a 20 20 69 66 28 20 70   int n;..  if( p
2650: 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  z==0 ) return;. 
2660: 20 6e 42 79 74 65 20 3d 20 30 3b 0a 20 20 76 61   nByte = 0;.  va
2670: 5f 73 74 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a  _start(ap, pz);.
2680: 20 20 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61    while( (z = va
2690: 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63  _arg(ap, const c
26a0: 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20  har*))!=0 ){.   
26b0: 20 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20   n = va_arg(ap, 
26c0: 69 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 3c  int);.    if( n<
26d0: 3d 30 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28  =0 ) n = strlen(
26e0: 7a 29 3b 0a 20 20 20 20 6e 42 79 74 65 20 2b 3d  z);.    nByte +=
26f0: 20 6e 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64   n;.  }.  va_end
2700: 28 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  (ap);.  sqliteFr
2710: 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d  ee(*pz);.  *pz =
2720: 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74   zResult = sqlit
2730: 65 4d 61 6c 6c 6f 63 52 61 77 28 20 6e 42 79 74  eMallocRaw( nByt
2740: 65 20 2b 20 31 20 29 3b 0a 20 20 69 66 28 20 7a  e + 1 );.  if( z
2750: 52 65 73 75 6c 74 3d 3d 30 20 29 20 72 65 74 75  Result==0 ) retu
2760: 72 6e 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61  rn;.  va_start(a
2770: 70 2c 20 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28  p, pz);.  while(
2780: 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   (z = va_arg(ap,
2790: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d   const char*))!=
27a0: 30 20 29 7b 0a 20 20 20 20 6e 20 3d 20 76 61 5f  0 ){.    n = va_
27b0: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
27c0: 20 20 69 66 28 20 6e 3c 3d 30 20 29 20 6e 20 3d    if( n<=0 ) n =
27d0: 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20   strlen(z);.    
27e0: 6d 65 6d 63 70 79 28 7a 52 65 73 75 6c 74 2c 20  memcpy(zResult, 
27f0: 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 52 65 73 75  z, n);.    zResu
2800: 6c 74 20 2b 3d 20 6e 3b 0a 20 20 7d 0a 20 20 2a  lt += n;.  }.  *
2810: 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 23 69 66  zResult = 0;.#if
2820: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2830: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
2840: 47 3e 31 0a 20 20 66 70 72 69 6e 74 66 28 73 74  G>1.  fprintf(st
2850: 64 65 72 72 2c 22 73 74 72 69 6e 67 20 61 74 20  derr,"string at 
2860: 30 78 25 78 20 69 73 20 25 73 5c 6e 22 2c 20 28  0x%x is %s\n", (
2870: 69 6e 74 29 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23  int)*pz, *pz);.#
2880: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 20 20 76  endif.#endif.  v
2890: 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a  a_end(ap);.}../*
28a0: 0a 2a 2a 20 53 65 74 20 74 68 65 20 6d 6f 73 74  .** Set the most
28b0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
28c0: 64 65 20 61 6e 64 20 65 72 72 6f 72 20 73 74 72  de and error str
28d0: 69 6e 67 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ing for the sqli
28e0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 22 64 62  te.** handle "db
28f0: 22 2e 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64  ". The error cod
2900: 65 20 69 73 20 73 65 74 20 74 6f 20 22 65 72 72  e is set to "err
2910: 5f 63 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a 20 49 66  _code"..**.** If
2920: 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
2930: 20 73 74 72 69 6e 67 20 7a 46 6f 72 6d 61 74 20   string zFormat 
2940: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 6f  specifies the fo
2950: 72 6d 61 74 20 6f 66 20 74 68 65 0a 2a 2a 20 65  rmat of the.** e
2960: 72 72 6f 72 20 73 74 72 69 6e 67 20 69 6e 20 74  rror string in t
2970: 68 65 20 73 74 79 6c 65 20 6f 66 20 74 68 65 20  he style of the 
2980: 70 72 69 6e 74 66 20 66 75 6e 63 74 69 6f 6e 73  printf functions
2990: 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  : The following.
29a0: 2a 2a 20 66 6f 72 6d 61 74 20 63 68 61 72 61 63  ** format charac
29b0: 74 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ters are allowed
29c0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20  :.**.**      %s 
29d0: 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 73 74       Insert a st
29e0: 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20  ring.**      %z 
29f0: 20 20 20 20 20 41 20 73 74 72 69 6e 67 20 74 68       A string th
2a00: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65  at should be fre
2a10: 65 64 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20  ed after use.** 
2a20: 20 20 20 20 20 25 64 20 20 20 20 20 20 49 6e 73       %d      Ins
2a30: 65 72 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  ert an integer.*
2a40: 2a 20 20 20 20 20 20 25 54 20 20 20 20 20 20 49  *      %T      I
2a50: 6e 73 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a  nsert a token.**
2a60: 20 20 20 20 20 20 25 53 20 20 20 20 20 20 49 6e        %S      In
2a70: 73 65 72 74 20 74 68 65 20 66 69 72 73 74 20 65  sert the first e
2a80: 6c 65 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c  lement of a SrcL
2a90: 69 73 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f 72 6d 61  ist.**.** zForma
2aa0: 74 20 61 6e 64 20 61 6e 79 20 73 74 72 69 6e 67  t and any string
2ab0: 20 74 6f 6b 65 6e 73 20 74 68 61 74 20 66 6f 6c   tokens that fol
2ac0: 6c 6f 77 20 69 74 20 61 72 65 20 61 73 73 75 6d  low it are assum
2ad0: 65 64 20 74 6f 20 62 65 0a 2a 2a 20 65 6e 63 6f  ed to be.** enco
2ae0: 64 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a  ded in UTF-8..**
2af0: 0a 2a 2a 20 54 6f 20 63 6c 65 61 72 20 74 68 65  .** To clear the
2b00: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   most recent err
2b10: 6f 72 20 66 6f 72 20 73 6c 71 69 74 65 20 68 61  or for slqite ha
2b20: 6e 64 6c 65 20 22 64 62 22 2c 20 73 71 6c 69 74  ndle "db", sqlit
2b30: 65 33 45 72 72 6f 72 0a 2a 2a 20 73 68 6f 75 6c  e3Error.** shoul
2b40: 64 20 62 65 20 63 61 6c 6c 65 64 20 77 69 74 68  d be called with
2b50: 20 65 72 72 5f 63 6f 64 65 20 73 65 74 20 74 6f   err_code set to
2b60: 20 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 7a   SQLITE_OK and z
2b70: 46 6f 72 6d 61 74 20 73 65 74 0a 2a 2a 20 74 6f  Format set.** to
2b80: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73   NULL..*/.void s
2b90: 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
2ba0: 74 65 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f  te *db, int err_
2bb0: 63 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  code, const char
2bc0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
2bd0: 0a 20 20 69 66 28 20 64 62 20 26 26 20 28 64 62  .  if( db && (db
2be0: 2d 3e 70 45 72 72 20 7c 7c 20 28 64 62 2d 3e 70  ->pErr || (db->p
2bf0: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Err = sqlite3Val
2c00: 75 65 4e 65 77 28 29 29 29 20 29 7b 0a 20 20 20  ueNew())) ){.   
2c10: 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 65   db->errCode = e
2c20: 72 72 5f 63 6f 64 65 3b 0a 20 20 20 20 69 66 28  rr_code;.    if(
2c30: 20 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20   zFormat ){.    
2c40: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20    char *z;.     
2c50: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20   va_list ap;.   
2c60: 20 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20     va_start(ap, 
2c70: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20 20 20  zFormat);.      
2c80: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69  z = sqlite3VMPri
2c90: 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ntf(zFormat, ap)
2ca0: 3b 0a 20 20 20 20 20 20 76 61 5f 65 6e 64 28 61  ;.      va_end(a
2cb0: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
2cc0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d  3ValueSetStr(db-
2cd0: 3e 70 45 72 72 2c 20 2d 31 2c 20 7a 2c 20 53 51  >pErr, -1, z, SQ
2ce0: 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2cf0: 65 33 46 72 65 65 58 29 3b 0a 20 20 20 20 7d 65  e3FreeX);.    }e
2d00: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2d10: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62  e3ValueSetStr(db
2d20: 2d 3e 70 45 72 72 2c 20 30 2c 20 30 2c 20 53 51  ->pErr, 0, 0, SQ
2d30: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
2d40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7d  E_STATIC);.    }
2d50: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64  .  }.}../*.** Ad
2d60: 64 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  d an error messa
2d70: 67 65 20 74 6f 20 70 50 61 72 73 65 2d 3e 7a 45  ge to pParse->zE
2d80: 72 72 4d 73 67 20 61 6e 64 20 69 6e 63 72 65 6d  rrMsg and increm
2d90: 65 6e 74 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  ent pParse->nErr
2da0: 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ..** The followi
2db0: 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20 63 68  ng formatting ch
2dc0: 61 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c  aracters are all
2dd0: 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  owed:.**.**     
2de0: 20 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20   %s      Insert 
2df0: 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20  a string.**     
2e00: 20 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e   %z      A strin
2e10: 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  g that should be
2e20: 20 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65   freed after use
2e30: 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20  .**      %d     
2e40: 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67   Insert an integ
2e50: 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20  er.**      %T   
2e60: 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65     Insert a toke
2e70: 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20  n.**      %S    
2e80: 20 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72    Insert the fir
2e90: 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2ea0: 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 54 68  SrcList.**.** Th
2eb0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75  is function shou
2ec0: 6c 64 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ld be used to re
2ed0: 70 6f 72 74 20 61 6e 79 20 65 72 72 6f 72 20 74  port any error t
2ee0: 68 61 74 20 6f 63 63 75 72 73 20 77 68 69 6c 73  hat occurs whils
2ef0: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 61  t.** compiling a
2f00: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
2f10: 28 69 2e 65 2e 20 77 69 74 68 69 6e 20 73 71 6c  (i.e. within sql
2f20: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 29 2e  ite3_prepare()).
2f30: 20 54 68 65 0a 2a 2a 20 6c 61 73 74 20 74 68 69   The.** last thi
2f40: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70  ng the sqlite3_p
2f50: 72 65 70 61 72 65 28 29 20 66 75 6e 63 74 69 6f  repare() functio
2f60: 6e 20 64 6f 65 73 20 69 73 20 63 6f 70 79 20 74  n does is copy t
2f70: 68 65 20 65 72 72 6f 72 0a 2a 2a 20 73 74 6f 72  he error.** stor
2f80: 65 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74  ed by this funct
2f90: 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ion into the dat
2fa0: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 75 73 69  abase handle usi
2fb0: 6e 67 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  ng sqlite3Error(
2fc0: 29 2e 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 73  )..** Function s
2fd0: 71 6c 69 74 65 33 45 72 72 6f 72 28 29 20 73 68  qlite3Error() sh
2fe0: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 64 75 72  ould be used dur
2ff0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 65 78  ing statement ex
3000: 65 63 75 74 69 6f 6e 0a 2a 2a 20 28 73 71 6c 69  ecution.** (sqli
3010: 74 65 33 5f 73 74 65 70 28 29 20 65 74 63 2e 29  te3_step() etc.)
3020: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3030: 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 20  3ErrorMsg(Parse 
3040: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
3050: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
3060: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
3070: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  ;.  pParse->nErr
3080: 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  ++;.  sqliteFree
3090: 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67  (pParse->zErrMsg
30a0: 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  );.  va_start(ap
30b0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 70 50  , zFormat);.  pP
30c0: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  arse->zErrMsg = 
30d0: 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
30e0: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
30f0: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f  va_end(ap);.}../
3100: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20  *.** Convert an 
3110: 53 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74 65 64  SQL-style quoted
3120: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e   string into a n
3130: 6f 72 6d 61 6c 20 73 74 72 69 6e 67 20 62 79 20  ormal string by 
3140: 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68 65 20  removing.** the 
3150: 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73  quote characters
3160: 2e 20 20 54 68 65 20 63 6f 6e 76 65 72 73 69 6f  .  The conversio
3170: 6e 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70 6c 61  n is done in-pla
3180: 63 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 69  ce.  If the.** i
3190: 6e 70 75 74 20 64 6f 65 73 20 6e 6f 74 20 62 65  nput does not be
31a0: 67 69 6e 20 77 69 74 68 20 61 20 71 75 6f 74 65  gin with a quote
31b0: 20 63 68 61 72 61 63 74 65 72 2c 20 74 68 65 6e   character, then
31c0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
31d0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a   is a no-op..**.
31e0: 2a 2a 20 32 30 30 32 2d 46 65 62 2d 31 34 3a 20  ** 2002-Feb-14: 
31f0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
3200: 65 78 74 65 6e 64 65 64 20 74 6f 20 72 65 6d 6f  extended to remo
3210: 76 65 20 4d 53 2d 41 63 63 65 73 73 20 73 74 79  ve MS-Access sty
3220: 6c 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73 20 66  le.** brackets f
3230: 72 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65 6e 74  rom around ident
3240: 69 66 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d  ifers.  For exam
3250: 70 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d 22 20  ple:  "[a-b-c]" 
3260: 62 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d  becomes.** "a-b-
3270: 63 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  c"..*/.void sqli
3280: 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 20  te3Dequote(char 
3290: 2a 7a 29 7b 0a 20 20 69 6e 74 20 71 75 6f 74 65  *z){.  int quote
32a0: 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20  ;.  int i, j;.  
32b0: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
32c0: 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a 5b 30  n;.  quote = z[0
32d0: 5d 3b 0a 20 20 73 77 69 74 63 68 28 20 71 75 6f  ];.  switch( quo
32e0: 74 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27  te ){.    case '
32f0: 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a 20 20 20  \'':  break;.   
3300: 20 63 61 73 65 20 27 22 27 3a 20 20 20 62 72 65   case '"':   bre
3310: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27 5b 27  ak;.    case '['
3320: 3a 20 20 20 71 75 6f 74 65 20 3d 20 27 5d 27 3b  :   quote = ']';
3330: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
3340: 61 75 6c 74 3a 20 20 20 20 72 65 74 75 72 6e 3b  ault:    return;
3350: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 31 2c 20  .  }.  for(i=1, 
3360: 6a 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b  j=0; z[i]; i++){
3370: 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 71  .    if( z[i]==q
3380: 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 69 66  uote ){.      if
3390: 28 20 7a 5b 69 2b 31 5d 3d 3d 71 75 6f 74 65 20  ( z[i+1]==quote 
33a0: 29 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b  ){.        z[j++
33b0: 5d 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 20  ] = quote;.     
33c0: 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 7d 65     i++;.      }e
33d0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a  lse{.        z[j
33e0: 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ++] = 0;.       
33f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
3400: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3410: 20 7a 5b 6a 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a   z[j++] = z[i];.
3420: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20      }.  }.}../* 
3430: 41 6e 20 61 72 72 61 79 20 74 6f 20 6d 61 70 20  An array to map 
3440: 61 6c 6c 20 75 70 70 65 72 2d 63 61 73 65 20 63  all upper-case c
3450: 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74  haracters into t
3460: 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64 69  heir correspondi
3470: 6e 67 0a 2a 2a 20 6c 6f 77 65 72 2d 63 61 73 65  ng.** lower-case
3480: 20 63 68 61 72 61 63 74 65 72 2e 20 0a 2a 2f 0a   character. .*/.
3490: 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20  static unsigned 
34a0: 63 68 61 72 20 55 70 70 65 72 54 6f 4c 6f 77 65  char UpperToLowe
34b0: 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 30 2c  r[] = {.      0,
34c0: 20 20 31 2c 20 20 32 2c 20 20 33 2c 20 20 34 2c    1,  2,  3,  4,
34d0: 20 20 35 2c 20 20 36 2c 20 20 37 2c 20 20 38 2c    5,  6,  7,  8,
34e0: 20 20 39 2c 20 31 30 2c 20 31 31 2c 20 31 32 2c    9, 10, 11, 12,
34f0: 20 31 33 2c 20 31 34 2c 20 31 35 2c 20 31 36 2c   13, 14, 15, 16,
3500: 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20 31 39   17,.     18, 19
3510: 2c 20 32 30 2c 20 32 31 2c 20 32 32 2c 20 32 33  , 20, 21, 22, 23
3520: 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20 32 37  , 24, 25, 26, 27
3530: 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20 33 31  , 28, 29, 30, 31
3540: 2c 20 33 32 2c 20 33 33 2c 20 33 34 2c 20 33 35  , 32, 33, 34, 35
3550: 2c 0a 20 20 20 20 20 33 36 2c 20 33 37 2c 20 33  ,.     36, 37, 3
3560: 38 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c 20 34  8, 39, 40, 41, 4
3570: 32 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c 20 34  2, 43, 44, 45, 4
3580: 36 2c 20 34 37 2c 20 34 38 2c 20 34 39 2c 20 35  6, 47, 48, 49, 5
3590: 30 2c 20 35 31 2c 20 35 32 2c 20 35 33 2c 0a 20  0, 51, 52, 53,. 
35a0: 20 20 20 20 35 34 2c 20 35 35 2c 20 35 36 2c 20      54, 55, 56, 
35b0: 35 37 2c 20 35 38 2c 20 35 39 2c 20 36 30 2c 20  57, 58, 59, 60, 
35c0: 36 31 2c 20 36 32 2c 20 36 33 2c 20 36 34 2c 20  61, 62, 63, 64, 
35d0: 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c 31  97, 98, 99,100,1
35e0: 30 31 2c 31 30 32 2c 31 30 33 2c 0a 20 20 20 20  01,102,103,.    
35f0: 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c  104,105,106,107,
3600: 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c  108,109,110,111,
3610: 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35 2c  112,113,114,115,
3620: 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39 2c  116,117,118,119,
3630: 31 32 30 2c 31 32 31 2c 0a 20 20 20 20 31 32 32  120,121,.    122
3640: 2c 20 39 31 2c 20 39 32 2c 20 39 33 2c 20 39 34  , 91, 92, 93, 94
3650: 2c 20 39 35 2c 20 39 36 2c 20 39 37 2c 20 39 38  , 95, 96, 97, 98
3660: 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31 30 32  , 99,100,101,102
3670: 2c 31 30 33 2c 31 30 34 2c 31 30 35 2c 31 30 36  ,103,104,105,106
3680: 2c 31 30 37 2c 0a 20 20 20 20 31 30 38 2c 31 30  ,107,.    108,10
3690: 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31  9,110,111,112,11
36a0: 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c 31 31  3,114,115,116,11
36b0: 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c 31 32  7,118,119,120,12
36c0: 31 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c 31 32  1,122,123,124,12
36d0: 35 2c 0a 20 20 20 20 31 32 36 2c 31 32 37 2c 31  5,.    126,127,1
36e0: 32 38 2c 31 32 39 2c 31 33 30 2c 31 33 31 2c 31  28,129,130,131,1
36f0: 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35 2c 31  32,133,134,135,1
3700: 33 36 2c 31 33 37 2c 31 33 38 2c 31 33 39 2c 31  36,137,138,139,1
3710: 34 30 2c 31 34 31 2c 31 34 32 2c 31 34 33 2c 0a  40,141,142,143,.
3720: 20 20 20 20 31 34 34 2c 31 34 35 2c 31 34 36 2c      144,145,146,
3730: 31 34 37 2c 31 34 38 2c 31 34 39 2c 31 35 30 2c  147,148,149,150,
3740: 31 35 31 2c 31 35 32 2c 31 35 33 2c 31 35 34 2c  151,152,153,154,
3750: 31 35 35 2c 31 35 36 2c 31 35 37 2c 31 35 38 2c  155,156,157,158,
3760: 31 35 39 2c 31 36 30 2c 31 36 31 2c 0a 20 20 20  159,160,161,.   
3770: 20 31 36 32 2c 31 36 33 2c 31 36 34 2c 31 36 35   162,163,164,165
3780: 2c 31 36 36 2c 31 36 37 2c 31 36 38 2c 31 36 39  ,166,167,168,169
3790: 2c 31 37 30 2c 31 37 31 2c 31 37 32 2c 31 37 33  ,170,171,172,173
37a0: 2c 31 37 34 2c 31 37 35 2c 31 37 36 2c 31 37 37  ,174,175,176,177
37b0: 2c 31 37 38 2c 31 37 39 2c 0a 20 20 20 20 31 38  ,178,179,.    18
37c0: 30 2c 31 38 31 2c 31 38 32 2c 31 38 33 2c 31 38  0,181,182,183,18
37d0: 34 2c 31 38 35 2c 31 38 36 2c 31 38 37 2c 31 38  4,185,186,187,18
37e0: 38 2c 31 38 39 2c 31 39 30 2c 31 39 31 2c 31 39  8,189,190,191,19
37f0: 32 2c 31 39 33 2c 31 39 34 2c 31 39 35 2c 31 39  2,193,194,195,19
3800: 36 2c 31 39 37 2c 0a 20 20 20 20 31 39 38 2c 31  6,197,.    198,1
3810: 39 39 2c 32 30 30 2c 32 30 31 2c 32 30 32 2c 32  99,200,201,202,2
3820: 30 33 2c 32 30 34 2c 32 30 35 2c 32 30 36 2c 32  03,204,205,206,2
3830: 30 37 2c 32 30 38 2c 32 30 39 2c 32 31 30 2c 32  07,208,209,210,2
3840: 31 31 2c 32 31 32 2c 32 31 33 2c 32 31 34 2c 32  11,212,213,214,2
3850: 31 35 2c 0a 20 20 20 20 32 31 36 2c 32 31 37 2c  15,.    216,217,
3860: 32 31 38 2c 32 31 39 2c 32 32 30 2c 32 32 31 2c  218,219,220,221,
3870: 32 32 32 2c 32 32 33 2c 32 32 34 2c 32 32 35 2c  222,223,224,225,
3880: 32 32 36 2c 32 32 37 2c 32 32 38 2c 32 32 39 2c  226,227,228,229,
3890: 32 33 30 2c 32 33 31 2c 32 33 32 2c 32 33 33 2c  230,231,232,233,
38a0: 0a 20 20 20 20 32 33 34 2c 32 33 35 2c 32 33 36  .    234,235,236
38b0: 2c 32 33 37 2c 32 33 38 2c 32 33 39 2c 32 34 30  ,237,238,239,240
38c0: 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32 34 34  ,241,242,243,244
38d0: 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32 34 38  ,245,246,247,248
38e0: 2c 32 34 39 2c 32 35 30 2c 32 35 31 2c 0a 20 20  ,249,250,251,.  
38f0: 20 20 32 35 32 2c 32 35 33 2c 32 35 34 2c 32 35    252,253,254,25
3900: 35 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  5.};../*.** This
3910: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6d 70 75 74   function comput
3920: 65 73 20 61 20 68 61 73 68 20 6f 6e 20 74 68 65  es a hash on the
3930: 20 6e 61 6d 65 20 6f 66 20 61 20 6b 65 79 77 6f   name of a keywo
3940: 72 64 2e 0a 2a 2a 20 43 61 73 65 20 69 73 20 6e  rd..** Case is n
3950: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  ot significant..
3960: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 61  */.int sqlite3Ha
3970: 73 68 4e 6f 43 61 73 65 28 63 6f 6e 73 74 20 63  shNoCase(const c
3980: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a  har *z, int n){.
3990: 20 20 69 6e 74 20 68 20 3d 20 30 3b 0a 20 20 69    int h = 0;.  i
39a0: 66 28 20 6e 3c 3d 30 20 29 20 6e 20 3d 20 73 74  f( n<=0 ) n = st
39b0: 72 6c 65 6e 28 7a 29 3b 0a 20 20 77 68 69 6c 65  rlen(z);.  while
39c0: 28 20 6e 20 3e 20 30 20 20 29 7b 0a 20 20 20 20  ( n > 0  ){.    
39d0: 68 20 3d 20 28 68 3c 3c 33 29 20 5e 20 68 20 5e  h = (h<<3) ^ h ^
39e0: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75   UpperToLower[(u
39f0: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 2a 7a 2b  nsigned char)*z+
3a00: 2b 5d 3b 0a 20 20 20 20 6e 2d 2d 3b 0a 20 20 7d  +];.    n--;.  }
3a10: 0a 20 20 72 65 74 75 72 6e 20 68 20 26 20 30 78  .  return h & 0x
3a20: 37 66 66 66 66 66 66 66 3b 0a 7d 0a 0a 2f 2a 0a  7fffffff;.}../*.
3a30: 2a 2a 20 53 6f 6d 65 20 73 79 73 74 65 6d 73 20  ** Some systems 
3a40: 68 61 76 65 20 73 74 72 69 63 6d 70 28 29 2e 20  have stricmp(). 
3a50: 20 4f 74 68 65 72 73 20 68 61 76 65 20 73 74 72   Others have str
3a60: 63 61 73 65 63 6d 70 28 29 2e 20 20 42 65 63 61  casecmp().  Beca
3a70: 75 73 65 0a 2a 2a 20 74 68 65 72 65 20 69 73 20  use.** there is 
3a80: 6e 6f 20 63 6f 6e 73 69 73 74 65 6e 63 79 2c 20  no consistency, 
3a90: 77 65 20 77 69 6c 6c 20 64 65 66 69 6e 65 20 6f  we will define o
3aa0: 75 72 20 6f 77 6e 2e 0a 2a 2f 0a 69 6e 74 20 73  ur own..*/.int s
3ab0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
3ac0: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c  nst char *zLeft,
3ad0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 69   const char *zRi
3ae0: 67 68 74 29 7b 0a 20 20 72 65 67 69 73 74 65 72  ght){.  register
3af0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
3b00: 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e  a, *b;.  a = (un
3b10: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c  signed char *)zL
3b20: 65 66 74 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69  eft;.  b = (unsi
3b30: 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 52 69 67  gned char *)zRig
3b40: 68 74 3b 0a 20 20 77 68 69 6c 65 28 20 2a 61 21  ht;.  while( *a!
3b50: 3d 30 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77  =0 && UpperToLow
3b60: 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c  er[*a]==UpperToL
3b70: 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20  ower[*b]){ a++; 
3b80: 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20  b++; }.  return 
3b90: 2a 61 20 2d 20 2a 62 3b 0a 7d 0a 69 6e 74 20 73  *a - *b;.}.int s
3ba0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63  qlite3StrNICmp(c
3bb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74  onst char *zLeft
3bc0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52  , const char *zR
3bd0: 69 67 68 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  ight, int N){.  
3be0: 72 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65  register unsigne
3bf0: 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20  d char *a, *b;. 
3c00: 20 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63   a = (unsigned c
3c10: 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62  har *)zLeft;.  b
3c20: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
3c30: 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68  r *)zRight;.  wh
3c40: 69 6c 65 28 20 4e 2d 2d 20 3e 20 30 20 26 26 20  ile( N-- > 0 && 
3c50: 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72 54 6f  *a!=0 && UpperTo
3c60: 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72  Lower[*a]==Upper
3c70: 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b  ToLower[*b]){ a+
3c80: 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75  +; b++; }.  retu
3c90: 72 6e 20 4e 3c 30 20 3f 20 30 20 3a 20 55 70 70  rn N<0 ? 0 : Upp
3ca0: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20  erToLower[*a] - 
3cb0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
3cc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
3cd0: 6e 20 54 52 55 45 20 69 66 20 7a 20 69 73 20 61  n TRUE if z is a
3ce0: 20 70 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74   pure numeric st
3cf0: 72 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 46 41  ring.  Return FA
3d00: 4c 53 45 20 69 66 20 74 68 65 0a 2a 2a 20 73 74  LSE if the.** st
3d10: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ring contains an
3d20: 79 20 63 68 61 72 61 63 74 65 72 20 77 68 69 63  y character whic
3d30: 68 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66  h is not part of
3d40: 20 61 20 6e 75 6d 62 65 72 2e 20 49 66 0a 2a 2a   a number. If.**
3d50: 20 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 6e   the string is n
3d60: 75 6d 65 72 69 63 20 61 6e 64 20 63 6f 6e 74 61  umeric and conta
3d70: 69 6e 73 20 74 68 65 20 27 2e 27 20 63 68 61 72  ins the '.' char
3d80: 61 63 74 65 72 2c 20 73 65 74 20 2a 72 65 61 6c  acter, set *real
3d90: 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52 55 45 20 28  num.** to TRUE (
3da0: 6f 74 68 65 72 77 69 73 65 20 46 41 4c 53 45 29  otherwise FALSE)
3db0: 2e 0a 2a 2a 0a 2a 2a 20 41 6d 20 65 6d 70 74 79  ..**.** Am empty
3dc0: 20 73 74 72 69 6e 67 20 69 73 20 63 6f 6e 73 69   string is consi
3dd0: 64 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69  dered non-numeri
3de0: 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  c..*/.int sqlite
3df0: 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20  3IsNumber(const 
3e00: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65  char *z, int *re
3e10: 61 6c 6e 75 6d 2c 20 75 38 20 65 6e 63 29 7b 0a  alnum, u8 enc){.
3e20: 20 20 69 6e 74 20 69 6e 63 72 20 3d 20 28 65 6e    int incr = (en
3e30: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 3f 31  c==SQLITE_UTF8?1
3e40: 3a 32 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d  :2);.  if( enc==
3e50: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
3e60: 20 7a 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d   z++;.  if( *z==
3e70: 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29  '-' || *z=='+' )
3e80: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66   z += incr;.  if
3e90: 28 20 21 69 73 64 69 67 69 74 28 2a 7a 29 20 29  ( !isdigit(*z) )
3ea0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
3eb0: 20 20 7d 0a 20 20 7a 20 2b 3d 20 69 6e 63 72 3b    }.  z += incr;
3ec0: 0a 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29  .  if( realnum )
3ed0: 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20   *realnum = 0;. 
3ee0: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
3ef0: 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72  *z) ){ z += incr
3f00: 3b 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e  ; }.  if( *z=='.
3f10: 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e  ' ){.    z += in
3f20: 63 72 3b 0a 20 20 20 20 69 66 28 20 21 69 73 64  cr;.    if( !isd
3f30: 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72  igit(*z) ) retur
3f40: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
3f50: 69 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a  isdigit(*z) ){ z
3f60: 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20   += incr; }.    
3f70: 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72  if( realnum ) *r
3f80: 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a  ealnum = 1;.  }.
3f90: 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c    if( *z=='e' ||
3fa0: 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20   *z=='E' ){.    
3fb0: 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69  z += incr;.    i
3fc0: 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c 7c 20 2a 7a  f( *z=='+' || *z
3fd0: 3d 3d 27 2d 27 20 29 20 7a 20 2b 3d 20 69 6e 63  =='-' ) z += inc
3fe0: 72 3b 0a 20 20 20 20 69 66 28 20 21 69 73 64 69  r;.    if( !isdi
3ff0: 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e  git(*z) ) return
4000: 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69   0;.    while( i
4010: 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 20  sdigit(*z) ){ z 
4020: 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20 69  += incr; }.    i
4030: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
4040: 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20  alnum = 1;.  }. 
4050: 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d   return *z==0;.}
4060: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ../*.** The stri
4070: 6e 67 20 7a 5b 5d 20 69 73 20 61 6e 20 61 73 63  ng z[] is an asc
4080: 69 69 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ii representatio
4090: 6e 20 6f 66 20 61 20 72 65 61 6c 20 6e 75 6d 62  n of a real numb
40a0: 65 72 2e 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  er..** Convert t
40b0: 68 69 73 20 73 74 72 69 6e 67 20 74 6f 20 61 20  his string to a 
40c0: 64 6f 75 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  double..**.** Th
40d0: 69 73 20 72 6f 75 74 69 6e 65 20 61 73 73 75 6d  is routine assum
40e0: 65 73 20 74 68 61 74 20 7a 5b 5d 20 72 65 61 6c  es that z[] real
40f0: 6c 79 20 69 73 20 61 20 76 61 6c 69 64 20 6e 75  ly is a valid nu
4100: 6d 62 65 72 2e 20 20 49 66 20 69 74 0a 2a 2a 20  mber.  If it.** 
4110: 69 73 20 6e 6f 74 2c 20 74 68 65 20 72 65 73 75  is not, the resu
4120: 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  lt is undefined.
4130: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
4140: 69 6e 65 20 69 73 20 75 73 65 64 20 69 6e 73 74  ine is used inst
4150: 65 61 64 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ead of the libra
4160: 72 79 20 61 74 6f 66 28 29 20 66 75 6e 63 74 69  ry atof() functi
4170: 6f 6e 20 62 65 63 61 75 73 65 0a 2a 2a 20 74 68  on because.** th
4180: 65 20 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29  e library atof()
4190: 20 6d 69 67 68 74 20 77 61 6e 74 20 74 6f 20 75   might want to u
41a0: 73 65 20 22 2c 22 20 61 73 20 74 68 65 20 64 65  se "," as the de
41b0: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 73 74  cimal point inst
41c0: 65 61 64 0a 2a 2a 20 6f 66 20 22 2e 22 20 64 65  ead.** of "." de
41d0: 70 65 6e 64 69 6e 67 20 6f 6e 20 68 6f 77 20 6c  pending on how l
41e0: 6f 63 61 6c 65 20 69 73 20 73 65 74 2e 20 20 42  ocale is set.  B
41f0: 75 74 20 74 68 61 74 20 77 6f 75 6c 64 20 63 61  ut that would ca
4200: 75 73 65 20 70 72 6f 62 6c 65 6d 73 0a 2a 2a 20  use problems.** 
4210: 66 6f 72 20 53 51 4c 2e 20 20 53 6f 20 74 68 69  for SQL.  So thi
4220: 73 20 72 6f 75 74 69 6e 65 20 61 6c 77 61 79 73  s routine always
4230: 20 75 73 65 73 20 22 2e 22 20 72 65 67 61 72 64   uses "." regard
4240: 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
4250: 2a 2f 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  */.double sqlite
4260: 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
4270: 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   *z, const char 
4280: 2a 2a 70 7a 45 6e 64 29 7b 0a 20 20 69 6e 74 20  **pzEnd){.  int 
4290: 73 69 67 6e 20 3d 20 31 3b 0a 20 20 4c 4f 4e 47  sign = 1;.  LONG
42a0: 44 4f 55 42 4c 45 5f 54 59 50 45 20 76 31 20 3d  DOUBLE_TYPE v1 =
42b0: 20 30 2e 30 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d   0.0;.  if( *z==
42c0: 27 2d 27 20 29 7b 0a 20 20 20 20 73 69 67 6e 20  '-' ){.    sign 
42d0: 3d 20 2d 31 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  = -1;.    z++;. 
42e0: 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27   }else if( *z=='
42f0: 2b 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  +' ){.    z++;. 
4300: 20 7d 0a 20 20 77 68 69 6c 65 28 20 69 73 64 69   }.  while( isdi
4310: 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 76  git(*z) ){.    v
4320: 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a  1 = v1*10.0 + (*
4330: 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 7a 2b  z - '0');.    z+
4340: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d  +;.  }.  if( *z=
4350: 3d 27 2e 27 20 29 7b 0a 20 20 20 20 4c 4f 4e 47  ='.' ){.    LONG
4360: 44 4f 55 42 4c 45 5f 54 59 50 45 20 64 69 76 69  DOUBLE_TYPE divi
4370: 73 6f 72 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a  sor = 1.0;.    z
4380: 2b 2b 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69  ++;.    while( i
4390: 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20  sdigit(*z) ){.  
43a0: 20 20 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30      v1 = v1*10.0
43b0: 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20   + (*z - '0');. 
43c0: 20 20 20 20 20 64 69 76 69 73 6f 72 20 2a 3d 20       divisor *= 
43d0: 31 30 2e 30 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b  10.0;.      z++;
43e0: 0a 20 20 20 20 7d 0a 20 20 20 20 76 31 20 2f 3d  .    }.    v1 /=
43f0: 20 64 69 76 69 73 6f 72 3b 0a 20 20 7d 0a 20 20   divisor;.  }.  
4400: 69 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a  if( *z=='e' || *
4410: 7a 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20 69 6e  z=='E' ){.    in
4420: 74 20 65 73 69 67 6e 20 3d 20 31 3b 0a 20 20 20  t esign = 1;.   
4430: 20 69 6e 74 20 65 76 61 6c 20 3d 20 30 3b 0a 20   int eval = 0;. 
4440: 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59     LONGDOUBLE_TY
4450: 50 45 20 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a  PE scale = 1.0;.
4460: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28      z++;.    if(
4470: 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20   *z=='-' ){.    
4480: 20 20 65 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20    esign = -1;.  
4490: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c      z++;.    }el
44a0: 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29  se if( *z=='+' )
44b0: 7b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  {.      z++;.   
44c0: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73   }.    while( is
44d0: 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20  digit(*z) ){.   
44e0: 20 20 20 65 76 61 6c 20 3d 20 65 76 61 6c 2a 31     eval = eval*1
44f0: 30 20 2b 20 2a 7a 20 2d 20 27 30 27 3b 0a 20 20  0 + *z - '0';.  
4500: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20      z++;.    }. 
4510: 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d     while( eval>=
4520: 36 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  64 ){ scale *= 1
4530: 2e 30 65 2b 36 34 3b 20 65 76 61 6c 20 2d 3d 20  .0e+64; eval -= 
4540: 36 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28  64; }.    while(
4550: 20 65 76 61 6c 3e 3d 31 36 20 29 7b 20 73 63 61   eval>=16 ){ sca
4560: 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 36 3b 20 65  le *= 1.0e+16; e
4570: 76 61 6c 20 2d 3d 20 31 36 3b 20 7d 0a 20 20 20  val -= 16; }.   
4580: 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 34 20   while( eval>=4 
4590: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65  ){ scale *= 1.0e
45a0: 2b 34 3b 20 65 76 61 6c 20 2d 3d 20 34 3b 20 7d  +4; eval -= 4; }
45b0: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
45c0: 3e 3d 31 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20  >=1 ){ scale *= 
45d0: 31 2e 30 65 2b 31 3b 20 65 76 61 6c 20 2d 3d 20  1.0e+1; eval -= 
45e0: 31 3b 20 7d 0a 20 20 20 20 69 66 28 20 65 73 69  1; }.    if( esi
45f0: 67 6e 3c 30 20 29 7b 0a 20 20 20 20 20 20 76 31  gn<0 ){.      v1
4600: 20 2f 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d   /= scale;.    }
4610: 65 6c 73 65 7b 0a 20 20 20 20 20 20 76 31 20 2a  else{.      v1 *
4620: 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 0a 20  = scale;.    }. 
4630: 20 7d 0a 20 20 69 66 28 20 70 7a 45 6e 64 20 29   }.  if( pzEnd )
4640: 20 2a 70 7a 45 6e 64 20 3d 20 7a 3b 0a 20 20 72   *pzEnd = z;.  r
4650: 65 74 75 72 6e 20 73 69 67 6e 3c 30 20 3f 20 2d  eturn sign<0 ? -
4660: 76 31 20 3a 20 76 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  v1 : v1;.}../*.*
4670: 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66  * Return TRUE if
4680: 20 7a 4e 75 6d 20 69 73 20 61 20 36 34 2d 62 69   zNum is a 64-bi
4690: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
46a0: 20 61 6e 64 20 77 72 69 74 65 0a 2a 2a 20 74 68   and write.** th
46b0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
46c0: 6e 74 65 67 65 72 20 69 6e 74 6f 20 2a 70 4e 75  nteger into *pNu
46d0: 6d 2e 20 20 49 66 20 7a 4e 75 6d 20 69 73 20 6e  m.  If zNum is n
46e0: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ot an integer.**
46f0: 20 6f 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65   or is an intege
4700: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
4710: 72 67 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  rge to be expres
4720: 73 65 64 20 77 69 74 68 20 36 34 20 62 69 74 73  sed with 64 bits
4730: 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 74 75 72 6e  ,.** then return
4740: 20 66 61 6c 73 65 2e 20 20 49 66 20 6e 3e 30 20   false.  If n>0 
4750: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
4760: 69 73 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  is string is not
4770: 0a 2a 2a 20 65 78 61 63 74 6c 79 20 6e 20 62 79  .** exactly n by
4780: 74 65 73 20 6c 6f 6e 67 2c 20 72 65 74 75 72 6e  tes long, return
4790: 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20 57 68   false..**.** Wh
47a0: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
47b0: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 77  was originally w
47c0: 72 69 74 74 65 6e 20 69 74 20 64 65 61 6c 74 20  ritten it dealt 
47d0: 77 69 74 68 20 6f 6e 6c 79 0a 2a 2a 20 33 32 2d  with only.** 32-
47e0: 62 69 74 20 6e 75 6d 62 65 72 73 2e 20 20 41 74  bit numbers.  At
47f0: 20 74 68 61 74 20 74 69 6d 65 2c 20 69 74 20 77   that time, it w
4800: 61 73 20 6d 75 63 68 20 66 61 73 74 65 72 20 74  as much faster t
4810: 68 61 6e 20 74 68 65 0a 2a 2a 20 61 74 6f 69 28  han the.** atoi(
4820: 29 20 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e  ) library routin
4830: 65 20 69 6e 20 52 65 64 48 61 74 20 37 2e 32 2e  e in RedHat 7.2.
4840: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 61  .*/.int sqlite3a
4850: 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
4860: 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 4e 75   *zNum, i64 *pNu
4870: 6d 29 7b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b  m){.  i64 v = 0;
4880: 0a 20 20 69 6e 74 20 6e 65 67 3b 0a 20 20 69 6e  .  int neg;.  in
4890: 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a  t i, c;.  if( *z
48a0: 4e 75 6d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  Num=='-' ){.    
48b0: 6e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a 4e 75  neg = 1;.    zNu
48c0: 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  m++;.  }else if(
48d0: 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20   *zNum=='+' ){. 
48e0: 20 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20 20 20     neg = 0;.    
48f0: 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  zNum++;.  }else{
4900: 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20  .    neg = 0;.  
4910: 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d  }.  for(i=0; (c=
4920: 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26  zNum[i])>='0' &&
4930: 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 0a 20   c<='9'; i++){. 
4940: 20 20 20 76 20 3d 20 76 2a 31 30 20 2b 20 63 20     v = v*10 + c 
4950: 2d 20 27 30 27 3b 0a 20 20 7d 0a 20 20 2a 70 4e  - '0';.  }.  *pN
4960: 75 6d 20 3d 20 6e 65 67 20 3f 20 2d 76 20 3a 20  um = neg ? -v : 
4970: 76 3b 0a 20 20 72 65 74 75 72 6e 20 63 3d 3d 30  v;.  return c==0
4980: 20 26 26 20 69 3e 30 20 26 26 20 0a 20 20 20 20   && i>0 && .    
4990: 20 20 28 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31    (i<19 || (i==1
49a0: 39 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d  9 && memcmp(zNum
49b0: 2c 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37  ,"92233720368547
49c0: 37 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 29 3b  75807",19)<=0));
49d0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74  .}../*.** The st
49e0: 72 69 6e 67 20 7a 4e 75 6d 20 72 65 70 72 65 73  ring zNum repres
49f0: 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ents an integer.
4a00: 20 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65    There might be
4a10: 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69   some other.** i
4a20: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f  nformation follo
4a30: 77 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72  wing the integer
4a40: 20 74 6f 6f 2c 20 62 75 74 20 74 68 61 74 20 70   too, but that p
4a50: 61 72 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a  art is ignored..
4a60: 2a 2a 20 49 66 20 74 68 65 20 69 6e 74 65 67 65  ** If the intege
4a70: 72 20 74 68 61 74 20 74 68 65 20 70 72 65 66 69  r that the prefi
4a80: 78 20 6f 66 20 7a 4e 75 6d 20 72 65 70 72 65 73  x of zNum repres
4a90: 65 6e 74 73 20 77 69 6c 6c 20 66 69 74 20 69 6e  ents will fit in
4aa0: 20 61 0a 2a 2a 20 33 32 2d 62 69 74 20 73 69 67   a.** 32-bit sig
4ab0: 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 72 65 74  ned integer, ret
4ac0: 75 72 6e 20 54 52 55 45 2e 20 20 4f 74 68 65 72  urn TRUE.  Other
4ad0: 77 69 73 65 20 72 65 74 75 72 6e 20 46 41 4c 53  wise return FALS
4ae0: 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  E..**.** This ro
4af0: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 46 41  utine returns FA
4b00: 4c 53 45 20 66 6f 72 20 74 68 65 20 73 74 72 69  LSE for the stri
4b10: 6e 67 20 2d 32 31 34 37 34 38 33 36 34 38 20 65  ng -2147483648 e
4b20: 76 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74  ven that.** that
4b30: 20 6e 75 6d 62 65 72 20 77 69 6c 6c 2c 20 69 6e   number will, in
4b40: 20 74 68 65 6f 72 79 20 66 69 74 20 69 6e 20 61   theory fit in a
4b50: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 2e   32-bit integer.
4b60: 20 20 42 75 74 20 70 6f 73 69 74 69 76 65 0a 2a    But positive.*
4b70: 2a 20 32 31 34 37 34 38 33 36 34 38 20 77 69 6c  * 2147483648 wil
4b80: 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 33 32 20  l not fit in 32 
4b90: 62 69 74 73 2e 20 20 53 6f 20 69 74 20 73 65 65  bits.  So it see
4ba0: 6d 73 20 73 61 66 65 72 20 74 6f 20 72 65 74 75  ms safer to retu
4bb0: 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a  rn.** false..*/.
4bc0: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
4bd0: 65 33 46 69 74 73 49 6e 33 32 42 69 74 73 28 63  e3FitsIn32Bits(c
4be0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29  onst char *zNum)
4bf0: 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20  {.  int i, c;.  
4c00: 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c  if( *zNum=='-' |
4c10: 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a  | *zNum=='+' ) z
4c20: 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 30  Num++;.  for(i=0
4c30: 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27  ; (c=zNum[i])>='
4c40: 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b  0' && c<='9'; i+
4c50: 2b 29 7b 7d 0a 20 20 72 65 74 75 72 6e 20 69 3c  +){}.  return i<
4c60: 31 30 20 7c 7c 20 28 69 3d 3d 31 30 20 26 26 20  10 || (i==10 && 
4c70: 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 32 31 34  memcmp(zNum,"214
4c80: 37 34 38 33 36 34 37 22 2c 31 30 29 3c 3d 30 29  7483647",10)<=0)
4c90: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e  ;.}../*.** If zN
4ca0: 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e  um represents an
4cb0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 69   integer that wi
4cc0: 6c 6c 20 66 69 74 20 69 6e 20 33 32 2d 62 69 74  ll fit in 32-bit
4cd0: 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a  s, then set.** *
4ce0: 70 56 61 6c 75 65 20 74 6f 20 74 68 61 74 20 69  pValue to that i
4cf0: 6e 74 65 67 65 72 20 61 6e 64 20 72 65 74 75 72  nteger and retur
4d00: 6e 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69  n true.  Otherwi
4d10: 73 65 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e  se return false.
4d20: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
4d30: 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
4d40: 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70  ar *zNum, int *p
4d50: 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73 71  Value){.  if( sq
4d60: 6c 69 74 65 33 46 69 74 73 49 6e 33 32 42 69 74  lite3FitsIn32Bit
4d70: 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20 2a  s(zNum) ){.    *
4d80: 70 56 61 6c 75 65 20 3d 20 61 74 6f 69 28 7a 4e  pValue = atoi(zN
4d90: 75 6d 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  um);.    return 
4da0: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
4db0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0;.}../*.** The 
4dc0: 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72 65 70 72  string zNum repr
4dd0: 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65  esents an intege
4de0: 72 2e 20 20 54 68 65 72 65 20 6d 69 67 68 74 20  r.  There might 
4df0: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a  be some other.**
4e00: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c   information fol
4e10: 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e 74 65 67  lowing the integ
4e20: 65 72 20 74 6f 6f 2c 20 62 75 74 20 74 68 61 74  er too, but that
4e30: 20 70 61 72 74 20 69 73 20 69 67 6e 6f 72 65 64   part is ignored
4e40: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 74 65  ..** If the inte
4e50: 67 65 72 20 74 68 61 74 20 74 68 65 20 70 72 65  ger that the pre
4e60: 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72 65 70 72  fix of zNum repr
4e70: 65 73 65 6e 74 73 20 77 69 6c 6c 20 66 69 74 20  esents will fit 
4e80: 69 6e 20 61 0a 2a 2a 20 36 34 2d 62 69 74 20 73  in a.** 64-bit s
4e90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 72  igned integer, r
4ea0: 65 74 75 72 6e 20 54 52 55 45 2e 20 20 4f 74 68  eturn TRUE.  Oth
4eb0: 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 46 41  erwise return FA
4ec0: 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  LSE..**.** This 
4ed0: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
4ee0: 46 41 4c 53 45 20 66 6f 72 20 74 68 65 20 73 74  FALSE for the st
4ef0: 72 69 6e 67 20 2d 39 32 32 33 33 37 32 30 33 36  ring -9223372036
4f00: 38 35 34 37 37 35 38 30 38 20 65 76 65 6e 20 74  854775808 even t
4f10: 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d 62  hat.** that numb
4f20: 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74 68 65 6f  er will, in theo
4f30: 72 79 20 66 69 74 20 69 6e 20 61 20 36 34 2d 62  ry fit in a 64-b
4f40: 69 74 20 69 6e 74 65 67 65 72 2e 20 20 50 6f 73  it integer.  Pos
4f50: 69 74 69 76 65 0a 2a 2a 20 39 32 32 33 33 37 33  itive.** 9223373
4f60: 30 33 36 38 35 34 37 37 35 38 30 38 20 77 69 6c  036854775808 wil
4f70: 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 36 34 20  l not fit in 64 
4f80: 62 69 74 73 2e 20 20 53 6f 20 69 74 20 73 65 65  bits.  So it see
4f90: 6d 73 20 73 61 66 65 72 20 74 6f 20 72 65 74 75  ms safer to retu
4fa0: 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a 2a 2f 0a  rn.** false..*/.
4fb0: 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74 73 49  int sqlite3FitsI
4fc0: 6e 36 34 42 69 74 73 28 63 6f 6e 73 74 20 63 68  n64Bits(const ch
4fd0: 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74  ar *zNum){.  int
4fe0: 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e   i, c;.  if( *zN
4ff0: 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d  um=='-' || *zNum
5000: 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a  =='+' ) zNum++;.
5010: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e    for(i=0; (c=zN
5020: 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63  um[i])>='0' && c
5030: 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20  <='9'; i++){}.  
5040: 72 65 74 75 72 6e 20 69 3c 31 39 20 7c 7c 20 28  return i<19 || (
5050: 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d 70 28  i==19 && memcmp(
5060: 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32 30 33 36  zNum,"9223372036
5070: 38 35 34 37 37 35 38 30 37 22 2c 31 39 29 3c 3d  854775807",19)<=
5080: 30 29 3b 0a 7d 0a 0a 23 69 66 20 31 20 20 2f 2a  0);.}..#if 1  /*
5090: 20 57 65 20 61 72 65 20 6e 6f 77 20 61 6c 77 61   We are now alwa
50a0: 79 73 20 55 54 46 2d 38 20 2a 2f 0a 2f 2a 0a 2a  ys UTF-8 */./*.*
50b0: 2a 20 58 20 69 73 20 61 20 70 6f 69 6e 74 65 72  * X is a pointer
50c0: 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
50d0: 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
50e0: 61 72 61 63 74 65 72 2e 20 20 49 6e 63 72 65 6d  aracter.  Increm
50f0: 65 6e 74 0a 2a 2a 20 58 20 73 6f 20 74 68 61 74  ent.** X so that
5100: 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
5110: 65 20 6e 65 78 74 20 63 68 61 72 61 63 74 65 72  e next character
5120: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 77 6f 72  .  This only wor
5130: 6b 73 20 72 69 67 68 74 0a 2a 2a 20 69 66 20 58  ks right.** if X
5140: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 77 65 6c   points to a wel
5150: 6c 2d 66 6f 72 6d 65 64 20 55 54 46 2d 38 20 73  l-formed UTF-8 s
5160: 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tring..*/.#defin
5170: 65 20 73 71 6c 69 74 65 4e 65 78 74 43 68 61 72  e sqliteNextChar
5180: 28 58 29 20 20 77 68 69 6c 65 28 20 28 30 78 63  (X)  while( (0xc
5190: 30 26 2a 2b 2b 28 58 29 29 3d 3d 30 78 38 30 20  0&*++(X))==0x80 
51a0: 29 7b 7d 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ){}.#define sqli
51b0: 74 65 43 68 61 72 56 61 6c 28 58 29 20 20 20 73  teCharVal(X)   s
51c0: 71 6c 69 74 65 33 52 65 61 64 55 74 66 38 28 58  qlite3ReadUtf8(X
51d0: 29 0a 0a 23 65 6c 73 65 20 2f 2a 20 21 64 65 66  )..#else /* !def
51e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 54 46 38  ined(SQLITE_UTF8
51f0: 29 20 2a 2f 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 69  ) */./*.** For i
5200: 73 6f 38 38 35 39 20 65 6e 63 6f 64 69 6e 67 2c  so8859 encoding,
5210: 20 74 68 65 20 6e 65 78 74 20 63 68 61 72 61 63   the next charac
5220: 74 65 72 20 69 73 20 6a 75 73 74 20 74 68 65 20  ter is just the 
5230: 6e 65 78 74 20 62 79 74 65 2e 0a 2a 2f 0a 23 64  next byte..*/.#d
5240: 65 66 69 6e 65 20 73 71 6c 69 74 65 4e 65 78 74  efine sqliteNext
5250: 43 68 61 72 28 58 29 20 20 28 2b 2b 28 58 29 29  Char(X)  (++(X))
5260: 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
5270: 43 68 61 72 56 61 6c 28 58 29 20 20 20 28 28 69  CharVal(X)   ((i
5280: 6e 74 29 2a 28 58 29 29 0a 0a 23 65 6e 64 69 66  nt)*(X))..#endif
5290: 20 2f 2a 20 64 65 66 69 6e 65 64 28 53 51 4c 49   /* defined(SQLI
52a0: 54 45 5f 55 54 46 38 29 20 2a 2f 0a 0a 0a 23 69  TE_UTF8) */...#i
52b0: 66 20 31 20 20 2f 2a 20 57 65 20 61 72 65 20 6e  f 1  /* We are n
52c0: 6f 77 20 61 6c 77 61 79 73 20 55 54 46 2d 38 20  ow always UTF-8 
52d0: 2a 2f 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  */./*.** Convert
52e0: 20 74 68 65 20 55 54 46 2d 38 20 63 68 61 72 61   the UTF-8 chara
52f0: 63 74 65 72 20 74 6f 20 77 68 69 63 68 20 7a 20  cter to which z 
5300: 70 6f 69 6e 74 73 20 69 6e 74 6f 20 61 20 33 31  points into a 31
5310: 2d 62 69 74 0a 2a 2a 20 55 43 53 20 63 68 61 72  -bit.** UCS char
5320: 61 63 74 65 72 2e 20 20 54 68 69 73 20 6f 6e 6c  acter.  This onl
5330: 79 20 77 6f 72 6b 73 20 72 69 67 68 74 20 69 66  y works right if
5340: 20 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 77   z points to a w
5350: 65 6c 6c 2d 66 6f 72 6d 65 64 0a 2a 2a 20 55 54  ell-formed.** UT
5360: 46 2d 38 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 69  F-8 string..*/.i
5370: 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 55 74  nt sqlite3ReadUt
5380: 66 38 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  f8(const unsigne
5390: 64 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  d char *z){.  in
53a0: 74 20 63 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  t c;.  static co
53b0: 6e 73 74 20 69 6e 74 20 69 6e 69 74 56 61 6c 5b  nst int initVal[
53c0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 30 2c 20 20  ] = {.      0,  
53d0: 20 31 2c 20 20 20 32 2c 20 20 20 33 2c 20 20 20   1,   2,   3,   
53e0: 34 2c 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37  4,   5,   6,   7
53f0: 2c 20 20 20 38 2c 20 20 20 39 2c 20 20 31 30 2c  ,   8,   9,  10,
5400: 20 20 31 31 2c 20 20 31 32 2c 20 20 31 33 2c 20    11,  12,  13, 
5410: 20 31 34 2c 0a 20 20 20 20 20 31 35 2c 20 20 31   14,.     15,  1
5420: 36 2c 20 20 31 37 2c 20 20 31 38 2c 20 20 31 39  6,  17,  18,  19
5430: 2c 20 20 32 30 2c 20 20 32 31 2c 20 20 32 32 2c  ,  20,  21,  22,
5440: 20 20 32 33 2c 20 20 32 34 2c 20 20 32 35 2c 20    23,  24,  25, 
5450: 20 32 36 2c 20 20 32 37 2c 20 20 32 38 2c 20 20   26,  27,  28,  
5460: 32 39 2c 0a 20 20 20 20 20 33 30 2c 20 20 33 31  29,.     30,  31
5470: 2c 20 20 33 32 2c 20 20 33 33 2c 20 20 33 34 2c  ,  32,  33,  34,
5480: 20 20 33 35 2c 20 20 33 36 2c 20 20 33 37 2c 20    35,  36,  37, 
5490: 20 33 38 2c 20 20 33 39 2c 20 20 34 30 2c 20 20   38,  39,  40,  
54a0: 34 31 2c 20 20 34 32 2c 20 20 34 33 2c 20 20 34  41,  42,  43,  4
54b0: 34 2c 0a 20 20 20 20 20 34 35 2c 20 20 34 36 2c  4,.     45,  46,
54c0: 20 20 34 37 2c 20 20 34 38 2c 20 20 34 39 2c 20    47,  48,  49, 
54d0: 20 35 30 2c 20 20 35 31 2c 20 20 35 32 2c 20 20   50,  51,  52,  
54e0: 35 33 2c 20 20 35 34 2c 20 20 35 35 2c 20 20 35  53,  54,  55,  5
54f0: 36 2c 20 20 35 37 2c 20 20 35 38 2c 20 20 35 39  6,  57,  58,  59
5500: 2c 0a 20 20 20 20 20 36 30 2c 20 20 36 31 2c 20  ,.     60,  61, 
5510: 20 36 32 2c 20 20 36 33 2c 20 20 36 34 2c 20 20   62,  63,  64,  
5520: 36 35 2c 20 20 36 36 2c 20 20 36 37 2c 20 20 36  65,  66,  67,  6
5530: 38 2c 20 20 36 39 2c 20 20 37 30 2c 20 20 37 31  8,  69,  70,  71
5540: 2c 20 20 37 32 2c 20 20 37 33 2c 20 20 37 34 2c  ,  72,  73,  74,
5550: 0a 20 20 20 20 20 37 35 2c 20 20 37 36 2c 20 20  .     75,  76,  
5560: 37 37 2c 20 20 37 38 2c 20 20 37 39 2c 20 20 38  77,  78,  79,  8
5570: 30 2c 20 20 38 31 2c 20 20 38 32 2c 20 20 38 33  0,  81,  82,  83
5580: 2c 20 20 38 34 2c 20 20 38 35 2c 20 20 38 36 2c  ,  84,  85,  86,
5590: 20 20 38 37 2c 20 20 38 38 2c 20 20 38 39 2c 0a    87,  88,  89,.
55a0: 20 20 20 20 20 39 30 2c 20 20 39 31 2c 20 20 39       90,  91,  9
55b0: 32 2c 20 20 39 33 2c 20 20 39 34 2c 20 20 39 35  2,  93,  94,  95
55c0: 2c 20 20 39 36 2c 20 20 39 37 2c 20 20 39 38 2c  ,  96,  97,  98,
55d0: 20 20 39 39 2c 20 31 30 30 2c 20 31 30 31 2c 20    99, 100, 101, 
55e0: 31 30 32 2c 20 31 30 33 2c 20 31 30 34 2c 0a 20  102, 103, 104,. 
55f0: 20 20 20 31 30 35 2c 20 31 30 36 2c 20 31 30 37     105, 106, 107
5600: 2c 20 31 30 38 2c 20 31 30 39 2c 20 31 31 30 2c  , 108, 109, 110,
5610: 20 31 31 31 2c 20 31 31 32 2c 20 31 31 33 2c 20   111, 112, 113, 
5620: 31 31 34 2c 20 31 31 35 2c 20 31 31 36 2c 20 31  114, 115, 116, 1
5630: 31 37 2c 20 31 31 38 2c 20 31 31 39 2c 0a 20 20  17, 118, 119,.  
5640: 20 20 31 32 30 2c 20 31 32 31 2c 20 31 32 32 2c    120, 121, 122,
5650: 20 31 32 33 2c 20 31 32 34 2c 20 31 32 35 2c 20   123, 124, 125, 
5660: 31 32 36 2c 20 31 32 37 2c 20 31 32 38 2c 20 31  126, 127, 128, 1
5670: 32 39 2c 20 31 33 30 2c 20 31 33 31 2c 20 31 33  29, 130, 131, 13
5680: 32 2c 20 31 33 33 2c 20 31 33 34 2c 0a 20 20 20  2, 133, 134,.   
5690: 20 31 33 35 2c 20 31 33 36 2c 20 31 33 37 2c 20   135, 136, 137, 
56a0: 31 33 38 2c 20 31 33 39 2c 20 31 34 30 2c 20 31  138, 139, 140, 1
56b0: 34 31 2c 20 31 34 32 2c 20 31 34 33 2c 20 31 34  41, 142, 143, 14
56c0: 34 2c 20 31 34 35 2c 20 31 34 36 2c 20 31 34 37  4, 145, 146, 147
56d0: 2c 20 31 34 38 2c 20 31 34 39 2c 0a 20 20 20 20  , 148, 149,.    
56e0: 31 35 30 2c 20 31 35 31 2c 20 31 35 32 2c 20 31  150, 151, 152, 1
56f0: 35 33 2c 20 31 35 34 2c 20 31 35 35 2c 20 31 35  53, 154, 155, 15
5700: 36 2c 20 31 35 37 2c 20 31 35 38 2c 20 31 35 39  6, 157, 158, 159
5710: 2c 20 31 36 30 2c 20 31 36 31 2c 20 31 36 32 2c  , 160, 161, 162,
5720: 20 31 36 33 2c 20 31 36 34 2c 0a 20 20 20 20 31   163, 164,.    1
5730: 36 35 2c 20 31 36 36 2c 20 31 36 37 2c 20 31 36  65, 166, 167, 16
5740: 38 2c 20 31 36 39 2c 20 31 37 30 2c 20 31 37 31  8, 169, 170, 171
5750: 2c 20 31 37 32 2c 20 31 37 33 2c 20 31 37 34 2c  , 172, 173, 174,
5760: 20 31 37 35 2c 20 31 37 36 2c 20 31 37 37 2c 20   175, 176, 177, 
5770: 31 37 38 2c 20 31 37 39 2c 0a 20 20 20 20 31 38  178, 179,.    18
5780: 30 2c 20 31 38 31 2c 20 31 38 32 2c 20 31 38 33  0, 181, 182, 183
5790: 2c 20 31 38 34 2c 20 31 38 35 2c 20 31 38 36 2c  , 184, 185, 186,
57a0: 20 31 38 37 2c 20 31 38 38 2c 20 31 38 39 2c 20   187, 188, 189, 
57b0: 31 39 30 2c 20 31 39 31 2c 20 20 20 30 2c 20 20  190, 191,   0,  
57c0: 20 31 2c 20 20 20 32 2c 0a 20 20 20 20 20 20 33   1,   2,.      3
57d0: 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20 36 2c  ,   4,   5,   6,
57e0: 20 20 20 37 2c 20 20 20 38 2c 20 20 20 39 2c 20     7,   8,   9, 
57f0: 20 31 30 2c 20 20 31 31 2c 20 20 31 32 2c 20 20   10,  11,  12,  
5800: 31 33 2c 20 20 31 34 2c 20 20 31 35 2c 20 20 31  13,  14,  15,  1
5810: 36 2c 20 20 31 37 2c 0a 20 20 20 20 20 31 38 2c  6,  17,.     18,
5820: 20 20 31 39 2c 20 20 32 30 2c 20 20 32 31 2c 20    19,  20,  21, 
5830: 20 32 32 2c 20 20 32 33 2c 20 20 32 34 2c 20 20   22,  23,  24,  
5840: 32 35 2c 20 20 32 36 2c 20 20 32 37 2c 20 20 32  25,  26,  27,  2
5850: 38 2c 20 20 32 39 2c 20 20 33 30 2c 20 20 33 31  8,  29,  30,  31
5860: 2c 20 20 20 30 2c 0a 20 20 20 20 20 20 31 2c 20  ,   0,.      1, 
5870: 20 20 32 2c 20 20 20 33 2c 20 20 20 34 2c 20 20    2,   3,   4,  
5880: 20 35 2c 20 20 20 36 2c 20 20 20 37 2c 20 20 20   5,   6,   7,   
5890: 38 2c 20 20 20 39 2c 20 20 31 30 2c 20 20 31 31  8,   9,  10,  11
58a0: 2c 20 20 31 32 2c 20 20 31 33 2c 20 20 31 34 2c  ,  12,  13,  14,
58b0: 20 20 31 35 2c 0a 20 20 20 20 20 20 30 2c 20 20    15,.      0,  
58c0: 20 31 2c 20 20 20 32 2c 20 20 20 33 2c 20 20 20   1,   2,   3,   
58d0: 34 2c 20 20 20 35 2c 20 20 20 36 2c 20 20 20 37  4,   5,   6,   7
58e0: 2c 20 20 20 30 2c 20 20 20 31 2c 20 20 20 32 2c  ,   0,   1,   2,
58f0: 20 20 20 33 2c 20 20 20 30 2c 20 20 20 31 2c 20     3,   0,   1, 
5900: 32 35 34 2c 0a 20 20 20 20 32 35 35 2c 0a 20 20  254,.    255,.  
5910: 7d 3b 0a 20 20 63 20 3d 20 69 6e 69 74 56 61 6c  };.  c = initVal
5920: 5b 2a 28 7a 2b 2b 29 5d 3b 0a 20 20 77 68 69 6c  [*(z++)];.  whil
5930: 65 28 20 28 30 78 63 30 26 2a 7a 29 3d 3d 30 78  e( (0xc0&*z)==0x
5940: 38 30 20 29 7b 0a 20 20 20 20 63 20 3d 20 28 63  80 ){.    c = (c
5950: 3c 3c 36 29 20 7c 20 28 30 78 33 66 26 2a 28 7a  <<6) | (0x3f&*(z
5960: 2b 2b 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  ++));.  }.  retu
5970: 72 6e 20 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn c;.}.#endif..
5980: 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  /*.** Compare tw
5990: 6f 20 55 54 46 2d 38 20 73 74 72 69 6e 67 73 20  o UTF-8 strings 
59a0: 66 6f 72 20 65 71 75 61 6c 69 74 79 20 77 68 65  for equality whe
59b0: 72 65 20 74 68 65 20 66 69 72 73 74 20 73 74 72  re the first str
59c0: 69 6e 67 20 63 61 6e 0a 2a 2a 20 70 6f 74 65 6e  ing can.** poten
59d0: 74 69 61 6c 6c 79 20 62 65 20 61 20 22 67 6c 6f  tially be a "glo
59e0: 62 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  b" expression.  
59f0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 31 29 20  Return true (1) 
5a00: 69 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 74  if they.** are t
5a10: 68 65 20 73 61 6d 65 20 61 6e 64 20 66 61 6c 73  he same and fals
5a20: 65 20 28 30 29 20 69 66 20 74 68 65 79 20 61 72  e (0) if they ar
5a30: 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 0a  e different..**.
5a40: 2a 2a 20 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65  ** Globbing rule
5a50: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a  s:.**.**      '*
5a60: 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20  '       Matches 
5a70: 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20  any sequence of 
5a80: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61  zero or more cha
5a90: 72 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20  racters..**.**  
5aa0: 20 20 20 20 27 3f 27 20 20 20 20 20 20 20 4d 61      '?'       Ma
5ab0: 74 63 68 65 73 20 65 78 61 63 74 6c 79 20 6f 6e  tches exactly on
5ac0: 65 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a  e character..**.
5ad0: 2a 2a 20 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20  **     [...]    
5ae0: 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68    Matches one ch
5af0: 61 72 61 63 74 65 72 20 66 72 6f 6d 20 74 68 65  aracter from the
5b00: 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f   enclosed list o
5b10: 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
5b20: 20 20 20 20 63 68 61 72 61 63 74 65 72 73 2e 0a      characters..
5b30: 2a 2a 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d  **.**     [^...]
5b40: 20 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65       Matches one
5b50: 20 63 68 61 72 61 63 74 65 72 20 6e 6f 74 20 69   character not i
5b60: 6e 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c  n the enclosed l
5b70: 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ist..**.** With 
5b80: 74 68 65 20 5b 2e 2e 2e 5d 20 61 6e 64 20 5b 5e  the [...] and [^
5b90: 2e 2e 2e 5d 20 6d 61 74 63 68 69 6e 67 2c 20 61  ...] matching, a
5ba0: 20 27 5d 27 20 63 68 61 72 61 63 74 65 72 20 63   ']' character c
5bb0: 61 6e 20 62 65 20 69 6e 63 6c 75 64 65 64 0a 2a  an be included.*
5bc0: 2a 20 69 6e 20 74 68 65 20 6c 69 73 74 20 62 79  * in the list by
5bd0: 20 6d 61 6b 69 6e 67 20 69 74 20 74 68 65 20 66   making it the f
5be0: 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 61  irst character a
5bf0: 66 74 65 72 20 27 5b 27 20 6f 72 20 27 5e 27 2e  fter '[' or '^'.
5c00: 20 20 41 0a 2a 2a 20 72 61 6e 67 65 20 6f 66 20    A.** range of 
5c10: 63 68 61 72 61 63 74 65 72 73 20 63 61 6e 20 62  characters can b
5c20: 65 20 73 70 65 63 69 66 69 65 64 20 75 73 69 6e  e specified usin
5c30: 67 20 27 2d 27 2e 20 20 45 78 61 6d 70 6c 65 3a  g '-'.  Example:
5c40: 0a 2a 2a 20 22 5b 61 2d 7a 5d 22 20 6d 61 74 63  .** "[a-z]" matc
5c50: 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 6c  hes any single l
5c60: 6f 77 65 72 2d 63 61 73 65 20 6c 65 74 74 65 72  ower-case letter
5c70: 2e 20 20 54 6f 20 6d 61 74 63 68 20 61 20 27 2d  .  To match a '-
5c80: 27 2c 20 6d 61 6b 65 0a 2a 2a 20 69 74 20 74 68  ', make.** it th
5c90: 65 20 6c 61 73 74 20 63 68 61 72 61 63 74 65 72  e last character
5ca0: 20 69 6e 20 74 68 65 20 6c 69 73 74 2e 0a 2a 2a   in the list..**
5cb0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
5cc0: 20 69 73 20 75 73 75 61 6c 6c 79 20 71 75 69 63   is usually quic
5cd0: 6b 2c 20 62 75 74 20 63 61 6e 20 62 65 20 4e 2a  k, but can be N*
5ce0: 2a 32 20 69 6e 20 74 68 65 20 77 6f 72 73 74 20  *2 in the worst 
5cf0: 63 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 48 69 6e 74  case..**.** Hint
5d00: 73 3a 20 74 6f 20 6d 61 74 63 68 20 27 2a 27 20  s: to match '*' 
5d10: 6f 72 20 27 3f 27 2c 20 70 75 74 20 74 68 65 6d  or '?', put them
5d20: 20 69 6e 20 22 5b 5d 22 2e 20 20 4c 69 6b 65 20   in "[]".  Like 
5d30: 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  this:.**.**     
5d40: 20 20 20 20 61 62 63 5b 2a 5d 78 79 7a 20 20 20      abc[*]xyz   
5d50: 20 20 20 20 20 4d 61 74 63 68 65 73 20 22 61 62       Matches "ab
5d60: 63 2a 78 79 7a 22 20 6f 6e 6c 79 0a 2a 2f 0a 69  c*xyz" only.*/.i
5d70: 6e 74 20 0a 73 71 6c 69 74 65 33 47 6c 6f 62 43  nt .sqlite3GlobC
5d80: 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 75 6e 73  ompare(const uns
5d90: 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 50 61 74  igned char *zPat
5da0: 74 65 72 6e 2c 20 63 6f 6e 73 74 20 75 6e 73 69  tern, const unsi
5db0: 67 6e 65 64 20 63 68 61 72 20 2a 7a 53 74 72 69  gned char *zStri
5dc0: 6e 67 29 7b 0a 20 20 72 65 67 69 73 74 65 72 20  ng){.  register 
5dd0: 69 6e 74 20 63 3b 0a 20 20 69 6e 74 20 69 6e 76  int c;.  int inv
5de0: 65 72 74 3b 0a 20 20 69 6e 74 20 73 65 65 6e 3b  ert;.  int seen;
5df0: 0a 20 20 69 6e 74 20 63 32 3b 0a 0a 20 20 77 68  .  int c2;..  wh
5e00: 69 6c 65 28 20 28 63 20 3d 20 2a 7a 50 61 74 74  ile( (c = *zPatt
5e10: 65 72 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73  ern)!=0 ){.    s
5e20: 77 69 74 63 68 28 20 63 20 29 7b 0a 20 20 20 20  witch( c ){.    
5e30: 20 20 63 61 73 65 20 27 2a 27 3a 0a 20 20 20 20    case '*':.    
5e40: 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d 7a 50      while( (c=zP
5e50: 61 74 74 65 72 6e 5b 31 5d 29 20 3d 3d 20 27 2a  attern[1]) == '*
5e60: 27 20 7c 7c 20 63 20 3d 3d 20 27 3f 27 20 29 7b  ' || c == '?' ){
5e70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
5e80: 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20  =='?' ){.       
5e90: 20 20 20 20 20 69 66 28 20 2a 7a 53 74 72 69 6e       if( *zStrin
5ea0: 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
5eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
5ec0: 69 74 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72  iteNextChar(zStr
5ed0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ing);.          
5ee0: 7d 0a 20 20 20 20 20 20 20 20 20 20 7a 50 61 74  }.          zPat
5ef0: 74 65 72 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20  tern++;.        
5f00: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 3d  }.        if( c=
5f10: 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  =0 ) return 1;. 
5f20: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5b         if( c=='[
5f30: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77  ' ){.          w
5f40: 68 69 6c 65 28 20 2a 7a 53 74 72 69 6e 67 20 26  hile( *zString &
5f50: 26 20 73 71 6c 69 74 65 33 47 6c 6f 62 43 6f 6d  & sqlite3GlobCom
5f60: 70 61 72 65 28 26 7a 50 61 74 74 65 72 6e 5b 31  pare(&zPattern[1
5f70: 5d 2c 7a 53 74 72 69 6e 67 29 3d 3d 30 20 29 7b  ],zString)==0 ){
5f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
5f90: 69 74 65 4e 65 78 74 43 68 61 72 28 7a 53 74 72  iteNextChar(zStr
5fa0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ing);.          
5fb0: 7d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  }.          retu
5fc0: 72 6e 20 2a 7a 53 74 72 69 6e 67 21 3d 30 3b 0a  rn *zString!=0;.
5fd0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
5fe0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
5ff0: 28 63 32 20 3d 20 2a 7a 53 74 72 69 6e 67 29 21  (c2 = *zString)!
6000: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
6010: 20 20 77 68 69 6c 65 28 20 63 32 20 21 3d 20 30    while( c2 != 0
6020: 20 26 26 20 63 32 20 21 3d 20 63 20 29 7b 20 63   && c2 != c ){ c
6030: 32 20 3d 20 2a 2b 2b 7a 53 74 72 69 6e 67 3b 20  2 = *++zString; 
6040: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  }.            if
6050: 28 20 63 32 3d 3d 30 20 29 20 72 65 74 75 72 6e  ( c2==0 ) return
6060: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   0;.            
6070: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 43  if( sqlite3GlobC
6080: 6f 6d 70 61 72 65 28 26 7a 50 61 74 74 65 72 6e  ompare(&zPattern
6090: 5b 31 5d 2c 7a 53 74 72 69 6e 67 29 20 29 20 72  [1],zString) ) r
60a0: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20  eturn 1;.       
60b0: 20 20 20 20 20 73 71 6c 69 74 65 4e 65 78 74 43       sqliteNextC
60c0: 68 61 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20 20  har(zString);.  
60d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
60e0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
60f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
6100: 73 65 20 27 3f 27 3a 20 7b 0a 20 20 20 20 20 20  se '?': {.      
6110: 20 20 69 66 28 20 2a 7a 53 74 72 69 6e 67 3d 3d    if( *zString==
6120: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
6130: 20 20 20 20 20 20 73 71 6c 69 74 65 4e 65 78 74        sqliteNext
6140: 43 68 61 72 28 7a 53 74 72 69 6e 67 29 3b 0a 20  Char(zString);. 
6150: 20 20 20 20 20 20 20 7a 50 61 74 74 65 72 6e 2b         zPattern+
6160: 2b 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  +;.        break
6170: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6180: 63 61 73 65 20 27 5b 27 3a 20 7b 0a 20 20 20 20  case '[': {.    
6190: 20 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63 20      int prior_c 
61a0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 65 65  = 0;.        see
61b0: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  n = 0;.        i
61c0: 6e 76 65 72 74 20 3d 20 30 3b 0a 20 20 20 20 20  nvert = 0;.     
61d0: 20 20 20 63 20 3d 20 73 71 6c 69 74 65 43 68 61     c = sqliteCha
61e0: 72 56 61 6c 28 7a 53 74 72 69 6e 67 29 3b 0a 20  rVal(zString);. 
61f0: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20         if( c==0 
6200: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
6210: 20 20 20 20 63 32 20 3d 20 2a 2b 2b 7a 50 61 74      c2 = *++zPat
6220: 74 65 72 6e 3b 0a 20 20 20 20 20 20 20 20 69 66  tern;.        if
6230: 28 20 63 32 3d 3d 27 5e 27 20 29 7b 20 69 6e 76  ( c2=='^' ){ inv
6240: 65 72 74 20 3d 20 31 3b 20 63 32 20 3d 20 2a 2b  ert = 1; c2 = *+
6250: 2b 7a 50 61 74 74 65 72 6e 3b 20 7d 0a 20 20 20  +zPattern; }.   
6260: 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27 5d 27       if( c2==']'
6270: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
6280: 28 20 63 3d 3d 27 5d 27 20 29 20 73 65 65 6e 20  ( c==']' ) seen 
6290: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 63  = 1;.          c
62a0: 32 20 3d 20 2a 2b 2b 7a 50 61 74 74 65 72 6e 3b  2 = *++zPattern;
62b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
62c0: 20 20 20 77 68 69 6c 65 28 20 28 63 32 20 3d 20     while( (c2 = 
62d0: 73 71 6c 69 74 65 43 68 61 72 56 61 6c 28 7a 50  sqliteCharVal(zP
62e0: 61 74 74 65 72 6e 29 29 21 3d 30 20 26 26 20 63  attern))!=0 && c
62f0: 32 21 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20  2!=']' ){.      
6300: 20 20 20 20 69 66 28 20 63 32 3d 3d 27 2d 27 20      if( c2=='-' 
6310: 26 26 20 7a 50 61 74 74 65 72 6e 5b 31 5d 21 3d  && zPattern[1]!=
6320: 27 5d 27 20 26 26 20 7a 50 61 74 74 65 72 6e 5b  ']' && zPattern[
6330: 31 5d 21 3d 30 20 26 26 20 70 72 69 6f 72 5f 63  1]!=0 && prior_c
6340: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  >0 ){.          
6350: 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20    zPattern++;.  
6360: 20 20 20 20 20 20 20 20 20 20 63 32 20 3d 20 73            c2 = s
6370: 71 6c 69 74 65 43 68 61 72 56 61 6c 28 7a 50 61  qliteCharVal(zPa
6380: 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20 20 20  ttern);.        
6390: 20 20 20 20 69 66 28 20 63 3e 3d 70 72 69 6f 72      if( c>=prior
63a0: 5f 63 20 26 26 20 63 3c 3d 63 32 20 29 20 73 65  _c && c<=c2 ) se
63b0: 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
63c0: 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b      prior_c = 0;
63d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
63e0: 20 69 66 28 20 63 3d 3d 63 32 20 29 7b 0a 20 20   if( c==c2 ){.  
63f0: 20 20 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d            seen =
6400: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
6410: 70 72 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20  prior_c = c2;.  
6420: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
6430: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6f 72             prior
6440: 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20 20 20  _c = c2;.       
6450: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
6460: 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28 7a 50  qliteNextChar(zP
6470: 61 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20 20  attern);.       
6480: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 63   }.        if( c
6490: 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e 20 5e 20  2==0 || (seen ^ 
64a0: 69 6e 76 65 72 74 29 3d 3d 30 20 29 20 72 65 74  invert)==0 ) ret
64b0: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 73  urn 0;.        s
64c0: 71 6c 69 74 65 4e 65 78 74 43 68 61 72 28 7a 53  qliteNextChar(zS
64d0: 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  tring);.        
64e0: 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20 20 20  zPattern++;.    
64f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
6500: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
6510: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
6520: 63 20 21 3d 20 2a 7a 53 74 72 69 6e 67 20 29 20  c != *zString ) 
6530: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
6540: 20 20 7a 50 61 74 74 65 72 6e 2b 2b 3b 0a 20 20    zPattern++;.  
6550: 20 20 20 20 20 20 7a 53 74 72 69 6e 67 2b 2b 3b        zString++;
6560: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
6570: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
6580: 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a 53 74 72  }.  return *zStr
6590: 69 6e 67 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ing==0;.}../*.**
65a0: 20 43 68 61 6e 67 65 20 74 68 65 20 73 71 6c 69   Change the sqli
65b0: 74 65 2e 6d 61 67 69 63 20 66 72 6f 6d 20 53 51  te.magic from SQ
65c0: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
65d0: 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  to SQLITE_MAGIC_
65e0: 42 55 53 59 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  BUSY..** Return 
65f0: 61 6e 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65  an error (non-ze
6600: 72 6f 29 20 69 66 20 74 68 65 20 6d 61 67 69 63  ro) if the magic
6610: 20 77 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f   was not SQLITE_
6620: 4d 41 47 49 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68  MAGIC_OPEN.** wh
6630: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
6640: 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a  is called..**.**
6650: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
6660: 20 61 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65   a attempt to de
6670: 74 65 63 74 20 69 66 20 74 77 6f 20 74 68 72 65  tect if two thre
6680: 61 64 73 20 75 73 65 20 74 68 65 0a 2a 2a 20 73  ads use the.** s
6690: 61 6d 65 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e  ame sqlite* poin
66a0: 74 65 72 20 61 74 20 74 68 65 20 73 61 6d 65 20  ter at the same 
66b0: 74 69 6d 65 2e 20 20 54 68 65 72 65 20 69 73 20  time.  There is 
66c0: 61 20 72 61 63 65 20 0a 2a 2a 20 63 6f 6e 64 69  a race .** condi
66d0: 74 69 6f 6e 20 73 6f 20 69 74 20 69 73 20 70 6f  tion so it is po
66e0: 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20  ssible that the 
66f0: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 64 65 74  error is not det
6700: 65 63 74 65 64 2e 0a 2a 2a 20 42 75 74 20 75 73  ected..** But us
6710: 75 61 6c 6c 79 20 74 68 65 20 70 72 6f 62 6c 65  ually the proble
6720: 6d 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 2e 20  m will be seen. 
6730: 20 54 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c   The result will
6740: 20 62 65 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20   be an.** error 
6750: 77 68 69 63 68 20 63 61 6e 20 62 65 20 75 73 65  which can be use
6760: 64 20 74 6f 20 64 65 62 75 67 20 74 68 65 20 61  d to debug the a
6770: 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20  pplication that 
6780: 69 73 0a 2a 2a 20 75 73 69 6e 67 20 53 51 4c 69  is.** using SQLi
6790: 74 65 20 69 6e 63 6f 72 72 65 63 74 6c 79 2e 0a  te incorrectly..
67a0: 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 30  **.** Ticket #20
67b0: 32 3a 20 20 49 66 20 64 62 2d 3e 6d 61 67 69 63  2:  If db->magic
67c0: 20 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20   is not a valid 
67d0: 6f 70 65 6e 20 76 61 6c 75 65 2c 20 74 61 6b 65  open value, take
67e0: 20 63 61 72 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20   care not.** to 
67f0: 6d 6f 64 69 66 79 20 74 68 65 20 64 62 20 73 74  modify the db st
6800: 72 75 63 74 75 72 65 20 61 74 20 61 6c 6c 2e 20  ructure at all. 
6810: 20 49 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61   It could be tha
6820: 74 20 64 62 20 69 73 20 61 20 73 74 61 6c 65 0a  t db is a stale.
6830: 2a 2a 20 70 6f 69 6e 74 65 72 2e 20 20 49 6e 20  ** pointer.  In 
6840: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 20  other words, it 
6850: 63 6f 75 6c 64 20 62 65 20 74 68 61 74 20 74 68  could be that th
6860: 65 72 65 20 68 61 73 20 62 65 65 6e 20 61 20 70  ere has been a p
6870: 72 69 6f 72 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20  rior.** call to 
6880: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
6890: 29 20 61 6e 64 20 64 62 20 68 61 73 20 62 65 65  ) and db has bee
68a0: 6e 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20  n deallocated.  
68b0: 41 6e 64 20 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74  And we do.** not
68c0: 20 77 61 6e 74 20 74 6f 20 77 72 69 74 65 20 69   want to write i
68d0: 6e 74 6f 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  nto deallocated 
68e0: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73  memory..*/.int s
68f0: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 73  qlite3SafetyOn(s
6900: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 66  qlite *db){.  if
6910: 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c  ( db->magic==SQL
6920: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29  ITE_MAGIC_OPEN )
6930: 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
6940: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  = SQLITE_MAGIC_B
6950: 55 53 59 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  USY;.    return 
6960: 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  0;.  }else if( d
6970: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
6980: 5f 4d 41 47 49 43 5f 42 55 53 59 20 7c 7c 20 64  _MAGIC_BUSY || d
6990: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
69a0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 29 7b 0a  _MAGIC_ERROR ){.
69b0: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
69c0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
69d0: 4f 52 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  OR;.    db->flag
69e0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
69f0: 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74  rrupt;.  }.  ret
6a00: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
6a10: 43 68 61 6e 67 65 20 74 68 65 20 6d 61 67 69 63  Change the magic
6a20: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47   from SQLITE_MAG
6a30: 49 43 5f 42 55 53 59 20 74 6f 20 53 51 4c 49 54  IC_BUSY to SQLIT
6a40: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a  E_MAGIC_OPEN..**
6a50: 20 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   Return an error
6a60: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
6a70: 68 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74  he magic was not
6a80: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
6a90: 53 59 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20  SY.** when this 
6aa0: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
6ab0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
6ac0: 33 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69 74  3SafetyOff(sqlit
6ad0: 65 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  e *db){.  if( db
6ae0: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
6af0: 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a 20 20  MAGIC_BUSY ){.  
6b00: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
6b10: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b  LITE_MAGIC_OPEN;
6b20: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
6b30: 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d   }else if( db->m
6b40: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
6b50: 49 43 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d  IC_OPEN || db->m
6b60: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
6b70: 49 43 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20  IC_ERROR ){.    
6b80: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
6b90: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a  TE_MAGIC_ERROR;.
6ba0: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
6bb0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70   SQLITE_Interrup
6bc0: 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  t;.  }.  return 
6bd0: 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  1;.}../*.** Chec
6be0: 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77  k to make sure w
6bf0: 65 20 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e  e are not curren
6c00: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 61 6e  tly executing an
6c10: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e   sqlite3_exec().
6c20: 0a 2a 2a 20 49 66 20 77 65 20 61 72 65 20 63 75  .** If we are cu
6c30: 72 72 65 6e 74 6c 79 20 69 6e 20 61 6e 20 73 71  rrently in an sq
6c40: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 72 65  lite3_exec(), re
6c50: 74 75 72 6e 20 74 72 75 65 20 61 6e 64 20 73 65  turn true and se
6c60: 74 0a 2a 2a 20 73 71 6c 69 74 65 2e 6d 61 67 69  t.** sqlite.magi
6c70: 63 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49  c to SQLITE_MAGI
6c80: 43 5f 45 52 52 4f 52 2e 20 20 54 68 69 73 20 77  C_ERROR.  This w
6c90: 69 6c 6c 20 63 61 75 73 65 20 61 20 63 6f 6d 70  ill cause a comp
6ca0: 6c 65 74 65 0a 2a 2a 20 73 68 75 74 64 6f 77 6e  lete.** shutdown
6cb0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
6cc0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
6cd0: 74 69 6e 65 20 69 73 20 75 73 65 64 20 74 6f 20  tine is used to 
6ce0: 74 72 79 20 74 6f 20 64 65 74 65 63 74 20 77 68  try to detect wh
6cf0: 65 6e 20 41 50 49 20 72 6f 75 74 69 6e 65 73 20  en API routines 
6d00: 61 72 65 20 63 61 6c 6c 65 64 0a 2a 2a 20 61 74  are called.** at
6d10: 20 74 68 65 20 77 72 6f 6e 67 20 74 69 6d 65 20   the wrong time 
6d20: 6f 72 20 69 6e 20 74 68 65 20 77 72 6f 6e 67 20  or in the wrong 
6d30: 73 65 71 75 65 6e 63 65 2e 0a 2a 2f 0a 69 6e 74  sequence..*/.int
6d40: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
6d50: 65 63 6b 28 73 71 6c 69 74 65 20 2a 64 62 29 7b  eck(sqlite *db){
6d60: 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65  .  if( db->pVdbe
6d70: 21 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  !=0 ){.    db->m
6d80: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
6d90: 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72  GIC_ERROR;.    r
6da0: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
6db0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
6dc0: 2a 20 54 68 65 20 76 61 72 69 61 62 6c 65 2d 6c  * The variable-l
6dd0: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 65 6e  ength integer en
6de0: 63 6f 64 69 6e 67 20 69 73 20 61 73 20 66 6f 6c  coding is as fol
6df0: 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a  lows:.**.** KEY:
6e00: 0a 2a 2a 20 20 20 20 20 20 20 20 20 41 20 3d 20  .**         A = 
6e10: 30 78 78 78 78 78 78 78 20 20 20 20 37 20 62 69  0xxxxxxx    7 bi
6e20: 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f  ts of data and o
6e30: 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20  ne flag bit.**  
6e40: 20 20 20 20 20 20 20 42 20 3d 20 31 78 78 78 78         B = 1xxxx
6e50: 78 78 78 20 20 20 20 37 20 62 69 74 73 20 6f 66  xxx    7 bits of
6e60: 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c   data and one fl
6e70: 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20  ag bit.**       
6e80: 20 20 43 20 3d 20 78 78 78 78 78 78 78 78 20 20    C = xxxxxxxx  
6e90: 20 20 38 20 62 69 74 73 20 6f 66 20 64 61 74 61    8 bits of data
6ea0: 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69 74 73 20 2d  .**.**  7 bits -
6eb0: 20 41 0a 2a 2a 20 31 34 20 62 69 74 73 20 2d 20   A.** 14 bits - 
6ec0: 42 41 0a 2a 2a 20 32 31 20 62 69 74 73 20 2d 20  BA.** 21 bits - 
6ed0: 42 42 41 0a 2a 2a 20 32 38 20 62 69 74 73 20 2d  BBA.** 28 bits -
6ee0: 20 42 42 42 41 0a 2a 2a 20 33 35 20 62 69 74 73   BBBA.** 35 bits
6ef0: 20 2d 20 42 42 42 42 41 0a 2a 2a 20 34 32 20 62   - BBBBA.** 42 b
6f00: 69 74 73 20 2d 20 42 42 42 42 42 41 0a 2a 2a 20  its - BBBBBA.** 
6f10: 34 39 20 62 69 74 73 20 2d 20 42 42 42 42 42 42  49 bits - BBBBBB
6f20: 41 0a 2a 2a 20 35 36 20 62 69 74 73 20 2d 20 42  A.** 56 bits - B
6f30: 42 42 42 42 42 42 41 0a 2a 2a 20 36 34 20 62 69  BBBBBBA.** 64 bi
6f40: 74 73 20 2d 20 42 42 42 42 42 42 42 42 43 0a 2a  ts - BBBBBBBBC.*
6f50: 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61  /../*.** Write a
6f60: 20 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65   64-bit variable
6f70: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20  -length integer 
6f80: 74 6f 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69  to memory starti
6f90: 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54  ng at p[0]..** T
6fa0: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 64 61 74  he length of dat
6fb0: 61 20 77 72 69 74 65 20 77 69 6c 6c 20 62 65 20  a write will be 
6fc0: 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
6fd0: 62 79 74 65 73 2e 20 20 54 68 65 20 6e 75 6d 62  bytes.  The numb
6fe0: 65 72 0a 2a 2a 20 6f 66 20 62 79 74 65 73 20 77  er.** of bytes w
6ff0: 72 69 74 74 65 6e 20 69 73 20 72 65 74 75 72 6e  ritten is return
7000: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72 69  ed..**.** A vari
7010: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
7020: 67 65 72 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ger consists of 
7030: 74 68 65 20 6c 6f 77 65 72 20 37 20 62 69 74 73  the lower 7 bits
7040: 20 6f 66 20 65 61 63 68 20 62 79 74 65 0a 2a 2a   of each byte.**
7050: 20 66 6f 72 20 61 6c 6c 20 62 79 74 65 73 20 74   for all bytes t
7060: 68 61 74 20 68 61 76 65 20 74 68 65 20 38 74 68  hat have the 8th
7070: 20 62 69 74 20 73 65 74 20 61 6e 64 20 6f 6e 65   bit set and one
7080: 20 62 79 74 65 20 77 69 74 68 20 74 68 65 20 38   byte with the 8
7090: 74 68 0a 2a 2a 20 62 69 74 20 63 6c 65 61 72 2e  th.** bit clear.
70a0: 20 20 45 78 63 65 70 74 2c 20 69 66 20 77 65 20    Except, if we 
70b0: 67 65 74 20 74 6f 20 74 68 65 20 39 74 68 20 62  get to the 9th b
70c0: 79 74 65 2c 20 69 74 20 73 74 6f 72 65 73 20 74  yte, it stores t
70d0: 68 65 20 66 75 6c 6c 0a 2a 2a 20 38 20 62 69 74  he full.** 8 bit
70e0: 73 20 61 6e 64 20 69 73 20 74 68 65 20 6c 61 73  s and is the las
70f0: 74 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73  t byte..*/.int s
7100: 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
7110: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70  unsigned char *p
7120: 2c 20 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20  , u64 v){.  int 
7130: 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20 62 75  i, j, n;.  u8 bu
7140: 66 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76 20 26  f[10];.  if( v &
7150: 20 30 78 66 66 30 30 30 30 30 30 30 30 30 30 30   0xff00000000000
7160: 30 30 30 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20  000 ){.    p[8] 
7170: 3d 20 76 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38  = v;.    v >>= 8
7180: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b 20 69  ;.    for(i=7; i
7190: 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20  >=0; i--){.     
71a0: 20 70 5b 69 5d 20 3d 20 28 76 20 26 20 30 78 37   p[i] = (v & 0x7
71b0: 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 20  f) | 0x80;.     
71c0: 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a   v >>= 7;.    }.
71d0: 20 20 20 20 72 65 74 75 72 6e 20 39 3b 0a 20 20      return 9;.  
71e0: 7d 20 20 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20  }    .  n = 0;. 
71f0: 20 64 6f 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b   do{.    buf[n++
7200: 5d 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c  ] = (v & 0x7f) |
7210: 20 30 78 38 30 3b 0a 20 20 20 20 76 20 3e 3e 3d   0x80;.    v >>=
7220: 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21   7;.  }while( v!
7230: 3d 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26  =0 );.  buf[0] &
7240: 3d 20 30 78 37 66 3b 0a 20 20 61 73 73 65 72 74  = 0x7f;.  assert
7250: 28 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28  ( n<=9 );.  for(
7260: 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30  i=0, j=n-1; j>=0
7270: 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20  ; j--, i++){.   
7280: 20 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a   p[i] = buf[j];.
7290: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a    }.  return n;.
72a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20  }../*.** Read a 
72b0: 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d  64-bit variable-
72c0: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66  length integer f
72d0: 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74  rom memory start
72e0: 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20  ing at p[0]..** 
72f0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
7300: 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e  r of bytes read.
7310: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73    The value is s
7320: 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a  tored in *v..*/.
7330: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
7340: 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
7350: 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34  ned char *p, u64
7360: 20 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20   *v){.  u32 x;. 
7370: 20 75 36 34 20 78 36 34 3b 0a 20 20 69 6e 74 20   u64 x64;.  int 
7380: 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68  n;.  unsigned ch
7390: 61 72 20 63 3b 0a 20 20 69 66 28 20 28 28 63 20  ar c;.  if( ((c 
73a0: 3d 20 70 5b 30 5d 29 20 26 20 30 78 38 30 29 3d  = p[0]) & 0x80)=
73b0: 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63  =0 ){.    *v = c
73c0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
73d0: 20 20 7d 0a 20 20 78 20 3d 20 63 20 26 20 30 78    }.  x = c & 0x
73e0: 37 66 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20  7f;.  if( ((c = 
73f0: 70 5b 31 5d 29 20 26 20 30 78 38 30 29 3d 3d 30  p[1]) & 0x80)==0
7400: 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c   ){.    *v = (x<
7410: 3c 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74  <7) | c;.    ret
7420: 75 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d  urn 2;.  }.  x =
7430: 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37   (x<<7) | (c&0x7
7440: 66 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20  f);.  if( ((c = 
7450: 70 5b 32 5d 29 20 26 20 30 78 38 30 29 3d 3d 30  p[2]) & 0x80)==0
7460: 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c   ){.    *v = (x<
7470: 3c 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74  <7) | c;.    ret
7480: 75 72 6e 20 33 3b 0a 20 20 7d 0a 20 20 78 20 3d  urn 3;.  }.  x =
7490: 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37   (x<<7) | (c&0x7
74a0: 66 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20  f);.  if( ((c = 
74b0: 70 5b 33 5d 29 20 26 20 30 78 38 30 29 3d 3d 30  p[3]) & 0x80)==0
74c0: 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c   ){.    *v = (x<
74d0: 3c 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74  <7) | c;.    ret
74e0: 75 72 6e 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34  urn 4;.  }.  x64
74f0: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30   = (x<<7) | (c&0
7500: 78 37 66 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20  x7f);.  n = 4;. 
7510: 20 64 6f 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e   do{.    c = p[n
7520: 2b 2b 5d 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d  ++];.    if( n==
7530: 39 20 29 7b 0a 20 20 20 20 20 20 78 36 34 20 3d  9 ){.      x64 =
7540: 20 28 78 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20   (x64<<8) | c;. 
7550: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
7560: 7d 0a 20 20 20 20 78 36 34 20 3d 20 28 78 36 34  }.    x64 = (x64
7570: 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b  <<7) | (c&0x7f);
7580: 0a 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20  .  }while( (c & 
7590: 30 78 38 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76  0x80)!=0 );.  *v
75a0: 20 3d 20 78 36 34 3b 0a 20 20 72 65 74 75 72 6e   = x64;.  return
75b0: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61   n;.}../*.** Rea
75c0: 64 20 61 20 33 32 2d 62 69 74 20 76 61 72 69 61  d a 32-bit varia
75d0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
75e0: 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73  er from memory s
75f0: 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e  tarting at p[0].
7600: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
7610: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
7620: 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ead.  The value 
7630: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e  is stored in *v.
7640: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
7650: 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
7660: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
7670: 70 2c 20 75 33 32 20 2a 76 29 7b 0a 20 20 75 33  p, u32 *v){.  u3
7680: 32 20 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  2 x;.  int n;.  
7690: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 3b  unsigned char c;
76a0: 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 30  .  if( ((c = p[0
76b0: 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b  ]) & 0x80)==0 ){
76c0: 0a 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20  .    *v = c;.   
76d0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
76e0: 20 78 20 3d 20 63 20 26 20 30 78 37 66 3b 0a 20   x = c & 0x7f;. 
76f0: 20 69 66 28 20 28 28 63 20 3d 20 70 5b 31 5d 29   if( ((c = p[1])
7700: 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20   & 0x80)==0 ){. 
7710: 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c     *v = (x<<7) |
7720: 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32   c;.    return 2
7730: 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c  ;.  }.  x = (x<<
7740: 37 29 20 7c 20 28 63 20 26 20 30 78 37 66 29 3b  7) | (c & 0x7f);
7750: 0a 20 20 6e 20 3d 20 32 3b 0a 20 20 64 6f 7b 0a  .  n = 2;.  do{.
7760: 20 20 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c      x = (x<<7) |
7770: 20 28 28 63 20 3d 20 70 5b 6e 2b 2b 5d 29 26 30   ((c = p[n++])&0
7780: 78 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20  x7f);.  }while( 
7790: 28 63 20 26 20 30 78 38 30 29 21 3d 30 20 26 26  (c & 0x80)!=0 &&
77a0: 20 6e 3c 39 20 29 3b 0a 20 20 2a 76 20 3d 20 78   n<9 );.  *v = x
77b0: 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a  ;.  return n;.}.
77c0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
77d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
77e0: 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 6e  s that will be n
77f0: 65 65 64 65 64 20 74 6f 20 73 74 6f 72 65 20 74  eeded to store t
7800: 68 65 20 67 69 76 65 6e 0a 2a 2a 20 36 34 2d 62  he given.** 64-b
7810: 69 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69  it integer..*/.i
7820: 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
7830: 4c 65 6e 28 75 36 34 20 76 29 7b 0a 20 20 69 6e  Len(u64 v){.  in
7840: 74 20 69 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20  t i = 0;.  do{. 
7850: 20 20 20 69 2b 2b 3b 0a 20 20 20 20 76 20 3e 3e     i++;.    v >>
7860: 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76  = 7;.  }while( v
7870: 21 3d 30 20 26 26 20 69 3c 39 20 29 3b 0a 20 20  !=0 && i<9 );.  
7880: 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 0a 2f 2a 0a  return i;.}../*.
7890: 2a 2a 20 54 72 61 6e 73 6c 61 74 65 20 61 20 73  ** Translate a s
78a0: 69 6e 67 6c 65 20 62 79 74 65 20 6f 66 20 48 65  ingle byte of He
78b0: 78 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  x into an intege
78c0: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
78d0: 20 68 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29   hexToInt(int h)
78e0: 7b 0a 20 20 69 66 28 20 68 3e 3d 27 30 27 20 26  {.  if( h>='0' &
78f0: 26 20 68 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20  & h<='9' ){.    
7900: 72 65 74 75 72 6e 20 68 20 2d 20 27 30 27 3b 0a  return h - '0';.
7910: 20 20 7d 65 6c 73 65 20 69 66 28 20 68 3e 3d 27    }else if( h>='
7920: 61 27 20 26 26 20 68 3c 3d 27 66 27 20 29 7b 0a  a' && h<='f' ){.
7930: 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27      return h - '
7940: 61 27 20 2b 20 31 30 3b 0a 20 20 7d 65 6c 73 65  a' + 10;.  }else
7950: 20 69 66 28 20 68 3e 3d 27 41 27 20 26 26 20 68   if( h>='A' && h
7960: 3c 3d 27 46 27 20 29 7b 0a 20 20 20 20 72 65 74  <='F' ){.    ret
7970: 75 72 6e 20 68 20 2d 20 27 41 27 20 2b 20 31 30  urn h - 'A' + 10
7980: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
7990: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 0a  eturn 0;.  }.}..
79a0: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20  /*.** Convert a 
79b0: 42 4c 4f 42 20 6c 69 74 65 72 61 6c 20 6f 66 20  BLOB literal of 
79c0: 74 68 65 20 66 6f 72 6d 20 22 78 27 68 68 68 68  the form "x'hhhh
79d0: 68 68 27 22 20 69 6e 74 6f 20 69 74 73 20 62 69  hh'" into its bi
79e0: 6e 61 72 79 0a 2a 2a 20 76 61 6c 75 65 2e 20 20  nary.** value.  
79f0: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
7a00: 20 74 6f 20 69 74 73 20 62 69 6e 61 72 79 20 76   to its binary v
7a10: 61 6c 75 65 2e 20 20 53 70 61 63 65 20 74 6f 20  alue.  Space to 
7a20: 68 6f 6c 64 20 74 68 65 0a 2a 2a 20 62 69 6e 61  hold the.** bina
7a30: 72 79 20 76 61 6c 75 65 20 68 61 73 20 62 65 65  ry value has bee
7a40: 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  n obtained from 
7a50: 6d 61 6c 6c 6f 63 20 61 6e 64 20 6d 75 73 74 20  malloc and must 
7a60: 62 65 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 74  be freed by.** t
7a70: 68 65 20 63 61 6c 6c 69 6e 67 20 72 6f 75 74 69  he calling routi
7a80: 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ne..*/.void *sql
7a90: 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 63 6f  ite3HexToBlob(co
7aa0: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
7ab0: 63 68 61 72 20 2a 7a 42 6c 6f 62 3b 0a 20 20 69  char *zBlob;.  i
7ac0: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 20 3d 20  nt i;.  int n = 
7ad0: 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69 66 28  strlen(z);.  if(
7ae0: 20 6e 25 32 20 29 20 72 65 74 75 72 6e 20 30 3b   n%2 ) return 0;
7af0: 0a 0a 20 20 7a 42 6c 6f 62 20 3d 20 28 63 68 61  ..  zBlob = (cha
7b00: 72 20 2a 29 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  r *)sqliteMalloc
7b10: 28 6e 2f 32 29 3b 0a 20 20 66 6f 72 28 69 3d 30  (n/2);.  for(i=0
7b20: 3b 20 69 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20 20  ; i<n; i+=2){.  
7b30: 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 28    zBlob[i/2] = (
7b40: 68 65 78 54 6f 49 6e 74 28 7a 5b 69 5d 29 3c 3c  hexToInt(z[i])<<
7b50: 34 29 20 7c 20 68 65 78 54 6f 49 6e 74 28 7a 5b  4) | hexToInt(z[
7b60: 69 2b 31 5d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  i+1]);.  }.  ret
7b70: 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a           urn zBlob;.}.