/ Hex Artifact Content
Login

Artifact 55caaffbb2716f9928ab452d20f3e9cbbeab872d:


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: 34 36 20 32 30 30 35 2f 30 39 2f 31 37 20 31 38  46 2005/09/17 18
0230: 3a 33 34 3a 31 31 20 64 72 68 20 45 78 70 20 24  :34:11 drh Exp $
0240: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0250: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0260: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0270: 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
0280: 3e 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 45  >..#if SQLITE_ME
0290: 4d 44 45 42 55 47 3e 32 20 26 26 20 64 65 66 69  MDEBUG>2 && defi
02a0: 6e 65 64 28 5f 5f 47 4c 49 42 43 5f 5f 29 0a 23  ned(__GLIBC__).#
02b0: 69 6e 63 6c 75 64 65 20 3c 65 78 65 63 69 6e 66  include <execinf
02c0: 6f 2e 68 3e 0a 76 6f 69 64 20 70 72 69 6e 74 5f  o.h>.void print_
02d0: 73 74 61 63 6b 5f 74 72 61 63 65 28 29 7b 0a 20  stack_trace(){. 
02e0: 20 76 6f 69 64 20 2a 62 74 5b 33 30 5d 3b 0a 20   void *bt[30];. 
02f0: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 20   int i;.  int n 
0300: 3d 20 62 61 63 6b 74 72 61 63 65 28 62 74 2c 20  = backtrace(bt, 
0310: 33 30 29 3b 0a 0a 20 20 66 70 72 69 6e 74 66 28  30);..  fprintf(
0320: 73 74 64 65 72 72 2c 20 22 53 54 41 43 4b 3a 20  stderr, "STACK: 
0330: 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ");.  for(i=0; i
0340: 3c 6e 3b 69 2b 2b 29 7b 0a 20 20 20 20 66 70 72  <n;i++){.    fpr
0350: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 70  intf(stderr, "%p
0360: 20 22 2c 20 62 74 5b 69 5d 29 3b 0a 20 20 7d 0a   ", bt[i]);.  }.
0370: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0380: 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6c 73 65  , "\n");.}.#else
0390: 0a 23 64 65 66 69 6e 65 20 70 72 69 6e 74 5f 73  .#define print_s
03a0: 74 61 63 6b 5f 74 72 61 63 65 28 29 0a 23 65 6e  tack_trace().#en
03b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6d 61  dif../*.** If ma
03c0: 6c 6c 6f 63 28 29 20 65 76 65 72 20 66 61 69 6c  lloc() ever fail
03d0: 73 2c 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  s, this global v
03e0: 61 72 69 61 62 6c 65 20 67 65 74 73 20 73 65 74  ariable gets set
03f0: 20 74 6f 20 31 2e 0a 2a 2a 20 54 68 69 73 20 63   to 1..** This c
0400: 61 75 73 65 73 20 74 68 65 20 6c 69 62 72 61 72  auses the librar
0410: 79 20 74 6f 20 61 62 6f 72 74 20 61 6e 64 20 6e  y to abort and n
0420: 65 76 65 72 20 61 67 61 69 6e 20 66 75 6e 63 74  ever again funct
0430: 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ion..*/.int sqli
0440: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
0450: 64 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66  d = 0;../*.** If
0460: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
0470: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
0480: 6e 20 75 73 65 20 76 65 72 73 69 6f 6e 73 20 6f  n use versions o
0490: 66 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 0a 2a  f malloc() and.*
04a0: 2a 20 66 72 65 65 28 29 20 74 68 61 74 20 74 72  * free() that tr
04b0: 61 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61 67 65  ack memory usage
04c0: 20 61 6e 64 20 63 68 65 63 6b 20 66 6f 72 20 62   and check for b
04d0: 75 66 66 65 72 20 6f 76 65 72 72 75 6e 73 2e 0a  uffer overruns..
04e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
04f0: 5f 4d 45 4d 44 45 42 55 47 0a 0a 2f 2a 0a 2a 2a  _MEMDEBUG../*.**
0500: 20 46 6f 72 20 6b 65 65 70 69 6e 67 20 74 72 61   For keeping tra
0510: 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  ck of the number
0520: 20 6f 66 20 6d 61 6c 6c 6f 63 73 20 61 6e 64 20   of mallocs and 
0530: 66 72 65 65 73 2e 20 20 20 54 68 69 73 0a 2a 2a  frees.   This.**
0540: 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 65 63   is used to chec
0550: 6b 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6c 65 61  k for memory lea
0560: 6b 73 2e 20 20 54 68 65 20 69 4d 61 6c 6c 6f 63  ks.  The iMalloc
0570: 46 61 69 6c 20 61 6e 64 20 69 4d 61 6c 6c 6f 63  Fail and iMalloc
0580: 52 65 73 65 74 0a 2a 2a 20 76 61 6c 75 65 73 20  Reset.** values 
0590: 61 72 65 20 75 73 65 64 20 74 6f 20 73 69 6d 75  are used to simu
05a0: 6c 61 74 65 20 6d 61 6c 6c 6f 63 28 29 20 66 61  late malloc() fa
05b0: 69 6c 75 72 65 73 20 64 75 72 69 6e 67 20 74 65  ilures during te
05c0: 73 74 69 6e 67 20 69 6e 20 0a 2a 2a 20 6f 72 64  sting in .** ord
05d0: 65 72 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  er to verify tha
05e0: 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f  t the library co
05f0: 72 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 73 20  rrectly handles 
0600: 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79  an out-of-memory
0610: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 2a  .** condition..*
0620: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e 4d  /.int sqlite3_nM
0630: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  alloc;         /
0640: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69  * Number of sqli
0650: 74 65 4d 61 6c 6c 6f 63 28 29 20 63 61 6c 6c 73  teMalloc() calls
0660: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
0670: 6e 46 72 65 65 3b 20 20 20 20 20 20 20 20 20 20  nFree;          
0680: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71   /* Number of sq
0690: 6c 69 74 65 46 72 65 65 28 29 20 63 61 6c 6c 73  liteFree() calls
06a0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
06b0: 6d 65 6d 55 73 65 64 3b 20 20 20 20 20 20 20 20  memUsed;        
06c0: 20 2f 2a 20 54 6f 74 61 6c 20 6d 65 6d 6f 72 79   /* Total memory
06d0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
06e0: 61 6c 6c 6f 63 20 2a 2f 0a 69 6e 74 20 73 71 6c  alloc */.int sql
06f0: 69 74 65 33 5f 6d 65 6d 4d 61 78 3b 20 20 20 20  ite3_memMax;    
0700: 20 20 20 20 20 20 2f 2a 20 4d 65 6d 20 75 73 61        /* Mem usa
0710: 67 65 20 68 69 67 68 2d 77 61 74 65 72 20 6d 61  ge high-water ma
0720: 72 6b 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  rk */.int sqlite
0730: 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3b 20 20  3_iMallocFail;  
0740: 20 20 20 2f 2a 20 46 61 69 6c 20 73 71 6c 69 74     /* Fail sqlit
0750: 65 4d 61 6c 6c 6f 63 28 29 20 61 66 74 65 72 20  eMalloc() after 
0760: 74 68 69 73 20 6d 61 6e 79 20 63 61 6c 6c 73 20  this many calls 
0770: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  */.int sqlite3_i
0780: 4d 61 6c 6c 6f 63 52 65 73 65 74 20 3d 20 2d 31  MallocReset = -1
0790: 3b 20 2f 2a 20 57 68 65 6e 20 69 4d 61 6c 6c 6f  ; /* When iMallo
07a0: 63 46 61 69 6c 20 72 65 61 63 68 65 73 20 30 2c  cFail reaches 0,
07b0: 20 73 65 74 20 74 6f 20 74 68 69 73 20 2a 2f 0a   set to this */.
07c0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  #if SQLITE_MEMDE
07d0: 42 55 47 3e 31 0a 73 74 61 74 69 63 20 69 6e 74  BUG>1.static int
07e0: 20 6d 65 6d 63 6e 74 20 3d 20 30 3b 0a 23 65 6e   memcnt = 0;.#en
07f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65  dif../*.** Numbe
0800: 72 20 6f 66 20 33 32 2d 62 69 74 20 67 75 61 72  r of 32-bit guar
0810: 64 20 77 6f 72 64 73 2e 20 20 54 68 69 73 20 73  d words.  This s
0820: 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62  hould probably b
0830: 65 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a  e a multiple of.
0840: 2a 2a 20 32 20 73 69 6e 63 65 20 6f 6e 20 36 34  ** 2 since on 64
0850: 2d 62 69 74 20 6d 61 63 68 69 6e 65 73 20 77 65  -bit machines we
0860: 20 77 61 6e 74 20 74 68 65 20 76 61 6c 75 65 20   want the value 
0870: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
0880: 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 74 6f  teMalloc().** to
0890: 20 62 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e   be 8-byte align
08a0: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ed..*/.#define N
08b0: 5f 47 55 41 52 44 20 32 0a 0a 2f 2a 0a 2a 2a 20  _GUARD 2../*.** 
08c0: 43 68 65 63 6b 20 66 6f 72 20 61 20 73 69 6d 75  Check for a simu
08d0: 6c 61 74 65 64 20 6d 65 6d 6f 72 79 20 61 6c 6c  lated memory all
08e0: 6f 63 61 74 69 6f 6e 20 66 61 69 6c 75 72 65 2e  ocation failure.
08f0: 20 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66    Return true if
0900: 0a 2a 2a 20 74 68 65 20 66 61 69 6c 75 72 65 20  .** the failure 
0910: 73 68 6f 75 6c 64 20 62 65 20 73 69 6d 75 6c 61  should be simula
0920: 74 65 64 2e 20 20 52 65 74 75 72 6e 20 66 61 6c  ted.  Return fal
0930: 73 65 20 74 6f 20 70 72 6f 63 65 65 64 20 61 73  se to proceed as
0940: 20 6e 6f 72 6d 61 6c 2e 0a 2a 2f 0a 73 74 61 74   normal..*/.stat
0950: 69 63 20 69 6e 74 20 73 69 6d 75 6c 61 74 65 64  ic int simulated
0960: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 69 6e  MallocFailure(in
0970: 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65  t n, char *zFile
0980: 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69  , int line){.  i
0990: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
09a0: 6f 63 46 61 69 6c 3e 3d 30 20 29 7b 0a 20 20 20  ocFail>=0 ){.   
09b0: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
09c0: 46 61 69 6c 2d 2d 3b 0a 20 20 20 20 69 66 28 20  Fail--;.    if( 
09d0: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
09e0: 61 69 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ail==0 ){.      
09f0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
0a00: 61 69 6c 65 64 2b 2b 3b 0a 23 69 66 20 53 51 4c  ailed++;.#if SQL
0a10: 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20  ITE_MEMDEBUG>1. 
0a20: 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
0a30: 65 72 72 2c 22 2a 2a 2a 2a 20 66 61 69 6c 65 64  err,"**** failed
0a40: 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 25 64 20   to allocate %d 
0a50: 62 79 74 65 73 20 61 74 20 25 73 3a 25 64 5c 6e  bytes at %s:%d\n
0a60: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
0a70: 20 6e 2c 20 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b   n, zFile,line);
0a80: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 73 71  .#endif.      sq
0a90: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
0aa0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  l = sqlite3_iMal
0ab0: 6c 6f 63 52 65 73 65 74 3b 0a 20 20 20 20 20 20  locReset;.      
0ac0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
0ad0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
0ae0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
0af0: 65 20 6e 65 77 20 6d 65 6d 6f 72 79 20 61 6e 64  e new memory and
0b00: 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2e   set it to zero.
0b10: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66    Return NULL if
0b20: 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20 69 73  .** no memory is
0b30: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 76   available..*/.v
0b40: 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
0b50: 6f 63 5f 28 69 6e 74 20 6e 2c 20 69 6e 74 20 62  oc_(int n, int b
0b60: 5a 65 72 6f 2c 20 63 68 61 72 20 2a 7a 46 69 6c  Zero, char *zFil
0b70: 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20  e, int line){.  
0b80: 76 6f 69 64 20 2a 70 3b 0a 20 20 69 6e 74 20 2a  void *p;.  int *
0b90: 70 69 3b 0a 20 20 69 6e 74 20 69 2c 20 6b 3b 0a  pi;.  int i, k;.
0ba0: 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20    if( n==0 ){.  
0bb0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
0bc0: 20 20 69 66 28 20 73 69 6d 75 6c 61 74 65 64 4d    if( simulatedM
0bd0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 6e 2c 20  allocFailure(n, 
0be0: 7a 46 69 6c 65 2c 20 6c 69 6e 65 29 20 29 7b 0a  zFile, line) ){.
0bf0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
0c00: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55  }.  sqlite3_memU
0c10: 73 65 64 20 2b 3d 20 6e 3b 0a 20 20 69 66 28 20  sed += n;.  if( 
0c20: 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 3c 73  sqlite3_memMax<s
0c30: 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64 20 29  qlite3_memUsed )
0c40: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 20   sqlite3_memMax 
0c50: 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65  = sqlite3_memUse
0c60: 64 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65  d;.  k = (n+size
0c70: 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f  of(int)-1)/sizeo
0c80: 66 28 69 6e 74 29 3b 0a 20 20 70 69 20 3d 20 6d  f(int);.  pi = m
0c90: 61 6c 6c 6f 63 28 20 28 4e 5f 47 55 41 52 44 2a  alloc( (N_GUARD*
0ca0: 32 2b 31 2b 6b 29 2a 73 69 7a 65 6f 66 28 69 6e  2+1+k)*sizeof(in
0cb0: 74 29 29 3b 0a 20 20 69 66 28 20 70 69 3d 3d 30  t));.  if( pi==0
0cc0: 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20   ){.    if( n>0 
0cd0: 29 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ) sqlite3_malloc
0ce0: 5f 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 20 20 72  _failed++;.    r
0cf0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
0d00: 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b  qlite3_nMalloc++
0d10: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
0d20: 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b  _GUARD; i++) pi[
0d30: 69 5d 20 3d 20 30 78 64 65 61 64 31 31 32 32 3b  i] = 0xdead1122;
0d40: 0a 20 20 70 69 5b 4e 5f 47 55 41 52 44 5d 20 3d  .  pi[N_GUARD] =
0d50: 20 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   n;.  for(i=0; i
0d60: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 20 70  <N_GUARD; i++) p
0d70: 69 5b 6b 2b 31 2b 4e 5f 47 55 41 52 44 2b 69 5d  i[k+1+N_GUARD+i]
0d80: 20 3d 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20   = 0xdead3344;. 
0d90: 20 70 20 3d 20 26 70 69 5b 4e 5f 47 55 41 52 44   p = &pi[N_GUARD
0da0: 2b 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2c  +1];.  memset(p,
0db0: 20 62 5a 65 72 6f 3d 3d 30 2c 20 6e 29 3b 0a 23   bZero==0, n);.#
0dc0: 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  if SQLITE_MEMDEB
0dd0: 55 47 3e 31 0a 20 20 70 72 69 6e 74 5f 73 74 61  UG>1.  print_sta
0de0: 63 6b 5f 74 72 61 63 65 28 29 3b 0a 20 20 66 70  ck_trace();.  fp
0df0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 30  rintf(stderr,"%0
0e00: 36 64 20 6d 61 6c 6c 6f 63 20 25 64 20 62 79 74  6d malloc %d byt
0e10: 65 73 20 61 74 20 30 78 25 78 20 66 72 6f 6d 20  es at 0x%x from 
0e20: 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20  %s:%d\n",.      
0e30: 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c 20 28 69 6e  ++memcnt, n, (in
0e40: 74 29 70 2c 20 7a 46 69 6c 65 2c 6c 69 6e 65 29  t)p, zFile,line)
0e50: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
0e60: 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n p;.}../*.** Th
0e70: 69 73 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 61  is version of ma
0e80: 6c 6c 6f 63 20 69 73 20 61 6c 77 61 79 73 20 61  lloc is always a
0e90: 20 72 65 61 6c 20 66 75 6e 63 74 69 6f 6e 2c 20   real function, 
0ea0: 6e 65 76 65 72 20 61 20 6d 61 63 72 6f 0a 2a 2f  never a macro.*/
0eb0: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
0ec0: 6c 6c 6f 63 58 28 69 6e 74 20 6e 29 7b 0a 20 20  llocX(int n){.  
0ed0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61  return sqlite3Ma
0ee0: 6c 6c 6f 63 5f 28 6e 2c 20 30 2c 20 5f 5f 46 49  lloc_(n, 0, __FI
0ef0: 4c 45 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 3b  LE__, __LINE__);
0f00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  .}../*.** Check 
0f10: 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 67 69  to see if the gi
0f20: 76 65 6e 20 70 6f 69 6e 74 65 72 20 77 61 73 20  ven pointer was 
0f30: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
0f40: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  liteMalloc().** 
0f50: 61 6e 64 20 69 73 20 61 62 6c 65 20 74 6f 20 68  and is able to h
0f60: 6f 6c 64 20 61 74 20 6c 65 61 73 74 20 4e 20 62  old at least N b
0f70: 79 74 65 73 2e 20 20 52 61 69 73 65 20 61 6e 20  ytes.  Raise an 
0f80: 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69  exception if thi
0f90: 73 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  s.** is not the 
0fa0: 63 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  case..**.** This
0fb0: 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64   routine is used
0fc0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72   for testing pur
0fd0: 70 6f 73 65 73 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76  poses only..*/.v
0fe0: 6f 69 64 20 73 71 6c 69 74 65 33 43 68 65 63 6b  oid sqlite3Check
0ff0: 4d 65 6d 6f 72 79 28 76 6f 69 64 20 2a 70 2c 20  Memory(void *p, 
1000: 69 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 2a 70  int N){.  int *p
1010: 69 20 3d 20 70 3b 0a 20 20 69 6e 74 20 6e 2c 20  i = p;.  int n, 
1020: 69 2c 20 6b 3b 0a 20 20 70 69 20 2d 3d 20 4e 5f  i, k;.  pi -= N_
1030: 47 55 41 52 44 2b 31 3b 0a 20 20 66 6f 72 28 69  GUARD+1;.  for(i
1040: 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69  =0; i<N_GUARD; i
1050: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
1060: 20 70 69 5b 69 5d 3d 3d 30 78 64 65 61 64 31 31   pi[i]==0xdead11
1070: 32 32 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  22 );.  }.  n = 
1080: 70 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a 20 20 61  pi[N_GUARD];.  a
1090: 73 73 65 72 74 28 20 4e 3e 3d 30 20 26 26 20 4e  ssert( N>=0 && N
10a0: 3c 6e 20 29 3b 0a 20 20 6b 20 3d 20 28 6e 2b 73  <n );.  k = (n+s
10b0: 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69  izeof(int)-1)/si
10c0: 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20 66 6f 72  zeof(int);.  for
10d0: 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b  (i=0; i<N_GUARD;
10e0: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
10f0: 74 28 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b  t( pi[k+N_GUARD+
1100: 31 2b 69 5d 3d 3d 30 78 64 65 61 64 33 33 34 34  1+i]==0xdead3344
1110: 20 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a   );.  }.}../*.**
1120: 20 46 72 65 65 20 6d 65 6d 6f 72 79 20 70 72 65   Free memory pre
1130: 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
1140: 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c   from sqliteMall
1150: 6f 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  oc().*/.void sql
1160: 69 74 65 33 46 72 65 65 5f 28 76 6f 69 64 20 2a  ite3Free_(void *
1170: 70 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20  p, char *zFile, 
1180: 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 69 66 28  int line){.  if(
1190: 20 70 20 29 7b 0a 20 20 20 20 69 6e 74 20 2a 70   p ){.    int *p
11a0: 69 2c 20 69 2c 20 6b 2c 20 6e 3b 0a 20 20 20 20  i, i, k, n;.    
11b0: 70 69 20 3d 20 70 3b 0a 20 20 20 20 70 69 20 2d  pi = p;.    pi -
11c0: 3d 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20 20  = N_GUARD+1;.   
11d0: 20 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2b 2b   sqlite3_nFree++
11e0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
11f0: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a  <N_GUARD; i++){.
1200: 20 20 20 20 20 20 69 66 28 20 70 69 5b 69 5d 21        if( pi[i]!
1210: 3d 30 78 64 65 61 64 31 31 32 32 20 29 7b 0a 20  =0xdead1122 ){. 
1220: 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
1230: 74 64 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20 6d  tderr,"Low-end m
1240: 65 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e  emory corruption
1250: 20 61 74 20 30 78 25 78 5c 6e 22 2c 20 28 69 6e   at 0x%x\n", (in
1260: 74 29 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65  t)p);.        re
1270: 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
1280: 20 20 7d 0a 20 20 20 20 6e 20 3d 20 70 69 5b 4e    }.    n = pi[N
1290: 5f 47 55 41 52 44 5d 3b 0a 20 20 20 20 73 71 6c  _GUARD];.    sql
12a0: 69 74 65 33 5f 6d 65 6d 55 73 65 64 20 2d 3d 20  ite3_memUsed -= 
12b0: 6e 3b 0a 20 20 20 20 6b 20 3d 20 28 6e 2b 73 69  n;.    k = (n+si
12c0: 7a 65 6f 66 28 69 6e 74 29 2d 31 29 2f 73 69 7a  zeof(int)-1)/siz
12d0: 65 6f 66 28 69 6e 74 29 3b 0a 20 20 20 20 66 6f  eof(int);.    fo
12e0: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
12f0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
1300: 28 20 70 69 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31  ( pi[k+N_GUARD+1
1310: 2b 69 5d 21 3d 30 78 64 65 61 64 33 33 34 34 20  +i]!=0xdead3344 
1320: 29 7b 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e  ){.        fprin
1330: 74 66 28 73 74 64 65 72 72 2c 22 48 69 67 68 2d  tf(stderr,"High-
1340: 65 6e 64 20 6d 65 6d 6f 72 79 20 63 6f 72 72 75  end memory corru
1350: 70 74 69 6f 6e 20 61 74 20 30 78 25 78 5c 6e 22  ption at 0x%x\n"
1360: 2c 20 28 69 6e 74 29 70 29 3b 0a 20 20 20 20 20  , (int)p);.     
1370: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20     return;.     
1380: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d   }.    }.    mem
1390: 73 65 74 28 70 69 2c 20 30 78 66 66 2c 20 28 6b  set(pi, 0xff, (k
13a0: 2b 4e 5f 47 55 41 52 44 2a 32 2b 31 29 2a 73 69  +N_GUARD*2+1)*si
13b0: 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 23 69 66 20  zeof(int));.#if 
13c0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e  SQLITE_MEMDEBUG>
13d0: 31 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74  1.    fprintf(st
13e0: 64 65 72 72 2c 22 25 30 36 64 20 66 72 65 65 20  derr,"%06d free 
13f0: 25 64 20 62 79 74 65 73 20 61 74 20 30 78 25 78  %d bytes at 0x%x
1400: 20 66 72 6f 6d 20 25 73 3a 25 64 5c 6e 22 2c 0a   from %s:%d\n",.
1410: 20 20 20 20 20 20 20 20 20 2b 2b 6d 65 6d 63 6e           ++memcn
1420: 74 2c 20 6e 2c 20 28 69 6e 74 29 70 2c 20 7a 46  t, n, (int)p, zF
1430: 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e 64 69  ile,line);.#endi
1440: 66 0a 20 20 20 20 66 72 65 65 28 70 69 29 3b 0a  f.    free(pi);.
1450: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73    }.}../*.** Res
1460: 69 7a 65 20 61 20 70 72 69 6f 72 20 61 6c 6c 6f  ize a prior allo
1470: 63 61 74 69 6f 6e 2e 20 20 49 66 20 70 3d 3d 30  cation.  If p==0
1480: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
1490: 69 6e 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73  ine.** works jus
14a0: 74 20 6c 69 6b 65 20 73 71 6c 69 74 65 4d 61 6c  t like sqliteMal
14b0: 6c 6f 63 28 29 2e 20 20 49 66 20 6e 3d 3d 30 2c  loc().  If n==0,
14c0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
14d0: 6e 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74  ne.** works just
14e0: 20 6c 69 6b 65 20 73 71 6c 69 74 65 46 72 65 65   like sqliteFree
14f0: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ()..*/.void *sql
1500: 69 74 65 33 52 65 61 6c 6c 6f 63 5f 28 76 6f 69  ite3Realloc_(voi
1510: 64 20 2a 6f 6c 64 50 2c 20 69 6e 74 20 6e 2c 20  d *oldP, int n, 
1520: 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74  char *zFile, int
1530: 20 6c 69 6e 65 29 7b 0a 20 20 69 6e 74 20 2a 6f   line){.  int *o
1540: 6c 64 50 69 2c 20 2a 70 69 2c 20 69 2c 20 6b 2c  ldPi, *pi, i, k,
1550: 20 6f 6c 64 4e 2c 20 6f 6c 64 4b 3b 0a 20 20 76   oldN, oldK;.  v
1560: 6f 69 64 20 2a 70 3b 0a 20 20 69 66 28 20 6f 6c  oid *p;.  if( ol
1570: 64 50 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  dP==0 ){.    ret
1580: 75 72 6e 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  urn sqlite3Mallo
1590: 63 5f 28 6e 2c 31 2c 7a 46 69 6c 65 2c 6c 69 6e  c_(n,1,zFile,lin
15a0: 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3d  e);.  }.  if( n=
15b0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
15c0: 33 46 72 65 65 5f 28 6f 6c 64 50 2c 7a 46 69 6c  3Free_(oldP,zFil
15d0: 65 2c 6c 69 6e 65 29 3b 0a 20 20 20 20 72 65 74  e,line);.    ret
15e0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  urn 0;.  }.  if(
15f0: 20 73 69 6d 75 6c 61 74 65 64 4d 61 6c 6c 6f 63   simulatedMalloc
1600: 46 61 69 6c 75 72 65 28 6e 2c 20 7a 46 69 6c 65  Failure(n, zFile
1610: 2c 20 6c 69 6e 65 29 20 29 7b 0a 20 20 20 20 72  , line) ){.    r
1620: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 6f  eturn 0;.  }.  o
1630: 6c 64 50 69 20 3d 20 6f 6c 64 50 3b 0a 20 20 6f  ldPi = oldP;.  o
1640: 6c 64 50 69 20 2d 3d 20 4e 5f 47 55 41 52 44 2b  ldPi -= N_GUARD+
1650: 31 3b 0a 20 20 69 66 28 20 6f 6c 64 50 69 5b 30  1;.  if( oldPi[0
1660: 5d 21 3d 30 78 64 65 61 64 31 31 32 32 20 29 7b  ]!=0xdead1122 ){
1670: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
1680: 65 72 72 2c 22 4c 6f 77 2d 65 6e 64 20 6d 65 6d  err,"Low-end mem
1690: 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ory corruption i
16a0: 6e 20 72 65 61 6c 6c 6f 63 20 61 74 20 30 78 25  n realloc at 0x%
16b0: 78 5c 6e 22 2c 20 28 69 6e 74 29 6f 6c 64 50 29  x\n", (int)oldP)
16c0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
16d0: 20 20 7d 0a 20 20 6f 6c 64 4e 20 3d 20 6f 6c 64    }.  oldN = old
16e0: 50 69 5b 4e 5f 47 55 41 52 44 5d 3b 0a 20 20 73  Pi[N_GUARD];.  s
16f0: 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64 20 2d  qlite3_memUsed -
1700: 3d 20 6f 6c 64 4e 3b 0a 20 20 6f 6c 64 4b 20 3d  = oldN;.  oldK =
1710: 20 28 6f 6c 64 4e 2b 73 69 7a 65 6f 66 28 69 6e   (oldN+sizeof(in
1720: 74 29 2d 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74  t)-1)/sizeof(int
1730: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
1740: 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20  N_GUARD; i++){. 
1750: 20 20 20 69 66 28 20 6f 6c 64 50 69 5b 6f 6c 64     if( oldPi[old
1760: 4b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 21 3d  K+N_GUARD+1+i]!=
1770: 30 78 64 65 61 64 33 33 34 34 20 29 7b 0a 20 20  0xdead3344 ){.  
1780: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
1790: 72 72 2c 22 48 69 67 68 2d 65 6e 64 20 6d 65 6d  rr,"High-end mem
17a0: 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ory corruption i
17b0: 6e 20 72 65 61 6c 6c 6f 63 20 61 74 20 30 78 25  n realloc at 0x%
17c0: 78 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  x\n",.          
17d0: 20 20 20 20 28 69 6e 74 29 6f 6c 64 50 29 3b 0a      (int)oldP);.
17e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
17f0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 6b 20 3d 20      }.  }.  k = 
1800: 28 6e 20 2b 20 73 69 7a 65 6f 66 28 69 6e 74 29  (n + sizeof(int)
1810: 20 2d 20 31 29 2f 73 69 7a 65 6f 66 28 69 6e 74   - 1)/sizeof(int
1820: 29 3b 0a 20 20 70 69 20 3d 20 6d 61 6c 6c 6f 63  );.  pi = malloc
1830: 28 20 28 6b 2b 4e 5f 47 55 41 52 44 2a 32 2b 31  ( (k+N_GUARD*2+1
1840: 29 2a 73 69 7a 65 6f 66 28 69 6e 74 29 20 29 3b  )*sizeof(int) );
1850: 0a 20 20 69 66 28 20 70 69 3d 3d 30 20 29 7b 0a  .  if( pi==0 ){.
1860: 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20 73 71      if( n>0 ) sq
1870: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69  lite3_malloc_fai
1880: 6c 65 64 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72  led++;.    retur
1890: 6e 20 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  n 0;.  }.  for(i
18a0: 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69  =0; i<N_GUARD; i
18b0: 2b 2b 29 20 70 69 5b 69 5d 20 3d 20 30 78 64 65  ++) pi[i] = 0xde
18c0: 61 64 31 31 32 32 3b 0a 20 20 70 69 5b 4e 5f 47  ad1122;.  pi[N_G
18d0: 55 41 52 44 5d 20 3d 20 6e 3b 0a 20 20 73 71 6c  UARD] = n;.  sql
18e0: 69 74 65 33 5f 6d 65 6d 55 73 65 64 20 2b 3d 20  ite3_memUsed += 
18f0: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
1900: 5f 6d 65 6d 4d 61 78 3c 73 71 6c 69 74 65 33 5f  _memMax<sqlite3_
1910: 6d 65 6d 55 73 65 64 20 29 20 73 71 6c 69 74 65  memUsed ) sqlite
1920: 33 5f 6d 65 6d 4d 61 78 20 3d 20 73 71 6c 69 74  3_memMax = sqlit
1930: 65 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20 66 6f  e3_memUsed;.  fo
1940: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
1950: 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 4e 5f 47 55  ; i++) pi[k+N_GU
1960: 41 52 44 2b 31 2b 69 5d 20 3d 20 30 78 64 65 61  ARD+1+i] = 0xdea
1970: 64 33 33 34 34 3b 0a 20 20 70 20 3d 20 26 70 69  d3344;.  p = &pi
1980: 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a 20 20 6d  [N_GUARD+1];.  m
1990: 65 6d 63 70 79 28 70 2c 20 6f 6c 64 50 2c 20 6e  emcpy(p, oldP, n
19a0: 3e 6f 6c 64 4e 20 3f 20 6f 6c 64 4e 20 3a 20 6e  >oldN ? oldN : n
19b0: 29 3b 0a 20 20 69 66 28 20 6e 3e 6f 6c 64 4e 20  );.  if( n>oldN 
19c0: 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 28  ){.    memset(&(
19d0: 28 63 68 61 72 2a 29 70 29 5b 6f 6c 64 4e 5d 2c  (char*)p)[oldN],
19e0: 20 30 78 35 35 2c 20 6e 2d 6f 6c 64 4e 29 3b 0a   0x55, n-oldN);.
19f0: 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28 6f 6c 64    }.  memset(old
1a00: 50 69 2c 20 30 78 61 62 2c 20 28 6f 6c 64 4b 2b  Pi, 0xab, (oldK+
1a10: 4e 5f 47 55 41 52 44 2b 32 29 2a 73 69 7a 65 6f  N_GUARD+2)*sizeo
1a20: 66 28 69 6e 74 29 29 3b 0a 20 20 66 72 65 65 28  f(int));.  free(
1a30: 6f 6c 64 50 69 29 3b 0a 23 69 66 20 53 51 4c 49  oldPi);.#if SQLI
1a40: 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20  TE_MEMDEBUG>1.  
1a50: 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63  print_stack_trac
1a60: 65 28 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 73  e();.  fprintf(s
1a70: 74 64 65 72 72 2c 22 25 30 36 64 20 72 65 61 6c  tderr,"%06d real
1a80: 6c 6f 63 20 25 64 20 74 6f 20 25 64 20 62 79 74  loc %d to %d byt
1a90: 65 73 20 61 74 20 30 78 25 78 20 74 6f 20 30 78  es at 0x%x to 0x
1aa0: 25 78 20 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a  %x at %s:%d\n",.
1ab0: 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6f 6c      ++memcnt, ol
1ac0: 64 4e 2c 20 6e 2c 20 28 69 6e 74 29 6f 6c 64 50  dN, n, (int)oldP
1ad0: 2c 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c  , (int)p, zFile,
1ae0: 20 6c 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20   line);.#endif. 
1af0: 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a   return p;.}../*
1b00: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
1b10: 6f 66 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d  of a string in m
1b20: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
1b30: 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  rom sqliteMalloc
1b40: 28 29 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69  ().*/.char *sqli
1b50: 74 65 33 53 74 72 44 75 70 5f 28 63 6f 6e 73 74  te3StrDup_(const
1b60: 20 63 68 61 72 20 2a 7a 2c 20 63 68 61 72 20 2a   char *z, char *
1b70: 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29  zFile, int line)
1b80: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a  {.  char *zNew;.
1b90: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74    if( z==0 ) ret
1ba0: 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20  urn 0;.  zNew = 
1bb0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 73  sqlite3Malloc_(s
1bc0: 74 72 6c 65 6e 28 7a 29 2b 31 2c 20 30 2c 20 7a  trlen(z)+1, 0, z
1bd0: 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69  File, line);.  i
1be0: 66 28 20 7a 4e 65 77 20 29 20 73 74 72 63 70 79  f( zNew ) strcpy
1bf0: 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74  (zNew, z);.  ret
1c00: 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72  urn zNew;.}.char
1c10: 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 44 75 70   *sqlite3StrNDup
1c20: 5f 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  _(const char *z,
1c30: 20 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46   int n, char *zF
1c40: 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a  ile, int line){.
1c50: 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20    char *zNew;.  
1c60: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
1c70: 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71  n 0;.  zNew = sq
1c80: 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2b 31  lite3Malloc_(n+1
1c90: 2c 20 30 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65  , 0, zFile, line
1ca0: 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 7b  );.  if( zNew ){
1cb0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77  .    memcpy(zNew
1cc0: 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65  , z, n);.    zNe
1cd0: 77 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  w[n] = 0;.  }.  
1ce0: 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a  return zNew;.}..
1cf0: 2f 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20  /*.** A version 
1d00: 6f 66 20 73 71 6c 69 74 65 46 72 65 65 20 74 68  of sqliteFree th
1d10: 61 74 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  at is always a f
1d20: 75 6e 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d  unction, not a m
1d30: 61 63 72 6f 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  acro..*/.void sq
1d40: 6c 69 74 65 33 46 72 65 65 58 28 76 6f 69 64 20  lite3FreeX(void 
1d50: 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 46 72 65  *p){.  sqliteFre
1d60: 65 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  e(p);.}.#endif /
1d70: 2a 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  * SQLITE_MEMDEBU
1d80: 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  G */../*.** The 
1d90: 66 6f 6c 6c 6f 77 69 6e 67 20 76 65 72 73 69 6f  following versio
1da0: 6e 73 20 6f 66 20 6d 61 6c 6c 6f 63 28 29 20 61  ns of malloc() a
1db0: 6e 64 20 66 72 65 65 28 29 20 61 72 65 20 66 6f  nd free() are fo
1dc0: 72 20 75 73 65 20 69 6e 20 61 0a 2a 2a 20 6e 6f  r use in a.** no
1dd0: 72 6d 61 6c 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23  rmal build..*/.#
1de0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1df0: 54 45 5f 4d 45 4d 44 45 42 55 47 29 0a 0a 2f 2a  TE_MEMDEBUG)../*
1e00: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77  .** Allocate new
1e10: 20 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65 74 20   memory and set 
1e20: 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65 74  it to zero.  Ret
1e30: 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e  urn NULL if.** n
1e40: 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61 69  o memory is avai
1e50: 6c 61 62 6c 65 2e 20 20 53 65 65 20 61 6c 73 6f  lable.  See also
1e60: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77   sqliteMallocRaw
1e70: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ()..*/.void *sql
1e80: 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e  ite3Malloc(int n
1e90: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
1ea0: 69 66 28 20 6e 3d 3d 30 20 29 20 72 65 74 75 72  if( n==0 ) retur
1eb0: 6e 20 30 3b 0a 20 20 69 66 28 20 28 70 20 3d 20  n 0;.  if( (p = 
1ec0: 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29 7b  malloc(n))==0 ){
1ed0: 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20 73  .    if( n>0 ) s
1ee0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
1ef0: 69 6c 65 64 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  iled++;.  }else{
1f00: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20 30  .    memset(p, 0
1f10: 2c 20 6e 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , n);.  }.  retu
1f20: 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  rn p;.}../*.** A
1f30: 6c 6c 6f 63 61 74 65 20 6e 65 77 20 6d 65 6d 6f  llocate new memo
1f40: 72 79 20 62 75 74 20 64 6f 20 6e 6f 74 20 73 65  ry but do not se
1f50: 74 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52  t it to zero.  R
1f60: 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a  eturn NULL if.**
1f70: 20 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76   no memory is av
1f80: 61 69 6c 61 62 6c 65 2e 20 20 53 65 65 20 61 6c  ailable.  See al
1f90: 73 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  so sqliteMalloc(
1fa0: 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  )..*/.void *sqli
1fb0: 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 69 6e 74  te3MallocRaw(int
1fc0: 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a   n){.  void *p;.
1fd0: 20 20 69 66 28 20 6e 3d 3d 30 20 29 20 72 65 74    if( n==0 ) ret
1fe0: 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 28 70 20  urn 0;.  if( (p 
1ff0: 3d 20 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20  = malloc(n))==0 
2000: 29 7b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29  ){.    if( n>0 )
2010: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
2020: 66 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d 0a 20 20  failed++;.  }.  
2030: 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a  return p;.}../*.
2040: 2a 2a 20 46 72 65 65 20 6d 65 6d 6f 72 79 20 70  ** Free memory p
2050: 72 65 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e  reviously obtain
2060: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61  ed from sqliteMa
2070: 6c 6c 6f 63 28 29 0a 2a 2f 0a 76 6f 69 64 20 73  lloc().*/.void s
2080: 71 6c 69 74 65 33 46 72 65 65 58 28 76 6f 69 64  qlite3FreeX(void
2090: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 20 29 7b   *p){.  if( p ){
20a0: 0a 20 20 20 20 66 72 65 65 28 70 29 3b 0a 20 20  .    free(p);.  
20b0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a  }.}../*.** Resiz
20c0: 65 20 61 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61  e a prior alloca
20d0: 74 69 6f 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20  tion.  If p==0, 
20e0: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
20f0: 65 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20  e.** works just 
2100: 6c 69 6b 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  like sqliteMallo
2110: 63 28 29 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74  c().  If n==0, t
2120: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
2130: 0a 2a 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  .** works just l
2140: 69 6b 65 20 73 71 6c 69 74 65 46 72 65 65 28 29  ike sqliteFree()
2150: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
2160: 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a  e3Realloc(void *
2170: 70 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69  p, int n){.  voi
2180: 64 20 2a 70 32 3b 0a 20 20 69 66 28 20 70 3d 3d  d *p2;.  if( p==
2190: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
21a0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 29 3b  sqliteMalloc(n);
21b0: 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20  .  }.  if( n==0 
21c0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65  ){.    sqliteFre
21d0: 65 28 70 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  e(p);.    return
21e0: 20 30 3b 0a 20 20 7d 0a 20 20 70 32 20 3d 20 72   0;.  }.  p2 = r
21f0: 65 61 6c 6c 6f 63 28 70 2c 20 6e 29 3b 0a 20 20  ealloc(p, n);.  
2200: 69 66 28 20 70 32 3d 3d 30 20 29 7b 0a 20 20 20  if( p2==0 ){.   
2210: 20 69 66 28 20 6e 3e 30 20 29 20 73 71 6c 69 74   if( n>0 ) sqlit
2220: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
2230: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
2240: 20 70 32 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61   p2;.}../*.** Ma
2250: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61 20 73  ke a copy of a s
2260: 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20  tring in memory 
2270: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
2280: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a  liteMalloc().*/.
2290: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
22a0: 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Dup(const char *
22b0: 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77  z){.  char *zNew
22c0: 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72  ;.  if( z==0 ) r
22d0: 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20  eturn 0;.  zNew 
22e0: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61  = sqliteMallocRa
22f0: 77 28 73 74 72 6c 65 6e 28 7a 29 2b 31 29 3b 0a  w(strlen(z)+1);.
2300: 20 20 69 66 28 20 7a 4e 65 77 20 29 20 73 74 72    if( zNew ) str
2310: 63 70 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20  cpy(zNew, z);.  
2320: 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63  return zNew;.}.c
2330: 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 4e  har *sqlite3StrN
2340: 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Dup(const char *
2350: 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68 61  z, int n){.  cha
2360: 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a  r *zNew;.  if( z
2370: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
2380: 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 4d    zNew = sqliteM
2390: 61 6c 6c 6f 63 52 61 77 28 6e 2b 31 29 3b 0a 20  allocRaw(n+1);. 
23a0: 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20   if( zNew ){.   
23b0: 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c   memcpy(zNew, z,
23c0: 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d   n);.    zNew[n]
23d0: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 0;.  }.  retu
23e0: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 23 65 6e 64 69  rn zNew;.}.#endi
23f0: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
2400: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 20 2a  LITE_MEMDEBUG) *
2410: 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 6c 6c 6f 63  /../*.** Realloc
2420: 61 74 65 20 61 20 62 75 66 66 65 72 20 74 6f 20  ate a buffer to 
2430: 61 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65  a different size
2440: 2e 20 20 54 68 69 73 20 69 73 20 73 69 6d 69 6c  .  This is simil
2450: 61 72 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 52  ar to.** sqliteR
2460: 65 61 6c 6c 6f 63 28 29 20 65 78 63 65 70 74 20  ealloc() except 
2470: 74 68 61 74 20 69 66 20 74 68 65 20 61 6c 6c 6f  that if the allo
2480: 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 74 68 65  cation fails the
2490: 20 62 75 66 66 65 72 0a 2a 2a 20 69 73 20 66 72   buffer.** is fr
24a0: 65 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  eed..*/.void sql
24b0: 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65  ite3ReallocOrFre
24c0: 65 28 76 6f 69 64 20 2a 2a 70 70 42 75 66 2c 20  e(void **ppBuf, 
24d0: 69 6e 74 20 6e 65 77 53 69 7a 65 29 7b 0a 20 20  int newSize){.  
24e0: 76 6f 69 64 20 2a 70 4e 65 77 20 3d 20 73 71 6c  void *pNew = sql
24f0: 69 74 65 52 65 61 6c 6c 6f 63 28 2a 70 70 42 75  iteRealloc(*ppBu
2500: 66 2c 20 6e 65 77 53 69 7a 65 29 3b 0a 20 20 69  f, newSize);.  i
2510: 66 28 20 70 4e 65 77 3d 3d 30 20 29 7b 0a 20 20  f( pNew==0 ){.  
2520: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 70    sqliteFree(*pp
2530: 42 75 66 29 3b 0a 20 20 7d 0a 20 20 2a 70 70 42  Buf);.  }.  *ppB
2540: 75 66 20 3d 20 70 4e 65 77 3b 0a 7d 0a 0a 2f 2a  uf = pNew;.}../*
2550: 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 73 74 72  .** Create a str
2560: 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64  ing from the 2nd
2570: 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20   and subsequent 
2580: 61 72 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f  arguments (up to
2590: 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55   the.** first NU
25a0: 4c 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74  LL argument), st
25b0: 6f 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 69  ore the string i
25c0: 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  n memory obtaine
25d0: 64 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65  d from.** sqlite
25e0: 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b  Malloc() and mak
25f0: 65 20 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e  e the pointer in
2600: 64 69 63 61 74 65 64 20 62 79 20 74 68 65 20 31  dicated by the 1
2610: 73 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70  st argument.** p
2620: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72  oint to that str
2630: 69 6e 67 2e 20 20 54 68 65 20 31 73 74 20 61 72  ing.  The 1st ar
2640: 67 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68  gument must eith
2650: 65 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a  er be NULL or .*
2660: 2a 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72  * point to memor
2670: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
2680: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a  sqliteMalloc()..
2690: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
26a0: 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
26b0: 70 7a 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  pz, ...){.  va_l
26c0: 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42  ist ap;.  int nB
26d0: 79 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  yte;.  const cha
26e0: 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52  r *z;.  char *zR
26f0: 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 70 7a  esult;..  if( pz
2700: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2710: 6e 42 79 74 65 20 3d 20 31 3b 0a 20 20 76 61 5f  nByte = 1;.  va_
2720: 73 74 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20  start(ap, pz);. 
2730: 20 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f   while( (z = va_
2740: 61 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68  arg(ap, const ch
2750: 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ar*))!=0 ){.    
2760: 6e 42 79 74 65 20 2b 3d 20 73 74 72 6c 65 6e 28  nByte += strlen(
2770: 7a 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64  z);.  }.  va_end
2780: 28 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  (ap);.  sqliteFr
2790: 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d  ee(*pz);.  *pz =
27a0: 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74   zResult = sqlit
27b0: 65 4d 61 6c 6c 6f 63 52 61 77 28 20 6e 42 79 74  eMallocRaw( nByt
27c0: 65 20 29 3b 0a 20 20 69 66 28 20 7a 52 65 73 75  e );.  if( zResu
27d0: 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  lt==0 ){.    ret
27e0: 75 72 6e 3b 0a 20 20 7d 0a 20 20 2a 7a 52 65 73  urn;.  }.  *zRes
27f0: 75 6c 74 20 3d 20 30 3b 0a 20 20 76 61 5f 73 74  ult = 0;.  va_st
2800: 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77  art(ap, pz);.  w
2810: 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72  hile( (z = va_ar
2820: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
2830: 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74  *))!=0 ){.    st
2840: 72 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a 29  rcpy(zResult, z)
2850: 3b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d  ;.    zResult +=
2860: 20 73 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74 29   strlen(zResult)
2870: 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  ;.  }.  va_end(a
2880: 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p);.#ifdef SQLIT
2890: 45 5f 4d 45 4d 44 45 42 55 47 0a 23 69 66 20 53  E_MEMDEBUG.#if S
28a0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31  QLITE_MEMDEBUG>1
28b0: 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72  .  fprintf(stder
28c0: 72 2c 22 73 74 72 69 6e 67 20 61 74 20 30 78 25  r,"string at 0x%
28d0: 78 20 69 73 20 25 73 5c 6e 22 2c 20 28 69 6e 74  x is %s\n", (int
28e0: 29 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23 65 6e 64  )*pz, *pz);.#end
28f0: 69 66 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  if.#endif.}../*.
2900: 2a 2a 20 53 65 74 20 74 68 65 20 6d 6f 73 74 20  ** Set the most 
2910: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
2920: 65 20 61 6e 64 20 65 72 72 6f 72 20 73 74 72 69  e and error stri
2930: 6e 67 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ng for the sqlit
2940: 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 22 64 62 22  e.** handle "db"
2950: 2e 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  . The error code
2960: 20 69 73 20 73 65 74 20 74 6f 20 22 65 72 72 5f   is set to "err_
2970: 63 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  code"..**.** If 
2980: 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
2990: 73 74 72 69 6e 67 20 7a 46 6f 72 6d 61 74 20 73  string zFormat s
29a0: 70 65 63 69 66 69 65 73 20 74 68 65 20 66 6f 72  pecifies the for
29b0: 6d 61 74 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72  mat of the.** er
29c0: 72 6f 72 20 73 74 72 69 6e 67 20 69 6e 20 74 68  ror string in th
29d0: 65 20 73 74 79 6c 65 20 6f 66 20 74 68 65 20 70  e style of the p
29e0: 72 69 6e 74 66 20 66 75 6e 63 74 69 6f 6e 73 3a  rintf functions:
29f0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   The following.*
2a00: 2a 20 66 6f 72 6d 61 74 20 63 68 61 72 61 63 74  * format charact
2a10: 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a  ers are allowed:
2a20: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20 20  .**.**      %s  
2a30: 20 20 20 20 49 6e 73 65 72 74 20 61 20 73 74 72      Insert a str
2a40: 69 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20  ing.**      %z  
2a50: 20 20 20 20 41 20 73 74 72 69 6e 67 20 74 68 61      A string tha
2a60: 74 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65  t should be free
2a70: 64 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20 20  d after use.**  
2a80: 20 20 20 20 25 64 20 20 20 20 20 20 49 6e 73 65      %d      Inse
2a90: 72 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  rt an integer.**
2aa0: 20 20 20 20 20 20 25 54 20 20 20 20 20 20 49 6e        %T      In
2ab0: 73 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20  sert a token.** 
2ac0: 20 20 20 20 20 25 53 20 20 20 20 20 20 49 6e 73       %S      Ins
2ad0: 65 72 74 20 74 68 65 20 66 69 72 73 74 20 65 6c  ert the first el
2ae0: 65 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c 69  ement of a SrcLi
2af0: 73 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f 72 6d 61 74  st.**.** zFormat
2b00: 20 61 6e 64 20 61 6e 79 20 73 74 72 69 6e 67 20   and any string 
2b10: 74 6f 6b 65 6e 73 20 74 68 61 74 20 66 6f 6c 6c  tokens that foll
2b20: 6f 77 20 69 74 20 61 72 65 20 61 73 73 75 6d 65  ow it are assume
2b30: 64 20 74 6f 20 62 65 0a 2a 2a 20 65 6e 63 6f 64  d to be.** encod
2b40: 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 0a  ed in UTF-8..**.
2b50: 2a 2a 20 54 6f 20 63 6c 65 61 72 20 74 68 65 20  ** To clear the 
2b60: 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  most recent erro
2b70: 72 20 66 6f 72 20 73 71 6c 69 74 65 20 68 61 6e  r for sqlite han
2b80: 64 6c 65 20 22 64 62 22 2c 20 73 71 6c 69 74 65  dle "db", sqlite
2b90: 33 45 72 72 6f 72 0a 2a 2a 20 73 68 6f 75 6c 64  3Error.** should
2ba0: 20 62 65 20 63 61 6c 6c 65 64 20 77 69 74 68 20   be called with 
2bb0: 65 72 72 5f 63 6f 64 65 20 73 65 74 20 74 6f 20  err_code set to 
2bc0: 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 7a 46  SQLITE_OK and zF
2bd0: 6f 72 6d 61 74 20 73 65 74 0a 2a 2a 20 74 6f 20  ormat set.** to 
2be0: 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  NULL..*/.void sq
2bf0: 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2c00: 65 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f  e3 *db, int err_
2c10: 63 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  code, const char
2c20: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
2c30: 0a 20 20 69 66 28 20 64 62 20 26 26 20 28 64 62  .  if( db && (db
2c40: 2d 3e 70 45 72 72 20 7c 7c 20 28 64 62 2d 3e 70  ->pErr || (db->p
2c50: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Err = sqlite3Val
2c60: 75 65 4e 65 77 28 29 29 29 20 29 7b 0a 20 20 20  ueNew())) ){.   
2c70: 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 65   db->errCode = e
2c80: 72 72 5f 63 6f 64 65 3b 0a 20 20 20 20 69 66 28  rr_code;.    if(
2c90: 20 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20   zFormat ){.    
2ca0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20    char *z;.     
2cb0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20   va_list ap;.   
2cc0: 20 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20     va_start(ap, 
2cd0: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20 20 20  zFormat);.      
2ce0: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69  z = sqlite3VMPri
2cf0: 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ntf(zFormat, ap)
2d00: 3b 0a 20 20 20 20 20 20 76 61 5f 65 6e 64 28 61  ;.      va_end(a
2d10: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
2d20: 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d  3ValueSetStr(db-
2d30: 3e 70 45 72 72 2c 20 2d 31 2c 20 7a 2c 20 53 51  >pErr, -1, z, SQ
2d40: 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2d50: 65 33 46 72 65 65 58 29 3b 0a 20 20 20 20 7d 65  e3FreeX);.    }e
2d60: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2d70: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62  e3ValueSetStr(db
2d80: 2d 3e 70 45 72 72 2c 20 30 2c 20 30 2c 20 53 51  ->pErr, 0, 0, SQ
2d90: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
2da0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7d  E_STATIC);.    }
2db0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64  .  }.}../*.** Ad
2dc0: 64 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  d an error messa
2dd0: 67 65 20 74 6f 20 70 50 61 72 73 65 2d 3e 7a 45  ge to pParse->zE
2de0: 72 72 4d 73 67 20 61 6e 64 20 69 6e 63 72 65 6d  rrMsg and increm
2df0: 65 6e 74 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  ent pParse->nErr
2e00: 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ..** The followi
2e10: 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20 63 68  ng formatting ch
2e20: 61 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c  aracters are all
2e30: 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  owed:.**.**     
2e40: 20 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20   %s      Insert 
2e50: 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20  a string.**     
2e60: 20 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e   %z      A strin
2e70: 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  g that should be
2e80: 20 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65   freed after use
2e90: 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20  .**      %d     
2ea0: 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67   Insert an integ
2eb0: 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20  er.**      %T   
2ec0: 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65     Insert a toke
2ed0: 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20  n.**      %S    
2ee0: 20 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72    Insert the fir
2ef0: 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2f00: 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 54 68  SrcList.**.** Th
2f10: 69 73 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75  is function shou
2f20: 6c 64 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ld be used to re
2f30: 70 6f 72 74 20 61 6e 79 20 65 72 72 6f 72 20 74  port any error t
2f40: 68 61 74 20 6f 63 63 75 72 73 20 77 68 69 6c 73  hat occurs whils
2f50: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 61  t.** compiling a
2f60: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
2f70: 28 69 2e 65 2e 20 77 69 74 68 69 6e 20 73 71 6c  (i.e. within sql
2f80: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 29 2e  ite3_prepare()).
2f90: 20 54 68 65 0a 2a 2a 20 6c 61 73 74 20 74 68 69   The.** last thi
2fa0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70  ng the sqlite3_p
2fb0: 72 65 70 61 72 65 28 29 20 66 75 6e 63 74 69 6f  repare() functio
2fc0: 6e 20 64 6f 65 73 20 69 73 20 63 6f 70 79 20 74  n does is copy t
2fd0: 68 65 20 65 72 72 6f 72 0a 2a 2a 20 73 74 6f 72  he error.** stor
2fe0: 65 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74  ed by this funct
2ff0: 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ion into the dat
3000: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 75 73 69  abase handle usi
3010: 6e 67 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  ng sqlite3Error(
3020: 29 2e 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 73  )..** Function s
3030: 71 6c 69 74 65 33 45 72 72 6f 72 28 29 20 73 68  qlite3Error() sh
3040: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 64 75 72  ould be used dur
3050: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 65 78  ing statement ex
3060: 65 63 75 74 69 6f 6e 0a 2a 2a 20 28 73 71 6c 69  ecution.** (sqli
3070: 74 65 33 5f 73 74 65 70 28 29 20 65 74 63 2e 29  te3_step() etc.)
3080: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3090: 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 20  3ErrorMsg(Parse 
30a0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
30b0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
30c0: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
30d0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  ;.  pParse->nErr
30e0: 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  ++;.  sqliteFree
30f0: 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67  (pParse->zErrMsg
3100: 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  );.  va_start(ap
3110: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 70 50  , zFormat);.  pP
3120: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  arse->zErrMsg = 
3130: 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
3140: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
3150: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f  va_end(ap);.}../
3160: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20  *.** Convert an 
3170: 53 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74 65 64  SQL-style quoted
3180: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e   string into a n
3190: 6f 72 6d 61 6c 20 73 74 72 69 6e 67 20 62 79 20  ormal string by 
31a0: 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68 65 20  removing.** the 
31b0: 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73  quote characters
31c0: 2e 20 20 54 68 65 20 63 6f 6e 76 65 72 73 69 6f  .  The conversio
31d0: 6e 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70 6c 61  n is done in-pla
31e0: 63 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 69  ce.  If the.** i
31f0: 6e 70 75 74 20 64 6f 65 73 20 6e 6f 74 20 62 65  nput does not be
3200: 67 69 6e 20 77 69 74 68 20 61 20 71 75 6f 74 65  gin with a quote
3210: 20 63 68 61 72 61 63 74 65 72 2c 20 74 68 65 6e   character, then
3220: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
3230: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a   is a no-op..**.
3240: 2a 2a 20 32 30 30 32 2d 46 65 62 2d 31 34 3a 20  ** 2002-Feb-14: 
3250: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
3260: 65 78 74 65 6e 64 65 64 20 74 6f 20 72 65 6d 6f  extended to remo
3270: 76 65 20 4d 53 2d 41 63 63 65 73 73 20 73 74 79  ve MS-Access sty
3280: 6c 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73 20 66  le.** brackets f
3290: 72 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65 6e 74  rom around ident
32a0: 69 66 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d  ifers.  For exam
32b0: 70 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d 22 20  ple:  "[a-b-c]" 
32c0: 62 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d  becomes.** "a-b-
32d0: 63 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  c"..*/.void sqli
32e0: 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 20  te3Dequote(char 
32f0: 2a 7a 29 7b 0a 20 20 69 6e 74 20 71 75 6f 74 65  *z){.  int quote
3300: 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20  ;.  int i, j;.  
3310: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
3320: 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a 5b 30  n;.  quote = z[0
3330: 5d 3b 0a 20 20 73 77 69 74 63 68 28 20 71 75 6f  ];.  switch( quo
3340: 74 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27  te ){.    case '
3350: 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a 20 20 20  \'':  break;.   
3360: 20 63 61 73 65 20 27 22 27 3a 20 20 20 62 72 65   case '"':   bre
3370: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27 60 27  ak;.    case '`'
3380: 3a 20 20 20 62 72 65 61 6b 3b 20 20 20 20 20 20  :   break;      
3390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
33a0: 20 4d 79 53 51 4c 20 63 6f 6d 70 61 74 69 62 69   MySQL compatibi
33b0: 6c 69 74 79 20 2a 2f 0a 20 20 20 20 63 61 73 65  lity */.    case
33c0: 20 27 5b 27 3a 20 20 20 71 75 6f 74 65 20 3d 20   '[':   quote = 
33d0: 27 5d 27 3b 20 20 62 72 65 61 6b 3b 20 20 2f 2a  ']';  break;  /*
33e0: 20 46 6f 72 20 4d 53 20 53 71 6c 53 65 72 76 65   For MS SqlServe
33f0: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
3400: 2a 2f 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  */.    default: 
3410: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
3420: 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20 7a   for(i=1, j=0; z
3430: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
3440: 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  f( z[i]==quote )
3450: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b  {.      if( z[i+
3460: 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20  1]==quote ){.   
3470: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71 75       z[j++] = qu
3480: 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b  ote;.        i++
3490: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
34a0: 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20         z[j++] = 
34b0: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
34c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
34d0: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b 2b  lse{.      z[j++
34e0: 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d 0a  ] = z[i];.    }.
34f0: 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61 72 72    }.}../* An arr
3500: 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20 75 70  ay to map all up
3510: 70 65 72 2d 63 61 73 65 20 63 68 61 72 61 63 74  per-case charact
3520: 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72 20 63  ers into their c
3530: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3540: 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61 72 61  lower-case chara
3550: 63 74 65 72 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20  cter. .*/.const 
3560: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
3570: 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
3580: 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 30 2c  r[] = {.      0,
3590: 20 20 31 2c 20 20 32 2c 20 20 33 2c 20 20 34 2c    1,  2,  3,  4,
35a0: 20 20 35 2c 20 20 36 2c 20 20 37 2c 20 20 38 2c    5,  6,  7,  8,
35b0: 20 20 39 2c 20 31 30 2c 20 31 31 2c 20 31 32 2c    9, 10, 11, 12,
35c0: 20 31 33 2c 20 31 34 2c 20 31 35 2c 20 31 36 2c   13, 14, 15, 16,
35d0: 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20 31 39   17,.     18, 19
35e0: 2c 20 32 30 2c 20 32 31 2c 20 32 32 2c 20 32 33  , 20, 21, 22, 23
35f0: 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20 32 37  , 24, 25, 26, 27
3600: 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20 33 31  , 28, 29, 30, 31
3610: 2c 20 33 32 2c 20 33 33 2c 20 33 34 2c 20 33 35  , 32, 33, 34, 35
3620: 2c 0a 20 20 20 20 20 33 36 2c 20 33 37 2c 20 33  ,.     36, 37, 3
3630: 38 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c 20 34  8, 39, 40, 41, 4
3640: 32 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c 20 34  2, 43, 44, 45, 4
3650: 36 2c 20 34 37 2c 20 34 38 2c 20 34 39 2c 20 35  6, 47, 48, 49, 5
3660: 30 2c 20 35 31 2c 20 35 32 2c 20 35 33 2c 0a 20  0, 51, 52, 53,. 
3670: 20 20 20 20 35 34 2c 20 35 35 2c 20 35 36 2c 20      54, 55, 56, 
3680: 35 37 2c 20 35 38 2c 20 35 39 2c 20 36 30 2c 20  57, 58, 59, 60, 
3690: 36 31 2c 20 36 32 2c 20 36 33 2c 20 36 34 2c 20  61, 62, 63, 64, 
36a0: 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c 31  97, 98, 99,100,1
36b0: 30 31 2c 31 30 32 2c 31 30 33 2c 0a 20 20 20 20  01,102,103,.    
36c0: 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c  104,105,106,107,
36d0: 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c  108,109,110,111,
36e0: 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35 2c  112,113,114,115,
36f0: 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39 2c  116,117,118,119,
3700: 31 32 30 2c 31 32 31 2c 0a 20 20 20 20 31 32 32  120,121,.    122
3710: 2c 20 39 31 2c 20 39 32 2c 20 39 33 2c 20 39 34  , 91, 92, 93, 94
3720: 2c 20 39 35 2c 20 39 36 2c 20 39 37 2c 20 39 38  , 95, 96, 97, 98
3730: 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31 30 32  , 99,100,101,102
3740: 2c 31 30 33 2c 31 30 34 2c 31 30 35 2c 31 30 36  ,103,104,105,106
3750: 2c 31 30 37 2c 0a 20 20 20 20 31 30 38 2c 31 30  ,107,.    108,10
3760: 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31  9,110,111,112,11
3770: 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c 31 31  3,114,115,116,11
3780: 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c 31 32  7,118,119,120,12
3790: 31 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c 31 32  1,122,123,124,12
37a0: 35 2c 0a 20 20 20 20 31 32 36 2c 31 32 37 2c 31  5,.    126,127,1
37b0: 32 38 2c 31 32 39 2c 31 33 30 2c 31 33 31 2c 31  28,129,130,131,1
37c0: 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35 2c 31  32,133,134,135,1
37d0: 33 36 2c 31 33 37 2c 31 33 38 2c 31 33 39 2c 31  36,137,138,139,1
37e0: 34 30 2c 31 34 31 2c 31 34 32 2c 31 34 33 2c 0a  40,141,142,143,.
37f0: 20 20 20 20 31 34 34 2c 31 34 35 2c 31 34 36 2c      144,145,146,
3800: 31 34 37 2c 31 34 38 2c 31 34 39 2c 31 35 30 2c  147,148,149,150,
3810: 31 35 31 2c 31 35 32 2c 31 35 33 2c 31 35 34 2c  151,152,153,154,
3820: 31 35 35 2c 31 35 36 2c 31 35 37 2c 31 35 38 2c  155,156,157,158,
3830: 31 35 39 2c 31 36 30 2c 31 36 31 2c 0a 20 20 20  159,160,161,.   
3840: 20 31 36 32 2c 31 36 33 2c 31 36 34 2c 31 36 35   162,163,164,165
3850: 2c 31 36 36 2c 31 36 37 2c 31 36 38 2c 31 36 39  ,166,167,168,169
3860: 2c 31 37 30 2c 31 37 31 2c 31 37 32 2c 31 37 33  ,170,171,172,173
3870: 2c 31 37 34 2c 31 37 35 2c 31 37 36 2c 31 37 37  ,174,175,176,177
3880: 2c 31 37 38 2c 31 37 39 2c 0a 20 20 20 20 31 38  ,178,179,.    18
3890: 30 2c 31 38 31 2c 31 38 32 2c 31 38 33 2c 31 38  0,181,182,183,18
38a0: 34 2c 31 38 35 2c 31 38 36 2c 31 38 37 2c 31 38  4,185,186,187,18
38b0: 38 2c 31 38 39 2c 31 39 30 2c 31 39 31 2c 31 39  8,189,190,191,19
38c0: 32 2c 31 39 33 2c 31 39 34 2c 31 39 35 2c 31 39  2,193,194,195,19
38d0: 36 2c 31 39 37 2c 0a 20 20 20 20 31 39 38 2c 31  6,197,.    198,1
38e0: 39 39 2c 32 30 30 2c 32 30 31 2c 32 30 32 2c 32  99,200,201,202,2
38f0: 30 33 2c 32 30 34 2c 32 30 35 2c 32 30 36 2c 32  03,204,205,206,2
3900: 30 37 2c 32 30 38 2c 32 30 39 2c 32 31 30 2c 32  07,208,209,210,2
3910: 31 31 2c 32 31 32 2c 32 31 33 2c 32 31 34 2c 32  11,212,213,214,2
3920: 31 35 2c 0a 20 20 20 20 32 31 36 2c 32 31 37 2c  15,.    216,217,
3930: 32 31 38 2c 32 31 39 2c 32 32 30 2c 32 32 31 2c  218,219,220,221,
3940: 32 32 32 2c 32 32 33 2c 32 32 34 2c 32 32 35 2c  222,223,224,225,
3950: 32 32 36 2c 32 32 37 2c 32 32 38 2c 32 32 39 2c  226,227,228,229,
3960: 32 33 30 2c 32 33 31 2c 32 33 32 2c 32 33 33 2c  230,231,232,233,
3970: 0a 20 20 20 20 32 33 34 2c 32 33 35 2c 32 33 36  .    234,235,236
3980: 2c 32 33 37 2c 32 33 38 2c 32 33 39 2c 32 34 30  ,237,238,239,240
3990: 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32 34 34  ,241,242,243,244
39a0: 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32 34 38  ,245,246,247,248
39b0: 2c 32 34 39 2c 32 35 30 2c 32 35 31 2c 0a 20 20  ,249,250,251,.  
39c0: 20 20 32 35 32 2c 32 35 33 2c 32 35 34 2c 32 35    252,253,254,25
39d0: 35 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 55 70 70  5.};.#define Upp
39e0: 65 72 54 6f 4c 6f 77 65 72 20 73 71 6c 69 74 65  erToLower sqlite
39f0: 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 0a 0a 2f  3UpperToLower../
3a00: 2a 0a 2a 2a 20 53 6f 6d 65 20 73 79 73 74 65 6d  *.** Some system
3a10: 73 20 68 61 76 65 20 73 74 72 69 63 6d 70 28 29  s have stricmp()
3a20: 2e 20 20 4f 74 68 65 72 73 20 68 61 76 65 20 73  .  Others have s
3a30: 74 72 63 61 73 65 63 6d 70 28 29 2e 20 20 42 65  trcasecmp().  Be
3a40: 63 61 75 73 65 0a 2a 2a 20 74 68 65 72 65 20 69  cause.** there i
3a50: 73 20 6e 6f 20 63 6f 6e 73 69 73 74 65 6e 63 79  s no consistency
3a60: 2c 20 77 65 20 77 69 6c 6c 20 64 65 66 69 6e 65  , we will define
3a70: 20 6f 75 72 20 6f 77 6e 2e 0a 2a 2f 0a 69 6e 74   our own..*/.int
3a80: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
3a90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66  const char *zLef
3aa0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
3ab0: 52 69 67 68 74 29 7b 0a 20 20 72 65 67 69 73 74  Right){.  regist
3ac0: 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  er unsigned char
3ad0: 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20 28   *a, *b;.  a = (
3ae0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
3af0: 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28 75 6e  zLeft;.  b = (un
3b00: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 52  signed char *)zR
3b10: 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28 20 2a  ight;.  while( *
3b20: 61 21 3d 30 20 26 26 20 55 70 70 65 72 54 6f 4c  a!=0 && UpperToL
3b30: 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72 54  ower[*a]==UpperT
3b40: 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b  oLower[*b]){ a++
3b50: 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72  ; b++; }.  retur
3b60: 6e 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  n UpperToLower[*
3b70: 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65  a] - UpperToLowe
3b80: 72 5b 2a 62 5d 3b 0a 7d 0a 69 6e 74 20 73 71 6c  r[*b];.}.int sql
3b90: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e  ite3StrNICmp(con
3ba0: 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20  st char *zLeft, 
3bb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67  const char *zRig
3bc0: 68 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  ht, int N){.  re
3bd0: 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20  gister unsigned 
3be0: 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61  char *a, *b;.  a
3bf0: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
3c00: 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d  r *)zLeft;.  b =
3c10: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
3c20: 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68 69 6c  *)zRight;.  whil
3c30: 65 28 20 4e 2d 2d 20 3e 20 30 20 26 26 20 2a 61  e( N-- > 0 && *a
3c40: 21 3d 30 20 26 26 20 55 70 70 65 72 54 6f 4c 6f  !=0 && UpperToLo
3c50: 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f  wer[*a]==UpperTo
3c60: 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b  Lower[*b]){ a++;
3c70: 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e   b++; }.  return
3c80: 20 4e 3c 30 20 3f 20 30 20 3a 20 55 70 70 65 72   N<0 ? 0 : Upper
3c90: 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70  ToLower[*a] - Up
3ca0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a  perToLower[*b];.
3cb0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3cc0: 54 52 55 45 20 69 66 20 7a 20 69 73 20 61 20 70  TRUE if z is a p
3cd0: 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74 72 69  ure numeric stri
3ce0: 6e 67 2e 20 20 52 65 74 75 72 6e 20 46 41 4c 53  ng.  Return FALS
3cf0: 45 20 69 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  E if the.** stri
3d00: 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ng contains any 
3d10: 63 68 61 72 61 63 74 65 72 20 77 68 69 63 68 20  character which 
3d20: 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 61  is not part of a
3d30: 20 6e 75 6d 62 65 72 2e 20 49 66 0a 2a 2a 20 74   number. If.** t
3d40: 68 65 20 73 74 72 69 6e 67 20 69 73 20 6e 75 6d  he string is num
3d50: 65 72 69 63 20 61 6e 64 20 63 6f 6e 74 61 69 6e  eric and contain
3d60: 73 20 74 68 65 20 27 2e 27 20 63 68 61 72 61 63  s the '.' charac
3d70: 74 65 72 2c 20 73 65 74 20 2a 72 65 61 6c 6e 75  ter, set *realnu
3d80: 6d 0a 2a 2a 20 74 6f 20 54 52 55 45 20 28 6f 74  m.** to TRUE (ot
3d90: 68 65 72 77 69 73 65 20 46 41 4c 53 45 29 2e 0a  herwise FALSE)..
3da0: 2a 2a 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73  **.** An empty s
3db0: 74 72 69 6e 67 20 69 73 20 63 6f 6e 73 69 64 65  tring is conside
3dc0: 72 65 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 2e  red non-numeric.
3dd0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  .*/.int sqlite3I
3de0: 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20 63 68  sNumber(const ch
3df0: 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65 61 6c  ar *z, int *real
3e00: 6e 75 6d 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20  num, u8 enc){.  
3e10: 69 6e 74 20 69 6e 63 72 20 3d 20 28 65 6e 63 3d  int incr = (enc=
3e20: 3d 53 51 4c 49 54 45 5f 55 54 46 38 3f 31 3a 32  =SQLITE_UTF8?1:2
3e30: 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51  );.  if( enc==SQ
3e40: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 20 7a  LITE_UTF16BE ) z
3e50: 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d  ++;.  if( *z=='-
3e60: 27 20 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a  ' || *z=='+' ) z
3e70: 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66 28 20   += incr;.  if( 
3e80: 21 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a  !isdigit(*(u8*)z
3e90: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3ea0: 30 3b 0a 20 20 7d 0a 20 20 7a 20 2b 3d 20 69 6e  0;.  }.  z += in
3eb0: 63 72 3b 0a 20 20 69 66 28 20 72 65 61 6c 6e 75  cr;.  if( realnu
3ec0: 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 30  m ) *realnum = 0
3ed0: 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 64 69 67  ;.  while( isdig
3ee0: 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 20 7a  it(*(u8*)z) ){ z
3ef0: 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20 69 66   += incr; }.  if
3f00: 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  ( *z=='.' ){.   
3f10: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20   z += incr;.    
3f20: 69 66 28 20 21 69 73 64 69 67 69 74 28 2a 28 75  if( !isdigit(*(u
3f30: 38 2a 29 7a 29 20 29 20 72 65 74 75 72 6e 20 30  8*)z) ) return 0
3f40: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73 64  ;.    while( isd
3f50: 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b  igit(*(u8*)z) ){
3f60: 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20   z += incr; }.  
3f70: 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20    if( realnum ) 
3f80: 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20  *realnum = 1;.  
3f90: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27 20  }.  if( *z=='e' 
3fa0: 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20 20  || *z=='E' ){.  
3fb0: 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20    z += incr;.   
3fc0: 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c 7c 20   if( *z=='+' || 
3fd0: 2a 7a 3d 3d 27 2d 27 20 29 20 7a 20 2b 3d 20 69  *z=='-' ) z += i
3fe0: 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21 69 73  ncr;.    if( !is
3ff0: 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29  digit(*(u8*)z) )
4000: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77   return 0;.    w
4010: 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28  hile( isdigit(*(
4020: 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20 69  u8*)z) ){ z += i
4030: 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72  ncr; }.    if( r
4040: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
4050: 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  m = 1;.  }.  ret
4060: 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a  urn *z==0;.}../*
4070: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a  .** The string z
4080: 5b 5d 20 69 73 20 61 6e 20 61 73 63 69 69 20 72  [] is an ascii r
4090: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
40a0: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2e 0a   a real number..
40b0: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 69 73 20  ** Convert this 
40c0: 73 74 72 69 6e 67 20 74 6f 20 61 20 64 6f 75 62  string to a doub
40d0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  le..**.** This r
40e0: 6f 75 74 69 6e 65 20 61 73 73 75 6d 65 73 20 74  outine assumes t
40f0: 68 61 74 20 7a 5b 5d 20 72 65 61 6c 6c 79 20 69  hat z[] really i
4100: 73 20 61 20 76 61 6c 69 64 20 6e 75 6d 62 65 72  s a valid number
4110: 2e 20 20 49 66 20 69 74 0a 2a 2a 20 69 73 20 6e  .  If it.** is n
4120: 6f 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ot, the result i
4130: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
4140: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
4150: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20  is used instead 
4160: 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 61  of the library a
4170: 74 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 62  tof() function b
4180: 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 6c 69  ecause.** the li
4190: 62 72 61 72 79 20 61 74 6f 66 28 29 20 6d 69 67  brary atof() mig
41a0: 68 74 20 77 61 6e 74 20 74 6f 20 75 73 65 20 22  ht want to use "
41b0: 2c 22 20 61 73 20 74 68 65 20 64 65 63 69 6d 61  ," as the decima
41c0: 6c 20 70 6f 69 6e 74 20 69 6e 73 74 65 61 64 0a  l point instead.
41d0: 2a 2a 20 6f 66 20 22 2e 22 20 64 65 70 65 6e 64  ** of "." depend
41e0: 69 6e 67 20 6f 6e 20 68 6f 77 20 6c 6f 63 61 6c  ing on how local
41f0: 65 20 69 73 20 73 65 74 2e 20 20 42 75 74 20 74  e is set.  But t
4200: 68 61 74 20 77 6f 75 6c 64 20 63 61 75 73 65 20  hat would cause 
4210: 70 72 6f 62 6c 65 6d 73 0a 2a 2a 20 66 6f 72 20  problems.** for 
4220: 53 51 4c 2e 20 20 53 6f 20 74 68 69 73 20 72 6f  SQL.  So this ro
4230: 75 74 69 6e 65 20 61 6c 77 61 79 73 20 75 73 65  utine always use
4240: 73 20 22 2e 22 20 72 65 67 61 72 64 6c 65 73 73  s "." regardless
4250: 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 69   of locale..*/.i
4260: 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
4270: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
4280: 75 62 6c 65 20 2a 70 52 65 73 75 6c 74 29 7b 0a  uble *pResult){.
4290: 20 20 69 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a    int sign = 1;.
42a0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42    const char *zB
42b0: 65 67 69 6e 20 3d 20 7a 3b 0a 20 20 4c 4f 4e 47  egin = z;.  LONG
42c0: 44 4f 55 42 4c 45 5f 54 59 50 45 20 76 31 20 3d  DOUBLE_TYPE v1 =
42d0: 20 30 2e 30 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d   0.0;.  if( *z==
42e0: 27 2d 27 20 29 7b 0a 20 20 20 20 73 69 67 6e 20  '-' ){.    sign 
42f0: 3d 20 2d 31 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  = -1;.    z++;. 
4300: 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27   }else if( *z=='
4310: 2b 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  +' ){.    z++;. 
4320: 20 7d 0a 20 20 77 68 69 6c 65 28 20 69 73 64 69   }.  while( isdi
4330: 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a  git(*(u8*)z) ){.
4340: 20 20 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30      v1 = v1*10.0
4350: 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20   + (*z - '0');. 
4360: 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66     z++;.  }.  if
4370: 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  ( *z=='.' ){.   
4380: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4390: 20 64 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b 0a   divisor = 1.0;.
43a0: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 77 68 69      z++;.    whi
43b0: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28 75 38  le( isdigit(*(u8
43c0: 2a 29 7a 29 20 29 7b 0a 20 20 20 20 20 20 76 31  *)z) ){.      v1
43d0: 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a 7a   = v1*10.0 + (*z
43e0: 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 20 20 64   - '0');.      d
43f0: 69 76 69 73 6f 72 20 2a 3d 20 31 30 2e 30 3b 0a  ivisor *= 10.0;.
4400: 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d        z++;.    }
4410: 0a 20 20 20 20 76 31 20 2f 3d 20 64 69 76 69 73  .    v1 /= divis
4420: 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a  or;.  }.  if( *z
4430: 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27  =='e' || *z=='E'
4440: 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 73 69 67   ){.    int esig
4450: 6e 20 3d 20 31 3b 0a 20 20 20 20 69 6e 74 20 65  n = 1;.    int e
4460: 76 61 6c 20 3d 20 30 3b 0a 20 20 20 20 4c 4f 4e  val = 0;.    LON
4470: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 63 61  GDOUBLE_TYPE sca
4480: 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b  le = 1.0;.    z+
4490: 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27  +;.    if( *z=='
44a0: 2d 27 20 29 7b 0a 20 20 20 20 20 20 65 73 69 67  -' ){.      esig
44b0: 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7a 2b  n = -1;.      z+
44c0: 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  +;.    }else if(
44d0: 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20   *z=='+' ){.    
44e0: 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20    z++;.    }.   
44f0: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
4500: 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20  *(u8*)z) ){.    
4510: 20 20 65 76 61 6c 20 3d 20 65 76 61 6c 2a 31 30    eval = eval*10
4520: 20 2b 20 2a 7a 20 2d 20 27 30 27 3b 0a 20 20 20   + *z - '0';.   
4530: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
4540: 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 36    while( eval>=6
4550: 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e  4 ){ scale *= 1.
4560: 30 65 2b 36 34 3b 20 65 76 61 6c 20 2d 3d 20 36  0e+64; eval -= 6
4570: 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20  4; }.    while( 
4580: 65 76 61 6c 3e 3d 31 36 20 29 7b 20 73 63 61 6c  eval>=16 ){ scal
4590: 65 20 2a 3d 20 31 2e 30 65 2b 31 36 3b 20 65 76  e *= 1.0e+16; ev
45a0: 61 6c 20 2d 3d 20 31 36 3b 20 7d 0a 20 20 20 20  al -= 16; }.    
45b0: 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 34 20 29  while( eval>=4 )
45c0: 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b  { scale *= 1.0e+
45d0: 34 3b 20 65 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a  4; eval -= 4; }.
45e0: 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e      while( eval>
45f0: 3d 31 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  =1 ){ scale *= 1
4600: 2e 30 65 2b 31 3b 20 65 76 61 6c 20 2d 3d 20 31  .0e+1; eval -= 1
4610: 3b 20 7d 0a 20 20 20 20 69 66 28 20 65 73 69 67  ; }.    if( esig
4620: 6e 3c 30 20 29 7b 0a 20 20 20 20 20 20 76 31 20  n<0 ){.      v1 
4630: 2f 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 65  /= scale;.    }e
4640: 6c 73 65 7b 0a 20 20 20 20 20 20 76 31 20 2a 3d  lse{.      v1 *=
4650: 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 0a 20 20   scale;.    }.  
4660: 7d 0a 20 20 2a 70 52 65 73 75 6c 74 20 3d 20 73  }.  *pResult = s
4670: 69 67 6e 3c 30 20 3f 20 2d 76 31 20 3a 20 76 31  ign<0 ? -v1 : v1
4680: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 20 2d 20 7a  ;.  return z - z
4690: 42 65 67 69 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Begin;.}../*.** 
46a0: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a  Return TRUE if z
46b0: 4e 75 6d 20 69 73 20 61 20 36 34 2d 62 69 74 20  Num is a 64-bit 
46c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
46d0: 6e 64 20 77 72 69 74 65 0a 2a 2a 20 74 68 65 20  nd write.** the 
46e0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
46f0: 65 67 65 72 20 69 6e 74 6f 20 2a 70 4e 75 6d 2e  eger into *pNum.
4700: 20 20 49 66 20 7a 4e 75 6d 20 69 73 20 6e 6f 74    If zNum is not
4710: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6f   an integer.** o
4720: 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  r is an integer 
4730: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
4740: 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65  e to be expresse
4750: 64 20 77 69 74 68 20 36 34 20 62 69 74 73 2c 0a  d with 64 bits,.
4760: 2a 2a 20 74 68 65 6e 20 72 65 74 75 72 6e 20 66  ** then return f
4770: 61 6c 73 65 2e 20 20 49 66 20 6e 3e 30 20 61 6e  alse.  If n>0 an
4780: 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73  d the integer is
4790: 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 0a 2a   string is not.*
47a0: 2a 20 65 78 61 63 74 6c 79 20 6e 20 62 79 74 65  * exactly n byte
47b0: 73 20 6c 6f 6e 67 2c 20 72 65 74 75 72 6e 20 66  s long, return f
47c0: 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  alse..**.** When
47d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61   this routine wa
47e0: 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 77 72 69  s originally wri
47f0: 74 74 65 6e 20 69 74 20 64 65 61 6c 74 20 77 69  tten it dealt wi
4800: 74 68 20 6f 6e 6c 79 0a 2a 2a 20 33 32 2d 62 69  th only.** 32-bi
4810: 74 20 6e 75 6d 62 65 72 73 2e 20 20 41 74 20 74  t numbers.  At t
4820: 68 61 74 20 74 69 6d 65 2c 20 69 74 20 77 61 73  hat time, it was
4830: 20 6d 75 63 68 20 66 61 73 74 65 72 20 74 68 61   much faster tha
4840: 6e 20 74 68 65 0a 2a 2a 20 61 74 6f 69 28 29 20  n the.** atoi() 
4850: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
4860: 69 6e 20 52 65 64 48 61 74 20 37 2e 32 2e 0a 2a  in RedHat 7.2..*
4870: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 61 74 6f  /.int sqlite3ato
4880: 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  i64(const char *
4890: 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 4e 75 6d 29  zNum, i64 *pNum)
48a0: 7b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20  {.  i64 v = 0;. 
48b0: 20 69 6e 74 20 6e 65 67 3b 0a 20 20 69 6e 74 20   int neg;.  int 
48c0: 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75  i, c;.  if( *zNu
48d0: 6d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65  m=='-' ){.    ne
48e0: 67 20 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b  g = 1;.    zNum+
48f0: 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  +;.  }else if( *
4900: 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  zNum=='+' ){.   
4910: 20 6e 65 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e   neg = 0;.    zN
4920: 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  um++;.  }else{. 
4930: 20 20 20 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a     neg = 0;.  }.
4940: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e    for(i=0; (c=zN
4950: 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63  um[i])>='0' && c
4960: 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20  <='9'; i++){.   
4970: 20 76 20 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20   v = v*10 + c - 
4980: 27 30 27 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d  '0';.  }.  *pNum
4990: 20 3d 20 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b   = neg ? -v : v;
49a0: 0a 20 20 72 65 74 75 72 6e 20 63 3d 3d 30 20 26  .  return c==0 &
49b0: 26 20 69 3e 30 20 26 26 20 0a 20 20 20 20 20 20  & i>0 && .      
49c0: 28 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20  (i<19 || (i==19 
49d0: 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22  && memcmp(zNum,"
49e0: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
49f0: 38 30 37 22 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d  807",19)<=0));.}
4a00: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ../*.** The stri
4a10: 6e 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  ng zNum represen
4a20: 74 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  ts an integer.  
4a30: 54 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 73  There might be s
4a40: 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66  ome other.** inf
4a50: 6f 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69  ormation followi
4a60: 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 74  ng the integer t
4a70: 6f 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61 72  oo, but that par
4a80: 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a  t is ignored..**
4a90: 20 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   If the integer 
4aa0: 74 68 61 74 20 74 68 65 20 70 72 65 66 69 78 20  that the prefix 
4ab0: 6f 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  of zNum represen
4ac0: 74 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61  ts will fit in a
4ad0: 0a 2a 2a 20 33 32 2d 62 69 74 20 73 69 67 6e 65  .** 32-bit signe
4ae0: 64 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72  d integer, retur
4af0: 6e 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69  n TRUE.  Otherwi
4b00: 73 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e  se return FALSE.
4b10: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
4b20: 69 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53  ine returns FALS
4b30: 45 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67  E for the string
4b40: 20 2d 32 31 34 37 34 38 33 36 34 38 20 65 76 65   -2147483648 eve
4b50: 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e  n that.** that n
4b60: 75 6d 62 65 72 20 77 69 6c 6c 20 69 6e 20 66 61  umber will in fa
4b70: 63 74 20 66 69 74 20 69 6e 20 61 20 33 32 2d 62  ct fit in a 32-b
4b80: 69 74 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  it integer.  But
4b90: 20 70 6f 73 69 74 69 76 65 0a 2a 2a 20 32 31 34   positive.** 214
4ba0: 37 34 38 33 36 34 38 20 77 69 6c 6c 20 6e 6f 74  7483648 will not
4bb0: 20 66 69 74 20 69 6e 20 33 32 20 62 69 74 73 2e   fit in 32 bits.
4bc0: 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61    So it seems sa
4bd0: 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a  fer to return.**
4be0: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69   false..*/.stati
4bf0: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74  c int sqlite3Fit
4c00: 73 49 6e 33 32 42 69 74 73 28 63 6f 6e 73 74 20  sIn32Bits(const 
4c10: 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69  char *zNum){.  i
4c20: 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a  nt i, c;.  if( *
4c30: 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e  zNum=='-' || *zN
4c40: 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b  um=='+' ) zNum++
4c50: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d  ;.  for(i=0; (c=
4c60: 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26  zNum[i])>='0' &&
4c70: 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a   c<='9'; i++){}.
4c80: 20 20 72 65 74 75 72 6e 20 69 3c 31 30 20 7c 7c    return i<10 ||
4c90: 20 28 69 3d 3d 31 30 20 26 26 20 6d 65 6d 63 6d   (i==10 && memcm
4ca0: 70 28 7a 4e 75 6d 2c 22 32 31 34 37 34 38 33 36  p(zNum,"21474836
4cb0: 34 37 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d 0a 0a  47",10)<=0);.}..
4cc0: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
4cd0: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
4ce0: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
4cf0: 74 20 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68  t in 32-bits, th
4d00: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
4d10: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
4d20: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
4d30: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
4d40: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69  turn false..*/.i
4d50: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
4d60: 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  32(const char *z
4d70: 4e 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75 65  Num, int *pValue
4d80: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
4d90: 46 69 74 73 49 6e 33 32 42 69 74 73 28 7a 4e 75  FitsIn32Bits(zNu
4da0: 6d 29 20 29 7b 0a 20 20 20 20 2a 70 56 61 6c 75  m) ){.    *pValu
4db0: 65 20 3d 20 61 74 6f 69 28 7a 4e 75 6d 29 3b 0a  e = atoi(zNum);.
4dc0: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
4dd0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4de0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  ./*.** The strin
4df0: 67 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  g zNum represent
4e00: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54  s an integer.  T
4e10: 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f  here might be so
4e20: 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f  me other.** info
4e30: 72 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e  rmation followin
4e40: 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f  g the integer to
4e50: 6f 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74  o, but that part
4e60: 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20   is ignored..** 
4e70: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74  If the integer t
4e80: 68 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  hat the prefix o
4e90: 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  f zNum represent
4ea0: 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a  s will fit in a.
4eb0: 2a 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  ** 64-bit signed
4ec0: 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e   integer, return
4ed0: 20 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73   TRUE.  Otherwis
4ee0: 65 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a  e return FALSE..
4ef0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
4f00: 6e 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45  ne returns FALSE
4f10: 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20   for the string 
4f20: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
4f30: 35 38 30 38 20 65 76 65 6e 20 74 68 61 74 0a 2a  5808 even that.*
4f40: 2a 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69  * that number wi
4f50: 6c 6c 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69  ll, in theory fi
4f60: 74 20 69 6e 20 61 20 36 34 2d 62 69 74 20 69 6e  t in a 64-bit in
4f70: 74 65 67 65 72 2e 20 20 50 6f 73 69 74 69 76 65  teger.  Positive
4f80: 0a 2a 2a 20 39 32 32 33 33 37 33 30 33 36 38 35  .** 922337303685
4f90: 34 37 37 35 38 30 38 20 77 69 6c 6c 20 6e 6f 74  4775808 will not
4fa0: 20 66 69 74 20 69 6e 20 36 34 20 62 69 74 73 2e   fit in 64 bits.
4fb0: 20 20 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61    So it seems sa
4fc0: 66 65 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a  fer to return.**
4fd0: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73   false..*/.int s
4fe0: 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
4ff0: 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ts(const char *z
5000: 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63  Num){.  int i, c
5010: 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27  ;.  if( *zNum=='
5020: 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  -' || *zNum=='+'
5030: 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72   ) zNum++;.  for
5040: 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d  (i=0; (c=zNum[i]
5050: 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  )>='0' && c<='9'
5060: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72  ; i++){}.  retur
5070: 6e 20 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39  n i<19 || (i==19
5080: 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c   && memcmp(zNum,
5090: 22 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  "922337203685477
50a0: 35 38 30 37 22 2c 31 39 29 3c 3d 30 29 3b 0a 7d  5807",19)<=0);.}
50b0: 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  .../*.** Change 
50c0: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
50d0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47   from SQLITE_MAG
50e0: 49 43 5f 4f 50 45 4e 20 74 6f 20 53 51 4c 49 54  IC_OPEN to SQLIT
50f0: 45 5f 4d 41 47 49 43 5f 42 55 53 59 2e 0a 2a 2a  E_MAGIC_BUSY..**
5100: 20 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   Return an error
5110: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
5120: 68 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74  he magic was not
5130: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
5140: 45 4e 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20  EN.** when this 
5150: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
5160: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  d..**.** This ro
5170: 75 74 69 6e 65 20 69 73 20 61 20 61 74 74 65 6d  utine is a attem
5180: 70 74 20 74 6f 20 64 65 74 65 63 74 20 69 66 20  pt to detect if 
5190: 74 77 6f 20 74 68 72 65 61 64 73 20 75 73 65 20  two threads use 
51a0: 74 68 65 0a 2a 2a 20 73 61 6d 65 20 73 71 6c 69  the.** same sqli
51b0: 74 65 2a 20 70 6f 69 6e 74 65 72 20 61 74 20 74  te* pointer at t
51c0: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 20 20 54  he same time.  T
51d0: 68 65 72 65 20 69 73 20 61 20 72 61 63 65 20 0a  here is a race .
51e0: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 20 73 6f 20  ** condition so 
51f0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
5200: 68 61 74 20 74 68 65 20 65 72 72 6f 72 20 69 73  hat the error is
5210: 20 6e 6f 74 20 64 65 74 65 63 74 65 64 2e 0a 2a   not detected..*
5220: 2a 20 42 75 74 20 75 73 75 61 6c 6c 79 20 74 68  * But usually th
5230: 65 20 70 72 6f 62 6c 65 6d 20 77 69 6c 6c 20 62  e problem will b
5240: 65 20 73 65 65 6e 2e 20 20 54 68 65 20 72 65 73  e seen.  The res
5250: 75 6c 74 20 77 69 6c 6c 20 62 65 20 61 6e 0a 2a  ult will be an.*
5260: 2a 20 65 72 72 6f 72 20 77 68 69 63 68 20 63 61  * error which ca
5270: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 62  n be used to deb
5280: 75 67 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  ug the applicati
5290: 6f 6e 20 74 68 61 74 20 69 73 0a 2a 2a 20 75 73  on that is.** us
52a0: 69 6e 67 20 53 51 4c 69 74 65 20 69 6e 63 6f 72  ing SQLite incor
52b0: 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 69  rectly..**.** Ti
52c0: 63 6b 65 74 20 23 32 30 32 3a 20 20 49 66 20 64  cket #202:  If d
52d0: 62 2d 3e 6d 61 67 69 63 20 69 73 20 6e 6f 74 20  b->magic is not 
52e0: 61 20 76 61 6c 69 64 20 6f 70 65 6e 20 76 61 6c  a valid open val
52f0: 75 65 2c 20 74 61 6b 65 20 63 61 72 65 20 6e 6f  ue, take care no
5300: 74 0a 2a 2a 20 74 6f 20 6d 6f 64 69 66 79 20 74  t.** to modify t
5310: 68 65 20 64 62 20 73 74 72 75 63 74 75 72 65 20  he db structure 
5320: 61 74 20 61 6c 6c 2e 20 20 49 74 20 63 6f 75 6c  at all.  It coul
5330: 64 20 62 65 20 74 68 61 74 20 64 62 20 69 73 20  d be that db is 
5340: 61 20 73 74 61 6c 65 0a 2a 2a 20 70 6f 69 6e 74  a stale.** point
5350: 65 72 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  er.  In other wo
5360: 72 64 73 2c 20 69 74 20 63 6f 75 6c 64 20 62 65  rds, it could be
5370: 20 74 68 61 74 20 74 68 65 72 65 20 68 61 73 20   that there has 
5380: 62 65 65 6e 20 61 20 70 72 69 6f 72 0a 2a 2a 20  been a prior.** 
5390: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
53a0: 63 6c 6f 73 65 28 64 62 29 20 61 6e 64 20 64 62  close(db) and db
53b0: 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f   has been deallo
53c0: 63 61 74 65 64 2e 20 20 41 6e 64 20 77 65 20 64  cated.  And we d
53d0: 6f 0a 2a 2a 20 6e 6f 74 20 77 61 6e 74 20 74 6f  o.** not want to
53e0: 20 77 72 69 74 65 20 69 6e 74 6f 20 64 65 61 6c   write into deal
53f0: 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 2e 0a  located memory..
5400: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  */.int sqlite3Sa
5410: 66 65 74 79 4f 6e 28 73 71 6c 69 74 65 33 20 2a  fetyOn(sqlite3 *
5420: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  db){.  if( db->m
5430: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
5440: 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20 20 64  IC_OPEN ){.    d
5450: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
5460: 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20  E_MAGIC_BUSY;.  
5470: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
5480: 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69  lse if( db->magi
5490: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
54a0: 42 55 53 59 20 29 7b 0a 20 20 20 20 64 62 2d 3e  BUSY ){.    db->
54b0: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
54c0: 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20  AGIC_ERROR;.    
54d0: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
54e0: 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20  ITE_Interrupt;. 
54f0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
5500: 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  ../*.** Change t
5510: 68 65 20 6d 61 67 69 63 20 66 72 6f 6d 20 53 51  he magic from SQ
5520: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
5530: 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  to SQLITE_MAGIC_
5540: 4f 50 45 4e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  OPEN..** Return 
5550: 61 6e 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65  an error (non-ze
5560: 72 6f 29 20 69 66 20 74 68 65 20 6d 61 67 69 63  ro) if the magic
5570: 20 77 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f   was not SQLITE_
5580: 4d 41 47 49 43 5f 42 55 53 59 0a 2a 2a 20 77 68  MAGIC_BUSY.** wh
5590: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
55a0: 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 69 6e  is called..*/.in
55b0: 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  t sqlite3SafetyO
55c0: 66 66 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  ff(sqlite3 *db){
55d0: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  .  if( db->magic
55e0: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  ==SQLITE_MAGIC_B
55f0: 55 53 59 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  USY ){.    db->m
5600: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
5610: 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 20 20 72 65  GIC_OPEN;.    re
5620: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
5630: 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  if( db->magic==S
5640: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
5650: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
5660: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
5670: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62 2d 3e  _ERROR;.    db->
5680: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
5690: 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  Interrupt;.  }. 
56a0: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
56b0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 6d 61 6b  .** Check to mak
56c0: 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20 61  e sure we have a
56d0: 20 76 61 6c 69 64 20 64 62 20 70 6f 69 6e 74 65   valid db pointe
56e0: 72 2e 20 20 54 68 69 73 20 74 65 73 74 20 69 73  r.  This test is
56f0: 20 6e 6f 74 0a 2a 2a 20 66 6f 6f 6c 70 72 6f 6f   not.** foolproo
5700: 66 20 62 75 74 20 69 74 20 64 6f 65 73 20 70 72  f but it does pr
5710: 6f 76 69 64 65 20 73 6f 6d 65 20 6d 65 61 73 75  ovide some measu
5720: 72 65 20 6f 66 20 70 72 6f 74 65 63 74 69 6f 6e  re of protection
5730: 20 61 67 61 69 6e 73 74 0a 2a 2a 20 6d 69 73 75   against.** misu
5740: 73 65 20 6f 66 20 74 68 65 20 69 6e 74 65 72 66  se of the interf
5750: 61 63 65 20 73 75 63 68 20 61 73 20 70 61 73 73  ace such as pass
5760: 69 6e 67 20 69 6e 20 64 62 20 70 6f 69 6e 74 65  ing in db pointe
5770: 72 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 4e  rs that are.** N
5780: 55 4c 4c 20 6f 72 20 77 68 69 63 68 20 68 61 76  ULL or which hav
5790: 65 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c  e been previousl
57a0: 79 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  y closed.  If th
57b0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
57c0: 6e 73 0a 2a 2a 20 54 52 55 45 20 69 74 20 6d 65  ns.** TRUE it me
57d0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 64 62 20  ans that the db 
57e0: 70 6f 69 6e 74 65 72 20 69 73 20 69 6e 76 61 6c  pointer is inval
57f0: 69 64 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f  id and should no
5800: 74 20 62 65 0a 2a 2a 20 64 65 72 65 66 65 72 65  t be.** derefere
5810: 6e 63 65 64 20 66 6f 72 20 61 6e 79 20 72 65 61  nced for any rea
5820: 73 6f 6e 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e  son.  The callin
5830: 67 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  g function shoul
5840: 64 20 69 6e 76 6f 6b 65 0a 2a 2a 20 53 51 4c 49  d invoke.** SQLI
5850: 54 45 5f 4d 49 53 55 53 45 20 69 6d 6d 65 64 69  TE_MISUSE immedi
5860: 61 74 65 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ately..*/.int sq
5870: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
5880: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
5890: 20 69 6e 74 20 6d 61 67 69 63 3b 0a 20 20 69 66   int magic;.  if
58a0: 28 20 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e  ( db==0 ) return
58b0: 20 31 3b 0a 20 20 6d 61 67 69 63 20 3d 20 64 62   1;.  magic = db
58c0: 2d 3e 6d 61 67 69 63 3b 0a 20 20 69 66 28 20 6d  ->magic;.  if( m
58d0: 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47  agic!=SQLITE_MAG
58e0: 49 43 5f 43 4c 4f 53 45 44 20 26 26 0a 20 20 20  IC_CLOSED &&.   
58f0: 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53 51 4c        magic!=SQL
5900: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 26  ITE_MAGIC_OPEN &
5910: 26 0a 20 20 20 20 20 20 20 20 20 6d 61 67 69 63  &.         magic
5920: 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  !=SQLITE_MAGIC_B
5930: 55 53 59 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  USY ) return 1;.
5940: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
5950: 2a 0a 2a 2a 20 54 68 65 20 76 61 72 69 61 62 6c  *.** The variabl
5960: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
5970: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 61 73 20   encoding is as 
5980: 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b  follows:.**.** K
5990: 45 59 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 41  EY:.**         A
59a0: 20 3d 20 30 78 78 78 78 78 78 78 20 20 20 20 37   = 0xxxxxxx    7
59b0: 20 62 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e   bits of data an
59c0: 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a  d one flag bit.*
59d0: 2a 20 20 20 20 20 20 20 20 20 42 20 3d 20 31 78  *         B = 1x
59e0: 78 78 78 78 78 78 20 20 20 20 37 20 62 69 74 73  xxxxxx    7 bits
59f0: 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65   of data and one
5a00: 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20   flag bit.**    
5a10: 20 20 20 20 20 43 20 3d 20 78 78 78 78 78 78 78       C = xxxxxxx
5a20: 78 20 20 20 20 38 20 62 69 74 73 20 6f 66 20 64  x    8 bits of d
5a30: 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69 74  ata.**.**  7 bit
5a40: 73 20 2d 20 41 0a 2a 2a 20 31 34 20 62 69 74 73  s - A.** 14 bits
5a50: 20 2d 20 42 41 0a 2a 2a 20 32 31 20 62 69 74 73   - BA.** 21 bits
5a60: 20 2d 20 42 42 41 0a 2a 2a 20 32 38 20 62 69 74   - BBA.** 28 bit
5a70: 73 20 2d 20 42 42 42 41 0a 2a 2a 20 33 35 20 62  s - BBBA.** 35 b
5a80: 69 74 73 20 2d 20 42 42 42 42 41 0a 2a 2a 20 34  its - BBBBA.** 4
5a90: 32 20 62 69 74 73 20 2d 20 42 42 42 42 42 41 0a  2 bits - BBBBBA.
5aa0: 2a 2a 20 34 39 20 62 69 74 73 20 2d 20 42 42 42  ** 49 bits - BBB
5ab0: 42 42 42 41 0a 2a 2a 20 35 36 20 62 69 74 73 20  BBBA.** 56 bits 
5ac0: 2d 20 42 42 42 42 42 42 42 41 0a 2a 2a 20 36 34  - BBBBBBBA.** 64
5ad0: 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42 42   bits - BBBBBBBB
5ae0: 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74  C.*/../*.** Writ
5af0: 65 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61  e a 64-bit varia
5b00: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
5b10: 65 72 20 74 6f 20 6d 65 6d 6f 72 79 20 73 74 61  er to memory sta
5b20: 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a  rting at p[0]..*
5b30: 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
5b40: 64 61 74 61 20 77 72 69 74 65 20 77 69 6c 6c 20  data write will 
5b50: 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
5b60: 20 39 20 62 79 74 65 73 2e 20 20 54 68 65 20 6e   9 bytes.  The n
5b70: 75 6d 62 65 72 0a 2a 2a 20 6f 66 20 62 79 74 65  umber.** of byte
5b80: 73 20 77 72 69 74 74 65 6e 20 69 73 20 72 65 74  s written is ret
5b90: 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76  urned..**.** A v
5ba0: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
5bb0: 6e 74 65 67 65 72 20 63 6f 6e 73 69 73 74 73 20  nteger consists 
5bc0: 6f 66 20 74 68 65 20 6c 6f 77 65 72 20 37 20 62  of the lower 7 b
5bd0: 69 74 73 20 6f 66 20 65 61 63 68 20 62 79 74 65  its of each byte
5be0: 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20 62 79 74 65  .** for all byte
5bf0: 73 20 74 68 61 74 20 68 61 76 65 20 74 68 65 20  s that have the 
5c00: 38 74 68 20 62 69 74 20 73 65 74 20 61 6e 64 20  8th bit set and 
5c10: 6f 6e 65 20 62 79 74 65 20 77 69 74 68 20 74 68  one byte with th
5c20: 65 20 38 74 68 0a 2a 2a 20 62 69 74 20 63 6c 65  e 8th.** bit cle
5c30: 61 72 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ar.  Except, if 
5c40: 77 65 20 67 65 74 20 74 6f 20 74 68 65 20 39 74  we get to the 9t
5c50: 68 20 62 79 74 65 2c 20 69 74 20 73 74 6f 72 65  h byte, it store
5c60: 73 20 74 68 65 20 66 75 6c 6c 0a 2a 2a 20 38 20  s the full.** 8 
5c70: 62 69 74 73 20 61 6e 64 20 69 73 20 74 68 65 20  bits and is the 
5c80: 6c 61 73 74 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e  last byte..*/.in
5c90: 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
5ca0: 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
5cb0: 20 2a 70 2c 20 75 36 34 20 76 29 7b 0a 20 20 69   *p, u64 v){.  i
5cc0: 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38  nt i, j, n;.  u8
5cd0: 20 62 75 66 5b 31 30 5d 3b 0a 20 20 69 66 28 20   buf[10];.  if( 
5ce0: 76 20 26 20 28 28 28 75 36 34 29 30 78 66 66 30  v & (((u64)0xff0
5cf0: 30 30 30 30 30 29 3c 3c 33 32 29 20 29 7b 0a 20  00000)<<32) ){. 
5d00: 20 20 20 70 5b 38 5d 20 3d 20 76 3b 0a 20 20 20     p[8] = v;.   
5d10: 20 76 20 3e 3e 3d 20 38 3b 0a 20 20 20 20 66 6f   v >>= 8;.    fo
5d20: 72 28 69 3d 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d  r(i=7; i>=0; i--
5d30: 29 7b 0a 20 20 20 20 20 20 70 5b 69 5d 20 3d 20  ){.      p[i] = 
5d40: 28 76 20 26 20 30 78 37 66 29 20 7c 20 30 78 38  (v & 0x7f) | 0x8
5d50: 30 3b 0a 20 20 20 20 20 20 76 20 3e 3e 3d 20 37  0;.      v >>= 7
5d60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
5d70: 72 6e 20 39 3b 0a 20 20 7d 20 20 20 20 0a 20 20  rn 9;.  }    .  
5d80: 6e 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  n = 0;.  do{.   
5d90: 20 62 75 66 5b 6e 2b 2b 5d 20 3d 20 28 76 20 26   buf[n++] = (v &
5da0: 20 30 78 37 66 29 20 7c 20 30 78 38 30 3b 0a 20   0x7f) | 0x80;. 
5db0: 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77     v >>= 7;.  }w
5dc0: 68 69 6c 65 28 20 76 21 3d 30 20 29 3b 0a 20 20  hile( v!=0 );.  
5dd0: 62 75 66 5b 30 5d 20 26 3d 20 30 78 37 66 3b 0a  buf[0] &= 0x7f;.
5de0: 20 20 61 73 73 65 72 74 28 20 6e 3c 3d 39 20 29    assert( n<=9 )
5df0: 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 6a 3d 6e  ;.  for(i=0, j=n
5e00: 2d 31 3b 20 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20 69  -1; j>=0; j--, i
5e10: 2b 2b 29 7b 0a 20 20 20 20 70 5b 69 5d 20 3d 20  ++){.    p[i] = 
5e20: 62 75 66 5b 6a 5d 3b 0a 20 20 7d 0a 20 20 72 65  buf[j];.  }.  re
5e30: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
5e40: 20 52 65 61 64 20 61 20 36 34 2d 62 69 74 20 76   Read a 64-bit v
5e50: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
5e60: 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f  nteger from memo
5e70: 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70  ry starting at p
5e80: 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  [0]..** Return t
5e90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
5ea0: 65 73 20 72 65 61 64 2e 20 20 54 68 65 20 76 61  es read.  The va
5eb0: 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  lue is stored in
5ec0: 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69   *v..*/.int sqli
5ed0: 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
5ee0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
5ef0: 20 2a 70 2c 20 75 36 34 20 2a 76 29 7b 0a 20 20   *p, u64 *v){.  
5f00: 75 33 32 20 78 3b 0a 20 20 75 36 34 20 78 36 34  u32 x;.  u64 x64
5f10: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75 6e 73  ;.  int n;.  uns
5f20: 69 67 6e 65 64 20 63 68 61 72 20 63 3b 0a 20 20  igned char c;.  
5f30: 69 66 28 20 28 28 63 20 3d 20 70 5b 30 5d 29 20  if( ((c = p[0]) 
5f40: 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20  & 0x80)==0 ){.  
5f50: 20 20 2a 76 20 3d 20 63 3b 0a 20 20 20 20 72 65    *v = c;.    re
5f60: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20  turn 1;.  }.  x 
5f70: 3d 20 63 20 26 20 30 78 37 66 3b 0a 20 20 69 66  = c & 0x7f;.  if
5f80: 28 20 28 28 63 20 3d 20 70 5b 31 5d 29 20 26 20  ( ((c = p[1]) & 
5f90: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
5fa0: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
5fb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20  .    return 2;. 
5fc0: 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20   }.  x = (x<<7) 
5fd0: 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 69 66  | (c&0x7f);.  if
5fe0: 28 20 28 28 63 20 3d 20 70 5b 32 5d 29 20 26 20  ( ((c = p[2]) & 
5ff0: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
6000: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
6010: 0a 20 20 20 20 72 65 74 75 72 6e 20 33 3b 0a 20  .    return 3;. 
6020: 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20   }.  x = (x<<7) 
6030: 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 69 66  | (c&0x7f);.  if
6040: 28 20 28 28 63 20 3d 20 70 5b 33 5d 29 20 26 20  ( ((c = p[3]) & 
6050: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
6060: 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b  *v = (x<<7) | c;
6070: 0a 20 20 20 20 72 65 74 75 72 6e 20 34 3b 0a 20  .    return 4;. 
6080: 20 7d 0a 20 20 78 36 34 20 3d 20 28 78 3c 3c 37   }.  x64 = (x<<7
6090: 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20  ) | (c&0x7f);.  
60a0: 6e 20 3d 20 34 3b 0a 20 20 64 6f 7b 0a 20 20 20  n = 4;.  do{.   
60b0: 20 63 20 3d 20 70 5b 6e 2b 2b 5d 3b 0a 20 20 20   c = p[n++];.   
60c0: 20 69 66 28 20 6e 3d 3d 39 20 29 7b 0a 20 20 20   if( n==9 ){.   
60d0: 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c 3c 38     x64 = (x64<<8
60e0: 29 20 7c 20 63 3b 0a 20 20 20 20 20 20 62 72 65  ) | c;.      bre
60f0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 78 36  ak;.    }.    x6
6100: 34 20 3d 20 28 78 36 34 3c 3c 37 29 20 7c 20 28  4 = (x64<<7) | (
6110: 63 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69 6c  c&0x7f);.  }whil
6120: 65 28 20 28 63 20 26 20 30 78 38 30 29 21 3d 30  e( (c & 0x80)!=0
6130: 20 29 3b 0a 20 20 2a 76 20 3d 20 78 36 34 3b 0a   );.  *v = x64;.
6140: 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f    return n;.}../
6150: 2a 0a 2a 2a 20 52 65 61 64 20 61 20 33 32 2d 62  *.** Read a 32-b
6160: 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  it variable-leng
6170: 74 68 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20  th integer from 
6180: 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20  memory starting 
6190: 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75  at p[0]..** Retu
61a0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
61b0: 20 62 79 74 65 73 20 72 65 61 64 2e 20 20 54 68   bytes read.  Th
61c0: 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65  e value is store
61d0: 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20  d in *v..*/.int 
61e0: 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
61f0: 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
6200: 64 20 63 68 61 72 20 2a 70 2c 20 75 33 32 20 2a  d char *p, u32 *
6210: 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20 69  v){.  u32 x;.  i
6220: 6e 74 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64  nt n;.  unsigned
6230: 20 63 68 61 72 20 63 3b 0a 20 20 69 66 28 20 28   char c;.  if( (
6240: 28 73 69 67 6e 65 64 20 63 68 61 72 2a 29 70 29  (signed char*)p)
6250: 5b 30 5d 3e 3d 30 20 29 7b 0a 20 20 20 20 2a 76  [0]>=0 ){.    *v
6260: 20 3d 20 70 5b 30 5d 3b 0a 20 20 20 20 72 65 74   = p[0];.    ret
6270: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d  urn 1;.  }.  x =
6280: 20 70 5b 30 5d 20 26 20 30 78 37 66 3b 0a 20 20   p[0] & 0x7f;.  
6290: 69 66 28 20 28 28 73 69 67 6e 65 64 20 63 68 61  if( ((signed cha
62a0: 72 2a 29 70 29 5b 31 5d 3e 3d 30 20 29 7b 0a 20  r*)p)[1]>=0 ){. 
62b0: 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c     *v = (x<<7) |
62c0: 20 70 5b 31 5d 3b 0a 20 20 20 20 72 65 74 75 72   p[1];.    retur
62d0: 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28  n 2;.  }.  x = (
62e0: 78 3c 3c 37 29 20 7c 20 28 70 5b 31 5d 20 26 20  x<<7) | (p[1] & 
62f0: 30 78 37 66 29 3b 0a 20 20 6e 20 3d 20 32 3b 0a  0x7f);.  n = 2;.
6300: 20 20 64 6f 7b 0a 20 20 20 20 78 20 3d 20 28 78    do{.    x = (x
6310: 3c 3c 37 29 20 7c 20 28 28 63 20 3d 20 70 5b 6e  <<7) | ((c = p[n
6320: 2b 2b 5d 29 26 30 78 37 66 29 3b 0a 20 20 7d 77  ++])&0x7f);.  }w
6330: 68 69 6c 65 28 20 28 63 20 26 20 30 78 38 30 29  hile( (c & 0x80)
6340: 21 3d 30 20 26 26 20 6e 3c 39 20 29 3b 0a 20 20  !=0 && n<9 );.  
6350: 2a 76 20 3d 20 78 3b 0a 20 20 72 65 74 75 72 6e  *v = x;.  return
6360: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   n;.}../*.** Ret
6370: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
6380: 66 20 62 79 74 65 73 20 74 68 61 74 20 77 69 6c  f bytes that wil
6390: 6c 20 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73  l be needed to s
63a0: 74 6f 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a  tore the given.*
63b0: 2a 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  * 64-bit integer
63c0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
63d0: 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
63e0: 7b 0a 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20  {.  int i = 0;. 
63f0: 20 64 6f 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20   do{.    i++;.  
6400: 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68    v >>= 7;.  }wh
6410: 69 6c 65 28 20 76 21 3d 30 20 26 26 20 69 3c 39  ile( v!=0 && i<9
6420: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 69 3b 0a   );.  return i;.
6430: 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
6440: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42  SQLITE_OMIT_BLOB
6450: 5f 4c 49 54 45 52 41 4c 29 20 7c 7c 20 64 65 66  _LITERAL) || def
6460: 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f  ined(SQLITE_HAS_
6470: 43 4f 44 45 43 29 20 5c 0a 20 20 20 20 7c 7c 20  CODEC) \.    || 
6480: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
6490: 45 53 54 29 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73  EST)./*.** Trans
64a0: 6c 61 74 65 20 61 20 73 69 6e 67 6c 65 20 62 79  late a single by
64b0: 74 65 20 6f 66 20 48 65 78 20 69 6e 74 6f 20 61  te of Hex into a
64c0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74  n integer..*/.st
64d0: 61 74 69 63 20 69 6e 74 20 68 65 78 54 6f 49 6e  atic int hexToIn
64e0: 74 28 69 6e 74 20 68 29 7b 0a 20 20 69 66 28 20  t(int h){.  if( 
64f0: 68 3e 3d 27 30 27 20 26 26 20 68 3c 3d 27 39 27  h>='0' && h<='9'
6500: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68   ){.    return h
6510: 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20   - '0';.  }else 
6520: 69 66 28 20 68 3e 3d 27 61 27 20 26 26 20 68 3c  if( h>='a' && h<
6530: 3d 27 66 27 20 29 7b 0a 20 20 20 20 72 65 74 75  ='f' ){.    retu
6540: 72 6e 20 68 20 2d 20 27 61 27 20 2b 20 31 30 3b  rn h - 'a' + 10;
6550: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
6560: 73 65 72 74 28 20 68 3e 3d 27 41 27 20 26 26 20  sert( h>='A' && 
6570: 68 3c 3d 27 46 27 20 29 3b 0a 20 20 20 20 72 65  h<='F' );.    re
6580: 74 75 72 6e 20 68 20 2d 20 27 41 27 20 2b 20 31  turn h - 'A' + 1
6590: 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20  0;.  }.}.#endif 
65a0: 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  /* !SQLITE_OMIT_
65b0: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 7c 7c 20  BLOB_LITERAL || 
65c0: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
65d0: 20 7c 7c 20 53 51 4c 49 54 45 5f 54 45 53 54 20   || SQLITE_TEST 
65e0: 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
65f0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f  (SQLITE_OMIT_BLO
6600: 42 5f 4c 49 54 45 52 41 4c 29 20 7c 7c 20 64 65  B_LITERAL) || de
6610: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
6620: 5f 43 4f 44 45 43 29 0a 2f 2a 0a 2a 2a 20 43 6f  _CODEC)./*.** Co
6630: 6e 76 65 72 74 20 61 20 42 4c 4f 42 20 6c 69 74  nvert a BLOB lit
6640: 65 72 61 6c 20 6f 66 20 74 68 65 20 66 6f 72 6d  eral of the form
6650: 20 22 78 27 68 68 68 68 68 68 27 22 20 69 6e 74   "x'hhhhhh'" int
6660: 6f 20 69 74 73 20 62 69 6e 61 72 79 0a 2a 2a 20  o its binary.** 
6670: 76 61 6c 75 65 2e 20 20 52 65 74 75 72 6e 20 61  value.  Return a
6680: 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 20   pointer to its 
6690: 62 69 6e 61 72 79 20 76 61 6c 75 65 2e 20 20 53  binary value.  S
66a0: 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
66b0: 0a 2a 2a 20 62 69 6e 61 72 79 20 76 61 6c 75 65  .** binary value
66c0: 20 68 61 73 20 62 65 65 6e 20 6f 62 74 61 69 6e   has been obtain
66d0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61  ed from malloc a
66e0: 6e 64 20 6d 75 73 74 20 62 65 20 66 72 65 65 64  nd must be freed
66f0: 20 62 79 0a 2a 2a 20 74 68 65 20 63 61 6c 6c 69   by.** the calli
6700: 6e 67 20 72 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 76  ng routine..*/.v
6710: 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
6720: 6f 42 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72  oBlob(const char
6730: 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 42   *z){.  char *zB
6740: 6c 6f 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  lob;.  int i;.  
6750: 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  int n = strlen(z
6760: 29 3b 0a 20 20 69 66 28 20 6e 25 32 20 29 20 72  );.  if( n%2 ) r
6770: 65 74 75 72 6e 20 30 3b 0a 0a 20 20 7a 42 6c 6f  eturn 0;..  zBlo
6780: 62 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  b = (char *)sqli
6790: 74 65 4d 61 6c 6c 6f 63 28 6e 2f 32 29 3b 0a 20  teMalloc(n/2);. 
67a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
67b0: 2b 3d 32 29 7b 0a 20 20 20 20 7a 42 6c 6f 62 5b  +=2){.    zBlob[
67c0: 69 2f 32 5d 20 3d 20 28 68 65 78 54 6f 49 6e 74  i/2] = (hexToInt
67d0: 28 7a 5b 69 5d 29 3c 3c 34 29 20 7c 20 68 65 78  (z[i])<<4) | hex
67e0: 54 6f 49 6e 74 28 7a 5b 69 2b 31 5d 29 3b 0a 20  ToInt(z[i+1]);. 
67f0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 42 6c 6f   }.  return zBlo
6800: 62 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  b;.}.#endif /* !
6810: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42  SQLITE_OMIT_BLOB
6820: 5f 4c 49 54 45 52 41 4c 20 7c 7c 20 53 51 4c 49  _LITERAL || SQLI
6830: 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 2a 2f 0a  TE_HAS_CODEC */.
6840: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
6850: 49 54 45 5f 54 45 53 54 29 0a 2f 2a 0a 2a 2a 20  ITE_TEST)./*.** 
6860: 43 6f 6e 76 65 72 74 20 74 65 78 74 20 67 65 6e  Convert text gen
6870: 65 72 61 74 65 64 20 62 79 20 74 68 65 20 22 25  erated by the "%
6880: 70 22 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 6f  p" conversion fo
6890: 72 6d 61 74 20 62 61 63 6b 20 69 6e 74 6f 0a 2a  rmat back into.*
68a0: 2a 20 61 20 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a  * a pointer..*/.
68b0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 78  void *sqlite3Tex
68c0: 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
68d0: 72 20 2a 7a 29 7b 0a 20 20 76 6f 69 64 20 2a 70  r *z){.  void *p
68e0: 3b 0a 20 20 75 36 34 20 76 3b 0a 20 20 75 33 32  ;.  u64 v;.  u32
68f0: 20 76 32 3b 0a 20 20 69 66 28 20 7a 5b 30 5d 3d   v2;.  if( z[0]=
6900: 3d 27 30 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 78  ='0' && z[1]=='x
6910: 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 32 3b  ' ){.    z += 2;
6920: 0a 20 20 7d 0a 20 20 76 20 3d 20 30 3b 0a 20 20  .  }.  v = 0;.  
6930: 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20  while( *z ){.   
6940: 20 76 20 3d 20 28 76 3c 3c 34 29 20 2b 20 68 65   v = (v<<4) + he
6950: 78 54 6f 49 6e 74 28 2a 7a 29 3b 0a 20 20 20 20  xToInt(*z);.    
6960: 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  z++;.  }.  if( s
6970: 69 7a 65 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66  izeof(p)==sizeof
6980: 28 76 29 20 29 7b 0a 20 20 20 20 70 20 3d 20 2a  (v) ){.    p = *
6990: 28 76 6f 69 64 2a 2a 29 26 76 3b 0a 20 20 7d 65  (void**)&v;.  }e
69a0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
69b0: 20 73 69 7a 65 6f 66 28 70 29 3d 3d 73 69 7a 65   sizeof(p)==size
69c0: 6f 66 28 76 32 29 20 29 3b 0a 20 20 20 20 76 32  of(v2) );.    v2
69d0: 20 3d 20 28 75 33 32 29 76 3b 0a 20 20 20 20 70   = (u32)v;.    p
69e0: 20 3d 20 2a 28 76 6f 69 64 2a 2a 29 26 76 32 3b   = *(void**)&v2;
69f0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b  .  }.  return p;
6a00: 0a 7d 0a 23 65 6e 64 69 66 0a                    .}.#endif.