/ Hex Artifact Content
Login

Artifact f6d739fc25026cecb59ac98344a1f12fcbee074f:


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: 39 35 20 32 30 30 37 2f 30 33 2f 31 39 20 31 37  95 2007/03/19 17
0230: 3a 34 34 3a 32 38 20 64 61 6e 69 65 6c 6b 31 39  :44:28 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 22 6f 73 2e  h".#include "os.
0270: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
0280: 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  arg.h>.#include 
0290: 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  <ctype.h>../*.**
02a0: 20 4d 41 4c 4c 4f 43 20 57 52 41 50 50 45 52 20   MALLOC WRAPPER 
02b0: 41 52 43 48 49 54 45 43 54 55 52 45 0a 2a 2a 0a  ARCHITECTURE.**.
02c0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 20 63 6f  ** The sqlite co
02d0: 64 65 20 61 63 63 65 73 73 65 73 20 64 79 6e 61  de accesses dyna
02e0: 6d 69 63 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  mic memory alloc
02f0: 61 74 69 6f 6e 2f 64 65 61 6c 6c 6f 63 61 74 69  ation/deallocati
0300: 6f 6e 20 62 79 20 69 6e 76 6f 6b 69 6e 67 0a 2a  on by invoking.*
0310: 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * the following 
0320: 73 69 78 20 41 50 49 73 20 28 77 68 69 63 68 20  six APIs (which 
0330: 6d 61 79 20 62 65 20 69 6d 70 6c 65 6d 65 6e 74  may be implement
0340: 65 64 20 61 73 20 6d 61 63 72 6f 73 29 2e 0a 2a  ed as macros)..*
0350: 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33  *.**     sqlite3
0360: 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20  Malloc().**     
0370: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77  sqlite3MallocRaw
0380: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
0390: 33 52 65 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  3Realloc().**   
03a0: 20 20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63    sqlite3Realloc
03b0: 4f 72 46 72 65 65 28 29 0a 2a 2a 20 20 20 20 20  OrFree().**     
03c0: 73 71 6c 69 74 65 33 46 72 65 65 28 29 0a 2a 2a  sqlite3Free().**
03d0: 20 20 20 20 20 73 71 6c 69 74 65 33 41 6c 6c 6f       sqlite3Allo
03e0: 63 53 69 7a 65 28 29 0a 2a 2a 0a 2a 2a 20 54 68  cSize().**.** Th
03f0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
0400: 65 33 46 72 65 65 58 20 70 65 72 66 6f 72 6d 73  e3FreeX performs
0410: 20 74 68 65 20 73 61 6d 65 20 74 61 73 6b 20 61   the same task a
0420: 73 20 73 71 6c 69 74 65 33 46 72 65 65 20 61 6e  s sqlite3Free an
0430: 64 20 69 73 0a 2a 2a 20 67 75 61 72 61 6e 74 65  d is.** guarante
0440: 65 64 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  ed to be a real 
0450: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20 73 61  function. The sa
0460: 6d 65 20 68 6f 6c 64 73 20 66 6f 72 20 73 71 6c  me holds for sql
0470: 69 74 65 33 4d 61 6c 6c 6f 63 58 0a 2a 2a 0a 2a  ite3MallocX.**.*
0480: 2a 20 54 68 65 20 61 62 6f 76 65 20 41 50 49 73  * The above APIs
0490: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
04a0: 20 69 6e 20 74 65 72 6d 73 20 6f 66 20 74 68 65   in terms of the
04b0: 20 66 75 6e 63 74 69 6f 6e 73 20 70 72 6f 76 69   functions provi
04c0: 64 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20 6f 70  ded in the.** op
04d0: 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 69  erating-system i
04e0: 6e 74 65 72 66 61 63 65 2e 20 54 68 65 20 4f 53  nterface. The OS
04f0: 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 6e 65   interface is ne
0500: 76 65 72 20 61 63 63 65 73 73 65 64 20 64 69 72  ver accessed dir
0510: 65 63 74 6c 79 0a 2a 2a 20 62 79 20 63 6f 64 65  ectly.** by code
0520: 20 6f 75 74 73 69 64 65 20 6f 66 20 74 68 69 73   outside of this
0530: 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   file..**.**    
0540: 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63   sqlite3OsMalloc
0550: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
0560: 33 4f 73 52 65 61 6c 6c 6f 63 28 29 0a 2a 2a 20  3OsRealloc().** 
0570: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 72 65      sqlite3OsFre
0580: 65 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  e().**     sqlit
0590: 65 33 4f 73 41 6c 6c 6f 63 61 74 69 6f 6e 53 69  e3OsAllocationSi
05a0: 7a 65 28 29 0a 2a 2a 0a 2a 2a 20 46 75 6e 63 74  ze().**.** Funct
05b0: 69 6f 6e 73 20 73 71 6c 69 74 65 33 4d 61 6c 6c  ions sqlite3Mall
05c0: 6f 63 52 61 77 28 29 20 61 6e 64 20 73 71 6c 69  ocRaw() and sqli
05d0: 74 65 33 52 65 61 6c 6c 6f 63 28 29 20 6d 61 79  te3Realloc() may
05e0: 20 69 6e 76 6f 6b 65 20 0a 2a 2a 20 73 71 6c 69   invoke .** sqli
05f0: 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
0600: 72 79 28 29 20 69 66 20 61 20 63 61 6c 6c 20 74  ry() if a call t
0610: 6f 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f  o sqlite3OsMallo
0620: 63 28 29 20 6f 72 0a 2a 2a 20 73 71 6c 69 74 65  c() or.** sqlite
0630: 33 4f 73 52 65 61 6c 6c 6f 63 28 29 20 66 61 69  3OsRealloc() fai
0640: 6c 73 20 28 6f 72 20 69 66 20 74 68 65 20 73 6f  ls (or if the so
0650: 66 74 2d 68 65 61 70 2d 6c 69 6d 69 74 20 66 6f  ft-heap-limit fo
0660: 72 20 74 68 65 20 74 68 72 65 61 64 20 69 73 0a  r the thread is.
0670: 2a 2a 20 65 78 63 65 65 64 65 64 29 2e 20 46 75  ** exceeded). Fu
0680: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 4d 61  nction sqlite3Ma
0690: 6c 6c 6f 63 28 29 20 75 73 75 61 6c 6c 79 20 69  lloc() usually i
06a0: 6e 76 6f 6b 65 73 0a 2a 2a 20 73 71 6c 69 74 65  nvokes.** sqlite
06b0: 33 4d 61 6c 6c 6f 63 52 61 77 28 29 2e 0a 2a 2a  3MallocRaw()..**
06c0: 0a 2a 2a 20 4d 41 4c 4c 4f 43 20 54 45 53 54 20  .** MALLOC TEST 
06d0: 57 52 41 50 50 45 52 20 41 52 43 48 49 54 45 43  WRAPPER ARCHITEC
06e0: 54 55 52 45 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  TURE.**.** The t
06f0: 65 73 74 20 77 72 61 70 70 65 72 20 70 72 6f 76  est wrapper prov
0700: 69 64 65 73 20 65 78 74 72 61 20 74 65 73 74 20  ides extra test 
0710: 66 61 63 69 6c 69 74 69 65 73 20 74 6f 20 65 6e  facilities to en
0720: 73 75 72 65 20 74 68 65 20 6c 69 62 72 61 72 79  sure the library
0730: 20 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c 65   .** does not le
0740: 61 6b 20 6d 65 6d 6f 72 79 20 61 6e 64 20 68 61  ak memory and ha
0750: 6e 64 6c 65 73 20 74 68 65 20 66 61 69 6c 75 72  ndles the failur
0760: 65 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  e of the underly
0770: 69 6e 67 20 4f 53 20 6c 65 76 65 6c 0a 2a 2a 20  ing OS level.** 
0780: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 79 73 74 65  allocation syste
0790: 6d 20 63 6f 72 72 65 63 74 6c 79 2e 20 49 74 20  m correctly. It 
07a0: 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
07b0: 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  if the library i
07c0: 73 20 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 77  s .** compiled w
07d0: 69 74 68 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  ith the SQLITE_M
07e0: 45 4d 44 45 42 55 47 20 6d 61 63 72 6f 20 73 65  EMDEBUG macro se
07f0: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 47  t..**.**     * G
0800: 75 61 72 64 70 6f 73 74 73 20 74 6f 20 64 65 74  uardposts to det
0810: 65 63 74 20 6f 76 65 72 77 72 69 74 65 73 2e 0a  ect overwrites..
0820: 2a 2a 20 20 20 20 20 2a 20 41 62 69 6c 69 74 79  **     * Ability
0830: 20 74 6f 20 63 61 75 73 65 20 61 20 73 70 65 63   to cause a spec
0840: 69 66 69 63 20 4d 61 6c 6c 6f 63 28 29 20 6f 72  ific Malloc() or
0850: 20 52 65 61 6c 6c 6f 63 28 29 20 74 6f 20 66 61   Realloc() to fa
0860: 69 6c 2e 0a 2a 2a 20 20 20 20 20 2a 20 41 75 64  il..**     * Aud
0870: 69 74 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 6d  it outstanding m
0880: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
0890: 73 20 28 69 2e 65 20 63 68 65 63 6b 20 66 6f 72  s (i.e check for
08a0: 20 6c 65 61 6b 73 29 2e 0a 2a 2f 0a 0a 23 64 65   leaks)..*/..#de
08b0: 66 69 6e 65 20 4d 41 58 28 78 2c 79 29 20 28 28  fine MAX(x,y) ((
08c0: 78 29 3e 28 79 29 3f 28 78 29 3a 28 79 29 29 0a  x)>(y)?(x):(y)).
08d0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
08e0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
08f0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26 26  Y_MANAGEMENT) &&
0900: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0910: 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 2f 2a  _OMIT_DISKIO)./*
0920: 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 6f 66 74  .** Set the soft
0930: 20 68 65 61 70 2d 73 69 7a 65 20 6c 69 6d 69 74   heap-size limit
0940: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
0950: 20 74 68 72 65 61 64 2e 20 50 61 73 73 69 6e 67   thread. Passing
0960: 20 61 20 6e 65 67 61 74 69 76 65 0a 2a 2a 20 76   a negative.** v
0970: 61 6c 75 65 20 69 6e 64 69 63 61 74 65 73 20 6e  alue indicates n
0980: 6f 20 6c 69 6d 69 74 2e 0a 2a 2f 0a 76 6f 69 64  o limit..*/.void
0990: 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
09a0: 61 70 5f 6c 69 6d 69 74 28 69 6e 74 20 6e 29 7b  ap_limit(int n){
09b0: 0a 20 20 54 68 72 65 61 64 44 61 74 61 20 2a 70  .  ThreadData *p
09c0: 54 64 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65  Td = sqlite3Thre
09d0: 61 64 44 61 74 61 28 29 3b 0a 20 20 69 66 28 20  adData();.  if( 
09e0: 70 54 64 20 29 7b 0a 20 20 20 20 70 54 64 2d 3e  pTd ){.    pTd->
09f0: 6e 53 6f 66 74 48 65 61 70 4c 69 6d 69 74 20 3d  nSoftHeapLimit =
0a00: 20 6e 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   n;.  }.  sqlite
0a10: 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44 61  3ReleaseThreadDa
0a20: 74 61 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ta();.}../*.** R
0a30: 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20 68 65  elease memory he
0a40: 6c 64 20 62 79 20 53 51 4c 69 74 65 20 69 6e 73  ld by SQLite ins
0a50: 74 61 6e 63 65 73 20 63 72 65 61 74 65 64 20 62  tances created b
0a60: 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68  y the current th
0a70: 72 65 61 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  read..*/.int sql
0a80: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
0a90: 6f 72 79 28 69 6e 74 20 6e 29 7b 0a 20 20 72 65  ory(int n){.  re
0aa0: 74 75 72 6e 20 73 71 6c 69 74 65 33 50 61 67 65  turn sqlite3Page
0ab0: 72 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 6e  rReleaseMemory(n
0ac0: 29 3b 0a 7d 0a 23 65 6c 73 65 0a 2f 2a 20 49 66  );.}.#else./* If
0ad0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
0ae0: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
0af0: 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2c   is not defined,
0b00: 20 74 68 65 6e 20 64 65 66 69 6e 65 20 61 20 76   then define a v
0b10: 65 72 73 69 6f 6e 0a 2a 2a 20 6f 66 20 73 71 6c  ersion.** of sql
0b20: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
0b30: 6f 72 79 28 29 20 74 6f 20 62 65 20 75 73 65 64  ory() to be used
0b40: 20 62 79 20 6f 74 68 65 72 20 63 6f 64 65 20 69   by other code i
0b50: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
0b60: 54 68 69 73 20 69 73 20 64 6f 6e 65 20 66 6f 72  This is done for
0b70: 20 6e 6f 20 62 65 74 74 65 72 20 72 65 61 73 6f   no better reaso
0b80: 6e 20 74 68 61 6e 20 74 6f 20 72 65 64 75 63 65  n than to reduce
0b90: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a   the number of .
0ba0: 2a 2a 20 70 72 65 2d 70 72 6f 63 65 73 73 6f 72  ** pre-processor
0bb0: 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65   #ifndef stateme
0bc0: 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nts..*/.#define 
0bd0: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
0be0: 6d 65 6d 6f 72 79 28 78 29 20 30 20 20 20 20 2f  memory(x) 0    /
0bf0: 2a 20 30 20 3d 3d 20 6e 6f 20 6d 65 6d 6f 72 79  * 0 == no memory
0c00: 20 66 72 65 65 64 20 2a 2f 0a 23 65 6e 64 69 66   freed */.#endif
0c10: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
0c20: 4d 45 4d 44 45 42 55 47 0a 2f 2a 2d 2d 2d 2d 2d  MEMDEBUG./*-----
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c70: 2d 2d 2d 2d 2d 0a 2a 2a 20 42 65 67 69 6e 20 63  -----.** Begin c
0c80: 6f 64 65 20 66 6f 72 20 6d 65 6d 6f 72 79 20 61  ode for memory a
0c90: 6c 6c 6f 63 61 74 69 6f 6e 20 73 79 73 74 65 6d  llocation system
0ca0: 20 74 65 73 74 20 6c 61 79 65 72 2e 0a 2a 2a 0a   test layer..**.
0cb0: 2a 2a 20 4d 65 6d 6f 72 79 20 64 65 62 75 67 67  ** Memory debugg
0cc0: 69 6e 67 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  ing is turned on
0cd0: 20 62 79 20 64 65 66 69 6e 69 6e 67 20 74 68 65   by defining the
0ce0: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
0cf0: 20 6d 61 63 72 6f 2e 0a 2a 2a 0a 2a 2a 20 53 51   macro..**.** SQ
0d00: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3d 3d 31  LITE_MEMDEBUG==1
0d10: 20 20 20 20 2d 3e 20 46 65 6e 63 65 2d 70 6f 73      -> Fence-pos
0d20: 74 69 6e 67 20 6f 6e 6c 79 20 28 74 68 72 65 61  ting only (threa
0d30: 64 20 73 61 66 65 29 20 0a 2a 2a 20 53 51 4c 49  d safe) .** SQLI
0d40: 54 45 5f 4d 45 4d 44 45 42 55 47 3d 3d 32 20 20  TE_MEMDEBUG==2  
0d50: 20 20 2d 3e 20 46 65 6e 63 65 2d 70 6f 73 74 69    -> Fence-posti
0d60: 6e 67 20 2b 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ng + linked list
0d70: 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20   of allocations 
0d80: 28 6e 6f 74 20 74 73 29 0a 2a 2a 20 53 51 4c 49  (not ts).** SQLI
0d90: 54 45 5f 4d 45 4d 44 45 42 55 47 3d 3d 33 20 20  TE_MEMDEBUG==3  
0da0: 20 20 2d 3e 20 41 62 6f 76 65 20 2b 20 62 61 63    -> Above + bac
0db0: 6b 74 72 61 63 65 73 20 28 6e 6f 74 20 74 68 72  ktraces (not thr
0dc0: 65 61 64 20 73 61 66 65 2c 20 72 65 71 2e 20 67  ead safe, req. g
0dd0: 6c 69 62 63 29 0a 2a 2f 0a 0a 2f 2a 20 46 69 67  libc).*/../* Fig
0de0: 75 72 65 20 6f 75 74 20 77 68 65 74 68 65 72 20  ure out whether 
0df0: 6f 72 20 6e 6f 74 20 74 6f 20 73 74 6f 72 65 20  or not to store 
0e00: 62 61 63 6b 74 72 61 63 65 28 29 20 69 6e 66 6f  backtrace() info
0e10: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68  rmation for each
0e20: 20 6d 61 6c 6c 6f 63 2e 0a 2a 2a 20 54 68 65 20   malloc..** The 
0e30: 62 61 63 6b 74 72 61 63 65 28 29 20 66 75 6e 63  backtrace() func
0e40: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
0e50: 64 20 69 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  d if SQLITE_MEMD
0e60: 45 42 55 47 20 69 73 20 73 65 74 20 74 6f 20 32  EBUG is set to 2
0e70: 20 6f 72 20 0a 2a 2a 20 67 72 65 61 74 65 72 20   or .** greater 
0e80: 61 6e 64 20 67 6c 69 62 63 20 69 73 20 69 6e 20  and glibc is in 
0e90: 75 73 65 2e 20 49 66 20 77 65 20 64 6f 6e 27 74  use. If we don't
0ea0: 20 77 61 6e 74 20 74 6f 20 75 73 65 20 62 61 63   want to use bac
0eb0: 6b 74 72 61 63 65 28 29 2c 20 74 68 65 6e 20 6a  ktrace(), then j
0ec0: 75 73 74 0a 2a 2a 20 64 65 66 69 6e 65 20 69 74  ust.** define it
0ed0: 20 61 73 20 61 6e 20 65 6d 70 74 79 20 6d 61 63   as an empty mac
0ee0: 72 6f 20 61 6e 64 20 73 65 74 20 74 68 65 20 61  ro and set the a
0ef0: 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 72  mount of space r
0f00: 65 73 65 72 76 65 64 20 74 6f 20 30 2e 0a 2a 2f  eserved to 0..*/
0f10: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47  .#if defined(__G
0f20: 4c 49 42 43 5f 5f 29 20 26 26 20 53 51 4c 49 54  LIBC__) && SQLIT
0f30: 45 5f 4d 45 4d 44 45 42 55 47 3e 32 0a 20 20 65  E_MEMDEBUG>2.  e
0f40: 78 74 65 72 6e 20 69 6e 74 20 62 61 63 6b 74 72  xtern int backtr
0f50: 61 63 65 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  ace(void **, int
0f60: 29 3b 0a 20 20 23 64 65 66 69 6e 65 20 54 45 53  );.  #define TES
0f70: 54 41 4c 4c 4f 43 5f 53 54 41 43 4b 53 49 5a 45  TALLOC_STACKSIZE
0f80: 20 31 32 38 0a 20 20 23 64 65 66 69 6e 65 20 54   128.  #define T
0f90: 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43 4b 46 52  ESTALLOC_STACKFR
0fa0: 41 4d 45 53 20 28 28 54 45 53 54 41 4c 4c 4f 43  AMES ((TESTALLOC
0fb0: 5f 53 54 41 43 4b 53 49 5a 45 2d 38 29 2f 73 69  _STACKSIZE-8)/si
0fc0: 7a 65 6f 66 28 76 6f 69 64 2a 29 29 0a 23 65 6c  zeof(void*)).#el
0fd0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 62 61 63  se.  #define bac
0fe0: 6b 74 72 61 63 65 28 78 2c 20 79 29 0a 20 20 23  ktrace(x, y).  #
0ff0: 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43  define TESTALLOC
1000: 5f 53 54 41 43 4b 53 49 5a 45 20 30 0a 20 20 23  _STACKSIZE 0.  #
1010: 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43  define TESTALLOC
1020: 5f 53 54 41 43 4b 46 52 41 4d 45 53 20 30 0a 23  _STACKFRAMES 0.#
1030: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d  endif../*.** Num
1040: 62 65 72 20 6f 66 20 33 32 2d 62 69 74 20 67 75  ber of 32-bit gu
1050: 61 72 64 20 77 6f 72 64 73 2e 20 20 54 68 69 73  ard words.  This
1060: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
1070: 20 62 65 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f   be a multiple o
1080: 66 0a 2a 2a 20 32 20 73 69 6e 63 65 20 6f 6e 20  f.** 2 since on 
1090: 36 34 2d 62 69 74 20 6d 61 63 68 69 6e 65 73 20  64-bit machines 
10a0: 77 65 20 77 61 6e 74 20 74 68 65 20 76 61 6c 75  we want the valu
10b0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
10c0: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  liteMalloc().** 
10d0: 74 6f 20 62 65 20 38 2d 62 79 74 65 20 61 6c 69  to be 8-byte ali
10e0: 67 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  gned..*/.#ifndef
10f0: 20 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52   TESTALLOC_NGUAR
1100: 44 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 41  D.# define TESTA
1110: 4c 4c 4f 43 5f 4e 47 55 41 52 44 20 32 0a 23 65  LLOC_NGUARD 2.#e
1120: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  ndif../*.** Size
1130: 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 73 74   reserved for st
1140: 6f 72 69 6e 67 20 66 69 6c 65 2d 6e 61 6d 65 20  oring file-name 
1150: 61 6c 6f 6e 67 20 77 69 74 68 20 65 61 63 68 20  along with each 
1160: 6d 61 6c 6c 6f 63 28 29 65 64 20 62 6c 6f 62 2e  malloc()ed blob.
1170: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 45 53 54  .*/.#define TEST
1180: 41 4c 4c 4f 43 5f 46 49 4c 45 53 49 5a 45 20 36  ALLOC_FILESIZE 6
1190: 34 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 72 65  4../*.** Size re
11a0: 73 65 72 76 65 64 20 66 6f 72 20 73 74 6f 72 69  served for stori
11b0: 6e 67 20 74 68 65 20 75 73 65 72 20 73 74 72 69  ng the user stri
11c0: 6e 67 2e 20 45 61 63 68 20 74 69 6d 65 20 61 20  ng. Each time a 
11d0: 4d 61 6c 6c 6f 63 28 29 20 6f 72 20 52 65 61 6c  Malloc() or Real
11e0: 6c 6f 63 28 29 0a 2a 2a 20 63 61 6c 6c 20 73 75  loc().** call su
11f0: 63 63 65 65 64 73 2c 20 75 70 20 74 6f 20 54 45  cceeds, up to TE
1200: 53 54 41 4c 4c 4f 43 5f 55 53 45 52 53 49 5a 45  STALLOC_USERSIZE
1210: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 74   bytes of the st
1220: 72 69 6e 67 20 70 6f 69 6e 74 65 64 20 74 6f 20  ring pointed to 
1230: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6d 61  by.** sqlite3_ma
1240: 6c 6c 6f 63 5f 69 64 20 61 72 65 20 73 74 6f 72  lloc_id are stor
1250: 65 64 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  ed along with th
1260: 65 20 6f 74 68 65 72 20 74 65 73 74 20 73 79 73  e other test sys
1270: 74 65 6d 20 6d 65 74 61 64 61 74 61 2e 0a 2a 2f  tem metadata..*/
1280: 0a 23 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c  .#define TESTALL
1290: 4f 43 5f 55 53 45 52 53 49 5a 45 20 36 34 0a 63  OC_USERSIZE 64.c
12a0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
12b0: 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 20 3d 20 30  e3_malloc_id = 0
12c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 42 6c 6f 63 6b 73 20  ;../*.** Blocks 
12d0: 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73 74  used by the test
12e0: 20 6c 61 79 65 72 20 68 61 76 65 20 74 68 65 20   layer have the 
12f0: 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
1300: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 3c  :.**.**        <
1310: 73 69 7a 65 6f 66 28 76 6f 69 64 20 2a 29 20 70  sizeof(void *) p
1320: 4e 65 78 74 20 70 6f 69 6e 74 65 72 3e 0a 2a 2a  Next pointer>.**
1330: 20 20 20 20 20 20 20 20 3c 73 69 7a 65 6f 66 28          <sizeof(
1340: 76 6f 69 64 20 2a 29 20 70 50 72 65 76 20 70 6f  void *) pPrev po
1350: 69 6e 74 65 72 3e 0a 2a 2a 20 20 20 20 20 20 20  inter>.**       
1360: 20 3c 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41   <TESTALLOC_NGUA
1370: 52 44 20 33 32 2d 62 69 74 20 67 75 61 72 64 20  RD 32-bit guard 
1380: 77 6f 72 64 73 3e 0a 2a 2a 20 20 20 20 20 20 20  words>.**       
1390: 20 20 20 20 20 3c 54 68 65 20 61 70 70 6c 69 63       <The applic
13a0: 61 74 69 6f 6e 20 6c 65 76 65 6c 20 61 6c 6c 6f  ation level allo
13b0: 63 61 74 69 6f 6e 3e 0a 2a 2a 20 20 20 20 20 20  cation>.**      
13c0: 20 20 3c 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55    <TESTALLOC_NGU
13d0: 41 52 44 20 33 32 2d 62 69 74 20 67 75 61 72 64  ARD 32-bit guard
13e0: 20 77 6f 72 64 73 3e 0a 2a 2a 20 20 20 20 20 20   words>.**      
13f0: 20 20 3c 33 32 2d 62 69 74 20 6c 69 6e 65 20 6e    <32-bit line n
1400: 75 6d 62 65 72 3e 0a 2a 2a 20 20 20 20 20 20 20  umber>.**       
1410: 20 3c 54 45 53 54 41 4c 4c 4f 43 5f 46 49 4c 45   <TESTALLOC_FILE
1420: 53 49 5a 45 20 62 79 74 65 73 20 63 6f 6e 74 61  SIZE bytes conta
1430: 69 6e 69 6e 67 20 6e 75 6c 6c 2d 74 65 72 6d 69  ining null-termi
1440: 6e 61 74 65 64 20 66 69 6c 65 20 6e 61 6d 65 3e  nated file name>
1450: 0a 2a 2a 20 20 20 20 20 20 20 20 3c 54 45 53 54  .**        <TEST
1460: 41 4c 4c 4f 43 5f 53 54 41 43 4b 53 49 5a 45 20  ALLOC_STACKSIZE 
1470: 62 79 74 65 73 20 6f 66 20 62 61 63 6b 74 72 61  bytes of backtra
1480: 63 65 28 29 20 6f 75 74 70 75 74 3e 0a 2a 2f 20  ce() output>.*/ 
1490: 0a 0a 23 64 65 66 69 6e 65 20 54 45 53 54 41 4c  ..#define TESTAL
14a0: 4c 4f 43 5f 4f 46 46 53 45 54 5f 47 55 41 52 44  LOC_OFFSET_GUARD
14b0: 31 28 70 29 20 20 20 20 28 73 69 7a 65 6f 66 28  1(p)    (sizeof(
14c0: 76 6f 69 64 20 2a 29 20 2a 20 32 29 0a 23 64 65  void *) * 2).#de
14d0: 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f 4f  fine TESTALLOC_O
14e0: 46 46 53 45 54 5f 44 41 54 41 28 70 29 20 28 20  FFSET_DATA(p) ( 
14f0: 5c 0a 20 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  \.  TESTALLOC_OF
1500: 46 53 45 54 5f 47 55 41 52 44 31 28 70 29 20 2b  FSET_GUARD1(p) +
1510: 20 73 69 7a 65 6f 66 28 75 33 32 29 20 2a 20 54   sizeof(u32) * T
1520: 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 20  ESTALLOC_NGUARD 
1530: 5c 0a 29 0a 23 64 65 66 69 6e 65 20 54 45 53 54  \.).#define TEST
1540: 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 47 55 41  ALLOC_OFFSET_GUA
1550: 52 44 32 28 70 29 20 28 20 5c 0a 20 20 54 45 53  RD2(p) ( \.  TES
1560: 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 44 41  TALLOC_OFFSET_DA
1570: 54 41 28 70 29 20 2b 20 73 71 6c 69 74 65 33 4f  TA(p) + sqlite3O
1580: 73 41 6c 6c 6f 63 61 74 69 6f 6e 53 69 7a 65 28  sAllocationSize(
1590: 70 29 20 2d 20 54 45 53 54 41 4c 4c 4f 43 5f 4f  p) - TESTALLOC_O
15a0: 56 45 52 48 45 41 44 20 5c 0a 29 0a 23 64 65 66  VERHEAD \.).#def
15b0: 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  ine TESTALLOC_OF
15c0: 46 53 45 54 5f 4c 49 4e 45 4e 55 4d 42 45 52 28  FSET_LINENUMBER(
15d0: 70 29 20 28 20 5c 0a 20 20 54 45 53 54 41 4c 4c  p) ( \.  TESTALL
15e0: 4f 43 5f 4f 46 46 53 45 54 5f 47 55 41 52 44 32  OC_OFFSET_GUARD2
15f0: 28 70 29 20 2b 20 73 69 7a 65 6f 66 28 75 33 32  (p) + sizeof(u32
1600: 29 20 2a 20 54 45 53 54 41 4c 4c 4f 43 5f 4e 47  ) * TESTALLOC_NG
1610: 55 41 52 44 20 5c 0a 29 0a 23 64 65 66 69 6e 65  UARD \.).#define
1620: 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45   TESTALLOC_OFFSE
1630: 54 5f 46 49 4c 45 4e 41 4d 45 28 70 29 20 28 20  T_FILENAME(p) ( 
1640: 5c 0a 20 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  \.  TESTALLOC_OF
1650: 46 53 45 54 5f 4c 49 4e 45 4e 55 4d 42 45 52 28  FSET_LINENUMBER(
1660: 70 29 20 2b 20 73 69 7a 65 6f 66 28 75 33 32 29  p) + sizeof(u32)
1670: 20 5c 0a 29 0a 23 64 65 66 69 6e 65 20 54 45 53   \.).#define TES
1680: 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 55 53  TALLOC_OFFSET_US
1690: 45 52 28 70 29 20 28 20 5c 0a 20 20 54 45 53 54  ER(p) ( \.  TEST
16a0: 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 46 49 4c  ALLOC_OFFSET_FIL
16b0: 45 4e 41 4d 45 28 70 29 20 2b 20 54 45 53 54 41  ENAME(p) + TESTA
16c0: 4c 4c 4f 43 5f 46 49 4c 45 53 49 5a 45 20 5c 0a  LLOC_FILESIZE \.
16d0: 29 0a 23 64 65 66 69 6e 65 20 54 45 53 54 41 4c  ).#define TESTAL
16e0: 4c 4f 43 5f 4f 46 46 53 45 54 5f 53 54 41 43 4b  LOC_OFFSET_STACK
16f0: 28 70 29 20 28 20 5c 0a 20 20 54 45 53 54 41 4c  (p) ( \.  TESTAL
1700: 4c 4f 43 5f 4f 46 46 53 45 54 5f 55 53 45 52 28  LOC_OFFSET_USER(
1710: 70 29 20 2b 20 54 45 53 54 41 4c 4c 4f 43 5f 55  p) + TESTALLOC_U
1720: 53 45 52 53 49 5a 45 20 2b 20 38 20 2d 20 5c 0a  SERSIZE + 8 - \.
1730: 20 20 28 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46    (TESTALLOC_OFF
1740: 53 45 54 5f 55 53 45 52 28 70 29 20 25 20 38 29  SET_USER(p) % 8)
1750: 20 5c 0a 29 0a 0a 23 64 65 66 69 6e 65 20 54 45   \.)..#define TE
1760: 53 54 41 4c 4c 4f 43 5f 4f 56 45 52 48 45 41 44  STALLOC_OVERHEAD
1770: 20 28 20 5c 0a 20 20 73 69 7a 65 6f 66 28 76 6f   ( \.  sizeof(vo
1780: 69 64 20 2a 29 2a 32 20 2b 20 20 20 20 20 20 20  id *)*2 +       
1790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
17a0: 50 72 65 76 20 61 6e 64 20 70 4e 65 78 74 20 70  Prev and pNext p
17b0: 6f 69 6e 74 65 72 73 20 2a 2f 20 20 20 5c 0a 20  ointers */   \. 
17c0: 20 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52   TESTALLOC_NGUAR
17d0: 44 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 32 20  D*sizeof(u32)*2 
17e0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  +              /
17f0: 2a 20 47 75 61 72 64 20 77 6f 72 64 73 20 2a 2f  * Guard words */
1800: 20 20 20 20 20 20 20 5c 0a 20 20 73 69 7a 65 6f         \.  sizeo
1810: 66 28 75 33 32 29 20 2b 20 54 45 53 54 41 4c 4c  f(u32) + TESTALL
1820: 4f 43 5f 46 49 4c 45 53 49 5a 45 20 2b 20 20 20  OC_FILESIZE +   
1830: 2f 2a 20 46 69 6c 65 20 61 6e 64 20 6c 69 6e 65  /* File and line
1840: 20 6e 75 6d 62 65 72 20 2a 2f 20 20 20 20 20 20   number */      
1850: 20 5c 0a 20 20 54 45 53 54 41 4c 4c 4f 43 5f 55   \.  TESTALLOC_U
1860: 53 45 52 53 49 5a 45 20 2b 20 20 20 20 20 20 20  SERSIZE +       
1870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1880: 72 20 73 74 72 69 6e 67 20 2a 2f 20 20 20 20 20  r string */     
1890: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 54             \.  T
18a0: 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43 4b 53 49  ESTALLOC_STACKSI
18b0: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ZE              
18c0: 20 20 20 20 2f 2a 20 62 61 63 6b 74 72 61 63 65      /* backtrace
18d0: 28 29 20 73 74 61 63 6b 20 2a 2f 20 20 20 20 20  () stack */     
18e0: 20 20 20 20 20 5c 0a 29 0a 0a 0a 2f 2a 0a 2a 2a       \.).../*.**
18f0: 20 46 6f 72 20 6b 65 65 70 69 6e 67 20 74 72 61   For keeping tra
1900: 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  ck of the number
1910: 20 6f 66 20 6d 61 6c 6c 6f 63 73 20 61 6e 64 20   of mallocs and 
1920: 66 72 65 65 73 2e 20 20 20 54 68 69 73 0a 2a 2a  frees.   This.**
1930: 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 65 63   is used to chec
1940: 6b 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6c 65 61  k for memory lea
1950: 6b 73 2e 20 20 54 68 65 20 69 4d 61 6c 6c 6f 63  ks.  The iMalloc
1960: 46 61 69 6c 20 61 6e 64 20 69 4d 61 6c 6c 6f 63  Fail and iMalloc
1970: 52 65 73 65 74 0a 2a 2a 20 76 61 6c 75 65 73 20  Reset.** values 
1980: 61 72 65 20 75 73 65 64 20 74 6f 20 73 69 6d 75  are used to simu
1990: 6c 61 74 65 20 6d 61 6c 6c 6f 63 28 29 20 66 61  late malloc() fa
19a0: 69 6c 75 72 65 73 20 64 75 72 69 6e 67 20 74 65  ilures during te
19b0: 73 74 69 6e 67 20 69 6e 20 0a 2a 2a 20 6f 72 64  sting in .** ord
19c0: 65 72 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  er to verify tha
19d0: 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f  t the library co
19e0: 72 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 73 20  rrectly handles 
19f0: 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79  an out-of-memory
1a00: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 2a  .** condition..*
1a10: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e 4d  /.int sqlite3_nM
1a20: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  alloc;         /
1a30: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69  * Number of sqli
1a40: 74 65 4d 61 6c 6c 6f 63 28 29 20 63 61 6c 6c 73  teMalloc() calls
1a50: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
1a60: 6e 46 72 65 65 3b 20 20 20 20 20 20 20 20 20 20  nFree;          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71   /* Number of sq
1a80: 6c 69 74 65 46 72 65 65 28 29 20 63 61 6c 6c 73  liteFree() calls
1a90: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
1aa0: 6d 65 6d 55 73 65 64 3b 20 20 20 20 20 20 20 20  memUsed;        
1ab0: 20 2f 2a 20 54 4f 44 4f 20 54 6f 74 61 6c 20 6d   /* TODO Total m
1ac0: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
1ad0: 72 6f 6d 20 6d 61 6c 6c 6f 63 20 2a 2f 0a 69 6e  rom malloc */.in
1ae0: 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78  t sqlite3_memMax
1af0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4f  ;          /* TO
1b00: 44 4f 20 4d 65 6d 20 75 73 61 67 65 20 68 69 67  DO Mem usage hig
1b10: 68 2d 77 61 74 65 72 20 6d 61 72 6b 20 2a 2f 0a  h-water mark */.
1b20: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  int sqlite3_iMal
1b30: 6c 6f 63 46 61 69 6c 3b 20 20 20 20 20 2f 2a 20  locFail;     /* 
1b40: 46 61 69 6c 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  Fail sqliteMallo
1b50: 63 28 29 20 61 66 74 65 72 20 74 68 69 73 20 6d  c() after this m
1b60: 61 6e 79 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e 74  any calls */.int
1b70: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
1b80: 52 65 73 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 57  Reset = -1; /* W
1b90: 68 65 6e 20 69 4d 61 6c 6c 6f 63 46 61 69 6c 20  hen iMallocFail 
1ba0: 72 65 61 63 68 65 73 20 30 2c 20 73 65 74 20 74  reaches 0, set t
1bb0: 6f 20 74 68 69 73 20 2a 2f 0a 0a 76 6f 69 64 20  o this */..void 
1bc0: 2a 73 71 6c 69 74 65 33 5f 70 46 69 72 73 74 20  *sqlite3_pFirst 
1bd0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
1be0: 50 6f 69 6e 74 65 72 20 74 6f 20 6c 69 6e 6b 65  Pointer to linke
1bf0: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 6f 63 61  d list of alloca
1c00: 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
1c10: 69 74 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 20 3d  ite3_nMaxAlloc =
1c20: 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 69   0;        /* Hi
1c30: 67 68 20 77 61 74 65 72 20 6d 61 72 6b 20 6f 66  gh water mark of
1c40: 20 54 68 72 65 61 64 44 61 74 61 2e 6e 41 6c 6c   ThreadData.nAll
1c50: 6f 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  oc */.int sqlite
1c60: 33 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77  3_mallocDisallow
1c70: 65 64 20 3d 20 30 3b 20 2f 2a 20 61 73 73 65 72  ed = 0; /* asser
1c80: 74 28 29 20 69 6e 20 73 71 6c 69 74 65 33 4d 61  t() in sqlite3Ma
1c90: 6c 6c 6f 63 28 29 20 69 66 20 73 65 74 20 2a 2f  lloc() if set */
1ca0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 73 46  .int sqlite3_isF
1cb0: 61 69 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ail = 0;        
1cc0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6c     /* True if al
1cd0: 6c 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 73  l malloc calls s
1ce0: 68 6f 75 6c 64 20 66 61 69 6c 20 2a 2f 0a 63 6f  hould fail */.co
1cf0: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
1d00: 33 5f 7a 46 69 6c 65 20 3d 20 30 3b 20 20 20 20  3_zFile = 0;    
1d10: 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 74 6f 20 61  /* Filename to a
1d20: 73 73 6f 63 69 61 74 65 20 64 65 62 75 67 20 69  ssociate debug i
1d30: 6e 66 6f 20 77 69 74 68 20 2a 2f 0a 69 6e 74 20  nfo with */.int 
1d40: 73 71 6c 69 74 65 33 5f 69 4c 69 6e 65 20 3d 20  sqlite3_iLine = 
1d50: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  0;            /*
1d60: 20 4c 69 6e 65 20 6e 75 6d 62 65 72 20 66 6f 72   Line number for
1d70: 20 64 65 62 75 67 20 69 6e 66 6f 20 2a 2f 0a 0a   debug info */..
1d80: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 66 6f 72 20  /*.** Check for 
1d90: 61 20 73 69 6d 75 6c 61 74 65 64 20 6d 65 6d 6f  a simulated memo
1da0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61  ry allocation fa
1db0: 69 6c 75 72 65 2e 20 20 52 65 74 75 72 6e 20 74  ilure.  Return t
1dc0: 72 75 65 20 69 66 0a 2a 2a 20 74 68 65 20 66 61  rue if.** the fa
1dd0: 69 6c 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20  ilure should be 
1de0: 73 69 6d 75 6c 61 74 65 64 2e 20 20 52 65 74 75  simulated.  Retu
1df0: 72 6e 20 66 61 6c 73 65 20 74 6f 20 70 72 6f 63  rn false to proc
1e00: 65 65 64 20 61 73 20 6e 6f 72 6d 61 6c 2e 0a 2a  eed as normal..*
1e10: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 73  /.int sqlite3Tes
1e20: 74 4d 61 6c 6c 6f 63 46 61 69 6c 28 29 7b 0a 20  tMallocFail(){. 
1e30: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 73 46   if( sqlite3_isF
1e40: 61 69 6c 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ail ){.    retur
1e50: 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  n 1;.  }.  if( s
1e60: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
1e70: 69 6c 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  il>=0 ){.    sql
1e80: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
1e90: 2d 2d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  --;.    if( sqli
1ea0: 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3d  te3_iMallocFail=
1eb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
1ec0: 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20  te3_iMallocFail 
1ed0: 3d 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f  = sqlite3_iMallo
1ee0: 63 52 65 73 65 74 3b 0a 20 20 20 20 20 20 73 71  cReset;.      sq
1ef0: 6c 69 74 65 33 5f 69 73 46 61 69 6c 20 3d 20 31  lite3_isFail = 1
1f00: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
1f10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
1f20: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
1f30: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
1f40: 20 61 20 70 6f 69 6e 74 65 72 20 72 65 74 75 72   a pointer retur
1f50: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 4f 73  ned by sqlite3Os
1f60: 4d 61 6c 6c 6f 63 28 29 20 6f 72 20 78 52 65 61  Malloc() or xRea
1f70: 6c 6c 6f 63 28 29 2e 0a 2a 2a 20 61 73 73 65 72  lloc()..** asser
1f80: 74 28 29 20 74 68 61 74 20 74 68 65 20 66 69 72  t() that the fir
1f90: 73 74 20 61 6e 64 20 6c 61 73 74 20 28 54 45 53  st and last (TES
1fa0: 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 2a 34 29  TALLOC_NGUARD*4)
1fb0: 20 62 79 74 65 73 20 61 72 65 20 73 65 74 20 74   bytes are set t
1fc0: 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 73 20  o the.** values 
1fd0: 73 65 74 20 62 79 20 74 68 65 20 61 70 70 6c 79  set by the apply
1fe0: 47 75 61 72 64 73 28 29 20 66 75 6e 63 74 69 6f  Guards() functio
1ff0: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  n..*/.static voi
2000: 64 20 63 68 65 63 6b 47 75 61 72 64 73 28 75 33  d checkGuards(u3
2010: 32 20 2a 70 29 0a 7b 0a 20 20 69 6e 74 20 69 3b  2 *p).{.  int i;
2020: 0a 20 20 63 68 61 72 20 2a 7a 41 6c 6c 6f 63 20  .  char *zAlloc 
2030: 3d 20 28 63 68 61 72 20 2a 29 70 3b 0a 20 20 63  = (char *)p;.  c
2040: 68 61 72 20 2a 7a 3b 0a 0a 20 20 2f 2a 20 46 69  har *z;..  /* Fi
2050: 72 73 74 20 73 65 74 20 6f 66 20 67 75 61 72 64  rst set of guard
2060: 20 77 6f 72 64 73 20 2a 2f 0a 20 20 7a 20 3d 20   words */.  z = 
2070: 26 7a 41 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f  &zAlloc[TESTALLO
2080: 43 5f 4f 46 46 53 45 54 5f 47 55 41 52 44 31 28  C_OFFSET_GUARD1(
2090: 70 29 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p)];.  for(i=0; 
20a0: 69 3c 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41  i<TESTALLOC_NGUA
20b0: 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  RD; i++){.    as
20c0: 73 65 72 74 28 28 28 75 33 32 20 2a 29 7a 29 5b  sert(((u32 *)z)[
20d0: 69 5d 3d 3d 30 78 64 65 61 64 31 31 32 32 29 3b  i]==0xdead1122);
20e0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 63 6f 6e  .  }..  /* Secon
20f0: 64 20 73 65 74 20 6f 66 20 67 75 61 72 64 20 77  d set of guard w
2100: 6f 72 64 73 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a  ords */.  z = &z
2110: 41 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f 43 5f  Alloc[TESTALLOC_
2120: 4f 46 46 53 45 54 5f 47 55 41 52 44 32 28 70 29  OFFSET_GUARD2(p)
2130: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
2140: 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44  TESTALLOC_NGUARD
2150: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 75 33 32 20  ; i++){.    u32 
2160: 67 75 61 72 64 20 3d 20 30 3b 0a 20 20 20 20 6d  guard = 0;.    m
2170: 65 6d 63 70 79 28 26 67 75 61 72 64 2c 20 26 7a  emcpy(&guard, &z
2180: 5b 69 2a 73 69 7a 65 6f 66 28 75 33 32 29 5d 2c  [i*sizeof(u32)],
2190: 20 73 69 7a 65 6f 66 28 75 33 32 29 29 3b 0a 20   sizeof(u32));. 
21a0: 20 20 20 61 73 73 65 72 74 28 67 75 61 72 64 3d     assert(guard=
21b0: 3d 30 78 64 65 61 64 33 33 34 34 29 3b 0a 20 20  =0xdead3344);.  
21c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 61  }.}../*.** The a
21d0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 69  rgument is a poi
21e0: 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20 62 79  nter returned by
21f0: 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63   sqlite3OsMalloc
2200: 28 29 20 6f 72 20 52 65 61 6c 6c 6f 63 28 29 2e  () or Realloc().
2210: 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 61 6e   The.** first an
2220: 64 20 6c 61 73 74 20 28 54 45 53 54 41 4c 4c 4f  d last (TESTALLO
2230: 43 5f 4e 47 55 41 52 44 2a 34 29 20 62 79 74 65  C_NGUARD*4) byte
2240: 73 20 61 72 65 20 73 65 74 20 74 6f 20 6b 6e 6f  s are set to kno
2250: 77 6e 20 76 61 6c 75 65 73 20 66 6f 72 20 75 73  wn values for us
2260: 65 20 61 73 20 0a 2a 2a 20 67 75 61 72 64 2d 70  e as .** guard-p
2270: 6f 73 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  osts..*/.static 
2280: 76 6f 69 64 20 61 70 70 6c 79 47 75 61 72 64 73  void applyGuards
2290: 28 75 33 32 20 2a 70 29 0a 7b 0a 20 20 69 6e 74  (u32 *p).{.  int
22a0: 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   i;.  char *z;. 
22b0: 20 63 68 61 72 20 2a 7a 41 6c 6c 6f 63 20 3d 20   char *zAlloc = 
22c0: 28 63 68 61 72 20 2a 29 70 3b 0a 0a 20 20 2f 2a  (char *)p;..  /*
22d0: 20 46 69 72 73 74 20 73 65 74 20 6f 66 20 67 75   First set of gu
22e0: 61 72 64 20 77 6f 72 64 73 20 2a 2f 0a 20 20 7a  ard words */.  z
22f0: 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45 53 54 41   = &zAlloc[TESTA
2300: 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 47 55 41 52  LLOC_OFFSET_GUAR
2310: 44 31 28 70 29 5d 3b 0a 20 20 66 6f 72 28 69 3d  D1(p)];.  for(i=
2320: 30 3b 20 69 3c 54 45 53 54 41 4c 4c 4f 43 5f 4e  0; i<TESTALLOC_N
2330: 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20 20  GUARD; i++){.   
2340: 20 28 28 75 33 32 20 2a 29 7a 29 5b 69 5d 20 3d   ((u32 *)z)[i] =
2350: 20 30 78 64 65 61 64 31 31 32 32 3b 0a 20 20 7d   0xdead1122;.  }
2360: 0a 0a 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65  ..  /* Second se
2370: 74 20 6f 66 20 67 75 61 72 64 20 77 6f 72 64 73  t of guard words
2380: 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f   */.  z = &zAllo
2390: 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53  c[TESTALLOC_OFFS
23a0: 45 54 5f 47 55 41 52 44 32 28 70 29 5d 3b 0a 20  ET_GUARD2(p)];. 
23b0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 54 45 53 54   for(i=0; i<TEST
23c0: 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 3b 20 69 2b  ALLOC_NGUARD; i+
23d0: 2b 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  +){.    static c
23e0: 6f 6e 73 74 20 69 6e 74 20 67 75 61 72 64 20 3d  onst int guard =
23f0: 20 30 78 64 65 61 64 33 33 34 34 3b 0a 20 20 20   0xdead3344;.   
2400: 20 6d 65 6d 63 70 79 28 26 7a 5b 69 2a 73 69 7a   memcpy(&z[i*siz
2410: 65 6f 66 28 75 33 32 29 5d 2c 20 26 67 75 61 72  eof(u32)], &guar
2420: 64 2c 20 73 69 7a 65 6f 66 28 75 33 32 29 29 3b  d, sizeof(u32));
2430: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 69 6e 65 20  .  }..  /* Line 
2440: 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 7a 20 3d 20  number */.  z = 
2450: 26 28 28 63 68 61 72 20 2a 29 7a 29 5b 54 45 53  &((char *)z)[TES
2460: 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 2a 73 69  TALLOC_NGUARD*si
2470: 7a 65 6f 66 28 75 33 32 29 5d 3b 20 20 20 20 20  zeof(u32)];     
2480: 20 20 20 20 20 20 20 20 2f 2a 20 47 75 61 72 64          /* Guard
2490: 20 77 6f 72 64 73 20 2a 2f 0a 20 20 7a 20 3d 20   words */.  z = 
24a0: 26 7a 41 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f  &zAlloc[TESTALLO
24b0: 43 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 55 4d  C_OFFSET_LINENUM
24c0: 42 45 52 28 70 29 5d 3b 0a 20 20 6d 65 6d 63 70  BER(p)];.  memcp
24d0: 79 28 7a 2c 20 26 73 71 6c 69 74 65 33 5f 69 4c  y(z, &sqlite3_iL
24e0: 69 6e 65 2c 20 73 69 7a 65 6f 66 28 75 33 32 29  ine, sizeof(u32)
24f0: 29 3b 0a 0a 20 20 2f 2a 20 46 69 6c 65 20 6e 61  );..  /* File na
2500: 6d 65 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41 6c  me */.  z = &zAl
2510: 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  loc[TESTALLOC_OF
2520: 46 53 45 54 5f 46 49 4c 45 4e 41 4d 45 28 70 29  FSET_FILENAME(p)
2530: 5d 3b 0a 20 20 73 74 72 6e 63 70 79 28 7a 2c 20  ];.  strncpy(z, 
2540: 73 71 6c 69 74 65 33 5f 7a 46 69 6c 65 2c 20 54  sqlite3_zFile, T
2550: 45 53 54 41 4c 4c 4f 43 5f 46 49 4c 45 53 49 5a  ESTALLOC_FILESIZ
2560: 45 29 3b 0a 20 20 7a 5b 54 45 53 54 41 4c 4c 4f  E);.  z[TESTALLO
2570: 43 5f 46 49 4c 45 53 49 5a 45 20 2d 20 31 5d 20  C_FILESIZE - 1] 
2580: 3d 20 27 5c 30 27 3b 0a 0a 20 20 2f 2a 20 55 73  = '\0';..  /* Us
2590: 65 72 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 7a  er string */.  z
25a0: 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45 53 54 41   = &zAlloc[TESTA
25b0: 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 55 53 45 52  LLOC_OFFSET_USER
25c0: 28 70 29 5d 3b 0a 20 20 7a 5b 30 5d 20 3d 20 30  (p)];.  z[0] = 0
25d0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
25e0: 6d 61 6c 6c 6f 63 5f 69 64 20 29 7b 0a 20 20 20  malloc_id ){.   
25f0: 20 73 74 72 6e 63 70 79 28 7a 2c 20 73 71 6c 69   strncpy(z, sqli
2600: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54  te3_malloc_id, T
2610: 45 53 54 41 4c 4c 4f 43 5f 55 53 45 52 53 49 5a  ESTALLOC_USERSIZ
2620: 45 29 3b 0a 20 20 20 20 7a 5b 54 45 53 54 41 4c  E);.    z[TESTAL
2630: 4c 4f 43 5f 55 53 45 52 53 49 5a 45 2d 31 5d 20  LOC_USERSIZE-1] 
2640: 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 62  = 0;.  }..  /* b
2650: 61 63 6b 74 72 61 63 65 28 29 20 73 74 61 63 6b  acktrace() stack
2660: 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f   */.  z = &zAllo
2670: 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53  c[TESTALLOC_OFFS
2680: 45 54 5f 53 54 41 43 4b 28 70 29 5d 3b 0a 20 20  ET_STACK(p)];.  
2690: 62 61 63 6b 74 72 61 63 65 28 28 76 6f 69 64 20  backtrace((void 
26a0: 2a 2a 29 7a 2c 20 54 45 53 54 41 4c 4c 4f 43 5f  **)z, TESTALLOC_
26b0: 53 54 41 43 4b 46 52 41 4d 45 53 29 3b 0a 0a 20  STACKFRAMES);.. 
26c0: 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
26d0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 63 68   to make sure ch
26e0: 65 63 6b 47 75 61 72 64 73 28 29 20 69 73 20 77  eckGuards() is w
26f0: 6f 72 6b 69 6e 67 20 2a 2f 0a 20 20 63 68 65 63  orking */.  chec
2700: 6b 47 75 61 72 64 73 28 70 29 3b 0a 7d 0a 0a 2f  kGuards(p);.}../
2710: 2a 0a 2a 2a 20 54 68 65 20 61 72 67 75 6d 65 6e  *.** The argumen
2720: 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 65  t is a malloc()e
2730: 64 20 70 6f 69 6e 74 65 72 20 61 73 20 72 65 74  d pointer as ret
2740: 75 72 6e 65 64 20 62 79 20 74 68 65 20 74 65 73  urned by the tes
2750: 74 2d 77 72 61 70 70 65 72 2e 0a 2a 2a 20 52 65  t-wrapper..** Re
2760: 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  turn a pointer t
2770: 6f 20 74 68 65 20 4f 73 20 6c 65 76 65 6c 20 61  o the Os level a
2780: 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  llocation..*/.st
2790: 61 74 69 63 20 76 6f 69 64 20 2a 67 65 74 4f 73  atic void *getOs
27a0: 50 6f 69 6e 74 65 72 28 76 6f 69 64 20 2a 70 29  Pointer(void *p)
27b0: 0a 7b 0a 20 20 63 68 61 72 20 2a 7a 20 3d 20 28  .{.  char *z = (
27c0: 63 68 61 72 20 2a 29 70 3b 0a 20 20 72 65 74 75  char *)p;.  retu
27d0: 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 7a 5b 2d  rn (void *)(&z[-
27e0: 31 20 2a 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  1 * TESTALLOC_OF
27f0: 46 53 45 54 5f 44 41 54 41 28 70 29 5d 29 3b 0a  FSET_DATA(p)]);.
2800: 7d 0a 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  }...#if SQLITE_M
2810: 45 4d 44 45 42 55 47 3e 31 0a 2f 2a 0a 2a 2a 20  EMDEBUG>1./*.** 
2820: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 70 6f 69  The argument poi
2830: 6e 74 73 20 74 6f 20 61 6e 20 4f 73 20 6c 65 76  nts to an Os lev
2840: 65 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 4c  el allocation. L
2850: 69 6e 6b 20 69 74 20 69 6e 74 6f 20 74 68 65 20  ink it into the 
2860: 74 68 72 65 61 64 73 20 6c 69 73 74 0a 2a 2a 20  threads list.** 
2870: 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a  of allocations..
2880: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6c  */.static void l
2890: 69 6e 6b 41 6c 6c 6f 63 28 76 6f 69 64 20 2a 70  inkAlloc(void *p
28a0: 29 7b 0a 20 20 76 6f 69 64 20 2a 2a 70 70 20 3d  ){.  void **pp =
28b0: 20 28 76 6f 69 64 20 2a 2a 29 70 3b 0a 20 20 70   (void **)p;.  p
28c0: 70 5b 30 5d 20 3d 20 30 3b 0a 20 20 70 70 5b 31  p[0] = 0;.  pp[1
28d0: 5d 20 3d 20 73 71 6c 69 74 65 33 5f 70 46 69 72  ] = sqlite3_pFir
28e0: 73 74 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  st;.  if( sqlite
28f0: 33 5f 70 46 69 72 73 74 20 29 7b 0a 20 20 20 20  3_pFirst ){.    
2900: 28 28 76 6f 69 64 20 2a 2a 29 73 71 6c 69 74 65  ((void **)sqlite
2910: 33 5f 70 46 69 72 73 74 29 5b 30 5d 20 3d 20 70  3_pFirst)[0] = p
2920: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
2930: 70 46 69 72 73 74 20 3d 20 70 3b 0a 7d 0a 0a 2f  pFirst = p;.}../
2940: 2a 0a 2a 2a 20 54 68 65 20 61 72 67 75 6d 65 6e  *.** The argumen
2950: 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e 20 4f  t points to an O
2960: 73 20 6c 65 76 65 6c 20 61 6c 6c 6f 63 61 74 69  s level allocati
2970: 6f 6e 2e 20 55 6e 6c 69 6e 6b 65 20 69 74 20 66  on. Unlinke it f
2980: 72 6f 6d 20 74 68 65 20 74 68 72 65 61 64 73 0a  rom the threads.
2990: 2a 2a 20 6c 69 73 74 20 6f 66 20 61 6c 6c 6f 63  ** list of alloc
29a0: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61 74 69  ations..*/.stati
29b0: 63 20 76 6f 69 64 20 75 6e 6c 69 6e 6b 41 6c 6c  c void unlinkAll
29c0: 6f 63 28 76 6f 69 64 20 2a 70 29 0a 7b 0a 20 20  oc(void *p).{.  
29d0: 76 6f 69 64 20 2a 2a 70 70 20 3d 20 28 76 6f 69  void **pp = (voi
29e0: 64 20 2a 2a 29 70 3b 0a 20 20 69 66 28 20 70 3d  d **)p;.  if( p=
29f0: 3d 73 71 6c 69 74 65 33 5f 70 46 69 72 73 74 20  =sqlite3_pFirst 
2a00: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 21 70  ){.    assert(!p
2a10: 70 5b 30 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  p[0]);.    asser
2a20: 74 28 21 70 70 5b 31 5d 20 7c 7c 20 28 28 76 6f  t(!pp[1] || ((vo
2a30: 69 64 20 2a 2a 29 28 70 70 5b 31 5d 29 29 5b 30  id **)(pp[1]))[0
2a40: 5d 3d 3d 70 29 3b 0a 20 20 20 20 73 71 6c 69 74  ]==p);.    sqlit
2a50: 65 33 5f 70 46 69 72 73 74 20 3d 20 70 70 5b 31  e3_pFirst = pp[1
2a60: 5d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ];.    if( sqlit
2a70: 65 33 5f 70 46 69 72 73 74 20 29 7b 0a 20 20 20  e3_pFirst ){.   
2a80: 20 20 20 28 28 76 6f 69 64 20 2a 2a 29 73 71 6c     ((void **)sql
2a90: 69 74 65 33 5f 70 46 69 72 73 74 29 5b 30 5d 20  ite3_pFirst)[0] 
2aa0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
2ab0: 73 65 7b 0a 20 20 20 20 76 6f 69 64 20 2a 2a 70  se{.    void **p
2ac0: 70 72 65 76 20 3d 20 70 70 5b 30 5d 3b 0a 20 20  prev = pp[0];.  
2ad0: 20 20 76 6f 69 64 20 2a 2a 70 6e 65 78 74 20 3d    void **pnext =
2ae0: 20 70 70 5b 31 5d 3b 0a 20 20 20 20 61 73 73 65   pp[1];.    asse
2af0: 72 74 28 70 70 72 65 76 29 3b 0a 20 20 20 20 61  rt(pprev);.    a
2b00: 73 73 65 72 74 28 70 70 72 65 76 5b 31 5d 3d 3d  ssert(pprev[1]==
2b10: 70 29 3b 0a 20 20 20 20 70 70 72 65 76 5b 31 5d  p);.    pprev[1]
2b20: 20 3d 20 28 76 6f 69 64 20 2a 29 70 6e 65 78 74   = (void *)pnext
2b30: 3b 0a 20 20 20 20 69 66 28 20 70 6e 65 78 74 20  ;.    if( pnext 
2b40: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2b50: 70 6e 65 78 74 5b 30 5d 3d 3d 70 29 3b 0a 20 20  pnext[0]==p);.  
2b60: 20 20 20 20 70 6e 65 78 74 5b 30 5d 20 3d 20 28      pnext[0] = (
2b70: 76 6f 69 64 20 2a 29 70 70 72 65 76 3b 0a 20 20  void *)pprev;.  
2b80: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2b90: 20 50 6f 69 6e 74 65 72 20 70 20 69 73 20 61 20   Pointer p is a 
2ba0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 4f 53  pointer to an OS
2bb0: 20 6c 65 76 65 6c 20 61 6c 6c 6f 63 61 74 69 6f   level allocatio
2bc0: 6e 20 74 68 61 74 20 68 61 73 20 6a 75 73 74 20  n that has just 
2bd0: 62 65 65 6e 0a 2a 2a 20 72 65 61 6c 6c 6f 63 28  been.** realloc(
2be0: 29 65 64 2e 20 53 65 74 20 74 68 65 20 6c 69 73  )ed. Set the lis
2bf0: 74 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20  t pointers that 
2c00: 70 6f 69 6e 74 20 74 6f 20 74 68 69 73 20 65 6e  point to this en
2c10: 74 72 79 20 74 6f 20 69 74 27 73 20 6e 65 77 0a  try to it's new.
2c20: 2a 2a 20 6c 6f 63 61 74 69 6f 6e 2e 0a 2a 2f 0a  ** location..*/.
2c30: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 6c 69  static void reli
2c40: 6e 6b 41 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 29  nkAlloc(void *p)
2c50: 0a 7b 0a 20 20 76 6f 69 64 20 2a 2a 70 70 20 3d  .{.  void **pp =
2c60: 20 28 76 6f 69 64 20 2a 2a 29 70 3b 0a 20 20 69   (void **)p;.  i
2c70: 66 28 20 70 70 5b 30 5d 20 29 7b 0a 20 20 20 20  f( pp[0] ){.    
2c80: 28 28 76 6f 69 64 20 2a 2a 29 28 70 70 5b 30 5d  ((void **)(pp[0]
2c90: 29 29 5b 31 5d 20 3d 20 70 3b 0a 20 20 7d 65 6c  ))[1] = p;.  }el
2ca0: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  se{.    sqlite3_
2cb0: 70 46 69 72 73 74 20 3d 20 70 3b 0a 20 20 7d 0a  pFirst = p;.  }.
2cc0: 20 20 69 66 28 20 70 70 5b 31 5d 20 29 7b 0a 20    if( pp[1] ){. 
2cd0: 20 20 20 28 28 76 6f 69 64 20 2a 2a 29 28 70 70     ((void **)(pp
2ce0: 5b 31 5d 29 29 5b 30 5d 20 3d 20 70 3b 0a 20 20  [1]))[0] = p;.  
2cf0: 7d 0a 7d 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  }.}.#else.#defin
2d00: 65 20 6c 69 6e 6b 41 6c 6c 6f 63 28 78 29 0a 23  e linkAlloc(x).#
2d10: 64 65 66 69 6e 65 20 72 65 6c 69 6e 6b 41 6c 6c  define relinkAll
2d20: 6f 63 28 78 29 0a 23 64 65 66 69 6e 65 20 75 6e  oc(x).#define un
2d30: 6c 69 6e 6b 41 6c 6c 6f 63 28 78 29 0a 23 65 6e  linkAlloc(x).#en
2d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  dif../*.** This 
2d50: 66 75 6e 63 74 69 6f 6e 20 73 65 74 73 20 74 68  function sets th
2d60: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
2d70: 54 63 6c 20 69 6e 74 65 72 70 72 65 74 65 72 20  Tcl interpreter 
2d80: 70 61 73 73 65 64 20 61 73 20 61 6e 20 61 72 67  passed as an arg
2d90: 75 6d 65 6e 74 0a 2a 2a 20 74 6f 20 61 20 6c 69  ument.** to a li
2da0: 73 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e  st containing an
2db0: 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
2dc0: 63 75 72 72 65 6e 74 6c 79 20 6f 75 74 73 74 61  currently outsta
2dd0: 6e 64 69 6e 67 20 63 61 6c 6c 20 6d 61 64 65 20  nding call made 
2de0: 74 6f 20 0a 2a 2a 20 73 71 6c 69 74 65 4d 61 6c  to .** sqliteMal
2df0: 6c 6f 63 20 61 6e 64 20 66 72 69 65 6e 64 73 20  loc and friends 
2e00: 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  by the current t
2e10: 68 72 65 61 64 2e 20 45 61 63 68 20 6c 69 73 74  hread. Each list
2e20: 20 65 6e 74 72 79 20 69 73 20 69 74 73 65 6c 66   entry is itself
2e30: 20 61 0a 2a 2a 20 6c 69 73 74 2c 20 63 6f 6e 73   a.** list, cons
2e40: 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 66 6f  isting of the fo
2e50: 6c 6c 6f 77 69 6e 67 20 28 69 6e 20 6f 72 64 65  llowing (in orde
2e60: 72 29 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20  r):.**.**     * 
2e70: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
2e80: 74 65 73 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  tes allocated.**
2e90: 20 20 20 20 20 2a 20 54 68 65 20 5f 5f 46 49 4c       * The __FIL
2ea0: 45 5f 5f 20 6d 61 63 72 6f 20 61 74 20 74 68 65  E__ macro at the
2eb0: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 73 71 6c   time of the sql
2ec0: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 63 61 6c 6c  iteMalloc() call
2ed0: 2e 0a 2a 2a 20 20 20 20 20 2a 20 54 68 65 20 5f  ..**     * The _
2ee0: 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 20 2e 2e  _LINE__ macro ..
2ef0: 2e 0a 2a 2a 20 20 20 20 20 2a 20 54 68 65 20 76  ..**     * The v
2f00: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 71 6c 69  alue of the sqli
2f10: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 20 76 61  te3_malloc_id va
2f20: 72 69 61 62 6c 65 20 2e 2e 2e 0a 2a 2a 20 20 20  riable ....**   
2f30: 20 20 2a 20 54 68 65 20 6f 75 74 70 75 74 20 6f    * The output o
2f40: 66 20 62 61 63 6b 74 72 61 63 65 28 29 20 28 69  f backtrace() (i
2f50: 66 20 61 76 61 69 6c 61 62 6c 65 29 20 2e 2e 2e  f available) ...
2f60: 0a 2a 2a 0a 2a 2a 20 54 6f 64 6f 3a 20 57 65 20  .**.** Todo: We 
2f70: 63 6f 75 6c 64 20 68 61 76 65 20 61 20 76 65 72  could have a ver
2f80: 73 69 6f 6e 20 6f 66 20 74 68 69 73 20 66 75 6e  sion of this fun
2f90: 63 74 69 6f 6e 20 74 68 61 74 20 6f 75 74 70 75  ction that outpu
2fa0: 74 73 20 74 6f 20 73 74 64 6f 75 74 2c 20 0a 2a  ts to stdout, .*
2fb0: 2a 20 74 6f 20 64 65 62 75 67 20 6d 65 6d 6f 72  * to debug memor
2fc0: 79 20 6c 65 61 6b 73 20 77 68 65 6e 20 54 63 6c  y leaks when Tcl
2fd0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
2fe0: 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  e..*/.#if define
2ff0: 64 28 54 43 4c 53 48 29 20 26 26 20 64 65 66 69  d(TCLSH) && defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3010: 29 20 26 26 20 53 51 4c 49 54 45 5f 4d 45 4d 44  ) && SQLITE_MEMD
3020: 45 42 55 47 3e 31 0a 23 69 6e 63 6c 75 64 65 20  EBUG>1.#include 
3030: 3c 74 63 6c 2e 68 3e 0a 69 6e 74 20 73 71 6c 69  <tcl.h>.int sqli
3040: 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61  te3OutstandingMa
3050: 6c 6c 6f 63 73 28 54 63 6c 5f 49 6e 74 65 72 70  llocs(Tcl_Interp
3060: 20 2a 69 6e 74 65 72 70 29 7b 0a 20 20 76 6f 69   *interp){.  voi
3070: 64 20 2a 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  d *p;.  Tcl_Obj 
3080: 2a 70 52 65 73 20 3d 20 54 63 6c 5f 4e 65 77 4f  *pRes = Tcl_NewO
3090: 62 6a 28 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72  bj();.  Tcl_Incr
30a0: 52 65 66 43 6f 75 6e 74 28 70 52 65 73 29 3b 0a  RefCount(pRes);.
30b0: 0a 0a 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65  ..  for(p=sqlite
30c0: 33 5f 70 46 69 72 73 74 3b 20 70 3b 20 70 3d 28  3_pFirst; p; p=(
30d0: 28 76 6f 69 64 20 2a 2a 29 70 29 5b 31 5d 29 7b  (void **)p)[1]){
30e0: 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 45  .    Tcl_Obj *pE
30f0: 6e 74 72 79 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  ntry = Tcl_NewOb
3100: 6a 28 29 3b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a  j();.    Tcl_Obj
3110: 20 2a 70 53 74 61 63 6b 20 3d 20 54 63 6c 5f 4e   *pStack = Tcl_N
3120: 65 77 4f 62 6a 28 29 3b 0a 20 20 20 20 63 68 61  ewObj();.    cha
3130: 72 20 2a 7a 3b 0a 20 20 20 20 75 33 32 20 69 4c  r *z;.    u32 iL
3140: 69 6e 65 3b 0a 20 20 20 20 69 6e 74 20 6e 42 79  ine;.    int nBy
3150: 74 65 73 20 3d 20 73 71 6c 69 74 65 33 4f 73 41  tes = sqlite3OsA
3160: 6c 6c 6f 63 61 74 69 6f 6e 53 69 7a 65 28 70 29  llocationSize(p)
3170: 20 2d 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 56 45   - TESTALLOC_OVE
3180: 52 48 45 41 44 3b 0a 20 20 20 20 63 68 61 72 20  RHEAD;.    char 
3190: 2a 7a 41 6c 6c 6f 63 20 3d 20 28 63 68 61 72 20  *zAlloc = (char 
31a0: 2a 29 70 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  *)p;.    int i;.
31b0: 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  .    Tcl_ListObj
31c0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c  AppendElement(0,
31d0: 20 70 45 6e 74 72 79 2c 20 54 63 6c 5f 4e 65 77   pEntry, Tcl_New
31e0: 49 6e 74 4f 62 6a 28 6e 42 79 74 65 73 29 29 3b  IntObj(nBytes));
31f0: 0a 0a 20 20 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f  ..    z = &zAllo
3200: 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53  c[TESTALLOC_OFFS
3210: 45 54 5f 46 49 4c 45 4e 41 4d 45 28 70 29 5d 3b  ET_FILENAME(p)];
3220: 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  .    Tcl_ListObj
3230: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c  AppendElement(0,
3240: 20 70 45 6e 74 72 79 2c 20 54 63 6c 5f 4e 65 77   pEntry, Tcl_New
3250: 53 74 72 69 6e 67 4f 62 6a 28 7a 2c 20 2d 31 29  StringObj(z, -1)
3260: 29 3b 0a 0a 20 20 20 20 7a 20 3d 20 26 7a 41 6c  );..    z = &zAl
3270: 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  loc[TESTALLOC_OF
3280: 46 53 45 54 5f 4c 49 4e 45 4e 55 4d 42 45 52 28  FSET_LINENUMBER(
3290: 70 29 5d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  p)];.    memcpy(
32a0: 26 69 4c 69 6e 65 2c 20 7a 2c 20 73 69 7a 65 6f  &iLine, z, sizeo
32b0: 66 28 75 33 32 29 29 3b 0a 20 20 20 20 54 63 6c  f(u32));.    Tcl
32c0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
32d0: 65 6d 65 6e 74 28 30 2c 20 70 45 6e 74 72 79 2c  ement(0, pEntry,
32e0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 69   Tcl_NewIntObj(i
32f0: 4c 69 6e 65 29 29 3b 0a 0a 20 20 20 20 7a 20 3d  Line));..    z =
3300: 20 26 7a 41 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c   &zAlloc[TESTALL
3310: 4f 43 5f 4f 46 46 53 45 54 5f 55 53 45 52 28 70  OC_OFFSET_USER(p
3320: 29 5d 3b 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74  )];.    Tcl_List
3330: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
3340: 28 30 2c 20 70 45 6e 74 72 79 2c 20 54 63 6c 5f  (0, pEntry, Tcl_
3350: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 2c 20  NewStringObj(z, 
3360: 2d 31 29 29 3b 0a 0a 20 20 20 20 7a 20 3d 20 26  -1));..    z = &
3370: 7a 41 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f 43  zAlloc[TESTALLOC
3380: 5f 4f 46 46 53 45 54 5f 53 54 41 43 4b 28 70 29  _OFFSET_STACK(p)
3390: 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
33a0: 69 3c 54 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43  i<TESTALLOC_STAC
33b0: 4b 46 52 41 4d 45 53 3b 20 69 2b 2b 29 7b 0a 20  KFRAMES; i++){. 
33c0: 20 20 20 20 20 63 68 61 72 20 7a 48 65 78 5b 31       char zHex[1
33d0: 32 38 5d 3b 0a 20 20 20 20 20 20 73 70 72 69 6e  28];.      sprin
33e0: 74 66 28 7a 48 65 78 2c 20 22 25 70 22 2c 20 28  tf(zHex, "%p", (
33f0: 28 76 6f 69 64 20 2a 2a 29 7a 29 5b 69 5d 29 3b  (void **)z)[i]);
3400: 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  .      Tcl_ListO
3410: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
3420: 30 2c 20 70 53 74 61 63 6b 2c 20 54 63 6c 5f 4e  0, pStack, Tcl_N
3430: 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 48 65 78  ewStringObj(zHex
3440: 2c 20 2d 31 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  , -1));.    }.. 
3450: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
3460: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
3470: 45 6e 74 72 79 2c 20 70 53 74 61 63 6b 29 3b 0a  Entry, pStack);.
3480: 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41      Tcl_ListObjA
3490: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
34a0: 70 52 65 73 2c 20 70 45 6e 74 72 79 29 3b 0a 20  pRes, pEntry);. 
34b0: 20 7d 0a 0a 20 20 54 63 6c 5f 52 65 73 65 74 52   }..  Tcl_ResetR
34c0: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20  esult(interp);. 
34d0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
34e0: 74 28 69 6e 74 65 72 70 2c 20 70 52 65 73 29 3b  t(interp, pRes);
34f0: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
3500: 75 6e 74 28 70 52 65 73 29 3b 0a 20 20 72 65 74  unt(pRes);.  ret
3510: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65  urn TCL_OK;.}.#e
3520: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ndif../*.** This
3530: 20 69 73 20 74 68 65 20 74 65 73 74 20 6c 61 79   is the test lay
3540: 65 72 27 73 20 77 72 61 70 70 65 72 20 61 72 6f  er's wrapper aro
3550: 75 6e 64 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c  und sqlite3OsMal
3560: 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  loc()..*/.static
3570: 20 76 6f 69 64 20 2a 20 4f 53 4d 41 4c 4c 4f 43   void * OSMALLOC
3580: 28 69 6e 74 20 6e 29 7b 0a 20 20 73 71 6c 69 74  (int n){.  sqlit
3590: 65 33 4f 73 45 6e 74 65 72 4d 75 74 65 78 28 29  e3OsEnterMutex()
35a0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
35b0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
35c0: 4e 41 47 45 4d 45 4e 54 0a 20 20 73 71 6c 69 74  NAGEMENT.  sqlit
35d0: 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 20 3d 20 0a  e3_nMaxAlloc = .
35e0: 20 20 20 20 20 20 4d 41 58 28 73 71 6c 69 74 65        MAX(sqlite
35f0: 33 5f 6e 4d 61 78 41 6c 6c 6f 63 2c 20 73 71 6c  3_nMaxAlloc, sql
3600: 69 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65  ite3ThreadDataRe
3610: 61 64 4f 6e 6c 79 28 29 2d 3e 6e 41 6c 6c 6f 63  adOnly()->nAlloc
3620: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  );.#endif.  asse
3630: 72 74 28 20 21 73 71 6c 69 74 65 33 5f 6d 61 6c  rt( !sqlite3_mal
3640: 6c 6f 63 44 69 73 61 6c 6c 6f 77 65 64 20 29 3b  locDisallowed );
3650: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 54  .  if( !sqlite3T
3660: 65 73 74 4d 61 6c 6c 6f 63 46 61 69 6c 28 29 20  estMallocFail() 
3670: 29 7b 0a 20 20 20 20 75 33 32 20 2a 70 3b 0a 20  ){.    u32 *p;. 
3680: 20 20 20 70 20 3d 20 28 75 33 32 20 2a 29 73 71     p = (u32 *)sq
3690: 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63 28 6e 20  lite3OsMalloc(n 
36a0: 2b 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 56 45 52  + TESTALLOC_OVER
36b0: 48 45 41 44 29 3b 0a 20 20 20 20 61 73 73 65 72  HEAD);.    asser
36c0: 74 28 70 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  t(p);.    sqlite
36d0: 33 5f 6e 4d 61 6c 6c 6f 63 2b 2b 3b 0a 20 20 20  3_nMalloc++;.   
36e0: 20 61 70 70 6c 79 47 75 61 72 64 73 28 70 29 3b   applyGuards(p);
36f0: 0a 20 20 20 20 6c 69 6e 6b 41 6c 6c 6f 63 28 70  .    linkAlloc(p
3700: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 73  );.    sqlite3Os
3710: 4c 65 61 76 65 4d 75 74 65 78 28 29 3b 0a 20 20  LeaveMutex();.  
3720: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a    return (void *
3730: 29 28 26 70 5b 54 45 53 54 41 4c 4c 4f 43 5f 4e  )(&p[TESTALLOC_N
3740: 47 55 41 52 44 20 2b 20 32 2a 73 69 7a 65 6f 66  GUARD + 2*sizeof
3750: 28 76 6f 69 64 20 2a 29 2f 73 69 7a 65 6f 66 28  (void *)/sizeof(
3760: 75 33 32 29 5d 29 3b 0a 20 20 7d 0a 20 20 73 71  u32)]);.  }.  sq
3770: 6c 69 74 65 33 4f 73 4c 65 61 76 65 4d 75 74 65  lite3OsLeaveMute
3780: 78 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  x();.  return 0;
3790: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 4f  .}..static int O
37a0: 53 53 49 5a 45 4f 46 28 76 6f 69 64 20 2a 70 29  SSIZEOF(void *p)
37b0: 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20  {.  if( p ){.   
37c0: 20 75 33 32 20 2a 70 4f 73 20 3d 20 28 75 33 32   u32 *pOs = (u32
37d0: 20 2a 29 67 65 74 4f 73 50 6f 69 6e 74 65 72 28   *)getOsPointer(
37e0: 70 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 73  p);.    return s
37f0: 71 6c 69 74 65 33 4f 73 41 6c 6c 6f 63 61 74 69  qlite3OsAllocati
3800: 6f 6e 53 69 7a 65 28 70 4f 73 29 20 2d 20 54 45  onSize(pOs) - TE
3810: 53 54 41 4c 4c 4f 43 5f 4f 56 45 52 48 45 41 44  STALLOC_OVERHEAD
3820: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
3830: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
3840: 69 73 20 74 68 65 20 74 65 73 74 20 6c 61 79 65  is the test laye
3850: 72 27 73 20 77 72 61 70 70 65 72 20 61 72 6f 75  r's wrapper arou
3860: 6e 64 20 73 71 6c 69 74 65 33 4f 73 46 72 65 65  nd sqlite3OsFree
3870: 28 29 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  (). The argument
3880: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
3890: 20 74 6f 20 74 68 65 20 73 70 61 63 65 20 61 6c   to the space al
38a0: 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
38b0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 6f 20 75  application to u
38c0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  se..*/.static vo
38d0: 69 64 20 4f 53 46 52 45 45 28 76 6f 69 64 20 2a  id OSFREE(void *
38e0: 70 46 72 65 65 29 7b 0a 20 20 75 33 32 20 2a 70  pFree){.  u32 *p
38f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ;         /* Poi
3900: 6e 74 65 72 20 74 6f 20 74 68 65 20 4f 53 2d 6c  nter to the OS-l
3910: 61 79 65 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  ayer allocation 
3920: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 4f 73 45 6e  */.  sqlite3OsEn
3930: 74 65 72 4d 75 74 65 78 28 29 3b 0a 20 20 70 20  terMutex();.  p 
3940: 3d 20 28 75 33 32 20 2a 29 67 65 74 4f 73 50 6f  = (u32 *)getOsPo
3950: 69 6e 74 65 72 28 70 46 72 65 65 29 3b 0a 20 20  inter(pFree);.  
3960: 63 68 65 63 6b 47 75 61 72 64 73 28 70 29 3b 0a  checkGuards(p);.
3970: 20 20 75 6e 6c 69 6e 6b 41 6c 6c 6f 63 28 70 29    unlinkAlloc(p)
3980: 3b 0a 20 20 6d 65 6d 73 65 74 28 70 46 72 65 65  ;.  memset(pFree
3990: 2c 20 30 78 35 35 2c 20 4f 53 53 49 5a 45 4f 46  , 0x55, OSSIZEOF
39a0: 28 70 46 72 65 65 29 29 3b 0a 20 20 73 71 6c 69  (pFree));.  sqli
39b0: 74 65 33 4f 73 46 72 65 65 28 70 29 3b 0a 20 20  te3OsFree(p);.  
39c0: 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2b 2b 3b  sqlite3_nFree++;
39d0: 0a 20 20 73 71 6c 69 74 65 33 4f 73 4c 65 61 76  .  sqlite3OsLeav
39e0: 65 4d 75 74 65 78 28 29 3b 0a 7d 0a 0a 2f 2a 0a  eMutex();.}../*.
39f0: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 74  ** This is the t
3a00: 65 73 74 20 6c 61 79 65 72 27 73 20 77 72 61 70  est layer's wrap
3a10: 70 65 72 20 61 72 6f 75 6e 64 20 73 71 6c 69 74  per around sqlit
3a20: 65 33 4f 73 52 65 61 6c 6c 6f 63 28 29 2e 0a 2a  e3OsRealloc()..*
3a30: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a 20  /.static void * 
3a40: 4f 53 52 45 41 4c 4c 4f 43 28 76 6f 69 64 20 2a  OSREALLOC(void *
3a50: 70 52 65 61 6c 6c 6f 63 2c 20 69 6e 74 20 6e 29  pRealloc, int n)
3a60: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
3a70: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
3a80: 4e 41 47 45 4d 45 4e 54 0a 20 20 73 71 6c 69 74  NAGEMENT.  sqlit
3a90: 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 20 3d 20 0a  e3_nMaxAlloc = .
3aa0: 20 20 20 20 20 20 4d 41 58 28 73 71 6c 69 74 65        MAX(sqlite
3ab0: 33 5f 6e 4d 61 78 41 6c 6c 6f 63 2c 20 73 71 6c  3_nMaxAlloc, sql
3ac0: 69 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65  ite3ThreadDataRe
3ad0: 61 64 4f 6e 6c 79 28 29 2d 3e 6e 41 6c 6c 6f 63  adOnly()->nAlloc
3ae0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  );.#endif.  asse
3af0: 72 74 28 20 21 73 71 6c 69 74 65 33 5f 6d 61 6c  rt( !sqlite3_mal
3b00: 6c 6f 63 44 69 73 61 6c 6c 6f 77 65 64 20 29 3b  locDisallowed );
3b10: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 54  .  if( !sqlite3T
3b20: 65 73 74 4d 61 6c 6c 6f 63 46 61 69 6c 28 29 20  estMallocFail() 
3b30: 29 7b 0a 20 20 20 20 75 33 32 20 2a 70 20 3d 20  ){.    u32 *p = 
3b40: 28 75 33 32 20 2a 29 67 65 74 4f 73 50 6f 69 6e  (u32 *)getOsPoin
3b50: 74 65 72 28 70 52 65 61 6c 6c 6f 63 29 3b 0a 20  ter(pRealloc);. 
3b60: 20 20 20 63 68 65 63 6b 47 75 61 72 64 73 28 70     checkGuards(p
3b70: 29 3b 0a 20 20 20 20 70 20 3d 20 73 71 6c 69 74  );.    p = sqlit
3b80: 65 33 4f 73 52 65 61 6c 6c 6f 63 28 70 2c 20 6e  e3OsRealloc(p, n
3b90: 20 2b 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 56 45   + TESTALLOC_OVE
3ba0: 52 48 45 41 44 29 3b 0a 20 20 20 20 61 70 70 6c  RHEAD);.    appl
3bb0: 79 47 75 61 72 64 73 28 70 29 3b 0a 20 20 20 20  yGuards(p);.    
3bc0: 72 65 6c 69 6e 6b 41 6c 6c 6f 63 28 70 29 3b 0a  relinkAlloc(p);.
3bd0: 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64      return (void
3be0: 20 2a 29 28 26 70 5b 54 45 53 54 41 4c 4c 4f 43   *)(&p[TESTALLOC
3bf0: 5f 4e 47 55 41 52 44 20 2b 20 32 2a 73 69 7a 65  _NGUARD + 2*size
3c00: 6f 66 28 76 6f 69 64 20 2a 29 2f 73 69 7a 65 6f  of(void *)/sizeo
3c10: 66 28 75 33 32 29 5d 29 3b 0a 20 20 7d 0a 20 20  f(u32)]);.  }.  
3c20: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 73 74 61  return 0;.}..sta
3c30: 74 69 63 20 76 6f 69 64 20 4f 53 4d 41 4c 4c 4f  tic void OSMALLO
3c40: 43 5f 46 41 49 4c 45 44 28 29 7b 0a 20 20 73 71  C_FAILED(){.  sq
3c50: 6c 69 74 65 33 5f 69 73 46 61 69 6c 20 3d 20 30  lite3_isFail = 0
3c60: 3b 0a 7d 0a 0a 23 65 6c 73 65 0a 2f 2a 20 44 65  ;.}..#else./* De
3c70: 66 69 6e 65 20 6d 61 63 72 6f 73 20 74 6f 20 63  fine macros to c
3c80: 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 4f  all the sqlite3O
3c90: 73 58 58 58 20 69 6e 74 65 72 66 61 63 65 20 64  sXXX interface d
3ca0: 69 72 65 63 74 6c 79 20 69 66 20 0a 2a 2a 20 74  irectly if .** t
3cb0: 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
3cc0: 55 47 20 6d 61 63 72 6f 20 69 73 20 6e 6f 74 20  UG macro is not 
3cd0: 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 64 65 66  defined..*/.#def
3ce0: 69 6e 65 20 4f 53 4d 41 4c 4c 4f 43 28 78 29 20  ine OSMALLOC(x) 
3cf0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73         sqlite3Os
3d00: 4d 61 6c 6c 6f 63 28 78 29 0a 23 64 65 66 69 6e  Malloc(x).#defin
3d10: 65 20 4f 53 52 45 41 4c 4c 4f 43 28 78 2c 79 29  e OSREALLOC(x,y)
3d20: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 52 65       sqlite3OsRe
3d30: 61 6c 6c 6f 63 28 78 2c 79 29 0a 23 64 65 66 69  alloc(x,y).#defi
3d40: 6e 65 20 4f 53 46 52 45 45 28 78 29 20 20 20 20  ne OSFREE(x)    
3d50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46        sqlite3OsF
3d60: 72 65 65 28 78 29 0a 23 64 65 66 69 6e 65 20 4f  ree(x).#define O
3d70: 53 53 49 5a 45 4f 46 28 78 29 20 20 20 20 20 20  SSIZEOF(x)      
3d80: 20 20 73 71 6c 69 74 65 33 4f 73 41 6c 6c 6f 63    sqlite3OsAlloc
3d90: 61 74 69 6f 6e 53 69 7a 65 28 78 29 0a 23 64 65  ationSize(x).#de
3da0: 66 69 6e 65 20 4f 53 4d 41 4c 4c 4f 43 5f 46 41  fine OSMALLOC_FA
3db0: 49 4c 45 44 28 29 0a 0a 23 65 6e 64 69 66 20 20  ILED()..#endif  
3dc0: 2f 2a 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  /* SQLITE_MEMDEB
3dd0: 55 47 20 2a 2f 0a 2f 2a 0a 2a 2a 20 45 6e 64 20  UG */./*.** End 
3de0: 63 6f 64 65 20 66 6f 72 20 6d 65 6d 6f 72 79 20  code for memory 
3df0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 79 73 74 65  allocation syste
3e00: 6d 20 74 65 73 74 20 6c 61 79 65 72 2e 0a 2a 2a  m test layer..**
3e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 2f 2a  ----------*/../*
3e60: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
3e70: 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20   is called when 
3e80: 77 65 20 61 72 65 20 61 62 6f 75 74 20 74 6f 20  we are about to 
3e90: 61 6c 6c 6f 63 61 74 65 20 6e 20 61 64 64 69 74  allocate n addit
3ea0: 69 6f 6e 61 6c 20 62 79 74 65 73 0a 2a 2a 20 6f  ional bytes.** o
3eb0: 66 20 6d 65 6d 6f 72 79 2e 20 20 49 66 20 74 68  f memory.  If th
3ec0: 65 20 6e 65 77 20 61 6c 6c 6f 63 61 74 69 6f 6e  e new allocation
3ed0: 20 77 69 6c 6c 20 70 75 74 20 69 73 20 6f 76 65   will put is ove
3ee0: 72 20 74 68 65 20 73 6f 66 74 20 61 6c 6c 6f 63  r the soft alloc
3ef0: 61 74 69 6f 6e 0a 2a 2a 20 6c 69 6d 69 74 2c 20  ation.** limit, 
3f00: 74 68 65 6e 20 69 6e 76 6f 6b 65 20 73 71 6c 69  then invoke sqli
3f10: 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
3f20: 72 79 28 29 20 74 6f 20 74 72 79 20 74 6f 20 72  ry() to try to r
3f30: 65 6c 65 61 73 65 20 73 6f 6d 65 0a 2a 2a 20 6d  elease some.** m
3f40: 65 6d 6f 72 79 20 62 65 66 6f 72 65 20 63 6f 6e  emory before con
3f50: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
3f60: 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a   allocation..**.
3f70: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
3f80: 61 6c 73 6f 20 6d 61 6b 65 73 20 73 75 72 65 20  also makes sure 
3f90: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 2d  that the thread-
3fa0: 73 70 65 63 69 66 69 63 2d 64 61 74 61 20 28 54  specific-data (T
3fb0: 53 44 29 20 68 61 73 0a 2a 2a 20 62 65 20 61 6c  SD) has.** be al
3fc0: 6c 6f 63 61 74 65 64 2e 20 20 49 66 20 69 74 20  located.  If it 
3fd0: 68 61 73 20 6e 6f 74 20 61 6e 64 20 63 61 6e 20  has not and can 
3fe0: 6e 6f 74 20 62 65 20 61 6c 6c 6f 63 61 74 65 64  not be allocated
3ff0: 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 0a 2a 2a  , then return.**
4000: 20 66 61 6c 73 65 2e 20 20 54 68 65 20 75 70 64   false.  The upd
4010: 61 74 65 4d 65 6d 6f 72 79 55 73 65 64 43 6f 75  ateMemoryUsedCou
4020: 6e 74 28 29 20 72 6f 75 74 69 6e 65 20 62 65 6c  nt() routine bel
4030: 6f 77 20 77 69 6c 6c 20 64 65 61 6c 6c 6f 63 61  ow will dealloca
4040: 74 65 0a 2a 2a 20 74 68 65 20 54 53 44 20 69 66  te.** the TSD if
4050: 20 69 74 20 6f 75 67 68 74 20 74 6f 20 62 65 2e   it ought to be.
4060: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
4070: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d  _ENABLE_MEMORY_M
4080: 41 4e 41 47 45 4d 45 4e 54 20 69 73 20 6e 6f 74  ANAGEMENT is not
4090: 20 64 65 66 69 6e 65 64 2c 20 74 68 69 73 20 72   defined, this r
40a0: 6f 75 74 69 6e 65 20 69 73 0a 2a 2a 20 61 20 6e  outine is.** a n
40b0: 6f 2d 6f 70 0a 2a 2f 20 0a 23 69 66 64 65 66 20  o-op.*/ .#ifdef 
40c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
40d0: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a  MORY_MANAGEMENT.
40e0: 73 74 61 74 69 63 20 69 6e 74 20 65 6e 66 6f 72  static int enfor
40f0: 63 65 53 6f 66 74 4c 69 6d 69 74 28 69 6e 74 20  ceSoftLimit(int 
4100: 6e 29 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61  n){.  ThreadData
4110: 20 2a 70 54 73 64 20 3d 20 73 71 6c 69 74 65 33   *pTsd = sqlite3
4120: 54 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20  ThreadData();.  
4130: 69 66 28 20 70 54 73 64 3d 3d 30 20 29 7b 0a 20  if( pTsd==0 ){. 
4140: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
4150: 0a 20 20 61 73 73 65 72 74 28 20 70 54 73 64 2d  .  assert( pTsd-
4160: 3e 6e 41 6c 6c 6f 63 3e 3d 30 20 29 3b 0a 20 20  >nAlloc>=0 );.  
4170: 69 66 28 20 6e 3e 30 20 26 26 20 70 54 73 64 2d  if( n>0 && pTsd-
4180: 3e 6e 53 6f 66 74 48 65 61 70 4c 69 6d 69 74 3e  >nSoftHeapLimit>
4190: 30 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20  0 ){.    while( 
41a0: 70 54 73 64 2d 3e 6e 41 6c 6c 6f 63 2b 6e 3e 70  pTsd->nAlloc+n>p
41b0: 54 73 64 2d 3e 6e 53 6f 66 74 48 65 61 70 4c 69  Tsd->nSoftHeapLi
41c0: 6d 69 74 20 26 26 20 73 71 6c 69 74 65 33 5f 72  mit && sqlite3_r
41d0: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 29  elease_memory(n)
41e0: 20 29 7b 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72   ){}.  }.  retur
41f0: 6e 20 31 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64  n 1;.}.#else.# d
4200: 65 66 69 6e 65 20 65 6e 66 6f 72 63 65 53 6f 66  efine enforceSof
4210: 74 4c 69 6d 69 74 28 58 29 20 20 31 0a 23 65 6e  tLimit(X)  1.#en
4220: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 70 64 61 74  dif../*.** Updat
4230: 65 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 74  e the count of t
4240: 6f 74 61 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67  otal outstanding
4250: 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 69 73 20   memory that is 
4260: 68 65 6c 64 20 69 6e 0a 2a 2a 20 74 68 72 65 61  held in.** threa
4270: 64 2d 73 70 65 63 69 66 69 63 2d 64 61 74 61 20  d-specific-data 
4280: 28 54 53 44 29 2e 20 20 49 66 20 61 66 74 65 72  (TSD).  If after
4290: 20 74 68 69 73 20 75 70 64 61 74 65 20 74 68 65   this update the
42a0: 20 54 53 44 20 69 73 0a 2a 2a 20 6e 6f 20 6c 6f   TSD is.** no lo
42b0: 6e 67 65 72 20 62 65 69 6e 67 20 75 73 65 64 2c  nger being used,
42c0: 20 74 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65   then deallocate
42d0: 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51   it..**.** If SQ
42e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
42f0: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 20 69 73  RY_MANAGEMENT is
4300: 20 6e 6f 74 20 64 65 66 69 6e 65 64 2c 20 74 68   not defined, th
4310: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 0a 2a 2a  is routine is.**
4320: 20 61 20 6e 6f 2d 6f 70 0a 2a 2f 0a 23 69 66 64   a no-op.*/.#ifd
4330: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
4340: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
4350: 4e 54 0a 73 74 61 74 69 63 20 76 6f 69 64 20 75  NT.static void u
4360: 70 64 61 74 65 4d 65 6d 6f 72 79 55 73 65 64 43  pdateMemoryUsedC
4370: 6f 75 6e 74 28 69 6e 74 20 6e 29 7b 0a 20 20 54  ount(int n){.  T
4380: 68 72 65 61 64 44 61 74 61 20 2a 70 54 73 64 20  hreadData *pTsd 
4390: 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44  = sqlite3ThreadD
43a0: 61 74 61 28 29 3b 0a 20 20 69 66 28 20 70 54 73  ata();.  if( pTs
43b0: 64 20 29 7b 0a 20 20 20 20 70 54 73 64 2d 3e 6e  d ){.    pTsd->n
43c0: 41 6c 6c 6f 63 20 2b 3d 20 6e 3b 0a 20 20 20 20  Alloc += n;.    
43d0: 61 73 73 65 72 74 28 20 70 54 73 64 2d 3e 6e 41  assert( pTsd->nA
43e0: 6c 6c 6f 63 3e 3d 30 20 29 3b 0a 20 20 20 20 69  lloc>=0 );.    i
43f0: 66 28 20 70 54 73 64 2d 3e 6e 41 6c 6c 6f 63 3d  f( pTsd->nAlloc=
4400: 3d 30 20 26 26 20 70 54 73 64 2d 3e 6e 53 6f 66  =0 && pTsd->nSof
4410: 74 48 65 61 70 4c 69 6d 69 74 3d 3d 30 20 29 7b  tHeapLimit==0 ){
4420: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
4430: 6c 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28  leaseThreadData(
4440: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23  );.    }.  }.}.#
4450: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 75 70 64  else.#define upd
4460: 61 74 65 4d 65 6d 6f 72 79 55 73 65 64 43 6f 75  ateMemoryUsedCou
4470: 6e 74 28 78 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  nt(x)  /* no-op 
4480: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
4490: 20 41 6c 6c 6f 63 61 74 65 20 61 6e 64 20 72 65   Allocate and re
44a0: 74 75 72 6e 20 4e 20 62 79 74 65 73 20 6f 66 20  turn N bytes of 
44b0: 75 6e 69 6e 69 74 69 61 6c 69 73 65 64 20 6d 65  uninitialised me
44c0: 6d 6f 72 79 20 62 79 20 63 61 6c 6c 69 6e 67 0a  mory by calling.
44d0: 2a 2a 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c  ** sqlite3OsMall
44e0: 6f 63 28 29 2e 20 49 66 20 74 68 65 20 4d 61 6c  oc(). If the Mal
44f0: 6c 6f 63 28 29 20 63 61 6c 6c 20 66 61 69 6c 73  loc() call fails
4500: 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72 65  , attempt to fre
4510: 65 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 62 79 20  e memory .** by 
4520: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
4530: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
4540: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
4550: 65 33 4d 61 6c 6c 6f 63 52 61 77 28 69 6e 74 20  e3MallocRaw(int 
4560: 6e 2c 20 69 6e 74 20 64 6f 4d 65 6d 4d 61 6e 61  n, int doMemMana
4570: 67 65 29 7b 0a 20 20 76 6f 69 64 20 2a 70 20 3d  ge){.  void *p =
4580: 20 30 3b 0a 20 20 69 66 28 20 6e 3e 30 20 26 26   0;.  if( n>0 &&
4590: 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46   !sqlite3MallocF
45a0: 61 69 6c 65 64 28 29 20 26 26 20 28 21 64 6f 4d  ailed() && (!doM
45b0: 65 6d 4d 61 6e 61 67 65 20 7c 7c 20 65 6e 66 6f  emManage || enfo
45c0: 72 63 65 53 6f 66 74 4c 69 6d 69 74 28 6e 29 29  rceSoftLimit(n))
45d0: 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   ){.    while( (
45e0: 70 20 3d 20 4f 53 4d 41 4c 4c 4f 43 28 6e 29 29  p = OSMALLOC(n))
45f0: 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 5f 72  ==0 && sqlite3_r
4600: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 29  elease_memory(n)
4610: 20 29 7b 7d 0a 20 20 20 20 69 66 28 20 21 70 20   ){}.    if( !p 
4620: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4630: 46 61 69 6c 65 64 4d 61 6c 6c 6f 63 28 29 3b 0a  FailedMalloc();.
4640: 20 20 20 20 20 20 4f 53 4d 41 4c 4c 4f 43 5f 46        OSMALLOC_F
4650: 41 49 4c 45 44 28 29 3b 0a 20 20 20 20 7d 65 6c  AILED();.    }el
4660: 73 65 20 69 66 28 20 64 6f 4d 65 6d 4d 61 6e 61  se if( doMemMana
4670: 67 65 20 29 7b 0a 20 20 20 20 20 20 75 70 64 61  ge ){.      upda
4680: 74 65 4d 65 6d 6f 72 79 55 73 65 64 43 6f 75 6e  teMemoryUsedCoun
4690: 74 28 4f 53 53 49 5a 45 4f 46 28 70 29 29 3b 0a  t(OSSIZEOF(p));.
46a0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
46b0: 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn p;.}../*.** R
46c0: 65 73 69 7a 65 20 74 68 65 20 61 6c 6c 6f 63 61  esize the alloca
46d0: 74 69 6f 6e 20 61 74 20 70 20 74 6f 20 6e 20 62  tion at p to n b
46e0: 79 74 65 73 20 62 79 20 63 61 6c 6c 69 6e 67 20  ytes by calling 
46f0: 73 71 6c 69 74 65 33 4f 73 52 65 61 6c 6c 6f 63  sqlite3OsRealloc
4700: 28 29 2e 20 54 68 65 0a 2a 2a 20 70 6f 69 6e 74  (). The.** point
4710: 65 72 20 74 6f 20 74 68 65 20 6e 65 77 20 61 6c  er to the new al
4720: 6c 6f 63 61 74 69 6f 6e 20 69 73 20 72 65 74 75  location is retu
4730: 72 6e 65 64 2e 20 20 49 66 20 74 68 65 20 52 65  rned.  If the Re
4740: 61 6c 6c 6f 63 28 29 20 63 61 6c 6c 20 66 61 69  alloc() call fai
4750: 6c 73 2c 0a 2a 2a 20 61 74 74 65 6d 70 74 20 74  ls,.** attempt t
4760: 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 62 79  o free memory by
4770: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
4780: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
4790: 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  )..*/.void *sqli
47a0: 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20  te3Realloc(void 
47b0: 2a 70 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69 66  *p, int n){.  if
47c0: 28 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46  ( sqlite3MallocF
47d0: 61 69 6c 65 64 28 29 20 29 7b 0a 20 20 20 20 72  ailed() ){.    r
47e0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 0a 20 20  eturn 0;.  }..  
47f0: 69 66 28 20 21 70 20 29 7b 0a 20 20 20 20 72 65  if( !p ){.    re
4800: 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61 6c 6c  turn sqlite3Mall
4810: 6f 63 28 6e 2c 20 31 29 3b 0a 20 20 7d 65 6c 73  oc(n, 1);.  }els
4820: 65 7b 0a 20 20 20 20 76 6f 69 64 20 2a 6e 70 20  e{.    void *np 
4830: 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
4840: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
4850: 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 20 20  _MANAGEMENT.    
4860: 69 6e 74 20 6f 72 69 67 53 69 7a 65 20 3d 20 4f  int origSize = O
4870: 53 53 49 5a 45 4f 46 28 70 29 3b 0a 23 65 6e 64  SSIZEOF(p);.#end
4880: 69 66 0a 20 20 20 20 69 66 28 20 65 6e 66 6f 72  if.    if( enfor
4890: 63 65 53 6f 66 74 4c 69 6d 69 74 28 6e 20 2d 20  ceSoftLimit(n - 
48a0: 6f 72 69 67 53 69 7a 65 29 20 29 7b 0a 20 20 20  origSize) ){.   
48b0: 20 20 20 77 68 69 6c 65 28 20 28 6e 70 20 3d 20     while( (np = 
48c0: 4f 53 52 45 41 4c 4c 4f 43 28 70 2c 20 6e 29 29  OSREALLOC(p, n))
48d0: 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 5f 72  ==0 && sqlite3_r
48e0: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 29  elease_memory(n)
48f0: 20 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 21   ){}.      if( !
4900: 6e 70 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  np ){.        sq
4910: 6c 69 74 65 33 46 61 69 6c 65 64 4d 61 6c 6c 6f  lite3FailedMallo
4920: 63 28 29 3b 0a 20 20 20 20 20 20 20 20 4f 53 4d  c();.        OSM
4930: 41 4c 4c 4f 43 5f 46 41 49 4c 45 44 28 29 3b 0a  ALLOC_FAILED();.
4940: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4950: 20 20 20 20 20 75 70 64 61 74 65 4d 65 6d 6f 72       updateMemor
4960: 79 55 73 65 64 43 6f 75 6e 74 28 4f 53 53 49 5a  yUsedCount(OSSIZ
4970: 45 4f 46 28 6e 70 29 20 2d 20 6f 72 69 67 53 69  EOF(np) - origSi
4980: 7a 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ze);.      }.   
4990: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70   }.    return np
49a0: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46  ;.  }.}../*.** F
49b0: 72 65 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 70  ree the memory p
49c0: 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 70 2e 20  ointed to by p. 
49d0: 70 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72  p must be either
49e0: 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 20   a NULL pointer 
49f0: 6f 72 20 61 20 0a 2a 2a 20 76 61 6c 75 65 20 72  or a .** value r
4a00: 65 74 75 72 6e 65 64 20 62 79 20 61 20 70 72 65  eturned by a pre
4a10: 76 69 6f 75 73 20 63 61 6c 6c 20 74 6f 20 73 71  vious call to sq
4a20: 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29 20 6f 72  lite3Malloc() or
4a30: 20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28   sqlite3Realloc(
4a40: 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  )..*/.void sqlit
4a50: 65 33 46 72 65 65 58 28 76 6f 69 64 20 2a 70 29  e3FreeX(void *p)
4a60: 7b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20  {.  if( p ){.   
4a70: 20 75 70 64 61 74 65 4d 65 6d 6f 72 79 55 73 65   updateMemoryUse
4a80: 64 43 6f 75 6e 74 28 30 20 2d 20 4f 53 53 49 5a  dCount(0 - OSSIZ
4a90: 45 4f 46 28 70 29 29 3b 0a 20 20 20 20 4f 53 46  EOF(p));.    OSF
4aa0: 52 45 45 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  REE(p);.  }.}../
4ab0: 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f  *.** A version o
4ac0: 66 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  f sqliteMalloc()
4ad0: 20 74 68 61 74 20 69 73 20 61 6c 77 61 79 73 20   that is always 
4ae0: 61 20 66 75 6e 63 74 69 6f 6e 2c 20 6e 6f 74 20  a function, not 
4af0: 61 20 6d 61 63 72 6f 2e 0a 2a 2a 20 43 75 72 72  a macro..** Curr
4b00: 65 6e 74 6c 79 2c 20 74 68 69 73 20 69 73 20 75  ently, this is u
4b10: 73 65 64 20 6f 6e 6c 79 20 74 6f 20 61 6c 6c 6f  sed only to allo
4b20: 63 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  c to allocate th
4b30: 65 20 70 61 72 73 65 72 20 65 6e 67 69 6e 65 2e  e parser engine.
4b40: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
4b50: 33 4d 61 6c 6c 6f 63 58 28 69 6e 74 20 6e 29 7b  3MallocX(int n){
4b60: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
4b70: 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 7d 0a 0a 2f 2a  Malloc(n);.}../*
4b80: 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  .** sqlite3Mallo
4b90: 63 0a 2a 2a 20 73 71 6c 69 74 65 33 52 65 61 6c  c.** sqlite3Real
4ba0: 6c 6f 63 4f 72 46 72 65 65 0a 2a 2a 0a 2a 2a 20  locOrFree.**.** 
4bb0: 54 68 65 73 65 20 74 77 6f 20 61 72 65 20 69 6d  These two are im
4bc0: 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 77 72 61  plemented as wra
4bd0: 70 70 65 72 73 20 61 72 6f 75 6e 64 20 73 71 6c  ppers around sql
4be0: 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 29 2c  ite3MallocRaw(),
4bf0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 52 65 61 6c   .** sqlite3Real
4c00: 6c 6f 63 28 29 20 61 6e 64 20 73 71 6c 69 74 65  loc() and sqlite
4c10: 33 46 72 65 65 28 29 2e 0a 2a 2f 20 0a 76 6f 69  3Free()..*/ .voi
4c20: 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
4c30: 28 69 6e 74 20 6e 2c 20 69 6e 74 20 64 6f 4d 65  (int n, int doMe
4c40: 6d 4d 61 6e 61 67 65 29 7b 0a 20 20 76 6f 69 64  mManage){.  void
4c50: 20 2a 70 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c   *p = sqlite3Mal
4c60: 6c 6f 63 52 61 77 28 6e 2c 20 64 6f 4d 65 6d 4d  locRaw(n, doMemM
4c70: 61 6e 61 67 65 29 3b 0a 20 20 69 66 28 20 70 20  anage);.  if( p 
4c80: 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 2c  ){.    memset(p,
4c90: 20 30 2c 20 6e 29 3b 0a 20 20 7d 0a 20 20 72 65   0, n);.  }.  re
4ca0: 74 75 72 6e 20 70 3b 0a 7d 0a 76 6f 69 64 20 73  turn p;.}.void s
4cb0: 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46  qlite3ReallocOrF
4cc0: 72 65 65 28 76 6f 69 64 20 2a 2a 70 70 2c 20 69  ree(void **pp, i
4cd0: 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70  nt n){.  void *p
4ce0: 20 3d 20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f   = sqlite3Reallo
4cf0: 63 28 2a 70 70 2c 20 6e 29 3b 0a 20 20 69 66 28  c(*pp, n);.  if(
4d00: 20 21 70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   !p ){.    sqlit
4d10: 65 33 46 72 65 65 58 28 2a 70 70 29 3b 0a 20 20  e3FreeX(*pp);.  
4d20: 7d 0a 20 20 2a 70 70 20 3d 20 70 3b 0a 7d 0a 0a  }.  *pp = p;.}..
4d30: 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 54 68 72  /*.** sqlite3Thr
4d40: 65 61 64 53 61 66 65 4d 61 6c 6c 6f 63 28 29 20  eadSafeMalloc() 
4d50: 61 6e 64 20 73 71 6c 69 74 65 33 54 68 72 65 61  and sqlite3Threa
4d60: 64 53 61 66 65 46 72 65 65 28 29 20 61 72 65 20  dSafeFree() are 
4d70: 75 73 65 64 20 69 6e 20 74 68 6f 73 65 0a 2a 2a  used in those.**
4d80: 20 72 61 72 65 20 73 63 65 6e 61 72 69 6f 73 20   rare scenarios 
4d90: 77 68 65 72 65 20 73 71 6c 69 74 65 20 6d 61 79  where sqlite may
4da0: 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79   allocate memory
4db0: 20 69 6e 20 6f 6e 65 20 74 68 72 65 61 64 20 61   in one thread a
4dc0: 6e 64 20 66 72 65 65 0a 2a 2a 20 69 74 20 69 6e  nd free.** it in
4dd0: 20 61 6e 6f 74 68 65 72 2e 20 54 68 65 79 20 61   another. They a
4de0: 72 65 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  re exactly the s
4df0: 61 6d 65 20 61 73 20 73 71 6c 69 74 65 33 4d 61  ame as sqlite3Ma
4e00: 6c 6c 6f 63 28 29 20 61 6e 64 20 0a 2a 2a 20 73  lloc() and .** s
4e10: 71 6c 69 74 65 33 46 72 65 65 28 29 20 65 78 63  qlite3Free() exc
4e20: 65 70 74 20 74 68 61 74 3a 0a 2a 2a 0a 2a 2a 20  ept that:.**.** 
4e30: 20 20 2a 20 54 68 65 20 61 6c 6c 6f 63 61 74 65    * The allocate
4e40: 64 20 6d 65 6d 6f 72 79 20 69 73 20 6e 6f 74 20  d memory is not 
4e50: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 6e 79 20  included in any 
4e60: 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 74  calculations wit
4e70: 68 20 0a 2a 2a 20 20 20 20 20 72 65 73 70 65 63  h .**     respec
4e80: 74 20 74 6f 20 74 68 65 20 73 6f 66 74 2d 68 65  t to the soft-he
4e90: 61 70 2d 6c 69 6d 69 74 2c 20 61 6e 64 0a 2a 2a  ap-limit, and.**
4ea0: 0a 2a 2a 20 20 20 2a 20 73 71 6c 69 74 65 33 54  .**   * sqlite3T
4eb0: 68 72 65 61 64 53 61 66 65 4d 61 6c 6c 6f 63 28  hreadSafeMalloc(
4ec0: 29 20 6d 75 73 74 20 62 65 20 6d 61 74 63 68 65  ) must be matche
4ed0: 64 20 77 69 74 68 20 54 68 72 65 61 64 53 61 66  d with ThreadSaf
4ee0: 65 46 72 65 65 28 29 2c 0a 2a 2a 20 20 20 20 20  eFree(),.**     
4ef0: 6e 6f 74 20 73 71 6c 69 74 65 33 46 72 65 65 28  not sqlite3Free(
4f00: 29 2e 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74  ). Calling sqlit
4f10: 65 33 46 72 65 65 28 29 20 6f 6e 20 6d 65 6d 6f  e3Free() on memo
4f20: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
4f30: 0a 2a 2a 20 20 20 20 20 54 68 72 65 61 64 53 61  .**     ThreadSa
4f40: 66 65 4d 61 6c 6c 6f 63 28 29 20 77 69 6c 6c 20  feMalloc() will 
4f50: 63 61 75 73 65 20 61 6e 20 65 72 72 6f 72 20 73  cause an error s
4f60: 6f 6d 65 77 68 65 72 65 20 64 6f 77 6e 20 74 68  omewhere down th
4f70: 65 20 6c 69 6e 65 2e 0a 2a 2f 0a 23 69 66 64 65  e line..*/.#ifde
4f80: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
4f90: 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
4fa0: 54 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54  T.void *sqlite3T
4fb0: 68 72 65 61 64 53 61 66 65 4d 61 6c 6c 6f 63 28  hreadSafeMalloc(
4fc0: 69 6e 74 20 6e 29 7b 0a 20 20 28 76 6f 69 64 29  int n){.  (void)
4fd0: 45 4e 54 45 52 5f 4d 41 4c 4c 4f 43 3b 0a 20 20  ENTER_MALLOC;.  
4fe0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61  return sqlite3Ma
4ff0: 6c 6c 6f 63 28 6e 2c 20 30 29 3b 0a 7d 0a 76 6f  lloc(n, 0);.}.vo
5000: 69 64 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  id sqlite3Thread
5010: 53 61 66 65 46 72 65 65 28 76 6f 69 64 20 2a 70  SafeFree(void *p
5020: 29 7b 0a 20 20 28 76 6f 69 64 29 45 4e 54 45 52  ){.  (void)ENTER
5030: 5f 4d 41 4c 4c 4f 43 3b 0a 20 20 69 66 28 20 70  _MALLOC;.  if( p
5040: 20 29 7b 0a 20 20 20 20 4f 53 46 52 45 45 28 70   ){.    OSFREE(p
5050: 29 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a  );.  }.}.#endif.
5060: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
5070: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
5080: 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  es allocated at 
5090: 6c 6f 63 61 74 69 6f 6e 20 70 2e 20 70 20 6d 75  location p. p mu
50a0: 73 74 20 62 65 20 65 69 74 68 65 72 20 0a 2a 2a  st be either .**
50b0: 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 20   a NULL pointer 
50c0: 28 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 30  (in which case 0
50d0: 20 69 73 20 72 65 74 75 72 6e 65 64 29 20 6f 72   is returned) or
50e0: 20 61 20 70 6f 69 6e 74 65 72 20 72 65 74 75 72   a pointer retur
50f0: 6e 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74  ned by .** sqlit
5100: 65 33 4d 61 6c 6c 6f 63 28 29 2c 20 73 71 6c 69  e3Malloc(), sqli
5110: 74 65 33 52 65 61 6c 6c 6f 63 28 29 20 6f 72 20  te3Realloc() or 
5120: 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72  sqlite3ReallocOr
5130: 46 72 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  Free()..**.** Th
5140: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
5150: 73 20 61 6c 6c 6f 63 61 74 65 64 20 64 6f 65 73  s allocated does
5160: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 6e 79   not include any
5170: 20 6f 76 65 72 68 65 61 64 20 69 6e 73 65 72 74   overhead insert
5180: 65 64 20 62 79 20 0a 2a 2a 20 61 6e 79 20 6d 61  ed by .** any ma
5190: 6c 6c 6f 63 28 29 20 77 72 61 70 70 65 72 20 66  lloc() wrapper f
51a0: 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 61  unctions that ma
51b0: 79 20 62 65 20 63 61 6c 6c 65 64 2e 20 53 6f 20  y be called. So 
51c0: 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
51d0: 65 64 0a 2a 2a 20 69 73 20 74 68 65 20 6e 75 6d  ed.** is the num
51e0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 68 61  ber of bytes tha
51f0: 74 20 77 65 72 65 20 61 76 61 69 6c 61 62 6c 65  t were available
5200: 20 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67   to SQLite using
5210: 20 70 6f 69 6e 74 65 72 20 70 2c 20 0a 2a 2a 20   pointer p, .** 
5220: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
5230: 77 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 77 61  w much memory wa
5240: 73 20 61 63 74 75 61 6c 6c 79 20 61 6c 6c 6f 63  s actually alloc
5250: 61 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ated..*/.#ifdef 
5260: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
5270: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a  MORY_MANAGEMENT.
5280: 69 6e 74 20 73 71 6c 69 74 65 33 41 6c 6c 6f 63  int sqlite3Alloc
5290: 53 69 7a 65 28 76 6f 69 64 20 2a 70 29 7b 0a 20  Size(void *p){. 
52a0: 20 72 65 74 75 72 6e 20 4f 53 53 49 5a 45 4f 46   return OSSIZEOF
52b0: 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  (p);.}.#endif../
52c0: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
52d0: 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69 6e 20   of a string in 
52e0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
52f0: 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  from sqliteMallo
5300: 63 28 29 2e 20 54 68 65 73 65 20 0a 2a 2a 20 66  c(). These .** f
5310: 75 6e 63 74 69 6f 6e 73 20 63 61 6c 6c 20 73 71  unctions call sq
5320: 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 29  lite3MallocRaw()
5330: 20 64 69 72 65 63 74 6c 79 20 69 6e 73 74 65 61   directly instea
5340: 64 20 6f 66 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  d of sqliteMallo
5350: 63 28 29 2e 20 54 68 69 73 0a 2a 2a 20 69 73 20  c(). This.** is 
5360: 62 65 63 61 75 73 65 20 77 68 65 6e 20 6d 65 6d  because when mem
5370: 6f 72 79 20 64 65 62 75 67 67 69 6e 67 20 69 73  ory debugging is
5380: 20 74 75 72 6e 65 64 20 6f 6e 2c 20 74 68 65 73   turned on, thes
5390: 65 20 74 77 6f 20 66 75 6e 63 74 69 6f 6e 73 20  e two functions 
53a0: 61 72 65 20 0a 2a 2a 20 63 61 6c 6c 65 64 20 76  are .** called v
53b0: 69 61 20 6d 61 63 72 6f 73 20 74 68 61 74 20 72  ia macros that r
53c0: 65 63 6f 72 64 20 74 68 65 20 63 75 72 72 65 6e  ecord the curren
53d0: 74 20 66 69 6c 65 20 61 6e 64 20 6c 69 6e 65 20  t file and line 
53e0: 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 0a 2a 2a  number in the.**
53f0: 20 54 68 72 65 61 64 44 61 74 61 20 73 74 72 75   ThreadData stru
5400: 63 74 75 72 65 2e 0a 2a 2f 0a 63 68 61 72 20 2a  cture..*/.char *
5410: 73 71 6c 69 74 65 33 53 74 72 44 75 70 28 63 6f  sqlite3StrDup(co
5420: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
5430: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66  char *zNew;.  if
5440: 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( z==0 ) return 
5450: 30 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69  0;.  zNew = sqli
5460: 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 73 74 72  te3MallocRaw(str
5470: 6c 65 6e 28 7a 29 2b 31 2c 20 31 29 3b 0a 20 20  len(z)+1, 1);.  
5480: 69 66 28 20 7a 4e 65 77 20 29 20 73 74 72 63 70  if( zNew ) strcp
5490: 79 28 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65  y(zNew, z);.  re
54a0: 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61  turn zNew;.}.cha
54b0: 72 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 44 75  r *sqlite3StrNDu
54c0: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  p(const char *z,
54d0: 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68 61 72 20   int n){.  char 
54e0: 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d  *zNew;.  if( z==
54f0: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
5500: 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 4d 61  zNew = sqlite3Ma
5510: 6c 6c 6f 63 52 61 77 28 6e 2b 31 2c 20 31 29 3b  llocRaw(n+1, 1);
5520: 0a 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20  .  if( zNew ){. 
5530: 20 20 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20     memcpy(zNew, 
5540: 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b  z, n);.    zNew[
5550: 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65  n] = 0;.  }.  re
5560: 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a  turn zNew;.}../*
5570: 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 73 74 72  .** Create a str
5580: 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64  ing from the 2nd
5590: 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20   and subsequent 
55a0: 61 72 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f  arguments (up to
55b0: 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55   the.** first NU
55c0: 4c 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74  LL argument), st
55d0: 6f 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 69  ore the string i
55e0: 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  n memory obtaine
55f0: 64 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65  d from.** sqlite
5600: 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b  Malloc() and mak
5610: 65 20 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e  e the pointer in
5620: 64 69 63 61 74 65 64 20 62 79 20 74 68 65 20 31  dicated by the 1
5630: 73 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70  st argument.** p
5640: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72  oint to that str
5650: 69 6e 67 2e 20 20 54 68 65 20 31 73 74 20 61 72  ing.  The 1st ar
5660: 67 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68  gument must eith
5670: 65 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a  er be NULL or .*
5680: 2a 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72  * point to memor
5690: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
56a0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a  sqliteMalloc()..
56b0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
56c0: 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
56d0: 70 7a 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  pz, ...){.  va_l
56e0: 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42  ist ap;.  int nB
56f0: 79 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  yte;.  const cha
5700: 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52  r *z;.  char *zR
5710: 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 70 7a  esult;..  if( pz
5720: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
5730: 6e 42 79 74 65 20 3d 20 31 3b 0a 20 20 76 61 5f  nByte = 1;.  va_
5740: 73 74 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20  start(ap, pz);. 
5750: 20 77 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f   while( (z = va_
5760: 61 72 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68  arg(ap, const ch
5770: 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ar*))!=0 ){.    
5780: 6e 42 79 74 65 20 2b 3d 20 73 74 72 6c 65 6e 28  nByte += strlen(
5790: 7a 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64  z);.  }.  va_end
57a0: 28 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  (ap);.  sqliteFr
57b0: 65 65 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d  ee(*pz);.  *pz =
57c0: 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74   zResult = sqlit
57d0: 65 4d 61 6c 6c 6f 63 52 61 77 28 20 6e 42 79 74  eMallocRaw( nByt
57e0: 65 20 29 3b 0a 20 20 69 66 28 20 7a 52 65 73 75  e );.  if( zResu
57f0: 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  lt==0 ){.    ret
5800: 75 72 6e 3b 0a 20 20 7d 0a 20 20 2a 7a 52 65 73  urn;.  }.  *zRes
5810: 75 6c 74 20 3d 20 30 3b 0a 20 20 76 61 5f 73 74  ult = 0;.  va_st
5820: 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77  art(ap, pz);.  w
5830: 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72  hile( (z = va_ar
5840: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
5850: 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74  *))!=0 ){.    st
5860: 72 63 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a 29  rcpy(zResult, z)
5870: 3b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d  ;.    zResult +=
5880: 20 73 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74 29   strlen(zResult)
5890: 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  ;.  }.  va_end(a
58a0: 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  p);.}../*.** Set
58b0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
58c0: 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20   error code and 
58d0: 65 72 72 6f 72 20 73 74 72 69 6e 67 20 66 6f 72  error string for
58e0: 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68   the sqlite.** h
58f0: 61 6e 64 6c 65 20 22 64 62 22 2e 20 54 68 65 20  andle "db". The 
5900: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 65  error code is se
5910: 74 20 74 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e  t to "err_code".
5920: 0a 2a 2a 0a 2a 2a 20 49 66 20 69 74 20 69 73 20  .**.** If it is 
5930: 6e 6f 74 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67  not NULL, string
5940: 20 7a 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69   zFormat specifi
5950: 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
5960: 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74   the.** error st
5970: 72 69 6e 67 20 69 6e 20 74 68 65 20 73 74 79 6c  ring in the styl
5980: 65 20 6f 66 20 74 68 65 20 70 72 69 6e 74 66 20  e of the printf 
5990: 66 75 6e 63 74 69 6f 6e 73 3a 20 54 68 65 20 66  functions: The f
59a0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d  ollowing.** form
59b0: 61 74 20 63 68 61 72 61 63 74 65 72 73 20 61 72  at characters ar
59c0: 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a  e allowed:.**.**
59d0: 20 20 20 20 20 20 25 73 20 20 20 20 20 20 49 6e        %s      In
59e0: 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a  sert a string.**
59f0: 20 20 20 20 20 20 25 7a 20 20 20 20 20 20 41 20        %z      A 
5a00: 73 74 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75  string that shou
5a10: 6c 64 20 62 65 20 66 72 65 65 64 20 61 66 74 65  ld be freed afte
5a20: 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64  r use.**      %d
5a30: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20        Insert an 
5a40: 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20  integer.**      
5a50: 25 54 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %T      Insert a
5a60: 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25   token.**      %
5a70: 53 20 20 20 20 20 20 49 6e 73 65 72 74 20 74 68  S      Insert th
5a80: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
5a90: 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a  of a SrcList.**.
5aa0: 2a 2a 20 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61  ** zFormat and a
5ab0: 6e 79 20 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73  ny string tokens
5ac0: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20   that follow it 
5ad0: 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 62  are assumed to b
5ae0: 65 0a 2a 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20  e.** encoded in 
5af0: 55 54 46 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  UTF-8..**.** To 
5b00: 63 6c 65 61 72 20 74 68 65 20 6d 6f 73 74 20 72  clear the most r
5b10: 65 63 65 6e 74 20 65 72 72 6f 72 20 66 6f 72 20  ecent error for 
5b20: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 20 22 64  sqlite handle "d
5b30: 62 22 2c 20 73 71 6c 69 74 65 33 45 72 72 6f 72  b", sqlite3Error
5b40: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 61  .** should be ca
5b50: 6c 6c 65 64 20 77 69 74 68 20 65 72 72 5f 63 6f  lled with err_co
5b60: 64 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  de set to SQLITE
5b70: 5f 4f 4b 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20  _OK and zFormat 
5b80: 73 65 74 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a  set.** to NULL..
5b90: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
5ba0: 72 72 6f 72 28 73 71 6c 69 74 65 33 20 2a 64 62  rror(sqlite3 *db
5bb0: 2c 20 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20  , int err_code, 
5bc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
5bd0: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 69 66 28  mat, ...){.  if(
5be0: 20 64 62 20 26 26 20 28 64 62 2d 3e 70 45 72 72   db && (db->pErr
5bf0: 20 7c 7c 20 28 64 62 2d 3e 70 45 72 72 20 3d 20   || (db->pErr = 
5c00: 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
5c10: 29 29 21 3d 30 29 20 29 7b 0a 20 20 20 20 64 62  ))!=0) ){.    db
5c20: 2d 3e 65 72 72 43 6f 64 65 20 3d 20 65 72 72 5f  ->errCode = err_
5c30: 63 6f 64 65 3b 0a 20 20 20 20 69 66 28 20 7a 46  code;.    if( zF
5c40: 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 63  ormat ){.      c
5c50: 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 76 61  har *z;.      va
5c60: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 20 20 20 20  _list ap;.      
5c70: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
5c80: 72 6d 61 74 29 3b 0a 20 20 20 20 20 20 7a 20 3d  rmat);.      z =
5c90: 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66   sqlite3VMPrintf
5ca0: 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20  (zFormat, ap);. 
5cb0: 20 20 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b       va_end(ap);
5cc0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61  .      sqlite3Va
5cd0: 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45  lueSetStr(db->pE
5ce0: 72 72 2c 20 2d 31 2c 20 7a 2c 20 53 51 4c 49 54  rr, -1, z, SQLIT
5cf0: 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 46  E_UTF8, sqlite3F
5d00: 72 65 65 58 29 3b 0a 20 20 20 20 7d 65 6c 73 65  reeX);.    }else
5d10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
5d20: 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70  alueSetStr(db->p
5d30: 45 72 72 2c 20 30 2c 20 30 2c 20 53 51 4c 49 54  Err, 0, 0, SQLIT
5d40: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
5d50: 54 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20  TATIC);.    }.  
5d60: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 20 61  }.}../*.** Add a
5d70: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
5d80: 74 6f 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d  to pParse->zErrM
5d90: 73 67 20 61 6e 64 20 69 6e 63 72 65 6d 65 6e 74  sg and increment
5da0: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2e 0a 2a   pParse->nErr..*
5db0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
5dc0: 66 6f 72 6d 61 74 74 69 6e 67 20 63 68 61 72 61  formatting chara
5dd0: 63 74 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65  cters are allowe
5de0: 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73  d:.**.**      %s
5df0: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 73        Insert a s
5e00: 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a  tring.**      %z
5e10: 20 20 20 20 20 20 41 20 73 74 72 69 6e 67 20 74        A string t
5e20: 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 66 72  hat should be fr
5e30: 65 65 64 20 61 66 74 65 72 20 75 73 65 0a 2a 2a  eed after use.**
5e40: 20 20 20 20 20 20 25 64 20 20 20 20 20 20 49 6e        %d      In
5e50: 73 65 72 74 20 61 6e 20 69 6e 74 65 67 65 72 0a  sert an integer.
5e60: 2a 2a 20 20 20 20 20 20 25 54 20 20 20 20 20 20  **      %T      
5e70: 49 6e 73 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a  Insert a token.*
5e80: 2a 20 20 20 20 20 20 25 53 20 20 20 20 20 20 49  *      %S      I
5e90: 6e 73 65 72 74 20 74 68 65 20 66 69 72 73 74 20  nsert the first 
5ea0: 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 53 72 63  element of a Src
5eb0: 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  List.**.** This 
5ec0: 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20  function should 
5ed0: 62 65 20 75 73 65 64 20 74 6f 20 72 65 70 6f 72  be used to repor
5ee0: 74 20 61 6e 79 20 65 72 72 6f 72 20 74 68 61 74  t any error that
5ef0: 20 6f 63 63 75 72 73 20 77 68 69 6c 73 74 0a 2a   occurs whilst.*
5f00: 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 61 6e 20 53  * compiling an S
5f10: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 69 2e  QL statement (i.
5f20: 65 2e 20 77 69 74 68 69 6e 20 73 71 6c 69 74 65  e. within sqlite
5f30: 33 5f 70 72 65 70 61 72 65 28 29 29 2e 20 54 68  3_prepare()). Th
5f40: 65 0a 2a 2a 20 6c 61 73 74 20 74 68 69 6e 67 20  e.** last thing 
5f50: 74 68 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70  the sqlite3_prep
5f60: 61 72 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 64  are() function d
5f70: 6f 65 73 20 69 73 20 63 6f 70 79 20 74 68 65 20  oes is copy the 
5f80: 65 72 72 6f 72 0a 2a 2a 20 73 74 6f 72 65 64 20  error.** stored 
5f90: 62 79 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  by this function
5fa0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
5fb0: 73 65 20 68 61 6e 64 6c 65 20 75 73 69 6e 67 20  se handle using 
5fc0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 29 2e 0a  sqlite3Error()..
5fd0: 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ** Function sqli
5fe0: 74 65 33 45 72 72 6f 72 28 29 20 73 68 6f 75 6c  te3Error() shoul
5ff0: 64 20 62 65 20 75 73 65 64 20 64 75 72 69 6e 67  d be used during
6000: 20 73 74 61 74 65 6d 65 6e 74 20 65 78 65 63 75   statement execu
6010: 74 69 6f 6e 0a 2a 2a 20 28 73 71 6c 69 74 65 33  tion.** (sqlite3
6020: 5f 73 74 65 70 28 29 20 65 74 63 2e 29 2e 0a 2a  _step() etc.)..*
6030: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  /.void sqlite3Er
6040: 72 6f 72 4d 73 67 28 50 61 72 73 65 20 2a 70 50  rorMsg(Parse *pP
6050: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
6060: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
6070: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
6080: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
6090: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 50  .  sqliteFree(pP
60a0: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  arse->zErrMsg);.
60b0: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
60c0: 46 6f 72 6d 61 74 29 3b 0a 20 20 70 50 61 72 73  Format);.  pPars
60d0: 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  e->zErrMsg = sql
60e0: 69 74 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f  ite3VMPrintf(zFo
60f0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
6100: 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  end(ap);.}../*.*
6110: 2a 20 43 6c 65 61 72 20 74 68 65 20 65 72 72 6f  * Clear the erro
6120: 72 20 6d 65 73 73 61 67 65 20 69 6e 20 70 50 61  r message in pPa
6130: 72 73 65 2c 20 69 66 20 61 6e 79 0a 2a 2f 0a 76  rse, if any.*/.v
6140: 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
6150: 43 6c 65 61 72 28 50 61 72 73 65 20 2a 70 50 61  Clear(Parse *pPa
6160: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 46 72  rse){.  sqliteFr
6170: 65 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d  ee(pParse->zErrM
6180: 73 67 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a  sg);.  pParse->z
6190: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 70 50  ErrMsg = 0;.  pP
61a0: 61 72 73 65 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a  arse->nErr = 0;.
61b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  }../*.** Convert
61c0: 20 61 6e 20 53 51 4c 2d 73 74 79 6c 65 20 71 75   an SQL-style qu
61d0: 6f 74 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f  oted string into
61e0: 20 61 20 6e 6f 72 6d 61 6c 20 73 74 72 69 6e 67   a normal string
61f0: 20 62 79 20 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20   by removing.** 
6200: 74 68 65 20 71 75 6f 74 65 20 63 68 61 72 61 63  the quote charac
6210: 74 65 72 73 2e 20 20 54 68 65 20 63 6f 6e 76 65  ters.  The conve
6220: 72 73 69 6f 6e 20 69 73 20 64 6f 6e 65 20 69 6e  rsion is done in
6230: 2d 70 6c 61 63 65 2e 20 20 49 66 20 74 68 65 0a  -place.  If the.
6240: 2a 2a 20 69 6e 70 75 74 20 64 6f 65 73 20 6e 6f  ** input does no
6250: 74 20 62 65 67 69 6e 20 77 69 74 68 20 61 20 71  t begin with a q
6260: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 2c 20  uote character, 
6270: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
6280: 65 0a 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  e.** is a no-op.
6290: 0a 2a 2a 0a 2a 2a 20 32 30 30 32 2d 46 65 62 2d  .**.** 2002-Feb-
62a0: 31 34 3a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  14: This routine
62b0: 20 69 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20   is extended to 
62c0: 72 65 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73 73  remove MS-Access
62d0: 20 73 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b 65   style.** bracke
62e0: 74 73 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20 69  ts from around i
62f0: 64 65 6e 74 69 66 65 72 73 2e 20 20 46 6f 72 20  dentifers.  For 
6300: 65 78 61 6d 70 6c 65 3a 20 20 22 5b 61 2d 62 2d  example:  "[a-b-
6310: 63 5d 22 20 62 65 63 6f 6d 65 73 0a 2a 2a 20 22  c]" becomes.** "
6320: 61 2d 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69 64 20  a-b-c"..*/.void 
6330: 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
6340: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 71  har *z){.  int q
6350: 75 6f 74 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6a  uote;.  int i, j
6360: 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72  ;.  if( z==0 ) r
6370: 65 74 75 72 6e 3b 0a 20 20 71 75 6f 74 65 20 3d  eturn;.  quote =
6380: 20 7a 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68 28   z[0];.  switch(
6390: 20 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 61   quote ){.    ca
63a0: 73 65 20 27 5c 27 27 3a 20 20 62 72 65 61 6b 3b  se '\'':  break;
63b0: 0a 20 20 20 20 63 61 73 65 20 27 22 27 3a 20 20  .    case '"':  
63c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
63d0: 20 27 60 27 3a 20 20 20 62 72 65 61 6b 3b 20 20   '`':   break;  
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
63f0: 20 46 6f 72 20 4d 79 53 51 4c 20 63 6f 6d 70 61   For MySQL compa
6400: 74 69 62 69 6c 69 74 79 20 2a 2f 0a 20 20 20 20  tibility */.    
6410: 63 61 73 65 20 27 5b 27 3a 20 20 20 71 75 6f 74  case '[':   quot
6420: 65 20 3d 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b  e = ']';  break;
6430: 20 20 2f 2a 20 46 6f 72 20 4d 53 20 53 71 6c 53    /* For MS SqlS
6440: 65 72 76 65 72 20 63 6f 6d 70 61 74 69 62 69 6c  erver compatibil
6450: 69 74 79 20 2a 2f 0a 20 20 20 20 64 65 66 61 75  ity */.    defau
6460: 6c 74 3a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  lt:    return;. 
6470: 20 7d 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d   }.  for(i=1, j=
6480: 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20  0; z[i]; i++){. 
6490: 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f     if( z[i]==quo
64a0: 74 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  te ){.      if( 
64b0: 7a 5b 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b  z[i+1]==quote ){
64c0: 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20  .        z[j++] 
64d0: 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 20 20 20  = quote;.       
64e0: 20 69 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73   i++;.      }els
64f0: 65 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b  e{.        z[j++
6500: 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62  ] = 0;.        b
6510: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
6520: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
6530: 5b 6a 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20  [j++] = z[i];.  
6540: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e    }.  }.}../* An
6550: 20 61 72 72 61 79 20 74 6f 20 6d 61 70 20 61 6c   array to map al
6560: 6c 20 75 70 70 65 72 2d 63 61 73 65 20 63 68 61  l upper-case cha
6570: 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65  racters into the
6580: 69 72 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ir corresponding
6590: 0a 2a 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20 63  .** lower-case c
65a0: 68 61 72 61 63 74 65 72 2e 20 0a 2a 2f 0a 63 6f  haracter. .*/.co
65b0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
65c0: 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
65d0: 4c 6f 77 65 72 5b 5d 20 3d 20 7b 0a 23 69 66 64  Lower[] = {.#ifd
65e0: 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
65f0: 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 32 2c        0,  1,  2,
6600: 20 20 33 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c    3,  4,  5,  6,
6610: 20 20 37 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c    7,  8,  9, 10,
6620: 20 31 31 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c   11, 12, 13, 14,
6630: 20 31 35 2c 20 31 36 2c 20 31 37 2c 0a 20 20 20   15, 16, 17,.   
6640: 20 20 31 38 2c 20 31 39 2c 20 32 30 2c 20 32 31    18, 19, 20, 21
6650: 2c 20 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35  , 22, 23, 24, 25
6660: 2c 20 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39  , 26, 27, 28, 29
6670: 2c 20 33 30 2c 20 33 31 2c 20 33 32 2c 20 33 33  , 30, 31, 32, 33
6680: 2c 20 33 34 2c 20 33 35 2c 0a 20 20 20 20 20 33  , 34, 35,.     3
6690: 36 2c 20 33 37 2c 20 33 38 2c 20 33 39 2c 20 34  6, 37, 38, 39, 4
66a0: 30 2c 20 34 31 2c 20 34 32 2c 20 34 33 2c 20 34  0, 41, 42, 43, 4
66b0: 34 2c 20 34 35 2c 20 34 36 2c 20 34 37 2c 20 34  4, 45, 46, 47, 4
66c0: 38 2c 20 34 39 2c 20 35 30 2c 20 35 31 2c 20 35  8, 49, 50, 51, 5
66d0: 32 2c 20 35 33 2c 0a 20 20 20 20 20 35 34 2c 20  2, 53,.     54, 
66e0: 35 35 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c 20  55, 56, 57, 58, 
66f0: 35 39 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c 20  59, 60, 61, 62, 
6700: 36 33 2c 20 36 34 2c 20 39 37 2c 20 39 38 2c 20  63, 64, 97, 98, 
6710: 39 39 2c 31 30 30 2c 31 30 31 2c 31 30 32 2c 31  99,100,101,102,1
6720: 30 33 2c 0a 20 20 20 20 31 30 34 2c 31 30 35 2c  03,.    104,105,
6730: 31 30 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c  106,107,108,109,
6740: 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c  110,111,112,113,
6750: 31 31 34 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c  114,115,116,117,
6760: 31 31 38 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c  118,119,120,121,
6770: 0a 20 20 20 20 31 32 32 2c 20 39 31 2c 20 39 32  .    122, 91, 92
6780: 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c 20 39 36  , 93, 94, 95, 96
6790: 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30  , 97, 98, 99,100
67a0: 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c 31 30 34  ,101,102,103,104
67b0: 2c 31 30 35 2c 31 30 36 2c 31 30 37 2c 0a 20 20  ,105,106,107,.  
67c0: 20 20 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31    108,109,110,11
67d0: 31 2c 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31  1,112,113,114,11
67e0: 35 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31  5,116,117,118,11
67f0: 39 2c 31 32 30 2c 31 32 31 2c 31 32 32 2c 31 32  9,120,121,122,12
6800: 33 2c 31 32 34 2c 31 32 35 2c 0a 20 20 20 20 31  3,124,125,.    1
6810: 32 36 2c 31 32 37 2c 31 32 38 2c 31 32 39 2c 31  26,127,128,129,1
6820: 33 30 2c 31 33 31 2c 31 33 32 2c 31 33 33 2c 31  30,131,132,133,1
6830: 33 34 2c 31 33 35 2c 31 33 36 2c 31 33 37 2c 31  34,135,136,137,1
6840: 33 38 2c 31 33 39 2c 31 34 30 2c 31 34 31 2c 31  38,139,140,141,1
6850: 34 32 2c 31 34 33 2c 0a 20 20 20 20 31 34 34 2c  42,143,.    144,
6860: 31 34 35 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c  145,146,147,148,
6870: 31 34 39 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c  149,150,151,152,
6880: 31 35 33 2c 31 35 34 2c 31 35 35 2c 31 35 36 2c  153,154,155,156,
6890: 31 35 37 2c 31 35 38 2c 31 35 39 2c 31 36 30 2c  157,158,159,160,
68a0: 31 36 31 2c 0a 20 20 20 20 31 36 32 2c 31 36 33  161,.    162,163
68b0: 2c 31 36 34 2c 31 36 35 2c 31 36 36 2c 31 36 37  ,164,165,166,167
68c0: 2c 31 36 38 2c 31 36 39 2c 31 37 30 2c 31 37 31  ,168,169,170,171
68d0: 2c 31 37 32 2c 31 37 33 2c 31 37 34 2c 31 37 35  ,172,173,174,175
68e0: 2c 31 37 36 2c 31 37 37 2c 31 37 38 2c 31 37 39  ,176,177,178,179
68f0: 2c 0a 20 20 20 20 31 38 30 2c 31 38 31 2c 31 38  ,.    180,181,18
6900: 32 2c 31 38 33 2c 31 38 34 2c 31 38 35 2c 31 38  2,183,184,185,18
6910: 36 2c 31 38 37 2c 31 38 38 2c 31 38 39 2c 31 39  6,187,188,189,19
6920: 30 2c 31 39 31 2c 31 39 32 2c 31 39 33 2c 31 39  0,191,192,193,19
6930: 34 2c 31 39 35 2c 31 39 36 2c 31 39 37 2c 0a 20  4,195,196,197,. 
6940: 20 20 20 31 39 38 2c 31 39 39 2c 32 30 30 2c 32     198,199,200,2
6950: 30 31 2c 32 30 32 2c 32 30 33 2c 32 30 34 2c 32  01,202,203,204,2
6960: 30 35 2c 32 30 36 2c 32 30 37 2c 32 30 38 2c 32  05,206,207,208,2
6970: 30 39 2c 32 31 30 2c 32 31 31 2c 32 31 32 2c 32  09,210,211,212,2
6980: 31 33 2c 32 31 34 2c 32 31 35 2c 0a 20 20 20 20  13,214,215,.    
6990: 32 31 36 2c 32 31 37 2c 32 31 38 2c 32 31 39 2c  216,217,218,219,
69a0: 32 32 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c  220,221,222,223,
69b0: 32 32 34 2c 32 32 35 2c 32 32 36 2c 32 32 37 2c  224,225,226,227,
69c0: 32 32 38 2c 32 32 39 2c 32 33 30 2c 32 33 31 2c  228,229,230,231,
69d0: 32 33 32 2c 32 33 33 2c 0a 20 20 20 20 32 33 34  232,233,.    234
69e0: 2c 32 33 35 2c 32 33 36 2c 32 33 37 2c 32 33 38  ,235,236,237,238
69f0: 2c 32 33 39 2c 32 34 30 2c 32 34 31 2c 32 34 32  ,239,240,241,242
6a00: 2c 32 34 33 2c 32 34 34 2c 32 34 35 2c 32 34 36  ,243,244,245,246
6a10: 2c 32 34 37 2c 32 34 38 2c 32 34 39 2c 32 35 30  ,247,248,249,250
6a20: 2c 32 35 31 2c 0a 20 20 20 20 32 35 32 2c 32 35  ,251,.    252,25
6a30: 33 2c 32 35 34 2c 32 35 35 0a 23 65 6e 64 69 66  3,254,255.#endif
6a40: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
6a50: 42 43 44 49 43 0a 20 20 20 20 20 20 30 2c 20 20  BCDIC.      0,  
6a60: 31 2c 20 20 32 2c 20 20 33 2c 20 20 34 2c 20 20  1,  2,  3,  4,  
6a70: 35 2c 20 20 36 2c 20 20 37 2c 20 20 38 2c 20 20  5,  6,  7,  8,  
6a80: 39 2c 20 31 30 2c 20 31 31 2c 20 31 32 2c 20 31  9, 10, 11, 12, 1
6a90: 33 2c 20 31 34 2c 20 31 35 2c 20 2f 2a 20 30 78  3, 14, 15, /* 0x
6aa0: 20 2a 2f 0a 20 20 20 20 20 31 36 2c 20 31 37 2c   */.     16, 17,
6ab0: 20 31 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c   18, 19, 20, 21,
6ac0: 20 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c   22, 23, 24, 25,
6ad0: 20 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c   26, 27, 28, 29,
6ae0: 20 33 30 2c 20 33 31 2c 20 2f 2a 20 31 78 20 2a   30, 31, /* 1x *
6af0: 2f 0a 20 20 20 20 20 33 32 2c 20 33 33 2c 20 33  /.     32, 33, 3
6b00: 34 2c 20 33 35 2c 20 33 36 2c 20 33 37 2c 20 33  4, 35, 36, 37, 3
6b10: 38 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c 20 34  8, 39, 40, 41, 4
6b20: 32 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c 20 34  2, 43, 44, 45, 4
6b30: 36 2c 20 34 37 2c 20 2f 2a 20 32 78 20 2a 2f 0a  6, 47, /* 2x */.
6b40: 20 20 20 20 20 34 38 2c 20 34 39 2c 20 35 30 2c       48, 49, 50,
6b50: 20 35 31 2c 20 35 32 2c 20 35 33 2c 20 35 34 2c   51, 52, 53, 54,
6b60: 20 35 35 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c   55, 56, 57, 58,
6b70: 20 35 39 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c   59, 60, 61, 62,
6b80: 20 36 33 2c 20 2f 2a 20 33 78 20 2a 2f 0a 20 20   63, /* 3x */.  
6b90: 20 20 20 36 34 2c 20 36 35 2c 20 36 36 2c 20 36     64, 65, 66, 6
6ba0: 37 2c 20 36 38 2c 20 36 39 2c 20 37 30 2c 20 37  7, 68, 69, 70, 7
6bb0: 31 2c 20 37 32 2c 20 37 33 2c 20 37 34 2c 20 37  1, 72, 73, 74, 7
6bc0: 35 2c 20 37 36 2c 20 37 37 2c 20 37 38 2c 20 37  5, 76, 77, 78, 7
6bd0: 39 2c 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 20  9, /* 4x */.    
6be0: 20 38 30 2c 20 38 31 2c 20 38 32 2c 20 38 33 2c   80, 81, 82, 83,
6bf0: 20 38 34 2c 20 38 35 2c 20 38 36 2c 20 38 37 2c   84, 85, 86, 87,
6c00: 20 38 38 2c 20 38 39 2c 20 39 30 2c 20 39 31 2c   88, 89, 90, 91,
6c10: 20 39 32 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c   92, 93, 94, 95,
6c20: 20 2f 2a 20 35 78 20 2a 2f 0a 20 20 20 20 20 39   /* 5x */.     9
6c30: 36 2c 20 39 37 2c 20 36 36 2c 20 36 37 2c 20 36  6, 97, 66, 67, 6
6c40: 38 2c 20 36 39 2c 20 37 30 2c 20 37 31 2c 20 37  8, 69, 70, 71, 7
6c50: 32 2c 20 37 33 2c 31 30 36 2c 31 30 37 2c 31 30  2, 73,106,107,10
6c60: 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c 20 2f  8,109,110,111, /
6c70: 2a 20 36 78 20 2a 2f 0a 20 20 20 20 31 31 32 2c  * 6x */.    112,
6c80: 20 38 31 2c 20 38 32 2c 20 38 33 2c 20 38 34 2c   81, 82, 83, 84,
6c90: 20 38 35 2c 20 38 36 2c 20 38 37 2c 20 38 38 2c   85, 86, 87, 88,
6ca0: 20 38 39 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c   89,122,123,124,
6cb0: 31 32 35 2c 31 32 36 2c 31 32 37 2c 20 2f 2a 20  125,126,127, /* 
6cc0: 37 78 20 2a 2f 0a 20 20 20 20 31 32 38 2c 31 32  7x */.    128,12
6cd0: 39 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c 31 33  9,130,131,132,13
6ce0: 33 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c 31 33  3,134,135,136,13
6cf0: 37 2c 31 33 38 2c 31 33 39 2c 31 34 30 2c 31 34  7,138,139,140,14
6d00: 31 2c 31 34 32 2c 31 34 33 2c 20 2f 2a 20 38 78  1,142,143, /* 8x
6d10: 20 2a 2f 0a 20 20 20 20 31 34 34 2c 31 34 35 2c   */.    144,145,
6d20: 31 34 36 2c 31 34 37 2c 31 34 38 2c 31 34 39 2c  146,147,148,149,
6d30: 31 35 30 2c 31 35 31 2c 31 35 32 2c 31 35 33 2c  150,151,152,153,
6d40: 31 35 34 2c 31 35 35 2c 31 35 36 2c 31 35 37 2c  154,155,156,157,
6d50: 31 35 36 2c 31 35 39 2c 20 2f 2a 20 39 78 20 2a  156,159, /* 9x *
6d60: 2f 0a 20 20 20 20 31 36 30 2c 31 36 31 2c 31 36  /.    160,161,16
6d70: 32 2c 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36  2,163,164,165,16
6d80: 36 2c 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37  6,167,168,169,17
6d90: 30 2c 31 37 31 2c 31 34 30 2c 31 34 31 2c 31 34  0,171,140,141,14
6da0: 32 2c 31 37 35 2c 20 2f 2a 20 41 78 20 2a 2f 0a  2,175, /* Ax */.
6db0: 20 20 20 20 31 37 36 2c 31 37 37 2c 31 37 38 2c      176,177,178,
6dc0: 31 37 39 2c 31 38 30 2c 31 38 31 2c 31 38 32 2c  179,180,181,182,
6dd0: 31 38 33 2c 31 38 34 2c 31 38 35 2c 31 38 36 2c  183,184,185,186,
6de0: 31 38 37 2c 31 38 38 2c 31 38 39 2c 31 39 30 2c  187,188,189,190,
6df0: 31 39 31 2c 20 2f 2a 20 42 78 20 2a 2f 0a 20 20  191, /* Bx */.  
6e00: 20 20 31 39 32 2c 31 32 39 2c 31 33 30 2c 31 33    192,129,130,13
6e10: 31 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c 31 33  1,132,133,134,13
6e20: 35 2c 31 33 36 2c 31 33 37 2c 32 30 32 2c 32 30  5,136,137,202,20
6e30: 33 2c 32 30 34 2c 32 30 35 2c 32 30 36 2c 32 30  3,204,205,206,20
6e40: 37 2c 20 2f 2a 20 43 78 20 2a 2f 0a 20 20 20 20  7, /* Cx */.    
6e50: 32 30 38 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c  208,145,146,147,
6e60: 31 34 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c  148,149,150,151,
6e70: 31 35 32 2c 31 35 33 2c 32 31 38 2c 32 31 39 2c  152,153,218,219,
6e80: 32 32 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c  220,221,222,223,
6e90: 20 2f 2a 20 44 78 20 2a 2f 0a 20 20 20 20 32 32   /* Dx */.    22
6ea0: 34 2c 32 32 35 2c 31 36 32 2c 31 36 33 2c 31 36  4,225,162,163,16
6eb0: 34 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c 31 36  4,165,166,167,16
6ec0: 38 2c 31 36 39 2c 32 33 32 2c 32 30 33 2c 32 30  8,169,232,203,20
6ed0: 34 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c 20 2f  4,205,206,207, /
6ee0: 2a 20 45 78 20 2a 2f 0a 20 20 20 20 32 33 39 2c  * Ex */.    239,
6ef0: 32 34 30 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c  240,241,242,243,
6f00: 32 34 34 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c  244,245,246,247,
6f10: 32 34 38 2c 32 34 39 2c 32 31 39 2c 32 32 30 2c  248,249,219,220,
6f20: 32 32 31 2c 32 32 32 2c 32 35 35 2c 20 2f 2a 20  221,222,255, /* 
6f30: 46 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  Fx */.#endif.};.
6f40: 23 64 65 66 69 6e 65 20 55 70 70 65 72 54 6f 4c  #define UpperToL
6f50: 6f 77 65 72 20 73 71 6c 69 74 65 33 55 70 70 65  ower sqlite3Uppe
6f60: 72 54 6f 4c 6f 77 65 72 0a 0a 2f 2a 0a 2a 2a 20  rToLower../*.** 
6f70: 53 6f 6d 65 20 73 79 73 74 65 6d 73 20 68 61 76  Some systems hav
6f80: 65 20 73 74 72 69 63 6d 70 28 29 2e 20 20 4f 74  e stricmp().  Ot
6f90: 68 65 72 73 20 68 61 76 65 20 73 74 72 63 61 73  hers have strcas
6fa0: 65 63 6d 70 28 29 2e 20 20 42 65 63 61 75 73 65  ecmp().  Because
6fb0: 0a 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 20  .** there is no 
6fc0: 63 6f 6e 73 69 73 74 65 6e 63 79 2c 20 77 65 20  consistency, we 
6fd0: 77 69 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72 20  will define our 
6fe0: 6f 77 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  own..*/.int sqli
6ff0: 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  te3StrICmp(const
7000: 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f   char *zLeft, co
7010: 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74  nst char *zRight
7020: 29 7b 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e  ){.  register un
7030: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20  signed char *a, 
7040: 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67  *b;.  a = (unsig
7050: 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74  ned char *)zLeft
7060: 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  b = (unsigne
7070: 64 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b  d char *)zRight;
7080: 0a 20 20 77 68 69 6c 65 28 20 2a 61 21 3d 30 20  .  while( *a!=0 
7090: 26 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  && UpperToLower[
70a0: 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65  *a]==UpperToLowe
70b0: 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b  r[*b]){ a++; b++
70c0: 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 55 70 70  ; }.  return Upp
70d0: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20  erToLower[*a] - 
70e0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d  UpperToLower[*b]
70f0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  ;.}.int sqlite3S
7100: 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  trNICmp(const ch
7110: 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74  ar *zLeft, const
7120: 20 63 68 61 72 20 2a 7a 52 69 67 68 74 2c 20 69   char *zRight, i
7130: 6e 74 20 4e 29 7b 0a 20 20 72 65 67 69 73 74 65  nt N){.  registe
7140: 72 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  r unsigned char 
7150: 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20 28 75  *a, *b;.  a = (u
7160: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a  nsigned char *)z
7170: 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28 75 6e 73  Left;.  b = (uns
7180: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 52 69  igned char *)zRi
7190: 67 68 74 3b 0a 20 20 77 68 69 6c 65 28 20 4e 2d  ght;.  while( N-
71a0: 2d 20 3e 20 30 20 26 26 20 2a 61 21 3d 30 20 26  - > 0 && *a!=0 &
71b0: 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  & UpperToLower[*
71c0: 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72  a]==UpperToLower
71d0: 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b  [*b]){ a++; b++;
71e0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3c 30 20   }.  return N<0 
71f0: 3f 20 30 20 3a 20 55 70 70 65 72 54 6f 4c 6f 77  ? 0 : UpperToLow
7200: 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54 6f  er[*a] - UpperTo
7210: 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a  Lower[*b];.}../*
7220: 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  .** Return TRUE 
7230: 69 66 20 7a 20 69 73 20 61 20 70 75 72 65 20 6e  if z is a pure n
7240: 75 6d 65 72 69 63 20 73 74 72 69 6e 67 2e 20 20  umeric string.  
7250: 52 65 74 75 72 6e 20 46 41 4c 53 45 20 69 66 20  Return FALSE if 
7260: 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 63 6f  the.** string co
7270: 6e 74 61 69 6e 73 20 61 6e 79 20 63 68 61 72 61  ntains any chara
7280: 63 74 65 72 20 77 68 69 63 68 20 69 73 20 6e 6f  cter which is no
7290: 74 20 70 61 72 74 20 6f 66 20 61 20 6e 75 6d 62  t part of a numb
72a0: 65 72 2e 20 49 66 0a 2a 2a 20 74 68 65 20 73 74  er. If.** the st
72b0: 72 69 6e 67 20 69 73 20 6e 75 6d 65 72 69 63 20  ring is numeric 
72c0: 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
72d0: 20 27 2e 27 20 63 68 61 72 61 63 74 65 72 2c 20   '.' character, 
72e0: 73 65 74 20 2a 72 65 61 6c 6e 75 6d 0a 2a 2a 20  set *realnum.** 
72f0: 74 6f 20 54 52 55 45 20 28 6f 74 68 65 72 77 69  to TRUE (otherwi
7300: 73 65 20 46 41 4c 53 45 29 2e 0a 2a 2a 0a 2a 2a  se FALSE)..**.**
7310: 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   An empty string
7320: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 6e   is considered n
7330: 6f 6e 2d 6e 75 6d 65 72 69 63 2e 0a 2a 2f 0a 69  on-numeric..*/.i
7340: 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62  nt sqlite3IsNumb
7350: 65 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  er(const char *z
7360: 2c 20 69 6e 74 20 2a 72 65 61 6c 6e 75 6d 2c 20  , int *realnum, 
7370: 75 38 20 65 6e 63 29 7b 0a 20 20 69 6e 74 20 69  u8 enc){.  int i
7380: 6e 63 72 20 3d 20 28 65 6e 63 3d 3d 53 51 4c 49  ncr = (enc==SQLI
7390: 54 45 5f 55 54 46 38 3f 31 3a 32 29 3b 0a 20 20  TE_UTF8?1:2);.  
73a0: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
73b0: 55 54 46 31 36 42 45 20 29 20 7a 2b 2b 3b 0a 20  UTF16BE ) z++;. 
73c0: 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20   if( *z=='-' || 
73d0: 2a 7a 3d 3d 27 2b 27 20 29 20 7a 20 2b 3d 20 69  *z=='+' ) z += i
73e0: 6e 63 72 3b 0a 20 20 69 66 28 20 21 69 73 64 69  ncr;.  if( !isdi
73f0: 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a  git(*(u8*)z) ){.
7400: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
7410: 7d 0a 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20  }.  z += incr;. 
7420: 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a   if( realnum ) *
7430: 72 65 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77  realnum = 0;.  w
7440: 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28  hile( isdigit(*(
7450: 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20 69  u8*)z) ){ z += i
7460: 6e 63 72 3b 20 7d 0a 20 20 69 66 28 20 2a 7a 3d  ncr; }.  if( *z=
7470: 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d  ='.' ){.    z +=
7480: 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21   incr;.    if( !
7490: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
74a0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
74b0: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
74c0: 2a 28 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d  *(u8*)z) ){ z +=
74d0: 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28   incr; }.    if(
74e0: 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c   realnum ) *real
74f0: 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69  num = 1;.  }.  i
7500: 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a  f( *z=='e' || *z
7510: 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20 7a 20 2b  =='E' ){.    z +
7520: 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20  = incr;.    if( 
7530: 2a 7a 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='+' || *z=='
7540: 2d 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a  -' ) z += incr;.
7550: 20 20 20 20 69 66 28 20 21 69 73 64 69 67 69 74      if( !isdigit
7560: 28 2a 28 75 38 2a 29 7a 29 20 29 20 72 65 74 75  (*(u8*)z) ) retu
7570: 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28  rn 0;.    while(
7580: 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a   isdigit(*(u8*)z
7590: 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20  ) ){ z += incr; 
75a0: 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75  }.    if( realnu
75b0: 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31  m ) *realnum = 1
75c0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a  ;.  }.  return *
75d0: 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  z==0;.}../*.** T
75e0: 68 65 20 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73  he string z[] is
75f0: 20 61 6e 20 61 73 63 69 69 20 72 65 70 72 65 73   an ascii repres
7600: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 72 65  entation of a re
7610: 61 6c 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f  al number..** Co
7620: 6e 76 65 72 74 20 74 68 69 73 20 73 74 72 69 6e  nvert this strin
7630: 67 20 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a  g to a double..*
7640: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
7650: 65 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 7a  e assumes that z
7660: 5b 5d 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76  [] really is a v
7670: 61 6c 69 64 20 6e 75 6d 62 65 72 2e 20 20 49 66  alid number.  If
7680: 20 69 74 0a 2a 2a 20 69 73 20 6e 6f 74 2c 20 74   it.** is not, t
7690: 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
76a0: 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
76b0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73  is routine is us
76c0: 65 64 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  ed instead of th
76d0: 65 20 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29  e library atof()
76e0: 20 66 75 6e 63 74 69 6f 6e 20 62 65 63 61 75 73   function becaus
76f0: 65 0a 2a 2a 20 74 68 65 20 6c 69 62 72 61 72 79  e.** the library
7700: 20 61 74 6f 66 28 29 20 6d 69 67 68 74 20 77 61   atof() might wa
7710: 6e 74 20 74 6f 20 75 73 65 20 22 2c 22 20 61 73  nt to use "," as
7720: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
7730: 6e 74 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  nt instead.** of
7740: 20 22 2e 22 20 64 65 70 65 6e 64 69 6e 67 20 6f   "." depending o
7750: 6e 20 68 6f 77 20 6c 6f 63 61 6c 65 20 69 73 20  n how locale is 
7760: 73 65 74 2e 20 20 42 75 74 20 74 68 61 74 20 77  set.  But that w
7770: 6f 75 6c 64 20 63 61 75 73 65 20 70 72 6f 62 6c  ould cause probl
7780: 65 6d 73 0a 2a 2a 20 66 6f 72 20 53 51 4c 2e 20  ems.** for SQL. 
7790: 20 53 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65   So this routine
77a0: 20 61 6c 77 61 79 73 20 75 73 65 73 20 22 2e 22   always uses "."
77b0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
77c0: 6f 63 61 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ocale..*/.int sq
77d0: 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
77e0: 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 20  char *z, double 
77f0: 2a 70 52 65 73 75 6c 74 29 7b 0a 23 69 66 6e 64  *pResult){.#ifnd
7800: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
7810: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
7820: 69 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20  int sign = 1;.  
7830: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 65 67  const char *zBeg
7840: 69 6e 20 3d 20 7a 3b 0a 20 20 4c 4f 4e 47 44 4f  in = z;.  LONGDO
7850: 55 42 4c 45 5f 54 59 50 45 20 76 31 20 3d 20 30  UBLE_TYPE v1 = 0
7860: 2e 30 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 73  .0;.  while( iss
7870: 70 61 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a  pace(*z) ) z++;.
7880: 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b    if( *z=='-' ){
7890: 0a 20 20 20 20 73 69 67 6e 20 3d 20 2d 31 3b 0a  .    sign = -1;.
78a0: 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 65 6c 73 65      z++;.  }else
78b0: 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a   if( *z=='+' ){.
78c0: 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 77      z++;.  }.  w
78d0: 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28  hile( isdigit(*(
78e0: 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 76 31  u8*)z) ){.    v1
78f0: 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a 7a   = v1*10.0 + (*z
7900: 20 2d 20 27 30 27 29 3b 0a 20 20 20 20 7a 2b 2b   - '0');.    z++
7910: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d  ;.  }.  if( *z==
7920: 27 2e 27 20 29 7b 0a 20 20 20 20 4c 4f 4e 47 44  '.' ){.    LONGD
7930: 4f 55 42 4c 45 5f 54 59 50 45 20 64 69 76 69 73  OUBLE_TYPE divis
7940: 6f 72 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b  or = 1.0;.    z+
7950: 2b 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73  +;.    while( is
7960: 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29  digit(*(u8*)z) )
7970: 7b 0a 20 20 20 20 20 20 76 31 20 3d 20 76 31 2a  {.      v1 = v1*
7980: 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27  10.0 + (*z - '0'
7990: 29 3b 0a 20 20 20 20 20 20 64 69 76 69 73 6f 72  );.      divisor
79a0: 20 2a 3d 20 31 30 2e 30 3b 0a 20 20 20 20 20 20   *= 10.0;.      
79b0: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76  z++;.    }.    v
79c0: 31 20 2f 3d 20 64 69 76 69 73 6f 72 3b 0a 20 20  1 /= divisor;.  
79d0: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27 20  }.  if( *z=='e' 
79e0: 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20 20  || *z=='E' ){.  
79f0: 20 20 69 6e 74 20 65 73 69 67 6e 20 3d 20 31 3b    int esign = 1;
7a00: 0a 20 20 20 20 69 6e 74 20 65 76 61 6c 20 3d 20  .    int eval = 
7a10: 30 3b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c  0;.    LONGDOUBL
7a20: 45 5f 54 59 50 45 20 73 63 61 6c 65 20 3d 20 31  E_TYPE scale = 1
7a30: 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  .0;.    z++;.   
7a40: 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a   if( *z=='-' ){.
7a50: 20 20 20 20 20 20 65 73 69 67 6e 20 3d 20 2d 31        esign = -1
7a60: 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
7a70: 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27   }else if( *z=='
7a80: 2b 27 20 29 7b 0a 20 20 20 20 20 20 7a 2b 2b 3b  +' ){.      z++;
7a90: 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
7aa0: 28 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29  ( isdigit(*(u8*)
7ab0: 7a 29 20 29 7b 0a 20 20 20 20 20 20 65 76 61 6c  z) ){.      eval
7ac0: 20 3d 20 65 76 61 6c 2a 31 30 20 2b 20 2a 7a 20   = eval*10 + *z 
7ad0: 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a 2b 2b  - '0';.      z++
7ae0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
7af0: 65 28 20 65 76 61 6c 3e 3d 36 34 20 29 7b 20 73  e( eval>=64 ){ s
7b00: 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 36 34 3b  cale *= 1.0e+64;
7b10: 20 65 76 61 6c 20 2d 3d 20 36 34 3b 20 7d 0a 20   eval -= 64; }. 
7b20: 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d     while( eval>=
7b30: 31 36 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  16 ){ scale *= 1
7b40: 2e 30 65 2b 31 36 3b 20 65 76 61 6c 20 2d 3d 20  .0e+16; eval -= 
7b50: 31 36 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28  16; }.    while(
7b60: 20 65 76 61 6c 3e 3d 34 20 29 7b 20 73 63 61 6c   eval>=4 ){ scal
7b70: 65 20 2a 3d 20 31 2e 30 65 2b 34 3b 20 65 76 61  e *= 1.0e+4; eva
7b80: 6c 20 2d 3d 20 34 3b 20 7d 0a 20 20 20 20 77 68  l -= 4; }.    wh
7b90: 69 6c 65 28 20 65 76 61 6c 3e 3d 31 20 29 7b 20  ile( eval>=1 ){ 
7ba0: 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 3b  scale *= 1.0e+1;
7bb0: 20 65 76 61 6c 20 2d 3d 20 31 3b 20 7d 0a 20 20   eval -= 1; }.  
7bc0: 20 20 69 66 28 20 65 73 69 67 6e 3c 30 20 29 7b    if( esign<0 ){
7bd0: 0a 20 20 20 20 20 20 76 31 20 2f 3d 20 73 63 61  .      v1 /= sca
7be0: 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  le;.    }else{. 
7bf0: 20 20 20 20 20 76 31 20 2a 3d 20 73 63 61 6c 65       v1 *= scale
7c00: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 70  ;.    }.  }.  *p
7c10: 52 65 73 75 6c 74 20 3d 20 73 69 67 6e 3c 30 20  Result = sign<0 
7c20: 3f 20 2d 76 31 20 3a 20 76 31 3b 0a 20 20 72 65  ? -v1 : v1;.  re
7c30: 74 75 72 6e 20 7a 20 2d 20 7a 42 65 67 69 6e 3b  turn z - zBegin;
7c40: 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72 6e 20  .#else.  return 
7c50: 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a 2c  sqlite3atoi64(z,
7c60: 20 70 52 65 73 75 6c 74 29 3b 0a 23 65 6e 64 69   pResult);.#endi
7c70: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
7c80: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20  _FLOATING_POINT 
7c90: 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  */.}../*.** Retu
7ca0: 72 6e 20 54 52 55 45 20 69 66 20 7a 4e 75 6d 20  rn TRUE if zNum 
7cb0: 69 73 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  is a 64-bit sign
7cc0: 65 64 20 69 6e 74 65 67 65 72 20 61 6e 64 20 77  ed integer and w
7cd0: 72 69 74 65 0a 2a 2a 20 74 68 65 20 76 61 6c 75  rite.** the valu
7ce0: 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
7cf0: 20 69 6e 74 6f 20 2a 70 4e 75 6d 2e 20 20 49 66   into *pNum.  If
7d00: 20 7a 4e 75 6d 20 69 73 20 6e 6f 74 20 61 6e 20   zNum is not an 
7d10: 69 6e 74 65 67 65 72 0a 2a 2a 20 6f 72 20 69 73  integer.** or is
7d20: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
7d30: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f   is too large to
7d40: 20 62 65 20 65 78 70 72 65 73 73 65 64 20 77 69   be expressed wi
7d50: 74 68 20 36 34 20 62 69 74 73 2c 0a 2a 2a 20 74  th 64 bits,.** t
7d60: 68 65 6e 20 72 65 74 75 72 6e 20 66 61 6c 73 65  hen return false
7d70: 2e 20 20 49 66 20 6e 3e 30 20 61 6e 64 20 74 68  .  If n>0 and th
7d80: 65 20 69 6e 74 65 67 65 72 20 69 73 20 73 74 72  e integer is str
7d90: 69 6e 67 20 69 73 20 6e 6f 74 0a 2a 2a 20 65 78  ing is not.** ex
7da0: 61 63 74 6c 79 20 6e 20 62 79 74 65 73 20 6c 6f  actly n bytes lo
7db0: 6e 67 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65  ng, return false
7dc0: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ..**.** When thi
7dd0: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 6f 72  s routine was or
7de0: 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74 65 6e  iginally written
7df0: 20 69 74 20 64 65 61 6c 74 20 77 69 74 68 20 6f   it dealt with o
7e00: 6e 6c 79 0a 2a 2a 20 33 32 2d 62 69 74 20 6e 75  nly.** 32-bit nu
7e10: 6d 62 65 72 73 2e 20 20 41 74 20 74 68 61 74 20  mbers.  At that 
7e20: 74 69 6d 65 2c 20 69 74 20 77 61 73 20 6d 75 63  time, it was muc
7e30: 68 20 66 61 73 74 65 72 20 74 68 61 6e 20 74 68  h faster than th
7e40: 65 0a 2a 2a 20 61 74 6f 69 28 29 20 6c 69 62 72  e.** atoi() libr
7e50: 61 72 79 20 72 6f 75 74 69 6e 65 20 69 6e 20 52  ary routine in R
7e60: 65 64 48 61 74 20 37 2e 32 2e 0a 2a 2f 0a 69 6e  edHat 7.2..*/.in
7e70: 74 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28  t sqlite3atoi64(
7e80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d  const char *zNum
7e90: 2c 20 69 36 34 20 2a 70 4e 75 6d 29 7b 0a 20 20  , i64 *pNum){.  
7ea0: 69 36 34 20 76 20 3d 20 30 3b 0a 20 20 69 6e 74  i64 v = 0;.  int
7eb0: 20 6e 65 67 3b 0a 20 20 69 6e 74 20 69 2c 20 63   neg;.  int i, c
7ec0: 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 73 70 61  ;.  while( isspa
7ed0: 63 65 28 2a 7a 4e 75 6d 29 20 29 20 7a 4e 75 6d  ce(*zNum) ) zNum
7ee0: 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d  ++;.  if( *zNum=
7ef0: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20  ='-' ){.    neg 
7f00: 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b  = 1;.    zNum++;
7f10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e  .  }else if( *zN
7f20: 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 6e  um=='+' ){.    n
7f30: 65 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75 6d  eg = 0;.    zNum
7f40: 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ++;.  }else{.   
7f50: 20 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20   neg = 0;.  }.  
7f60: 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d  for(i=0; (c=zNum
7f70: 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d  [i])>='0' && c<=
7f80: 27 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76  '9'; i++){.    v
7f90: 20 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20 27 30   = v*10 + c - '0
7fa0: 27 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20 3d  ';.  }.  *pNum =
7fb0: 20 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a 20   neg ? -v : v;. 
7fc0: 20 72 65 74 75 72 6e 20 63 3d 3d 30 20 26 26 20   return c==0 && 
7fd0: 69 3e 30 20 26 26 20 0a 20 20 20 20 20 20 28 69  i>0 && .      (i
7fe0: 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26  <19 || (i==19 &&
7ff0: 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32   memcmp(zNum,"92
8000: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
8010: 37 22 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d 0a 0a  7",19)<=0));.}..
8020: 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  /*.** The string
8030: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
8040: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68   an integer.  Th
8050: 65 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d  ere might be som
8060: 65 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72  e other.** infor
8070: 6d 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67  mation following
8080: 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f   the integer too
8090: 2c 20 62 75 74 20 74 68 61 74 20 70 61 72 74 20  , but that part 
80a0: 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49  is ignored..** I
80b0: 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 68  f the integer th
80c0: 61 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  at the prefix of
80d0: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
80e0: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a   will fit in a.*
80f0: 2a 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20  * 32-bit signed 
8100: 69 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20  integer, return 
8110: 54 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65  TRUE.  Otherwise
8120: 20 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a   return FALSE..*
8130: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
8140: 65 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20  e returns FALSE 
8150: 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d  for the string -
8160: 32 31 34 37 34 38 33 36 34 38 20 65 76 65 6e 20  2147483648 even 
8170: 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d  that.** that num
8180: 62 65 72 20 77 69 6c 6c 20 69 6e 20 66 61 63 74  ber will in fact
8190: 20 66 69 74 20 69 6e 20 61 20 33 32 2d 62 69 74   fit in a 32-bit
81a0: 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 20 70   integer.  But p
81b0: 6f 73 69 74 69 76 65 0a 2a 2a 20 32 31 34 37 34  ositive.** 21474
81c0: 38 33 36 34 38 20 77 69 6c 6c 20 6e 6f 74 20 66  83648 will not f
81d0: 69 74 20 69 6e 20 33 32 20 62 69 74 73 2e 20 20  it in 32 bits.  
81e0: 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61 66 65  So it seems safe
81f0: 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20 66  r to return.** f
8200: 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alse..*/.static 
8210: 69 6e 74 20 73 71 6c 69 74 65 33 46 69 74 73 49  int sqlite3FitsI
8220: 6e 33 32 42 69 74 73 28 63 6f 6e 73 74 20 63 68  n32Bits(const ch
8230: 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74  ar *zNum){.  int
8240: 20 69 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e   i, c;.  if( *zN
8250: 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d  um=='-' || *zNum
8260: 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a  =='+' ) zNum++;.
8270: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e    for(i=0; (c=zN
8280: 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63  um[i])>='0' && c
8290: 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20  <='9'; i++){}.  
82a0: 72 65 74 75 72 6e 20 69 3c 31 30 20 7c 7c 20 28  return i<10 || (
82b0: 69 3d 3d 31 30 20 26 26 20 6d 65 6d 63 6d 70 28  i==10 && memcmp(
82c0: 7a 4e 75 6d 2c 22 32 31 34 37 34 38 33 36 34 37  zNum,"2147483647
82d0: 22 2c 31 30 29 3c 3d 30 29 3b 0a 7d 0a 0a 2f 2a  ",10)<=0);.}../*
82e0: 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70 72  .** If zNum repr
82f0: 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65  esents an intege
8300: 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20  r that will fit 
8310: 69 6e 20 33 32 2d 62 69 74 73 2c 20 74 68 65 6e  in 32-bits, then
8320: 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20   set.** *pValue 
8330: 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  to that integer 
8340: 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65 2e  and return true.
8350: 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75    Otherwise retu
8360: 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74  rn false..*/.int
8370: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
8380: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
8390: 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75 65 29 7b  m, int *pValue){
83a0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 46 69  .  if( sqlite3Fi
83b0: 74 73 49 6e 33 32 42 69 74 73 28 7a 4e 75 6d 29  tsIn32Bits(zNum)
83c0: 20 29 7b 0a 20 20 20 20 2a 70 56 61 6c 75 65 20   ){.    *pValue 
83d0: 3d 20 61 74 6f 69 28 7a 4e 75 6d 29 3b 0a 20 20  = atoi(zNum);.  
83e0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
83f0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
8400: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
8410: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
8420: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65  an integer.  The
8430: 72 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d 65  re might be some
8440: 20 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d   other.** inform
8450: 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20  ation following 
8460: 74 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f 2c  the integer too,
8470: 20 62 75 74 20 74 68 61 74 20 70 61 72 74 20 69   but that part i
8480: 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66  s ignored..** If
8490: 20 74 68 65 20 69 6e 74 65 67 65 72 20 74 68 61   the integer tha
84a0: 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
84b0: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
84c0: 77 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a 2a  will fit in a.**
84d0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
84e0: 6e 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20 54  nteger, return T
84f0: 52 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65 20  RUE.  Otherwise 
8500: 72 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a  return FALSE..**
8510: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
8520: 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20 66   returns FALSE f
8530: 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d 39  or the string -9
8540: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
8550: 30 38 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a 20  08 even that.** 
8560: 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69 6c 6c  that number will
8570: 2c 20 69 6e 20 74 68 65 6f 72 79 20 66 69 74 20  , in theory fit 
8580: 69 6e 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  in a 64-bit inte
8590: 67 65 72 2e 20 20 50 6f 73 69 74 69 76 65 0a 2a  ger.  Positive.*
85a0: 2a 20 39 32 32 33 33 37 33 30 33 36 38 35 34 37  * 92233730368547
85b0: 37 35 38 30 38 20 77 69 6c 6c 20 6e 6f 74 20 66  75808 will not f
85c0: 69 74 20 69 6e 20 36 34 20 62 69 74 73 2e 20 20  it in 64 bits.  
85d0: 53 6f 20 69 74 20 73 65 65 6d 73 20 73 61 66 65  So it seems safe
85e0: 72 20 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20 66  r to return.** f
85f0: 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  alse..*/.int sql
8600: 69 74 65 33 46 69 74 73 49 6e 36 34 42 69 74 73  ite3FitsIn64Bits
8610: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
8620: 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a  m){.  int i, c;.
8630: 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27    if( *zNum=='-'
8640: 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29   || *zNum=='+' )
8650: 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69   zNum++;.  for(i
8660: 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e  =0; (c=zNum[i])>
8670: 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20  ='0' && c<='9'; 
8680: 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72 6e 20  i++){}.  return 
8690: 69 3c 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26  i<19 || (i==19 &
86a0: 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39  & memcmp(zNum,"9
86b0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
86c0: 30 37 22 2c 31 39 29 3c 3d 30 29 3b 0a 7d 0a 0a  07",19)<=0);.}..
86d0: 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  ./*.** Change th
86e0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
86f0: 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  rom SQLITE_MAGIC
8700: 5f 4f 50 45 4e 20 74 6f 20 53 51 4c 49 54 45 5f  _OPEN to SQLITE_
8710: 4d 41 47 49 43 5f 42 55 53 59 2e 0a 2a 2a 20 52  MAGIC_BUSY..** R
8720: 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28  eturn an error (
8730: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
8740: 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53   magic was not S
8750: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
8760: 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f  .** when this ro
8770: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e  utine is called.
8780: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
8790: 69 6e 65 20 69 73 20 61 20 61 74 74 65 6d 70 74  ine is a attempt
87a0: 20 74 6f 20 64 65 74 65 63 74 20 69 66 20 74 77   to detect if tw
87b0: 6f 20 74 68 72 65 61 64 73 20 75 73 65 20 74 68  o threads use th
87c0: 65 0a 2a 2a 20 73 61 6d 65 20 73 71 6c 69 74 65  e.** same sqlite
87d0: 2a 20 70 6f 69 6e 74 65 72 20 61 74 20 74 68 65  * pointer at the
87e0: 20 73 61 6d 65 20 74 69 6d 65 2e 20 20 54 68 65   same time.  The
87f0: 72 65 20 69 73 20 61 20 72 61 63 65 20 0a 2a 2a  re is a race .**
8800: 20 63 6f 6e 64 69 74 69 6f 6e 20 73 6f 20 69 74   condition so it
8810: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
8820: 74 20 74 68 65 20 65 72 72 6f 72 20 69 73 20 6e  t the error is n
8830: 6f 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2a 20  ot detected..** 
8840: 42 75 74 20 75 73 75 61 6c 6c 79 20 74 68 65 20  But usually the 
8850: 70 72 6f 62 6c 65 6d 20 77 69 6c 6c 20 62 65 20  problem will be 
8860: 73 65 65 6e 2e 20 20 54 68 65 20 72 65 73 75 6c  seen.  The resul
8870: 74 20 77 69 6c 6c 20 62 65 20 61 6e 0a 2a 2a 20  t will be an.** 
8880: 65 72 72 6f 72 20 77 68 69 63 68 20 63 61 6e 20  error which can 
8890: 62 65 20 75 73 65 64 20 74 6f 20 64 65 62 75 67  be used to debug
88a0: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
88b0: 20 74 68 61 74 20 69 73 0a 2a 2a 20 75 73 69 6e   that is.** usin
88c0: 67 20 53 51 4c 69 74 65 20 69 6e 63 6f 72 72 65  g SQLite incorre
88d0: 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b  ctly..**.** Tick
88e0: 65 74 20 23 32 30 32 3a 20 20 49 66 20 64 62 2d  et #202:  If db-
88f0: 3e 6d 61 67 69 63 20 69 73 20 6e 6f 74 20 61 20  >magic is not a 
8900: 76 61 6c 69 64 20 6f 70 65 6e 20 76 61 6c 75 65  valid open value
8910: 2c 20 74 61 6b 65 20 63 61 72 65 20 6e 6f 74 0a  , take care not.
8920: 2a 2a 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ** to modify the
8930: 20 64 62 20 73 74 72 75 63 74 75 72 65 20 61 74   db structure at
8940: 20 61 6c 6c 2e 20 20 49 74 20 63 6f 75 6c 64 20   all.  It could 
8950: 62 65 20 74 68 61 74 20 64 62 20 69 73 20 61 20  be that db is a 
8960: 73 74 61 6c 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  stale.** pointer
8970: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
8980: 73 2c 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74  s, it could be t
8990: 68 61 74 20 74 68 65 72 65 20 68 61 73 20 62 65  hat there has be
89a0: 65 6e 20 61 20 70 72 69 6f 72 0a 2a 2a 20 63 61  en a prior.** ca
89b0: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c  ll to sqlite3_cl
89c0: 6f 73 65 28 64 62 29 20 61 6e 64 20 64 62 20 68  ose(db) and db h
89d0: 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61  as been dealloca
89e0: 74 65 64 2e 20 20 41 6e 64 20 77 65 20 64 6f 0a  ted.  And we do.
89f0: 2a 2a 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20 77  ** not want to w
8a00: 72 69 74 65 20 69 6e 74 6f 20 64 65 61 6c 6c 6f  rite into deallo
8a10: 63 61 74 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f  cated memory..*/
8a20: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
8a30: 74 79 4f 6e 28 73 71 6c 69 74 65 33 20 2a 64 62  tyOn(sqlite3 *db
8a40: 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67  ){.  if( db->mag
8a50: 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic==SQLITE_MAGIC
8a60: 5f 4f 50 45 4e 20 29 7b 0a 20 20 20 20 64 62 2d  _OPEN ){.    db-
8a70: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
8a80: 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 20 20  MAGIC_BUSY;.    
8a90: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73  return 0;.  }els
8aa0: 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d  e if( db->magic=
8ab0: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
8ac0: 53 59 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  SY ){.    db->ma
8ad0: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
8ae0: 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62  IC_ERROR;.    db
8af0: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
8b00: 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65  ed = 1;.  }.  re
8b10: 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 1;.}../*.**
8b20: 20 43 68 61 6e 67 65 20 74 68 65 20 6d 61 67 69   Change the magi
8b30: 63 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41  c from SQLITE_MA
8b40: 47 49 43 5f 42 55 53 59 20 74 6f 20 53 51 4c 49  GIC_BUSY to SQLI
8b50: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a  TE_MAGIC_OPEN..*
8b60: 2a 20 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * Return an erro
8b70: 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  r (non-zero) if 
8b80: 74 68 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f  the magic was no
8b90: 74 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  t SQLITE_MAGIC_B
8ba0: 55 53 59 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73  USY.** when this
8bb0: 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c   routine is call
8bc0: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
8bd0: 65 33 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69  e3SafetyOff(sqli
8be0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20  te3 *db){.  if( 
8bf0: 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54  db->magic==SQLIT
8c00: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a  E_MAGIC_BUSY ){.
8c10: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
8c20: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
8c30: 4e 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  N;.    return 0;
8c40: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d  .  }else if( db-
8c50: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
8c60: 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20  AGIC_OPEN ){.   
8c70: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
8c80: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b  ITE_MAGIC_ERROR;
8c90: 0a 20 20 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e  .    db->u1.isIn
8ca0: 74 65 72 72 75 70 74 65 64 20 3d 20 31 3b 0a 20  terrupted = 1;. 
8cb0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
8cc0: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
8cd0: 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 68 61   make sure we ha
8ce0: 76 65 20 61 20 76 61 6c 69 64 20 64 62 20 70 6f  ve a valid db po
8cf0: 69 6e 74 65 72 2e 20 20 54 68 69 73 20 74 65 73  inter.  This tes
8d00: 74 20 69 73 20 6e 6f 74 0a 2a 2a 20 66 6f 6f 6c  t is not.** fool
8d10: 70 72 6f 6f 66 20 62 75 74 20 69 74 20 64 6f 65  proof but it doe
8d20: 73 20 70 72 6f 76 69 64 65 20 73 6f 6d 65 20 6d  s provide some m
8d30: 65 61 73 75 72 65 20 6f 66 20 70 72 6f 74 65 63  easure of protec
8d40: 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 2a 2a 20  tion against.** 
8d50: 6d 69 73 75 73 65 20 6f 66 20 74 68 65 20 69 6e  misuse of the in
8d60: 74 65 72 66 61 63 65 20 73 75 63 68 20 61 73 20  terface such as 
8d70: 70 61 73 73 69 6e 67 20 69 6e 20 64 62 20 70 6f  passing in db po
8d80: 69 6e 74 65 72 73 20 74 68 61 74 20 61 72 65 0a  inters that are.
8d90: 2a 2a 20 4e 55 4c 4c 20 6f 72 20 77 68 69 63 68  ** NULL or which
8da0: 20 68 61 76 65 20 62 65 65 6e 20 70 72 65 76 69   have been previ
8db0: 6f 75 73 6c 79 20 63 6c 6f 73 65 64 2e 20 20 49  ously closed.  I
8dc0: 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  f this routine r
8dd0: 65 74 75 72 6e 73 0a 2a 2a 20 54 52 55 45 20 69  eturns.** TRUE i
8de0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
8df0: 20 64 62 20 70 6f 69 6e 74 65 72 20 69 73 20 69   db pointer is i
8e00: 6e 76 61 6c 69 64 20 61 6e 64 20 73 68 6f 75 6c  nvalid and shoul
8e10: 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 64 65 72 65  d not be.** dere
8e20: 66 65 72 65 6e 63 65 64 20 66 6f 72 20 61 6e 79  ferenced for any
8e30: 20 72 65 61 73 6f 6e 2e 20 20 54 68 65 20 63 61   reason.  The ca
8e40: 6c 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  lling function s
8e50: 68 6f 75 6c 64 20 69 6e 76 6f 6b 65 0a 2a 2a 20  hould invoke.** 
8e60: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 69 6d  SQLITE_MISUSE im
8e70: 6d 65 64 69 61 74 65 6c 79 2e 0a 2a 2f 0a 69 6e  mediately..*/.in
8e80: 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
8e90: 68 65 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  heck(sqlite3 *db
8ea0: 29 7b 0a 20 20 69 6e 74 20 6d 61 67 69 63 3b 0a  ){.  int magic;.
8eb0: 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 72 65    if( db==0 ) re
8ec0: 74 75 72 6e 20 31 3b 0a 20 20 6d 61 67 69 63 20  turn 1;.  magic 
8ed0: 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a 20 20 69  = db->magic;.  i
8ee0: 66 28 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45  f( magic!=SQLITE
8ef0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 26 26  _MAGIC_CLOSED &&
8f00: 0a 20 20 20 20 20 20 20 20 20 6d 61 67 69 63 21  .         magic!
8f10: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50  =SQLITE_MAGIC_OP
8f20: 45 4e 20 26 26 0a 20 20 20 20 20 20 20 20 20 6d  EN &&.         m
8f30: 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47  agic!=SQLITE_MAG
8f40: 49 43 5f 42 55 53 59 20 29 20 72 65 74 75 72 6e  IC_BUSY ) return
8f50: 20 31 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a   1;.  return 0;.
8f60: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 61 72  }../*.** The var
8f70: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
8f80: 65 67 65 72 20 65 6e 63 6f 64 69 6e 67 20 69 73  eger encoding is
8f90: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a   as follows:.**.
8fa0: 2a 2a 20 4b 45 59 3a 0a 2a 2a 20 20 20 20 20 20  ** KEY:.**      
8fb0: 20 20 20 41 20 3d 20 30 78 78 78 78 78 78 78 20     A = 0xxxxxxx 
8fc0: 20 20 20 37 20 62 69 74 73 20 6f 66 20 64 61 74     7 bits of dat
8fd0: 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62  a and one flag b
8fe0: 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 42 20  it.**         B 
8ff0: 3d 20 31 78 78 78 78 78 78 78 20 20 20 20 37 20  = 1xxxxxxx    7 
9000: 62 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64  bits of data and
9010: 20 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a   one flag bit.**
9020: 20 20 20 20 20 20 20 20 20 43 20 3d 20 78 78 78           C = xxx
9030: 78 78 78 78 78 20 20 20 20 38 20 62 69 74 73 20  xxxxx    8 bits 
9040: 6f 66 20 64 61 74 61 0a 2a 2a 0a 2a 2a 20 20 37  of data.**.**  7
9050: 20 62 69 74 73 20 2d 20 41 0a 2a 2a 20 31 34 20   bits - A.** 14 
9060: 62 69 74 73 20 2d 20 42 41 0a 2a 2a 20 32 31 20  bits - BA.** 21 
9070: 62 69 74 73 20 2d 20 42 42 41 0a 2a 2a 20 32 38  bits - BBA.** 28
9080: 20 62 69 74 73 20 2d 20 42 42 42 41 0a 2a 2a 20   bits - BBBA.** 
9090: 33 35 20 62 69 74 73 20 2d 20 42 42 42 42 41 0a  35 bits - BBBBA.
90a0: 2a 2a 20 34 32 20 62 69 74 73 20 2d 20 42 42 42  ** 42 bits - BBB
90b0: 42 42 41 0a 2a 2a 20 34 39 20 62 69 74 73 20 2d  BBA.** 49 bits -
90c0: 20 42 42 42 42 42 42 41 0a 2a 2a 20 35 36 20 62   BBBBBBA.** 56 b
90d0: 69 74 73 20 2d 20 42 42 42 42 42 42 42 41 0a 2a  its - BBBBBBBA.*
90e0: 2a 20 36 34 20 62 69 74 73 20 2d 20 42 42 42 42  * 64 bits - BBBB
90f0: 42 42 42 42 43 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  BBBBC.*/../*.** 
9100: 57 72 69 74 65 20 61 20 36 34 2d 62 69 74 20 76  Write a 64-bit v
9110: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
9120: 6e 74 65 67 65 72 20 74 6f 20 6d 65 6d 6f 72 79  nteger to memory
9130: 20 73 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30   starting at p[0
9140: 5d 2e 0a 2a 2a 20 54 68 65 20 6c 65 6e 67 74 68  ]..** The length
9150: 20 6f 66 20 64 61 74 61 20 77 72 69 74 65 20 77   of data write w
9160: 69 6c 6c 20 62 65 20 62 65 74 77 65 65 6e 20 31  ill be between 1
9170: 20 61 6e 64 20 39 20 62 79 74 65 73 2e 20 20 54   and 9 bytes.  T
9180: 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20  he number.** of 
9190: 62 79 74 65 73 20 77 72 69 74 74 65 6e 20 69 73  bytes written is
91a0: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a   returned..**.**
91b0: 20 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   A variable-leng
91c0: 74 68 20 69 6e 74 65 67 65 72 20 63 6f 6e 73 69  th integer consi
91d0: 73 74 73 20 6f 66 20 74 68 65 20 6c 6f 77 65 72  sts of the lower
91e0: 20 37 20 62 69 74 73 20 6f 66 20 65 61 63 68 20   7 bits of each 
91f0: 62 79 74 65 0a 2a 2a 20 66 6f 72 20 61 6c 6c 20  byte.** for all 
9200: 62 79 74 65 73 20 74 68 61 74 20 68 61 76 65 20  bytes that have 
9210: 74 68 65 20 38 74 68 20 62 69 74 20 73 65 74 20  the 8th bit set 
9220: 61 6e 64 20 6f 6e 65 20 62 79 74 65 20 77 69 74  and one byte wit
9230: 68 20 74 68 65 20 38 74 68 0a 2a 2a 20 62 69 74  h the 8th.** bit
9240: 20 63 6c 65 61 72 2e 20 20 45 78 63 65 70 74 2c   clear.  Except,
9250: 20 69 66 20 77 65 20 67 65 74 20 74 6f 20 74 68   if we get to th
9260: 65 20 39 74 68 20 62 79 74 65 2c 20 69 74 20 73  e 9th byte, it s
9270: 74 6f 72 65 73 20 74 68 65 20 66 75 6c 6c 0a 2a  tores the full.*
9280: 2a 20 38 20 62 69 74 73 20 61 6e 64 20 69 73 20  * 8 bits and is 
9290: 74 68 65 20 6c 61 73 74 20 62 79 74 65 2e 0a 2a  the last byte..*
92a0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
92b0: 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
92c0: 63 68 61 72 20 2a 70 2c 20 75 36 34 20 76 29 7b  char *p, u64 v){
92d0: 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a  .  int i, j, n;.
92e0: 20 20 75 38 20 62 75 66 5b 31 30 5d 3b 0a 20 20    u8 buf[10];.  
92f0: 69 66 28 20 76 20 26 20 28 28 28 75 36 34 29 30  if( v & (((u64)0
9300: 78 66 66 30 30 30 30 30 30 29 3c 3c 33 32 29 20  xff000000)<<32) 
9310: 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d 20 76 3b  ){.    p[8] = v;
9320: 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b 0a 20 20  .    v >>= 8;.  
9330: 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e 3d 30 3b    for(i=7; i>=0;
9340: 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 70 5b 69   i--){.      p[i
9350: 5d 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c  ] = (v & 0x7f) |
9360: 20 30 78 38 30 3b 0a 20 20 20 20 20 20 76 20 3e   0x80;.      v >
9370: 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >= 7;.    }.    
9380: 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d 20 20 20  return 9;.  }   
9390: 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 64 6f 7b   .  n = 0;.  do{
93a0: 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d 20 3d 20  .    buf[n++] = 
93b0: 28 76 20 26 20 30 78 37 66 29 20 7c 20 30 78 38  (v & 0x7f) | 0x8
93c0: 30 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a  0;.    v >>= 7;.
93d0: 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20 29    }while( v!=0 )
93e0: 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d 20 30 78  ;.  buf[0] &= 0x
93f0: 37 66 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3c  7f;.  assert( n<
9400: 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 2c  =9 );.  for(i=0,
9410: 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b 20 6a 2d   j=n-1; j>=0; j-
9420: 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 70 5b 69  -, i++){.    p[i
9430: 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20 20 7d 0a  ] = buf[j];.  }.
9440: 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f    return n;.}../
9450: 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36 34 2d 62  *.** Read a 64-b
9460: 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  it variable-leng
9470: 74 68 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20  th integer from 
9480: 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20  memory starting 
9490: 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75  at p[0]..** Retu
94a0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
94b0: 20 62 79 74 65 73 20 72 65 61 64 2e 20 20 54 68   bytes read.  Th
94c0: 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65  e value is store
94d0: 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20  d in *v..*/.int 
94e0: 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
94f0: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
9500: 63 68 61 72 20 2a 70 2c 20 75 36 34 20 2a 76 29  char *p, u64 *v)
9510: 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20 75 36 34  {.  u32 x;.  u64
9520: 20 78 36 34 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20   x64;.  int n;. 
9530: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63   unsigned char c
9540: 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b  ;.  if( ((c = p[
9550: 30 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29  0]) & 0x80)==0 )
9560: 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b 0a 20 20  {.    *v = c;.  
9570: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
9580: 20 20 78 20 3d 20 63 20 26 20 30 78 37 66 3b 0a    x = c & 0x7f;.
9590: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 31 5d    if( ((c = p[1]
95a0: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
95b0: 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20      *v = (x<<7) 
95c0: 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | c;.    return 
95d0: 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c  2;.  }.  x = (x<
95e0: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
95f0: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 32 5d    if( ((c = p[2]
9600: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
9610: 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20      *v = (x<<7) 
9620: 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | c;.    return 
9630: 33 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c  3;.  }.  x = (x<
9640: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
9650: 20 20 69 66 28 20 28 28 63 20 3d 20 70 5b 33 5d    if( ((c = p[3]
9660: 29 20 26 20 30 78 38 30 29 3d 3d 30 20 29 7b 0a  ) & 0x80)==0 ){.
9670: 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20      *v = (x<<7) 
9680: 7c 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  | c;.    return 
9690: 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20 3d 20 28  4;.  }.  x64 = (
96a0: 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29  x<<7) | (c&0x7f)
96b0: 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20 64 6f 7b  ;.  n = 4;.  do{
96c0: 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b 2b 5d 3b  .    c = p[n++];
96d0: 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39 20 29 7b  .    if( n==9 ){
96e0: 0a 20 20 20 20 20 20 78 36 34 20 3d 20 28 78 36  .      x64 = (x6
96f0: 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20 20 20 20  4<<8) | c;.     
9700: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
9710: 20 20 78 36 34 20 3d 20 28 78 36 34 3c 3c 37 29    x64 = (x64<<7)
9720: 20 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 7d   | (c&0x7f);.  }
9730: 77 68 69 6c 65 28 20 28 63 20 26 20 30 78 38 30  while( (c & 0x80
9740: 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20 3d 20 78  )!=0 );.  *v = x
9750: 36 34 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a  64;.  return n;.
9760: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20  }../*.** Read a 
9770: 33 32 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d  32-bit variable-
9780: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66  length integer f
9790: 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74  rom memory start
97a0: 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20  ing at p[0]..** 
97b0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
97c0: 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e  r of bytes read.
97d0: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73    The value is s
97e0: 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a  tored in *v..*/.
97f0: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
9800: 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
9810: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75  igned char *p, u
9820: 33 32 20 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b  32 *v){.  u32 x;
9830: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69  .  int n;.  unsi
9840: 67 6e 65 64 20 63 68 61 72 20 63 3b 0a 20 20 69  gned char c;.  i
9850: 66 28 20 28 28 73 69 67 6e 65 64 20 63 68 61 72  f( ((signed char
9860: 2a 29 70 29 5b 30 5d 3e 3d 30 20 29 7b 0a 20 20  *)p)[0]>=0 ){.  
9870: 20 20 2a 76 20 3d 20 70 5b 30 5d 3b 0a 20 20 20    *v = p[0];.   
9880: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
9890: 20 78 20 3d 20 70 5b 30 5d 20 26 20 30 78 37 66   x = p[0] & 0x7f
98a0: 3b 0a 20 20 69 66 28 20 28 28 73 69 67 6e 65 64  ;.  if( ((signed
98b0: 20 63 68 61 72 2a 29 70 29 5b 31 5d 3e 3d 30 20   char*)p)[1]>=0 
98c0: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
98d0: 37 29 20 7c 20 70 5b 31 5d 3b 0a 20 20 20 20 72  7) | p[1];.    r
98e0: 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78  eturn 2;.  }.  x
98f0: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 70 5b 31   = (x<<7) | (p[1
9900: 5d 20 26 20 30 78 37 66 29 3b 0a 20 20 6e 20 3d  ] & 0x7f);.  n =
9910: 20 32 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 78 20   2;.  do{.    x 
9920: 3d 20 28 78 3c 3c 37 29 20 7c 20 28 28 63 20 3d  = (x<<7) | ((c =
9930: 20 70 5b 6e 2b 2b 5d 29 26 30 78 37 66 29 3b 0a   p[n++])&0x7f);.
9940: 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30    }while( (c & 0
9950: 78 38 30 29 21 3d 30 20 26 26 20 6e 3c 39 20 29  x80)!=0 && n<9 )
9960: 3b 0a 20 20 2a 76 20 3d 20 78 3b 0a 20 20 72 65  ;.  *v = x;.  re
9970: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
9980: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
9990: 65 72 20 6f 66 20 62 79 74 65 73 20 74 68 61 74  er of bytes that
99a0: 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20   will be needed 
99b0: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 67 69 76  to store the giv
99c0: 65 6e 0a 2a 2a 20 36 34 2d 62 69 74 20 69 6e 74  en.** 64-bit int
99d0: 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  eger..*/.int sql
99e0: 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
99f0: 34 20 76 29 7b 0a 20 20 69 6e 74 20 69 20 3d 20  4 v){.  int i = 
9a00: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69 2b 2b  0;.  do{.    i++
9a10: 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20  ;.    v >>= 7;. 
9a20: 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20 26 26   }while( v!=0 &&
9a30: 20 69 3c 39 20 29 3b 0a 20 20 72 65 74 75 72 6e   i<9 );.  return
9a40: 20 69 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69   i;.}..#if !defi
9a50: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
9a60: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20 7c 7c  BLOB_LITERAL) ||
9a70: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
9a80: 48 41 53 5f 43 4f 44 45 43 29 20 5c 0a 20 20 20  HAS_CODEC) \.   
9a90: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
9aa0: 54 45 5f 54 45 53 54 29 0a 2f 2a 0a 2a 2a 20 54  TE_TEST)./*.** T
9ab0: 72 61 6e 73 6c 61 74 65 20 61 20 73 69 6e 67 6c  ranslate a singl
9ac0: 65 20 62 79 74 65 20 6f 66 20 48 65 78 20 69 6e  e byte of Hex in
9ad0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  to an integer..*
9ae0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78  /.static int hex
9af0: 54 6f 49 6e 74 28 69 6e 74 20 68 29 7b 0a 20 20  ToInt(int h){.  
9b00: 69 66 28 20 68 3e 3d 27 30 27 20 26 26 20 68 3c  if( h>='0' && h<
9b10: 3d 27 39 27 20 29 7b 0a 20 20 20 20 72 65 74 75  ='9' ){.    retu
9b20: 72 6e 20 68 20 2d 20 27 30 27 3b 0a 20 20 7d 65  rn h - '0';.  }e
9b30: 6c 73 65 20 69 66 28 20 68 3e 3d 27 61 27 20 26  lse if( h>='a' &
9b40: 26 20 68 3c 3d 27 66 27 20 29 7b 0a 20 20 20 20  & h<='f' ){.    
9b50: 72 65 74 75 72 6e 20 68 20 2d 20 27 61 27 20 2b  return h - 'a' +
9b60: 20 31 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   10;.  }else{.  
9b70: 20 20 61 73 73 65 72 74 28 20 68 3e 3d 27 41 27    assert( h>='A'
9b80: 20 26 26 20 68 3c 3d 27 46 27 20 29 3b 0a 20 20   && h<='F' );.  
9b90: 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27 41 27    return h - 'A'
9ba0: 20 2b 20 31 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e   + 10;.  }.}.#en
9bb0: 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f  dif /* !SQLITE_O
9bc0: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
9bd0: 20 7c 7c 20 53 51 4c 49 54 45 5f 48 41 53 5f 43   || SQLITE_HAS_C
9be0: 4f 44 45 43 20 7c 7c 20 53 51 4c 49 54 45 5f 54  ODEC || SQLITE_T
9bf0: 45 53 54 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  EST */..#if !def
9c00: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
9c10: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 29 20 7c  _BLOB_LITERAL) |
9c20: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
9c30: 5f 48 41 53 5f 43 4f 44 45 43 29 0a 2f 2a 0a 2a  _HAS_CODEC)./*.*
9c40: 2a 20 43 6f 6e 76 65 72 74 20 61 20 42 4c 4f 42  * Convert a BLOB
9c50: 20 6c 69 74 65 72 61 6c 20 6f 66 20 74 68 65 20   literal of the 
9c60: 66 6f 72 6d 20 22 78 27 68 68 68 68 68 68 27 22  form "x'hhhhhh'"
9c70: 20 69 6e 74 6f 20 69 74 73 20 62 69 6e 61 72 79   into its binary
9c80: 0a 2a 2a 20 76 61 6c 75 65 2e 20 20 52 65 74 75  .** value.  Retu
9c90: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
9ca0: 69 74 73 20 62 69 6e 61 72 79 20 76 61 6c 75 65  its binary value
9cb0: 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  .  Space to hold
9cc0: 20 74 68 65 0a 2a 2a 20 62 69 6e 61 72 79 20 76   the.** binary v
9cd0: 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 6f 62  alue has been ob
9ce0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
9cf0: 6f 63 20 61 6e 64 20 6d 75 73 74 20 62 65 20 66  oc and must be f
9d00: 72 65 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 63  reed by.** the c
9d10: 61 6c 6c 69 6e 67 20 72 6f 75 74 69 6e 65 2e 0a  alling routine..
9d20: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
9d30: 48 65 78 54 6f 42 6c 6f 62 28 63 6f 6e 73 74 20  HexToBlob(const 
9d40: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72  char *z){.  char
9d50: 20 2a 7a 42 6c 6f 62 3b 0a 20 20 69 6e 74 20 69   *zBlob;.  int i
9d60: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c  ;.  int n = strl
9d70: 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 6e 25 32  en(z);.  if( n%2
9d80: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20   ) return 0;..  
9d90: 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29  zBlob = (char *)
9da0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 6e 2f 32  sqliteMalloc(n/2
9db0: 29 3b 0a 20 20 69 66 28 20 7a 42 6c 6f 62 20 29  );.  if( zBlob )
9dc0: 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  {.    for(i=0; i
9dd0: 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20 20 20 20 20  <n; i+=2){.     
9de0: 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d 20 28 68   zBlob[i/2] = (h
9df0: 65 78 54 6f 49 6e 74 28 7a 5b 69 5d 29 3c 3c 34  exToInt(z[i])<<4
9e00: 29 20 7c 20 68 65 78 54 6f 49 6e 74 28 7a 5b 69  ) | hexToInt(z[i
9e10: 2b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  +1]);.    }.  }.
9e20: 20 20 72 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a    return zBlob;.
9e30: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c  }.#endif /* !SQL
9e40: 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49  ITE_OMIT_BLOB_LI
9e50: 54 45 52 41 4c 20 7c 7c 20 53 51 4c 49 54 45 5f  TERAL || SQLITE_
9e60: 48 41 53 5f 43 4f 44 45 43 20 2a 2f 0a 0a 23 69  HAS_CODEC */..#i
9e70: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
9e80: 5f 54 45 53 54 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e  _TEST)./*.** Con
9e90: 76 65 72 74 20 74 65 78 74 20 67 65 6e 65 72 61  vert text genera
9ea0: 74 65 64 20 62 79 20 74 68 65 20 22 25 70 22 20  ted by the "%p" 
9eb0: 63 6f 6e 76 65 72 73 69 6f 6e 20 66 6f 72 6d 61  conversion forma
9ec0: 74 20 62 61 63 6b 20 69 6e 74 6f 0a 2a 2a 20 61  t back into.** a
9ed0: 20 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 76 6f 69   pointer..*/.voi
9ee0: 64 20 2a 73 71 6c 69 74 65 33 54 65 78 74 54 6f  d *sqlite3TextTo
9ef0: 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Ptr(const char *
9f00: 7a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20  z){.  void *p;. 
9f10: 20 75 36 34 20 76 3b 0a 20 20 75 33 32 20 76 32   u64 v;.  u32 v2
9f20: 3b 0a 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 30  ;.  if( z[0]=='0
9f30: 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 78 27 20 29  ' && z[1]=='x' )
9f40: 7b 0a 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20  {.    z += 2;.  
9f50: 7d 0a 20 20 76 20 3d 20 30 3b 0a 20 20 77 68 69  }.  v = 0;.  whi
9f60: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 76 20  le( *z ){.    v 
9f70: 3d 20 28 76 3c 3c 34 29 20 2b 20 68 65 78 54 6f  = (v<<4) + hexTo
9f80: 49 6e 74 28 2a 7a 29 3b 0a 20 20 20 20 7a 2b 2b  Int(*z);.    z++
9f90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 69 7a 65  ;.  }.  if( size
9fa0: 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76 29  of(p)==sizeof(v)
9fb0: 20 29 7b 0a 20 20 20 20 70 20 3d 20 2a 28 76 6f   ){.    p = *(vo
9fc0: 69 64 2a 2a 29 26 76 3b 0a 20 20 7d 65 6c 73 65  id**)&v;.  }else
9fd0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 69  {.    assert( si
9fe0: 7a 65 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28  zeof(p)==sizeof(
9ff0: 76 32 29 20 29 3b 0a 20 20 20 20 76 32 20 3d 20  v2) );.    v2 = 
a000: 28 75 33 32 29 76 3b 0a 20 20 20 20 70 20 3d 20  (u32)v;.    p = 
a010: 2a 28 76 6f 69 64 2a 2a 29 26 76 32 3b 0a 20 20  *(void**)&v2;.  
a020: 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a  }.  return p;.}.
a030: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
a040: 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  turn a pointer t
a050: 6f 20 74 68 65 20 54 68 72 65 61 64 44 61 74 61  o the ThreadData
a060: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a070: 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 74 68 72   the calling thr
a080: 65 61 64 2e 0a 2a 2f 0a 54 68 72 65 61 64 44 61  ead..*/.ThreadDa
a090: 74 61 20 2a 73 71 6c 69 74 65 33 54 68 72 65 61  ta *sqlite3Threa
a0a0: 64 44 61 74 61 28 29 7b 0a 20 20 54 68 72 65 61  dData(){.  Threa
a0b0: 64 44 61 74 61 20 2a 70 20 3d 20 28 54 68 72 65  dData *p = (Thre
a0c0: 61 64 44 61 74 61 2a 29 73 71 6c 69 74 65 33 4f  adData*)sqlite3O
a0d0: 73 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44  sThreadSpecificD
a0e0: 61 74 61 28 31 29 3b 0a 20 20 69 66 28 20 21 70  ata(1);.  if( !p
a0f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 46   ){.    sqlite3F
a100: 61 69 6c 65 64 4d 61 6c 6c 6f 63 28 29 3b 0a 20  ailedMalloc();. 
a110: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d   }.  return p;.}
a120: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
a130: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
a140: 54 68 72 65 61 64 44 61 74 61 20 61 73 73 6f 63  ThreadData assoc
a150: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
a160: 61 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a 2a  alling thread..*
a170: 2a 20 49 66 20 6e 6f 20 54 68 72 65 61 64 44 61  * If no ThreadDa
a180: 74 61 20 68 61 73 20 62 65 65 6e 20 61 6c 6c 6f  ta has been allo
a190: 63 61 74 65 64 20 74 6f 20 74 68 69 73 20 74 68  cated to this th
a1a0: 72 65 61 64 20 79 65 74 2c 20 72 65 74 75 72 6e  read yet, return
a1b0: 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f   a pointer.** to
a1c0: 20 61 20 73 75 62 73 74 69 74 75 74 65 20 54 68   a substitute Th
a1d0: 72 65 61 64 44 61 74 61 20 73 74 72 75 63 74 75  readData structu
a1e0: 72 65 20 74 68 61 74 20 69 73 20 61 6c 6c 20 7a  re that is all z
a1f0: 65 72 6f 73 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20  eros. .*/.const 
a200: 54 68 72 65 61 64 44 61 74 61 20 2a 73 71 6c 69  ThreadData *sqli
a210: 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65 61  te3ThreadDataRea
a220: 64 4f 6e 6c 79 28 29 7b 0a 20 20 73 74 61 74 69  dOnly(){.  stati
a230: 63 20 63 6f 6e 73 74 20 54 68 72 65 61 64 44 61  c const ThreadDa
a240: 74 61 20 7a 65 72 6f 44 61 74 61 20 3d 20 7b 30  ta zeroData = {0
a250: 7d 3b 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  };  /* Initializ
a260: 65 72 20 74 6f 20 73 69 6c 65 6e 63 65 20 77 61  er to silence wa
a270: 72 6e 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20  rnings.         
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2a0: 20 20 2a 2a 20 66 72 6f 6d 20 62 72 6f 6b 65 6e    ** from broken
a2b0: 20 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 20 20   compilers */.  
a2c0: 63 6f 6e 73 74 20 54 68 72 65 61 64 44 61 74 61  const ThreadData
a2d0: 20 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 4f   *pTd = sqlite3O
a2e0: 73 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44  sThreadSpecificD
a2f0: 61 74 61 28 30 29 3b 0a 20 20 72 65 74 75 72 6e  ata(0);.  return
a300: 20 70 54 64 20 3f 20 70 54 64 20 3a 20 26 7a 65   pTd ? pTd : &ze
a310: 72 6f 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  roData;.}../*.**
a320: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
a330: 20 74 68 65 20 54 68 72 65 61 64 44 61 74 61 20   the ThreadData 
a340: 66 6f 72 20 74 68 69 73 20 74 68 72 65 61 64 20  for this thread 
a350: 69 73 20 61 6c 6c 20 7a 65 72 6f 2e 20 20 49 66  is all zero.  If
a360: 20 69 74 0a 2a 2a 20 69 73 2c 20 74 68 65 6e 20   it.** is, then 
a370: 64 65 61 6c 6c 6f 63 61 74 65 20 69 74 2e 20 0a  deallocate it. .
a380: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  */.void sqlite3R
a390: 65 6c 65 61 73 65 54 68 72 65 61 64 44 61 74 61  eleaseThreadData
a3a0: 28 29 7b 0a 20 20 73 71 6c 69 74 65 33 4f 73 54  (){.  sqlite3OsT
a3b0: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74  hreadSpecificDat
a3c0: 61 28 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  a(-1);.}../*.** 
a3d0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 75  This function mu
a3e0: 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66  st be called bef
a3f0: 6f 72 65 20 65 78 69 74 69 6e 67 20 61 6e 79 20  ore exiting any 
a400: 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 28 69 2e  API function (i.
a410: 65 2e 20 0a 2a 2a 20 72 65 74 75 72 6e 69 6e 67  e. .** returning
a420: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
a430: 75 73 65 72 29 20 74 68 61 74 20 68 61 73 20 63  user) that has c
a440: 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 4d 61 6c  alled sqlite3Mal
a450: 6c 6f 63 20 6f 72 0a 2a 2a 20 73 71 6c 69 74 65  loc or.** sqlite
a460: 33 52 65 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20  3Realloc..**.** 
a470: 54 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c  The returned val
a480: 75 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 61  ue is normally a
a490: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 73 65 63   copy of the sec
a4a0: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ond argument to 
a4b0: 74 68 69 73 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  this.** function
a4c0: 2e 20 48 6f 77 65 76 65 72 2c 20 69 66 20 61 20  . However, if a 
a4d0: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  malloc() failure
a4e0: 20 68 61 73 20 6f 63 63 75 72 65 64 20 73 69 6e   has occured sin
a4f0: 63 65 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  ce the previous.
a500: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 53 51  ** invocation SQ
a510: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 69 73 20 72 65  LITE_NOMEM is re
a520: 74 75 72 6e 65 64 20 69 6e 73 74 65 61 64 2e 20  turned instead. 
a530: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 69  .**.** If the fi
a540: 72 73 74 20 61 72 67 75 6d 65 6e 74 2c 20 64 62  rst argument, db
a550: 2c 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 61 6e  , is not NULL an
a560: 64 20 61 20 6d 61 6c 6c 6f 63 28 29 20 65 72 72  d a malloc() err
a570: 6f 72 20 68 61 73 20 6f 63 63 75 72 65 64 2c 0a  or has occured,.
a580: 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 6e  ** then the conn
a590: 65 63 74 69 6f 6e 20 65 72 72 6f 72 2d 63 6f 64  ection error-cod
a5a0: 65 20 28 74 68 65 20 76 61 6c 75 65 20 72 65 74  e (the value ret
a5b0: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
a5c0: 5f 65 72 72 63 6f 64 65 28 29 29 0a 2a 2a 20 69  _errcode()).** i
a5d0: 73 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  s set to SQLITE_
a5e0: 4e 4f 4d 45 4d 2e 0a 2a 2f 0a 73 74 61 74 69 63  NOMEM..*/.static
a5f0: 20 69 6e 74 20 6d 61 6c 6c 6f 63 48 61 73 46 61   int mallocHasFa
a600: 69 6c 65 64 20 3d 20 30 3b 0a 69 6e 74 20 73 71  iled = 0;.int sq
a610: 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
a620: 69 74 65 33 2a 20 64 62 2c 20 69 6e 74 20 72 63  ite3* db, int rc
a630: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
a640: 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29  MallocFailed() )
a650: 7b 0a 20 20 20 20 6d 61 6c 6c 6f 63 48 61 73 46  {.    mallocHasF
a660: 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20 73  ailed = 0;.    s
a670: 71 6c 69 74 65 33 4f 73 4c 65 61 76 65 4d 75 74  qlite3OsLeaveMut
a680: 65 78 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ex();.    sqlite
a690: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
a6a0: 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20 20 20  E_NOMEM, 0);.   
a6b0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
a6c0: 45 4d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  EM;.  }.  return
a6d0: 20 72 63 20 26 20 28 64 62 20 3f 20 64 62 2d 3e   rc & (db ? db->
a6e0: 65 72 72 4d 61 73 6b 20 3a 20 30 78 66 66 29 3b  errMask : 0xff);
a6f0: 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 52 65 74 75 72  .}../* .** Retur
a700: 6e 20 74 72 75 65 20 69 73 20 61 20 6d 61 6c 6c  n true is a mall
a710: 6f 63 20 68 61 73 20 66 61 69 6c 65 64 20 69 6e  oc has failed in
a720: 20 74 68 69 73 20 74 68 72 65 61 64 20 73 69 6e   this thread sin
a730: 63 65 20 74 68 65 20 6c 61 73 74 20 63 61 6c 6c  ce the last call
a740: 0a 2a 2a 20 74 6f 20 73 71 6c 69 74 65 33 41 70  .** to sqlite3Ap
a750: 69 45 78 69 74 28 29 2c 20 6f 72 20 66 61 6c 73  iExit(), or fals
a760: 65 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a  e otherwise..*/.
a770: 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
a780: 63 46 61 69 6c 65 64 28 29 7b 0a 20 20 72 65 74  cFailed(){.  ret
a790: 75 72 6e 20 28 6d 61 6c 6c 6f 63 48 61 73 46 61  urn (mallocHasFa
a7a0: 69 6c 65 64 20 26 26 20 73 71 6c 69 74 65 33 4f  iled && sqlite3O
a7b0: 73 49 6e 4d 75 74 65 78 28 31 29 29 3b 0a 7d 0a  sInMutex(1));.}.
a7c0: 0a 2f 2a 20 0a 2a 2a 20 53 65 74 20 74 68 65 20  ./* .** Set the 
a7d0: 22 6d 61 6c 6c 6f 63 20 68 61 73 20 66 61 69 6c  "malloc has fail
a7e0: 65 64 22 20 63 6f 6e 64 69 74 69 6f 6e 20 74 6f  ed" condition to
a7f0: 20 74 72 75 65 20 66 6f 72 20 74 68 69 73 20 74   true for this t
a800: 68 72 65 61 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73  hread..*/.void s
a810: 71 6c 69 74 65 33 46 61 69 6c 65 64 4d 61 6c 6c  qlite3FailedMall
a820: 6f 63 28 29 7b 0a 20 20 69 66 28 20 21 73 71 6c  oc(){.  if( !sql
a830: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
a840: 28 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  () ){.    sqlite
a850: 33 4f 73 45 6e 74 65 72 4d 75 74 65 78 28 29 3b  3OsEnterMutex();
a860: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 61 6c  .    assert( mal
a870: 6c 6f 63 48 61 73 46 61 69 6c 65 64 3d 3d 30 20  locHasFailed==0 
a880: 29 3b 0a 20 20 20 20 6d 61 6c 6c 6f 63 48 61 73  );.    mallocHas
a890: 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  Failed = 1;.  }.
a8a0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
a8b0: 5f 4d 45 4d 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  _MEMDEBUG./*.** 
a8c0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 73 65  This function se
a8d0: 74 73 20 61 20 66 6c 61 67 20 69 6e 20 74 68 65  ts a flag in the
a8e0: 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 69 63   thread-specific
a8f0: 2d 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20  -data structure 
a900: 74 68 61 74 20 77 69 6c 6c 0a 2a 2a 20 63 61 75  that will.** cau
a910: 73 65 20 61 6e 20 61 73 73 65 72 74 20 74 6f 20  se an assert to 
a920: 66 61 69 6c 20 69 66 20 73 71 6c 69 74 65 4d 61  fail if sqliteMa
a930: 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65  lloc() or sqlite
a940: 52 65 61 6c 6c 6f 63 28 29 20 69 73 20 63 61 6c  Realloc() is cal
a950: 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  led..*/.void sql
a960: 69 74 65 33 4d 61 6c 6c 6f 63 44 69 73 61 6c 6c  ite3MallocDisall
a970: 6f 77 28 29 7b 0a 20 20 61 73 73 65 72 74 28 20  ow(){.  assert( 
a980: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69  sqlite3_mallocDi
a990: 73 61 6c 6c 6f 77 65 64 3e 3d 30 20 29 3b 0a 20  sallowed>=0 );. 
a9a0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44   sqlite3_mallocD
a9b0: 69 73 61 6c 6c 6f 77 65 64 2b 2b 3b 0a 7d 0a 0a  isallowed++;.}..
a9c0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
a9d0: 69 6f 6e 20 63 6c 65 61 72 73 20 74 68 65 20 66  ion clears the f
a9e0: 6c 61 67 20 73 65 74 20 69 6e 20 74 68 65 20 74  lag set in the t
a9f0: 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 2d 64  hread-specific-d
aa00: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 73 65  ata structure se
aa10: 74 0a 2a 2a 20 62 79 20 73 71 6c 69 74 65 33 4d  t.** by sqlite3M
aa20: 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 28 29 2e  allocDisallow().
aa30: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
aa40: 4d 61 6c 6c 6f 63 41 6c 6c 6f 77 28 29 7b 0a 20  MallocAllow(){. 
aa50: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
aa60: 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 65  _mallocDisallowe
aa70: 64 3e 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  d>0 );.  sqlite3
aa80: 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 65  _mallocDisallowe
aa90: 64 2d 2d 3b 0a 7d 0a 23 65 6e 64 69 66 0a        d--;.}.#endif.