/ Hex Artifact Content
Login

Artifact ca6ee72772c0f5dc04d2e0ab1973fd3b6a9bf79d:


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: 38 39 20 32 30 30 36 2f 30 34 2f 30 38 20 31 39  89 2006/04/08 19
0230: 3a 31 34 3a 35 33 20 64 72 68 20 45 78 70 20 24  :14:53 drh Exp $
0240: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0250: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0260: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
0270: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0280: 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
0290: 3e 0a 0a 2f 2a 0a 2a 2a 20 4d 41 4c 4c 4f 43 20  >../*.** MALLOC 
02a0: 57 52 41 50 50 45 52 20 41 52 43 48 49 54 45 43  WRAPPER ARCHITEC
02b0: 54 55 52 45 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  TURE.**.** The s
02c0: 71 6c 69 74 65 20 63 6f 64 65 20 61 63 63 65 73  qlite code acces
02d0: 73 65 73 20 64 79 6e 61 6d 69 63 20 6d 65 6d 6f  ses dynamic memo
02e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2f 64 65  ry allocation/de
02f0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 62 79 20 69 6e  allocation by in
0300: 76 6f 6b 69 6e 67 0a 2a 2a 20 74 68 65 20 66 6f  voking.** the fo
0310: 6c 6c 6f 77 69 6e 67 20 73 69 78 20 41 50 49 73  llowing six APIs
0320: 20 28 77 68 69 63 68 20 6d 61 79 20 62 65 20 69   (which may be i
0330: 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 6d 61  mplemented as ma
0340: 63 72 6f 73 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  cros)..**.**    
0350: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29   sqlite3Malloc()
0360: 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 4d  .**     sqlite3M
0370: 61 6c 6c 6f 63 52 61 77 28 29 0a 2a 2a 20 20 20  allocRaw().**   
0380: 20 20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63    sqlite3Realloc
0390: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
03a0: 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 29  3ReallocOrFree()
03b0: 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 46  .**     sqlite3F
03c0: 72 65 65 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c  ree().**     sql
03d0: 69 74 65 33 41 6c 6c 6f 63 53 69 7a 65 28 29 0a  ite3AllocSize().
03e0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69  **.** The functi
03f0: 6f 6e 20 73 71 6c 69 74 65 33 46 72 65 65 58 20  on sqlite3FreeX 
0400: 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
0410: 65 20 74 61 73 6b 20 61 73 20 73 71 6c 69 74 65  e task as sqlite
0420: 33 46 72 65 65 20 61 6e 64 20 69 73 0a 2a 2a 20  3Free and is.** 
0430: 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 62 65  guaranteed to be
0440: 20 61 20 72 65 61 6c 20 66 75 6e 63 74 69 6f 6e   a real function
0450: 2e 20 54 68 65 20 73 61 6d 65 20 68 6f 6c 64 73  . The same holds
0460: 20 66 6f 72 20 73 71 6c 69 74 65 33 4d 61 6c 6c   for sqlite3Mall
0470: 6f 63 58 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 62  ocX.**.** The ab
0480: 6f 76 65 20 41 50 49 73 20 61 72 65 20 69 6d 70  ove APIs are imp
0490: 6c 65 6d 65 6e 74 65 64 20 69 6e 20 74 65 72 6d  lemented in term
04a0: 73 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  s of the functio
04b0: 6e 73 20 70 72 6f 76 69 64 65 64 20 69 6e 20 74  ns provided in t
04c0: 68 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6e 67 2d  he.** operating-
04d0: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
04e0: 2e 20 54 68 65 20 4f 53 20 69 6e 74 65 72 66 61  . The OS interfa
04f0: 63 65 20 69 73 20 6e 65 76 65 72 20 61 63 63 65  ce is never acce
0500: 73 73 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a  ssed directly.**
0510: 20 62 79 20 63 6f 64 65 20 6f 75 74 73 69 64 65   by code outside
0520: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a   of this file..*
0530: 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33  *.**     sqlite3
0540: 4f 73 4d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  OsMalloc().**   
0550: 20 20 73 71 6c 69 74 65 33 4f 73 52 65 61 6c 6c    sqlite3OsReall
0560: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69  oc().**     sqli
0570: 74 65 33 4f 73 46 72 65 65 28 29 0a 2a 2a 20 20  te3OsFree().**  
0580: 20 20 20 73 71 6c 69 74 65 33 4f 73 41 6c 6c 6f     sqlite3OsAllo
0590: 63 61 74 69 6f 6e 53 69 7a 65 28 29 0a 2a 2a 0a  cationSize().**.
05a0: 2a 2a 20 46 75 6e 63 74 69 6f 6e 73 20 73 71 6c  ** Functions sql
05b0: 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 29 20  ite3MallocRaw() 
05c0: 61 6e 64 20 73 71 6c 69 74 65 33 52 65 61 6c 6c  and sqlite3Reall
05d0: 6f 63 28 29 20 6d 61 79 20 69 6e 76 6f 6b 65 20  oc() may invoke 
05e0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  .** sqlite3_rele
05f0: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 69 66 20  ase_memory() if 
0600: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
0610: 33 4f 73 4d 61 6c 6c 6f 63 28 29 20 6f 72 0a 2a  3OsMalloc() or.*
0620: 2a 20 73 71 6c 69 74 65 33 4f 73 52 65 61 6c 6c  * sqlite3OsReall
0630: 6f 63 28 29 20 66 61 69 6c 73 20 28 6f 72 20 69  oc() fails (or i
0640: 66 20 74 68 65 20 73 6f 66 74 2d 68 65 61 70 2d  f the soft-heap-
0650: 6c 69 6d 69 74 20 66 6f 72 20 74 68 65 20 74 68  limit for the th
0660: 72 65 61 64 20 69 73 0a 2a 2a 20 65 78 63 65 65  read is.** excee
0670: 64 65 64 29 2e 20 46 75 6e 63 74 69 6f 6e 20 73  ded). Function s
0680: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29 20 75  qlite3Malloc() u
0690: 73 75 61 6c 6c 79 20 69 6e 76 6f 6b 65 73 0a 2a  sually invokes.*
06a0: 2a 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52  * sqlite3MallocR
06b0: 61 77 28 29 2e 0a 2a 2a 0a 2a 2a 20 4d 41 4c 4c  aw()..**.** MALL
06c0: 4f 43 20 54 45 53 54 20 57 52 41 50 50 45 52 20  OC TEST WRAPPER 
06d0: 41 52 43 48 49 54 45 43 54 55 52 45 0a 2a 2a 0a  ARCHITECTURE.**.
06e0: 2a 2a 20 54 68 65 20 74 65 73 74 20 77 72 61 70  ** The test wrap
06f0: 70 65 72 20 70 72 6f 76 69 64 65 73 20 65 78 74  per provides ext
0700: 72 61 20 74 65 73 74 20 66 61 63 69 6c 69 74 69  ra test faciliti
0710: 65 73 20 74 6f 20 65 6e 73 75 72 65 20 74 68 65  es to ensure the
0720: 20 6c 69 62 72 61 72 79 20 0a 2a 2a 20 64 6f 65   library .** doe
0730: 73 20 6e 6f 74 20 6c 65 61 6b 20 6d 65 6d 6f 72  s not leak memor
0740: 79 20 61 6e 64 20 68 61 6e 64 6c 65 73 20 74 68  y and handles th
0750: 65 20 66 61 69 6c 75 72 65 20 6f 66 20 74 68 65  e failure of the
0760: 20 75 6e 64 65 72 6c 79 69 6e 67 20 4f 53 20 6c   underlying OS l
0770: 65 76 65 6c 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  evel.** allocati
0780: 6f 6e 20 73 79 73 74 65 6d 20 63 6f 72 72 65 63  on system correc
0790: 74 6c 79 2e 20 49 74 20 69 73 20 6f 6e 6c 79 20  tly. It is only 
07a0: 70 72 65 73 65 6e 74 20 69 66 20 74 68 65 20 6c  present if the l
07b0: 69 62 72 61 72 79 20 69 73 20 0a 2a 2a 20 63 6f  ibrary is .** co
07c0: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
07d0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
07e0: 6d 61 63 72 6f 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  macro set..**.**
07f0: 20 20 20 20 20 2a 20 47 75 61 72 64 70 6f 73 74       * Guardpost
0800: 73 20 74 6f 20 64 65 74 65 63 74 20 6f 76 65 72  s to detect over
0810: 77 72 69 74 65 73 2e 0a 2a 2a 20 20 20 20 20 2a  writes..**     *
0820: 20 41 62 69 6c 69 74 79 20 74 6f 20 63 61 75 73   Ability to caus
0830: 65 20 61 20 73 70 65 63 69 66 69 63 20 4d 61 6c  e a specific Mal
0840: 6c 6f 63 28 29 20 6f 72 20 52 65 61 6c 6c 6f 63  loc() or Realloc
0850: 28 29 20 74 6f 20 66 61 69 6c 2e 0a 2a 2a 20 20  () to fail..**  
0860: 20 20 20 2a 20 41 75 64 69 74 20 6f 75 74 73 74     * Audit outst
0870: 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  anding memory al
0880: 6c 6f 63 61 74 69 6f 6e 73 20 28 69 2e 65 20 63  locations (i.e c
0890: 68 65 63 6b 20 66 6f 72 20 6c 65 61 6b 73 29 2e  heck for leaks).
08a0: 0a 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4d 41 58  .*/..#define MAX
08b0: 28 78 2c 79 29 20 28 28 78 29 3e 28 79 29 3f 28  (x,y) ((x)>(y)?(
08c0: 78 29 3a 28 79 29 29 0a 0a 23 69 66 20 64 65 66  x):(y))..#if def
08d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
08e0: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
08f0: 4d 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65  MENT) && !define
0900: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  d(SQLITE_OMIT_DI
0910: 53 4b 49 4f 29 0a 2f 2a 0a 2a 2a 20 53 65 74 20  SKIO)./*.** Set 
0920: 74 68 65 20 73 6f 66 74 20 68 65 61 70 2d 73 69  the soft heap-si
0930: 7a 65 20 6c 69 6d 69 74 20 66 6f 72 20 74 68 65  ze limit for the
0940: 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e   current thread.
0950: 20 50 61 73 73 69 6e 67 20 61 20 6e 65 67 61 74   Passing a negat
0960: 69 76 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 64  ive.** value ind
0970: 69 63 61 74 65 73 20 6e 6f 20 6c 69 6d 69 74 2e  icates no limit.
0980: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
0990: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
09a0: 28 69 6e 74 20 6e 29 7b 0a 20 20 54 68 72 65 61  (int n){.  Threa
09b0: 64 44 61 74 61 20 2a 70 54 64 20 3d 20 73 71 6c  dData *pTd = sql
09c0: 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28 29  ite3ThreadData()
09d0: 3b 0a 20 20 69 66 28 20 70 54 64 20 29 7b 0a 20  ;.  if( pTd ){. 
09e0: 20 20 20 70 54 64 2d 3e 6e 53 6f 66 74 48 65 61     pTd->nSoftHea
09f0: 70 4c 69 6d 69 74 20 3d 20 6e 3b 0a 20 20 7d 0a  pLimit = n;.  }.
0a00: 20 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65    sqlite3Release
0a10: 54 68 72 65 61 64 44 61 74 61 28 29 3b 0a 7d 0a  ThreadData();.}.
0a20: 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d  ./*.** Release m
0a30: 65 6d 6f 72 79 20 68 65 6c 64 20 62 79 20 53 51  emory held by SQ
0a40: 4c 69 74 65 20 69 6e 73 74 61 6e 63 65 73 20 63  Lite instances c
0a50: 72 65 61 74 65 64 20 62 79 20 74 68 65 20 63 75  reated by the cu
0a60: 72 72 65 6e 74 20 74 68 72 65 61 64 2e 0a 2a 2f  rrent thread..*/
0a70: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 6c  .int sqlite3_rel
0a80: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 69 6e 74 20  ease_memory(int 
0a90: 6e 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  n){.  return sql
0aa0: 69 74 65 33 70 61 67 65 72 5f 72 65 6c 65 61 73  ite3pager_releas
0ab0: 65 5f 6d 65 6d 6f 72 79 28 6e 29 3b 0a 7d 0a 23  e_memory(n);.}.#
0ac0: 65 6c 73 65 0a 2f 2a 20 49 66 20 53 51 4c 49 54  else./* If SQLIT
0ad0: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
0ae0: 4d 41 4e 41 47 45 4d 45 4e 54 20 69 73 20 6e 6f  MANAGEMENT is no
0af0: 74 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20  t defined, then 
0b00: 64 65 66 69 6e 65 20 61 20 76 65 72 73 69 6f 6e  define a version
0b10: 0a 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 5f 72  .** of sqlite3_r
0b20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
0b30: 74 6f 20 62 65 20 75 73 65 64 20 62 79 20 6f 74  to be used by ot
0b40: 68 65 72 20 63 6f 64 65 20 69 6e 20 74 68 69 73  her code in this
0b50: 20 66 69 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 69   file..** This i
0b60: 73 20 64 6f 6e 65 20 66 6f 72 20 6e 6f 20 62 65  s done for no be
0b70: 74 74 65 72 20 72 65 61 73 6f 6e 20 74 68 61 6e  tter reason than
0b80: 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
0b90: 75 6d 62 65 72 20 6f 66 20 0a 2a 2a 20 70 72 65  umber of .** pre
0ba0: 2d 70 72 6f 63 65 73 73 6f 72 20 23 69 66 6e 64  -processor #ifnd
0bb0: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
0bc0: 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
0bd0: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
0be0: 28 78 29 20 30 20 20 20 20 2f 2a 20 30 20 3d 3d  (x) 0    /* 0 ==
0bf0: 20 6e 6f 20 6d 65 6d 6f 72 79 20 66 72 65 65 64   no memory freed
0c00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64   */.#endif..#ifd
0c10: 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
0c20: 55 47 0a 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  UG./*-----------
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 0a  ---------------.
0c70: 2a 2a 20 42 65 67 69 6e 20 63 6f 64 65 20 66 6f  ** Begin code fo
0c80: 72 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  r memory allocat
0c90: 69 6f 6e 20 73 79 73 74 65 6d 20 74 65 73 74 20  ion system test 
0ca0: 6c 61 79 65 72 2e 0a 2a 2a 0a 2a 2a 20 4d 65 6d  layer..**.** Mem
0cb0: 6f 72 79 20 64 65 62 75 67 67 69 6e 67 20 69 73  ory debugging is
0cc0: 20 74 75 72 6e 65 64 20 6f 6e 20 62 79 20 64 65   turned on by de
0cd0: 66 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 49 54  fining the SQLIT
0ce0: 45 5f 4d 45 4d 44 45 42 55 47 20 6d 61 63 72 6f  E_MEMDEBUG macro
0cf0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ..**.** SQLITE_M
0d00: 45 4d 44 45 42 55 47 3d 3d 31 20 20 20 20 2d 3e  EMDEBUG==1    ->
0d10: 20 46 65 6e 63 65 2d 70 6f 73 74 69 6e 67 20 6f   Fence-posting o
0d20: 6e 6c 79 20 28 74 68 72 65 61 64 20 73 61 66 65  nly (thread safe
0d30: 29 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 45 4d  ) .** SQLITE_MEM
0d40: 44 45 42 55 47 3d 3d 32 20 20 20 20 2d 3e 20 46  DEBUG==2    -> F
0d50: 65 6e 63 65 2d 70 6f 73 74 69 6e 67 20 2b 20 6c  ence-posting + l
0d60: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
0d70: 6c 6f 63 61 74 69 6f 6e 73 20 28 6e 6f 74 20 74  locations (not t
0d80: 73 29 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 45 4d  s).** SQLITE_MEM
0d90: 44 45 42 55 47 3d 3d 33 20 20 20 20 2d 3e 20 41  DEBUG==3    -> A
0da0: 62 6f 76 65 20 2b 20 62 61 63 6b 74 72 61 63 65  bove + backtrace
0db0: 73 20 28 6e 6f 74 20 74 68 72 65 61 64 20 73 61  s (not thread sa
0dc0: 66 65 2c 20 72 65 71 2e 20 67 6c 69 62 63 29 0a  fe, req. glibc).
0dd0: 2a 2f 0a 0a 2f 2a 20 46 69 67 75 72 65 20 6f 75  */../* Figure ou
0de0: 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  t whether or not
0df0: 20 74 6f 20 73 74 6f 72 65 20 62 61 63 6b 74 72   to store backtr
0e00: 61 63 65 28 29 20 69 6e 66 6f 72 6d 61 74 69 6f  ace() informatio
0e10: 6e 20 66 6f 72 20 65 61 63 68 20 6d 61 6c 6c 6f  n for each mallo
0e20: 63 2e 0a 2a 2a 20 54 68 65 20 62 61 63 6b 74 72  c..** The backtr
0e30: 61 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ace() function i
0e40: 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53  s only used if S
0e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 69  QLITE_MEMDEBUG i
0e60: 73 20 73 65 74 20 74 6f 20 32 20 6f 72 20 0a 2a  s set to 2 or .*
0e70: 2a 20 67 72 65 61 74 65 72 20 61 6e 64 20 67 6c  * greater and gl
0e80: 69 62 63 20 69 73 20 69 6e 20 75 73 65 2e 20 49  ibc is in use. I
0e90: 66 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  f we don't want 
0ea0: 74 6f 20 75 73 65 20 62 61 63 6b 74 72 61 63 65  to use backtrace
0eb0: 28 29 2c 20 74 68 65 6e 20 6a 75 73 74 0a 2a 2a  (), then just.**
0ec0: 20 64 65 66 69 6e 65 20 69 74 20 61 73 20 61 6e   define it as an
0ed0: 20 65 6d 70 74 79 20 6d 61 63 72 6f 20 61 6e 64   empty macro and
0ee0: 20 73 65 74 20 74 68 65 20 61 6d 6f 75 6e 74 20   set the amount 
0ef0: 6f 66 20 73 70 61 63 65 20 72 65 73 65 72 76 65  of space reserve
0f00: 64 20 74 6f 20 30 2e 0a 2a 2f 0a 23 69 66 20 64  d to 0..*/.#if d
0f10: 65 66 69 6e 65 64 28 5f 5f 47 4c 49 42 43 5f 5f  efined(__GLIBC__
0f20: 29 20 26 26 20 53 51 4c 49 54 45 5f 4d 45 4d 44  ) && SQLITE_MEMD
0f30: 45 42 55 47 3e 32 0a 20 20 65 78 74 65 72 6e 20  EBUG>2.  extern 
0f40: 69 6e 74 20 62 61 63 6b 74 72 61 63 65 28 76 6f  int backtrace(vo
0f50: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 0a 20 20 23  id **, int);.  #
0f60: 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43  define TESTALLOC
0f70: 5f 53 54 41 43 4b 53 49 5a 45 20 31 32 38 0a 20  _STACKSIZE 128. 
0f80: 20 23 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c   #define TESTALL
0f90: 4f 43 5f 53 54 41 43 4b 46 52 41 4d 45 53 20 28  OC_STACKFRAMES (
0fa0: 28 54 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43 4b  (TESTALLOC_STACK
0fb0: 53 49 5a 45 2d 38 29 2f 73 69 7a 65 6f 66 28 76  SIZE-8)/sizeof(v
0fc0: 6f 69 64 2a 29 29 0a 23 65 6c 73 65 0a 20 20 23  oid*)).#else.  #
0fd0: 64 65 66 69 6e 65 20 62 61 63 6b 74 72 61 63 65  define backtrace
0fe0: 28 78 2c 20 79 29 0a 20 20 23 64 65 66 69 6e 65  (x, y).  #define
0ff0: 20 54 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43 4b   TESTALLOC_STACK
1000: 53 49 5a 45 20 30 0a 20 20 23 64 65 66 69 6e 65  SIZE 0.  #define
1010: 20 54 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43 4b   TESTALLOC_STACK
1020: 46 52 41 4d 45 53 20 30 0a 23 65 6e 64 69 66 0a  FRAMES 0.#endif.
1030: 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66  ./*.** Number of
1040: 20 33 32 2d 62 69 74 20 67 75 61 72 64 20 77 6f   32-bit guard wo
1050: 72 64 73 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  rds.  This shoul
1060: 64 20 70 72 6f 62 61 62 6c 79 20 62 65 20 61 20  d probably be a 
1070: 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 2a 2a 20 32  multiple of.** 2
1080: 20 73 69 6e 63 65 20 6f 6e 20 36 34 2d 62 69 74   since on 64-bit
1090: 20 6d 61 63 68 69 6e 65 73 20 77 65 20 77 61 6e   machines we wan
10a0: 74 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  t the value retu
10b0: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 4d 61  rned by sqliteMa
10c0: 6c 6c 6f 63 28 29 0a 2a 2a 20 74 6f 20 62 65 20  lloc().** to be 
10d0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 2e 0a  8-byte aligned..
10e0: 2a 2f 0a 23 69 66 6e 64 65 66 20 54 45 53 54 41  */.#ifndef TESTA
10f0: 4c 4c 4f 43 5f 4e 47 55 41 52 44 0a 23 20 64 65  LLOC_NGUARD.# de
1100: 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f 4e  fine TESTALLOC_N
1110: 47 55 41 52 44 20 32 0a 23 65 6e 64 69 66 0a 0a  GUARD 2.#endif..
1120: 2f 2a 0a 2a 2a 20 53 69 7a 65 20 72 65 73 65 72  /*.** Size reser
1130: 76 65 64 20 66 6f 72 20 73 74 6f 72 69 6e 67 20  ved for storing 
1140: 66 69 6c 65 2d 6e 61 6d 65 20 61 6c 6f 6e 67 20  file-name along 
1150: 77 69 74 68 20 65 61 63 68 20 6d 61 6c 6c 6f 63  with each malloc
1160: 28 29 65 64 20 62 6c 6f 62 2e 0a 2a 2f 0a 23 64  ()ed blob..*/.#d
1170: 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f  efine TESTALLOC_
1180: 46 49 4c 45 53 49 5a 45 20 36 34 0a 0a 2f 2a 0a  FILESIZE 64../*.
1190: 2a 2a 20 53 69 7a 65 20 72 65 73 65 72 76 65 64  ** Size reserved
11a0: 20 66 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   for storing the
11b0: 20 75 73 65 72 20 73 74 72 69 6e 67 2e 20 45 61   user string. Ea
11c0: 63 68 20 74 69 6d 65 20 61 20 4d 61 6c 6c 6f 63  ch time a Malloc
11d0: 28 29 20 6f 72 20 52 65 61 6c 6c 6f 63 28 29 0a  () or Realloc().
11e0: 2a 2a 20 63 61 6c 6c 20 73 75 63 63 65 65 64 73  ** call succeeds
11f0: 2c 20 75 70 20 74 6f 20 54 45 53 54 41 4c 4c 4f  , up to TESTALLO
1200: 43 5f 55 53 45 52 53 49 5a 45 20 62 79 74 65 73  C_USERSIZE bytes
1210: 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 70   of the string p
1220: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
1230: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69  sqlite3_malloc_i
1240: 64 20 61 72 65 20 73 74 6f 72 65 64 20 61 6c 6f  d are stored alo
1250: 6e 67 20 77 69 74 68 20 74 68 65 20 6f 74 68 65  ng with the othe
1260: 72 20 74 65 73 74 20 73 79 73 74 65 6d 20 6d 65  r test system me
1270: 74 61 64 61 74 61 2e 0a 2a 2f 0a 23 64 65 66 69  tadata..*/.#defi
1280: 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f 55 53 45  ne TESTALLOC_USE
1290: 52 53 49 5a 45 20 36 34 0a 63 6f 6e 73 74 20 63  RSIZE 64.const c
12a0: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 61 6c  har *sqlite3_mal
12b0: 6c 6f 63 5f 69 64 20 3d 20 30 3b 0a 0a 2f 2a 0a  loc_id = 0;../*.
12c0: 2a 2a 20 42 6c 6f 63 6b 73 20 75 73 65 64 20 62  ** Blocks used b
12d0: 79 20 74 68 65 20 74 65 73 74 20 6c 61 79 65 72  y the test layer
12e0: 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
12f0: 69 6e 67 20 66 6f 72 6d 61 74 3a 0a 2a 2a 0a 2a  ing format:.**.*
1300: 2a 20 20 20 20 20 20 20 20 3c 73 69 7a 65 6f 66  *        <sizeof
1310: 28 76 6f 69 64 20 2a 29 20 70 4e 65 78 74 20 70  (void *) pNext p
1320: 6f 69 6e 74 65 72 3e 0a 2a 2a 20 20 20 20 20 20  ointer>.**      
1330: 20 20 3c 73 69 7a 65 6f 66 28 76 6f 69 64 20 2a    <sizeof(void *
1340: 29 20 70 50 72 65 76 20 70 6f 69 6e 74 65 72 3e  ) pPrev pointer>
1350: 0a 2a 2a 20 20 20 20 20 20 20 20 3c 54 45 53 54  .**        <TEST
1360: 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 20 33 32 2d  ALLOC_NGUARD 32-
1370: 62 69 74 20 67 75 61 72 64 20 77 6f 72 64 73 3e  bit guard words>
1380: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 3c  .**            <
1390: 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  The application 
13a0: 6c 65 76 65 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e  level allocation
13b0: 3e 0a 2a 2a 20 20 20 20 20 20 20 20 3c 54 45 53  >.**        <TES
13c0: 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 20 33 32  TALLOC_NGUARD 32
13d0: 2d 62 69 74 20 67 75 61 72 64 20 77 6f 72 64 73  -bit guard words
13e0: 3e 0a 2a 2a 20 20 20 20 20 20 20 20 3c 33 32 2d  >.**        <32-
13f0: 62 69 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 3e  bit line number>
1400: 0a 2a 2a 20 20 20 20 20 20 20 20 3c 54 45 53 54  .**        <TEST
1410: 41 4c 4c 4f 43 5f 46 49 4c 45 53 49 5a 45 20 62  ALLOC_FILESIZE b
1420: 79 74 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ytes containing 
1430: 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20  null-terminated 
1440: 66 69 6c 65 20 6e 61 6d 65 3e 0a 2a 2a 20 20 20  file name>.**   
1450: 20 20 20 20 20 3c 54 45 53 54 41 4c 4c 4f 43 5f       <TESTALLOC_
1460: 53 54 41 43 4b 53 49 5a 45 20 62 79 74 65 73 20  STACKSIZE bytes 
1470: 6f 66 20 62 61 63 6b 74 72 61 63 65 28 29 20 6f  of backtrace() o
1480: 75 74 70 75 74 3e 0a 2a 2f 20 0a 0a 23 64 65 66  utput>.*/ ..#def
1490: 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  ine TESTALLOC_OF
14a0: 46 53 45 54 5f 47 55 41 52 44 31 28 70 29 20 20  FSET_GUARD1(p)  
14b0: 20 20 28 73 69 7a 65 6f 66 28 76 6f 69 64 20 2a    (sizeof(void *
14c0: 29 20 2a 20 32 29 0a 23 64 65 66 69 6e 65 20 54  ) * 2).#define T
14d0: 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f  ESTALLOC_OFFSET_
14e0: 44 41 54 41 28 70 29 20 28 20 5c 0a 20 20 54 45  DATA(p) ( \.  TE
14f0: 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 47  STALLOC_OFFSET_G
1500: 55 41 52 44 31 28 70 29 20 2b 20 73 69 7a 65 6f  UARD1(p) + sizeo
1510: 66 28 75 33 32 29 20 2a 20 54 45 53 54 41 4c 4c  f(u32) * TESTALL
1520: 4f 43 5f 4e 47 55 41 52 44 20 5c 0a 29 0a 23 64  OC_NGUARD \.).#d
1530: 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f  efine TESTALLOC_
1540: 4f 46 46 53 45 54 5f 47 55 41 52 44 32 28 70 29  OFFSET_GUARD2(p)
1550: 20 28 20 5c 0a 20 20 54 45 53 54 41 4c 4c 4f 43   ( \.  TESTALLOC
1560: 5f 4f 46 46 53 45 54 5f 44 41 54 41 28 70 29 20  _OFFSET_DATA(p) 
1570: 2b 20 73 71 6c 69 74 65 33 4f 73 41 6c 6c 6f 63  + sqlite3OsAlloc
1580: 61 74 69 6f 6e 53 69 7a 65 28 70 29 20 2d 20 54  ationSize(p) - T
1590: 45 53 54 41 4c 4c 4f 43 5f 4f 56 45 52 48 45 41  ESTALLOC_OVERHEA
15a0: 44 20 5c 0a 29 0a 23 64 65 66 69 6e 65 20 54 45  D \.).#define TE
15b0: 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 4c  STALLOC_OFFSET_L
15c0: 49 4e 45 4e 55 4d 42 45 52 28 70 29 20 28 20 5c  INENUMBER(p) ( \
15d0: 0a 20 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46  .  TESTALLOC_OFF
15e0: 53 45 54 5f 47 55 41 52 44 32 28 70 29 20 2b 20  SET_GUARD2(p) + 
15f0: 73 69 7a 65 6f 66 28 75 33 32 29 20 2a 20 54 45  sizeof(u32) * TE
1600: 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 20 5c  STALLOC_NGUARD \
1610: 0a 29 0a 23 64 65 66 69 6e 65 20 54 45 53 54 41  .).#define TESTA
1620: 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 46 49 4c 45  LLOC_OFFSET_FILE
1630: 4e 41 4d 45 28 70 29 20 28 20 5c 0a 20 20 54 45  NAME(p) ( \.  TE
1640: 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 4c  STALLOC_OFFSET_L
1650: 49 4e 45 4e 55 4d 42 45 52 28 70 29 20 2b 20 73  INENUMBER(p) + s
1660: 69 7a 65 6f 66 28 75 33 32 29 20 5c 0a 29 0a 23  izeof(u32) \.).#
1670: 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43  define TESTALLOC
1680: 5f 4f 46 46 53 45 54 5f 55 53 45 52 28 70 29 20  _OFFSET_USER(p) 
1690: 28 20 5c 0a 20 20 54 45 53 54 41 4c 4c 4f 43 5f  ( \.  TESTALLOC_
16a0: 4f 46 46 53 45 54 5f 46 49 4c 45 4e 41 4d 45 28  OFFSET_FILENAME(
16b0: 70 29 20 2b 20 54 45 53 54 41 4c 4c 4f 43 5f 46  p) + TESTALLOC_F
16c0: 49 4c 45 53 49 5a 45 20 5c 0a 29 0a 23 64 65 66  ILESIZE \.).#def
16d0: 69 6e 65 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  ine TESTALLOC_OF
16e0: 46 53 45 54 5f 53 54 41 43 4b 28 70 29 20 28 20  FSET_STACK(p) ( 
16f0: 5c 0a 20 20 54 45 53 54 41 4c 4c 4f 43 5f 4f 46  \.  TESTALLOC_OF
1700: 46 53 45 54 5f 55 53 45 52 28 70 29 20 2b 20 54  FSET_USER(p) + T
1710: 45 53 54 41 4c 4c 4f 43 5f 55 53 45 52 53 49 5a  ESTALLOC_USERSIZ
1720: 45 20 2b 20 38 20 2d 20 5c 0a 20 20 28 54 45 53  E + 8 - \.  (TES
1730: 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 55 53  TALLOC_OFFSET_US
1740: 45 52 28 70 29 20 25 20 38 29 20 5c 0a 29 0a 0a  ER(p) % 8) \.)..
1750: 23 64 65 66 69 6e 65 20 54 45 53 54 41 4c 4c 4f  #define TESTALLO
1760: 43 5f 4f 56 45 52 48 45 41 44 20 28 20 5c 0a 20  C_OVERHEAD ( \. 
1770: 20 73 69 7a 65 6f 66 28 76 6f 69 64 20 2a 29 2a   sizeof(void *)*
1780: 32 20 2b 20 20 20 20 20 20 20 20 20 20 20 20 20  2 +             
1790: 20 20 20 20 20 20 2f 2a 20 70 50 72 65 76 20 61        /* pPrev a
17a0: 6e 64 20 70 4e 65 78 74 20 70 6f 69 6e 74 65 72  nd pNext pointer
17b0: 73 20 2a 2f 20 20 20 5c 0a 20 20 54 45 53 54 41  s */   \.  TESTA
17c0: 4c 4c 4f 43 5f 4e 47 55 41 52 44 2a 73 69 7a 65  LLOC_NGUARD*size
17d0: 6f 66 28 75 33 32 29 2a 32 20 2b 20 20 20 20 20  of(u32)*2 +     
17e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 47 75 61 72           /* Guar
17f0: 64 20 77 6f 72 64 73 20 2a 2f 20 20 20 20 20 20  d words */      
1800: 20 5c 0a 20 20 73 69 7a 65 6f 66 28 75 33 32 29   \.  sizeof(u32)
1810: 20 2b 20 54 45 53 54 41 4c 4c 4f 43 5f 46 49 4c   + TESTALLOC_FIL
1820: 45 53 49 5a 45 20 2b 20 20 20 2f 2a 20 46 69 6c  ESIZE +   /* Fil
1830: 65 20 61 6e 64 20 6c 69 6e 65 20 6e 75 6d 62 65  e and line numbe
1840: 72 20 2a 2f 20 20 20 20 20 20 20 5c 0a 20 20 54  r */       \.  T
1850: 45 53 54 41 4c 4c 4f 43 5f 55 53 45 52 53 49 5a  ESTALLOC_USERSIZ
1860: 45 20 2b 20 20 20 20 20 20 20 20 20 20 20 20 20  E +             
1870: 20 20 20 20 2f 2a 20 55 73 65 72 20 73 74 72 69      /* User stri
1880: 6e 67 20 2a 2f 20 20 20 20 20 20 20 20 20 20 20  ng */           
1890: 20 20 20 20 20 5c 0a 20 20 54 45 53 54 41 4c 4c       \.  TESTALL
18a0: 4f 43 5f 53 54 41 43 4b 53 49 5a 45 20 20 20 20  OC_STACKSIZE    
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18c0: 20 62 61 63 6b 74 72 61 63 65 28 29 20 73 74 61   backtrace() sta
18d0: 63 6b 20 2a 2f 20 20 20 20 20 20 20 20 20 20 5c  ck */          \
18e0: 0a 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 6b  .).../*.** For k
18f0: 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
1900: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1910: 6c 6c 6f 63 73 20 61 6e 64 20 66 72 65 65 73 2e  llocs and frees.
1920: 20 20 20 54 68 69 73 0a 2a 2a 20 69 73 20 75 73     This.** is us
1930: 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  ed to check for 
1940: 6d 65 6d 6f 72 79 20 6c 65 61 6b 73 2e 20 20 54  memory leaks.  T
1950: 68 65 20 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 61  he iMallocFail a
1960: 6e 64 20 69 4d 61 6c 6c 6f 63 52 65 73 65 74 0a  nd iMallocReset.
1970: 2a 2a 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ** values are us
1980: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 6d  ed to simulate m
1990: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  alloc() failures
19a0: 20 64 75 72 69 6e 67 20 74 65 73 74 69 6e 67 20   during testing 
19b0: 69 6e 20 0a 2a 2a 20 6f 72 64 65 72 20 74 6f 20  in .** order to 
19c0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
19d0: 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c  library correctl
19e0: 79 20 68 61 6e 64 6c 65 73 20 61 6e 20 6f 75 74  y handles an out
19f0: 2d 6f 66 2d 6d 65 6d 6f 72 79 0a 2a 2a 20 63 6f  -of-memory.** co
1a00: 6e 64 69 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20  ndition..*/.int 
1a10: 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 3b  sqlite3_nMalloc;
1a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a30: 65 72 20 6f 66 20 73 71 6c 69 74 65 4d 61 6c 6c  er of sqliteMall
1a40: 6f 63 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e  oc() calls */.in
1a50: 74 20 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 3b  t sqlite3_nFree;
1a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a70: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 46 72  mber of sqliteFr
1a80: 65 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 69 6e  ee() calls */.in
1a90: 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65  t sqlite3_memUse
1aa0: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4f  d;         /* TO
1ab0: 44 4f 20 54 6f 74 61 6c 20 6d 65 6d 6f 72 79 20  DO Total memory 
1ac0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
1ad0: 6c 6c 6f 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  lloc */.int sqli
1ae0: 74 65 33 5f 6d 65 6d 4d 61 78 3b 20 20 20 20 20  te3_memMax;     
1af0: 20 20 20 20 20 2f 2a 20 54 4f 44 4f 20 4d 65 6d       /* TODO Mem
1b00: 20 75 73 61 67 65 20 68 69 67 68 2d 77 61 74 65   usage high-wate
1b10: 72 20 6d 61 72 6b 20 2a 2f 0a 69 6e 74 20 73 71  r mark */.int sq
1b20: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
1b30: 6c 3b 20 20 20 20 20 2f 2a 20 46 61 69 6c 20 73  l;     /* Fail s
1b40: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 66  qliteMalloc() af
1b50: 74 65 72 20 74 68 69 73 20 6d 61 6e 79 20 63 61  ter this many ca
1b60: 6c 6c 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  lls */.int sqlit
1b70: 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74 20  e3_iMallocReset 
1b80: 3d 20 2d 31 3b 20 2f 2a 20 57 68 65 6e 20 69 4d  = -1; /* When iM
1b90: 61 6c 6c 6f 63 46 61 69 6c 20 72 65 61 63 68 65  allocFail reache
1ba0: 73 20 30 2c 20 73 65 74 20 74 6f 20 74 68 69 73  s 0, set to this
1bb0: 20 2a 2f 0a 0a 76 6f 69 64 20 2a 73 71 6c 69 74   */..void *sqlit
1bc0: 65 33 5f 70 46 69 72 73 74 20 3d 20 30 3b 20 20  e3_pFirst = 0;  
1bd0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1be0: 72 20 74 6f 20 6c 69 6e 6b 65 64 20 6c 69 73 74  r to linked list
1bf0: 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20   of allocations 
1c00: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e  */.int sqlite3_n
1c10: 4d 61 78 41 6c 6c 6f 63 20 3d 20 30 3b 20 20 20  MaxAlloc = 0;   
1c20: 20 20 20 20 20 2f 2a 20 48 69 67 68 20 77 61 74       /* High wat
1c30: 65 72 20 6d 61 72 6b 20 6f 66 20 54 68 72 65 61  er mark of Threa
1c40: 64 44 61 74 61 2e 6e 41 6c 6c 6f 63 20 2a 2f 0a  dData.nAlloc */.
1c50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  int sqlite3_mall
1c60: 6f 63 44 69 73 61 6c 6c 6f 77 65 64 20 3d 20 30  ocDisallowed = 0
1c70: 3b 20 2f 2a 20 61 73 73 65 72 74 28 29 20 69 6e  ; /* assert() in
1c80: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29   sqlite3Malloc()
1c90: 20 69 66 20 73 65 74 20 2a 2f 0a 69 6e 74 20 73   if set */.int s
1ca0: 71 6c 69 74 65 33 5f 69 73 46 61 69 6c 20 3d 20  qlite3_isFail = 
1cb0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
1cc0: 54 72 75 65 20 69 66 20 61 6c 6c 20 6d 61 6c 6c  True if all mall
1cd0: 6f 63 20 63 61 6c 6c 73 20 73 68 6f 75 6c 64 20  oc calls should 
1ce0: 66 61 69 6c 20 2a 2f 0a 63 6f 6e 73 74 20 63 68  fail */.const ch
1cf0: 61 72 20 2a 73 71 6c 69 74 65 33 5f 7a 46 69 6c  ar *sqlite3_zFil
1d00: 65 20 3d 20 30 3b 20 20 20 20 2f 2a 20 46 69 6c  e = 0;    /* Fil
1d10: 65 6e 61 6d 65 20 74 6f 20 61 73 73 6f 63 69 61  ename to associa
1d20: 74 65 20 64 65 62 75 67 20 69 6e 66 6f 20 77 69  te debug info wi
1d30: 74 68 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  th */.int sqlite
1d40: 33 5f 69 4c 69 6e 65 20 3d 20 30 3b 20 20 20 20  3_iLine = 0;    
1d50: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 65 20          /* Line 
1d60: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 62 75 67  number for debug
1d70: 20 69 6e 66 6f 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   info */../*.** 
1d80: 43 68 65 63 6b 20 66 6f 72 20 61 20 73 69 6d 75  Check for a simu
1d90: 6c 61 74 65 64 20 6d 65 6d 6f 72 79 20 61 6c 6c  lated memory all
1da0: 6f 63 61 74 69 6f 6e 20 66 61 69 6c 75 72 65 2e  ocation failure.
1db0: 20 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66    Return true if
1dc0: 0a 2a 2a 20 74 68 65 20 66 61 69 6c 75 72 65 20  .** the failure 
1dd0: 73 68 6f 75 6c 64 20 62 65 20 73 69 6d 75 6c 61  should be simula
1de0: 74 65 64 2e 20 20 52 65 74 75 72 6e 20 66 61 6c  ted.  Return fal
1df0: 73 65 20 74 6f 20 70 72 6f 63 65 65 64 20 61 73  se to proceed as
1e00: 20 6e 6f 72 6d 61 6c 2e 0a 2a 2f 0a 69 6e 74 20   normal..*/.int 
1e10: 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6c 6c 6f  sqlite3TestMallo
1e20: 63 46 61 69 6c 28 29 7b 0a 20 20 69 66 28 20 73  cFail(){.  if( s
1e30: 71 6c 69 74 65 33 5f 69 73 46 61 69 6c 20 29 7b  qlite3_isFail ){
1e40: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
1e50: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
1e60: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3e 3d 30 20  _iMallocFail>=0 
1e70: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69  ){.    sqlite3_i
1e80: 4d 61 6c 6c 6f 63 46 61 69 6c 2d 2d 3b 0a 20 20  MallocFail--;.  
1e90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 4d    if( sqlite3_iM
1ea0: 61 6c 6c 6f 63 46 61 69 6c 3d 3d 30 20 29 7b 0a  allocFail==0 ){.
1eb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d        sqlite3_iM
1ec0: 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 73 71 6c 69  allocFail = sqli
1ed0: 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74  te3_iMallocReset
1ee0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
1ef0: 69 73 46 61 69 6c 20 3d 20 31 3b 0a 20 20 20 20  isFail = 1;.    
1f00: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1f10: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  }.  }.  return 0
1f20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 61  ;.}../*.** The a
1f30: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 69  rgument is a poi
1f40: 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20 62 79  nter returned by
1f50: 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63   sqlite3OsMalloc
1f60: 28 29 20 6f 72 20 78 52 65 61 6c 6c 6f 63 28 29  () or xRealloc()
1f70: 2e 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 74 68  ..** assert() th
1f80: 61 74 20 74 68 65 20 66 69 72 73 74 20 61 6e 64  at the first and
1f90: 20 6c 61 73 74 20 28 54 45 53 54 41 4c 4c 4f 43   last (TESTALLOC
1fa0: 5f 4e 47 55 41 52 44 2a 34 29 20 62 79 74 65 73  _NGUARD*4) bytes
1fb0: 20 61 72 65 20 73 65 74 20 74 6f 20 74 68 65 0a   are set to the.
1fc0: 2a 2a 20 76 61 6c 75 65 73 20 73 65 74 20 62 79  ** values set by
1fd0: 20 74 68 65 20 61 70 70 6c 79 47 75 61 72 64 73   the applyGuards
1fe0: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
1ff0: 73 74 61 74 69 63 20 76 6f 69 64 20 63 68 65 63  static void chec
2000: 6b 47 75 61 72 64 73 28 75 33 32 20 2a 70 29 0a  kGuards(u32 *p).
2010: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61  {.  int i;.  cha
2020: 72 20 2a 7a 41 6c 6c 6f 63 20 3d 20 28 63 68 61  r *zAlloc = (cha
2030: 72 20 2a 29 70 3b 0a 20 20 63 68 61 72 20 2a 7a  r *)p;.  char *z
2040: 3b 0a 0a 20 20 2f 2a 20 46 69 72 73 74 20 73 65  ;..  /* First se
2050: 74 20 6f 66 20 67 75 61 72 64 20 77 6f 72 64 73  t of guard words
2060: 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f   */.  z = &zAllo
2070: 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53  c[TESTALLOC_OFFS
2080: 45 54 5f 47 55 41 52 44 31 28 70 29 5d 3b 0a 20  ET_GUARD1(p)];. 
2090: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 54 45 53 54   for(i=0; i<TEST
20a0: 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 3b 20 69 2b  ALLOC_NGUARD; i+
20b0: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 28  +){.    assert((
20c0: 28 75 33 32 20 2a 29 7a 29 5b 69 5d 3d 3d 30 78  (u32 *)z)[i]==0x
20d0: 64 65 61 64 31 31 32 32 29 3b 0a 20 20 7d 0a 0a  dead1122);.  }..
20e0: 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20    /* Second set 
20f0: 6f 66 20 67 75 61 72 64 20 77 6f 72 64 73 20 2a  of guard words *
2100: 2f 0a 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f 63 5b  /.  z = &zAlloc[
2110: 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54  TESTALLOC_OFFSET
2120: 5f 47 55 41 52 44 32 28 70 29 5d 3b 0a 20 20 66  _GUARD2(p)];.  f
2130: 6f 72 28 69 3d 30 3b 20 69 3c 54 45 53 54 41 4c  or(i=0; i<TESTAL
2140: 4c 4f 43 5f 4e 47 55 41 52 44 3b 20 69 2b 2b 29  LOC_NGUARD; i++)
2150: 7b 0a 20 20 20 20 75 33 32 20 67 75 61 72 64 20  {.    u32 guard 
2160: 3d 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  = 0;.    memcpy(
2170: 26 67 75 61 72 64 2c 20 26 7a 5b 69 2a 73 69 7a  &guard, &z[i*siz
2180: 65 6f 66 28 75 33 32 29 5d 2c 20 73 69 7a 65 6f  eof(u32)], sizeo
2190: 66 28 75 33 32 29 29 3b 0a 20 20 20 20 61 73 73  f(u32));.    ass
21a0: 65 72 74 28 67 75 61 72 64 3d 3d 30 78 64 65 61  ert(guard==0xdea
21b0: 64 33 33 34 34 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  d3344);.  }.}../
21c0: 2a 0a 2a 2a 20 54 68 65 20 61 72 67 75 6d 65 6e  *.** The argumen
21d0: 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 72  t is a pointer r
21e0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
21f0: 65 33 4f 73 4d 61 6c 6c 6f 63 28 29 20 6f 72 20  e3OsMalloc() or 
2200: 52 65 61 6c 6c 6f 63 28 29 2e 20 54 68 65 0a 2a  Realloc(). The.*
2210: 2a 20 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74  * first and last
2220: 20 28 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41   (TESTALLOC_NGUA
2230: 52 44 2a 34 29 20 62 79 74 65 73 20 61 72 65 20  RD*4) bytes are 
2240: 73 65 74 20 74 6f 20 6b 6e 6f 77 6e 20 76 61 6c  set to known val
2250: 75 65 73 20 66 6f 72 20 75 73 65 20 61 73 20 0a  ues for use as .
2260: 2a 2a 20 67 75 61 72 64 2d 70 6f 73 74 73 2e 0a  ** guard-posts..
2270: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2280: 70 70 6c 79 47 75 61 72 64 73 28 75 33 32 20 2a  pplyGuards(u32 *
2290: 70 29 0a 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  p).{.  int i;.  
22a0: 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20  char *z;.  char 
22b0: 2a 7a 41 6c 6c 6f 63 20 3d 20 28 63 68 61 72 20  *zAlloc = (char 
22c0: 2a 29 70 3b 0a 0a 20 20 2f 2a 20 46 69 72 73 74  *)p;..  /* First
22d0: 20 73 65 74 20 6f 66 20 67 75 61 72 64 20 77 6f   set of guard wo
22e0: 72 64 73 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41  rds */.  z = &zA
22f0: 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f  lloc[TESTALLOC_O
2300: 46 46 53 45 54 5f 47 55 41 52 44 31 28 70 29 5d  FFSET_GUARD1(p)]
2310: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 54  ;.  for(i=0; i<T
2320: 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 3b  ESTALLOC_NGUARD;
2330: 20 69 2b 2b 29 7b 0a 20 20 20 20 28 28 75 33 32   i++){.    ((u32
2340: 20 2a 29 7a 29 5b 69 5d 20 3d 20 30 78 64 65 61   *)z)[i] = 0xdea
2350: 64 31 31 32 32 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  d1122;.  }..  /*
2360: 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 67   Second set of g
2370: 75 61 72 64 20 77 6f 72 64 73 20 2a 2f 0a 20 20  uard words */.  
2380: 7a 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45 53 54  z = &zAlloc[TEST
2390: 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 47 55 41  ALLOC_OFFSET_GUA
23a0: 52 44 32 28 70 29 5d 3b 0a 20 20 66 6f 72 28 69  RD2(p)];.  for(i
23b0: 3d 30 3b 20 69 3c 54 45 53 54 41 4c 4c 4f 43 5f  =0; i<TESTALLOC_
23c0: 4e 47 55 41 52 44 3b 20 69 2b 2b 29 7b 0a 20 20  NGUARD; i++){.  
23d0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
23e0: 6e 74 20 67 75 61 72 64 20 3d 20 30 78 64 65 61  nt guard = 0xdea
23f0: 64 33 33 34 34 3b 0a 20 20 20 20 6d 65 6d 63 70  d3344;.    memcp
2400: 79 28 26 7a 5b 69 2a 73 69 7a 65 6f 66 28 75 33  y(&z[i*sizeof(u3
2410: 32 29 5d 2c 20 26 67 75 61 72 64 2c 20 73 69 7a  2)], &guard, siz
2420: 65 6f 66 28 75 33 32 29 29 3b 0a 20 20 7d 0a 0a  eof(u32));.  }..
2430: 20 20 2f 2a 20 4c 69 6e 65 20 6e 75 6d 62 65 72    /* Line number
2440: 20 2a 2f 0a 20 20 7a 20 3d 20 26 28 28 63 68 61   */.  z = &((cha
2450: 72 20 2a 29 7a 29 5b 54 45 53 54 41 4c 4c 4f 43  r *)z)[TESTALLOC
2460: 5f 4e 47 55 41 52 44 2a 73 69 7a 65 6f 66 28 75  _NGUARD*sizeof(u
2470: 33 32 29 5d 3b 20 20 20 20 20 20 20 20 20 20 20  32)];           
2480: 20 20 2f 2a 20 47 75 61 72 64 20 77 6f 72 64 73    /* Guard words
2490: 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f   */.  z = &zAllo
24a0: 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53  c[TESTALLOC_OFFS
24b0: 45 54 5f 4c 49 4e 45 4e 55 4d 42 45 52 28 70 29  ET_LINENUMBER(p)
24c0: 5d 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 2c 20 26  ];.  memcpy(z, &
24d0: 73 71 6c 69 74 65 33 5f 69 4c 69 6e 65 2c 20 73  sqlite3_iLine, s
24e0: 69 7a 65 6f 66 28 75 33 32 29 29 3b 0a 0a 20 20  izeof(u32));..  
24f0: 2f 2a 20 46 69 6c 65 20 6e 61 6d 65 20 2a 2f 0a  /* File name */.
2500: 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45    z = &zAlloc[TE
2510: 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 46  STALLOC_OFFSET_F
2520: 49 4c 45 4e 41 4d 45 28 70 29 5d 3b 0a 20 20 73  ILENAME(p)];.  s
2530: 74 72 6e 63 70 79 28 7a 2c 20 73 71 6c 69 74 65  trncpy(z, sqlite
2540: 33 5f 7a 46 69 6c 65 2c 20 54 45 53 54 41 4c 4c  3_zFile, TESTALL
2550: 4f 43 5f 46 49 4c 45 53 49 5a 45 29 3b 0a 20 20  OC_FILESIZE);.  
2560: 7a 5b 54 45 53 54 41 4c 4c 4f 43 5f 46 49 4c 45  z[TESTALLOC_FILE
2570: 53 49 5a 45 20 2d 20 31 5d 20 3d 20 27 5c 30 27  SIZE - 1] = '\0'
2580: 3b 0a 0a 20 20 2f 2a 20 55 73 65 72 20 73 74 72  ;..  /* User str
2590: 69 6e 67 20 2a 2f 0a 20 20 7a 20 3d 20 26 7a 41  ing */.  z = &zA
25a0: 6c 6c 6f 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f  lloc[TESTALLOC_O
25b0: 46 46 53 45 54 5f 55 53 45 52 28 70 29 5d 3b 0a  FFSET_USER(p)];.
25c0: 20 20 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 69 66    z[0] = 0;.  if
25d0: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
25e0: 5f 69 64 20 29 7b 0a 20 20 20 20 73 74 72 6e 63  _id ){.    strnc
25f0: 70 79 28 7a 2c 20 73 71 6c 69 74 65 33 5f 6d 61  py(z, sqlite3_ma
2600: 6c 6c 6f 63 5f 69 64 2c 20 54 45 53 54 41 4c 4c  lloc_id, TESTALL
2610: 4f 43 5f 55 53 45 52 53 49 5a 45 29 3b 0a 20 20  OC_USERSIZE);.  
2620: 20 20 7a 5b 54 45 53 54 41 4c 4c 4f 43 5f 55 53    z[TESTALLOC_US
2630: 45 52 53 49 5a 45 2d 31 5d 20 3d 20 30 3b 0a 20  ERSIZE-1] = 0;. 
2640: 20 7d 0a 0a 20 20 2f 2a 20 62 61 63 6b 74 72 61   }..  /* backtra
2650: 63 65 28 29 20 73 74 61 63 6b 20 2a 2f 0a 20 20  ce() stack */.  
2660: 7a 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45 53 54  z = &zAlloc[TEST
2670: 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 53 54 41  ALLOC_OFFSET_STA
2680: 43 4b 28 70 29 5d 3b 0a 20 20 62 61 63 6b 74 72  CK(p)];.  backtr
2690: 61 63 65 28 28 76 6f 69 64 20 2a 2a 29 7a 2c 20  ace((void **)z, 
26a0: 54 45 53 54 41 4c 4c 4f 43 5f 53 54 41 43 4b 46  TESTALLOC_STACKF
26b0: 52 41 4d 45 53 29 3b 0a 0a 20 20 2f 2a 20 53 61  RAMES);..  /* Sa
26c0: 6e 69 74 79 20 63 68 65 63 6b 20 74 6f 20 6d 61  nity check to ma
26d0: 6b 65 20 73 75 72 65 20 63 68 65 63 6b 47 75 61  ke sure checkGua
26e0: 72 64 73 28 29 20 69 73 20 77 6f 72 6b 69 6e 67  rds() is working
26f0: 20 2a 2f 0a 20 20 63 68 65 63 6b 47 75 61 72 64   */.  checkGuard
2700: 73 28 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  s(p);.}../*.** T
2710: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
2720: 20 6d 61 6c 6c 6f 63 28 29 65 64 20 70 6f 69 6e   malloc()ed poin
2730: 74 65 72 20 61 73 20 72 65 74 75 72 6e 65 64 20  ter as returned 
2740: 62 79 20 74 68 65 20 74 65 73 74 2d 77 72 61 70  by the test-wrap
2750: 70 65 72 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61  per..** Return a
2760: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2770: 4f 73 20 6c 65 76 65 6c 20 61 6c 6c 6f 63 61 74  Os level allocat
2780: 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ion..*/.static v
2790: 6f 69 64 20 2a 67 65 74 4f 73 50 6f 69 6e 74 65  oid *getOsPointe
27a0: 72 28 76 6f 69 64 20 2a 70 29 0a 7b 0a 20 20 63  r(void *p).{.  c
27b0: 68 61 72 20 2a 7a 20 3d 20 28 63 68 61 72 20 2a  har *z = (char *
27c0: 29 70 3b 0a 20 20 72 65 74 75 72 6e 20 28 76 6f  )p;.  return (vo
27d0: 69 64 20 2a 29 28 26 7a 5b 2d 31 20 2a 20 54 45  id *)(&z[-1 * TE
27e0: 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 44  STALLOC_OFFSET_D
27f0: 41 54 41 28 70 29 5d 29 3b 0a 7d 0a 0a 0a 23 69  ATA(p)]);.}...#i
2800: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
2810: 47 3e 31 0a 2f 2a 0a 2a 2a 20 54 68 65 20 61 72  G>1./*.** The ar
2820: 67 75 6d 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f  gument points to
2830: 20 61 6e 20 4f 73 20 6c 65 76 65 6c 20 61 6c 6c   an Os level all
2840: 6f 63 61 74 69 6f 6e 2e 20 4c 69 6e 6b 20 69 74  ocation. Link it
2850: 20 69 6e 74 6f 20 74 68 65 20 74 68 72 65 61 64   into the thread
2860: 73 20 6c 69 73 74 0a 2a 2a 20 6f 66 20 61 6c 6c  s list.** of all
2870: 6f 63 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61  ocations..*/.sta
2880: 74 69 63 20 76 6f 69 64 20 6c 69 6e 6b 41 6c 6c  tic void linkAll
2890: 6f 63 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 76  oc(void *p){.  v
28a0: 6f 69 64 20 2a 2a 70 70 20 3d 20 28 76 6f 69 64  oid **pp = (void
28b0: 20 2a 2a 29 70 3b 0a 20 20 70 70 5b 30 5d 20 3d   **)p;.  pp[0] =
28c0: 20 30 3b 0a 20 20 70 70 5b 31 5d 20 3d 20 73 71   0;.  pp[1] = sq
28d0: 6c 69 74 65 33 5f 70 46 69 72 73 74 3b 0a 20 20  lite3_pFirst;.  
28e0: 69 66 28 20 73 71 6c 69 74 65 33 5f 70 46 69 72  if( sqlite3_pFir
28f0: 73 74 20 29 7b 0a 20 20 20 20 28 28 76 6f 69 64  st ){.    ((void
2900: 20 2a 2a 29 73 71 6c 69 74 65 33 5f 70 46 69 72   **)sqlite3_pFir
2910: 73 74 29 5b 30 5d 20 3d 20 70 3b 0a 20 20 7d 0a  st)[0] = p;.  }.
2920: 20 20 73 71 6c 69 74 65 33 5f 70 46 69 72 73 74    sqlite3_pFirst
2930: 20 3d 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   = p;.}../*.** T
2940: 68 65 20 61 72 67 75 6d 65 6e 74 20 70 6f 69 6e  he argument poin
2950: 74 73 20 74 6f 20 61 6e 20 4f 73 20 6c 65 76 65  ts to an Os leve
2960: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 55 6e  l allocation. Un
2970: 6c 69 6e 6b 65 20 69 74 20 66 72 6f 6d 20 74 68  linke it from th
2980: 65 20 74 68 72 65 61 64 73 0a 2a 2a 20 6c 69 73  e threads.** lis
2990: 74 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  t of allocations
29a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
29b0: 20 75 6e 6c 69 6e 6b 41 6c 6c 6f 63 28 76 6f 69   unlinkAlloc(voi
29c0: 64 20 2a 70 29 0a 7b 0a 20 20 76 6f 69 64 20 2a  d *p).{.  void *
29d0: 2a 70 70 20 3d 20 28 76 6f 69 64 20 2a 2a 29 70  *pp = (void **)p
29e0: 3b 0a 20 20 69 66 28 20 70 3d 3d 73 71 6c 69 74  ;.  if( p==sqlit
29f0: 65 33 5f 70 46 69 72 73 74 20 29 7b 0a 20 20 20  e3_pFirst ){.   
2a00: 20 61 73 73 65 72 74 28 21 70 70 5b 30 5d 29 3b   assert(!pp[0]);
2a10: 0a 20 20 20 20 61 73 73 65 72 74 28 21 70 70 5b  .    assert(!pp[
2a20: 31 5d 20 7c 7c 20 28 28 76 6f 69 64 20 2a 2a 29  1] || ((void **)
2a30: 28 70 70 5b 31 5d 29 29 5b 30 5d 3d 3d 70 29 3b  (pp[1]))[0]==p);
2a40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70 46 69  .    sqlite3_pFi
2a50: 72 73 74 20 3d 20 70 70 5b 31 5d 3b 0a 20 20 20  rst = pp[1];.   
2a60: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 70 46 69   if( sqlite3_pFi
2a70: 72 73 74 20 29 7b 0a 20 20 20 20 20 20 28 28 76  rst ){.      ((v
2a80: 6f 69 64 20 2a 2a 29 73 71 6c 69 74 65 33 5f 70  oid **)sqlite3_p
2a90: 46 69 72 73 74 29 5b 30 5d 20 3d 20 30 3b 0a 20  First)[0] = 0;. 
2aa0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2ab0: 20 20 76 6f 69 64 20 2a 2a 70 70 72 65 76 20 3d    void **pprev =
2ac0: 20 70 70 5b 30 5d 3b 0a 20 20 20 20 76 6f 69 64   pp[0];.    void
2ad0: 20 2a 2a 70 6e 65 78 74 20 3d 20 70 70 5b 31 5d   **pnext = pp[1]
2ae0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 70 70 72  ;.    assert(ppr
2af0: 65 76 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ev);.    assert(
2b00: 70 70 72 65 76 5b 31 5d 3d 3d 70 29 3b 0a 20 20  pprev[1]==p);.  
2b10: 20 20 70 70 72 65 76 5b 31 5d 20 3d 20 28 76 6f    pprev[1] = (vo
2b20: 69 64 20 2a 29 70 6e 65 78 74 3b 0a 20 20 20 20  id *)pnext;.    
2b30: 69 66 28 20 70 6e 65 78 74 20 29 7b 0a 20 20 20  if( pnext ){.   
2b40: 20 20 20 61 73 73 65 72 74 28 70 6e 65 78 74 5b     assert(pnext[
2b50: 30 5d 3d 3d 70 29 3b 0a 20 20 20 20 20 20 70 6e  0]==p);.      pn
2b60: 65 78 74 5b 30 5d 20 3d 20 28 76 6f 69 64 20 2a  ext[0] = (void *
2b70: 29 70 70 72 65 76 3b 0a 20 20 20 20 7d 0a 20 20  )pprev;.    }.  
2b80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f 69 6e 74  }.}../*.** Point
2b90: 65 72 20 70 20 69 73 20 61 20 70 6f 69 6e 74 65  er p is a pointe
2ba0: 72 20 74 6f 20 61 6e 20 4f 53 20 6c 65 76 65 6c  r to an OS level
2bb0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74   allocation that
2bc0: 20 68 61 73 20 6a 75 73 74 20 62 65 65 6e 0a 2a   has just been.*
2bd0: 2a 20 72 65 61 6c 6c 6f 63 28 29 65 64 2e 20 53  * realloc()ed. S
2be0: 65 74 20 74 68 65 20 6c 69 73 74 20 70 6f 69 6e  et the list poin
2bf0: 74 65 72 73 20 74 68 61 74 20 70 6f 69 6e 74 20  ters that point 
2c00: 74 6f 20 74 68 69 73 20 65 6e 74 72 79 20 74 6f  to this entry to
2c10: 20 69 74 27 73 20 6e 65 77 0a 2a 2a 20 6c 6f 63   it's new.** loc
2c20: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ation..*/.static
2c30: 20 76 6f 69 64 20 72 65 6c 69 6e 6b 41 6c 6c 6f   void relinkAllo
2c40: 63 28 76 6f 69 64 20 2a 70 29 0a 7b 0a 20 20 76  c(void *p).{.  v
2c50: 6f 69 64 20 2a 2a 70 70 20 3d 20 28 76 6f 69 64  oid **pp = (void
2c60: 20 2a 2a 29 70 3b 0a 20 20 69 66 28 20 70 70 5b   **)p;.  if( pp[
2c70: 30 5d 20 29 7b 0a 20 20 20 20 28 28 76 6f 69 64  0] ){.    ((void
2c80: 20 2a 2a 29 28 70 70 5b 30 5d 29 29 5b 31 5d 20   **)(pp[0]))[1] 
2c90: 3d 20 70 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = p;.  }else{.  
2ca0: 20 20 73 71 6c 69 74 65 33 5f 70 46 69 72 73 74    sqlite3_pFirst
2cb0: 20 3d 20 70 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = p;.  }.  if( 
2cc0: 70 70 5b 31 5d 20 29 7b 0a 20 20 20 20 28 28 76  pp[1] ){.    ((v
2cd0: 6f 69 64 20 2a 2a 29 28 70 70 5b 31 5d 29 29 5b  oid **)(pp[1]))[
2ce0: 30 5d 20 3d 20 70 3b 0a 20 20 7d 0a 7d 0a 23 65  0] = p;.  }.}.#e
2cf0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 6c 69 6e 6b  lse.#define link
2d00: 41 6c 6c 6f 63 28 78 29 0a 23 64 65 66 69 6e 65  Alloc(x).#define
2d10: 20 72 65 6c 69 6e 6b 41 6c 6c 6f 63 28 78 29 0a   relinkAlloc(x).
2d20: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6e 6b 41 6c  #define unlinkAl
2d30: 6c 6f 63 28 78 29 0a 23 65 6e 64 69 66 0a 0a 2f  loc(x).#endif../
2d40: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
2d50: 6f 6e 20 73 65 74 73 20 74 68 65 20 72 65 73 75  on sets the resu
2d60: 6c 74 20 6f 66 20 74 68 65 20 54 63 6c 20 69 6e  lt of the Tcl in
2d70: 74 65 72 70 72 65 74 65 72 20 70 61 73 73 65 64  terpreter passed
2d80: 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 0a   as an argument.
2d90: 2a 2a 20 74 6f 20 61 20 6c 69 73 74 20 63 6f 6e  ** to a list con
2da0: 74 61 69 6e 69 6e 67 20 61 6e 20 65 6e 74 72 79  taining an entry
2db0: 20 66 6f 72 20 65 61 63 68 20 63 75 72 72 65 6e   for each curren
2dc0: 74 6c 79 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  tly outstanding 
2dd0: 63 61 6c 6c 20 6d 61 64 65 20 74 6f 20 0a 2a 2a  call made to .**
2de0: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 20 61 6e   sqliteMalloc an
2df0: 64 20 66 72 69 65 6e 64 73 20 62 79 20 74 68 65  d friends by the
2e00: 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e   current thread.
2e10: 20 45 61 63 68 20 6c 69 73 74 20 65 6e 74 72 79   Each list entry
2e20: 20 69 73 20 69 74 73 65 6c 66 20 61 0a 2a 2a 20   is itself a.** 
2e30: 6c 69 73 74 2c 20 63 6f 6e 73 69 73 74 69 6e 67  list, consisting
2e40: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2e50: 67 20 28 69 6e 20 6f 72 64 65 72 29 3a 0a 2a 2a  g (in order):.**
2e60: 0a 2a 2a 20 20 20 20 20 2a 20 54 68 65 20 6e 75  .**     * The nu
2e70: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 6c  mber of bytes al
2e80: 6c 6f 63 61 74 65 64 0a 2a 2a 20 20 20 20 20 2a  located.**     *
2e90: 20 54 68 65 20 5f 5f 46 49 4c 45 5f 5f 20 6d 61   The __FILE__ ma
2ea0: 63 72 6f 20 61 74 20 74 68 65 20 74 69 6d 65 20  cro at the time 
2eb0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 4d 61 6c  of the sqliteMal
2ec0: 6c 6f 63 28 29 20 63 61 6c 6c 2e 0a 2a 2a 20 20  loc() call..**  
2ed0: 20 20 20 2a 20 54 68 65 20 5f 5f 4c 49 4e 45 5f     * The __LINE_
2ee0: 5f 20 6d 61 63 72 6f 20 2e 2e 2e 0a 2a 2a 20 20  _ macro ....**  
2ef0: 20 20 20 2a 20 54 68 65 20 76 61 6c 75 65 20 6f     * The value o
2f00: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61  f the sqlite3_ma
2f10: 6c 6c 6f 63 5f 69 64 20 76 61 72 69 61 62 6c 65  lloc_id variable
2f20: 20 2e 2e 2e 0a 2a 2a 20 20 20 20 20 2a 20 54 68   ....**     * Th
2f30: 65 20 6f 75 74 70 75 74 20 6f 66 20 62 61 63 6b  e output of back
2f40: 74 72 61 63 65 28 29 20 28 69 66 20 61 76 61 69  trace() (if avai
2f50: 6c 61 62 6c 65 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  lable) ....**.**
2f60: 20 54 6f 64 6f 3a 20 57 65 20 63 6f 75 6c 64 20   Todo: We could 
2f70: 68 61 76 65 20 61 20 76 65 72 73 69 6f 6e 20 6f  have a version o
2f80: 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
2f90: 74 68 61 74 20 6f 75 74 70 75 74 73 20 74 6f 20  that outputs to 
2fa0: 73 74 64 6f 75 74 2c 20 0a 2a 2a 20 74 6f 20 64  stdout, .** to d
2fb0: 65 62 75 67 20 6d 65 6d 6f 72 79 20 6c 65 61 6b  ebug memory leak
2fc0: 73 20 77 68 65 6e 20 54 63 6c 20 69 73 20 6e 6f  s when Tcl is no
2fd0: 74 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a  t available..*/.
2fe0: 23 69 66 20 64 65 66 69 6e 65 64 28 54 43 4c 53  #if defined(TCLS
2ff0: 48 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  H) && defined(SQ
3000: 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 53  LITE_DEBUG) && S
3010: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31  QLITE_MEMDEBUG>1
3020: 0a 23 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e 68  .#include <tcl.h
3030: 3e 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 75 74  >.int sqlite3Out
3040: 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28  standingMallocs(
3050: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3060: 72 70 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a  rp){.  void *p;.
3070: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 73 20    Tcl_Obj *pRes 
3080: 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a  = Tcl_NewObj();.
3090: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
30a0: 6e 74 28 70 52 65 73 29 3b 0a 0a 0a 20 20 66 6f  nt(pRes);...  fo
30b0: 72 28 70 3d 73 71 6c 69 74 65 33 5f 70 46 69 72  r(p=sqlite3_pFir
30c0: 73 74 3b 20 70 3b 20 70 3d 28 28 76 6f 69 64 20  st; p; p=((void 
30d0: 2a 2a 29 70 29 5b 31 5d 29 7b 0a 20 20 20 20 54  **)p)[1]){.    T
30e0: 63 6c 5f 4f 62 6a 20 2a 70 45 6e 74 72 79 20 3d  cl_Obj *pEntry =
30f0: 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20   Tcl_NewObj();. 
3100: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 53 74 61     Tcl_Obj *pSta
3110: 63 6b 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28  ck = Tcl_NewObj(
3120: 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a  );.    char *z;.
3130: 20 20 20 20 75 33 32 20 69 4c 69 6e 65 3b 0a 20      u32 iLine;. 
3140: 20 20 20 69 6e 74 20 6e 42 79 74 65 73 20 3d 20     int nBytes = 
3150: 73 71 6c 69 74 65 33 4f 73 41 6c 6c 6f 63 61 74  sqlite3OsAllocat
3160: 69 6f 6e 53 69 7a 65 28 70 29 20 2d 20 54 45 53  ionSize(p) - TES
3170: 54 41 4c 4c 4f 43 5f 4f 56 45 52 48 45 41 44 3b  TALLOC_OVERHEAD;
3180: 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 6c 6f  .    char *zAllo
3190: 63 20 3d 20 28 63 68 61 72 20 2a 29 70 3b 0a 20  c = (char *)p;. 
31a0: 20 20 20 69 6e 74 20 69 3b 0a 0a 20 20 20 20 54     int i;..    T
31b0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
31c0: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 45 6e 74 72  Element(0, pEntr
31d0: 79 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  y, Tcl_NewIntObj
31e0: 28 6e 42 79 74 65 73 29 29 3b 0a 0a 20 20 20 20  (nBytes));..    
31f0: 7a 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45 53 54  z = &zAlloc[TEST
3200: 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 46 49 4c  ALLOC_OFFSET_FIL
3210: 45 4e 41 4d 45 28 70 29 5d 3b 0a 20 20 20 20 54  ENAME(p)];.    T
3220: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
3230: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 45 6e 74 72  Element(0, pEntr
3240: 79 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  y, Tcl_NewString
3250: 4f 62 6a 28 7a 2c 20 2d 31 29 29 3b 0a 0a 20 20  Obj(z, -1));..  
3260: 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f 63 5b 54 45    z = &zAlloc[TE
3270: 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45 54 5f 4c  STALLOC_OFFSET_L
3280: 49 4e 45 4e 55 4d 42 45 52 28 70 29 5d 3b 0a 20  INENUMBER(p)];. 
3290: 20 20 20 6d 65 6d 63 70 79 28 26 69 4c 69 6e 65     memcpy(&iLine
32a0: 2c 20 7a 2c 20 73 69 7a 65 6f 66 28 75 33 32 29  , z, sizeof(u32)
32b0: 29 3b 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  );.    Tcl_ListO
32c0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
32d0: 30 2c 20 70 45 6e 74 72 79 2c 20 54 63 6c 5f 4e  0, pEntry, Tcl_N
32e0: 65 77 49 6e 74 4f 62 6a 28 69 4c 69 6e 65 29 29  ewIntObj(iLine))
32f0: 3b 0a 0a 20 20 20 20 7a 20 3d 20 26 7a 41 6c 6c  ;..    z = &zAll
3300: 6f 63 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46  oc[TESTALLOC_OFF
3310: 53 45 54 5f 55 53 45 52 28 70 29 5d 3b 0a 20 20  SET_USER(p)];.  
3320: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
3330: 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 45  endElement(0, pE
3340: 6e 74 72 79 2c 20 54 63 6c 5f 4e 65 77 53 74 72  ntry, Tcl_NewStr
3350: 69 6e 67 4f 62 6a 28 7a 2c 20 2d 31 29 29 3b 0a  ingObj(z, -1));.
3360: 0a 20 20 20 20 7a 20 3d 20 26 7a 41 6c 6c 6f 63  .    z = &zAlloc
3370: 5b 54 45 53 54 41 4c 4c 4f 43 5f 4f 46 46 53 45  [TESTALLOC_OFFSE
3380: 54 5f 53 54 41 43 4b 28 70 29 5d 3b 0a 20 20 20  T_STACK(p)];.   
3390: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 54 45 53 54   for(i=0; i<TEST
33a0: 41 4c 4c 4f 43 5f 53 54 41 43 4b 46 52 41 4d 45  ALLOC_STACKFRAME
33b0: 53 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63  S; i++){.      c
33c0: 68 61 72 20 7a 48 65 78 5b 31 32 38 5d 3b 0a 20  har zHex[128];. 
33d0: 20 20 20 20 20 73 70 72 69 6e 74 66 28 7a 48 65       sprintf(zHe
33e0: 78 2c 20 22 25 70 22 2c 20 28 28 76 6f 69 64 20  x, "%p", ((void 
33f0: 2a 2a 29 7a 29 5b 69 5d 29 3b 0a 20 20 20 20 20  **)z)[i]);.     
3400: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
3410: 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 53 74  ndElement(0, pSt
3420: 61 63 6b 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ack, Tcl_NewStri
3430: 6e 67 4f 62 6a 28 7a 48 65 78 2c 20 2d 31 29 29  ngObj(zHex, -1))
3440: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 54 63 6c  ;.    }..    Tcl
3450: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
3460: 65 6d 65 6e 74 28 30 2c 20 70 45 6e 74 72 79 2c  ement(0, pEntry,
3470: 20 70 53 74 61 63 6b 29 3b 0a 20 20 20 20 54 63   pStack);.    Tc
3480: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
3490: 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 73 2c 20  lement(0, pRes, 
34a0: 70 45 6e 74 72 79 29 3b 0a 20 20 7d 0a 0a 20 20  pEntry);.  }..  
34b0: 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28  Tcl_ResetResult(
34c0: 69 6e 74 65 72 70 29 3b 0a 20 20 54 63 6c 5f 53  interp);.  Tcl_S
34d0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
34e0: 72 70 2c 20 70 52 65 73 29 3b 0a 20 20 54 63 6c  rp, pRes);.  Tcl
34f0: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 52  _DecrRefCount(pR
3500: 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  es);.  return TC
3510: 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  L_OK;.}.#endif..
3520: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
3530: 65 20 74 65 73 74 20 6c 61 79 65 72 27 73 20 77  e test layer's w
3540: 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 73 71  rapper around sq
3550: 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63 28 29 2e  lite3OsMalloc().
3560: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3570: 2a 20 4f 53 4d 41 4c 4c 4f 43 28 69 6e 74 20 6e  * OSMALLOC(int n
3580: 29 7b 0a 20 20 73 71 6c 69 74 65 33 4f 73 45 6e  ){.  sqlite3OsEn
3590: 74 65 72 4d 75 74 65 78 28 29 3b 0a 23 69 66 64  terMutex();.#ifd
35a0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
35b0: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
35c0: 4e 54 0a 20 20 73 71 6c 69 74 65 33 5f 6e 4d 61  NT.  sqlite3_nMa
35d0: 78 41 6c 6c 6f 63 20 3d 20 0a 20 20 20 20 20 20  xAlloc = .      
35e0: 4d 41 58 28 73 71 6c 69 74 65 33 5f 6e 4d 61 78  MAX(sqlite3_nMax
35f0: 41 6c 6c 6f 63 2c 20 73 71 6c 69 74 65 33 54 68  Alloc, sqlite3Th
3600: 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79  readDataReadOnly
3610: 28 29 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 23 65 6e  ()->nAlloc);.#en
3620: 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 21 73  dif.  assert( !s
3630: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69 73  qlite3_mallocDis
3640: 61 6c 6c 6f 77 65 64 20 29 3b 0a 20 20 69 66 28  allowed );.  if(
3650: 20 21 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6c   !sqlite3TestMal
3660: 6c 6f 63 46 61 69 6c 28 29 20 29 7b 0a 20 20 20  locFail() ){.   
3670: 20 75 33 32 20 2a 70 3b 0a 20 20 20 20 70 20 3d   u32 *p;.    p =
3680: 20 28 75 33 32 20 2a 29 73 71 6c 69 74 65 33 4f   (u32 *)sqlite3O
3690: 73 4d 61 6c 6c 6f 63 28 6e 20 2b 20 54 45 53 54  sMalloc(n + TEST
36a0: 41 4c 4c 4f 43 5f 4f 56 45 52 48 45 41 44 29 3b  ALLOC_OVERHEAD);
36b0: 0a 20 20 20 20 61 73 73 65 72 74 28 70 29 3b 0a  .    assert(p);.
36c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c      sqlite3_nMal
36d0: 6c 6f 63 2b 2b 3b 0a 20 20 20 20 61 70 70 6c 79  loc++;.    apply
36e0: 47 75 61 72 64 73 28 70 29 3b 0a 20 20 20 20 6c  Guards(p);.    l
36f0: 69 6e 6b 41 6c 6c 6f 63 28 70 29 3b 0a 20 20 20  inkAlloc(p);.   
3700: 20 73 71 6c 69 74 65 33 4f 73 4c 65 61 76 65 4d   sqlite3OsLeaveM
3710: 75 74 65 78 28 29 3b 0a 20 20 20 20 72 65 74 75  utex();.    retu
3720: 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 70 5b 54  rn (void *)(&p[T
3730: 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52 44 20  ESTALLOC_NGUARD 
3740: 2b 20 32 2a 73 69 7a 65 6f 66 28 76 6f 69 64 20  + 2*sizeof(void 
3750: 2a 29 2f 73 69 7a 65 6f 66 28 75 33 32 29 5d 29  *)/sizeof(u32)])
3760: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f  ;.  }.  sqlite3O
3770: 73 4c 65 61 76 65 4d 75 74 65 78 28 29 3b 0a 20  sLeaveMutex();. 
3780: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 73 74   return 0;.}..st
3790: 61 74 69 63 20 69 6e 74 20 4f 53 53 49 5a 45 4f  atic int OSSIZEO
37a0: 46 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 69 66  F(void *p){.  if
37b0: 28 20 70 20 29 7b 0a 20 20 20 20 75 33 32 20 2a  ( p ){.    u32 *
37c0: 70 4f 73 20 3d 20 28 75 33 32 20 2a 29 67 65 74  pOs = (u32 *)get
37d0: 4f 73 50 6f 69 6e 74 65 72 28 70 29 3b 0a 20 20  OsPointer(p);.  
37e0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
37f0: 4f 73 41 6c 6c 6f 63 61 74 69 6f 6e 53 69 7a 65  OsAllocationSize
3800: 28 70 4f 73 29 20 2d 20 54 45 53 54 41 4c 4c 4f  (pOs) - TESTALLO
3810: 43 5f 4f 56 45 52 48 45 41 44 3b 0a 20 20 7d 0a  C_OVERHEAD;.  }.
3820: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
3830: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
3840: 20 74 65 73 74 20 6c 61 79 65 72 27 73 20 77 72   test layer's wr
3850: 61 70 70 65 72 20 61 72 6f 75 6e 64 20 73 71 6c  apper around sql
3860: 69 74 65 33 4f 73 46 72 65 65 28 29 2e 20 54 68  ite3OsFree(). Th
3870: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 0a  e argument is a.
3880: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
3890: 65 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  e space allocate
38a0: 64 20 66 6f 72 20 74 68 65 20 61 70 70 6c 69 63  d for the applic
38b0: 61 74 69 6f 6e 20 74 6f 20 75 73 65 2e 0a 2a 2f  ation to use..*/
38c0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 4f 53 46  .static void OSF
38d0: 52 45 45 28 76 6f 69 64 20 2a 70 46 72 65 65 29  REE(void *pFree)
38e0: 7b 0a 20 20 75 33 32 20 2a 70 3b 20 20 20 20 20  {.  u32 *p;     
38f0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
3900: 6f 20 74 68 65 20 4f 53 2d 6c 61 79 65 72 20 61  o the OS-layer a
3910: 6c 6c 6f 63 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  llocation */.  s
3920: 71 6c 69 74 65 33 4f 73 45 6e 74 65 72 4d 75 74  qlite3OsEnterMut
3930: 65 78 28 29 3b 0a 20 20 70 20 3d 20 28 75 33 32  ex();.  p = (u32
3940: 20 2a 29 67 65 74 4f 73 50 6f 69 6e 74 65 72 28   *)getOsPointer(
3950: 70 46 72 65 65 29 3b 0a 20 20 63 68 65 63 6b 47  pFree);.  checkG
3960: 75 61 72 64 73 28 70 29 3b 0a 20 20 75 6e 6c 69  uards(p);.  unli
3970: 6e 6b 41 6c 6c 6f 63 28 70 29 3b 0a 20 20 6d 65  nkAlloc(p);.  me
3980: 6d 73 65 74 28 70 46 72 65 65 2c 20 30 78 35 35  mset(pFree, 0x55
3990: 2c 20 4f 53 53 49 5a 45 4f 46 28 70 46 72 65 65  , OSSIZEOF(pFree
39a0: 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 4f 73 46  ));.  sqlite3OsF
39b0: 72 65 65 28 70 29 3b 0a 20 20 73 71 6c 69 74 65  ree(p);.  sqlite
39c0: 33 5f 6e 46 72 65 65 2b 2b 3b 0a 20 20 73 71 6c  3_nFree++;.  sql
39d0: 69 74 65 33 4f 73 4c 65 61 76 65 4d 75 74 65 78  ite3OsLeaveMutex
39e0: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  ();.}../*.** Thi
39f0: 73 20 69 73 20 74 68 65 20 74 65 73 74 20 6c 61  s is the test la
3a00: 79 65 72 27 73 20 77 72 61 70 70 65 72 20 61 72  yer's wrapper ar
3a10: 6f 75 6e 64 20 73 71 6c 69 74 65 33 4f 73 52 65  ound sqlite3OsRe
3a20: 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61 74  alloc()..*/.stat
3a30: 69 63 20 76 6f 69 64 20 2a 20 4f 53 52 45 41 4c  ic void * OSREAL
3a40: 4c 4f 43 28 76 6f 69 64 20 2a 70 52 65 61 6c 6c  LOC(void *pReall
3a50: 6f 63 2c 20 69 6e 74 20 6e 29 7b 0a 23 69 66 64  oc, int n){.#ifd
3a60: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
3a70: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
3a80: 4e 54 0a 20 20 73 71 6c 69 74 65 33 5f 6e 4d 61  NT.  sqlite3_nMa
3a90: 78 41 6c 6c 6f 63 20 3d 20 0a 20 20 20 20 20 20  xAlloc = .      
3aa0: 4d 41 58 28 73 71 6c 69 74 65 33 5f 6e 4d 61 78  MAX(sqlite3_nMax
3ab0: 41 6c 6c 6f 63 2c 20 73 71 6c 69 74 65 33 54 68  Alloc, sqlite3Th
3ac0: 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79  readDataReadOnly
3ad0: 28 29 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 23 65 6e  ()->nAlloc);.#en
3ae0: 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 21 73  dif.  assert( !s
3af0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69 73  qlite3_mallocDis
3b00: 61 6c 6c 6f 77 65 64 20 29 3b 0a 20 20 69 66 28  allowed );.  if(
3b10: 20 21 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6c   !sqlite3TestMal
3b20: 6c 6f 63 46 61 69 6c 28 29 20 29 7b 0a 20 20 20  locFail() ){.   
3b30: 20 75 33 32 20 2a 70 20 3d 20 28 75 33 32 20 2a   u32 *p = (u32 *
3b40: 29 67 65 74 4f 73 50 6f 69 6e 74 65 72 28 70 52  )getOsPointer(pR
3b50: 65 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 63 68 65  ealloc);.    che
3b60: 63 6b 47 75 61 72 64 73 28 70 29 3b 0a 20 20 20  ckGuards(p);.   
3b70: 20 70 20 3d 20 73 71 6c 69 74 65 33 4f 73 52 65   p = sqlite3OsRe
3b80: 61 6c 6c 6f 63 28 70 2c 20 6e 20 2b 20 54 45 53  alloc(p, n + TES
3b90: 54 41 4c 4c 4f 43 5f 4f 56 45 52 48 45 41 44 29  TALLOC_OVERHEAD)
3ba0: 3b 0a 20 20 20 20 61 70 70 6c 79 47 75 61 72 64  ;.    applyGuard
3bb0: 73 28 70 29 3b 0a 20 20 20 20 72 65 6c 69 6e 6b  s(p);.    relink
3bc0: 41 6c 6c 6f 63 28 70 29 3b 0a 20 20 20 20 72 65  Alloc(p);.    re
3bd0: 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 70  turn (void *)(&p
3be0: 5b 54 45 53 54 41 4c 4c 4f 43 5f 4e 47 55 41 52  [TESTALLOC_NGUAR
3bf0: 44 20 2b 20 32 2a 73 69 7a 65 6f 66 28 76 6f 69  D + 2*sizeof(voi
3c00: 64 20 2a 29 2f 73 69 7a 65 6f 66 28 75 33 32 29  d *)/sizeof(u32)
3c10: 5d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ]);.  }.  return
3c20: 20 30 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f   0;.}..static vo
3c30: 69 64 20 4f 53 4d 41 4c 4c 4f 43 5f 46 41 49 4c  id OSMALLOC_FAIL
3c40: 45 44 28 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  ED(){.  sqlite3_
3c50: 69 73 46 61 69 6c 20 3d 20 30 3b 0a 7d 0a 0a 23  isFail = 0;.}..#
3c60: 65 6c 73 65 0a 2f 2a 20 44 65 66 69 6e 65 20 6d  else./* Define m
3c70: 61 63 72 6f 73 20 74 6f 20 63 61 6c 6c 20 74 68  acros to call th
3c80: 65 20 73 71 6c 69 74 65 33 4f 73 58 58 58 20 69  e sqlite3OsXXX i
3c90: 6e 74 65 72 66 61 63 65 20 64 69 72 65 63 74 6c  nterface directl
3ca0: 79 20 69 66 20 0a 2a 2a 20 74 68 65 20 53 51 4c  y if .** the SQL
3cb0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 6d 61 63  ITE_MEMDEBUG mac
3cc0: 72 6f 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ro is not define
3cd0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 53  d..*/.#define OS
3ce0: 4d 41 4c 4c 4f 43 28 78 29 20 20 20 20 20 20 20  MALLOC(x)       
3cf0: 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63   sqlite3OsMalloc
3d00: 28 78 29 0a 23 64 65 66 69 6e 65 20 4f 53 52 45  (x).#define OSRE
3d10: 41 4c 4c 4f 43 28 78 2c 79 29 20 20 20 20 20 73  ALLOC(x,y)     s
3d20: 71 6c 69 74 65 33 4f 73 52 65 61 6c 6c 6f 63 28  qlite3OsRealloc(
3d30: 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 4f 53 46  x,y).#define OSF
3d40: 52 45 45 28 78 29 20 20 20 20 20 20 20 20 20 20  REE(x)          
3d50: 73 71 6c 69 74 65 33 4f 73 46 72 65 65 28 78 29  sqlite3OsFree(x)
3d60: 0a 23 64 65 66 69 6e 65 20 4f 53 53 49 5a 45 4f  .#define OSSIZEO
3d70: 46 28 78 29 20 20 20 20 20 20 20 20 73 71 6c 69  F(x)        sqli
3d80: 74 65 33 4f 73 41 6c 6c 6f 63 61 74 69 6f 6e 53  te3OsAllocationS
3d90: 69 7a 65 28 78 29 0a 23 64 65 66 69 6e 65 20 4f  ize(x).#define O
3da0: 53 4d 41 4c 4c 4f 43 5f 46 41 49 4c 45 44 28 29  SMALLOC_FAILED()
3db0: 0a 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  ..#endif  /* SQL
3dc0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 2a 2f 0a  ITE_MEMDEBUG */.
3dd0: 2f 2a 0a 2a 2a 20 45 6e 64 20 63 6f 64 65 20 66  /*.** End code f
3de0: 6f 72 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  or memory alloca
3df0: 74 69 6f 6e 20 73 79 73 74 65 6d 20 74 65 73 74  tion system test
3e00: 20 6c 61 79 65 72 2e 0a 2a 2a 2d 2d 2d 2d 2d 2d   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 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ----*/../*.** Th
3e60: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61  is routine is ca
3e70: 6c 6c 65 64 20 77 68 65 6e 20 77 65 20 61 72 65  lled when we are
3e80: 20 61 62 6f 75 74 20 74 6f 20 61 6c 6c 6f 63 61   about to alloca
3e90: 74 65 20 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20  te n additional 
3ea0: 62 79 74 65 73 0a 2a 2a 20 6f 66 20 6d 65 6d 6f  bytes.** of memo
3eb0: 72 79 2e 20 20 49 66 20 74 68 65 20 6e 65 77 20  ry.  If the new 
3ec0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 69 6c 6c 20  allocation will 
3ed0: 70 75 74 20 69 73 20 6f 76 65 72 20 74 68 65 20  put is over the 
3ee0: 73 6f 66 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 0a  soft allocation.
3ef0: 2a 2a 20 6c 69 6d 69 74 2c 20 74 68 65 6e 20 69  ** limit, then i
3f00: 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 72 65  nvoke sqlite3_re
3f10: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 74  lease_memory() t
3f20: 6f 20 74 72 79 20 74 6f 20 72 65 6c 65 61 73 65  o try to release
3f30: 20 73 6f 6d 65 0a 2a 2a 20 6d 65 6d 6f 72 79 20   some.** memory 
3f40: 62 65 66 6f 72 65 20 63 6f 6e 74 69 6e 75 69 6e  before continuin
3f50: 67 20 77 69 74 68 20 74 68 65 20 61 6c 6c 6f 63  g with the alloc
3f60: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
3f70: 73 20 72 6f 75 74 69 6e 65 20 61 6c 73 6f 20 6d  s routine also m
3f80: 61 6b 65 73 20 73 75 72 65 20 74 68 61 74 20 74  akes sure that t
3f90: 68 65 20 74 68 72 65 61 64 2d 73 70 65 63 69 66  he thread-specif
3fa0: 69 63 2d 64 61 74 61 20 28 54 53 44 29 20 68 61  ic-data (TSD) ha
3fb0: 73 0a 2a 2a 20 62 65 20 61 6c 6c 6f 63 61 74 65  s.** be allocate
3fc0: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 6e 6f  d.  If it has no
3fd0: 74 20 61 6e 64 20 63 61 6e 20 6e 6f 74 20 62 65  t and can not be
3fe0: 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
3ff0: 20 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65   return.** false
4000: 2e 20 20 54 68 65 20 75 70 64 61 74 65 4d 65 6d  .  The updateMem
4010: 6f 72 79 55 73 65 64 43 6f 75 6e 74 28 29 20 72  oryUsedCount() r
4020: 6f 75 74 69 6e 65 20 62 65 6c 6f 77 20 77 69 6c  outine below wil
4030: 6c 20 64 65 61 6c 6c 6f 63 61 74 65 0a 2a 2a 20  l deallocate.** 
4040: 74 68 65 20 54 53 44 20 69 66 20 69 74 20 6f 75  the TSD if it ou
4050: 67 68 74 20 74 6f 20 62 65 2e 0a 2a 2a 0a 2a 2a  ght to be..**.**
4060: 20 49 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   If SQLITE_ENABL
4070: 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
4080: 45 4e 54 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  ENT is not defin
4090: 65 64 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ed, this routine
40a0: 20 69 73 0a 2a 2a 20 61 20 6e 6f 2d 6f 70 0a 2a   is.** a no-op.*
40b0: 2f 20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  / .#ifdef SQLITE
40c0: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d  _ENABLE_MEMORY_M
40d0: 41 4e 41 47 45 4d 45 4e 54 0a 73 74 61 74 69 63  ANAGEMENT.static
40e0: 20 69 6e 74 20 65 6e 66 6f 72 63 65 53 6f 66 74   int enforceSoft
40f0: 4c 69 6d 69 74 28 69 6e 74 20 6e 29 7b 0a 20 20  Limit(int n){.  
4100: 54 68 72 65 61 64 44 61 74 61 20 2a 70 54 73 64  ThreadData *pTsd
4110: 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64   = sqlite3Thread
4120: 44 61 74 61 28 29 3b 0a 20 20 69 66 28 20 70 54  Data();.  if( pT
4130: 73 64 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  sd==0 ){.    ret
4140: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  urn 0;.  }.  ass
4150: 65 72 74 28 20 70 54 73 64 2d 3e 6e 41 6c 6c 6f  ert( pTsd->nAllo
4160: 63 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 6e 3e  c>=0 );.  if( n>
4170: 30 20 26 26 20 70 54 73 64 2d 3e 6e 53 6f 66 74  0 && pTsd->nSoft
4180: 48 65 61 70 4c 69 6d 69 74 3e 30 20 29 7b 0a 20  HeapLimit>0 ){. 
4190: 20 20 20 77 68 69 6c 65 28 20 70 54 73 64 2d 3e     while( pTsd->
41a0: 6e 41 6c 6c 6f 63 2b 6e 3e 70 54 73 64 2d 3e 6e  nAlloc+n>pTsd->n
41b0: 53 6f 66 74 48 65 61 70 4c 69 6d 69 74 20 26 26  SoftHeapLimit &&
41c0: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
41d0: 5f 6d 65 6d 6f 72 79 28 6e 29 20 29 7b 7d 0a 20  _memory(n) ){}. 
41e0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
41f0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4200: 65 6e 66 6f 72 63 65 53 6f 66 74 4c 69 6d 69 74  enforceSoftLimit
4210: 28 58 29 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  1.#endif../
4220: 2a 0a 2a 2a 20 55 70 64 61 74 65 20 74 68 65 20  *.** Update the 
4230: 63 6f 75 6e 74 20 6f 66 20 74 6f 74 61 6c 20 6f  count of total o
4240: 75 74 73 74 61 6e 64 69 6e 67 20 6d 65 6d 6f 72  utstanding memor
4250: 79 20 74 68 61 74 20 69 73 20 68 65 6c 64 20 69  y that is held i
4260: 6e 0a 2a 2a 20 74 68 72 65 61 64 2d 73 70 65 63  n.** thread-spec
4270: 69 66 69 63 2d 64 61 74 61 20 28 54 53 44 29 2e  ific-data (TSD).
4280: 20 20 49 66 20 61 66 74 65 72 20 74 68 69 73 20    If after this 
4290: 75 70 64 61 74 65 20 74 68 65 20 54 53 44 20 69  update the TSD i
42a0: 73 0a 2a 2a 20 6e 6f 20 6c 6f 6e 67 65 72 20 62  s.** no longer b
42b0: 65 69 6e 67 20 75 73 65 64 2c 20 74 68 65 6e 20  eing used, then 
42c0: 64 65 61 6c 6c 6f 63 61 74 65 20 69 74 2e 0a 2a  deallocate it..*
42d0: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 45  *.** If SQLITE_E
42e0: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
42f0: 41 47 45 4d 45 4e 54 20 69 73 20 6e 6f 74 20 64  AGEMENT is not d
4300: 65 66 69 6e 65 64 2c 20 74 68 69 73 20 72 6f 75  efined, this rou
4310: 74 69 6e 65 20 69 73 0a 2a 2a 20 61 20 6e 6f 2d  tine is.** a no-
4320: 6f 70 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  op.*/.#ifdef SQL
4330: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
4340: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 73 74 61  Y_MANAGEMENT.sta
4350: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
4360: 65 6d 6f 72 79 55 73 65 64 43 6f 75 6e 74 28 69  emoryUsedCount(i
4370: 6e 74 20 6e 29 7b 0a 20 20 54 68 72 65 61 64 44  nt n){.  ThreadD
4380: 61 74 61 20 2a 70 54 73 64 20 3d 20 73 71 6c 69  ata *pTsd = sqli
4390: 74 65 33 54 68 72 65 61 64 44 61 74 61 28 29 3b  te3ThreadData();
43a0: 0a 20 20 69 66 28 20 70 54 73 64 20 29 7b 0a 20  .  if( pTsd ){. 
43b0: 20 20 20 70 54 73 64 2d 3e 6e 41 6c 6c 6f 63 20     pTsd->nAlloc 
43c0: 2b 3d 20 6e 3b 0a 20 20 20 20 61 73 73 65 72 74  += n;.    assert
43d0: 28 20 70 54 73 64 2d 3e 6e 41 6c 6c 6f 63 3e 3d  ( pTsd->nAlloc>=
43e0: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 54 73  0 );.    if( pTs
43f0: 64 2d 3e 6e 41 6c 6c 6f 63 3d 3d 30 20 26 26 20  d->nAlloc==0 && 
4400: 70 54 73 64 2d 3e 6e 53 6f 66 74 48 65 61 70 4c  pTsd->nSoftHeapL
4410: 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  imit==0 ){.     
4420: 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
4430: 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 20  hreadData();.   
4440: 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23   }.  }.}.#else.#
4450: 64 65 66 69 6e 65 20 75 70 64 61 74 65 4d 65 6d  define updateMem
4460: 6f 72 79 55 73 65 64 43 6f 75 6e 74 28 78 29 20  oryUsedCount(x) 
4470: 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
4480: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63  dif../*.** Alloc
4490: 61 74 65 20 61 6e 64 20 72 65 74 75 72 6e 20 4e  ate and return N
44a0: 20 62 79 74 65 73 20 6f 66 20 75 6e 69 6e 69 74   bytes of uninit
44b0: 69 61 6c 69 73 65 64 20 6d 65 6d 6f 72 79 20 62  ialised memory b
44c0: 79 20 63 61 6c 6c 69 6e 67 0a 2a 2a 20 73 71 6c  y calling.** sql
44d0: 69 74 65 33 4f 73 4d 61 6c 6c 6f 63 28 29 2e 20  ite3OsMalloc(). 
44e0: 49 66 20 74 68 65 20 4d 61 6c 6c 6f 63 28 29 20  If the Malloc() 
44f0: 63 61 6c 6c 20 66 61 69 6c 73 2c 20 61 74 74 65  call fails, atte
4500: 6d 70 74 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f  mpt to free memo
4510: 72 79 20 0a 2a 2a 20 62 79 20 63 61 6c 6c 69 6e  ry .** by callin
4520: 67 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  g sqlite3_releas
4530: 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 2a 2f 0a 76  e_memory()..*/.v
4540: 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
4550: 6f 63 52 61 77 28 69 6e 74 20 6e 2c 20 69 6e 74  ocRaw(int n, int
4560: 20 64 6f 4d 65 6d 4d 61 6e 61 67 65 29 7b 0a 20   doMemManage){. 
4570: 20 76 6f 69 64 20 2a 70 20 3d 20 30 3b 0a 20 20   void *p = 0;.  
4580: 69 66 28 20 6e 3e 30 20 26 26 20 21 73 71 6c 69  if( n>0 && !sqli
4590: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
45a0: 29 20 26 26 20 28 21 64 6f 4d 65 6d 4d 61 6e 61  ) && (!doMemMana
45b0: 67 65 20 7c 7c 20 65 6e 66 6f 72 63 65 53 6f 66  ge || enforceSof
45c0: 74 4c 69 6d 69 74 28 6e 29 29 20 29 7b 0a 20 20  tLimit(n)) ){.  
45d0: 20 20 77 68 69 6c 65 28 20 28 70 20 3d 20 4f 53    while( (p = OS
45e0: 4d 41 4c 4c 4f 43 28 6e 29 29 3d 3d 30 20 26 26  MALLOC(n))==0 &&
45f0: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
4600: 5f 6d 65 6d 6f 72 79 28 6e 29 20 29 7b 7d 0a 20  _memory(n) ){}. 
4610: 20 20 20 69 66 28 20 21 70 20 29 7b 0a 20 20 20     if( !p ){.   
4620: 20 20 20 73 71 6c 69 74 65 33 46 61 69 6c 65 64     sqlite3Failed
4630: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20  Malloc();.      
4640: 4f 53 4d 41 4c 4c 4f 43 5f 46 41 49 4c 45 44 28  OSMALLOC_FAILED(
4650: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
4660: 20 64 6f 4d 65 6d 4d 61 6e 61 67 65 20 29 7b 0a   doMemManage ){.
4670: 20 20 20 20 20 20 75 70 64 61 74 65 4d 65 6d 6f        updateMemo
4680: 72 79 55 73 65 64 43 6f 75 6e 74 28 4f 53 53 49  ryUsedCount(OSSI
4690: 5a 45 4f 46 28 70 29 29 3b 0a 20 20 20 20 7d 0a  ZEOF(p));.    }.
46a0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a    }.  return p;.
46b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 69 7a 65 20  }../*.** Resize 
46c0: 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61  the allocation a
46d0: 74 20 70 20 74 6f 20 6e 20 62 79 74 65 73 20 62  t p to n bytes b
46e0: 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  y calling sqlite
46f0: 33 4f 73 52 65 61 6c 6c 6f 63 28 29 2e 20 54 68  3OsRealloc(). Th
4700: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  e.** pointer to 
4710: 74 68 65 20 6e 65 77 20 61 6c 6c 6f 63 61 74 69  the new allocati
4720: 6f 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  on is returned. 
4730: 20 49 66 20 74 68 65 20 52 65 61 6c 6c 6f 63 28   If the Realloc(
4740: 29 20 63 61 6c 6c 20 66 61 69 6c 73 2c 0a 2a 2a  ) call fails,.**
4750: 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72 65 65   attempt to free
4760: 20 6d 65 6d 6f 72 79 20 62 79 20 63 61 6c 6c 69   memory by calli
4770: 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  ng sqlite3_relea
4780: 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 2a 2f 0a  se_memory()..*/.
4790: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
47a0: 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 2c 20 69 6e  lloc(void *p, in
47b0: 74 20 6e 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  t n){.  if( sqli
47c0: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
47d0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
47e0: 30 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 70  0;.  }..  if( !p
47f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73   ){.    return s
4800: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 6e 2c 20  qlite3Malloc(n, 
4810: 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1);.  }else{.   
4820: 20 76 6f 69 64 20 2a 6e 70 20 3d 20 30 3b 0a 23   void *np = 0;.#
4830: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
4840: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
4850: 45 4d 45 4e 54 0a 20 20 20 20 69 6e 74 20 6f 72  EMENT.    int or
4860: 69 67 53 69 7a 65 20 3d 20 4f 53 53 49 5a 45 4f  igSize = OSSIZEO
4870: 46 28 70 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  F(p);.#endif.   
4880: 20 69 66 28 20 65 6e 66 6f 72 63 65 53 6f 66 74   if( enforceSoft
4890: 4c 69 6d 69 74 28 6e 20 2d 20 6f 72 69 67 53 69  Limit(n - origSi
48a0: 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 77 68 69  ze) ){.      whi
48b0: 6c 65 28 20 28 6e 70 20 3d 20 4f 53 52 45 41 4c  le( (np = OSREAL
48c0: 4c 4f 43 28 70 2c 20 6e 29 29 3d 3d 30 20 26 26  LOC(p, n))==0 &&
48d0: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
48e0: 5f 6d 65 6d 6f 72 79 28 6e 29 20 29 7b 7d 0a 20  _memory(n) ){}. 
48f0: 20 20 20 20 20 69 66 28 20 21 6e 70 20 29 7b 0a       if( !np ){.
4900: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 46          sqlite3F
4910: 61 69 6c 65 64 4d 61 6c 6c 6f 63 28 29 3b 0a 20  ailedMalloc();. 
4920: 20 20 20 20 20 20 20 4f 53 4d 41 4c 4c 4f 43 5f         OSMALLOC_
4930: 46 41 49 4c 45 44 28 29 3b 0a 20 20 20 20 20 20  FAILED();.      
4940: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75  }else{.        u
4950: 70 64 61 74 65 4d 65 6d 6f 72 79 55 73 65 64 43  pdateMemoryUsedC
4960: 6f 75 6e 74 28 4f 53 53 49 5a 45 4f 46 28 6e 70  ount(OSSIZEOF(np
4970: 29 20 2d 20 6f 72 69 67 53 69 7a 65 29 3b 0a 20  ) - origSize);. 
4980: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4990: 20 72 65 74 75 72 6e 20 6e 70 3b 0a 20 20 7d 0a   return np;.  }.
49a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 74 68  }../*.** Free th
49b0: 65 20 6d 65 6d 6f 72 79 20 70 6f 69 6e 74 65 64  e memory pointed
49c0: 20 74 6f 20 62 79 20 70 2e 20 70 20 6d 75 73 74   to by p. p must
49d0: 20 62 65 20 65 69 74 68 65 72 20 61 20 4e 55 4c   be either a NUL
49e0: 4c 20 70 6f 69 6e 74 65 72 20 6f 72 20 61 20 0a  L pointer or a .
49f0: 2a 2a 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  ** value returne
4a00: 64 20 62 79 20 61 20 70 72 65 76 69 6f 75 73 20  d by a previous 
4a10: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d  call to sqlite3M
4a20: 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74  alloc() or sqlit
4a30: 65 33 52 65 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a  e3Realloc()..*/.
4a40: 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
4a50: 58 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 69 66  X(void *p){.  if
4a60: 28 20 70 20 29 7b 0a 20 20 20 20 75 70 64 61 74  ( p ){.    updat
4a70: 65 4d 65 6d 6f 72 79 55 73 65 64 43 6f 75 6e 74  eMemoryUsedCount
4a80: 28 30 20 2d 20 4f 53 53 49 5a 45 4f 46 28 70 29  (0 - OSSIZEOF(p)
4a90: 29 3b 0a 20 20 20 20 4f 53 46 52 45 45 28 70 29  );.    OSFREE(p)
4aa0: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  ;.  }.}../*.** A
4ab0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 71 6c 69   version of sqli
4ac0: 74 65 4d 61 6c 6c 6f 63 28 29 20 74 68 61 74 20  teMalloc() that 
4ad0: 69 73 20 61 6c 77 61 79 73 20 61 20 66 75 6e 63  is always a func
4ae0: 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d 61 63 72  tion, not a macr
4af0: 6f 2e 0a 2a 2a 20 43 75 72 72 65 6e 74 6c 79 2c  o..** Currently,
4b00: 20 74 68 69 73 20 69 73 20 75 73 65 64 20 6f 6e   this is used on
4b10: 6c 79 20 74 6f 20 61 6c 6c 6f 63 20 74 6f 20 61  ly to alloc to a
4b20: 6c 6c 6f 63 61 74 65 20 74 68 65 20 70 61 72 73  llocate the pars
4b30: 65 72 20 65 6e 67 69 6e 65 2e 0a 2a 2f 0a 76 6f  er engine..*/.vo
4b40: 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
4b50: 63 58 28 69 6e 74 20 6e 29 7b 0a 20 20 72 65 74  cX(int n){.  ret
4b60: 75 72 6e 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  urn sqliteMalloc
4b70: 28 6e 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71  (n);.}../*.** sq
4b80: 6c 69 74 65 33 4d 61 6c 6c 6f 63 0a 2a 2a 20 73  lite3Malloc.** s
4b90: 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46  qlite3ReallocOrF
4ba0: 72 65 65 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  ree.**.** These 
4bb0: 74 77 6f 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e  two are implemen
4bc0: 74 65 64 20 61 73 20 77 72 61 70 70 65 72 73 20  ted as wrappers 
4bd0: 61 72 6f 75 6e 64 20 73 71 6c 69 74 65 33 4d 61  around sqlite3Ma
4be0: 6c 6c 6f 63 52 61 77 28 29 2c 20 0a 2a 2a 20 73  llocRaw(), .** s
4bf0: 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 29 20  qlite3Realloc() 
4c00: 61 6e 64 20 73 71 6c 69 74 65 33 46 72 65 65 28  and sqlite3Free(
4c10: 29 2e 0a 2a 2f 20 0a 76 6f 69 64 20 2a 73 71 6c  )..*/ .void *sql
4c20: 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e  ite3Malloc(int n
4c30: 2c 20 69 6e 74 20 64 6f 4d 65 6d 4d 61 6e 61 67  , int doMemManag
4c40: 65 29 7b 0a 20 20 76 6f 69 64 20 2a 70 20 3d 20  e){.  void *p = 
4c50: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77  sqlite3MallocRaw
4c60: 28 6e 2c 20 64 6f 4d 65 6d 4d 61 6e 61 67 65 29  (n, doMemManage)
4c70: 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20  ;.  if( p ){.   
4c80: 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c 20 6e 29   memset(p, 0, n)
4c90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
4ca0: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
4cb0: 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 76 6f  ReallocOrFree(vo
4cc0: 69 64 20 2a 2a 70 70 2c 20 69 6e 74 20 6e 29 7b  id **pp, int n){
4cd0: 0a 20 20 76 6f 69 64 20 2a 70 20 3d 20 73 71 6c  .  void *p = sql
4ce0: 69 74 65 33 52 65 61 6c 6c 6f 63 28 2a 70 70 2c  ite3Realloc(*pp,
4cf0: 20 6e 29 3b 0a 20 20 69 66 28 20 21 70 20 29 7b   n);.  if( !p ){
4d00: 0a 20 20 20 20 73 71 6c 69 74 65 33 46 72 65 65  .    sqlite3Free
4d10: 58 28 2a 70 70 29 3b 0a 20 20 7d 0a 20 20 2a 70  X(*pp);.  }.  *p
4d20: 70 20 3d 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  p = p;.}../*.** 
4d30: 73 71 6c 69 74 65 33 54 68 72 65 61 64 53 61 66  sqlite3ThreadSaf
4d40: 65 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 73 71  eMalloc() and sq
4d50: 6c 69 74 65 33 54 68 72 65 61 64 53 61 66 65 46  lite3ThreadSafeF
4d60: 72 65 65 28 29 20 61 72 65 20 75 73 65 64 20 69  ree() are used i
4d70: 6e 20 74 68 6f 73 65 0a 2a 2a 20 72 61 72 65 20  n those.** rare 
4d80: 73 63 65 6e 61 72 69 6f 73 20 77 68 65 72 65 20  scenarios where 
4d90: 73 71 6c 69 74 65 20 6d 61 79 20 61 6c 6c 6f 63  sqlite may alloc
4da0: 61 74 65 20 6d 65 6d 6f 72 79 20 69 6e 20 6f 6e  ate memory in on
4db0: 65 20 74 68 72 65 61 64 20 61 6e 64 20 66 72 65  e thread and fre
4dc0: 65 0a 2a 2a 20 69 74 20 69 6e 20 61 6e 6f 74 68  e.** it in anoth
4dd0: 65 72 2e 20 54 68 65 79 20 61 72 65 20 65 78 61  er. They are exa
4de0: 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73  ctly the same as
4df0: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29   sqlite3Malloc()
4e00: 20 61 6e 64 20 0a 2a 2a 20 73 71 6c 69 74 65 33   and .** sqlite3
4e10: 46 72 65 65 28 29 20 65 78 63 65 70 74 20 74 68  Free() except th
4e20: 61 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 2a 20 54 68  at:.**.**   * Th
4e30: 65 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  e allocated memo
4e40: 72 79 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64  ry is not includ
4e50: 65 64 20 69 6e 20 61 6e 79 20 63 61 6c 63 75 6c  ed in any calcul
4e60: 61 74 69 6f 6e 73 20 77 69 74 68 20 0a 2a 2a 20  ations with .** 
4e70: 20 20 20 20 72 65 73 70 65 63 74 20 74 6f 20 74      respect to t
4e80: 68 65 20 73 6f 66 74 2d 68 65 61 70 2d 6c 69 6d  he soft-heap-lim
4e90: 69 74 2c 20 61 6e 64 0a 2a 2a 0a 2a 2a 20 20 20  it, and.**.**   
4ea0: 2a 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 53  * sqlite3ThreadS
4eb0: 61 66 65 4d 61 6c 6c 6f 63 28 29 20 6d 75 73 74  afeMalloc() must
4ec0: 20 62 65 20 6d 61 74 63 68 65 64 20 77 69 74 68   be matched with
4ed0: 20 54 68 72 65 61 64 53 61 66 65 46 72 65 65 28   ThreadSafeFree(
4ee0: 29 2c 0a 2a 2a 20 20 20 20 20 6e 6f 74 20 73 71  ),.**     not sq
4ef0: 6c 69 74 65 33 46 72 65 65 28 29 2e 20 43 61 6c  lite3Free(). Cal
4f00: 6c 69 6e 67 20 73 71 6c 69 74 65 33 46 72 65 65  ling sqlite3Free
4f10: 28 29 20 6f 6e 20 6d 65 6d 6f 72 79 20 6f 62 74  () on memory obt
4f20: 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20 20 20  ained from.**   
4f30: 20 20 54 68 72 65 61 64 53 61 66 65 4d 61 6c 6c    ThreadSafeMall
4f40: 6f 63 28 29 20 77 69 6c 6c 20 63 61 75 73 65 20  oc() will cause 
4f50: 61 6e 20 65 72 72 6f 72 20 73 6f 6d 65 77 68 65  an error somewhe
4f60: 72 65 20 64 6f 77 6e 20 74 68 65 20 6c 69 6e 65  re down the line
4f70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4f80: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
4f90: 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 76 6f 69 64  _MANAGEMENT.void
4fa0: 20 2a 73 71 6c 69 74 65 33 54 68 72 65 61 64 53   *sqlite3ThreadS
4fb0: 61 66 65 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e 29  afeMalloc(int n)
4fc0: 7b 0a 20 20 45 4e 54 45 52 5f 4d 41 4c 4c 4f 43  {.  ENTER_MALLOC
4fd0: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
4fe0: 65 33 4d 61 6c 6c 6f 63 28 6e 2c 20 30 29 3b 0a  e3Malloc(n, 0);.
4ff0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 68  }.void sqlite3Th
5000: 72 65 61 64 53 61 66 65 46 72 65 65 28 76 6f 69  readSafeFree(voi
5010: 64 20 2a 70 29 7b 0a 20 20 45 4e 54 45 52 5f 4d  d *p){.  ENTER_M
5020: 41 4c 4c 4f 43 3b 0a 20 20 69 66 28 20 70 20 29  ALLOC;.  if( p )
5030: 7b 0a 20 20 20 20 4f 53 46 52 45 45 28 70 29 3b  {.    OSFREE(p);
5040: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  .  }.}.#endif...
5050: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
5060: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5070: 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 6c 6f   allocated at lo
5080: 63 61 74 69 6f 6e 20 70 2e 20 70 20 6d 75 73 74  cation p. p must
5090: 20 62 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 61   be either .** a
50a0: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 20 28 69   NULL pointer (i
50b0: 6e 20 77 68 69 63 68 20 63 61 73 65 20 30 20 69  n which case 0 i
50c0: 73 20 72 65 74 75 72 6e 65 64 29 20 6f 72 20 61  s returned) or a
50d0: 20 70 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65   pointer returne
50e0: 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33  d by .** sqlite3
50f0: 4d 61 6c 6c 6f 63 28 29 2c 20 73 71 6c 69 74 65  Malloc(), sqlite
5100: 33 52 65 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71  3Realloc() or sq
5110: 6c 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72  lite3ReallocOrFr
5120: 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ee()..**.** The 
5130: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
5140: 61 6c 6c 6f 63 61 74 65 64 20 64 6f 65 73 20 6e  allocated does n
5150: 6f 74 20 69 6e 63 6c 75 64 65 20 61 6e 79 20 6f  ot include any o
5160: 76 65 72 68 65 61 64 20 69 6e 73 65 72 74 65 64  verhead inserted
5170: 20 62 79 20 0a 2a 2a 20 61 6e 79 20 6d 61 6c 6c   by .** any mall
5180: 6f 63 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  oc() wrapper fun
5190: 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 61 79 20  ctions that may 
51a0: 62 65 20 63 61 6c 6c 65 64 2e 20 53 6f 20 74 68  be called. So th
51b0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
51c0: 0a 2a 2a 20 69 73 20 74 68 65 20 6e 75 6d 62 65  .** is the numbe
51d0: 72 20 6f 66 20 62 79 74 65 73 20 74 68 61 74 20  r of bytes that 
51e0: 77 65 72 65 20 61 76 61 69 6c 61 62 6c 65 20 74  were available t
51f0: 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 70  o SQLite using p
5200: 6f 69 6e 74 65 72 20 70 2c 20 0a 2a 2a 20 72 65  ointer p, .** re
5210: 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20  gardless of how 
5220: 6d 75 63 68 20 6d 65 6d 6f 72 79 20 77 61 73 20  much memory was 
5230: 61 63 74 75 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  actually allocat
5240: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
5250: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
5260: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 69 6e  RY_MANAGEMENT.in
5270: 74 20 73 71 6c 69 74 65 33 41 6c 6c 6f 63 53 69  t sqlite3AllocSi
5280: 7a 65 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 72  ze(void *p){.  r
5290: 65 74 75 72 6e 20 4f 53 53 49 5a 45 4f 46 28 70  eturn OSSIZEOF(p
52a0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
52b0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
52c0: 66 20 61 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  f a string in me
52d0: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
52e0: 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  om sqliteMalloc(
52f0: 29 2e 20 54 68 65 73 65 20 0a 2a 2a 20 66 75 6e  ). These .** fun
5300: 63 74 69 6f 6e 73 20 63 61 6c 6c 20 73 71 6c 69  ctions call sqli
5310: 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 29 20 64  te3MallocRaw() d
5320: 69 72 65 63 74 6c 79 20 69 6e 73 74 65 61 64 20  irectly instead 
5330: 6f 66 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  of sqliteMalloc(
5340: 29 2e 20 54 68 69 73 0a 2a 2a 20 69 73 20 62 65  ). This.** is be
5350: 63 61 75 73 65 20 77 68 65 6e 20 6d 65 6d 6f 72  cause when memor
5360: 79 20 64 65 62 75 67 67 69 6e 67 20 69 73 20 74  y debugging is t
5370: 75 72 6e 65 64 20 6f 6e 2c 20 74 68 65 73 65 20  urned on, these 
5380: 74 77 6f 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  two functions ar
5390: 65 20 0a 2a 2a 20 63 61 6c 6c 65 64 20 76 69 61  e .** called via
53a0: 20 6d 61 63 72 6f 73 20 74 68 61 74 20 72 65 63   macros that rec
53b0: 6f 72 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  ord the current 
53c0: 66 69 6c 65 20 61 6e 64 20 6c 69 6e 65 20 6e 75  file and line nu
53d0: 6d 62 65 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54  mber in the.** T
53e0: 68 72 65 61 64 44 61 74 61 20 73 74 72 75 63 74  hreadData struct
53f0: 75 72 65 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ure..*/.char *sq
5400: 6c 69 74 65 33 53 74 72 44 75 70 28 63 6f 6e 73  lite3StrDup(cons
5410: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63 68  t char *z){.  ch
5420: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20  ar *zNew;.  if( 
5430: 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  z==0 ) return 0;
5440: 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  zNew = sqlite
5450: 33 4d 61 6c 6c 6f 63 52 61 77 28 73 74 72 6c 65  3MallocRaw(strle
5460: 6e 28 7a 29 2b 31 2c 20 31 29 3b 0a 20 20 69 66  n(z)+1, 1);.  if
5470: 28 20 7a 4e 65 77 20 29 20 73 74 72 63 70 79 28  ( zNew ) strcpy(
5480: 7a 4e 65 77 2c 20 7a 29 3b 0a 20 20 72 65 74 75  zNew, z);.  retu
5490: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20  rn zNew;.}.char 
54a0: 2a 73 71 6c 69 74 65 33 53 74 72 4e 44 75 70 28  *sqlite3StrNDup(
54b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
54c0: 6e 74 20 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a  nt n){.  char *z
54d0: 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  New;.  if( z==0 
54e0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 4e  ) return 0;.  zN
54f0: 65 77 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c  ew = sqlite3Mall
5500: 6f 63 52 61 77 28 6e 2b 31 2c 20 31 29 3b 0a 20  ocRaw(n+1, 1);. 
5510: 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20   if( zNew ){.   
5520: 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c   memcpy(zNew, z,
5530: 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d   n);.    zNew[n]
5540: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 0;.  }.  retu
5550: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn zNew;.}../*.*
5560: 2a 20 43 72 65 61 74 65 20 61 20 73 74 72 69 6e  * Create a strin
5570: 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64 20 61  g from the 2nd a
5580: 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 61 72  nd subsequent ar
5590: 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f 20 74  guments (up to t
55a0: 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55 4c 4c  he.** first NULL
55b0: 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74 6f 72   argument), stor
55c0: 65 20 74 68 65 20 73 74 72 69 6e 67 20 69 6e 20  e the string in 
55d0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
55e0: 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65 4d 61  from.** sqliteMa
55f0: 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b 65 20  lloc() and make 
5600: 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e 64 69  the pointer indi
5610: 63 61 74 65 64 20 62 79 20 74 68 65 20 31 73 74  cated by the 1st
5620: 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70 6f 69   argument.** poi
5630: 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72 69 6e  nt to that strin
5640: 67 2e 20 20 54 68 65 20 31 73 74 20 61 72 67 75  g.  The 1st argu
5650: 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68 65 72  ment must either
5660: 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a 2a 20   be NULL or .** 
5670: 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72 79 20  point to memory 
5680: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
5690: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f  liteMalloc()..*/
56a0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
56b0: 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 70 7a  String(char **pz
56c0: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73  , ...){.  va_lis
56d0: 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79 74  t ap;.  int nByt
56e0: 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e;.  const char 
56f0: 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73  *z;.  char *zRes
5700: 75 6c 74 3b 0a 0a 20 20 69 66 28 20 70 7a 3d 3d  ult;..  if( pz==
5710: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6e 42  0 ) return;.  nB
5720: 79 74 65 20 3d 20 31 3b 0a 20 20 76 61 5f 73 74  yte = 1;.  va_st
5730: 61 72 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77  art(ap, pz);.  w
5740: 68 69 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72  hile( (z = va_ar
5750: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
5760: 2a 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 6e 42  *))!=0 ){.    nB
5770: 79 74 65 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 29  yte += strlen(z)
5780: 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  ;.  }.  va_end(a
5790: 70 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  p);.  sqliteFree
57a0: 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a  (*pz);.  *pz = z
57b0: 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 4d  Result = sqliteM
57c0: 61 6c 6c 6f 63 52 61 77 28 20 6e 42 79 74 65 20  allocRaw( nByte 
57d0: 29 3b 0a 20 20 69 66 28 20 7a 52 65 73 75 6c 74  );.  if( zResult
57e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
57f0: 6e 3b 0a 20 20 7d 0a 20 20 2a 7a 52 65 73 75 6c  n;.  }.  *zResul
5800: 74 20 3d 20 30 3b 0a 20 20 76 61 5f 73 74 61 72  t = 0;.  va_star
5810: 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77 68 69  t(ap, pz);.  whi
5820: 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72 67 28  le( (z = va_arg(
5830: 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  ap, const char*)
5840: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74 72 63  )!=0 ){.    strc
5850: 70 79 28 7a 52 65 73 75 6c 74 2c 20 7a 29 3b 0a  py(zResult, z);.
5860: 20 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20 73      zResult += s
5870: 74 72 6c 65 6e 28 7a 52 65 73 75 6c 74 29 3b 0a  trlen(zResult);.
5880: 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29    }.  va_end(ap)
5890: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74  ;.}../*.** Set t
58a0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65  he most recent e
58b0: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65 72  rror code and er
58c0: 72 6f 72 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ror string for t
58d0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
58e0: 64 6c 65 20 22 64 62 22 2e 20 54 68 65 20 65 72  dle "db". The er
58f0: 72 6f 72 20 63 6f 64 65 20 69 73 20 73 65 74 20  ror code is set 
5900: 74 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e 0a 2a  to "err_code"..*
5910: 2a 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f  *.** If it is no
5920: 74 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67 20 7a  t NULL, string z
5930: 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73  Format specifies
5940: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
5950: 68 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74 72 69  he.** error stri
5960: 6e 67 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20  ng in the style 
5970: 6f 66 20 74 68 65 20 70 72 69 6e 74 66 20 66 75  of the printf fu
5980: 6e 63 74 69 6f 6e 73 3a 20 54 68 65 20 66 6f 6c  nctions: The fol
5990: 6c 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74  lowing.** format
59a0: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
59b0: 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20  allowed:.**.**  
59c0: 20 20 20 20 25 73 20 20 20 20 20 20 49 6e 73 65      %s      Inse
59d0: 72 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20  rt a string.**  
59e0: 20 20 20 20 25 7a 20 20 20 20 20 20 41 20 73 74      %z      A st
59f0: 72 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c 64  ring that should
5a00: 20 62 65 20 66 72 65 65 64 20 61 66 74 65 72 20   be freed after 
5a10: 75 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20 20  use.**      %d  
5a20: 20 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69 6e      Insert an in
5a30: 74 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25 54  teger.**      %T
5a40: 20 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 74        Insert a t
5a50: 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20  oken.**      %S 
5a60: 20 20 20 20 20 49 6e 73 65 72 74 20 74 68 65 20       Insert the 
5a70: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
5a80: 20 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a   a SrcList.**.**
5a90: 20 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61 6e 79   zFormat and any
5aa0: 20 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73 20 74   string tokens t
5ab0: 68 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20 61 72  hat follow it ar
5ac0: 65 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 0a  e assumed to be.
5ad0: 2a 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  ** encoded in UT
5ae0: 46 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c  F-8..**.** To cl
5af0: 65 61 72 20 74 68 65 20 6d 6f 73 74 20 72 65 63  ear the most rec
5b00: 65 6e 74 20 65 72 72 6f 72 20 66 6f 72 20 73 71  ent error for sq
5b10: 6c 69 74 65 20 68 61 6e 64 6c 65 20 22 64 62 22  lite handle "db"
5b20: 2c 20 73 71 6c 69 74 65 33 45 72 72 6f 72 0a 2a  , sqlite3Error.*
5b30: 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c  * should be call
5b40: 65 64 20 77 69 74 68 20 65 72 72 5f 63 6f 64 65  ed with err_code
5b50: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4f   set to SQLITE_O
5b60: 4b 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20 73 65  K and zFormat se
5b70: 74 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f  t.** to NULL..*/
5b80: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
5b90: 6f 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  or(sqlite3 *db, 
5ba0: 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f  int err_code, co
5bb0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
5bc0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 69 66 28 20 64  t, ...){.  if( d
5bd0: 62 20 26 26 20 28 64 62 2d 3e 70 45 72 72 20 7c  b && (db->pErr |
5be0: 7c 20 28 64 62 2d 3e 70 45 72 72 20 3d 20 73 71  | (db->pErr = sq
5bf0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 29  lite3ValueNew())
5c00: 21 3d 30 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e  !=0) ){.    db->
5c10: 65 72 72 43 6f 64 65 20 3d 20 65 72 72 5f 63 6f  errCode = err_co
5c20: 64 65 3b 0a 20 20 20 20 69 66 28 20 7a 46 6f 72  de;.    if( zFor
5c30: 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 63 68 61  mat ){.      cha
5c40: 72 20 2a 7a 3b 0a 20 20 20 20 20 20 76 61 5f 6c  r *z;.      va_l
5c50: 69 73 74 20 61 70 3b 0a 20 20 20 20 20 20 76 61  ist ap;.      va
5c60: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
5c70: 61 74 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73  at);.      z = s
5c80: 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 7a  qlite3VMPrintf(z
5c90: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20  Format, ap);.   
5ca0: 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20     va_end(ap);. 
5cb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
5cc0: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
5cd0: 2c 20 2d 31 2c 20 7a 2c 20 53 51 4c 49 54 45 5f  , -1, z, SQLITE_
5ce0: 55 54 46 38 2c 20 73 71 6c 69 74 65 33 46 72 65  UTF8, sqlite3Fre
5cf0: 65 58 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  eX);.    }else{.
5d00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c        sqlite3Val
5d10: 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72  ueSetStr(db->pEr
5d20: 72 2c 20 30 2c 20 30 2c 20 53 51 4c 49 54 45 5f  r, 0, 0, SQLITE_
5d30: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
5d40: 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TIC);.    }.  }.
5d50: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 20 61 6e 20  }../*.** Add an 
5d60: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
5d70: 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67   pParse->zErrMsg
5d80: 20 61 6e 64 20 69 6e 63 72 65 6d 65 6e 74 20 70   and increment p
5d90: 50 61 72 73 65 2d 3e 6e 45 72 72 2e 0a 2a 2a 20  Parse->nErr..** 
5da0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f  The following fo
5db0: 72 6d 61 74 74 69 6e 67 20 63 68 61 72 61 63 74  rmatting charact
5dc0: 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a  ers are allowed:
5dd0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20 20  .**.**      %s  
5de0: 20 20 20 20 49 6e 73 65 72 74 20 61 20 73 74 72      Insert a str
5df0: 69 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20  ing.**      %z  
5e00: 20 20 20 20 41 20 73 74 72 69 6e 67 20 74 68 61      A string tha
5e10: 74 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65  t should be free
5e20: 64 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20 20  d after use.**  
5e30: 20 20 20 20 25 64 20 20 20 20 20 20 49 6e 73 65      %d      Inse
5e40: 72 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  rt an integer.**
5e50: 20 20 20 20 20 20 25 54 20 20 20 20 20 20 49 6e        %T      In
5e60: 73 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20  sert a token.** 
5e70: 20 20 20 20 20 25 53 20 20 20 20 20 20 49 6e 73       %S      Ins
5e80: 65 72 74 20 74 68 65 20 66 69 72 73 74 20 65 6c  ert the first el
5e90: 65 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c 69  ement of a SrcLi
5ea0: 73 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75  st.**.** This fu
5eb0: 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 62 65  nction should be
5ec0: 20 75 73 65 64 20 74 6f 20 72 65 70 6f 72 74 20   used to report 
5ed0: 61 6e 79 20 65 72 72 6f 72 20 74 68 61 74 20 6f  any error that o
5ee0: 63 63 75 72 73 20 77 68 69 6c 73 74 0a 2a 2a 20  ccurs whilst.** 
5ef0: 63 6f 6d 70 69 6c 69 6e 67 20 61 6e 20 53 51 4c  compiling an SQL
5f00: 20 73 74 61 74 65 6d 65 6e 74 20 28 69 2e 65 2e   statement (i.e.
5f10: 20 77 69 74 68 69 6e 20 73 71 6c 69 74 65 33 5f   within sqlite3_
5f20: 70 72 65 70 61 72 65 28 29 29 2e 20 54 68 65 0a  prepare()). The.
5f30: 2a 2a 20 6c 61 73 74 20 74 68 69 6e 67 20 74 68  ** last thing th
5f40: 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  e sqlite3_prepar
5f50: 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  e() function doe
5f60: 73 20 69 73 20 63 6f 70 79 20 74 68 65 20 65 72  s is copy the er
5f70: 72 6f 72 0a 2a 2a 20 73 74 6f 72 65 64 20 62 79  ror.** stored by
5f80: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
5f90: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
5fa0: 20 68 61 6e 64 6c 65 20 75 73 69 6e 67 20 73 71   handle using sq
5fb0: 6c 69 74 65 33 45 72 72 6f 72 28 29 2e 0a 2a 2a  lite3Error()..**
5fc0: 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
5fd0: 33 45 72 72 6f 72 28 29 20 73 68 6f 75 6c 64 20  3Error() should 
5fe0: 62 65 20 75 73 65 64 20 64 75 72 69 6e 67 20 73  be used during s
5ff0: 74 61 74 65 6d 65 6e 74 20 65 78 65 63 75 74 69  tatement executi
6000: 6f 6e 0a 2a 2a 20 28 73 71 6c 69 74 65 33 5f 73  on.** (sqlite3_s
6010: 74 65 70 28 29 20 65 74 63 2e 29 2e 0a 2a 2f 0a  tep() etc.)..*/.
6020: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
6030: 72 4d 73 67 28 50 61 72 73 65 20 2a 70 50 61 72  rMsg(Parse *pPar
6040: 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
6050: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
6060: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 70   va_list ap;.  p
6070: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
6080: 20 73 71 6c 69 74 65 46 72 65 65 28 70 50 61 72   sqliteFree(pPar
6090: 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  se->zErrMsg);.  
60a0: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
60b0: 72 6d 61 74 29 3b 0a 20 20 70 50 61 72 73 65 2d  rmat);.  pParse-
60c0: 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
60d0: 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d  e3VMPrintf(zForm
60e0: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
60f0: 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  d(ap);.}../*.** 
6100: 43 6c 65 61 72 20 74 68 65 20 65 72 72 6f 72 20  Clear the error 
6110: 6d 65 73 73 61 67 65 20 69 6e 20 70 50 61 72 73  message in pPars
6120: 65 2c 20 69 66 20 61 6e 79 0a 2a 2f 0a 76 6f 69  e, if any.*/.voi
6130: 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 43 6c  d sqlite3ErrorCl
6140: 65 61 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ear(Parse *pPars
6150: 65 29 7b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  e){.  sqliteFree
6160: 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67  (pParse->zErrMsg
6170: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a 45 72  );.  pParse->zEr
6180: 72 4d 73 67 20 3d 20 30 3b 0a 20 20 70 50 61 72  rMsg = 0;.  pPar
6190: 73 65 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 7d 0a  se->nErr = 0;.}.
61a0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
61b0: 6e 20 53 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74  n SQL-style quot
61c0: 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  ed string into a
61d0: 20 6e 6f 72 6d 61 6c 20 73 74 72 69 6e 67 20 62   normal string b
61e0: 79 20 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68  y removing.** th
61f0: 65 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65  e quote characte
6200: 72 73 2e 20 20 54 68 65 20 63 6f 6e 76 65 72 73  rs.  The convers
6210: 69 6f 6e 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70  ion is done in-p
6220: 6c 61 63 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lace.  If the.**
6230: 20 69 6e 70 75 74 20 64 6f 65 73 20 6e 6f 74 20   input does not 
6240: 62 65 67 69 6e 20 77 69 74 68 20 61 20 71 75 6f  begin with a quo
6250: 74 65 20 63 68 61 72 61 63 74 65 72 2c 20 74 68  te character, th
6260: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
6270: 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ** is a no-op..*
6280: 2a 0a 2a 2a 20 32 30 30 32 2d 46 65 62 2d 31 34  *.** 2002-Feb-14
6290: 3a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  : This routine i
62a0: 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20 72 65  s extended to re
62b0: 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73 73 20 73  move MS-Access s
62c0: 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73  tyle.** brackets
62d0: 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65   from around ide
62e0: 6e 74 69 66 65 72 73 2e 20 20 46 6f 72 20 65 78  ntifers.  For ex
62f0: 61 6d 70 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d  ample:  "[a-b-c]
6300: 22 20 62 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d  " becomes.** "a-
6310: 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  b-c"..*/.void sq
6320: 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
6330: 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 71 75 6f  r *z){.  int quo
6340: 74 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a  te;.  int i, j;.
6350: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74    if( z==0 ) ret
6360: 75 72 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a  urn;.  quote = z
6370: 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68 28 20 71  [0];.  switch( q
6380: 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 61 73 65  uote ){.    case
6390: 20 27 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a 20   '\'':  break;. 
63a0: 20 20 20 63 61 73 65 20 27 22 27 3a 20 20 20 62     case '"':   b
63b0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27  reak;.    case '
63c0: 60 27 3a 20 20 20 62 72 65 61 6b 3b 20 20 20 20  `':   break;    
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
63e0: 6f 72 20 4d 79 53 51 4c 20 63 6f 6d 70 61 74 69  or MySQL compati
63f0: 62 69 6c 69 74 79 20 2a 2f 0a 20 20 20 20 63 61  bility */.    ca
6400: 73 65 20 27 5b 27 3a 20 20 20 71 75 6f 74 65 20  se '[':   quote 
6410: 3d 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b 20 20  = ']';  break;  
6420: 2f 2a 20 46 6f 72 20 4d 53 20 53 71 6c 53 65 72  /* For MS SqlSer
6430: 76 65 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ver compatibilit
6440: 79 20 2a 2f 0a 20 20 20 20 64 65 66 61 75 6c 74  y */.    default
6450: 3a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  :    return;.  }
6460: 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b  .  for(i=1, j=0;
6470: 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20   z[i]; i++){.   
6480: 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65   if( z[i]==quote
6490: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b   ){.      if( z[
64a0: 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20  i+1]==quote ){. 
64b0: 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20         z[j++] = 
64c0: 71 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69  quote;.        i
64d0: 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ++;.      }else{
64e0: 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20  .        z[j++] 
64f0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 0;.        bre
6500: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
6510: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a  }else{.      z[j
6520: 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20  ++] = z[i];.    
6530: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61  }.  }.}../* An a
6540: 72 72 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c 20  rray to map all 
6550: 75 70 70 65 72 2d 63 61 73 65 20 63 68 61 72 61  upper-case chara
6560: 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72  cters into their
6570: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
6580: 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20 63 68 61  * lower-case cha
6590: 72 61 63 74 65 72 2e 20 0a 2a 2f 0a 63 6f 6e 73  racter. .*/.cons
65a0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
65b0: 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
65c0: 77 65 72 5b 5d 20 3d 20 7b 0a 23 69 66 64 65 66  wer[] = {.#ifdef
65d0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 20 20   SQLITE_ASCII.  
65e0: 20 20 20 20 30 2c 20 20 31 2c 20 20 32 2c 20 20      0,  1,  2,  
65f0: 33 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c 20 20  3,  4,  5,  6,  
6600: 37 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c 20 31  7,  8,  9, 10, 1
6610: 31 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c 20 31  1, 12, 13, 14, 1
6620: 35 2c 20 31 36 2c 20 31 37 2c 0a 20 20 20 20 20  5, 16, 17,.     
6630: 31 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c 20  18, 19, 20, 21, 
6640: 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20  22, 23, 24, 25, 
6650: 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20  26, 27, 28, 29, 
6660: 33 30 2c 20 33 31 2c 20 33 32 2c 20 33 33 2c 20  30, 31, 32, 33, 
6670: 33 34 2c 20 33 35 2c 0a 20 20 20 20 20 33 36 2c  34, 35,.     36,
6680: 20 33 37 2c 20 33 38 2c 20 33 39 2c 20 34 30 2c   37, 38, 39, 40,
6690: 20 34 31 2c 20 34 32 2c 20 34 33 2c 20 34 34 2c   41, 42, 43, 44,
66a0: 20 34 35 2c 20 34 36 2c 20 34 37 2c 20 34 38 2c   45, 46, 47, 48,
66b0: 20 34 39 2c 20 35 30 2c 20 35 31 2c 20 35 32 2c   49, 50, 51, 52,
66c0: 20 35 33 2c 0a 20 20 20 20 20 35 34 2c 20 35 35   53,.     54, 55
66d0: 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c 20 35 39  , 56, 57, 58, 59
66e0: 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c 20 36 33  , 60, 61, 62, 63
66f0: 2c 20 36 34 2c 20 39 37 2c 20 39 38 2c 20 39 39  , 64, 97, 98, 99
6700: 2c 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33  ,100,101,102,103
6710: 2c 0a 20 20 20 20 31 30 34 2c 31 30 35 2c 31 30  ,.    104,105,10
6720: 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c 31 31  6,107,108,109,11
6730: 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31 31  0,111,112,113,11
6740: 34 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31  4,115,116,117,11
6750: 38 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 0a 20  8,119,120,121,. 
6760: 20 20 20 31 32 32 2c 20 39 31 2c 20 39 32 2c 20     122, 91, 92, 
6770: 39 33 2c 20 39 34 2c 20 39 35 2c 20 39 36 2c 20  93, 94, 95, 96, 
6780: 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c 31  97, 98, 99,100,1
6790: 30 31 2c 31 30 32 2c 31 30 33 2c 31 30 34 2c 31  01,102,103,104,1
67a0: 30 35 2c 31 30 36 2c 31 30 37 2c 0a 20 20 20 20  05,106,107,.    
67b0: 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c  108,109,110,111,
67c0: 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35 2c  112,113,114,115,
67d0: 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39 2c  116,117,118,119,
67e0: 31 32 30 2c 31 32 31 2c 31 32 32 2c 31 32 33 2c  120,121,122,123,
67f0: 31 32 34 2c 31 32 35 2c 0a 20 20 20 20 31 32 36  124,125,.    126
6800: 2c 31 32 37 2c 31 32 38 2c 31 32 39 2c 31 33 30  ,127,128,129,130
6810: 2c 31 33 31 2c 31 33 32 2c 31 33 33 2c 31 33 34  ,131,132,133,134
6820: 2c 31 33 35 2c 31 33 36 2c 31 33 37 2c 31 33 38  ,135,136,137,138
6830: 2c 31 33 39 2c 31 34 30 2c 31 34 31 2c 31 34 32  ,139,140,141,142
6840: 2c 31 34 33 2c 0a 20 20 20 20 31 34 34 2c 31 34  ,143,.    144,14
6850: 35 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c 31 34  5,146,147,148,14
6860: 39 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c 31 35  9,150,151,152,15
6870: 33 2c 31 35 34 2c 31 35 35 2c 31 35 36 2c 31 35  3,154,155,156,15
6880: 37 2c 31 35 38 2c 31 35 39 2c 31 36 30 2c 31 36  7,158,159,160,16
6890: 31 2c 0a 20 20 20 20 31 36 32 2c 31 36 33 2c 31  1,.    162,163,1
68a0: 36 34 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c 31  64,165,166,167,1
68b0: 36 38 2c 31 36 39 2c 31 37 30 2c 31 37 31 2c 31  68,169,170,171,1
68c0: 37 32 2c 31 37 33 2c 31 37 34 2c 31 37 35 2c 31  72,173,174,175,1
68d0: 37 36 2c 31 37 37 2c 31 37 38 2c 31 37 39 2c 0a  76,177,178,179,.
68e0: 20 20 20 20 31 38 30 2c 31 38 31 2c 31 38 32 2c      180,181,182,
68f0: 31 38 33 2c 31 38 34 2c 31 38 35 2c 31 38 36 2c  183,184,185,186,
6900: 31 38 37 2c 31 38 38 2c 31 38 39 2c 31 39 30 2c  187,188,189,190,
6910: 31 39 31 2c 31 39 32 2c 31 39 33 2c 31 39 34 2c  191,192,193,194,
6920: 31 39 35 2c 31 39 36 2c 31 39 37 2c 0a 20 20 20  195,196,197,.   
6930: 20 31 39 38 2c 31 39 39 2c 32 30 30 2c 32 30 31   198,199,200,201
6940: 2c 32 30 32 2c 32 30 33 2c 32 30 34 2c 32 30 35  ,202,203,204,205
6950: 2c 32 30 36 2c 32 30 37 2c 32 30 38 2c 32 30 39  ,206,207,208,209
6960: 2c 32 31 30 2c 32 31 31 2c 32 31 32 2c 32 31 33  ,210,211,212,213
6970: 2c 32 31 34 2c 32 31 35 2c 0a 20 20 20 20 32 31  ,214,215,.    21
6980: 36 2c 32 31 37 2c 32 31 38 2c 32 31 39 2c 32 32  6,217,218,219,22
6990: 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c 32 32  0,221,222,223,22
69a0: 34 2c 32 32 35 2c 32 32 36 2c 32 32 37 2c 32 32  4,225,226,227,22
69b0: 38 2c 32 32 39 2c 32 33 30 2c 32 33 31 2c 32 33  8,229,230,231,23
69c0: 32 2c 32 33 33 2c 0a 20 20 20 20 32 33 34 2c 32  2,233,.    234,2
69d0: 33 35 2c 32 33 36 2c 32 33 37 2c 32 33 38 2c 32  35,236,237,238,2
69e0: 33 39 2c 32 34 30 2c 32 34 31 2c 32 34 32 2c 32  39,240,241,242,2
69f0: 34 33 2c 32 34 34 2c 32 34 35 2c 32 34 36 2c 32  43,244,245,246,2
6a00: 34 37 2c 32 34 38 2c 32 34 39 2c 32 35 30 2c 32  47,248,249,250,2
6a10: 35 31 2c 0a 20 20 20 20 32 35 32 2c 32 35 33 2c  51,.    252,253,
6a20: 32 35 34 2c 32 35 35 0a 23 65 6e 64 69 66 0a 23  254,255.#endif.#
6a30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 42 43  ifdef SQLITE_EBC
6a40: 44 49 43 0a 20 20 20 20 20 20 30 2c 20 20 31 2c  DIC.      0,  1,
6a50: 20 20 32 2c 20 20 33 2c 20 20 34 2c 20 20 35 2c    2,  3,  4,  5,
6a60: 20 20 36 2c 20 20 37 2c 20 20 38 2c 20 20 39 2c    6,  7,  8,  9,
6a70: 20 31 30 2c 20 31 31 2c 20 31 32 2c 20 31 33 2c   10, 11, 12, 13,
6a80: 20 31 34 2c 20 31 35 2c 20 2f 2a 20 30 78 20 2a   14, 15, /* 0x *
6a90: 2f 0a 20 20 20 20 20 31 36 2c 20 31 37 2c 20 31  /.     16, 17, 1
6aa0: 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c 20 32  8, 19, 20, 21, 2
6ab0: 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20 32  2, 23, 24, 25, 2
6ac0: 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20 33  6, 27, 28, 29, 3
6ad0: 30 2c 20 33 31 2c 20 2f 2a 20 31 78 20 2a 2f 0a  0, 31, /* 1x */.
6ae0: 20 20 20 20 20 33 32 2c 20 33 33 2c 20 33 34 2c       32, 33, 34,
6af0: 20 33 35 2c 20 33 36 2c 20 33 37 2c 20 33 38 2c   35, 36, 37, 38,
6b00: 20 33 39 2c 20 34 30 2c 20 34 31 2c 20 34 32 2c   39, 40, 41, 42,
6b10: 20 34 33 2c 20 34 34 2c 20 34 35 2c 20 34 36 2c   43, 44, 45, 46,
6b20: 20 34 37 2c 20 2f 2a 20 32 78 20 2a 2f 0a 20 20   47, /* 2x */.  
6b30: 20 20 20 34 38 2c 20 34 39 2c 20 35 30 2c 20 35     48, 49, 50, 5
6b40: 31 2c 20 35 32 2c 20 35 33 2c 20 35 34 2c 20 35  1, 52, 53, 54, 5
6b50: 35 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c 20 35  5, 56, 57, 58, 5
6b60: 39 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c 20 36  9, 60, 61, 62, 6
6b70: 33 2c 20 2f 2a 20 33 78 20 2a 2f 0a 20 20 20 20  3, /* 3x */.    
6b80: 20 36 34 2c 20 36 35 2c 20 36 36 2c 20 36 37 2c   64, 65, 66, 67,
6b90: 20 36 38 2c 20 36 39 2c 20 37 30 2c 20 37 31 2c   68, 69, 70, 71,
6ba0: 20 37 32 2c 20 37 33 2c 20 37 34 2c 20 37 35 2c   72, 73, 74, 75,
6bb0: 20 37 36 2c 20 37 37 2c 20 37 38 2c 20 37 39 2c   76, 77, 78, 79,
6bc0: 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 20 20 38   /* 4x */.     8
6bd0: 30 2c 20 38 31 2c 20 38 32 2c 20 38 33 2c 20 38  0, 81, 82, 83, 8
6be0: 34 2c 20 38 35 2c 20 38 36 2c 20 38 37 2c 20 38  4, 85, 86, 87, 8
6bf0: 38 2c 20 38 39 2c 20 39 30 2c 20 39 31 2c 20 39  8, 89, 90, 91, 9
6c00: 32 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c 20 2f  2, 93, 94, 95, /
6c10: 2a 20 35 78 20 2a 2f 0a 20 20 20 20 20 39 36 2c  * 5x */.     96,
6c20: 20 39 37 2c 20 36 36 2c 20 36 37 2c 20 36 38 2c   97, 66, 67, 68,
6c30: 20 36 39 2c 20 37 30 2c 20 37 31 2c 20 37 32 2c   69, 70, 71, 72,
6c40: 20 37 33 2c 31 30 36 2c 31 30 37 2c 31 30 38 2c   73,106,107,108,
6c50: 31 30 39 2c 31 31 30 2c 31 31 31 2c 20 2f 2a 20  109,110,111, /* 
6c60: 36 78 20 2a 2f 0a 20 20 20 20 31 31 32 2c 20 38  6x */.    112, 8
6c70: 31 2c 20 38 32 2c 20 38 33 2c 20 38 34 2c 20 38  1, 82, 83, 84, 8
6c80: 35 2c 20 38 36 2c 20 38 37 2c 20 38 38 2c 20 38  5, 86, 87, 88, 8
6c90: 39 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c 31 32  9,122,123,124,12
6ca0: 35 2c 31 32 36 2c 31 32 37 2c 20 2f 2a 20 37 78  5,126,127, /* 7x
6cb0: 20 2a 2f 0a 20 20 20 20 31 32 38 2c 31 32 39 2c   */.    128,129,
6cc0: 31 33 30 2c 31 33 31 2c 31 33 32 2c 31 33 33 2c  130,131,132,133,
6cd0: 31 33 34 2c 31 33 35 2c 31 33 36 2c 31 33 37 2c  134,135,136,137,
6ce0: 31 33 38 2c 31 33 39 2c 31 34 30 2c 31 34 31 2c  138,139,140,141,
6cf0: 31 34 32 2c 31 34 33 2c 20 2f 2a 20 38 78 20 2a  142,143, /* 8x *
6d00: 2f 0a 20 20 20 20 31 34 34 2c 31 34 35 2c 31 34  /.    144,145,14
6d10: 36 2c 31 34 37 2c 31 34 38 2c 31 34 39 2c 31 35  6,147,148,149,15
6d20: 30 2c 31 35 31 2c 31 35 32 2c 31 35 33 2c 31 35  0,151,152,153,15
6d30: 34 2c 31 35 35 2c 31 35 36 2c 31 35 37 2c 31 35  4,155,156,157,15
6d40: 36 2c 31 35 39 2c 20 2f 2a 20 39 78 20 2a 2f 0a  6,159, /* 9x */.
6d50: 20 20 20 20 31 36 30 2c 31 36 31 2c 31 36 32 2c      160,161,162,
6d60: 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36 36 2c  163,164,165,166,
6d70: 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37 30 2c  167,168,169,170,
6d80: 31 37 31 2c 31 34 30 2c 31 34 31 2c 31 34 32 2c  171,140,141,142,
6d90: 31 37 35 2c 20 2f 2a 20 41 78 20 2a 2f 0a 20 20  175, /* Ax */.  
6da0: 20 20 31 37 36 2c 31 37 37 2c 31 37 38 2c 31 37    176,177,178,17
6db0: 39 2c 31 38 30 2c 31 38 31 2c 31 38 32 2c 31 38  9,180,181,182,18
6dc0: 33 2c 31 38 34 2c 31 38 35 2c 31 38 36 2c 31 38  3,184,185,186,18
6dd0: 37 2c 31 38 38 2c 31 38 39 2c 31 39 30 2c 31 39  7,188,189,190,19
6de0: 31 2c 20 2f 2a 20 42 78 20 2a 2f 0a 20 20 20 20  1, /* Bx */.    
6df0: 31 39 32 2c 31 32 39 2c 31 33 30 2c 31 33 31 2c  192,129,130,131,
6e00: 31 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35 2c  132,133,134,135,
6e10: 31 33 36 2c 31 33 37 2c 32 30 32 2c 32 30 33 2c  136,137,202,203,
6e20: 32 30 34 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c  204,205,206,207,
6e30: 20 2f 2a 20 43 78 20 2a 2f 0a 20 20 20 20 32 30   /* Cx */.    20
6e40: 38 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c 31 34  8,145,146,147,14
6e50: 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c 31 35  8,149,150,151,15
6e60: 32 2c 31 35 33 2c 32 31 38 2c 32 31 39 2c 32 32  2,153,218,219,22
6e70: 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c 20 2f  0,221,222,223, /
6e80: 2a 20 44 78 20 2a 2f 0a 20 20 20 20 32 32 34 2c  * Dx */.    224,
6e90: 32 32 35 2c 31 36 32 2c 31 36 33 2c 31 36 34 2c  225,162,163,164,
6ea0: 31 36 35 2c 31 36 36 2c 31 36 37 2c 31 36 38 2c  165,166,167,168,
6eb0: 31 36 39 2c 32 33 32 2c 32 30 33 2c 32 30 34 2c  169,232,203,204,
6ec0: 32 30 35 2c 32 30 36 2c 32 30 37 2c 20 2f 2a 20  205,206,207, /* 
6ed0: 45 78 20 2a 2f 0a 20 20 20 20 32 33 39 2c 32 34  Ex */.    239,24
6ee0: 30 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32 34  0,241,242,243,24
6ef0: 34 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32 34  4,245,246,247,24
6f00: 38 2c 32 34 39 2c 32 31 39 2c 32 32 30 2c 32 32  8,249,219,220,22
6f10: 31 2c 32 32 32 2c 32 35 35 2c 20 2f 2a 20 46 78  1,222,255, /* Fx
6f20: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 23 64   */.#endif.};.#d
6f30: 65 66 69 6e 65 20 55 70 70 65 72 54 6f 4c 6f 77  efine UpperToLow
6f40: 65 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  er sqlite3UpperT
6f50: 6f 4c 6f 77 65 72 0a 0a 2f 2a 0a 2a 2a 20 53 6f  oLower../*.** So
6f60: 6d 65 20 73 79 73 74 65 6d 73 20 68 61 76 65 20  me systems have 
6f70: 73 74 72 69 63 6d 70 28 29 2e 20 20 4f 74 68 65  stricmp().  Othe
6f80: 72 73 20 68 61 76 65 20 73 74 72 63 61 73 65 63  rs have strcasec
6f90: 6d 70 28 29 2e 20 20 42 65 63 61 75 73 65 0a 2a  mp().  Because.*
6fa0: 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * there is no co
6fb0: 6e 73 69 73 74 65 6e 63 79 2c 20 77 65 20 77 69  nsistency, we wi
6fc0: 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72 20 6f 77  ll define our ow
6fd0: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
6fe0: 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
6ff0: 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73  har *zLeft, cons
7000: 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 29 7b  t char *zRight){
7010: 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69  .  register unsi
7020: 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62  gned char *a, *b
7030: 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  a = (unsigne
7040: 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a  d char *)zLeft;.
7050: 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    b = (unsigned 
7060: 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20  char *)zRight;. 
7070: 20 77 68 69 6c 65 28 20 2a 61 21 3d 30 20 26 26   while( *a!=0 &&
7080: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61   UpperToLower[*a
7090: 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  ]==UpperToLower[
70a0: 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20  *b]){ a++; b++; 
70b0: 7d 0a 20 20 72 65 74 75 72 6e 20 55 70 70 65 72  }.  return Upper
70c0: 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70  ToLower[*a] - Up
70d0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a  perToLower[*b];.
70e0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  }.int sqlite3Str
70f0: 4e 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  NICmp(const char
7100: 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63   *zLeft, const c
7110: 68 61 72 20 2a 7a 52 69 67 68 74 2c 20 69 6e 74  har *zRight, int
7120: 20 4e 29 7b 0a 20 20 72 65 67 69 73 74 65 72 20   N){.  register 
7130: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61  unsigned char *a
7140: 2c 20 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73  , *b;.  a = (uns
7150: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c 65  igned char *)zLe
7160: 66 74 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69 67  ft;.  b = (unsig
7170: 6e 65 64 20 63 68 61 72 20 2a 29 7a 52 69 67 68  ned char *)zRigh
7180: 74 3b 0a 20 20 77 68 69 6c 65 28 20 4e 2d 2d 20  t;.  while( N-- 
7190: 3e 20 30 20 26 26 20 2a 61 21 3d 30 20 26 26 20  > 0 && *a!=0 && 
71a0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d  UpperToLower[*a]
71b0: 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  ==UpperToLower[*
71c0: 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d  b]){ a++; b++; }
71d0: 0a 20 20 72 65 74 75 72 6e 20 4e 3c 30 20 3f 20  .  return N<0 ? 
71e0: 30 20 3a 20 55 70 70 65 72 54 6f 4c 6f 77 65 72  0 : UpperToLower
71f0: 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c 6f  [*a] - UpperToLo
7200: 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  wer[*b];.}../*.*
7210: 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66  * Return TRUE if
7220: 20 7a 20 69 73 20 61 20 70 75 72 65 20 6e 75 6d   z is a pure num
7230: 65 72 69 63 20 73 74 72 69 6e 67 2e 20 20 52 65  eric string.  Re
7240: 74 75 72 6e 20 46 41 4c 53 45 20 69 66 20 74 68  turn FALSE if th
7250: 65 0a 2a 2a 20 73 74 72 69 6e 67 20 63 6f 6e 74  e.** string cont
7260: 61 69 6e 73 20 61 6e 79 20 63 68 61 72 61 63 74  ains any charact
7270: 65 72 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20  er which is not 
7280: 70 61 72 74 20 6f 66 20 61 20 6e 75 6d 62 65 72  part of a number
7290: 2e 20 49 66 0a 2a 2a 20 74 68 65 20 73 74 72 69  . If.** the stri
72a0: 6e 67 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  ng is numeric an
72b0: 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 27  d contains the '
72c0: 2e 27 20 63 68 61 72 61 63 74 65 72 2c 20 73 65  .' character, se
72d0: 74 20 2a 72 65 61 6c 6e 75 6d 0a 2a 2a 20 74 6f  t *realnum.** to
72e0: 20 54 52 55 45 20 28 6f 74 68 65 72 77 69 73 65   TRUE (otherwise
72f0: 20 46 41 4c 53 45 29 2e 0a 2a 2a 0a 2a 2a 20 41   FALSE)..**.** A
7300: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69  n empty string i
7310: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 6e 6f 6e  s considered non
7320: 2d 6e 75 6d 65 72 69 63 2e 0a 2a 2f 0a 69 6e 74  -numeric..*/.int
7330: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
7340: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
7350: 69 6e 74 20 2a 72 65 61 6c 6e 75 6d 2c 20 75 38  int *realnum, u8
7360: 20 65 6e 63 29 7b 0a 20 20 69 6e 74 20 69 6e 63   enc){.  int inc
7370: 72 20 3d 20 28 65 6e 63 3d 3d 53 51 4c 49 54 45  r = (enc==SQLITE
7380: 5f 55 54 46 38 3f 31 3a 32 29 3b 0a 20 20 69 66  _UTF8?1:2);.  if
7390: 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ( enc==SQLITE_UT
73a0: 46 31 36 42 45 20 29 20 7a 2b 2b 3b 0a 20 20 69  F16BE ) z++;.  i
73b0: 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a  f( *z=='-' || *z
73c0: 3d 3d 27 2b 27 20 29 20 7a 20 2b 3d 20 69 6e 63  =='+' ) z += inc
73d0: 72 3b 0a 20 20 69 66 28 20 21 69 73 64 69 67 69  r;.  if( !isdigi
73e0: 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20  t(*(u8*)z) ){.  
73f0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
7400: 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 69    z += incr;.  i
7410: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
7420: 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69  alnum = 0;.  whi
7430: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28 75 38  le( isdigit(*(u8
7440: 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63  *)z) ){ z += inc
7450: 72 3b 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27  r; }.  if( *z=='
7460: 2e 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69  .' ){.    z += i
7470: 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21 69 73  ncr;.    if( !is
7480: 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29  digit(*(u8*)z) )
7490: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77   return 0;.    w
74a0: 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28  hile( isdigit(*(
74b0: 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20 69  u8*)z) ){ z += i
74c0: 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20 72  ncr; }.    if( r
74d0: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
74e0: 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28  m = 1;.  }.  if(
74f0: 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d   *z=='e' || *z==
7500: 27 45 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20  'E' ){.    z += 
7510: 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 2a 7a  incr;.    if( *z
7520: 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27  =='+' || *z=='-'
7530: 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20   ) z += incr;.  
7540: 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a    if( !isdigit(*
7550: 28 75 38 2a 29 7a 29 20 29 20 72 65 74 75 72 6e  (u8*)z) ) return
7560: 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69   0;.    while( i
7570: 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20  sdigit(*(u8*)z) 
7580: 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a  ){ z += incr; }.
7590: 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20      if( realnum 
75a0: 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a  ) *realnum = 1;.
75b0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d    }.  return *z=
75c0: 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  =0;.}../*.** The
75d0: 20 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20 61   string z[] is a
75e0: 6e 20 61 73 63 69 69 20 72 65 70 72 65 73 65 6e  n ascii represen
75f0: 74 61 74 69 6f 6e 20 6f 66 20 61 20 72 65 61 6c  tation of a real
7600: 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76   number..** Conv
7610: 65 72 74 20 74 68 69 73 20 73 74 72 69 6e 67 20  ert this string 
7620: 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a 0a  to a double..**.
7630: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
7640: 61 73 73 75 6d 65 73 20 74 68 61 74 20 7a 5b 5d  assumes that z[]
7650: 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61 6c   really is a val
7660: 69 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69  id number.  If i
7670: 74 0a 2a 2a 20 69 73 20 6e 6f 74 2c 20 74 68 65  t.** is not, the
7680: 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66   result is undef
7690: 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ined..**.** This
76a0: 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64   routine is used
76b0: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
76c0: 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29 20 66  library atof() f
76d0: 75 6e 63 74 69 6f 6e 20 62 65 63 61 75 73 65 0a  unction because.
76e0: 2a 2a 20 74 68 65 20 6c 69 62 72 61 72 79 20 61  ** the library a
76f0: 74 6f 66 28 29 20 6d 69 67 68 74 20 77 61 6e 74  tof() might want
7700: 20 74 6f 20 75 73 65 20 22 2c 22 20 61 73 20 74   to use "," as t
7710: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
7720: 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 22   instead.** of "
7730: 2e 22 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ." depending on 
7740: 68 6f 77 20 6c 6f 63 61 6c 65 20 69 73 20 73 65  how locale is se
7750: 74 2e 20 20 42 75 74 20 74 68 61 74 20 77 6f 75  t.  But that wou
7760: 6c 64 20 63 61 75 73 65 20 70 72 6f 62 6c 65 6d  ld cause problem
7770: 73 0a 2a 2a 20 66 6f 72 20 53 51 4c 2e 20 20 53  s.** for SQL.  S
7780: 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61  o this routine a
7790: 6c 77 61 79 73 20 75 73 65 73 20 22 2e 22 20 72  lways uses "." r
77a0: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
77b0: 61 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ale..*/.int sqli
77c0: 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
77d0: 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 20 2a 70  ar *z, double *p
77e0: 52 65 73 75 6c 74 29 7b 0a 23 69 66 6e 64 65 66  Result){.#ifndef
77f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
7800: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e  ATING_POINT.  in
7810: 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20 63 6f  t sign = 1;.  co
7820: 6e 73 74 20 63 68 61 72 20 2a 7a 42 65 67 69 6e  nst char *zBegin
7830: 20 3d 20 7a 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42   = z;.  LONGDOUB
7840: 4c 45 5f 54 59 50 45 20 76 31 20 3d 20 30 2e 30  LE_TYPE v1 = 0.0
7850: 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 73 70 61  ;.  while( isspa
7860: 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20  ce(*z) ) z++;.  
7870: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20  if( *z=='-' ){. 
7880: 20 20 20 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20     sign = -1;.  
7890: 20 20 7a 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69    z++;.  }else i
78a0: 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20  f( *z=='+' ){.  
78b0: 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 77 68 69    z++;.  }.  whi
78c0: 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28 75 38  le( isdigit(*(u8
78d0: 2a 29 7a 29 20 29 7b 0a 20 20 20 20 76 31 20 3d  *)z) ){.    v1 =
78e0: 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d   v1*10.0 + (*z -
78f0: 20 27 30 27 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a   '0');.    z++;.
7900: 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e    }.  if( *z=='.
7910: 27 20 29 7b 0a 20 20 20 20 4c 4f 4e 47 44 4f 55  ' ){.    LONGDOU
7920: 42 4c 45 5f 54 59 50 45 20 64 69 76 69 73 6f 72  BLE_TYPE divisor
7930: 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b   = 1.0;.    z++;
7940: 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69  .    while( isdi
7950: 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a  git(*(u8*)z) ){.
7960: 20 20 20 20 20 20 76 31 20 3d 20 76 31 2a 31 30        v1 = v1*10
7970: 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27 29 3b  .0 + (*z - '0');
7980: 0a 20 20 20 20 20 20 64 69 76 69 73 6f 72 20 2a  .      divisor *
7990: 3d 20 31 30 2e 30 3b 0a 20 20 20 20 20 20 7a 2b  = 10.0;.      z+
79a0: 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 31 20  +;.    }.    v1 
79b0: 2f 3d 20 64 69 76 69 73 6f 72 3b 0a 20 20 7d 0a  /= divisor;.  }.
79c0: 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c    if( *z=='e' ||
79d0: 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20   *z=='E' ){.    
79e0: 69 6e 74 20 65 73 69 67 6e 20 3d 20 31 3b 0a 20  int esign = 1;. 
79f0: 20 20 20 69 6e 74 20 65 76 61 6c 20 3d 20 30 3b     int eval = 0;
7a00: 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  .    LONGDOUBLE_
7a10: 54 59 50 45 20 73 63 61 6c 65 20 3d 20 31 2e 30  TYPE scale = 1.0
7a20: 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 69  ;.    z++;.    i
7a30: 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20  f( *z=='-' ){.  
7a40: 20 20 20 20 65 73 69 67 6e 20 3d 20 2d 31 3b 0a      esign = -1;.
7a50: 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d        z++;.    }
7a60: 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27  else if( *z=='+'
7a70: 20 29 7b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20   ){.      z++;. 
7a80: 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20     }.    while( 
7a90: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
7aa0: 20 29 7b 0a 20 20 20 20 20 20 65 76 61 6c 20 3d   ){.      eval =
7ab0: 20 65 76 61 6c 2a 31 30 20 2b 20 2a 7a 20 2d 20   eval*10 + *z - 
7ac0: 27 30 27 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a  '0';.      z++;.
7ad0: 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28      }.    while(
7ae0: 20 65 76 61 6c 3e 3d 36 34 20 29 7b 20 73 63 61   eval>=64 ){ sca
7af0: 6c 65 20 2a 3d 20 31 2e 30 65 2b 36 34 3b 20 65  le *= 1.0e+64; e
7b00: 76 61 6c 20 2d 3d 20 36 34 3b 20 7d 0a 20 20 20  val -= 64; }.   
7b10: 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31 36   while( eval>=16
7b20: 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30   ){ scale *= 1.0
7b30: 65 2b 31 36 3b 20 65 76 61 6c 20 2d 3d 20 31 36  e+16; eval -= 16
7b40: 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65  ; }.    while( e
7b50: 76 61 6c 3e 3d 34 20 29 7b 20 73 63 61 6c 65 20  val>=4 ){ scale 
7b60: 2a 3d 20 31 2e 30 65 2b 34 3b 20 65 76 61 6c 20  *= 1.0e+4; eval 
7b70: 2d 3d 20 34 3b 20 7d 0a 20 20 20 20 77 68 69 6c  -= 4; }.    whil
7b80: 65 28 20 65 76 61 6c 3e 3d 31 20 29 7b 20 73 63  e( eval>=1 ){ sc
7b90: 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 3b 20 65  ale *= 1.0e+1; e
7ba0: 76 61 6c 20 2d 3d 20 31 3b 20 7d 0a 20 20 20 20  val -= 1; }.    
7bb0: 69 66 28 20 65 73 69 67 6e 3c 30 20 29 7b 0a 20  if( esign<0 ){. 
7bc0: 20 20 20 20 20 76 31 20 2f 3d 20 73 63 61 6c 65       v1 /= scale
7bd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7be0: 20 20 20 76 31 20 2a 3d 20 73 63 61 6c 65 3b 0a     v1 *= scale;.
7bf0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 70 52 65      }.  }.  *pRe
7c00: 73 75 6c 74 20 3d 20 73 69 67 6e 3c 30 20 3f 20  sult = sign<0 ? 
7c10: 2d 76 31 20 3a 20 76 31 3b 0a 20 20 72 65 74 75  -v1 : v1;.  retu
7c20: 72 6e 20 7a 20 2d 20 7a 42 65 67 69 6e 3b 0a 23  rn z - zBegin;.#
7c30: 65 6c 73 65 0a 20 20 72 65 74 75 72 6e 20 73 71  else.  return sq
7c40: 6c 69 74 65 33 61 74 6f 69 36 34 28 7a 2c 20 70  lite3atoi64(z, p
7c50: 52 65 73 75 6c 74 29 3b 0a 23 65 6e 64 69 66 20  Result);.#endif 
7c60: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  /* SQLITE_OMIT_F
7c70: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f  LOATING_POINT */
7c80: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
7c90: 20 54 52 55 45 20 69 66 20 7a 4e 75 6d 20 69 73   TRUE if zNum is
7ca0: 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64   a 64-bit signed
7cb0: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 77 72 69   integer and wri
7cc0: 74 65 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  te.** the value 
7cd0: 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  of the integer i
7ce0: 6e 74 6f 20 2a 70 4e 75 6d 2e 20 20 49 66 20 7a  nto *pNum.  If z
7cf0: 4e 75 6d 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e  Num is not an in
7d00: 74 65 67 65 72 0a 2a 2a 20 6f 72 20 69 73 20 61  teger.** or is a
7d10: 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  n integer that i
7d20: 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
7d30: 65 20 65 78 70 72 65 73 73 65 64 20 77 69 74 68  e expressed with
7d40: 20 36 34 20 62 69 74 73 2c 0a 2a 2a 20 74 68 65   64 bits,.** the
7d50: 6e 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 20  n return false. 
7d60: 20 49 66 20 6e 3e 30 20 61 6e 64 20 74 68 65 20   If n>0 and the 
7d70: 69 6e 74 65 67 65 72 20 69 73 20 73 74 72 69 6e  integer is strin
7d80: 67 20 69 73 20 6e 6f 74 0a 2a 2a 20 65 78 61 63  g is not.** exac
7d90: 74 6c 79 20 6e 20 62 79 74 65 73 20 6c 6f 6e 67  tly n bytes long
7da0: 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a  , return false..
7db0: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20  **.** When this 
7dc0: 72 6f 75 74 69 6e 65 20 77 61 73 20 6f 72 69 67  routine was orig
7dd0: 69 6e 61 6c 6c 79 20 77 72 69 74 74 65 6e 20 69  inally written i
7de0: 74 20 64 65 61 6c 74 20 77 69 74 68 20 6f 6e 6c  t dealt with onl
7df0: 79 0a 2a 2a 20 33 32 2d 62 69 74 20 6e 75 6d 62  y.** 32-bit numb
7e00: 65 72 73 2e 20 20 41 74 20 74 68 61 74 20 74 69  ers.  At that ti
7e10: 6d 65 2c 20 69 74 20 77 61 73 20 6d 75 63 68 20  me, it was much 
7e20: 66 61 73 74 65 72 20 74 68 61 6e 20 74 68 65 0a  faster than the.
7e30: 2a 2a 20 61 74 6f 69 28 29 20 6c 69 62 72 61 72  ** atoi() librar
7e40: 79 20 72 6f 75 74 69 6e 65 20 69 6e 20 52 65 64  y routine in Red
7e50: 48 61 74 20 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20  Hat 7.2..*/.int 
7e60: 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28 63 6f  sqlite3atoi64(co
7e70: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20  nst char *zNum, 
7e80: 69 36 34 20 2a 70 4e 75 6d 29 7b 0a 20 20 69 36  i64 *pNum){.  i6
7e90: 34 20 76 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e  4 v = 0;.  int n
7ea0: 65 67 3b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a  eg;.  int i, c;.
7eb0: 20 20 77 68 69 6c 65 28 20 69 73 73 70 61 63 65    while( isspace
7ec0: 28 2a 7a 4e 75 6d 29 20 29 20 7a 4e 75 6d 2b 2b  (*zNum) ) zNum++
7ed0: 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27  ;.  if( *zNum=='
7ee0: 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20  -' ){.    neg = 
7ef0: 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20  1;.    zNum++;. 
7f00: 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e 75 6d   }else if( *zNum
7f10: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 6e 65 67  =='+' ){.    neg
7f20: 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b   = 0;.    zNum++
7f30: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
7f40: 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 66 6f  eg = 0;.  }.  fo
7f50: 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69  r(i=0; (c=zNum[i
7f60: 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39  ])>='0' && c<='9
7f70: 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76 20 3d  '; i++){.    v =
7f80: 20 76 2a 31 30 20 2b 20 63 20 2d 20 27 30 27 3b   v*10 + c - '0';
7f90: 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20 3d 20 6e  .  }.  *pNum = n
7fa0: 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a 20 20 72  eg ? -v : v;.  r
7fb0: 65 74 75 72 6e 20 63 3d 3d 30 20 26 26 20 69 3e  eturn c==0 && i>
7fc0: 30 20 26 26 20 0a 20 20 20 20 20 20 28 69 3c 31  0 && .      (i<1
7fd0: 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26 20 6d  9 || (i==19 && m
7fe0: 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32 33  emcmp(zNum,"9223
7ff0: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 22  372036854775807"
8000: 2c 31 39 29 3c 3d 30 29 29 3b 0a 7d 0a 0a 2f 2a  ,19)<=0));.}../*
8010: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a  .** The string z
8020: 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61  Num represents a
8030: 6e 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65 72  n integer.  Ther
8040: 65 20 6d 69 67 68 74 20 62 65 20 73 6f 6d 65 20  e might be some 
8050: 6f 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d 61  other.** informa
8060: 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  tion following t
8070: 68 65 20 69 6e 74 65 67 65 72 20 74 6f 6f 2c 20  he integer too, 
8080: 62 75 74 20 74 68 61 74 20 70 61 72 74 20 69 73  but that part is
8090: 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66 20   ignored..** If 
80a0: 74 68 65 20 69 6e 74 65 67 65 72 20 74 68 61 74  the integer that
80b0: 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 7a   the prefix of z
80c0: 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 77  Num represents w
80d0: 69 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a 2a 20  ill fit in a.** 
80e0: 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  32-bit signed in
80f0: 74 65 67 65 72 2c 20 72 65 74 75 72 6e 20 54 52  teger, return TR
8100: 55 45 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72  UE.  Otherwise r
8110: 65 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a 0a  eturn FALSE..**.
8120: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
8130: 72 65 74 75 72 6e 73 20 46 41 4c 53 45 20 66 6f  returns FALSE fo
8140: 72 20 74 68 65 20 73 74 72 69 6e 67 20 2d 32 31  r the string -21
8150: 34 37 34 38 33 36 34 38 20 65 76 65 6e 20 74 68  47483648 even th
8160: 61 74 0a 2a 2a 20 74 68 61 74 20 6e 75 6d 62 65  at.** that numbe
8170: 72 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 66  r will in fact f
8180: 69 74 20 69 6e 20 61 20 33 32 2d 62 69 74 20 69  it in a 32-bit i
8190: 6e 74 65 67 65 72 2e 20 20 42 75 74 20 70 6f 73  nteger.  But pos
81a0: 69 74 69 76 65 0a 2a 2a 20 32 31 34 37 34 38 33  itive.** 2147483
81b0: 36 34 38 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74  648 will not fit
81c0: 20 69 6e 20 33 32 20 62 69 74 73 2e 20 20 53 6f   in 32 bits.  So
81d0: 20 69 74 20 73 65 65 6d 73 20 73 61 66 65 72 20   it seems safer 
81e0: 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c  to return.** fal
81f0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
8200: 74 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e 33  t sqlite3FitsIn3
8210: 32 42 69 74 73 28 63 6f 6e 73 74 20 63 68 61 72  2Bits(const char
8220: 20 2a 7a 4e 75 6d 29 7b 0a 20 20 69 6e 74 20 69   *zNum){.  int i
8230: 2c 20 63 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d  , c;.  if( *zNum
8240: 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d  =='-' || *zNum==
8250: 27 2b 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20  '+' ) zNum++;.  
8260: 66 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d  for(i=0; (c=zNum
8270: 5b 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d  [i])>='0' && c<=
8280: 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 72 65  '9'; i++){}.  re
8290: 74 75 72 6e 20 69 3c 31 30 20 7c 7c 20 28 69 3d  turn i<10 || (i=
82a0: 3d 31 30 20 26 26 20 6d 65 6d 63 6d 70 28 7a 4e  =10 && memcmp(zN
82b0: 75 6d 2c 22 32 31 34 37 34 38 33 36 34 37 22 2c  um,"2147483647",
82c0: 31 30 29 3c 3d 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  10)<=0);.}../*.*
82d0: 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73  * If zNum repres
82e0: 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ents an integer 
82f0: 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e  that will fit in
8300: 20 33 32 2d 62 69 74 73 2c 20 74 68 65 6e 20 73   32-bits, then s
8310: 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f  et.** *pValue to
8320: 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e   that integer an
8330: 64 20 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20  d return true.  
8340: 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e  Otherwise return
8350: 20 66 61 6c 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73   false..*/.int s
8360: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
8370: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c  onst char *zNum,
8380: 20 69 6e 74 20 2a 70 56 61 6c 75 65 29 7b 0a 20   int *pValue){. 
8390: 20 69 66 28 20 73 71 6c 69 74 65 33 46 69 74 73   if( sqlite3Fits
83a0: 49 6e 33 32 42 69 74 73 28 7a 4e 75 6d 29 20 29  In32Bits(zNum) )
83b0: 7b 0a 20 20 20 20 2a 70 56 61 6c 75 65 20 3d 20  {.    *pValue = 
83c0: 61 74 6f 69 28 7a 4e 75 6d 29 3b 0a 20 20 20 20  atoi(zNum);.    
83d0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
83e0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
83f0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a 4e  ** The string zN
8400: 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e  um represents an
8410: 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65 72 65   integer.  There
8420: 20 6d 69 67 68 74 20 62 65 20 73 6f 6d 65 20 6f   might be some o
8430: 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ther.** informat
8440: 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion following th
8450: 65 20 69 6e 74 65 67 65 72 20 74 6f 6f 2c 20 62  e integer too, b
8460: 75 74 20 74 68 61 74 20 70 61 72 74 20 69 73 20  ut that part is 
8470: 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66 20 74  ignored..** If t
8480: 68 65 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  he integer that 
8490: 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 7a 4e  the prefix of zN
84a0: 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 77 69  um represents wi
84b0: 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a 2a 20 36  ll fit in a.** 6
84c0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
84d0: 65 67 65 72 2c 20 72 65 74 75 72 6e 20 54 52 55  eger, return TRU
84e0: 45 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  E.  Otherwise re
84f0: 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a  turn FALSE..**.*
8500: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72  * This routine r
8510: 65 74 75 72 6e 73 20 46 41 4c 53 45 20 66 6f 72  eturns FALSE for
8520: 20 74 68 65 20 73 74 72 69 6e 67 20 2d 39 32 32   the string -922
8530: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
8540: 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68   even that.** th
8550: 61 74 20 6e 75 6d 62 65 72 20 77 69 6c 6c 2c 20  at number will, 
8560: 69 6e 20 74 68 65 6f 72 79 20 66 69 74 20 69 6e  in theory fit in
8570: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
8580: 72 2e 20 20 50 6f 73 69 74 69 76 65 0a 2a 2a 20  r.  Positive.** 
8590: 39 32 32 33 33 37 33 30 33 36 38 35 34 37 37 35  9223373036854775
85a0: 38 30 38 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74  808 will not fit
85b0: 20 69 6e 20 36 34 20 62 69 74 73 2e 20 20 53 6f   in 64 bits.  So
85c0: 20 69 74 20 73 65 65 6d 73 20 73 61 66 65 72 20   it seems safer 
85d0: 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c  to return.** fal
85e0: 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  se..*/.int sqlit
85f0: 65 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 63  e3FitsIn64Bits(c
8600: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29  onst char *zNum)
8610: 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20  {.  int i, c;.  
8620: 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c  if( *zNum=='-' |
8630: 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a  | *zNum=='+' ) z
8640: 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 30  Num++;.  for(i=0
8650: 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27  ; (c=zNum[i])>='
8660: 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b  0' && c<='9'; i+
8670: 2b 29 7b 7d 0a 20 20 72 65 74 75 72 6e 20 69 3c  +){}.  return i<
8680: 31 39 20 7c 7c 20 28 69 3d 3d 31 39 20 26 26 20  19 || (i==19 && 
8690: 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32  memcmp(zNum,"922
86a0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
86b0: 22 2c 31 39 29 3c 3d 30 29 3b 0a 7d 0a 0a 0a 2f  ",19)<=0);.}.../
86c0: 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
86d0: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 72 6f  sqlite.magic fro
86e0: 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  m SQLITE_MAGIC_O
86f0: 50 45 4e 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41  PEN to SQLITE_MA
8700: 47 49 43 5f 42 55 53 59 2e 0a 2a 2a 20 52 65 74  GIC_BUSY..** Ret
8710: 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e 6f  urn an error (no
8720: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 6d  n-zero) if the m
8730: 61 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51 4c  agic was not SQL
8740: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 0a 2a  ITE_MAGIC_OPEN.*
8750: 2a 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74  * when this rout
8760: 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a 2a  ine is called..*
8770: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
8780: 65 20 69 73 20 61 20 61 74 74 65 6d 70 74 20 74  e is a attempt t
8790: 6f 20 64 65 74 65 63 74 20 69 66 20 74 77 6f 20  o detect if two 
87a0: 74 68 72 65 61 64 73 20 75 73 65 20 74 68 65 0a  threads use the.
87b0: 2a 2a 20 73 61 6d 65 20 73 71 6c 69 74 65 2a 20  ** same sqlite* 
87c0: 70 6f 69 6e 74 65 72 20 61 74 20 74 68 65 20 73  pointer at the s
87d0: 61 6d 65 20 74 69 6d 65 2e 20 20 54 68 65 72 65  ame time.  There
87e0: 20 69 73 20 61 20 72 61 63 65 20 0a 2a 2a 20 63   is a race .** c
87f0: 6f 6e 64 69 74 69 6f 6e 20 73 6f 20 69 74 20 69  ondition so it i
8800: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
8810: 74 68 65 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  the error is not
8820: 20 64 65 74 65 63 74 65 64 2e 0a 2a 2a 20 42 75   detected..** Bu
8830: 74 20 75 73 75 61 6c 6c 79 20 74 68 65 20 70 72  t usually the pr
8840: 6f 62 6c 65 6d 20 77 69 6c 6c 20 62 65 20 73 65  oblem will be se
8850: 65 6e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  en.  The result 
8860: 77 69 6c 6c 20 62 65 20 61 6e 0a 2a 2a 20 65 72  will be an.** er
8870: 72 6f 72 20 77 68 69 63 68 20 63 61 6e 20 62 65  ror which can be
8880: 20 75 73 65 64 20 74 6f 20 64 65 62 75 67 20 74   used to debug t
8890: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
88a0: 68 61 74 20 69 73 0a 2a 2a 20 75 73 69 6e 67 20  hat is.** using 
88b0: 53 51 4c 69 74 65 20 69 6e 63 6f 72 72 65 63 74  SQLite incorrect
88c0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  ly..**.** Ticket
88d0: 20 23 32 30 32 3a 20 20 49 66 20 64 62 2d 3e 6d   #202:  If db->m
88e0: 61 67 69 63 20 69 73 20 6e 6f 74 20 61 20 76 61  agic is not a va
88f0: 6c 69 64 20 6f 70 65 6e 20 76 61 6c 75 65 2c 20  lid open value, 
8900: 74 61 6b 65 20 63 61 72 65 20 6e 6f 74 0a 2a 2a  take care not.**
8910: 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 64   to modify the d
8920: 62 20 73 74 72 75 63 74 75 72 65 20 61 74 20 61  b structure at a
8930: 6c 6c 2e 20 20 49 74 20 63 6f 75 6c 64 20 62 65  ll.  It could be
8940: 20 74 68 61 74 20 64 62 20 69 73 20 61 20 73 74   that db is a st
8950: 61 6c 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 2e 20  ale.** pointer. 
8960: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
8970: 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61   it could be tha
8980: 74 20 74 68 65 72 65 20 68 61 73 20 62 65 65 6e  t there has been
8990: 20 61 20 70 72 69 6f 72 0a 2a 2a 20 63 61 6c 6c   a prior.** call
89a0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73   to sqlite3_clos
89b0: 65 28 64 62 29 20 61 6e 64 20 64 62 20 68 61 73  e(db) and db has
89c0: 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65   been deallocate
89d0: 64 2e 20 20 41 6e 64 20 77 65 20 64 6f 0a 2a 2a  d.  And we do.**
89e0: 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20 77 72 69   not want to wri
89f0: 74 65 20 69 6e 74 6f 20 64 65 61 6c 6c 6f 63 61  te into dealloca
8a00: 74 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 69  ted memory..*/.i
8a10: 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
8a20: 4f 6e 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  On(sqlite3 *db){
8a30: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  .  if( db->magic
8a40: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  ==SQLITE_MAGIC_O
8a50: 50 45 4e 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  PEN ){.    db->m
8a60: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
8a70: 47 49 43 5f 42 55 53 59 3b 0a 20 20 20 20 72 65  GIC_BUSY;.    re
8a80: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
8a90: 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  if( db->magic==S
8aa0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
8ab0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
8ac0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
8ad0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62 2d 3e  _ERROR;.    db->
8ae0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
8af0: 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  Interrupt;.  }. 
8b00: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
8b10: 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6d  .** Change the m
8b20: 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45  agic from SQLITE
8b30: 5f 4d 41 47 49 43 5f 42 55 53 59 20 74 6f 20 53  _MAGIC_BUSY to S
8b40: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
8b50: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65  ..** Return an e
8b60: 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  rror (non-zero) 
8b70: 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61 73  if the magic was
8b80: 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49   not SQLITE_MAGI
8b90: 43 5f 42 55 53 59 0a 2a 2a 20 77 68 65 6e 20 74  C_BUSY.** when t
8ba0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
8bb0: 61 6c 6c 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  alled..*/.int sq
8bc0: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 73  lite3SafetyOff(s
8bd0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
8be0: 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51  f( db->magic==SQ
8bf0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
8c00: 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
8c10: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
8c20: 4f 50 45 4e 3b 0a 20 20 20 20 72 65 74 75 72 6e  OPEN;.    return
8c30: 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   0;.  }else if( 
8c40: 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54  db->magic==SQLIT
8c50: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 29 7b 0a  E_MAGIC_OPEN ){.
8c60: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
8c70: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
8c80: 4f 52 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  OR;.    db->flag
8c90: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
8ca0: 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 72 65 74  rrupt;.  }.  ret
8cb0: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
8cc0: 43 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75  Check to make su
8cd0: 72 65 20 77 65 20 68 61 76 65 20 61 20 76 61 6c  re we have a val
8ce0: 69 64 20 64 62 20 70 6f 69 6e 74 65 72 2e 20 20  id db pointer.  
8cf0: 54 68 69 73 20 74 65 73 74 20 69 73 20 6e 6f 74  This test is not
8d00: 0a 2a 2a 20 66 6f 6f 6c 70 72 6f 6f 66 20 62 75  .** foolproof bu
8d10: 74 20 69 74 20 64 6f 65 73 20 70 72 6f 76 69 64  t it does provid
8d20: 65 20 73 6f 6d 65 20 6d 65 61 73 75 72 65 20 6f  e some measure o
8d30: 66 20 70 72 6f 74 65 63 74 69 6f 6e 20 61 67 61  f protection aga
8d40: 69 6e 73 74 0a 2a 2a 20 6d 69 73 75 73 65 20 6f  inst.** misuse o
8d50: 66 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  f the interface 
8d60: 73 75 63 68 20 61 73 20 70 61 73 73 69 6e 67 20  such as passing 
8d70: 69 6e 20 64 62 20 70 6f 69 6e 74 65 72 73 20 74  in db pointers t
8d80: 68 61 74 20 61 72 65 0a 2a 2a 20 4e 55 4c 4c 20  hat are.** NULL 
8d90: 6f 72 20 77 68 69 63 68 20 68 61 76 65 20 62 65  or which have be
8da0: 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6c  en previously cl
8db0: 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 72  osed.  If this r
8dc0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 0a 2a  outine returns.*
8dd0: 2a 20 54 52 55 45 20 69 74 20 6d 65 61 6e 73 20  * TRUE it means 
8de0: 74 68 61 74 20 74 68 65 20 64 62 20 70 6f 69 6e  that the db poin
8df0: 74 65 72 20 69 73 20 69 6e 76 61 6c 69 64 20 61  ter is invalid a
8e00: 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  nd should not be
8e10: 0a 2a 2a 20 64 65 72 65 66 65 72 65 6e 63 65 64  .** dereferenced
8e20: 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e   for any reason.
8e30: 20 20 54 68 65 20 63 61 6c 6c 69 6e 67 20 66 75    The calling fu
8e40: 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 69 6e  nction should in
8e50: 76 6f 6b 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  voke.** SQLITE_M
8e60: 49 53 55 53 45 20 69 6d 6d 65 64 69 61 74 65 6c  ISUSE immediatel
8e70: 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  y..*/.int sqlite
8e80: 33 53 61 66 65 74 79 43 68 65 63 6b 28 73 71 6c  3SafetyCheck(sql
8e90: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
8ea0: 20 6d 61 67 69 63 3b 0a 20 20 69 66 28 20 64 62   magic;.  if( db
8eb0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
8ec0: 20 20 6d 61 67 69 63 20 3d 20 64 62 2d 3e 6d 61    magic = db->ma
8ed0: 67 69 63 3b 0a 20 20 69 66 28 20 6d 61 67 69 63  gic;.  if( magic
8ee0: 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  !=SQLITE_MAGIC_C
8ef0: 4c 4f 53 45 44 20 26 26 0a 20 20 20 20 20 20 20  LOSED &&.       
8f00: 20 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f    magic!=SQLITE_
8f10: 4d 41 47 49 43 5f 4f 50 45 4e 20 26 26 0a 20 20  MAGIC_OPEN &&.  
8f20: 20 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53 51         magic!=SQ
8f30: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
8f40: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 72 65  ) return 1;.  re
8f50: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
8f60: 20 54 68 65 20 76 61 72 69 61 62 6c 65 2d 6c 65   The variable-le
8f70: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 65 6e 63  ngth integer enc
8f80: 6f 64 69 6e 67 20 69 73 20 61 73 20 66 6f 6c 6c  oding is as foll
8f90: 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a  ows:.**.** KEY:.
8fa0: 2a 2a 20 20 20 20 20 20 20 20 20 41 20 3d 20 30  **         A = 0
8fb0: 78 78 78 78 78 78 78 20 20 20 20 37 20 62 69 74  xxxxxxx    7 bit
8fc0: 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 6f 6e  s of data and on
8fd0: 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20  e flag bit.**   
8fe0: 20 20 20 20 20 20 42 20 3d 20 31 78 78 78 78 78        B = 1xxxxx
8ff0: 78 78 20 20 20 20 37 20 62 69 74 73 20 6f 66 20  xx    7 bits of 
9000: 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61  data and one fla
9010: 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20  g bit.**        
9020: 20 43 20 3d 20 78 78 78 78 78 78 78 78 20 20 20   C = xxxxxxxx   
9030: 20 38 20 62 69 74 73 20 6f 66 20 64 61 74 61 0a   8 bits of data.
9040: 2a 2a 0a 2a 2a 20 20 37 20 62 69 74 73 20 2d 20  **.**  7 bits - 
9050: 41 0a 2a 2a 20 31 34 20 62 69 74 73 20 2d 20 42  A.** 14 bits - B
9060: 41 0a 2a 2a 20 32 31 20 62 69 74 73 20 2d 20 42  A.** 21 bits - B
9070: 42 41 0a 2a 2a 20 32 38 20 62 69 74 73 20 2d 20  BA.** 28 bits - 
9080: 42 42 42 41 0a 2a 2a 20 33 35 20 62 69 74 73 20  BBBA.** 35 bits 
9090: 2d 20 42 42 42 42 41 0a 2a 2a 20 34 32 20 62 69  - BBBBA.** 42 bi
90a0: 74 73 20 2d 20 42 42 42 42 42 41 0a 2a 2a 20 34  ts - BBBBBA.** 4
90b0: 39 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 41  9 bits - BBBBBBA
90c0: 0a 2a 2a 20 35 36 20 62 69 74 73 20 2d 20 42 42  .** 56 bits - BB
90d0: 42 42 42 42 42 41 0a 2a 2a 20 36 34 20 62 69 74  BBBBBA.** 64 bit
90e0: 73 20 2d 20 42 42 42 42 42 42 42 42 43 0a 2a 2f  s - BBBBBBBBC.*/
90f0: 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ../*.** Write a 
9100: 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d  64-bit variable-
9110: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 74  length integer t
9120: 6f 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69 6e  o memory startin
9130: 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54 68  g at p[0]..** Th
9140: 65 20 6c 65 6e 67 74 68 20 6f 66 20 64 61 74 61  e length of data
9150: 20 77 72 69 74 65 20 77 69 6c 6c 20 62 65 20 62   write will be b
9160: 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62  etween 1 and 9 b
9170: 79 74 65 73 2e 20 20 54 68 65 20 6e 75 6d 62 65  ytes.  The numbe
9180: 72 0a 2a 2a 20 6f 66 20 62 79 74 65 73 20 77 72  r.** of bytes wr
9190: 69 74 74 65 6e 20 69 73 20 72 65 74 75 72 6e 65  itten is returne
91a0: 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72 69 61  d..**.** A varia
91b0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
91c0: 65 72 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  er consists of t
91d0: 68 65 20 6c 6f 77 65 72 20 37 20 62 69 74 73 20  he lower 7 bits 
91e0: 6f 66 20 65 61 63 68 20 62 79 74 65 0a 2a 2a 20  of each byte.** 
91f0: 66 6f 72 20 61 6c 6c 20 62 79 74 65 73 20 74 68  for all bytes th
9200: 61 74 20 68 61 76 65 20 74 68 65 20 38 74 68 20  at have the 8th 
9210: 62 69 74 20 73 65 74 20 61 6e 64 20 6f 6e 65 20  bit set and one 
9220: 62 79 74 65 20 77 69 74 68 20 74 68 65 20 38 74  byte with the 8t
9230: 68 0a 2a 2a 20 62 69 74 20 63 6c 65 61 72 2e 20  h.** bit clear. 
9240: 20 45 78 63 65 70 74 2c 20 69 66 20 77 65 20 67   Except, if we g
9250: 65 74 20 74 6f 20 74 68 65 20 39 74 68 20 62 79  et to the 9th by
9260: 74 65 2c 20 69 74 20 73 74 6f 72 65 73 20 74 68  te, it stores th
9270: 65 20 66 75 6c 6c 0a 2a 2a 20 38 20 62 69 74 73  e full.** 8 bits
9280: 20 61 6e 64 20 69 73 20 74 68 65 20 6c 61 73 74   and is the last
9290: 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   byte..*/.int sq
92a0: 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
92b0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
92c0: 20 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69   u64 v){.  int i
92d0: 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20 62 75 66  , j, n;.  u8 buf
92e0: 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76 20 26 20  [10];.  if( v & 
92f0: 28 28 28 75 36 34 29 30 78 66 66 30 30 30 30 30  (((u64)0xff00000
9300: 30 29 3c 3c 33 32 29 20 29 7b 0a 20 20 20 20 70  0)<<32) ){.    p
9310: 5b 38 5d 20 3d 20 76 3b 0a 20 20 20 20 76 20 3e  [8] = v;.    v >
9320: 3e 3d 20 38 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >= 8;.    for(i=
9330: 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20  7; i>=0; i--){. 
9340: 20 20 20 20 20 70 5b 69 5d 20 3d 20 28 76 20 26       p[i] = (v &
9350: 20 30 78 37 66 29 20 7c 20 30 78 38 30 3b 0a 20   0x7f) | 0x80;. 
9360: 20 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a 20 20       v >>= 7;.  
9370: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 39    }.    return 9
9380: 3b 0a 20 20 7d 20 20 20 20 0a 20 20 6e 20 3d 20  ;.  }    .  n = 
9390: 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 62 75 66  0;.  do{.    buf
93a0: 5b 6e 2b 2b 5d 20 3d 20 28 76 20 26 20 30 78 37  [n++] = (v & 0x7
93b0: 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 76  f) | 0x80;.    v
93c0: 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65   >>= 7;.  }while
93d0: 28 20 76 21 3d 30 20 29 3b 0a 20 20 62 75 66 5b  ( v!=0 );.  buf[
93e0: 30 5d 20 26 3d 20 30 78 37 66 3b 0a 20 20 61 73  0] &= 0x7f;.  as
93f0: 73 65 72 74 28 20 6e 3c 3d 39 20 29 3b 0a 20 20  sert( n<=9 );.  
9400: 66 6f 72 28 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20  for(i=0, j=n-1; 
9410: 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b  j>=0; j--, i++){
9420: 0a 20 20 20 20 70 5b 69 5d 20 3d 20 62 75 66 5b  .    p[i] = buf[
9430: 6a 5d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  j];.  }.  return
9440: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61   n;.}../*.** Rea
9450: 64 20 61 20 36 34 2d 62 69 74 20 76 61 72 69 61  d a 64-bit varia
9460: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
9470: 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73  er from memory s
9480: 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e  tarting at p[0].
9490: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
94a0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
94b0: 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ead.  The value 
94c0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e  is stored in *v.
94d0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  .*/.int sqlite3G
94e0: 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
94f0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 2c  nsigned char *p,
9500: 20 75 36 34 20 2a 76 29 7b 0a 20 20 75 33 32 20   u64 *v){.  u32 
9510: 78 3b 0a 20 20 75 36 34 20 78 36 34 3b 0a 20 20  x;.  u64 x64;.  
9520: 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65  int n;.  unsigne
9530: 64 20 63 68 61 72 20 63 3b 0a 20 20 69 66 28 20  d char c;.  if( 
9540: 28 28 63 20 3d 20 70 5b 30 5d 29 20 26 20 30 78  ((c = p[0]) & 0x
9550: 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76  80)==0 ){.    *v
9560: 20 3d 20 63 3b 0a 20 20 20 20 72 65 74 75 72 6e   = c;.    return
9570: 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 63 20   1;.  }.  x = c 
9580: 26 20 30 78 37 66 3b 0a 20 20 69 66 28 20 28 28  & 0x7f;.  if( ((
9590: 63 20 3d 20 70 5b 31 5d 29 20 26 20 30 78 38 30  c = p[1]) & 0x80
95a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
95b0: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
95c0: 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a 20   return 2;.  }. 
95d0: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63   x = (x<<7) | (c
95e0: 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20 28 28  &0x7f);.  if( ((
95f0: 63 20 3d 20 70 5b 32 5d 29 20 26 20 30 78 38 30  c = p[2]) & 0x80
9600: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
9610: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
9620: 20 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d 0a 20   return 3;.  }. 
9630: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63   x = (x<<7) | (c
9640: 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20 28 28  &0x7f);.  if( ((
9650: 63 20 3d 20 70 5b 33 5d 29 20 26 20 30 78 38 30  c = p[3]) & 0x80
9660: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  )==0 ){.    *v =
9670: 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20 20 20   (x<<7) | c;.   
9680: 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d 0a 20   return 4;.  }. 
9690: 20 78 36 34 20 3d 20 28 78 3c 3c 37 29 20 7c 20   x64 = (x<<7) | 
96a0: 28 63 26 30 78 37 66 29 3b 0a 20 20 6e 20 3d 20  (c&0x7f);.  n = 
96b0: 34 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 63 20 3d  4;.  do{.    c =
96c0: 20 70 5b 6e 2b 2b 5d 3b 0a 20 20 20 20 69 66 28   p[n++];.    if(
96d0: 20 6e 3d 3d 39 20 29 7b 0a 20 20 20 20 20 20 78   n==9 ){.      x
96e0: 36 34 20 3d 20 28 78 36 34 3c 3c 38 29 20 7c 20  64 = (x64<<8) | 
96f0: 63 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  c;.      break;.
9700: 20 20 20 20 7d 0a 20 20 20 20 78 36 34 20 3d 20      }.    x64 = 
9710: 28 78 36 34 3c 3c 37 29 20 7c 20 28 63 26 30 78  (x64<<7) | (c&0x
9720: 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28  7f);.  }while( (
9730: 63 20 26 20 30 78 38 30 29 21 3d 30 20 29 3b 0a  c & 0x80)!=0 );.
9740: 20 20 2a 76 20 3d 20 78 36 34 3b 0a 20 20 72 65    *v = x64;.  re
9750: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn n;.}../*.**
9760: 20 52 65 61 64 20 61 20 33 32 2d 62 69 74 20 76   Read a 32-bit v
9770: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
9780: 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f  nteger from memo
9790: 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70  ry starting at p
97a0: 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  [0]..** Return t
97b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
97c0: 65 73 20 72 65 61 64 2e 20 20 54 68 65 20 76 61  es read.  The va
97d0: 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  lue is stored in
97e0: 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69   *v..*/.int sqli
97f0: 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
9800: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
9810: 61 72 20 2a 70 2c 20 75 33 32 20 2a 76 29 7b 0a  ar *p, u32 *v){.
9820: 20 20 75 33 32 20 78 3b 0a 20 20 69 6e 74 20 6e    u32 x;.  int n
9830: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
9840: 72 20 63 3b 0a 20 20 69 66 28 20 28 28 73 69 67  r c;.  if( ((sig
9850: 6e 65 64 20 63 68 61 72 2a 29 70 29 5b 30 5d 3e  ned char*)p)[0]>
9860: 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 70  =0 ){.    *v = p
9870: 5b 30 5d 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  [0];.    return 
9880: 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 70 5b 30  1;.  }.  x = p[0
9890: 5d 20 26 20 30 78 37 66 3b 0a 20 20 69 66 28 20  ] & 0x7f;.  if( 
98a0: 28 28 73 69 67 6e 65 64 20 63 68 61 72 2a 29 70  ((signed char*)p
98b0: 29 5b 31 5d 3e 3d 30 20 29 7b 0a 20 20 20 20 2a  )[1]>=0 ){.    *
98c0: 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 70 5b 31  v = (x<<7) | p[1
98d0: 5d 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b  ];.    return 2;
98e0: 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c 3c 37  .  }.  x = (x<<7
98f0: 29 20 7c 20 28 70 5b 31 5d 20 26 20 30 78 37 66  ) | (p[1] & 0x7f
9900: 29 3b 0a 20 20 6e 20 3d 20 32 3b 0a 20 20 64 6f  );.  n = 2;.  do
9910: 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c 3c 37 29  {.    x = (x<<7)
9920: 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b 2b 5d 29   | ((c = p[n++])
9930: 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65  &0x7f);.  }while
9940: 28 20 28 63 20 26 20 30 78 38 30 29 21 3d 30 20  ( (c & 0x80)!=0 
9950: 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a 76 20 3d  && n<9 );.  *v =
9960: 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a   x;.  return n;.
9970: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
9980: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
9990: 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  tes that will be
99a0: 20 6e 65 65 64 65 64 20 74 6f 20 73 74 6f 72 65   needed to store
99b0: 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a 20 36 34   the given.** 64
99c0: 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  -bit integer..*/
99d0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
99e0: 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b 0a 20 20  ntLen(u64 v){.  
99f0: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 64 6f 7b  int i = 0;.  do{
9a00: 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 76 20  .    i++;.    v 
9a10: 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28  >>= 7;.  }while(
9a20: 20 76 21 3d 30 20 26 26 20 69 3c 39 20 29 3b 0a   v!=0 && i<9 );.
9a30: 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 0a 23    return i;.}..#
9a40: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
9a50: 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54  TE_OMIT_BLOB_LIT
9a60: 45 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e 65 64  ERAL) || defined
9a70: 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
9a80: 43 29 20 5c 0a 20 20 20 20 7c 7c 20 64 65 66 69  C) \.    || defi
9a90: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
9aa0: 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 6c 61 74 65  ./*.** Translate
9ab0: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 6f   a single byte o
9ac0: 66 20 48 65 78 20 69 6e 74 6f 20 61 6e 20 69 6e  f Hex into an in
9ad0: 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  teger..*/.static
9ae0: 20 69 6e 74 20 68 65 78 54 6f 49 6e 74 28 69 6e   int hexToInt(in
9af0: 74 20 68 29 7b 0a 20 20 69 66 28 20 68 3e 3d 27  t h){.  if( h>='
9b00: 30 27 20 26 26 20 68 3c 3d 27 39 27 20 29 7b 0a  0' && h<='9' ){.
9b10: 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27      return h - '
9b20: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
9b30: 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d 27 66 27  h>='a' && h<='f'
9b40: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68   ){.    return h
9b50: 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 7d   - 'a' + 10;.  }
9b60: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
9b70: 28 20 68 3e 3d 27 41 27 20 26 26 20 68 3c 3d 27  ( h>='A' && h<='
9b80: 46 27 20 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  F' );.    return
9b90: 20 68 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20   h - 'A' + 10;. 
9ba0: 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21   }.}.#endif /* !
9bb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42  SQLITE_OMIT_BLOB
9bc0: 5f 4c 49 54 45 52 41 4c 20 7c 7c 20 53 51 4c 49  _LITERAL || SQLI
9bd0: 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 7c 7c 20  TE_HAS_CODEC || 
9be0: 53 51 4c 49 54 45 5f 54 45 53 54 20 2a 2f 0a 0a  SQLITE_TEST */..
9bf0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
9c00: 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49  ITE_OMIT_BLOB_LI
9c10: 54 45 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e 65  TERAL) || define
9c20: 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  d(SQLITE_HAS_COD
9c30: 45 43 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  EC)./*.** Conver
9c40: 74 20 61 20 42 4c 4f 42 20 6c 69 74 65 72 61 6c  t a BLOB literal
9c50: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 78 27   of the form "x'
9c60: 68 68 68 68 68 68 27 22 20 69 6e 74 6f 20 69 74  hhhhhh'" into it
9c70: 73 20 62 69 6e 61 72 79 0a 2a 2a 20 76 61 6c 75  s binary.** valu
9c80: 65 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  e.  Return a poi
9c90: 6e 74 65 72 20 74 6f 20 69 74 73 20 62 69 6e 61  nter to its bina
9ca0: 72 79 20 76 61 6c 75 65 2e 20 20 53 70 61 63 65  ry value.  Space
9cb0: 20 74 6f 20 68 6f 6c 64 20 74 68 65 0a 2a 2a 20   to hold the.** 
9cc0: 62 69 6e 61 72 79 20 76 61 6c 75 65 20 68 61 73  binary value has
9cd0: 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66   been obtained f
9ce0: 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20 6d  rom malloc and m
9cf0: 75 73 74 20 62 65 20 66 72 65 65 64 20 62 79 0a  ust be freed by.
9d00: 2a 2a 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 72  ** the calling r
9d10: 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20  outine..*/.void 
9d20: 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
9d30: 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  b(const char *z)
9d40: 7b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 3b  {.  char *zBlob;
9d50: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
9d60: 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20  n = strlen(z);. 
9d70: 20 69 66 28 20 6e 25 32 20 29 20 72 65 74 75 72   if( n%2 ) retur
9d80: 6e 20 30 3b 0a 0a 20 20 7a 42 6c 6f 62 20 3d 20  n 0;..  zBlob = 
9d90: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 4d 61  (char *)sqliteMa
9da0: 6c 6c 6f 63 28 6e 2f 32 29 3b 0a 20 20 66 6f 72  lloc(n/2);.  for
9db0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 3d 32 29  (i=0; i<n; i+=2)
9dc0: 7b 0a 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d  {.    zBlob[i/2]
9dd0: 20 3d 20 28 68 65 78 54 6f 49 6e 74 28 7a 5b 69   = (hexToInt(z[i
9de0: 5d 29 3c 3c 34 29 20 7c 20 68 65 78 54 6f 49 6e  ])<<4) | hexToIn
9df0: 74 28 7a 5b 69 2b 31 5d 29 3b 0a 20 20 7d 0a 20  t(z[i+1]);.  }. 
9e00: 20 72 65 74 75 72 6e 20 7a 42 6c 6f 62 3b 0a 7d   return zBlob;.}
9e10: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49  .#endif /* !SQLI
9e20: 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54  TE_OMIT_BLOB_LIT
9e30: 45 52 41 4c 20 7c 7c 20 53 51 4c 49 54 45 5f 48  ERAL || SQLITE_H
9e40: 41 53 5f 43 4f 44 45 43 20 2a 2f 0a 0a 23 69 66  AS_CODEC */..#if
9e50: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
9e60: 54 45 53 54 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  TEST)./*.** Conv
9e70: 65 72 74 20 74 65 78 74 20 67 65 6e 65 72 61 74  ert text generat
9e80: 65 64 20 62 79 20 74 68 65 20 22 25 70 22 20 63  ed by the "%p" c
9e90: 6f 6e 76 65 72 73 69 6f 6e 20 66 6f 72 6d 61 74  onversion format
9ea0: 20 62 61 63 6b 20 69 6e 74 6f 0a 2a 2a 20 61 20   back into.** a 
9eb0: 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 76 6f 69 64  pointer..*/.void
9ec0: 20 2a 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50   *sqlite3TextToP
9ed0: 74 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  tr(const char *z
9ee0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
9ef0: 75 36 34 20 76 3b 0a 20 20 75 33 32 20 76 32 3b  u64 v;.  u32 v2;
9f00: 0a 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 30 27  .  if( z[0]=='0'
9f10: 20 26 26 20 7a 5b 31 5d 3d 3d 27 78 27 20 29 7b   && z[1]=='x' ){
9f20: 0a 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 7d  .    z += 2;.  }
9f30: 0a 20 20 76 20 3d 20 30 3b 0a 20 20 77 68 69 6c  .  v = 0;.  whil
9f40: 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 76 20 3d  e( *z ){.    v =
9f50: 20 28 76 3c 3c 34 29 20 2b 20 68 65 78 54 6f 49   (v<<4) + hexToI
9f60: 6e 74 28 2a 7a 29 3b 0a 20 20 20 20 7a 2b 2b 3b  nt(*z);.    z++;
9f70: 0a 20 20 7d 0a 20 20 69 66 28 20 73 69 7a 65 6f  .  }.  if( sizeo
9f80: 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76 29 20  f(p)==sizeof(v) 
9f90: 29 7b 0a 20 20 20 20 70 20 3d 20 2a 28 76 6f 69  ){.    p = *(voi
9fa0: 64 2a 2a 29 26 76 3b 0a 20 20 7d 65 6c 73 65 7b  d**)&v;.  }else{
9fb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 69 7a  .    assert( siz
9fc0: 65 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76  eof(p)==sizeof(v
9fd0: 32 29 20 29 3b 0a 20 20 20 20 76 32 20 3d 20 28  2) );.    v2 = (
9fe0: 75 33 32 29 76 3b 0a 20 20 20 20 70 20 3d 20 2a  u32)v;.    p = *
9ff0: 28 76 6f 69 64 2a 2a 29 26 76 32 3b 0a 20 20 7d  (void**)&v2;.  }
a000: 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 23  .  return p;.}.#
a010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
a020: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  urn a pointer to
a030: 20 74 68 65 20 54 68 72 65 61 64 44 61 74 61 20   the ThreadData 
a040: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
a050: 74 68 65 20 63 61 6c 6c 69 6e 67 20 74 68 72 65  the calling thre
a060: 61 64 2e 0a 2a 2f 0a 54 68 72 65 61 64 44 61 74  ad..*/.ThreadDat
a070: 61 20 2a 73 71 6c 69 74 65 33 54 68 72 65 61 64  a *sqlite3Thread
a080: 44 61 74 61 28 29 7b 0a 20 20 54 68 72 65 61 64  Data(){.  Thread
a090: 44 61 74 61 20 2a 70 20 3d 20 28 54 68 72 65 61  Data *p = (Threa
a0a0: 64 44 61 74 61 2a 29 73 71 6c 69 74 65 33 4f 73  dData*)sqlite3Os
a0b0: 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61  ThreadSpecificDa
a0c0: 74 61 28 31 29 3b 0a 20 20 69 66 28 20 21 70 20  ta(1);.  if( !p 
a0d0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 46 61  ){.    sqlite3Fa
a0e0: 69 6c 65 64 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  iledMalloc();.  
a0f0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a  }.  return p;.}.
a100: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
a110: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 54  pointer to the T
a120: 68 72 65 61 64 44 61 74 61 20 61 73 73 6f 63 69  hreadData associ
a130: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63 61  ated with the ca
a140: 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a 2a 2a  lling thread..**
a150: 20 49 66 20 6e 6f 20 54 68 72 65 61 64 44 61 74   If no ThreadDat
a160: 61 20 68 61 73 20 62 65 65 6e 20 61 6c 6c 6f 63  a has been alloc
a170: 61 74 65 64 20 74 6f 20 74 68 69 73 20 74 68 72  ated to this thr
a180: 65 61 64 20 79 65 74 2c 20 72 65 74 75 72 6e 20  ead yet, return 
a190: 61 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20  a pointer.** to 
a1a0: 61 20 73 75 62 73 74 69 74 75 74 65 20 54 68 72  a substitute Thr
a1b0: 65 61 64 44 61 74 61 20 73 74 72 75 63 74 75 72  eadData structur
a1c0: 65 20 74 68 61 74 20 69 73 20 61 6c 6c 20 7a 65  e that is all ze
a1d0: 72 6f 73 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20 54  ros. .*/.const T
a1e0: 68 72 65 61 64 44 61 74 61 20 2a 73 71 6c 69 74  hreadData *sqlit
a1f0: 65 33 54 68 72 65 61 64 44 61 74 61 52 65 61 64  e3ThreadDataRead
a200: 4f 6e 6c 79 28 29 7b 0a 20 20 73 74 61 74 69 63  Only(){.  static
a210: 20 63 6f 6e 73 74 20 54 68 72 65 61 64 44 61 74   const ThreadDat
a220: 61 20 7a 65 72 6f 44 61 74 61 20 3d 20 7b 30 7d  a zeroData = {0}
a230: 3b 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  ;  /* Initialize
a240: 72 20 74 6f 20 73 69 6c 65 6e 63 65 20 77 61 72  r to silence war
a250: 6e 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20  nings.          
a260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a280: 20 2a 2a 20 66 72 6f 6d 20 62 72 6f 6b 65 6e 20   ** from broken 
a290: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 20 20 63  compilers */.  c
a2a0: 6f 6e 73 74 20 54 68 72 65 61 64 44 61 74 61 20  onst ThreadData 
a2b0: 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 4f 73  *pTd = sqlite3Os
a2c0: 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61  ThreadSpecificDa
a2d0: 74 61 28 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ta(0);.  return 
a2e0: 70 54 64 20 3f 20 70 54 64 20 3a 20 26 7a 65 72  pTd ? pTd : &zer
a2f0: 6f 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  oData;.}../*.** 
a300: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
a310: 74 68 65 20 54 68 72 65 61 64 44 61 74 61 20 66  the ThreadData f
a320: 6f 72 20 74 68 69 73 20 74 68 72 65 61 64 20 69  or this thread i
a330: 73 20 61 6c 6c 20 7a 65 72 6f 2e 20 20 49 66 20  s all zero.  If 
a340: 69 74 0a 2a 2a 20 69 73 2c 20 74 68 65 6e 20 64  it.** is, then d
a350: 65 61 6c 6c 6f 63 61 74 65 20 69 74 2e 20 0a 2a  eallocate it. .*
a360: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  /.void sqlite3Re
a370: 6c 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28  leaseThreadData(
a380: 29 7b 0a 20 20 73 71 6c 69 74 65 33 4f 73 54 68  ){.  sqlite3OsTh
a390: 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61  readSpecificData
a3a0: 28 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  (-1);.}../*.** T
a3b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73  his function mus
a3c0: 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f  t be called befo
a3d0: 72 65 20 65 78 69 74 69 6e 67 20 61 6e 79 20 41  re exiting any A
a3e0: 50 49 20 66 75 6e 63 74 69 6f 6e 20 28 69 2e 65  PI function (i.e
a3f0: 2e 20 0a 2a 2a 20 72 65 74 75 72 6e 69 6e 67 20  . .** returning 
a400: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
a410: 73 65 72 29 20 74 68 61 74 20 68 61 73 20 63 61  ser) that has ca
a420: 6c 6c 65 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  lled sqlite3Mall
a430: 6f 63 20 6f 72 0a 2a 2a 20 73 71 6c 69 74 65 33  oc or.** sqlite3
a440: 52 65 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20 54  Realloc..**.** T
a450: 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75  he returned valu
a460: 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 61 20  e is normally a 
a470: 63 6f 70 79 20 6f 66 20 74 68 65 20 73 65 63 6f  copy of the seco
a480: 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  nd argument to t
a490: 68 69 73 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 2e  his.** function.
a4a0: 20 48 6f 77 65 76 65 72 2c 20 69 66 20 61 20 6d   However, if a m
a4b0: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 20  alloc() failure 
a4c0: 68 61 73 20 6f 63 63 75 72 65 64 20 73 69 6e 63  has occured sinc
a4d0: 65 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  e the previous.*
a4e0: 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 53 51 4c  * invocation SQL
a4f0: 49 54 45 5f 4e 4f 4d 45 4d 20 69 73 20 72 65 74  ITE_NOMEM is ret
a500: 75 72 6e 65 64 20 69 6e 73 74 65 61 64 2e 20 0a  urned instead. .
a510: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 69 72  **.** If the fir
a520: 73 74 20 61 72 67 75 6d 65 6e 74 2c 20 64 62 2c  st argument, db,
a530: 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 61 6e 64   is not NULL and
a540: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 65 72 72 6f   a malloc() erro
a550: 72 20 68 61 73 20 6f 63 63 75 72 65 64 2c 0a 2a  r has occured,.*
a560: 2a 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 6e 65  * then the conne
a570: 63 74 69 6f 6e 20 65 72 72 6f 72 2d 63 6f 64 65  ction error-code
a580: 20 28 74 68 65 20 76 61 6c 75 65 20 72 65 74 75   (the value retu
a590: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
a5a0: 65 72 72 63 6f 64 65 28 29 29 0a 2a 2a 20 69 73  errcode()).** is
a5b0: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e   set to SQLITE_N
a5c0: 4f 4d 45 4d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  OMEM..*/.static 
a5d0: 69 6e 74 20 6d 61 6c 6c 6f 63 48 61 73 46 61 69  int mallocHasFai
a5e0: 6c 65 64 20 3d 20 30 3b 0a 69 6e 74 20 73 71 6c  led = 0;.int sql
a5f0: 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
a600: 74 65 33 2a 20 64 62 2c 20 69 6e 74 20 72 63 29  te3* db, int rc)
a610: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  {.  if( sqlite3M
a620: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 7b  allocFailed() ){
a630: 0a 20 20 20 20 6d 61 6c 6c 6f 63 48 61 73 46 61  .    mallocHasFa
a640: 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20 73 71  iled = 0;.    sq
a650: 6c 69 74 65 33 4f 73 4c 65 61 76 65 4d 75 74 65  lite3OsLeaveMute
a660: 78 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  x();.    sqlite3
a670: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
a680: 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20 20 20 20  _NOMEM, 0);.    
a690: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
a6a0: 4d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  M;.  }.  return 
a6b0: 72 63 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 52 65  rc;.}../* .** Re
a6c0: 74 75 72 6e 20 74 72 75 65 20 69 73 20 61 20 6d  turn true is a m
a6d0: 61 6c 6c 6f 63 20 68 61 73 20 66 61 69 6c 65 64  alloc has failed
a6e0: 20 69 6e 20 74 68 69 73 20 74 68 72 65 61 64 20   in this thread 
a6f0: 73 69 6e 63 65 20 74 68 65 20 6c 61 73 74 20 63  since the last c
a700: 61 6c 6c 0a 2a 2a 20 74 6f 20 73 71 6c 69 74 65  all.** to sqlite
a710: 33 41 70 69 45 78 69 74 28 29 2c 20 6f 72 20 66  3ApiExit(), or f
a720: 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0a  alse otherwise..
a730: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  */.int sqlite3Ma
a740: 6c 6c 6f 63 46 61 69 6c 65 64 28 29 7b 0a 20 20  llocFailed(){.  
a750: 72 65 74 75 72 6e 20 28 6d 61 6c 6c 6f 63 48 61  return (mallocHa
a760: 73 46 61 69 6c 65 64 20 26 26 20 73 71 6c 69 74  sFailed && sqlit
a770: 65 33 4f 73 49 6e 4d 75 74 65 78 28 31 29 29 3b  e3OsInMutex(1));
a780: 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 53 65 74 20 74  .}../* .** Set t
a790: 68 65 20 22 6d 61 6c 6c 6f 63 20 68 61 73 20 66  he "malloc has f
a7a0: 61 69 6c 65 64 22 20 63 6f 6e 64 69 74 69 6f 6e  ailed" condition
a7b0: 20 74 6f 20 74 72 75 65 20 66 6f 72 20 74 68 69   to true for thi
a7c0: 73 20 74 68 72 65 61 64 2e 0a 2a 2f 0a 76 6f 69  s thread..*/.voi
a7d0: 64 20 73 71 6c 69 74 65 33 46 61 69 6c 65 64 4d  d sqlite3FailedM
a7e0: 61 6c 6c 6f 63 28 29 7b 0a 20 20 73 71 6c 69 74  alloc(){.  sqlit
a7f0: 65 33 4f 73 45 6e 74 65 72 4d 75 74 65 78 28 29  e3OsEnterMutex()
a800: 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 61 6c 6c  ;.  assert( mall
a810: 6f 63 48 61 73 46 61 69 6c 65 64 3d 3d 30 20 29  ocHasFailed==0 )
a820: 3b 0a 20 20 6d 61 6c 6c 6f 63 48 61 73 46 61 69  ;.  mallocHasFai
a830: 6c 65 64 20 3d 20 31 3b 0a 7d 0a 0a 23 69 66 64  led = 1;.}..#ifd
a840: 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
a850: 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  UG./*.** This fu
a860: 6e 63 74 69 6f 6e 20 73 65 74 73 20 61 20 66 6c  nction sets a fl
a870: 61 67 20 69 6e 20 74 68 65 20 74 68 72 65 61 64  ag in the thread
a880: 2d 73 70 65 63 69 66 69 63 2d 64 61 74 61 20 73  -specific-data s
a890: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 77 69  tructure that wi
a8a0: 6c 6c 0a 2a 2a 20 63 61 75 73 65 20 61 6e 20 61  ll.** cause an a
a8b0: 73 73 65 72 74 20 74 6f 20 66 61 69 6c 20 69 66  ssert to fail if
a8c0: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20   sqliteMalloc() 
a8d0: 6f 72 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63  or sqliteRealloc
a8e0: 28 29 20 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2f  () is called..*/
a8f0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
a900: 6c 6f 63 44 69 73 61 6c 6c 6f 77 28 29 7b 0a 20  locDisallow(){. 
a910: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
a920: 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 65  _mallocDisallowe
a930: 64 3e 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  d>=0 );.  sqlite
a940: 33 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77  3_mallocDisallow
a950: 65 64 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  ed++;.}../*.** T
a960: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 6c 65  his function cle
a970: 61 72 73 20 74 68 65 20 66 6c 61 67 20 73 65 74  ars the flag set
a980: 20 69 6e 20 74 68 65 20 74 68 72 65 61 64 2d 73   in the thread-s
a990: 70 65 63 69 66 69 63 2d 64 61 74 61 20 73 74 72  pecific-data str
a9a0: 75 63 74 75 72 65 20 73 65 74 0a 2a 2a 20 62 79  ucture set.** by
a9b0: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 44 69   sqlite3MallocDi
a9c0: 73 61 6c 6c 6f 77 28 29 2e 0a 2a 2f 0a 76 6f 69  sallow()..*/.voi
a9d0: 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41  d sqlite3MallocA
a9e0: 6c 6c 6f 77 28 29 7b 0a 20 20 61 73 73 65 72 74  llow(){.  assert
a9f0: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
aa00: 44 69 73 61 6c 6c 6f 77 65 64 3e 30 20 29 3b 0a  Disallowed>0 );.
aa10: 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63    sqlite3_malloc
aa20: 44 69 73 61 6c 6c 6f 77 65 64 2d 2d 3b 0a 7d 0a  Disallowed--;.}.
aa30: 23 65 6e 64 69 66 0a                             #endif.