/ Hex Artifact Content
Login

Artifact 88ebafb5708f04002e58a373386e3c8c31bfd858:


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 39 20 32 30 30 35 2f 31 32 2f 30 36 20 31 32  49 2005/12/06 12
0230: 3a 35 33 3a 30 31 20 64 61 6e 69 65 6c 6b 31 39  :53:01 danielk19
0240: 37 37 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63  77 Exp $.*/.#inc
0250: 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e  lude "sqliteInt.
0260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
0270: 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  arg.h>.#include 
0280: 3c 63 74 79 70 65 2e 68 3e 0a 0a 23 69 66 20 53  <ctype.h>..#if S
0290: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 32  QLITE_MEMDEBUG>2
02a0: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4c   && defined(__GL
02b0: 49 42 43 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20  IBC__).#include 
02c0: 3c 65 78 65 63 69 6e 66 6f 2e 68 3e 0a 76 6f 69  <execinfo.h>.voi
02d0: 64 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72  d print_stack_tr
02e0: 61 63 65 28 29 7b 0a 20 20 76 6f 69 64 20 2a 62  ace(){.  void *b
02f0: 74 5b 33 30 5d 3b 0a 20 20 69 6e 74 20 69 3b 0a  t[30];.  int i;.
0300: 20 20 69 6e 74 20 6e 20 3d 20 62 61 63 6b 74 72    int n = backtr
0310: 61 63 65 28 62 74 2c 20 33 30 29 3b 0a 0a 20 20  ace(bt, 30);..  
0320: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  fprintf(stderr, 
0330: 22 53 54 41 43 4b 3a 20 22 29 3b 0a 20 20 66 6f  "STACK: ");.  fo
0340: 72 28 69 3d 30 3b 20 69 3c 6e 3b 69 2b 2b 29 7b  r(i=0; i<n;i++){
0350: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
0360: 65 72 72 2c 20 22 25 70 20 22 2c 20 62 74 5b 69  err, "%p ", bt[i
0370: 5d 29 3b 0a 20 20 7d 0a 20 20 66 70 72 69 6e 74  ]);.  }.  fprint
0380: 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b  f(stderr, "\n");
0390: 0a 7d 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  .}.#else.#define
03a0: 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61   print_stack_tra
03b0: 63 65 28 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  ce().#endif..#if
03c0: 20 30 0a 2f 2a 0a 2a 2a 20 49 66 20 6d 61 6c 6c   0./*.** If mall
03d0: 6f 63 28 29 20 65 76 65 72 20 66 61 69 6c 73 2c  oc() ever fails,
03e0: 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72   this global var
03f0: 69 61 62 6c 65 20 67 65 74 73 20 73 65 74 20 74  iable gets set t
0400: 6f 20 31 2e 0a 2a 2a 20 54 68 69 73 20 63 61 75  o 1..** This cau
0410: 73 65 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ses the library 
0420: 74 6f 20 61 62 6f 72 74 20 61 6e 64 20 6e 65 76  to abort and nev
0430: 65 72 20 61 67 61 69 6e 20 66 75 6e 63 74 69 6f  er again functio
0440: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
0450: 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61  3Tsd()->mallocFa
0460: 69 6c 65 64 20 3d 20 30 3b 0a 23 65 6e 64 69 66  iled = 0;.#endif
0470: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
0480: 45 5f 4d 45 4d 44 45 42 55 47 20 69 73 20 64 65  E_MEMDEBUG is de
0490: 66 69 6e 65 64 2c 20 74 68 65 6e 20 75 73 65 20  fined, then use 
04a0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 6d 61 6c 6c  versions of mall
04b0: 6f 63 28 29 20 61 6e 64 0a 2a 2a 20 66 72 65 65  oc() and.** free
04c0: 28 29 20 74 68 61 74 20 74 72 61 63 6b 20 6d 65  () that track me
04d0: 6d 6f 72 79 20 75 73 61 67 65 20 61 6e 64 20 63  mory usage and c
04e0: 68 65 63 6b 20 66 6f 72 20 62 75 66 66 65 72 20  heck for buffer 
04f0: 6f 76 65 72 72 75 6e 73 2e 0a 2a 2f 0a 23 69 66  overruns..*/.#if
0500: 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
0510: 42 55 47 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 6b  BUG../*.** For k
0520: 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
0530: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
0540: 6c 6c 6f 63 73 20 61 6e 64 20 66 72 65 65 73 2e  llocs and frees.
0550: 20 20 20 54 68 69 73 0a 2a 2a 20 69 73 20 75 73     This.** is us
0560: 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  ed to check for 
0570: 6d 65 6d 6f 72 79 20 6c 65 61 6b 73 2e 20 20 54  memory leaks.  T
0580: 68 65 20 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 61  he iMallocFail a
0590: 6e 64 20 69 4d 61 6c 6c 6f 63 52 65 73 65 74 0a  nd iMallocReset.
05a0: 2a 2a 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ** values are us
05b0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 6d  ed to simulate m
05c0: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  alloc() failures
05d0: 20 64 75 72 69 6e 67 20 74 65 73 74 69 6e 67 20   during testing 
05e0: 69 6e 20 0a 2a 2a 20 6f 72 64 65 72 20 74 6f 20  in .** order to 
05f0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
0600: 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c  library correctl
0610: 79 20 68 61 6e 64 6c 65 73 20 61 6e 20 6f 75 74  y handles an out
0620: 2d 6f 66 2d 6d 65 6d 6f 72 79 0a 2a 2a 20 63 6f  -of-memory.** co
0630: 6e 64 69 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20  ndition..*/.int 
0640: 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 3b  sqlite3_nMalloc;
0650: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
0660: 65 72 20 6f 66 20 73 71 6c 69 74 65 4d 61 6c 6c  er of sqliteMall
0670: 6f 63 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e  oc() calls */.in
0680: 74 20 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 3b  t sqlite3_nFree;
0690: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
06a0: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 46 72  mber of sqliteFr
06b0: 65 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e  ee() calls */.in
06c0: 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65  t sqlite3_memUse
06d0: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  d;         /* To
06e0: 74 61 6c 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69  tal memory obtai
06f0: 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 20  ned from malloc 
0700: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  */.int sqlite3_m
0710: 65 6d 4d 61 78 3b 20 20 20 20 20 20 20 20 20 20  emMax;          
0720: 2f 2a 20 4d 65 6d 20 75 73 61 67 65 20 68 69 67  /* Mem usage hig
0730: 68 2d 77 61 74 65 72 20 6d 61 72 6b 20 2a 2f 0a  h-water mark */.
0740: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  int sqlite3_iMal
0750: 6c 6f 63 46 61 69 6c 3b 20 20 20 20 20 2f 2a 20  locFail;     /* 
0760: 46 61 69 6c 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  Fail sqliteMallo
0770: 63 28 29 20 61 66 74 65 72 20 74 68 69 73 20 6d  c() after this m
0780: 61 6e 79 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e 74  any calls */.int
0790: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
07a0: 52 65 73 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 57  Reset = -1; /* W
07b0: 68 65 6e 20 69 4d 61 6c 6c 6f 63 46 61 69 6c 20  hen iMallocFail 
07c0: 72 65 61 63 68 65 73 20 30 2c 20 73 65 74 20 74  reaches 0, set t
07d0: 6f 20 74 68 69 73 20 2a 2f 0a 23 69 66 20 53 51  o this */.#if SQ
07e0: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a  LITE_MEMDEBUG>1.
07f0: 73 74 61 74 69 63 20 69 6e 74 20 6d 65 6d 63 6e  static int memcn
0800: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0810: 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20 33  *.** Number of 3
0820: 32 2d 62 69 74 20 67 75 61 72 64 20 77 6f 72 64  2-bit guard word
0830: 73 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  s.  This should 
0840: 70 72 6f 62 61 62 6c 79 20 62 65 20 61 20 6d 75  probably be a mu
0850: 6c 74 69 70 6c 65 20 6f 66 0a 2a 2a 20 32 20 73  ltiple of.** 2 s
0860: 69 6e 63 65 20 6f 6e 20 36 34 2d 62 69 74 20 6d  ince on 64-bit m
0870: 61 63 68 69 6e 65 73 20 77 65 20 77 61 6e 74 20  achines we want 
0880: 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
0890: 65 64 20 62 79 20 73 71 6c 69 74 65 4d 61 6c 6c  ed by sqliteMall
08a0: 6f 63 28 29 0a 2a 2a 20 74 6f 20 62 65 20 38 2d  oc().** to be 8-
08b0: 62 79 74 65 20 61 6c 69 67 6e 65 64 2e 0a 2a 2f  byte aligned..*/
08c0: 0a 23 64 65 66 69 6e 65 20 4e 5f 47 55 41 52 44  .#define N_GUARD
08d0: 20 32 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20   2../*.** Check 
08e0: 66 6f 72 20 61 20 73 69 6d 75 6c 61 74 65 64 20  for a simulated 
08f0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
0900: 6e 20 66 61 69 6c 75 72 65 2e 20 20 52 65 74 75  n failure.  Retu
0910: 72 6e 20 74 72 75 65 20 69 66 0a 2a 2a 20 74 68  rn true if.** th
0920: 65 20 66 61 69 6c 75 72 65 20 73 68 6f 75 6c 64  e failure should
0930: 20 62 65 20 73 69 6d 75 6c 61 74 65 64 2e 20 20   be simulated.  
0940: 52 65 74 75 72 6e 20 66 61 6c 73 65 20 74 6f 20  Return false to 
0950: 70 72 6f 63 65 65 64 20 61 73 20 6e 6f 72 6d 61  proceed as norma
0960: 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  l..*/.static int
0970: 20 73 69 6d 75 6c 61 74 65 64 4d 61 6c 6c 6f 63   simulatedMalloc
0980: 46 61 69 6c 75 72 65 28 69 6e 74 20 6e 2c 20 63  Failure(int n, c
0990: 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 20  har *zFile, int 
09a0: 6c 69 6e 65 29 7b 0a 20 20 69 66 28 20 73 71 6c  line){.  if( sql
09b0: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
09c0: 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
09d0: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 2d 2d  e3_iMallocFail--
09e0: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
09f0: 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3d 3d 30  3_iMallocFail==0
0a00: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
0a10: 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61  3Tsd()->mallocFa
0a20: 69 6c 65 64 2b 2b 3b 0a 23 69 66 20 53 51 4c 49  iled++;.#if SQLI
0a30: 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20  TE_MEMDEBUG>1.  
0a40: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
0a50: 72 72 2c 22 2a 2a 2a 2a 20 66 61 69 6c 65 64 20  rr,"**** failed 
0a60: 74 6f 20 61 6c 6c 6f 63 61 74 65 20 25 64 20 62  to allocate %d b
0a70: 79 74 65 73 20 61 74 20 25 73 3a 25 64 5c 6e 22  ytes at %s:%d\n"
0a80: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0a90: 6e 2c 20 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a  n, zFile,line);.
0aa0: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 73 71 6c  #endif.      sql
0ab0: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
0ac0: 20 3d 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c   = sqlite3_iMall
0ad0: 6f 63 52 65 73 65 74 3b 0a 20 20 20 20 20 20 72  ocReset;.      r
0ae0: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
0af0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
0b00: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
0b10: 20 6e 65 77 20 6d 65 6d 6f 72 79 20 61 6e 64 20   new memory and 
0b20: 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2e 20  set it to zero. 
0b30: 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 0a   Return NULL if.
0b40: 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20 69 73 20  ** no memory is 
0b50: 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 76 6f  available..*/.vo
0b60: 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
0b70: 63 5f 28 69 6e 74 20 6e 2c 20 69 6e 74 20 62 5a  c_(int n, int bZ
0b80: 65 72 6f 2c 20 63 68 61 72 20 2a 7a 46 69 6c 65  ero, char *zFile
0b90: 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a 20 20 76  , int line){.  v
0ba0: 6f 69 64 20 2a 70 3b 0a 20 20 69 6e 74 20 2a 70  oid *p;.  int *p
0bb0: 69 3b 0a 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 0a  i;.  int i, k;..
0bc0: 20 20 2f 2a 20 41 6e 79 20 6d 61 6c 6c 6f 63 28    /* Any malloc(
0bd0: 29 20 63 61 6c 6c 73 20 62 65 74 77 65 65 6e 20  ) calls between 
0be0: 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75  a malloc() failu
0bf0: 72 65 20 61 6e 64 20 63 6c 65 61 72 69 6e 67 20  re and clearing 
0c00: 74 68 65 0a 20 20 2a 2a 20 6d 61 6c 6c 6f 63 46  the.  ** mallocF
0c10: 61 69 6c 65 64 20 66 6c 61 67 20 28 64 6f 6e 65  ailed flag (done
0c20: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
0c30: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
0c40: 20 75 73 65 72 29 0a 20 20 2a 2a 20 61 75 74 6f   user).  ** auto
0c50: 6d 61 74 69 63 61 6c 6c 79 20 66 61 69 6c 2e 20  matically fail. 
0c60: 41 6c 74 68 6f 75 67 68 20 74 68 69 73 20 72 65  Although this re
0c70: 73 74 72 69 63 74 69 6f 6e 20 6d 61 79 20 68 61  striction may ha
0c80: 76 65 20 74 6f 20 62 65 20 72 65 6c 61 78 65 64  ve to be relaxed
0c90: 20 69 6e 0a 20 20 2a 2a 20 74 68 65 20 66 75 74   in.  ** the fut
0ca0: 75 72 65 2c 20 66 6f 72 20 6e 6f 77 20 69 74 20  ure, for now it 
0cb0: 6d 61 6b 65 73 20 74 68 65 20 73 79 73 74 65 6d  makes the system
0cc0: 20 65 61 73 69 65 72 20 74 6f 20 74 65 73 74 2e   easier to test.
0cd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 4f 44 4f 3a  .  **.  ** TODO:
0ce0: 20 54 68 69 73 20 77 69 6c 6c 20 65 76 65 6e 74   This will event
0cf0: 75 61 6c 6c 79 20 62 65 20 64 6f 6e 65 20 61 73  ually be done as
0d00: 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 61 6d   part of the sam
0d10: 65 20 77 72 61 70 70 65 72 20 74 68 61 74 20 6d  e wrapper that m
0d20: 61 79 0a 20 20 2a 2a 20 63 61 6c 6c 20 73 71 6c  ay.  ** call sql
0d30: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
0d40: 6f 72 79 28 29 2e 20 41 62 6f 76 65 20 74 68 65  ory(). Above the
0d50: 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63   sqlite3OsMalloc
0d60: 28 29 20 6c 65 76 65 6c 2e 0a 20 20 2a 2f 0a 20  () level..  */. 
0d70: 20 69 66 28 20 73 71 6c 69 74 65 33 54 73 64 28   if( sqlite3Tsd(
0d80: 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  )->mallocFailed 
0d90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
0da0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6e 3d 3d 30  .  }..  if( n==0
0db0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
0dc0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 69 6d 75  ;.  }.  if( simu
0dd0: 6c 61 74 65 64 4d 61 6c 6c 6f 63 46 61 69 6c 75  latedMallocFailu
0de0: 72 65 28 6e 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e  re(n, zFile, lin
0df0: 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
0e00: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
0e10: 33 5f 6d 65 6d 55 73 65 64 20 2b 3d 20 6e 3b 0a  3_memUsed += n;.
0e20: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 65    if( sqlite3_me
0e30: 6d 4d 61 78 3c 73 71 6c 69 74 65 33 5f 6d 65 6d  mMax<sqlite3_mem
0e40: 55 73 65 64 20 29 20 73 71 6c 69 74 65 33 5f 6d  Used ) sqlite3_m
0e50: 65 6d 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 5f  emMax = sqlite3_
0e60: 6d 65 6d 55 73 65 64 3b 0a 20 20 6b 20 3d 20 28  memUsed;.  k = (
0e70: 6e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29  n+sizeof(int)-1)
0e80: 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20  /sizeof(int);.  
0e90: 70 69 20 3d 20 6d 61 6c 6c 6f 63 28 20 28 4e 5f  pi = malloc( (N_
0ea0: 47 55 41 52 44 2a 32 2b 31 2b 6b 29 2a 73 69 7a  GUARD*2+1+k)*siz
0eb0: 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 69 66 28  eof(int));.  if(
0ec0: 20 70 69 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   pi==0 ){.    if
0ed0: 28 20 6e 3e 30 20 29 20 73 71 6c 69 74 65 33 54  ( n>0 ) sqlite3T
0ee0: 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  sd()->mallocFail
0ef0: 65 64 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e  ed++;.    return
0f00: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
0f10: 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b 3b 0a 20 20 66  3_nMalloc++;.  f
0f20: 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52  or(i=0; i<N_GUAR
0f30: 44 3b 20 69 2b 2b 29 20 70 69 5b 69 5d 20 3d 20  D; i++) pi[i] = 
0f40: 30 78 64 65 61 64 31 31 32 32 3b 0a 20 20 70 69  0xdead1122;.  pi
0f50: 5b 4e 5f 47 55 41 52 44 5d 20 3d 20 6e 3b 0a 20  [N_GUARD] = n;. 
0f60: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55   for(i=0; i<N_GU
0f70: 41 52 44 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 31  ARD; i++) pi[k+1
0f80: 2b 4e 5f 47 55 41 52 44 2b 69 5d 20 3d 20 30 78  +N_GUARD+i] = 0x
0f90: 64 65 61 64 33 33 34 34 3b 0a 20 20 70 20 3d 20  dead3344;.  p = 
0fa0: 26 70 69 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a  &pi[N_GUARD+1];.
0fb0: 20 20 6d 65 6d 73 65 74 28 70 2c 20 62 5a 65 72    memset(p, bZer
0fc0: 6f 3d 3d 30 2c 20 6e 29 3b 0a 23 69 66 20 53 51  o==0, n);.#if SQ
0fd0: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a  LITE_MEMDEBUG>1.
0fe0: 20 20 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72    print_stack_tr
0ff0: 61 63 65 28 29 3b 0a 20 20 66 70 72 69 6e 74 66  ace();.  fprintf
1000: 28 73 74 64 65 72 72 2c 22 25 30 36 64 20 6d 61  (stderr,"%06d ma
1010: 6c 6c 6f 63 20 25 64 20 62 79 74 65 73 20 61 74  lloc %d bytes at
1020: 20 30 78 25 78 20 66 72 6f 6d 20 25 73 3a 25 64   0x%x from %s:%d
1030: 5c 6e 22 2c 0a 20 20 20 20 20 20 2b 2b 6d 65 6d  \n",.      ++mem
1040: 63 6e 74 2c 20 6e 2c 20 28 69 6e 74 29 70 2c 20  cnt, n, (int)p, 
1050: 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 23 65 6e  zFile,line);.#en
1060: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a  dif.  return p;.
1070: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 76 65  }../*.** This ve
1080: 72 73 69 6f 6e 20 6f 66 20 6d 61 6c 6c 6f 63 20  rsion of malloc 
1090: 69 73 20 61 6c 77 61 79 73 20 61 20 72 65 61 6c  is always a real
10a0: 20 66 75 6e 63 74 69 6f 6e 2c 20 6e 65 76 65 72   function, never
10b0: 20 61 20 6d 61 63 72 6f 0a 2a 2f 0a 76 6f 69 64   a macro.*/.void
10c0: 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 58   *sqlite3MallocX
10d0: 28 69 6e 74 20 6e 29 7b 0a 20 20 72 65 74 75 72  (int n){.  retur
10e0: 6e 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f  n sqlite3Malloc_
10f0: 28 6e 2c 20 30 2c 20 5f 5f 46 49 4c 45 5f 5f 2c  (n, 0, __FILE__,
1100: 20 5f 5f 4c 49 4e 45 5f 5f 29 3b 0a 7d 0a 0a 2f   __LINE__);.}../
1110: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65  *.** Check to se
1120: 65 20 69 66 20 74 68 65 20 67 69 76 65 6e 20 70  e if the given p
1130: 6f 69 6e 74 65 72 20 77 61 73 20 6f 62 74 61 69  ointer was obtai
1140: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  ned from sqliteM
1150: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 61 6e 64 20 69  alloc().** and i
1160: 73 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20 61  s able to hold a
1170: 74 20 6c 65 61 73 74 20 4e 20 62 79 74 65 73 2e  t least N bytes.
1180: 20 20 52 61 69 73 65 20 61 6e 20 65 78 63 65 70    Raise an excep
1190: 74 69 6f 6e 20 69 66 20 74 68 69 73 0a 2a 2a 20  tion if this.** 
11a0: 69 73 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2e  is not the case.
11b0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
11c0: 69 6e 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ine is used for 
11d0: 74 65 73 74 69 6e 67 20 70 75 72 70 6f 73 65 73  testing purposes
11e0: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73   only..*/.void s
11f0: 71 6c 69 74 65 33 43 68 65 63 6b 4d 65 6d 6f 72  qlite3CheckMemor
1200: 79 28 76 6f 69 64 20 2a 70 2c 20 69 6e 74 20 4e  y(void *p, int N
1210: 29 7b 0a 20 20 69 6e 74 20 2a 70 69 20 3d 20 70  ){.  int *pi = p
1220: 3b 0a 20 20 69 6e 74 20 6e 2c 20 69 2c 20 6b 3b  ;.  int n, i, k;
1230: 0a 20 20 70 69 20 2d 3d 20 4e 5f 47 55 41 52 44  .  pi -= N_GUARD
1240: 2b 31 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  +1;.  for(i=0; i
1250: 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a  <N_GUARD; i++){.
1260: 20 20 20 20 61 73 73 65 72 74 28 20 70 69 5b 69      assert( pi[i
1270: 5d 3d 3d 30 78 64 65 61 64 31 31 32 32 20 29 3b  ]==0xdead1122 );
1280: 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 69 5b 4e 5f  .  }.  n = pi[N_
1290: 47 55 41 52 44 5d 3b 0a 20 20 61 73 73 65 72 74  GUARD];.  assert
12a0: 28 20 4e 3e 3d 30 20 26 26 20 4e 3c 6e 20 29 3b  ( N>=0 && N<n );
12b0: 0a 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65 6f 66  .  k = (n+sizeof
12c0: 28 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f 66 28  (int)-1)/sizeof(
12d0: 69 6e 74 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  int);.  for(i=0;
12e0: 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b 29   i<N_GUARD; i++)
12f0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 69  {.    assert( pi
1300: 5b 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 3d  [k+N_GUARD+1+i]=
1310: 3d 30 78 64 65 61 64 33 33 34 34 20 29 3b 0a 20  =0xdead3344 );. 
1320: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65   }.}../*.** Free
1330: 20 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73   memory previous
1340: 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ly obtained from
1350: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a   sqliteMalloc().
1360: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  */.void sqlite3F
1370: 72 65 65 5f 28 76 6f 69 64 20 2a 70 2c 20 63 68  ree_(void *p, ch
1380: 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c  ar *zFile, int l
1390: 69 6e 65 29 7b 0a 20 20 69 66 28 20 70 20 29 7b  ine){.  if( p ){
13a0: 0a 20 20 20 20 69 6e 74 20 2a 70 69 2c 20 69 2c  .    int *pi, i,
13b0: 20 6b 2c 20 6e 3b 0a 20 20 20 20 70 69 20 3d 20   k, n;.    pi = 
13c0: 70 3b 0a 20 20 20 20 70 69 20 2d 3d 20 4e 5f 47  p;.    pi -= N_G
13d0: 55 41 52 44 2b 31 3b 0a 20 20 20 20 73 71 6c 69  UARD+1;.    sqli
13e0: 74 65 33 5f 6e 46 72 65 65 2b 2b 3b 0a 20 20 20  te3_nFree++;.   
13f0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55   for(i=0; i<N_GU
1400: 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ARD; i++){.     
1410: 20 69 66 28 20 70 69 5b 69 5d 21 3d 30 78 64 65   if( pi[i]!=0xde
1420: 61 64 31 31 32 32 20 29 7b 0a 20 20 20 20 20 20  ad1122 ){.      
1430: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
1440: 2c 22 4c 6f 77 2d 65 6e 64 20 6d 65 6d 6f 72 79  ,"Low-end memory
1450: 20 63 6f 72 72 75 70 74 69 6f 6e 20 61 74 20 30   corruption at 0
1460: 78 25 78 5c 6e 22 2c 20 28 69 6e 74 29 70 29 3b  x%x\n", (int)p);
1470: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b  .        return;
1480: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1490: 20 20 20 6e 20 3d 20 70 69 5b 4e 5f 47 55 41 52     n = pi[N_GUAR
14a0: 44 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  D];.    sqlite3_
14b0: 6d 65 6d 55 73 65 64 20 2d 3d 20 6e 3b 0a 20 20  memUsed -= n;.  
14c0: 20 20 6b 20 3d 20 28 6e 2b 73 69 7a 65 6f 66 28    k = (n+sizeof(
14d0: 69 6e 74 29 2d 31 29 2f 73 69 7a 65 6f 66 28 69  int)-1)/sizeof(i
14e0: 6e 74 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  nt);.    for(i=0
14f0: 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69 2b 2b  ; i<N_GUARD; i++
1500: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 69 5b  ){.      if( pi[
1510: 6b 2b 4e 5f 47 55 41 52 44 2b 31 2b 69 5d 21 3d  k+N_GUARD+1+i]!=
1520: 30 78 64 65 61 64 33 33 34 34 20 29 7b 0a 20 20  0xdead3344 ){.  
1530: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
1540: 64 65 72 72 2c 22 48 69 67 68 2d 65 6e 64 20 6d  derr,"High-end m
1550: 65 6d 6f 72 79 20 63 6f 72 72 75 70 74 69 6f 6e  emory corruption
1560: 20 61 74 20 30 78 25 78 5c 6e 22 2c 20 28 69 6e   at 0x%x\n", (in
1570: 74 29 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65  t)p);.        re
1580: 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
1590: 20 20 7d 0a 20 20 20 20 6d 65 6d 73 65 74 28 70    }.    memset(p
15a0: 69 2c 20 30 78 66 66 2c 20 28 6b 2b 4e 5f 47 55  i, 0xff, (k+N_GU
15b0: 41 52 44 2a 32 2b 31 29 2a 73 69 7a 65 6f 66 28  ARD*2+1)*sizeof(
15c0: 69 6e 74 29 29 3b 0a 23 69 66 20 53 51 4c 49 54  int));.#if SQLIT
15d0: 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 20  E_MEMDEBUG>1.   
15e0: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
15f0: 22 25 30 36 64 20 66 72 65 65 20 25 64 20 62 79  "%06d free %d by
1600: 74 65 73 20 61 74 20 30 78 25 78 20 66 72 6f 6d  tes at 0x%x from
1610: 20 25 73 3a 25 64 5c 6e 22 2c 0a 20 20 20 20 20   %s:%d\n",.     
1620: 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6e 2c      ++memcnt, n,
1630: 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c 6c   (int)p, zFile,l
1640: 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  ine);.#endif.   
1650: 20 66 72 65 65 28 70 69 29 3b 0a 20 20 7d 0a 7d   free(pi);.  }.}
1660: 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61  ../*.** Resize a
1670: 20 70 72 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f   prior allocatio
1680: 6e 2e 20 20 49 66 20 70 3d 3d 30 2c 20 74 68 65  n.  If p==0, the
1690: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
16a0: 2a 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  * works just lik
16b0: 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  e sqliteMalloc()
16c0: 2e 20 20 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e  .  If n==0, then
16d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
16e0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
16f0: 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a   sqliteFree()..*
1700: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  /.void *sqlite3R
1710: 65 61 6c 6c 6f 63 5f 28 76 6f 69 64 20 2a 6f 6c  ealloc_(void *ol
1720: 64 50 2c 20 69 6e 74 20 6e 2c 20 63 68 61 72 20  dP, int n, char 
1730: 2a 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65  *zFile, int line
1740: 29 7b 0a 20 20 69 6e 74 20 2a 6f 6c 64 50 69 2c  ){.  int *oldPi,
1750: 20 2a 70 69 2c 20 69 2c 20 6b 2c 20 6f 6c 64 4e   *pi, i, k, oldN
1760: 2c 20 6f 6c 64 4b 3b 0a 20 20 76 6f 69 64 20 2a  , oldK;.  void *
1770: 70 3b 0a 20 20 69 66 28 20 6f 6c 64 50 3d 3d 30  p;.  if( oldP==0
1780: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73   ){.    return s
1790: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2c  qlite3Malloc_(n,
17a0: 31 2c 7a 46 69 6c 65 2c 6c 69 6e 65 29 3b 0a 20  1,zFile,line);. 
17b0: 20 7d 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b   }.  if( n==0 ){
17c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 46 72 65 65  .    sqlite3Free
17d0: 5f 28 6f 6c 64 50 2c 7a 46 69 6c 65 2c 6c 69 6e  _(oldP,zFile,lin
17e0: 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  e);.    return 0
17f0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 69 6d 75  ;.  }.  if( simu
1800: 6c 61 74 65 64 4d 61 6c 6c 6f 63 46 61 69 6c 75  latedMallocFailu
1810: 72 65 28 6e 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e  re(n, zFile, lin
1820: 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
1830: 20 30 3b 0a 20 20 7d 0a 20 20 6f 6c 64 50 69 20   0;.  }.  oldPi 
1840: 3d 20 6f 6c 64 50 3b 0a 20 20 6f 6c 64 50 69 20  = oldP;.  oldPi 
1850: 2d 3d 20 4e 5f 47 55 41 52 44 2b 31 3b 0a 20 20  -= N_GUARD+1;.  
1860: 69 66 28 20 6f 6c 64 50 69 5b 30 5d 21 3d 30 78  if( oldPi[0]!=0x
1870: 64 65 61 64 31 31 32 32 20 29 7b 0a 20 20 20 20  dead1122 ){.    
1880: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  fprintf(stderr,"
1890: 4c 6f 77 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63  Low-end memory c
18a0: 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20 72 65 61  orruption in rea
18b0: 6c 6c 6f 63 20 61 74 20 30 78 25 78 5c 6e 22 2c  lloc at 0x%x\n",
18c0: 20 28 69 6e 74 29 6f 6c 64 50 29 3b 0a 20 20 20   (int)oldP);.   
18d0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
18e0: 20 6f 6c 64 4e 20 3d 20 6f 6c 64 50 69 5b 4e 5f   oldN = oldPi[N_
18f0: 47 55 41 52 44 5d 3b 0a 20 20 73 71 6c 69 74 65  GUARD];.  sqlite
1900: 33 5f 6d 65 6d 55 73 65 64 20 2d 3d 20 6f 6c 64  3_memUsed -= old
1910: 4e 3b 0a 20 20 6f 6c 64 4b 20 3d 20 28 6f 6c 64  N;.  oldK = (old
1920: 4e 2b 73 69 7a 65 6f 66 28 69 6e 74 29 2d 31 29  N+sizeof(int)-1)
1930: 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20  /sizeof(int);.  
1940: 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41  for(i=0; i<N_GUA
1950: 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  RD; i++){.    if
1960: 28 20 6f 6c 64 50 69 5b 6f 6c 64 4b 2b 4e 5f 47  ( oldPi[oldK+N_G
1970: 55 41 52 44 2b 31 2b 69 5d 21 3d 30 78 64 65 61  UARD+1+i]!=0xdea
1980: 64 33 33 34 34 20 29 7b 0a 20 20 20 20 20 20 66  d3344 ){.      f
1990: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 48  printf(stderr,"H
19a0: 69 67 68 2d 65 6e 64 20 6d 65 6d 6f 72 79 20 63  igh-end memory c
19b0: 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20 72 65 61  orruption in rea
19c0: 6c 6c 6f 63 20 61 74 20 30 78 25 78 5c 6e 22 2c  lloc at 0x%x\n",
19d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
19e0: 69 6e 74 29 6f 6c 64 50 29 3b 0a 20 20 20 20 20  int)oldP);.     
19f0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
1a00: 0a 20 20 7d 0a 20 20 6b 20 3d 20 28 6e 20 2b 20  .  }.  k = (n + 
1a10: 73 69 7a 65 6f 66 28 69 6e 74 29 20 2d 20 31 29  sizeof(int) - 1)
1a20: 2f 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 20 20  /sizeof(int);.  
1a30: 70 69 20 3d 20 6d 61 6c 6c 6f 63 28 20 28 6b 2b  pi = malloc( (k+
1a40: 4e 5f 47 55 41 52 44 2a 32 2b 31 29 2a 73 69 7a  N_GUARD*2+1)*siz
1a50: 65 6f 66 28 69 6e 74 29 20 29 3b 0a 20 20 69 66  eof(int) );.  if
1a60: 28 20 70 69 3d 3d 30 20 29 7b 0a 20 20 20 20 69  ( pi==0 ){.    i
1a70: 66 28 20 6e 3e 30 20 29 20 73 71 6c 69 74 65 33  f( n>0 ) sqlite3
1a80: 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69  Tsd()->mallocFai
1a90: 6c 65 64 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72  led++;.    retur
1aa0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  n 0;.  }.  for(i
1ab0: 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44 3b 20 69  =0; i<N_GUARD; i
1ac0: 2b 2b 29 20 70 69 5b 69 5d 20 3d 20 30 78 64 65  ++) pi[i] = 0xde
1ad0: 61 64 31 31 32 32 3b 0a 20 20 70 69 5b 4e 5f 47  ad1122;.  pi[N_G
1ae0: 55 41 52 44 5d 20 3d 20 6e 3b 0a 20 20 73 71 6c  UARD] = n;.  sql
1af0: 69 74 65 33 5f 6d 65 6d 55 73 65 64 20 2b 3d 20  ite3_memUsed += 
1b00: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
1b10: 5f 6d 65 6d 4d 61 78 3c 73 71 6c 69 74 65 33 5f  _memMax<sqlite3_
1b20: 6d 65 6d 55 73 65 64 20 29 20 73 71 6c 69 74 65  memUsed ) sqlite
1b30: 33 5f 6d 65 6d 4d 61 78 20 3d 20 73 71 6c 69 74  3_memMax = sqlit
1b40: 65 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20 66 6f  e3_memUsed;.  fo
1b50: 72 28 69 3d 30 3b 20 69 3c 4e 5f 47 55 41 52 44  r(i=0; i<N_GUARD
1b60: 3b 20 69 2b 2b 29 20 70 69 5b 6b 2b 4e 5f 47 55  ; i++) pi[k+N_GU
1b70: 41 52 44 2b 31 2b 69 5d 20 3d 20 30 78 64 65 61  ARD+1+i] = 0xdea
1b80: 64 33 33 34 34 3b 0a 20 20 70 20 3d 20 26 70 69  d3344;.  p = &pi
1b90: 5b 4e 5f 47 55 41 52 44 2b 31 5d 3b 0a 20 20 6d  [N_GUARD+1];.  m
1ba0: 65 6d 63 70 79 28 70 2c 20 6f 6c 64 50 2c 20 6e  emcpy(p, oldP, n
1bb0: 3e 6f 6c 64 4e 20 3f 20 6f 6c 64 4e 20 3a 20 6e  >oldN ? oldN : n
1bc0: 29 3b 0a 20 20 69 66 28 20 6e 3e 6f 6c 64 4e 20  );.  if( n>oldN 
1bd0: 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 28  ){.    memset(&(
1be0: 28 63 68 61 72 2a 29 70 29 5b 6f 6c 64 4e 5d 2c  (char*)p)[oldN],
1bf0: 20 30 78 35 35 2c 20 6e 2d 6f 6c 64 4e 29 3b 0a   0x55, n-oldN);.
1c00: 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28 6f 6c 64    }.  memset(old
1c10: 50 69 2c 20 30 78 61 62 2c 20 28 6f 6c 64 4b 2b  Pi, 0xab, (oldK+
1c20: 4e 5f 47 55 41 52 44 2b 32 29 2a 73 69 7a 65 6f  N_GUARD+2)*sizeo
1c30: 66 28 69 6e 74 29 29 3b 0a 20 20 66 72 65 65 28  f(int));.  free(
1c40: 6f 6c 64 50 69 29 3b 0a 23 69 66 20 53 51 4c 49  oldPi);.#if SQLI
1c50: 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20  TE_MEMDEBUG>1.  
1c60: 70 72 69 6e 74 5f 73 74 61 63 6b 5f 74 72 61 63  print_stack_trac
1c70: 65 28 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 73  e();.  fprintf(s
1c80: 74 64 65 72 72 2c 22 25 30 36 64 20 72 65 61 6c  tderr,"%06d real
1c90: 6c 6f 63 20 25 64 20 74 6f 20 25 64 20 62 79 74  loc %d to %d byt
1ca0: 65 73 20 61 74 20 30 78 25 78 20 74 6f 20 30 78  es at 0x%x to 0x
1cb0: 25 78 20 61 74 20 25 73 3a 25 64 5c 6e 22 2c 0a  %x at %s:%d\n",.
1cc0: 20 20 20 20 2b 2b 6d 65 6d 63 6e 74 2c 20 6f 6c      ++memcnt, ol
1cd0: 64 4e 2c 20 6e 2c 20 28 69 6e 74 29 6f 6c 64 50  dN, n, (int)oldP
1ce0: 2c 20 28 69 6e 74 29 70 2c 20 7a 46 69 6c 65 2c  , (int)p, zFile,
1cf0: 20 6c 69 6e 65 29 3b 0a 23 65 6e 64 69 66 0a 20   line);.#endif. 
1d00: 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a   return p;.}../*
1d10: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
1d20: 6f 66 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d  of a string in m
1d30: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
1d40: 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  rom sqliteMalloc
1d50: 28 29 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69  ().*/.char *sqli
1d60: 74 65 33 53 74 72 44 75 70 5f 28 63 6f 6e 73 74  te3StrDup_(const
1d70: 20 63 68 61 72 20 2a 7a 2c 20 63 68 61 72 20 2a   char *z, char *
1d80: 7a 46 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29  zFile, int line)
1d90: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a  {.  char *zNew;.
1da0: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74    if( z==0 ) ret
1db0: 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20  urn 0;.  zNew = 
1dc0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 73  sqlite3Malloc_(s
1dd0: 74 72 6c 65 6e 28 7a 29 2b 31 2c 20 30 2c 20 7a  trlen(z)+1, 0, z
1de0: 46 69 6c 65 2c 20 6c 69 6e 65 29 3b 0a 20 20 69  File, line);.  i
1df0: 66 28 20 7a 4e 65 77 20 29 20 73 74 72 63 70 79  f( zNew ) strcpy
1e00: 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74  (zNew, z);.  ret
1e10: 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72  urn zNew;.}.char
1e20: 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 44 75 70   *sqlite3StrNDup
1e30: 5f 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  _(const char *z,
1e40: 20 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 46   int n, char *zF
1e50: 69 6c 65 2c 20 69 6e 74 20 6c 69 6e 65 29 7b 0a  ile, int line){.
1e60: 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20    char *zNew;.  
1e70: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
1e80: 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71  n 0;.  zNew = sq
1e90: 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 6e 2b 31  lite3Malloc_(n+1
1ea0: 2c 20 30 2c 20 7a 46 69 6c 65 2c 20 6c 69 6e 65  , 0, zFile, line
1eb0: 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 7b  );.  if( zNew ){
1ec0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77  .    memcpy(zNew
1ed0: 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65  , z, n);.    zNe
1ee0: 77 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  w[n] = 0;.  }.  
1ef0: 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a  return zNew;.}..
1f00: 2f 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20  /*.** A version 
1f10: 6f 66 20 73 71 6c 69 74 65 46 72 65 65 20 74 68  of sqliteFree th
1f20: 61 74 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  at is always a f
1f30: 75 6e 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d  unction, not a m
1f40: 61 63 72 6f 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  acro..*/.void sq
1f50: 6c 69 74 65 33 46 72 65 65 58 28 76 6f 69 64 20  lite3FreeX(void 
1f60: 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 46 72 65  *p){.  sqliteFre
1f70: 65 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  e(p);.}.#endif /
1f80: 2a 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  * SQLITE_MEMDEBU
1f90: 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  G */../*.** The 
1fa0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 65 72 73 69 6f  following versio
1fb0: 6e 73 20 6f 66 20 6d 61 6c 6c 6f 63 28 29 20 61  ns of malloc() a
1fc0: 6e 64 20 66 72 65 65 28 29 20 61 72 65 20 66 6f  nd free() are fo
1fd0: 72 20 75 73 65 20 69 6e 20 61 0a 2a 2a 20 6e 6f  r use in a.** no
1fe0: 72 6d 61 6c 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23  rmal build..*/.#
1ff0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2000: 54 45 5f 4d 45 4d 44 45 42 55 47 29 0a 0a 2f 2a  TE_MEMDEBUG)../*
2010: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77  .** Allocate new
2020: 20 6d 65 6d 6f 72 79 20 61 6e 64 20 73 65 74 20   memory and set 
2030: 69 74 20 74 6f 20 7a 65 72 6f 2e 20 20 52 65 74  it to zero.  Ret
2040: 75 72 6e 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 6e  urn NULL if.** n
2050: 6f 20 6d 65 6d 6f 72 79 20 69 73 20 61 76 61 69  o memory is avai
2060: 6c 61 62 6c 65 2e 20 20 53 65 65 20 61 6c 73 6f  lable.  See also
2070: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77   sqliteMallocRaw
2080: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ()..*/.void *sql
2090: 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e  ite3Malloc(int n
20a0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
20b0: 69 66 28 20 6e 3d 3d 30 20 29 20 72 65 74 75 72  if( n==0 ) retur
20c0: 6e 20 30 3b 0a 20 20 69 66 28 20 28 70 20 3d 20  n 0;.  if( (p = 
20d0: 6d 61 6c 6c 6f 63 28 6e 29 29 3d 3d 30 20 29 7b  malloc(n))==0 ){
20e0: 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 29 20 73  .    if( n>0 ) s
20f0: 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 6d 61 6c  qlite3Tsd()->mal
2100: 6c 6f 63 46 61 69 6c 65 64 2b 2b 3b 0a 20 20 7d  locFailed++;.  }
2110: 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74  else{.    memset
2120: 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d 0a 20  (p, 0, n);.  }. 
2130: 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a   return p;.}../*
2140: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6e 65 77  .** Allocate new
2150: 20 6d 65 6d 6f 72 79 20 62 75 74 20 64 6f 20 6e   memory but do n
2160: 6f 74 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72  ot set it to zer
2170: 6f 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20  o.  Return NULL 
2180: 69 66 0a 2a 2a 20 6e 6f 20 6d 65 6d 6f 72 79 20  if.** no memory 
2190: 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53  is available.  S
21a0: 65 65 20 61 6c 73 6f 20 73 71 6c 69 74 65 4d 61  ee also sqliteMa
21b0: 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  lloc()..*/.void 
21c0: 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61  *sqlite3MallocRa
21d0: 77 28 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64  w(int n){.  void
21e0: 20 2a 70 3b 0a 20 20 69 66 28 20 6e 3d 3d 30 20   *p;.  if( n==0 
21f0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66  ) return 0;.  if
2200: 28 20 28 70 20 3d 20 6d 61 6c 6c 6f 63 28 6e 29  ( (p = malloc(n)
2210: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2220: 6e 3e 30 20 29 20 73 71 6c 69 74 65 33 54 73 64  n>0 ) sqlite3Tsd
2230: 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ()->mallocFailed
2240: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
2250: 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65   p;.}../*.** Fre
2260: 65 20 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75  e memory previou
2270: 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  sly obtained fro
2280: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
2290: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
22a0: 46 72 65 65 58 28 76 6f 69 64 20 2a 70 29 7b 0a  FreeX(void *p){.
22b0: 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 66    if( p ){.    f
22c0: 72 65 65 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  ree(p);.  }.}../
22d0: 2a 0a 2a 2a 20 52 65 73 69 7a 65 20 61 20 70 72  *.** Resize a pr
22e0: 69 6f 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ior allocation. 
22f0: 20 49 66 20 70 3d 3d 30 2c 20 74 68 65 6e 20 74   If p==0, then t
2300: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
2310: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73  orks just like s
2320: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20  qliteMalloc().  
2330: 49 66 20 6e 3d 3d 30 2c 20 74 68 65 6e 20 74 68  If n==0, then th
2340: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 6f  is routine.** wo
2350: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 73 71  rks just like sq
2360: 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a 76  liteFree()..*/.v
2370: 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
2380: 6c 6f 63 28 76 6f 69 64 20 2a 70 2c 20 69 6e 74  loc(void *p, int
2390: 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 32 3b   n){.  void *p2;
23a0: 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20  .  if( p==0 ){. 
23b0: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
23c0: 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 7d 0a 20  Malloc(n);.  }. 
23d0: 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20   if( n==0 ){.   
23e0: 20 73 71 6c 69 74 65 46 72 65 65 28 70 29 3b 0a   sqliteFree(p);.
23f0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
2400: 7d 0a 20 20 70 32 20 3d 20 72 65 61 6c 6c 6f 63  }.  p2 = realloc
2410: 28 70 2c 20 6e 29 3b 0a 20 20 69 66 28 20 70 32  (p, n);.  if( p2
2420: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
2430: 3e 30 20 29 20 73 71 6c 69 74 65 33 54 73 64 28  >0 ) sqlite3Tsd(
2440: 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 2b  )->mallocFailed+
2450: 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  +;.  }.  return 
2460: 70 32 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b  p2;.}../*.** Mak
2470: 65 20 61 20 63 6f 70 79 20 6f 66 20 61 20 73 74  e a copy of a st
2480: 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  ring in memory o
2490: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
24a0: 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2f 0a 63  iteMalloc().*/.c
24b0: 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 44  har *sqlite3StrD
24c0: 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  up(const char *z
24d0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b  ){.  char *zNew;
24e0: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65  .  if( z==0 ) re
24f0: 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d  turn 0;.  zNew =
2500: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77   sqliteMallocRaw
2510: 28 73 74 72 6c 65 6e 28 7a 29 2b 31 29 3b 0a 20  (strlen(z)+1);. 
2520: 20 69 66 28 20 7a 4e 65 77 20 29 20 73 74 72 63   if( zNew ) strc
2530: 70 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72  py(zNew, z);.  r
2540: 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68  eturn zNew;.}.ch
2550: 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 44  ar *sqlite3StrND
2560: 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  up(const char *z
2570: 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68 61 72  , int n){.  char
2580: 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d   *zNew;.  if( z=
2590: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
25a0: 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 4d 61   zNew = sqliteMa
25b0: 6c 6c 6f 63 52 61 77 28 6e 2b 31 29 3b 0a 20 20  llocRaw(n+1);.  
25c0: 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20  if( zNew ){.    
25d0: 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c 20  memcpy(zNew, z, 
25e0: 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d 20  n);.    zNew[n] 
25f0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  = 0;.  }.  retur
2600: 6e 20 7a 4e 65 77 3b 0a 7d 0a 23 65 6e 64 69 66  n zNew;.}.#endif
2610: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
2620: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 20 2a 2f  ITE_MEMDEBUG) */
2630: 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 6c 6c 6f 63 61  ../*.** Realloca
2640: 74 65 20 61 20 62 75 66 66 65 72 20 74 6f 20 61  te a buffer to a
2650: 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 2e   different size.
2660: 20 20 54 68 69 73 20 69 73 20 73 69 6d 69 6c 61    This is simila
2670: 72 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 52 65  r to.** sqliteRe
2680: 61 6c 6c 6f 63 28 29 20 65 78 63 65 70 74 20 74  alloc() except t
2690: 68 61 74 20 69 66 20 74 68 65 20 61 6c 6c 6f 63  hat if the alloc
26a0: 61 74 69 6f 6e 20 66 61 69 6c 73 20 74 68 65 20  ation fails the 
26b0: 62 75 66 66 65 72 0a 2a 2a 20 69 73 20 66 72 65  buffer.** is fre
26c0: 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ed..*/.void sqli
26d0: 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  te3ReallocOrFree
26e0: 28 76 6f 69 64 20 2a 2a 70 70 42 75 66 2c 20 69  (void **ppBuf, i
26f0: 6e 74 20 6e 65 77 53 69 7a 65 29 7b 0a 20 20 76  nt newSize){.  v
2700: 6f 69 64 20 2a 70 4e 65 77 20 3d 20 73 71 6c 69  oid *pNew = sqli
2710: 74 65 52 65 61 6c 6c 6f 63 28 2a 70 70 42 75 66  teRealloc(*ppBuf
2720: 2c 20 6e 65 77 53 69 7a 65 29 3b 0a 20 20 69 66  , newSize);.  if
2730: 28 20 70 4e 65 77 3d 3d 30 20 29 7b 0a 20 20 20  ( pNew==0 ){.   
2740: 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 70 42   sqliteFree(*ppB
2750: 75 66 29 3b 0a 20 20 7d 0a 20 20 2a 70 70 42 75  uf);.  }.  *ppBu
2760: 66 20 3d 20 70 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a  f = pNew;.}../*.
2770: 2a 2a 20 43 72 65 61 74 65 20 61 20 73 74 72 69  ** Create a stri
2780: 6e 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64 20  ng from the 2nd 
2790: 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 61  and subsequent a
27a0: 72 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f 20  rguments (up to 
27b0: 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55 4c  the.** first NUL
27c0: 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74 6f  L argument), sto
27d0: 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 69 6e  re the string in
27e0: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
27f0: 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65 4d   from.** sqliteM
2800: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b 65  alloc() and make
2810: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e 64   the pointer ind
2820: 69 63 61 74 65 64 20 62 79 20 74 68 65 20 31 73  icated by the 1s
2830: 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70 6f  t argument.** po
2840: 69 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72 69  int to that stri
2850: 6e 67 2e 20 20 54 68 65 20 31 73 74 20 61 72 67  ng.  The 1st arg
2860: 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68 65  ument must eithe
2870: 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a 2a  r be NULL or .**
2880: 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72 79   point to memory
2890: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
28a0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a  qliteMalloc()..*
28b0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  /.void sqlite3Se
28c0: 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 70  tString(char **p
28d0: 7a 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  z, ...){.  va_li
28e0: 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79  st ap;.  int nBy
28f0: 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  te;.  const char
2900: 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65   *z;.  char *zRe
2910: 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 70 7a 3d  sult;..  if( pz=
2920: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6e  =0 ) return;.  n
2930: 42 79 74 65 20 3d 20 31 3b 0a 20 20 76 61 5f 73  Byte = 1;.  va_s
2940: 74 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20  tart(ap, pz);.  
2950: 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61  while( (z = va_a
2960: 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61  rg(ap, const cha
2970: 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 6e  r*))!=0 ){.    n
2980: 42 79 74 65 20 2b 3d 20 73 74 72 6c 65 6e 28 7a  Byte += strlen(z
2990: 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28  );.  }.  va_end(
29a0: 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  ap);.  sqliteFre
29b0: 65 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20  e(*pz);.  *pz = 
29c0: 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65  zResult = sqlite
29d0: 4d 61 6c 6c 6f 63 52 61 77 28 20 6e 42 79 74 65  MallocRaw( nByte
29e0: 20 29 3b 0a 20 20 69 66 28 20 7a 52 65 73 75 6c   );.  if( zResul
29f0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  t==0 ){.    retu
2a00: 72 6e 3b 0a 20 20 7d 0a 20 20 2a 7a 52 65 73 75  rn;.  }.  *zResu
2a10: 6c 74 20 3d 20 30 3b 0a 20 20 76 61 5f 73 74 61  lt = 0;.  va_sta
2a20: 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77 68  rt(ap, pz);.  wh
2a30: 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72 67  ile( (z = va_arg
2a40: 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  (ap, const char*
2a50: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74 72  ))!=0 ){.    str
2a60: 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a 29 3b  cpy(zResult, z);
2a70: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20  .    zResult += 
2a80: 73 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74 29 3b  strlen(zResult);
2a90: 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70  .  }.  va_end(ap
2aa0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2ab0: 5f 4d 45 4d 44 45 42 55 47 0a 23 69 66 20 53 51  _MEMDEBUG.#if SQ
2ac0: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a  LITE_MEMDEBUG>1.
2ad0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
2ae0: 2c 22 73 74 72 69 6e 67 20 61 74 20 30 78 25 78  ,"string at 0x%x
2af0: 20 69 73 20 25 73 5c 6e 22 2c 20 28 69 6e 74 29   is %s\n", (int)
2b00: 2a 70 7a 2c 20 2a 70 7a 29 3b 0a 23 65 6e 64 69  *pz, *pz);.#endi
2b10: 66 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a  f.#endif.}../*.*
2b20: 2a 20 53 65 74 20 74 68 65 20 6d 6f 73 74 20 72  * Set the most r
2b30: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
2b40: 20 61 6e 64 20 65 72 72 6f 72 20 73 74 72 69 6e   and error strin
2b50: 67 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  g for the sqlite
2b60: 0a 2a 2a 20 68 61 6e 64 6c 65 20 22 64 62 22 2e  .** handle "db".
2b70: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
2b80: 69 73 20 73 65 74 20 74 6f 20 22 65 72 72 5f 63  is set to "err_c
2b90: 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69  ode"..**.** If i
2ba0: 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 73  t is not NULL, s
2bb0: 74 72 69 6e 67 20 7a 46 6f 72 6d 61 74 20 73 70  tring zFormat sp
2bc0: 65 63 69 66 69 65 73 20 74 68 65 20 66 6f 72 6d  ecifies the form
2bd0: 61 74 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72  at of the.** err
2be0: 6f 72 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65  or string in the
2bf0: 20 73 74 79 6c 65 20 6f 66 20 74 68 65 20 70 72   style of the pr
2c00: 69 6e 74 66 20 66 75 6e 63 74 69 6f 6e 73 3a 20  intf functions: 
2c10: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  The following.**
2c20: 20 66 6f 72 6d 61 74 20 63 68 61 72 61 63 74 65   format characte
2c30: 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a 0a  rs are allowed:.
2c40: 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20 20 20  **.**      %s   
2c50: 20 20 20 49 6e 73 65 72 74 20 61 20 73 74 72 69     Insert a stri
2c60: 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20 20  ng.**      %z   
2c70: 20 20 20 41 20 73 74 72 69 6e 67 20 74 68 61 74     A string that
2c80: 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
2c90: 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20 20 20   after use.**   
2ca0: 20 20 20 25 64 20 20 20 20 20 20 49 6e 73 65 72     %d      Inser
2cb0: 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  t an integer.** 
2cc0: 20 20 20 20 20 25 54 20 20 20 20 20 20 49 6e 73       %T      Ins
2cd0: 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20  ert a token.**  
2ce0: 20 20 20 20 25 53 20 20 20 20 20 20 49 6e 73 65      %S      Inse
2cf0: 72 74 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  rt the first ele
2d00: 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c 69 73  ment of a SrcLis
2d10: 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f 72 6d 61 74 20  t.**.** zFormat 
2d20: 61 6e 64 20 61 6e 79 20 73 74 72 69 6e 67 20 74  and any string t
2d30: 6f 6b 65 6e 73 20 74 68 61 74 20 66 6f 6c 6c 6f  okens that follo
2d40: 77 20 69 74 20 61 72 65 20 61 73 73 75 6d 65 64  w it are assumed
2d50: 20 74 6f 20 62 65 0a 2a 2a 20 65 6e 63 6f 64 65   to be.** encode
2d60: 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 0a 2a  d in UTF-8..**.*
2d70: 2a 20 54 6f 20 63 6c 65 61 72 20 74 68 65 20 6d  * To clear the m
2d80: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
2d90: 20 66 6f 72 20 73 71 6c 69 74 65 20 68 61 6e 64   for sqlite hand
2da0: 6c 65 20 22 64 62 22 2c 20 73 71 6c 69 74 65 33  le "db", sqlite3
2db0: 45 72 72 6f 72 0a 2a 2a 20 73 68 6f 75 6c 64 20  Error.** should 
2dc0: 62 65 20 63 61 6c 6c 65 64 20 77 69 74 68 20 65  be called with e
2dd0: 72 72 5f 63 6f 64 65 20 73 65 74 20 74 6f 20 53  rr_code set to S
2de0: 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 7a 46 6f  QLITE_OK and zFo
2df0: 72 6d 61 74 20 73 65 74 0a 2a 2a 20 74 6f 20 4e  rmat set.** to N
2e00: 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ULL..*/.void sql
2e10: 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2e20: 33 20 2a 64 62 2c 20 69 6e 74 20 65 72 72 5f 63  3 *db, int err_c
2e30: 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ode, const char 
2e40: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
2e50: 20 20 69 66 28 20 64 62 20 26 26 20 28 64 62 2d    if( db && (db-
2e60: 3e 70 45 72 72 20 7c 7c 20 28 64 62 2d 3e 70 45  >pErr || (db->pE
2e70: 72 72 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  rr = sqlite3Valu
2e80: 65 4e 65 77 28 29 29 29 21 3d 30 20 29 7b 0a 20  eNew()))!=0 ){. 
2e90: 20 20 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d     db->errCode =
2ea0: 20 65 72 72 5f 63 6f 64 65 3b 0a 20 20 20 20 69   err_code;.    i
2eb0: 66 28 20 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20  f( zFormat ){.  
2ec0: 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20      char *z;.   
2ed0: 20 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20     va_list ap;. 
2ee0: 20 20 20 20 20 76 61 5f 73 74 61 72 74 28 61 70       va_start(ap
2ef0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20  , zFormat);.    
2f00: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50    z = sqlite3VMP
2f10: 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61  rintf(zFormat, a
2f20: 70 29 3b 0a 20 20 20 20 20 20 76 61 5f 65 6e 64  p);.      va_end
2f30: 28 61 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  (ap);.      sqli
2f40: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 64  te3ValueSetStr(d
2f50: 62 2d 3e 70 45 72 72 2c 20 2d 31 2c 20 7a 2c 20  b->pErr, -1, z, 
2f60: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
2f70: 69 74 65 33 46 72 65 65 58 29 3b 0a 20 20 20 20  ite3FreeX);.    
2f80: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
2f90: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
2fa0: 64 62 2d 3e 70 45 72 72 2c 20 30 2c 20 30 2c 20  db->pErr, 0, 0, 
2fb0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
2fc0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
2fd0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2fe0: 41 64 64 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  Add an error mes
2ff0: 73 61 67 65 20 74 6f 20 70 50 61 72 73 65 2d 3e  sage to pParse->
3000: 7a 45 72 72 4d 73 67 20 61 6e 64 20 69 6e 63 72  zErrMsg and incr
3010: 65 6d 65 6e 74 20 70 50 61 72 73 65 2d 3e 6e 45  ement pParse->nE
3020: 72 72 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  rr..** The follo
3030: 77 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20  wing formatting 
3040: 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 61  characters are a
3050: 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20  llowed:.**.**   
3060: 20 20 20 25 73 20 20 20 20 20 20 49 6e 73 65 72     %s      Inser
3070: 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20  t a string.**   
3080: 20 20 20 25 7a 20 20 20 20 20 20 41 20 73 74 72     %z      A str
3090: 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ing that should 
30a0: 62 65 20 66 72 65 65 64 20 61 66 74 65 72 20 75  be freed after u
30b0: 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20  se.**      %d   
30c0: 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74     Insert an int
30d0: 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20  eger.**      %T 
30e0: 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f       Insert a to
30f0: 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20  ken.**      %S  
3100: 20 20 20 20 49 6e 73 65 72 74 20 74 68 65 20 66      Insert the f
3110: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
3120: 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20  a SrcList.**.** 
3130: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 73 68  This function sh
3140: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 20  ould be used to 
3150: 72 65 70 6f 72 74 20 61 6e 79 20 65 72 72 6f 72  report any error
3160: 20 74 68 61 74 20 6f 63 63 75 72 73 20 77 68 69   that occurs whi
3170: 6c 73 74 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  lst.** compiling
3180: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
3190: 74 20 28 69 2e 65 2e 20 77 69 74 68 69 6e 20 73  t (i.e. within s
31a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
31b0: 29 2e 20 54 68 65 0a 2a 2a 20 6c 61 73 74 20 74  ). The.** last t
31c0: 68 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  hing the sqlite3
31d0: 5f 70 72 65 70 61 72 65 28 29 20 66 75 6e 63 74  _prepare() funct
31e0: 69 6f 6e 20 64 6f 65 73 20 69 73 20 63 6f 70 79  ion does is copy
31f0: 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 73 74   the error.** st
3200: 6f 72 65 64 20 62 79 20 74 68 69 73 20 66 75 6e  ored by this fun
3210: 63 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 64  ction into the d
3220: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 75  atabase handle u
3230: 73 69 6e 67 20 73 71 6c 69 74 65 33 45 72 72 6f  sing sqlite3Erro
3240: 72 28 29 2e 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e  r()..** Function
3250: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 29 20   sqlite3Error() 
3260: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 64  should be used d
3270: 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
3280: 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 28 73 71  execution.** (sq
3290: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 65 74 63  lite3_step() etc
32a0: 2e 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  .)..*/.void sqli
32b0: 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
32c0: 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
32d0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
32e0: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
32f0: 61 70 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 45  ap;.  pParse->nE
3300: 72 72 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 46 72  rr++;.  sqliteFr
3310: 65 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d  ee(pParse->zErrM
3320: 73 67 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28  sg);.  va_start(
3330: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
3340: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20  pParse->zErrMsg 
3350: 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74  = sqlite3VMPrint
3360: 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  f(zFormat, ap);.
3370: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a    va_end(ap);.}.
3380: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
3390: 6e 20 53 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74  n SQL-style quot
33a0: 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  ed string into a
33b0: 20 6e 6f 72 6d 61 6c 20 73 74 72 69 6e 67 20 62   normal string b
33c0: 79 20 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68  y removing.** th
33d0: 65 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65  e quote characte
33e0: 72 73 2e 20 20 54 68 65 20 63 6f 6e 76 65 72 73  rs.  The convers
33f0: 69 6f 6e 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70  ion is done in-p
3400: 6c 61 63 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lace.  If the.**
3410: 20 69 6e 70 75 74 20 64 6f 65 73 20 6e 6f 74 20   input does not 
3420: 62 65 67 69 6e 20 77 69 74 68 20 61 20 71 75 6f  begin with a quo
3430: 74 65 20 63 68 61 72 61 63 74 65 72 2c 20 74 68  te character, th
3440: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
3450: 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ** is a no-op..*
3460: 2a 0a 2a 2a 20 32 30 30 32 2d 46 65 62 2d 31 34  *.** 2002-Feb-14
3470: 3a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  : This routine i
3480: 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20 72 65  s extended to re
3490: 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73 73 20 73  move MS-Access s
34a0: 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73  tyle.** brackets
34b0: 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65   from around ide
34c0: 6e 74 69 66 65 72 73 2e 20 20 46 6f 72 20 65 78  ntifers.  For ex
34d0: 61 6d 70 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d  ample:  "[a-b-c]
34e0: 22 20 62 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d  " becomes.** "a-
34f0: 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  b-c"..*/.void sq
3500: 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
3510: 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 71 75 6f  r *z){.  int quo
3520: 74 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a  te;.  int i, j;.
3530: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74    if( z==0 ) ret
3540: 75 72 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a  urn;.  quote = z
3550: 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68 28 20 71  [0];.  switch( q
3560: 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 61 73 65  uote ){.    case
3570: 20 27 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a 20   '\'':  break;. 
3580: 20 20 20 63 61 73 65 20 27 22 27 3a 20 20 20 62     case '"':   b
3590: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27  reak;.    case '
35a0: 60 27 3a 20 20 20 62 72 65 61 6b 3b 20 20 20 20  `':   break;    
35b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
35c0: 6f 72 20 4d 79 53 51 4c 20 63 6f 6d 70 61 74 69  or MySQL compati
35d0: 62 69 6c 69 74 79 20 2a 2f 0a 20 20 20 20 63 61  bility */.    ca
35e0: 73 65 20 27 5b 27 3a 20 20 20 71 75 6f 74 65 20  se '[':   quote 
35f0: 3d 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b 20 20  = ']';  break;  
3600: 2f 2a 20 46 6f 72 20 4d 53 20 53 71 6c 53 65 72  /* For MS SqlSer
3610: 76 65 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ver compatibilit
3620: 79 20 2a 2f 0a 20 20 20 20 64 65 66 61 75 6c 74  y */.    default
3630: 3a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  :    return;.  }
3640: 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b  .  for(i=1, j=0;
3650: 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20   z[i]; i++){.   
3660: 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65   if( z[i]==quote
3670: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b   ){.      if( z[
3680: 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20  i+1]==quote ){. 
3690: 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20         z[j++] = 
36a0: 71 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69  quote;.        i
36b0: 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ++;.      }else{
36c0: 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20  .        z[j++] 
36d0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 0;.        bre
36e0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
36f0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a  }else{.      z[j
3700: 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20  ++] = z[i];.    
3710: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61  }.  }.}../* An a
3720: 72 72 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20  rray to map all 
3730: 75 70 70 65 72 2d 63 61 73 65 20 63 68 61 72 61  upper-case chara
3740: 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72  cters into their
3750: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
3760: 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61  * lower-case cha
3770: 72 61 63 74 65 72 2e 20 0a 2a 2f 0a 63 6f 6e 73  racter. .*/.cons
3780: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
3790: 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
37a0: 77 65 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  wer[] = {.      
37b0: 30 2c 20 20 31 2c 20 20 32 2c 20 20 33 2c 20 20  0,  1,  2,  3,  
37c0: 34 2c 20 20 35 2c 20 20 36 2c 20 20 37 2c 20 20  4,  5,  6,  7,  
37d0: 38 2c 20 20 39 2c 20 31 30 2c 20 31 31 2c 20 31  8,  9, 10, 11, 1
37e0: 32 2c 20 31 33 2c 20 31 34 2c 20 31 35 2c 20 31  2, 13, 14, 15, 1
37f0: 36 2c 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20  6, 17,.     18, 
3800: 31 39 2c 20 32 30 2c 20 32 31 2c 20 32 32 2c 20  19, 20, 21, 22, 
3810: 32 33 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20  23, 24, 25, 26, 
3820: 32 37 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20  27, 28, 29, 30, 
3830: 33 31 2c 20 33 32 2c 20 33 33 2c 20 33 34 2c 20  31, 32, 33, 34, 
3840: 33 35 2c 0a 20 20 20 20 20 33 36 2c 20 33 37 2c  35,.     36, 37,
3850: 20 33 38 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c   38, 39, 40, 41,
3860: 20 34 32 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c   42, 43, 44, 45,
3870: 20 34 36 2c 20 34 37 2c 20 34 38 2c 20 34 39 2c   46, 47, 48, 49,
3880: 20 35 30 2c 20 35 31 2c 20 35 32 2c 20 35 33 2c   50, 51, 52, 53,
3890: 0a 20 20 20 20 20 35 34 2c 20 35 35 2c 20 35 36  .     54, 55, 56
38a0: 2c 20 35 37 2c 20 35 38 2c 20 35 39 2c 20 36 30  , 57, 58, 59, 60
38b0: 2c 20 36 31 2c 20 36 32 2c 20 36 33 2c 20 36 34  , 61, 62, 63, 64
38c0: 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30  , 97, 98, 99,100
38d0: 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c 0a 20 20  ,101,102,103,.  
38e0: 20 20 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30    104,105,106,10
38f0: 37 2c 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31  7,108,109,110,11
3900: 31 2c 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31  1,112,113,114,11
3910: 35 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31  5,116,117,118,11
3920: 39 2c 31 32 30 2c 31 32 31 2c 0a 20 20 20 20 31  9,120,121,.    1
3930: 32 32 2c 20 39 31 2c 20 39 32 2c 20 39 33 2c 20  22, 91, 92, 93, 
3940: 39 34 2c 20 39 35 2c 20 39 36 2c 20 39 37 2c 20  94, 95, 96, 97, 
3950: 39 38 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31  98, 99,100,101,1
3960: 30 32 2c 31 30 33 2c 31 30 34 2c 31 30 35 2c 31  02,103,104,105,1
3970: 30 36 2c 31 30 37 2c 0a 20 20 20 20 31 30 38 2c  06,107,.    108,
3980: 31 30 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c  109,110,111,112,
3990: 31 31 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c  113,114,115,116,
39a0: 31 31 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c  117,118,119,120,
39b0: 31 32 31 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c  121,122,123,124,
39c0: 31 32 35 2c 0a 20 20 20 20 31 32 36 2c 31 32 37  125,.    126,127
39d0: 2c 31 32 38 2c 31 32 39 2c 31 33 30 2c 31 33 31  ,128,129,130,131
39e0: 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35  ,132,133,134,135
39f0: 2c 31 33 36 2c 31 33 37 2c 31 33 38 2c 31 33 39  ,136,137,138,139
3a00: 2c 31 34 30 2c 31 34 31 2c 31 34 32 2c 31 34 33  ,140,141,142,143
3a10: 2c 0a 20 20 20 20 31 34 34 2c 31 34 35 2c 31 34  ,.    144,145,14
3a20: 36 2c 31 34 37 2c 31 34 38 2c 31 34 39 2c 31 35  6,147,148,149,15
3a30: 30 2c 31 35 31 2c 31 35 32 2c 31 35 33 2c 31 35  0,151,152,153,15
3a40: 34 2c 31 35 35 2c 31 35 36 2c 31 35 37 2c 31 35  4,155,156,157,15
3a50: 38 2c 31 35 39 2c 31 36 30 2c 31 36 31 2c 0a 20  8,159,160,161,. 
3a60: 20 20 20 31 36 32 2c 31 36 33 2c 31 36 34 2c 31     162,163,164,1
3a70: 36 35 2c 31 36 36 2c 31 36 37 2c 31 36 38 2c 31  65,166,167,168,1
3a80: 36 39 2c 31 37 30 2c 31 37 31 2c 31 37 32 2c 31  69,170,171,172,1
3a90: 37 33 2c 31 37 34 2c 31 37 35 2c 31 37 36 2c 31  73,174,175,176,1
3aa0: 37 37 2c 31 37 38 2c 31 37 39 2c 0a 20 20 20 20  77,178,179,.    
3ab0: 31 38 30 2c 31 38 31 2c 31 38 32 2c 31 38 33 2c  180,181,182,183,
3ac0: 31 38 34 2c 31 38 35 2c 31 38 36 2c 31 38 37 2c  184,185,186,187,
3ad0: 31 38 38 2c 31 38 39 2c 31 39 30 2c 31 39 31 2c  188,189,190,191,
3ae0: 31 39 32 2c 31 39 33 2c 31 39 34 2c 31 39 35 2c  192,193,194,195,
3af0: 31 39 36 2c 31 39 37 2c 0a 20 20 20 20 31 39 38  196,197,.    198
3b00: 2c 31 39 39 2c 32 30 30 2c 32 30 31 2c 32 30 32  ,199,200,201,202
3b10: 2c 32 30 33 2c 32 30 34 2c 32 30 35 2c 32 30 36  ,203,204,205,206
3b20: 2c 32 30 37 2c 32 30 38 2c 32 30 39 2c 32 31 30  ,207,208,209,210
3b30: 2c 32 31 31 2c 32 31 32 2c 32 31 33 2c 32 31 34  ,211,212,213,214
3b40: 2c 32 31 35 2c 0a 20 20 20 20 32 31 36 2c 32 31  ,215,.    216,21
3b50: 37 2c 32 31 38 2c 32 31 39 2c 32 32 30 2c 32 32  7,218,219,220,22
3b60: 31 2c 32 32 32 2c 32 32 33 2c 32 32 34 2c 32 32  1,222,223,224,22
3b70: 35 2c 32 32 36 2c 32 32 37 2c 32 32 38 2c 32 32  5,226,227,228,22
3b80: 39 2c 32 33 30 2c 32 33 31 2c 32 33 32 2c 32 33  9,230,231,232,23
3b90: 33 2c 0a 20 20 20 20 32 33 34 2c 32 33 35 2c 32  3,.    234,235,2
3ba0: 33 36 2c 32 33 37 2c 32 33 38 2c 32 33 39 2c 32  36,237,238,239,2
3bb0: 34 30 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32  40,241,242,243,2
3bc0: 34 34 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32  44,245,246,247,2
3bd0: 34 38 2c 32 34 39 2c 32 35 30 2c 32 35 31 2c 0a  48,249,250,251,.
3be0: 20 20 20 20 32 35 32 2c 32 35 33 2c 32 35 34 2c      252,253,254,
3bf0: 32 35 35 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 55  255.};.#define U
3c00: 70 70 65 72 54 6f 4c 6f 77 65 72 20 73 71 6c 69  pperToLower sqli
3c10: 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 0a  te3UpperToLower.
3c20: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 73 79 73 74  ./*.** Some syst
3c30: 65 6d 73 20 68 61 76 65 20 73 74 72 69 63 6d 70  ems have stricmp
3c40: 28 29 2e 20 20 4f 74 68 65 72 73 20 68 61 76 65  ().  Others have
3c50: 20 73 74 72 63 61 73 65 63 6d 70 28 29 2e 20 20   strcasecmp().  
3c60: 42 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 72 65  Because.** there
3c70: 20 69 73 20 6e 6f 20 63 6f 6e 73 69 73 74 65 6e   is no consisten
3c80: 63 79 2c 20 77 65 20 77 69 6c 6c 20 64 65 66 69  cy, we will defi
3c90: 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a 2a 2f 0a 69  ne our own..*/.i
3ca0: 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  nt sqlite3StrICm
3cb0: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c  p(const char *zL
3cc0: 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  eft, const char 
3cd0: 2a 7a 52 69 67 68 74 29 7b 0a 20 20 72 65 67 69  *zRight){.  regi
3ce0: 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68  ster unsigned ch
3cf0: 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d  ar *a, *b;.  a =
3d00: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
3d10: 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28  *)zLeft;.  b = (
3d20: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
3d30: 7a 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28  zRight;.  while(
3d40: 20 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72 54   *a!=0 && UpperT
3d50: 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65  oLower[*a]==Uppe
3d60: 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61  rToLower[*b]){ a
3d70: 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74  ++; b++; }.  ret
3d80: 75 72 6e 20 55 70 70 65 72 54 6f 4c 6f 77 65 72  urn UpperToLower
3d90: 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f  [*a] - UpperToLo
3da0: 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 69 6e 74 20 73  wer[*b];.}.int s
3db0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63  qlite3StrNICmp(c
3dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74  onst char *zLeft
3dd0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52  , const char *zR
3de0: 69 67 68 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  ight, int N){.  
3df0: 72 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65  register unsigne
3e00: 64 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20  d char *a, *b;. 
3e10: 20 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63   a = (unsigned c
3e20: 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62  har *)zLeft;.  b
3e30: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61   = (unsigned cha
3e40: 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68  r *)zRight;.  wh
3e50: 69 6c 65 28 20 4e 2d 2d 20 3e 20 30 20 26 26 20  ile( N-- > 0 && 
3e60: 2a 61 21 3d 30 20 26 26 20 55 70 70 65 72 54 6f  *a!=0 && UpperTo
3e70: 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72  Lower[*a]==Upper
3e80: 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b  ToLower[*b]){ a+
3e90: 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75  +; b++; }.  retu
3ea0: 72 6e 20 4e 3c 30 20 3f 20 30 20 3a 20 55 70 70  rn N<0 ? 0 : Upp
3eb0: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20  erToLower[*a] - 
3ec0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
3ed0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
3ee0: 6e 20 54 52 55 45 20 69 66 20 7a 20 69 73 20 61  n TRUE if z is a
3ef0: 20 70 75 72 65 20 6e 75 6d 65 72 69 63 20 73 74   pure numeric st
3f00: 72 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 46 41  ring.  Return FA
3f10: 4c 53 45 20 69 66 20 74 68 65 0a 2a 2a 20 73 74  LSE if the.** st
3f20: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ring contains an
3f30: 79 20 63 68 61 72 61 63 74 65 72 20 77 68 69 63  y character whic
3f40: 68 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66  h is not part of
3f50: 20 61 20 6e 75 6d 62 65 72 2e 20 49 66 0a 2a 2a   a number. If.**
3f60: 20 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 6e   the string is n
3f70: 75 6d 65 72 69 63 20 61 6e 64 20 63 6f 6e 74 61  umeric and conta
3f80: 69 6e 73 20 74 68 65 20 27 2e 27 20 63 68 61 72  ins the '.' char
3f90: 61 63 74 65 72 2c 20 73 65 74 20 2a 72 65 61 6c  acter, set *real
3fa0: 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52 55 45 20 28  num.** to TRUE (
3fb0: 6f 74 68 65 72 77 69 73 65 20 46 41 4c 53 45 29  otherwise FALSE)
3fc0: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 6d 70 74 79  ..**.** An empty
3fd0: 20 73 74 72 69 6e 67 20 69 73 20 63 6f 6e 73 69   string is consi
3fe0: 64 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69  dered non-numeri
3ff0: 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  c..*/.int sqlite
4000: 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20  3IsNumber(const 
4010: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65  char *z, int *re
4020: 61 6c 6e 75 6d 2c 20 75 38 20 65 6e 63 29 7b 0a  alnum, u8 enc){.
4030: 20 20 69 6e 74 20 69 6e 63 72 20 3d 20 28 65 6e    int incr = (en
4040: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 3f 31  c==SQLITE_UTF8?1
4050: 3a 32 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d  :2);.  if( enc==
4060: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
4070: 20 7a 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d   z++;.  if( *z==
4080: 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29  '-' || *z=='+' )
4090: 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66   z += incr;.  if
40a0: 28 20 21 69 73 64 69 67 69 74 28 2a 28 75 38 2a  ( !isdigit(*(u8*
40b0: 29 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  )z) ){.    retur
40c0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 20 2b 3d 20  n 0;.  }.  z += 
40d0: 69 6e 63 72 3b 0a 20 20 69 66 28 20 72 65 61 6c  incr;.  if( real
40e0: 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d  num ) *realnum =
40f0: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 64   0;.  while( isd
4100: 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b  igit(*(u8*)z) ){
4110: 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20   z += incr; }.  
4120: 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20  if( *z=='.' ){. 
4130: 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20     z += incr;.  
4140: 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a    if( !isdigit(*
4150: 28 75 38 2a 29 7a 29 20 29 20 72 65 74 75 72 6e  (u8*)z) ) return
4160: 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69   0;.    while( i
4170: 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20  sdigit(*(u8*)z) 
4180: 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a  ){ z += incr; }.
4190: 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20      if( realnum 
41a0: 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a  ) *realnum = 1;.
41b0: 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65    }.  if( *z=='e
41c0: 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a  ' || *z=='E' ){.
41d0: 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20      z += incr;. 
41e0: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
41f0: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 20 2b 3d  | *z=='-' ) z +=
4200: 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21   incr;.    if( !
4210: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
4220: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
4230: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
4240: 2a 28 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d  *(u8*)z) ){ z +=
4250: 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28   incr; }.    if(
4260: 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c   realnum ) *real
4270: 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72  num = 1;.  }.  r
4280: 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a  eturn *z==0;.}..
4290: 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  /*.** The string
42a0: 20 7a 5b 5d 20 69 73 20 61 6e 20 61 73 63 69 69   z[] is an ascii
42b0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
42c0: 6f 66 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  of a real number
42d0: 2e 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 69  ..** Convert thi
42e0: 73 20 73 74 72 69 6e 67 20 74 6f 20 61 20 64 6f  s string to a do
42f0: 75 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  uble..**.** This
4300: 20 72 6f 75 74 69 6e 65 20 61 73 73 75 6d 65 73   routine assumes
4310: 20 74 68 61 74 20 7a 5b 5d 20 72 65 61 6c 6c 79   that z[] really
4320: 20 69 73 20 61 20 76 61 6c 69 64 20 6e 75 6d 62   is a valid numb
4330: 65 72 2e 20 20 49 66 20 69 74 0a 2a 2a 20 69 73  er.  If it.** is
4340: 20 6e 6f 74 2c 20 74 68 65 20 72 65 73 75 6c 74   not, the result
4350: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a   is undefined..*
4360: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4370: 65 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  e is used instea
4380: 64 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  d of the library
4390: 20 61 74 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e   atof() function
43a0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 20   because.** the 
43b0: 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29 20 6d  library atof() m
43c0: 69 67 68 74 20 77 61 6e 74 20 74 6f 20 75 73 65  ight want to use
43d0: 20 22 2c 22 20 61 73 20 74 68 65 20 64 65 63 69   "," as the deci
43e0: 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 73 74 65 61  mal point instea
43f0: 64 0a 2a 2a 20 6f 66 20 22 2e 22 20 64 65 70 65  d.** of "." depe
4400: 6e 64 69 6e 67 20 6f 6e 20 68 6f 77 20 6c 6f 63  nding on how loc
4410: 61 6c 65 20 69 73 20 73 65 74 2e 20 20 42 75 74  ale is set.  But
4420: 20 74 68 61 74 20 77 6f 75 6c 64 20 63 61 75 73   that would caus
4430: 65 20 70 72 6f 62 6c 65 6d 73 0a 2a 2a 20 66 6f  e problems.** fo
4440: 72 20 53 51 4c 2e 20 20 53 6f 20 74 68 69 73 20  r SQL.  So this 
4450: 72 6f 75 74 69 6e 65 20 61 6c 77 61 79 73 20 75  routine always u
4460: 73 65 73 20 22 2e 22 20 72 65 67 61 72 64 6c 65  ses "." regardle
4470: 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
4480: 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
4490: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
44a0: 64 6f 75 62 6c 65 20 2a 70 52 65 73 75 6c 74 29  double *pResult)
44b0: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
44c0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
44d0: 4f 49 4e 54 0a 20 20 69 6e 74 20 73 69 67 6e 20  OINT.  int sign 
44e0: 3d 20 31 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  = 1;.  const cha
44f0: 72 20 2a 7a 42 65 67 69 6e 20 3d 20 7a 3b 0a 20  r *zBegin = z;. 
4500: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4510: 20 76 31 20 3d 20 30 2e 30 3b 0a 20 20 69 66 28   v1 = 0.0;.  if(
4520: 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20   *z=='-' ){.    
4530: 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 7a  sign = -1;.    z
4540: 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ++;.  }else if( 
4550: 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a  *z=='+' ){.    z
4560: 2b 2b 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28  ++;.  }.  while(
4570: 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a   isdigit(*(u8*)z
4580: 29 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 76 31  ) ){.    v1 = v1
4590: 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30  *10.0 + (*z - '0
45a0: 27 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d  ');.    z++;.  }
45b0: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29  .  if( *z=='.' )
45c0: 7b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45  {.    LONGDOUBLE
45d0: 5f 54 59 50 45 20 64 69 76 69 73 6f 72 20 3d 20  _TYPE divisor = 
45e0: 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20  1.0;.    z++;.  
45f0: 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74    while( isdigit
4600: 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20  (*(u8*)z) ){.   
4610: 20 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20     v1 = v1*10.0 
4620: 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20  + (*z - '0');.  
4630: 20 20 20 20 64 69 76 69 73 6f 72 20 2a 3d 20 31      divisor *= 1
4640: 30 2e 30 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a  0.0;.      z++;.
4650: 20 20 20 20 7d 0a 20 20 20 20 76 31 20 2f 3d 20      }.    v1 /= 
4660: 64 69 76 69 73 6f 72 3b 0a 20 20 7d 0a 20 20 69  divisor;.  }.  i
4670: 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a  f( *z=='e' || *z
4680: 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20 69 6e 74  =='E' ){.    int
4690: 20 65 73 69 67 6e 20 3d 20 31 3b 0a 20 20 20 20   esign = 1;.    
46a0: 69 6e 74 20 65 76 61 6c 20 3d 20 30 3b 0a 20 20  int eval = 0;.  
46b0: 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50    LONGDOUBLE_TYP
46c0: 45 20 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20  E scale = 1.0;. 
46d0: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20     z++;.    if( 
46e0: 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20  *z=='-' ){.     
46f0: 20 65 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20   esign = -1;.   
4700: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73     z++;.    }els
4710: 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b  e if( *z=='+' ){
4720: 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
4730: 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73 64  }.    while( isd
4740: 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b  igit(*(u8*)z) ){
4750: 0a 20 20 20 20 20 20 65 76 61 6c 20 3d 20 65 76  .      eval = ev
4760: 61 6c 2a 31 30 20 2b 20 2a 7a 20 2d 20 27 30 27  al*10 + *z - '0'
4770: 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
4780: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76   }.    while( ev
4790: 61 6c 3e 3d 36 34 20 29 7b 20 73 63 61 6c 65 20  al>=64 ){ scale 
47a0: 2a 3d 20 31 2e 30 65 2b 36 34 3b 20 65 76 61 6c  *= 1.0e+64; eval
47b0: 20 2d 3d 20 36 34 3b 20 7d 0a 20 20 20 20 77 68   -= 64; }.    wh
47c0: 69 6c 65 28 20 65 76 61 6c 3e 3d 31 36 20 29 7b  ile( eval>=16 ){
47d0: 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31   scale *= 1.0e+1
47e0: 36 3b 20 65 76 61 6c 20 2d 3d 20 31 36 3b 20 7d  6; eval -= 16; }
47f0: 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c  .    while( eval
4800: 3e 3d 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20  >=4 ){ scale *= 
4810: 31 2e 30 65 2b 34 3b 20 65 76 61 6c 20 2d 3d 20  1.0e+4; eval -= 
4820: 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20  4; }.    while( 
4830: 65 76 61 6c 3e 3d 31 20 29 7b 20 73 63 61 6c 65  eval>=1 ){ scale
4840: 20 2a 3d 20 31 2e 30 65 2b 31 3b 20 65 76 61 6c   *= 1.0e+1; eval
4850: 20 2d 3d 20 31 3b 20 7d 0a 20 20 20 20 69 66 28   -= 1; }.    if(
4860: 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20 20   esign<0 ){.    
4870: 20 20 76 31 20 2f 3d 20 73 63 61 6c 65 3b 0a 20    v1 /= scale;. 
4880: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4890: 76 31 20 2a 3d 20 73 63 61 6c 65 3b 0a 20 20 20  v1 *= scale;.   
48a0: 20 7d 0a 20 20 7d 0a 20 20 2a 70 52 65 73 75 6c   }.  }.  *pResul
48b0: 74 20 3d 20 73 69 67 6e 3c 30 20 3f 20 2d 76 31  t = sign<0 ? -v1
48c0: 20 3a 20 76 31 3b 0a 20 20 72 65 74 75 72 6e 20   : v1;.  return 
48d0: 7a 20 2d 20 7a 42 65 67 69 6e 3b 0a 23 65 6c 73  z - zBegin;.#els
48e0: 65 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  e.  return sqlit
48f0: 65 33 61 74 6f 69 36 34 28 7a 2c 20 70 52 65 73  e3atoi64(z, pRes
4900: 75 6c 74 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  ult);.#endif /* 
4910: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
4920: 54 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f 0a 7d 0a  TING_POINT */.}.
4930: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52  ./*.** Return TR
4940: 55 45 20 69 66 20 7a 4e 75 6d 20 69 73 20 61 20  UE if zNum is a 
4950: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4960: 74 65 67 65 72 20 61 6e 64 20 77 72 69 74 65 0a  teger and write.
4970: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
4980: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  the integer into
4990: 20 2a 70 4e 75 6d 2e 20 20 49 66 20 7a 4e 75 6d   *pNum.  If zNum
49a0: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
49b0: 65 72 0a 2a 2a 20 6f 72 20 69 73 20 61 6e 20 69  er.** or is an i
49c0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
49d0: 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 65  oo large to be e
49e0: 78 70 72 65 73 73 65 64 20 77 69 74 68 20 36 34  xpressed with 64
49f0: 20 62 69 74 73 2c 0a 2a 2a 20 74 68 65 6e 20 72   bits,.** then r
4a00: 65 74 75 72 6e 20 66 61 6c 73 65 2e 20 20 49 66  eturn false.  If
4a10: 20 6e 3e 30 20 61 6e 64 20 74 68 65 20 69 6e 74   n>0 and the int
4a20: 65 67 65 72 20 69 73 20 73 74 72 69 6e 67 20 69  eger is string i
4a30: 73 20 6e 6f 74 0a 2a 2a 20 65 78 61 63 74 6c 79  s not.** exactly
4a40: 20 6e 20 62 79 74 65 73 20 6c 6f 6e 67 2c 20 72   n bytes long, r
4a50: 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a  eturn false..**.
4a60: 2a 2a 20 57 68 65 6e 20 74 68 69 73 20 72 6f 75  ** When this rou
4a70: 74 69 6e 65 20 77 61 73 20 6f 72 69 67 69 6e 61  tine was origina
4a80: 6c 6c 79 20 77 72 69 74 74 65 6e 20 69 74 20 64  lly written it d
4a90: 65 61 6c 74 20 77 69 74 68 20 6f 6e 6c 79 0a 2a  ealt with only.*
4aa0: 2a 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72 73  * 32-bit numbers
4ab0: 2e 20 20 41 74 20 74 68 61 74 20 74 69 6d 65 2c  .  At that time,
4ac0: 20 69 74 20 77 61 73 20 6d 75 63 68 20 66 61 73   it was much fas
4ad0: 74 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20  ter than the.** 
4ae0: 61 74 6f 69 28 29 20 6c 69 62 72 61 72 79 20 72  atoi() library r
4af0: 6f 75 74 69 6e 65 20 69 6e 20 52 65 64 48 61 74  outine in RedHat
4b00: 20 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c   7.2..*/.int sql
4b10: 69 74 65 33 61 74 6f 69 36 34 28 63 6f 6e 73 74  ite3atoi64(const
4b20: 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34   char *zNum, i64
4b30: 20 2a 70 4e 75 6d 29 7b 0a 20 20 69 36 34 20 76   *pNum){.  i64 v
4b40: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67 3b   = 0;.  int neg;
4b50: 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69  .  int i, c;.  i
4b60: 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b  f( *zNum=='-' ){
4b70: 0a 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20  .    neg = 1;.  
4b80: 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73    zNum++;.  }els
4b90: 65 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  e if( *zNum=='+'
4ba0: 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b   ){.    neg = 0;
4bb0: 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d  .    zNum++;.  }
4bc0: 65 6c 73 65 7b 0a 20 20 20 20 6e 65 67 20 3d 20  else{.    neg = 
4bd0: 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  0;.  }.  for(i=0
4be0: 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27  ; (c=zNum[i])>='
4bf0: 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b  0' && c<='9'; i+
4c00: 2b 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31 30  +){.    v = v*10
4c10: 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 7d 0a   + c - '0';.  }.
4c20: 20 20 2a 70 4e 75 6d 20 3d 20 6e 65 67 20 3f 20    *pNum = neg ? 
4c30: 2d 76 20 3a 20 76 3b 0a 20 20 72 65 74 75 72 6e  -v : v;.  return
4c40: 20 63 3d 3d 30 20 26 26 20 69 3e 30 20 26 26 20   c==0 && i>0 && 
4c50: 0a 20 20 20 20 20 20 28 69 3c 31 39 20 7c 7c 20  .      (i<19 || 
4c60: 28 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d 70  (i==19 && memcmp
4c70: 28 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32 30 33  (zNum,"922337203
4c80: 36 38 35 34 37 37 35 38 30 37 22 2c 31 39 29 3c  6854775807",19)<
4c90: 3d 30 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  =0));.}../*.** T
4ca0: 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72  he string zNum r
4cb0: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74  epresents an int
4cc0: 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69 67  eger.  There mig
4cd0: 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  ht be some other
4ce0: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
4cf0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e  following the in
4d00: 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20 74  teger too, but t
4d10: 68 61 74 20 70 61 72 74 20 69 73 20 69 67 6e 6f  hat part is igno
4d20: 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69  red..** If the i
4d30: 6e 74 65 67 65 72 20 74 68 61 74 20 74 68 65 20  nteger that the 
4d40: 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72  prefix of zNum r
4d50: 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20 66  epresents will f
4d60: 69 74 20 69 6e 20 61 0a 2a 2a 20 33 32 2d 62 69  it in a.** 32-bi
4d70: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
4d80: 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20 20  , return TRUE.  
4d90: 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e  Otherwise return
4da0: 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68   FALSE..**.** Th
4db0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
4dc0: 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68 65  ns FALSE for the
4dd0: 20 73 74 72 69 6e 67 20 2d 32 31 34 37 34 38 33   string -2147483
4de0: 36 34 38 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a  648 even that.**
4df0: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69 6c   that number wil
4e00: 6c 20 69 6e 20 66 61 63 74 20 66 69 74 20 69 6e  l in fact fit in
4e10: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
4e20: 72 2e 20 20 42 75 74 20 70 6f 73 69 74 69 76 65  r.  But positive
4e30: 0a 2a 2a 20 32 31 34 37 34 38 33 36 34 38 20 77  .** 2147483648 w
4e40: 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 33  ill not fit in 3
4e50: 32 20 62 69 74 73 2e 20 20 53 6f 20 69 74 20 73  2 bits.  So it s
4e60: 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20 72 65  eems safer to re
4e70: 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a 2a  turn.** false..*
4e80: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
4e90: 69 74 65 33 46 69 74 73 49 6e 33 32 42 69 74 73  ite3FitsIn32Bits
4ea0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
4eb0: 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a  m){.  int i, c;.
4ec0: 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27    if( *zNum=='-'
4ed0: 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29   || *zNum=='+' )
4ee0: 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69   zNum++;.  for(i
4ef0: 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e  =0; (c=zNum[i])>
4f00: 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20  ='0' && c<='9'; 
4f10: 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72 6e 20  i++){}.  return 
4f20: 69 3c 31 30 20 7c 7c 20 28 69 3d 3d 31 30 20 26  i<10 || (i==10 &
4f30: 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 32  & memcmp(zNum,"2
4f40: 31 34 37 34 38 33 36 34 37 22 2c 31 30 29 3c 3d  147483647",10)<=
4f50: 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  0);.}../*.** If 
4f60: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
4f70: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4f80: 77 69 6c 6c 20 66 69 74 20 69 6e 20 33 32 2d 62  will fit in 32-b
4f90: 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a  its, then set.**
4fa0: 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61 74   *pValue to that
4fb0: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65 74   integer and ret
4fc0: 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65 72  urn true.  Other
4fd0: 77 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c 73  wise return fals
4fe0: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
4ff0: 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
5000: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74 20  char *zNum, int 
5010: 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20  *pValue){.  if( 
5020: 73 71 6c 69 74 65 33 46 69 74 73 49 6e 33 32 42  sqlite3FitsIn32B
5030: 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20  its(zNum) ){.   
5040: 20 2a 70 56 61 6c 75 65 20 3d 20 61 74 6f 69 28   *pValue = atoi(
5050: 7a 4e 75 6d 29 3b 0a 20 20 20 20 72 65 74 75 72  zNum);.    retur
5060: 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 1;.  }.  retur
5070: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n 0;.}../*.** Th
5080: 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72 65  e string zNum re
5090: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
50a0: 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69 67 68  ger.  There migh
50b0: 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 0a  t be some other.
50c0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ** information f
50d0: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e 74  ollowing the int
50e0: 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20 74 68  eger too, but th
50f0: 61 74 20 70 61 72 74 20 69 73 20 69 67 6e 6f 72  at part is ignor
5100: 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e  ed..** If the in
5110: 74 65 67 65 72 20 74 68 61 74 20 74 68 65 20 70  teger that the p
5120: 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72 65  refix of zNum re
5130: 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20 66 69  presents will fi
5140: 74 20 69 6e 20 61 0a 2a 2a 20 36 34 2d 62 69 74  t in a.** 64-bit
5150: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
5160: 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20 20 4f   return TRUE.  O
5170: 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20  therwise return 
5180: 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  FALSE..**.** Thi
5190: 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
51a0: 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68 65 20  s FALSE for the 
51b0: 73 74 72 69 6e 67 20 2d 39 32 32 33 33 37 32 30  string -92233720
51c0: 33 36 38 35 34 37 37 35 38 30 38 20 65 76 65 6e  36854775808 even
51d0: 20 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75   that.** that nu
51e0: 6d 62 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74 68  mber will, in th
51f0: 65 6f 72 79 20 66 69 74 20 69 6e 20 61 20 36 34  eory fit in a 64
5200: 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 20 20 50  -bit integer.  P
5210: 6f 73 69 74 69 76 65 0a 2a 2a 20 39 32 32 33 33  ositive.** 92233
5220: 37 33 30 33 36 38 35 34 37 37 35 38 30 38 20 77  73036854775808 w
5230: 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 36  ill not fit in 6
5240: 34 20 62 69 74 73 2e 20 20 53 6f 20 69 74 20 73  4 bits.  So it s
5250: 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20 72 65  eems safer to re
5260: 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a 2a  turn.** false..*
5270: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74  /.int sqlite3Fit
5280: 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73 74 20  sIn64Bits(const 
5290: 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69  char *zNum){.  i
52a0: 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a  nt i, c;.  if( *
52b0: 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e  zNum=='-' || *zN
52c0: 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b  um=='+' ) zNum++
52d0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d  ;.  for(i=0; (c=
52e0: 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26  zNum[i])>='0' &&
52f0: 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a   c<='9'; i++){}.
5300: 20 20 72 65 74 75 72 6e 20 69 3c 31 39 20 7c 7c    return i<19 ||
5310: 20 28 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d   (i==19 && memcm
5320: 70 28 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32 30  p(zNum,"92233720
5330: 33 36 38 35 34 37 37 35 38 30 37 22 2c 31 39 29  36854775807",19)
5340: 3c 3d 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  <=0);.}.../*.** 
5350: 43 68 61 6e 67 65 20 74 68 65 20 73 71 6c 69 74  Change the sqlit
5360: 65 2e 6d 61 67 69 63 20 66 72 6f 6d 20 53 51 4c  e.magic from SQL
5370: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74  ITE_MAGIC_OPEN t
5380: 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  o SQLITE_MAGIC_B
5390: 55 53 59 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61  USY..** Return a
53a0: 6e 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72  n error (non-zer
53b0: 6f 29 20 69 66 20 74 68 65 20 6d 61 67 69 63 20  o) if the magic 
53c0: 77 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d  was not SQLITE_M
53d0: 41 47 49 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65  AGIC_OPEN.** whe
53e0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
53f0: 73 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20  s called..**.** 
5400: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
5410: 61 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74  a attempt to det
5420: 65 63 74 20 69 66 20 74 77 6f 20 74 68 72 65 61  ect if two threa
5430: 64 73 20 75 73 65 20 74 68 65 0a 2a 2a 20 73 61  ds use the.** sa
5440: 6d 65 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74  me sqlite* point
5450: 65 72 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  er at the same t
5460: 69 6d 65 2e 20 20 54 68 65 72 65 20 69 73 20 61  ime.  There is a
5470: 20 72 61 63 65 20 0a 2a 2a 20 63 6f 6e 64 69 74   race .** condit
5480: 69 6f 6e 20 73 6f 20 69 74 20 69 73 20 70 6f 73  ion so it is pos
5490: 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20 65  sible that the e
54a0: 72 72 6f 72 20 69 73 20 6e 6f 74 20 64 65 74 65  rror is not dete
54b0: 63 74 65 64 2e 0a 2a 2a 20 42 75 74 20 75 73 75  cted..** But usu
54c0: 61 6c 6c 79 20 74 68 65 20 70 72 6f 62 6c 65 6d  ally the problem
54d0: 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 2e 20 20   will be seen.  
54e0: 54 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20  The result will 
54f0: 62 65 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 77  be an.** error w
5500: 68 69 63 68 20 63 61 6e 20 62 65 20 75 73 65 64  hich can be used
5510: 20 74 6f 20 64 65 62 75 67 20 74 68 65 20 61 70   to debug the ap
5520: 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20 69  plication that i
5530: 73 0a 2a 2a 20 75 73 69 6e 67 20 53 51 4c 69 74  s.** using SQLit
5540: 65 20 69 6e 63 6f 72 72 65 63 74 6c 79 2e 0a 2a  e incorrectly..*
5550: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 30 32  *.** Ticket #202
5560: 3a 20 20 49 66 20 64 62 2d 3e 6d 61 67 69 63 20  :  If db->magic 
5570: 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 6f  is not a valid o
5580: 70 65 6e 20 76 61 6c 75 65 2c 20 74 61 6b 65 20  pen value, take 
5590: 63 61 72 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20 6d  care not.** to m
55a0: 6f 64 69 66 79 20 74 68 65 20 64 62 20 73 74 72  odify the db str
55b0: 75 63 74 75 72 65 20 61 74 20 61 6c 6c 2e 20 20  ucture at all.  
55c0: 49 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61 74  It could be that
55d0: 20 64 62 20 69 73 20 61 20 73 74 61 6c 65 0a 2a   db is a stale.*
55e0: 2a 20 70 6f 69 6e 74 65 72 2e 20 20 49 6e 20 6f  * pointer.  In o
55f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 20 63  ther words, it c
5600: 6f 75 6c 64 20 62 65 20 74 68 61 74 20 74 68 65  ould be that the
5610: 72 65 20 68 61 73 20 62 65 65 6e 20 61 20 70 72  re has been a pr
5620: 69 6f 72 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20 73  ior.** call to s
5630: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29  qlite3_close(db)
5640: 20 61 6e 64 20 64 62 20 68 61 73 20 62 65 65 6e   and db has been
5650: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20 41   deallocated.  A
5660: 6e 64 20 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74 20  nd we do.** not 
5670: 77 61 6e 74 20 74 6f 20 77 72 69 74 65 20 69 6e  want to write in
5680: 74 6f 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 6d  to deallocated m
5690: 65 6d 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  emory..*/.int sq
56a0: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 73 71  lite3SafetyOn(sq
56b0: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66  lite3 *db){.  if
56c0: 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c  ( db->magic==SQL
56d0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29  ITE_MAGIC_OPEN )
56e0: 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
56f0: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  = SQLITE_MAGIC_B
5700: 55 53 59 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  USY;.    return 
5710: 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  0;.  }else if( d
5720: 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45  b->magic==SQLITE
5730: 5f 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a 20  _MAGIC_BUSY ){. 
5740: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
5750: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
5760: 52 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  R;.    db->flags
5770: 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72   |= SQLITE_Inter
5780: 72 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rupt;.  }.  retu
5790: 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  rn 1;.}../*.** C
57a0: 68 61 6e 67 65 20 74 68 65 20 6d 61 67 69 63 20  hange the magic 
57b0: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49  from SQLITE_MAGI
57c0: 43 5f 42 55 53 59 20 74 6f 20 53 51 4c 49 54 45  C_BUSY to SQLITE
57d0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20  _MAGIC_OPEN..** 
57e0: 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  Return an error 
57f0: 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68  (non-zero) if th
5800: 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20  e magic was not 
5810: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
5820: 59 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72  Y.** when this r
5830: 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64  outine is called
5840: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
5850: 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69 74 65  SafetyOff(sqlite
5860: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
5870: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
5880: 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a 20 20  MAGIC_BUSY ){.  
5890: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
58a0: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b  LITE_MAGIC_OPEN;
58b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
58c0: 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6d   }else if( db->m
58d0: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
58e0: 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20 20 64  IC_OPEN ){.    d
58f0: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
5900: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
5910: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
5920: 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74  SQLITE_Interrupt
5930: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31  ;.  }.  return 1
5940: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  ;.}../*.** Check
5950: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65   to make sure we
5960: 20 68 61 76 65 20 61 20 76 61 6c 69 64 20 64 62   have a valid db
5970: 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 20   pointer.  This 
5980: 74 65 73 74 20 69 73 20 6e 6f 74 0a 2a 2a 20 66  test is not.** f
5990: 6f 6f 6c 70 72 6f 6f 66 20 62 75 74 20 69 74 20  oolproof but it 
59a0: 64 6f 65 73 20 70 72 6f 76 69 64 65 20 73 6f 6d  does provide som
59b0: 65 20 6d 65 61 73 75 72 65 20 6f 66 20 70 72 6f  e measure of pro
59c0: 74 65 63 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a  tection against.
59d0: 2a 2a 20 6d 69 73 75 73 65 20 6f 66 20 74 68 65  ** misuse of the
59e0: 20 69 6e 74 65 72 66 61 63 65 20 73 75 63 68 20   interface such 
59f0: 61 73 20 70 61 73 73 69 6e 67 20 69 6e 20 64 62  as passing in db
5a00: 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 61   pointers that a
5a10: 72 65 0a 2a 2a 20 4e 55 4c 4c 20 6f 72 20 77 68  re.** NULL or wh
5a20: 69 63 68 20 68 61 76 65 20 62 65 65 6e 20 70 72  ich have been pr
5a30: 65 76 69 6f 75 73 6c 79 20 63 6c 6f 73 65 64 2e  eviously closed.
5a40: 20 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e    If this routin
5a50: 65 20 72 65 74 75 72 6e 73 0a 2a 2a 20 54 52 55  e returns.** TRU
5a60: 45 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  E it means that 
5a70: 74 68 65 20 64 62 20 70 6f 69 6e 74 65 72 20 69  the db pointer i
5a80: 73 20 69 6e 76 61 6c 69 64 20 61 6e 64 20 73 68  s invalid and sh
5a90: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 64  ould not be.** d
5aa0: 65 72 65 66 65 72 65 6e 63 65 64 20 66 6f 72 20  ereferenced for 
5ab0: 61 6e 79 20 72 65 61 73 6f 6e 2e 20 20 54 68 65  any reason.  The
5ac0: 20 63 61 6c 6c 69 6e 67 20 66 75 6e 63 74 69 6f   calling functio
5ad0: 6e 20 73 68 6f 75 6c 64 20 69 6e 76 6f 6b 65 0a  n should invoke.
5ae0: 2a 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ** SQLITE_MISUSE
5af0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0a 2a 2f   immediately..*/
5b00: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
5b10: 74 79 43 68 65 63 6b 28 73 71 6c 69 74 65 33 20  tyCheck(sqlite3 
5b20: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6d 61 67 69  *db){.  int magi
5b30: 63 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  c;.  if( db==0 )
5b40: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 6d 61 67   return 1;.  mag
5b50: 69 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a  ic = db->magic;.
5b60: 20 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c    if( magic!=SQL
5b70: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
5b80: 20 26 26 0a 20 20 20 20 20 20 20 20 20 6d 61 67   &&.         mag
5b90: 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic!=SQLITE_MAGIC
5ba0: 5f 4f 50 45 4e 20 26 26 0a 20 20 20 20 20 20 20  _OPEN &&.       
5bb0: 20 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f    magic!=SQLITE_
5bc0: 4d 41 47 49 43 5f 42 55 53 59 20 29 20 72 65 74  MAGIC_BUSY ) ret
5bd0: 75 72 6e 20 31 3b 0a 20 20 72 65 74 75 72 6e 20  urn 1;.  return 
5be0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0;.}../*.** The 
5bf0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
5c00: 69 6e 74 65 67 65 72 20 65 6e 63 6f 64 69 6e 67  integer encoding
5c10: 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
5c20: 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a 2a 2a 20 20 20  **.** KEY:.**   
5c30: 20 20 20 20 20 20 41 20 3d 20 30 78 78 78 78 78        A = 0xxxxx
5c40: 78 78 20 20 20 20 37 20 62 69 74 73 20 6f 66 20  xx    7 bits of 
5c50: 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61  data and one fla
5c60: 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20  g bit.**        
5c70: 20 42 20 3d 20 31 78 78 78 78 78 78 78 20 20 20   B = 1xxxxxxx   
5c80: 20 37 20 62 69 74 73 20 6f 66 20 64 61 74 61 20   7 bits of data 
5c90: 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74  and one flag bit
5ca0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 43 20 3d 20  .**         C = 
5cb0: 78 78 78 78 78 78 78 78 20 20 20 20 38 20 62 69  xxxxxxxx    8 bi
5cc0: 74 73 20 6f 66 20 64 61 74 61 0a 2a 2a 0a 2a 2a  ts of data.**.**
5cd0: 20 20 37 20 62 69 74 73 20 2d 20 41 0a 2a 2a 20    7 bits - A.** 
5ce0: 31 34 20 62 69 74 73 20 2d 20 42 41 0a 2a 2a 20  14 bits - BA.** 
5cf0: 32 31 20 62 69 74 73 20 2d 20 42 42 41 0a 2a 2a  21 bits - BBA.**
5d00: 20 32 38 20 62 69 74 73 20 2d 20 42 42 42 41 0a   28 bits - BBBA.
5d10: 2a 2a 20 33 35 20 62 69 74 73 20 2d 20 42 42 42  ** 35 bits - BBB
5d20: 42 41 0a 2a 2a 20 34 32 20 62 69 74 73 20 2d 20  BA.** 42 bits - 
5d30: 42 42 42 42 42 41 0a 2a 2a 20 34 39 20 62 69 74  BBBBBA.** 49 bit
5d40: 73 20 2d 20 42 42 42 42 42 42 41 0a 2a 2a 20 35  s - BBBBBBA.** 5
5d50: 36 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42  6 bits - BBBBBBB
5d60: 41 0a 2a 2a 20 36 34 20 62 69 74 73 20 2d 20 42  A.** 64 bits - B
5d70: 42 42 42 42 42 42 42 43 0a 2a 2f 0a 0a 2f 2a 0a  BBBBBBBC.*/../*.
5d80: 2a 2a 20 57 72 69 74 65 20 61 20 36 34 2d 62 69  ** Write a 64-bi
5d90: 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  t variable-lengt
5da0: 68 20 69 6e 74 65 67 65 72 20 74 6f 20 6d 65 6d  h integer to mem
5db0: 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20  ory starting at 
5dc0: 70 5b 30 5d 2e 0a 2a 2a 20 54 68 65 20 6c 65 6e  p[0]..** The len
5dd0: 67 74 68 20 6f 66 20 64 61 74 61 20 77 72 69 74  gth of data writ
5de0: 65 20 77 69 6c 6c 20 62 65 20 62 65 74 77 65 65  e will be betwee
5df0: 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65 73 2e  n 1 and 9 bytes.
5e00: 20 20 54 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20    The number.** 
5e10: 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e  of bytes written
5e20: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a   is returned..**
5e30: 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 2d 6c  .** A variable-l
5e40: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 63 6f  ength integer co
5e50: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 6f  nsists of the lo
5e60: 77 65 72 20 37 20 62 69 74 73 20 6f 66 20 65 61  wer 7 bits of ea
5e70: 63 68 20 62 79 74 65 0a 2a 2a 20 66 6f 72 20 61  ch byte.** for a
5e80: 6c 6c 20 62 79 74 65 73 20 74 68 61 74 20 68 61  ll bytes that ha
5e90: 76 65 20 74 68 65 20 38 74 68 20 62 69 74 20 73  ve the 8th bit s
5ea0: 65 74 20 61 6e 64 20 6f 6e 65 20 62 79 74 65 20  et and one byte 
5eb0: 77 69 74 68 20 74 68 65 20 38 74 68 0a 2a 2a 20  with the 8th.** 
5ec0: 62 69 74 20 63 6c 65 61 72 2e 20 20 45 78 63 65  bit clear.  Exce
5ed0: 70 74 2c 20 69 66 20 77 65 20 67 65 74 20 74 6f  pt, if we get to
5ee0: 20 74 68 65 20 39 74 68 20 62 79 74 65 2c 20 69   the 9th byte, i
5ef0: 74 20 73 74 6f 72 65 73 20 74 68 65 20 66 75 6c  t stores the ful
5f00: 6c 0a 2a 2a 20 38 20 62 69 74 73 20 61 6e 64 20  l.** 8 bits and 
5f10: 69 73 20 74 68 65 20 6c 61 73 74 20 62 79 74 65  is the last byte
5f20: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
5f30: 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
5f40: 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20  ed char *p, u64 
5f50: 76 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20  v){.  int i, j, 
5f60: 6e 3b 0a 20 20 75 38 20 62 75 66 5b 31 30 5d 3b  n;.  u8 buf[10];
5f70: 0a 20 20 69 66 28 20 76 20 26 20 28 28 28 75 36  .  if( v & (((u6
5f80: 34 29 30 78 66 66 30 30 30 30 30 30 29 3c 3c 33  4)0xff000000)<<3
5f90: 32 29 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d  2) ){.    p[8] =
5fa0: 20 76 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b   v;.    v >>= 8;
5fb0: 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e  .    for(i=7; i>
5fc0: 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20  =0; i--){.      
5fd0: 70 5b 69 5d 20 3d 20 28 76 20 26 20 30 78 37 66  p[i] = (v & 0x7f
5fe0: 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 20 20  ) | 0x80;.      
5ff0: 76 20 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20  v >>= 7;.    }. 
6000: 20 20 20 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d     return 9;.  }
6010: 20 20 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20      .  n = 0;.  
6020: 64 6f 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d  do{.    buf[n++]
6030: 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c 20   = (v & 0x7f) | 
6040: 30 78 38 30 3b 0a 20 20 20 20 76 20 3e 3e 3d 20  0x80;.    v >>= 
6050: 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d  7;.  }while( v!=
6060: 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d  0 );.  buf[0] &=
6070: 20 30 78 37 66 3b 0a 20 20 61 73 73 65 72 74 28   0x7f;.  assert(
6080: 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69   n<=9 );.  for(i
6090: 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b  =0, j=n-1; j>=0;
60a0: 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20   j--, i++){.    
60b0: 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20  p[i] = buf[j];. 
60c0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d   }.  return n;.}
60d0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36  ../*.** Read a 6
60e0: 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c  4-bit variable-l
60f0: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66 72  ength integer fr
6100: 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69  om memory starti
6110: 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52  ng at p[0]..** R
6120: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
6130: 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e 20   of bytes read. 
6140: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73 74   The value is st
6150: 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69  ored in *v..*/.i
6160: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  nt sqlite3GetVar
6170: 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
6180: 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20  ed char *p, u64 
6190: 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20  *v){.  u32 x;.  
61a0: 75 36 34 20 78 36 34 3b 0a 20 20 69 6e 74 20 6e  u64 x64;.  int n
61b0: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
61c0: 72 20 63 3b 0a 20 20 69 66 28 20 28 28 63 20 3d  r c;.  if( ((c =
61d0: 20 70 5b 30 5d 29 20 26 20 30 78 38 30 29 3d 3d   p[0]) & 0x80)==
61e0: 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b  0 ){.    *v = c;
61f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
6200: 20 7d 0a 20 20 78 20 3d 20 63 20 26 20 30 78 37   }.  x = c & 0x7
6210: 66 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  f;.  if( ((c = p
6220: 5b 31 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [1]) & 0x80)==0 
6230: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
6240: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
6250: 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 2;.  }.  x = 
6260: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
6270: 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  );.  if( ((c = p
6280: 5b 32 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [2]) & 0x80)==0 
6290: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
62a0: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
62b0: 72 6e 20 33 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 3;.  }.  x = 
62c0: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
62d0: 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  );.  if( ((c = p
62e0: 5b 33 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [3]) & 0x80)==0 
62f0: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
6300: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
6310: 72 6e 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20  rn 4;.  }.  x64 
6320: 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78  = (x<<7) | (c&0x
6330: 37 66 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20  7f);.  n = 4;.  
6340: 64 6f 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b  do{.    c = p[n+
6350: 2b 5d 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39  +];.    if( n==9
6360: 20 29 7b 0a 20 20 20 20 20 20 78 36 34 20 3d 20   ){.      x64 = 
6370: 28 78 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20  (x64<<8) | c;.  
6380: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
6390: 0a 20 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c  .    x64 = (x64<
63a0: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
63b0: 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30    }while( (c & 0
63c0: 78 38 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20  x80)!=0 );.  *v 
63d0: 3d 20 78 36 34 3b 0a 20 20 72 65 74 75 72 6e 20  = x64;.  return 
63e0: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  n;.}../*.** Read
63f0: 20 61 20 33 32 2d 62 69 74 20 76 61 72 69 61 62   a 32-bit variab
6400: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
6410: 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74  r from memory st
6420: 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a  arting at p[0]..
6430: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
6440: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
6450: 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ad.  The value i
6460: 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a  s stored in *v..
6470: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  */.int sqlite3Ge
6480: 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
6490: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70  unsigned char *p
64a0: 2c 20 75 33 32 20 2a 76 29 7b 0a 20 20 75 33 32  , u32 *v){.  u32
64b0: 20 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75   x;.  int n;.  u
64c0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 3b 0a  nsigned char c;.
64d0: 20 20 69 66 28 20 28 28 73 69 67 6e 65 64 20 63    if( ((signed c
64e0: 68 61 72 2a 29 70 29 5b 30 5d 3e 3d 30 20 29 7b  har*)p)[0]>=0 ){
64f0: 0a 20 20 20 20 2a 76 20 3d 20 70 5b 30 5d 3b 0a  .    *v = p[0];.
6500: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
6510: 7d 0a 20 20 78 20 3d 20 70 5b 30 5d 20 26 20 30  }.  x = p[0] & 0
6520: 78 37 66 3b 0a 20 20 69 66 28 20 28 28 73 69 67  x7f;.  if( ((sig
6530: 6e 65 64 20 63 68 61 72 2a 29 70 29 5b 31 5d 3e  ned char*)p)[1]>
6540: 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28  =0 ){.    *v = (
6550: 78 3c 3c 37 29 20 7c 20 70 5b 31 5d 3b 0a 20 20  x<<7) | p[1];.  
6560: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a    return 2;.  }.
6570: 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28    x = (x<<7) | (
6580: 70 5b 31 5d 20 26 20 30 78 37 66 29 3b 0a 20 20  p[1] & 0x7f);.  
6590: 6e 20 3d 20 32 3b 0a 20 20 64 6f 7b 0a 20 20 20  n = 2;.  do{.   
65a0: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 28   x = (x<<7) | ((
65b0: 63 20 3d 20 70 5b 6e 2b 2b 5d 29 26 30 78 37 66  c = p[n++])&0x7f
65c0: 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 63 20  );.  }while( (c 
65d0: 26 20 30 78 38 30 29 21 3d 30 20 26 26 20 6e 3c  & 0x80)!=0 && n<
65e0: 39 20 29 3b 0a 20 20 2a 76 20 3d 20 78 3b 0a 20  9 );.  *v = x;. 
65f0: 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a   return n;.}../*
6600: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
6610: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74  umber of bytes t
6620: 68 61 74 20 77 69 6c 6c 20 62 65 20 6e 65 65 64  hat will be need
6630: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
6640: 67 69 76 65 6e 0a 2a 2a 20 36 34 2d 62 69 74 20  given.** 64-bit 
6650: 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20  integer..*/.int 
6660: 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
6670: 28 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69  (u64 v){.  int i
6680: 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20   = 0;.  do{.    
6690: 69 2b 2b 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37  i++;.    v >>= 7
66a0: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30  ;.  }while( v!=0
66b0: 20 26 26 20 69 3c 39 20 29 3b 0a 20 20 72 65 74   && i<9 );.  ret
66c0: 75 72 6e 20 69 3b 0a 7d 0a 0a 23 69 66 20 21 64  urn i;.}..#if !d
66d0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
66e0: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29  IT_BLOB_LITERAL)
66f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
6700: 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 5c 0a  TE_HAS_CODEC) \.
6710: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 53      || defined(S
6720: 51 4c 49 54 45 5f 54 45 53 54 29 0a 2f 2a 0a 2a  QLITE_TEST)./*.*
6730: 2a 20 54 72 61 6e 73 6c 61 74 65 20 61 20 73 69  * Translate a si
6740: 6e 67 6c 65 20 62 79 74 65 20 6f 66 20 48 65 78  ngle byte of Hex
6750: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
6760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
6770: 68 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 7b  hexToInt(int h){
6780: 0a 20 20 69 66 28 20 68 3e 3d 27 30 27 20 26 26  .  if( h>='0' &&
6790: 20 68 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20 72   h<='9' ){.    r
67a0: 65 74 75 72 6e 20 68 20 2d 20 27 30 27 3b 0a 20  eturn h - '0';. 
67b0: 20 7d 65 6c 73 65 20 69 66 28 20 68 3e 3d 27 61   }else if( h>='a
67c0: 27 20 26 26 20 68 3c 3d 27 66 27 20 29 7b 0a 20  ' && h<='f' ){. 
67d0: 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27 61     return h - 'a
67e0: 27 20 2b 20 31 30 3b 0a 20 20 7d 65 6c 73 65 7b  ' + 10;.  }else{
67f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 68 3e 3d  .    assert( h>=
6800: 27 41 27 20 26 26 20 68 3c 3d 27 46 27 20 29 3b  'A' && h<='F' );
6810: 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20  .    return h - 
6820: 27 41 27 20 2b 20 31 30 3b 0a 20 20 7d 0a 7d 0a  'A' + 10;.  }.}.
6830: 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54  #endif /* !SQLIT
6840: 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45  E_OMIT_BLOB_LITE
6850: 52 41 4c 20 7c 7c 20 53 51 4c 49 54 45 5f 48 41  RAL || SQLITE_HA
6860: 53 5f 43 4f 44 45 43 20 7c 7c 20 53 51 4c 49 54  S_CODEC || SQLIT
6870: 45 5f 54 45 53 54 20 2a 2f 0a 0a 23 69 66 20 21  E_TEST */..#if !
6880: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
6890: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
68a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
68b0: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 2f  ITE_HAS_CODEC)./
68c0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 42  *.** Convert a B
68d0: 4c 4f 42 20 6c 69 74 65 72 61 6c 20 6f 66 20 74  LOB literal of t
68e0: 68 65 20 66 6f 72 6d 20 22 78 27 68 68 68 68 68  he form "x'hhhhh
68f0: 68 27 22 20 69 6e 74 6f 20 69 74 73 20 62 69 6e  h'" into its bin
6900: 61 72 79 0a 2a 2a 20 76 61 6c 75 65 2e 20 20 52  ary.** value.  R
6910: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
6920: 74 6f 20 69 74 73 20 62 69 6e 61 72 79 20 76 61  to its binary va
6930: 6c 75 65 2e 20 20 53 70 61 63 65 20 74 6f 20 68  lue.  Space to h
6940: 6f 6c 64 20 74 68 65 0a 2a 2a 20 62 69 6e 61 72  old the.** binar
6950: 79 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  y value has been
6960: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
6970: 61 6c 6c 6f 63 20 61 6e 64 20 6d 75 73 74 20 62  alloc and must b
6980: 65 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 74 68  e freed by.** th
6990: 65 20 63 61 6c 6c 69 6e 67 20 72 6f 75 74 69 6e  e calling routin
69a0: 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  e..*/.void *sqli
69b0: 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 63 6f 6e  te3HexToBlob(con
69c0: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63  st char *z){.  c
69d0: 68 61 72 20 2a 7a 42 6c 6f 62 3b 0a 20 20 69 6e  har *zBlob;.  in
69e0: 74 20 69 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 73  t i;.  int n = s
69f0: 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20  trlen(z);.  if( 
6a00: 6e 25 32 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  n%2 ) return 0;.
6a10: 0a 20 20 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72  .  zBlob = (char
6a20: 20 2a 29 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28   *)sqliteMalloc(
6a30: 6e 2f 32 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  n/2);.  for(i=0;
6a40: 20 69 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20 20 20   i<n; i+=2){.   
6a50: 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 28 68   zBlob[i/2] = (h
6a60: 65 78 54 6f 49 6e 74 28 7a 5b 69 5d 29 3c 3c 34  exToInt(z[i])<<4
6a70: 29 20 7c 20 68 65 78 54 6f 49 6e 74 28 7a 5b 69  ) | hexToInt(z[i
6a80: 2b 31 5d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  +1]);.  }.  retu
6a90: 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64  rn zBlob;.}.#end
6aa0: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
6ab0: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20  IT_BLOB_LITERAL 
6ac0: 7c 7c 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  || SQLITE_HAS_CO
6ad0: 44 45 43 20 2a 2f 0a 0a 23 69 66 20 64 65 66 69  DEC */..#if defi
6ae0: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
6af0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  ./*.** Convert t
6b00: 65 78 74 20 67 65 6e 65 72 61 74 65 64 20 62 79  ext generated by
6b10: 20 74 68 65 20 22 25 70 22 20 63 6f 6e 76 65 72   the "%p" conver
6b20: 73 69 6f 6e 20 66 6f 72 6d 61 74 20 62 61 63 6b  sion format back
6b30: 20 69 6e 74 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74   into.** a point
6b40: 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  er..*/.void *sql
6b50: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 63 6f  ite3TextToPtr(co
6b60: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
6b70: 76 6f 69 64 20 2a 70 3b 0a 20 20 75 36 34 20 76  void *p;.  u64 v
6b80: 3b 0a 20 20 75 33 32 20 76 32 3b 0a 20 20 69 66  ;.  u32 v2;.  if
6b90: 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a  ( z[0]=='0' && z
6ba0: 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20  [1]=='x' ){.    
6bb0: 7a 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 76 20  z += 2;.  }.  v 
6bc0: 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a  = 0;.  while( *z
6bd0: 20 29 7b 0a 20 20 20 20 76 20 3d 20 28 76 3c 3c   ){.    v = (v<<
6be0: 34 29 20 2b 20 68 65 78 54 6f 49 6e 74 28 2a 7a  4) + hexToInt(*z
6bf0: 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a  );.    z++;.  }.
6c00: 20 20 69 66 28 20 73 69 7a 65 6f 66 28 70 29 3d    if( sizeof(p)=
6c10: 3d 73 69 7a 65 6f 66 28 76 29 20 29 7b 0a 20 20  =sizeof(v) ){.  
6c20: 20 20 70 20 3d 20 2a 28 76 6f 69 64 2a 2a 29 26    p = *(void**)&
6c30: 76 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  v;.  }else{.    
6c40: 61 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28 70  assert( sizeof(p
6c50: 29 3d 3d 73 69 7a 65 6f 66 28 76 32 29 20 29 3b  )==sizeof(v2) );
6c60: 0a 20 20 20 20 76 32 20 3d 20 28 75 33 32 29 76  .    v2 = (u32)v
6c70: 3b 0a 20 20 20 20 70 20 3d 20 2a 28 76 6f 69 64  ;.    p = *(void
6c80: 2a 2a 29 26 76 32 3b 0a 20 20 7d 0a 20 20 72 65  **)&v2;.  }.  re
6c90: 74 75 72 6e 20 70 3b 0a 7d 0a 23 65 6e 64 69 66  turn p;.}.#endif
6ca0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
6cb0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
6cc0: 53 71 6c 69 74 65 54 73 64 20 61 73 73 6f 63 69  SqliteTsd associ
6cd0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63 61  ated with the ca
6ce0: 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a 2a 2f  lling thread..*/
6cf0: 0a 73 74 61 74 69 63 20 53 71 6c 69 74 65 54 73  .static SqliteTs
6d00: 64 20 74 73 64 20 3d 20 7b 20 30 20 7d 3b 0a 53  d tsd = { 0 };.S
6d10: 71 6c 69 74 65 54 73 64 20 2a 73 71 6c 69 74 65  qliteTsd *sqlite
6d20: 33 54 73 64 28 29 7b 0a 20 20 72 65 74 75 72 6e  3Tsd(){.  return
6d30: 20 26 74 73 64 3b 0a 7d 0a 0a 76 6f 69 64 20 73   &tsd;.}..void s
6d40: 71 6c 69 74 65 33 43 6c 65 61 72 4d 61 6c 6c 6f  qlite3ClearMallo
6d50: 63 46 61 69 6c 65 64 28 29 7b 0a 20 20 73 71 6c  cFailed(){.  sql
6d60: 69 74 65 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f  ite3Tsd()->mallo
6d70: 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 7d 0a 0a  cFailed = 0;.}..
6d80: 0a 0a                                            ..