/ Hex Artifact Content
Login

Artifact 91d4cb189476906639ae611927d939691d1365f6:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 55 74 69 6c 69 74  ******.** Utilit
0180: 79 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  y functions used
0190: 20 74 68 72 6f 75 67 68 6f 75 74 20 73 71 6c 69   throughout sqli
01a0: 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  te..**.** This f
01b0: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 66 75 6e  ile contains fun
01c0: 63 74 69 6f 6e 73 20 66 6f 72 20 61 6c 6c 6f 63  ctions for alloc
01d0: 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c 20 63 6f  ating memory, co
01e0: 6d 70 61 72 69 6e 67 0a 2a 2a 20 73 74 72 69 6e  mparing.** strin
01f0: 67 73 2c 20 61 6e 64 20 73 74 75 66 66 20 6c 69  gs, and stuff li
0200: 6b 65 20 74 68 61 74 2e 0a 2a 2a 0a 2a 2a 20 24  ke that..**.** $
0210: 49 64 3a 20 75 74 69 6c 2e 63 2c 76 20 31 2e 31  Id: util.c,v 1.1
0220: 39 33 20 32 30 30 36 2f 30 39 2f 31 35 20 30 37  93 2006/09/15 07
0230: 3a 32 38 3a 35 31 20 64 72 68 20 45 78 70 20 24  :28:51 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 28 76 6f 69 64 29 45 4e 54 45 52 5f  {.  (void)ENTER_
4fd0: 4d 41 4c 4c 4f 43 3b 0a 20 20 72 65 74 75 72 6e  MALLOC;.  return
4fe0: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 6e   sqlite3Malloc(n
4ff0: 2c 20 30 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  , 0);.}.void sql
5000: 69 74 65 33 54 68 72 65 61 64 53 61 66 65 46 72  ite3ThreadSafeFr
5010: 65 65 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 28  ee(void *p){.  (
5020: 76 6f 69 64 29 45 4e 54 45 52 5f 4d 41 4c 4c 4f  void)ENTER_MALLO
5030: 43 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  C;.  if( p ){.  
5040: 20 20 4f 53 46 52 45 45 28 70 29 3b 0a 20 20 7d    OSFREE(p);.  }
5050: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
5060: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
5070: 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 6c 6c  ber of bytes all
5080: 6f 63 61 74 65 64 20 61 74 20 6c 6f 63 61 74 69  ocated at locati
5090: 6f 6e 20 70 2e 20 70 20 6d 75 73 74 20 62 65 20  on p. p must be 
50a0: 65 69 74 68 65 72 20 0a 2a 2a 20 61 20 4e 55 4c  either .** a NUL
50b0: 4c 20 70 6f 69 6e 74 65 72 20 28 69 6e 20 77 68  L pointer (in wh
50c0: 69 63 68 20 63 61 73 65 20 30 20 69 73 20 72 65  ich case 0 is re
50d0: 74 75 72 6e 65 64 29 20 6f 72 20 61 20 70 6f 69  turned) or a poi
50e0: 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20 62 79  nter returned by
50f0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 61 6c 6c   .** sqlite3Mall
5100: 6f 63 28 29 2c 20 73 71 6c 69 74 65 33 52 65 61  oc(), sqlite3Rea
5110: 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65  lloc() or sqlite
5120: 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 29  3ReallocOrFree()
5130: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ..**.** The numb
5140: 65 72 20 6f 66 20 62 79 74 65 73 20 61 6c 6c 6f  er of bytes allo
5150: 63 61 74 65 64 20 64 6f 65 73 20 6e 6f 74 20 69  cated does not i
5160: 6e 63 6c 75 64 65 20 61 6e 79 20 6f 76 65 72 68  nclude any overh
5170: 65 61 64 20 69 6e 73 65 72 74 65 64 20 62 79 20  ead inserted by 
5180: 0a 2a 2a 20 61 6e 79 20 6d 61 6c 6c 6f 63 28 29  .** any malloc()
5190: 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f   wrapper functio
51a0: 6e 73 20 74 68 61 74 20 6d 61 79 20 62 65 20 63  ns that may be c
51b0: 61 6c 6c 65 64 2e 20 53 6f 20 74 68 65 20 76 61  alled. So the va
51c0: 6c 75 65 20 72 65 74 75 72 6e 65 64 0a 2a 2a 20  lue returned.** 
51d0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
51e0: 20 62 79 74 65 73 20 74 68 61 74 20 77 65 72 65   bytes that were
51f0: 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 53 51   available to SQ
5200: 4c 69 74 65 20 75 73 69 6e 67 20 70 6f 69 6e 74  Lite using point
5210: 65 72 20 70 2c 20 0a 2a 2a 20 72 65 67 61 72 64  er p, .** regard
5220: 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 75 63 68  less of how much
5230: 20 6d 65 6d 6f 72 79 20 77 61 73 20 61 63 74 75   memory was actu
5240: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 0a  ally allocated..
5250: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5260: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d  _ENABLE_MEMORY_M
5270: 41 4e 41 47 45 4d 45 4e 54 0a 69 6e 74 20 73 71  ANAGEMENT.int sq
5280: 6c 69 74 65 33 41 6c 6c 6f 63 53 69 7a 65 28 76  lite3AllocSize(v
5290: 6f 69 64 20 2a 70 29 7b 0a 20 20 72 65 74 75 72  oid *p){.  retur
52a0: 6e 20 4f 53 53 49 5a 45 4f 46 28 70 29 3b 0a 7d  n OSSIZEOF(p);.}
52b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
52c0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61 20  ake a copy of a 
52d0: 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79  string in memory
52e0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
52f0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 54  qliteMalloc(). T
5300: 68 65 73 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f  hese .** functio
5310: 6e 73 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 4d  ns call sqlite3M
5320: 61 6c 6c 6f 63 52 61 77 28 29 20 64 69 72 65 63  allocRaw() direc
5330: 74 6c 79 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tly instead of s
5340: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 54  qliteMalloc(). T
5350: 68 69 73 0a 2a 2a 20 69 73 20 62 65 63 61 75 73  his.** is becaus
5360: 65 20 77 68 65 6e 20 6d 65 6d 6f 72 79 20 64 65  e when memory de
5370: 62 75 67 67 69 6e 67 20 69 73 20 74 75 72 6e 65  bugging is turne
5380: 64 20 6f 6e 2c 20 74 68 65 73 65 20 74 77 6f 20  d on, these two 
5390: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 0a 2a  functions are .*
53a0: 2a 20 63 61 6c 6c 65 64 20 76 69 61 20 6d 61 63  * called via mac
53b0: 72 6f 73 20 74 68 61 74 20 72 65 63 6f 72 64 20  ros that record 
53c0: 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65  the current file
53d0: 20 61 6e 64 20 6c 69 6e 65 20 6e 75 6d 62 65 72   and line number
53e0: 20 69 6e 20 74 68 65 0a 2a 2a 20 54 68 72 65 61   in the.** Threa
53f0: 64 44 61 74 61 20 73 74 72 75 63 74 75 72 65 2e  dData structure.
5400: 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .*/.char *sqlite
5410: 33 53 74 72 44 75 70 28 63 6f 6e 73 74 20 63 68  3StrDup(const ch
5420: 61 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a  ar *z){.  char *
5430: 7a 4e 65 77 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  zNew;.  if( z==0
5440: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a   ) return 0;.  z
5450: 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c  New = sqlite3Mal
5460: 6c 6f 63 52 61 77 28 73 74 72 6c 65 6e 28 7a 29  locRaw(strlen(z)
5470: 2b 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 7a 4e  +1, 1);.  if( zN
5480: 65 77 20 29 20 73 74 72 63 70 79 28 7a 4e 65 77  ew ) strcpy(zNew
5490: 2c 20 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  , z);.  return z
54a0: 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c  New;.}.char *sql
54b0: 69 74 65 33 53 74 72 4e 44 75 70 28 63 6f 6e 73  ite3StrNDup(cons
54c0: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
54d0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b  ){.  char *zNew;
54e0: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65  .  if( z==0 ) re
54f0: 74 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d  turn 0;.  zNew =
5500: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61   sqlite3MallocRa
5510: 77 28 6e 2b 31 2c 20 31 29 3b 0a 20 20 69 66 28  w(n+1, 1);.  if(
5520: 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 6d 65 6d   zNew ){.    mem
5530: 63 70 79 28 7a 4e 65 77 2c 20 7a 2c 20 6e 29 3b  cpy(zNew, z, n);
5540: 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d 20 3d 20 30  .    zNew[n] = 0
5550: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
5560: 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  New;.}../*.** Cr
5570: 65 61 74 65 20 61 20 73 74 72 69 6e 67 20 66 72  eate a string fr
5580: 6f 6d 20 74 68 65 20 32 6e 64 20 61 6e 64 20 73  om the 2nd and s
5590: 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65  ubsequent argume
55a0: 6e 74 73 20 28 75 70 20 74 6f 20 74 68 65 0a 2a  nts (up to the.*
55b0: 2a 20 66 69 72 73 74 20 4e 55 4c 4c 20 61 72 67  * first NULL arg
55c0: 75 6d 65 6e 74 29 2c 20 73 74 6f 72 65 20 74 68  ument), store th
55d0: 65 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f  e string in memo
55e0: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
55f0: 0a 2a 2a 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  .** sqliteMalloc
5600: 28 29 20 61 6e 64 20 6d 61 6b 65 20 74 68 65 20  () and make the 
5610: 70 6f 69 6e 74 65 72 20 69 6e 64 69 63 61 74 65  pointer indicate
5620: 64 20 62 79 20 74 68 65 20 31 73 74 20 61 72 67  d by the 1st arg
5630: 75 6d 65 6e 74 0a 2a 2a 20 70 6f 69 6e 74 20 74  ument.** point t
5640: 6f 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20  o that string.  
5650: 54 68 65 20 31 73 74 20 61 72 67 75 6d 65 6e 74  The 1st argument
5660: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
5670: 4e 55 4c 4c 20 6f 72 20 0a 2a 2a 20 70 6f 69 6e  NULL or .** poin
5680: 74 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  t to memory obta
5690: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
56a0: 4d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69  Malloc()..*/.voi
56b0: 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
56c0: 6e 67 28 63 68 61 72 20 2a 2a 70 7a 2c 20 2e 2e  ng(char **pz, ..
56d0: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
56e0: 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ;.  int nByte;. 
56f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a   const char *z;.
5700: 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 3b    char *zResult;
5710: 0a 0a 20 20 69 66 28 20 70 7a 3d 3d 30 20 29 20  ..  if( pz==0 ) 
5720: 72 65 74 75 72 6e 3b 0a 20 20 6e 42 79 74 65 20  return;.  nByte 
5730: 3d 20 31 3b 0a 20 20 76 61 5f 73 74 61 72 74 28  = 1;.  va_start(
5740: 61 70 2c 20 70 7a 29 3b 0a 20 20 77 68 69 6c 65  ap, pz);.  while
5750: 28 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70  ( (z = va_arg(ap
5760: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21  , const char*))!
5770: 3d 30 20 29 7b 0a 20 20 20 20 6e 42 79 74 65 20  =0 ){.    nByte 
5780: 2b 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20  += strlen(z);.  
5790: 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  }.  va_end(ap);.
57a0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a    sqliteFree(*pz
57b0: 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a 52 65 73 75  );.  *pz = zResu
57c0: 6c 74 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  lt = sqliteMallo
57d0: 63 52 61 77 28 20 6e 42 79 74 65 20 29 3b 0a 20  cRaw( nByte );. 
57e0: 20 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30 20   if( zResult==0 
57f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  ){.    return;. 
5800: 20 7d 0a 20 20 2a 7a 52 65 73 75 6c 74 20 3d 20   }.  *zResult = 
5810: 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  0;.  va_start(ap
5820: 2c 20 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20  , pz);.  while( 
5830: 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  (z = va_arg(ap, 
5840: 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30  const char*))!=0
5850: 20 29 7b 0a 20 20 20 20 73 74 72 63 70 79 28 7a   ){.    strcpy(z
5860: 52 65 73 75 6c 74 2c 20 7a 29 3b 0a 20 20 20 20  Result, z);.    
5870: 7a 52 65 73 75 6c 74 20 2b 3d 20 73 74 72 6c 65  zResult += strle
5880: 6e 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a  n(zResult);.  }.
5890: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a    va_end(ap);.}.
58a0: 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 6d  ./*.** Set the m
58b0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
58c0: 20 63 6f 64 65 20 61 6e 64 20 65 72 72 6f 72 20   code and error 
58d0: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 73  string for the s
58e0: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
58f0: 22 64 62 22 2e 20 54 68 65 20 65 72 72 6f 72 20  "db". The error 
5900: 63 6f 64 65 20 69 73 20 73 65 74 20 74 6f 20 22  code is set to "
5910: 65 72 72 5f 63 6f 64 65 22 2e 0a 2a 2a 0a 2a 2a  err_code"..**.**
5920: 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
5930: 4c 4c 2c 20 73 74 72 69 6e 67 20 7a 46 6f 72 6d  LL, string zForm
5940: 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
5950: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 0a 2a   format of the.*
5960: 2a 20 65 72 72 6f 72 20 73 74 72 69 6e 67 20 69  * error string i
5970: 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 74  n the style of t
5980: 68 65 20 70 72 69 6e 74 66 20 66 75 6e 63 74 69  he printf functi
5990: 6f 6e 73 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ons: The followi
59a0: 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74 20 63 68 61  ng.** format cha
59b0: 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c 6f  racters are allo
59c0: 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  wed:.**.**      
59d0: 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %s      Insert a
59e0: 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20   string.**      
59f0: 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e 67  %z      A string
5a00: 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
5a10: 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65 0a  freed after use.
5a20: 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20 20  **      %d      
5a30: 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67 65  Insert an intege
5a40: 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20 20  r.**      %T    
5a50: 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65 6e    Insert a token
5a60: 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20 20  .**      %S     
5a70: 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72 73   Insert the firs
5a80: 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 53  t element of a S
5a90: 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 7a 46 6f  rcList.**.** zFo
5aa0: 72 6d 61 74 20 61 6e 64 20 61 6e 79 20 73 74 72  rmat and any str
5ab0: 69 6e 67 20 74 6f 6b 65 6e 73 20 74 68 61 74 20  ing tokens that 
5ac0: 66 6f 6c 6c 6f 77 20 69 74 20 61 72 65 20 61 73  follow it are as
5ad0: 73 75 6d 65 64 20 74 6f 20 62 65 0a 2a 2a 20 65  sumed to be.** e
5ae0: 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 2e  ncoded in UTF-8.
5af0: 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c 65 61 72 20  .**.** To clear 
5b00: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
5b10: 65 72 72 6f 72 20 66 6f 72 20 73 71 6c 69 74 65  error for sqlite
5b20: 20 68 61 6e 64 6c 65 20 22 64 62 22 2c 20 73 71   handle "db", sq
5b30: 6c 69 74 65 33 45 72 72 6f 72 0a 2a 2a 20 73 68  lite3Error.** sh
5b40: 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 77  ould be called w
5b50: 69 74 68 20 65 72 72 5f 63 6f 64 65 20 73 65 74  ith err_code set
5b60: 20 74 6f 20 53 51 4c 49 54 45 5f 4f 4b 20 61 6e   to SQLITE_OK an
5b70: 64 20 7a 46 6f 72 6d 61 74 20 73 65 74 0a 2a 2a  d zFormat set.**
5b80: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69   to NULL..*/.voi
5b90: 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
5ba0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
5bb0: 65 72 72 5f 63 6f 64 65 2c 20 63 6f 6e 73 74 20  err_code, const 
5bc0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
5bd0: 2e 2e 29 7b 0a 20 20 69 66 28 20 64 62 20 26 26  ..){.  if( db &&
5be0: 20 28 64 62 2d 3e 70 45 72 72 20 7c 7c 20 28 64   (db->pErr || (d
5bf0: 62 2d 3e 70 45 72 72 20 3d 20 73 71 6c 69 74 65  b->pErr = sqlite
5c00: 33 56 61 6c 75 65 4e 65 77 28 29 29 21 3d 30 29  3ValueNew())!=0)
5c10: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 65 72 72 43   ){.    db->errC
5c20: 6f 64 65 20 3d 20 65 72 72 5f 63 6f 64 65 3b 0a  ode = err_code;.
5c30: 20 20 20 20 69 66 28 20 7a 46 6f 72 6d 61 74 20      if( zFormat 
5c40: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  ){.      char *z
5c50: 3b 0a 20 20 20 20 20 20 76 61 5f 6c 69 73 74 20  ;.      va_list 
5c60: 61 70 3b 0a 20 20 20 20 20 20 76 61 5f 73 74 61  ap;.      va_sta
5c70: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
5c80: 0a 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  .      z = sqlit
5c90: 65 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d  e3VMPrintf(zForm
5ca0: 61 74 2c 20 61 70 29 3b 0a 20 20 20 20 20 20 76  at, ap);.      v
5cb0: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 20 20 20  a_end(ap);.     
5cc0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
5cd0: 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d 31  Str(db->pErr, -1
5ce0: 2c 20 7a 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , z, SQLITE_UTF8
5cf0: 2c 20 73 71 6c 69 74 65 33 46 72 65 65 58 29 3b  , sqlite3FreeX);
5d00: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
5d10: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
5d20: 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 30  tStr(db->pErr, 0
5d30: 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 0, SQLITE_UTF8
5d40: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
5d50: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
5d60: 2a 0a 2a 2a 20 41 64 64 20 61 6e 20 65 72 72 6f  *.** Add an erro
5d70: 72 20 6d 65 73 73 61 67 65 20 74 6f 20 70 50 61  r message to pPa
5d80: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 61 6e 64  rse->zErrMsg and
5d90: 20 69 6e 63 72 65 6d 65 6e 74 20 70 50 61 72 73   increment pPars
5da0: 65 2d 3e 6e 45 72 72 2e 0a 2a 2a 20 54 68 65 20  e->nErr..** The 
5db0: 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
5dc0: 74 69 6e 67 20 63 68 61 72 61 63 74 65 72 73 20  ting characters 
5dd0: 61 72 65 20 61 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a  are allowed:.**.
5de0: 2a 2a 20 20 20 20 20 20 25 73 20 20 20 20 20 20  **      %s      
5df0: 49 6e 73 65 72 74 20 61 20 73 74 72 69 6e 67 0a  Insert a string.
5e00: 2a 2a 20 20 20 20 20 20 25 7a 20 20 20 20 20 20  **      %z      
5e10: 41 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 68  A string that sh
5e20: 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 61 66  ould be freed af
5e30: 74 65 72 20 75 73 65 0a 2a 2a 20 20 20 20 20 20  ter use.**      
5e40: 25 64 20 20 20 20 20 20 49 6e 73 65 72 74 20 61  %d      Insert a
5e50: 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 20 20 20  n integer.**    
5e60: 20 20 25 54 20 20 20 20 20 20 49 6e 73 65 72 74    %T      Insert
5e70: 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20 20 20 20   a token.**     
5e80: 20 25 53 20 20 20 20 20 20 49 6e 73 65 72 74 20   %S      Insert 
5e90: 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
5ea0: 74 20 6f 66 20 61 20 53 72 63 4c 69 73 74 0a 2a  t of a SrcList.*
5eb0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
5ec0: 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  on should be use
5ed0: 64 20 74 6f 20 72 65 70 6f 72 74 20 61 6e 79 20  d to report any 
5ee0: 65 72 72 6f 72 20 74 68 61 74 20 6f 63 63 75 72  error that occur
5ef0: 73 20 77 68 69 6c 73 74 0a 2a 2a 20 63 6f 6d 70  s whilst.** comp
5f00: 69 6c 69 6e 67 20 61 6e 20 53 51 4c 20 73 74 61  iling an SQL sta
5f10: 74 65 6d 65 6e 74 20 28 69 2e 65 2e 20 77 69 74  tement (i.e. wit
5f20: 68 69 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70  hin sqlite3_prep
5f30: 61 72 65 28 29 29 2e 20 54 68 65 0a 2a 2a 20 6c  are()). The.** l
5f40: 61 73 74 20 74 68 69 6e 67 20 74 68 65 20 73 71  ast thing the sq
5f50: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
5f60: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 69 73  function does is
5f70: 20 63 6f 70 79 20 74 68 65 20 65 72 72 6f 72 0a   copy the error.
5f80: 2a 2a 20 73 74 6f 72 65 64 20 62 79 20 74 68 69  ** stored by thi
5f90: 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20  s function into 
5fa0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
5fb0: 64 6c 65 20 75 73 69 6e 67 20 73 71 6c 69 74 65  dle using sqlite
5fc0: 33 45 72 72 6f 72 28 29 2e 0a 2a 2a 20 46 75 6e  3Error()..** Fun
5fd0: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 45 72 72  ction sqlite3Err
5fe0: 6f 72 28 29 20 73 68 6f 75 6c 64 20 62 65 20 75  or() should be u
5ff0: 73 65 64 20 64 75 72 69 6e 67 20 73 74 61 74 65  sed during state
6000: 6d 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 0a 2a  ment execution.*
6010: 2a 20 28 73 71 6c 69 74 65 33 5f 73 74 65 70 28  * (sqlite3_step(
6020: 29 20 65 74 63 2e 29 2e 0a 2a 2f 0a 76 6f 69 64  ) etc.)..*/.void
6030: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
6040: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
6050: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
6060: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f  mat, ...){.  va_
6070: 6c 69 73 74 20 61 70 3b 0a 20 20 70 50 61 72 73  list ap;.  pPars
6080: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 73 71 6c  e->nErr++;.  sql
6090: 69 74 65 46 72 65 65 28 70 50 61 72 73 65 2d 3e  iteFree(pParse->
60a0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 76 61 5f 73  zErrMsg);.  va_s
60b0: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
60c0: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a 45 72  );.  pParse->zEr
60d0: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 56 4d  rMsg = sqlite3VM
60e0: 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20  Printf(zFormat, 
60f0: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
6100: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c 65 61  );.}../*.** Clea
6110: 72 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  r the error mess
6120: 61 67 65 20 69 6e 20 70 50 61 72 73 65 2c 20 69  age in pParse, i
6130: 66 20 61 6e 79 0a 2a 2f 0a 76 6f 69 64 20 73 71  f any.*/.void sq
6140: 6c 69 74 65 33 45 72 72 6f 72 43 6c 65 61 72 28  lite3ErrorClear(
6150: 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a  Parse *pParse){.
6160: 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 50 61    sqliteFree(pPa
6170: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  rse->zErrMsg);. 
6180: 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67   pParse->zErrMsg
6190: 20 3d 20 30 3b 0a 20 20 70 50 61 72 73 65 2d 3e   = 0;.  pParse->
61a0: 6e 45 72 72 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a  nErr = 0;.}../*.
61b0: 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20 53 51  ** Convert an SQ
61c0: 4c 2d 73 74 79 6c 65 20 71 75 6f 74 65 64 20 73  L-style quoted s
61d0: 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e 6f 72  tring into a nor
61e0: 6d 61 6c 20 73 74 72 69 6e 67 20 62 79 20 72 65  mal string by re
61f0: 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68 65 20 71 75  moving.** the qu
6200: 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 2e 20  ote characters. 
6210: 20 54 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   The conversion 
6220: 69 73 20 64 6f 6e 65 20 69 6e 2d 70 6c 61 63 65  is done in-place
6230: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 69 6e 70  .  If the.** inp
6240: 75 74 20 64 6f 65 73 20 6e 6f 74 20 62 65 67 69  ut does not begi
6250: 6e 20 77 69 74 68 20 61 20 71 75 6f 74 65 20 63  n with a quote c
6260: 68 61 72 61 63 74 65 72 2c 20 74 68 65 6e 20 74  haracter, then t
6270: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69  his routine.** i
6280: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a  s a no-op..**.**
6290: 20 32 30 30 32 2d 46 65 62 2d 31 34 3a 20 54 68   2002-Feb-14: Th
62a0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 65 78  is routine is ex
62b0: 74 65 6e 64 65 64 20 74 6f 20 72 65 6d 6f 76 65  tended to remove
62c0: 20 4d 53 2d 41 63 63 65 73 73 20 73 74 79 6c 65   MS-Access style
62d0: 0a 2a 2a 20 62 72 61 63 6b 65 74 73 20 66 72 6f  .** brackets fro
62e0: 6d 20 61 72 6f 75 6e 64 20 69 64 65 6e 74 69 66  m around identif
62f0: 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ers.  For exampl
6300: 65 3a 20 20 22 5b 61 2d 62 2d 63 5d 22 20 62 65  e:  "[a-b-c]" be
6310: 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d 63 22  comes.** "a-b-c"
6320: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
6330: 33 44 65 71 75 6f 74 65 28 63 68 61 72 20 2a 7a  3Dequote(char *z
6340: 29 7b 0a 20 20 69 6e 74 20 71 75 6f 74 65 3b 0a  ){.  int quote;.
6350: 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 69 66    int i, j;.  if
6360: 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  ( z==0 ) return;
6370: 0a 20 20 71 75 6f 74 65 20 3d 20 7a 5b 30 5d 3b  .  quote = z[0];
6380: 0a 20 20 73 77 69 74 63 68 28 20 71 75 6f 74 65  .  switch( quote
6390: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27 5c 27   ){.    case '\'
63a0: 27 3a 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63  ':  break;.    c
63b0: 61 73 65 20 27 22 27 3a 20 20 20 62 72 65 61 6b  ase '"':   break
63c0: 3b 0a 20 20 20 20 63 61 73 65 20 27 60 27 3a 20  ;.    case '`': 
63d0: 20 20 62 72 65 61 6b 3b 20 20 20 20 20 20 20 20    break;        
63e0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4d          /* For M
63f0: 79 53 51 4c 20 63 6f 6d 70 61 74 69 62 69 6c 69  ySQL compatibili
6400: 74 79 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 27  ty */.    case '
6410: 5b 27 3a 20 20 20 71 75 6f 74 65 20 3d 20 27 5d  [':   quote = ']
6420: 27 3b 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 46  ';  break;  /* F
6430: 6f 72 20 4d 53 20 53 71 6c 53 65 72 76 65 72 20  or MS SqlServer 
6440: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 2a 2f  compatibility */
6450: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
6460: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 66   return;.  }.  f
6470: 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20 7a 5b 69  or(i=1, j=0; z[i
6480: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ]; i++){.    if(
6490: 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a   z[i]==quote ){.
64a0: 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d        if( z[i+1]
64b0: 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 20  ==quote ){.     
64c0: 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71 75 6f 74     z[j++] = quot
64d0: 65 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  e;.        i++;.
64e0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
64f0: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 30 3b       z[j++] = 0;
6500: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
6510: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
6520: 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20  e{.      z[j++] 
6530: 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20  = z[i];.    }.  
6540: 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20 61 72 72 61 79  }.}../* An array
6550: 20 74 6f 20 6d 61 70 20 61 6c 6c 20 75 70 70 65   to map all uppe
6560: 72 2d 63 61 73 65 20 63 68 61 72 61 63 74 65 72  r-case character
6570: 73 20 69 6e 74 6f 20 74 68 65 69 72 20 63 6f 72  s into their cor
6580: 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6c 6f  responding.** lo
6590: 77 65 72 2d 63 61 73 65 20 63 68 61 72 61 63 74  wer-case charact
65a0: 65 72 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20 75 6e  er. .*/.const un
65b0: 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
65c0: 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
65d0: 5d 20 3d 20 7b 0a 23 69 66 64 65 66 20 53 51 4c  ] = {.#ifdef SQL
65e0: 49 54 45 5f 41 53 43 49 49 0a 20 20 20 20 20 20  ITE_ASCII.      
65f0: 30 2c 20 20 31 2c 20 20 32 2c 20 20 33 2c 20 20  0,  1,  2,  3,  
6600: 34 2c 20 20 35 2c 20 20 36 2c 20 20 37 2c 20 20  4,  5,  6,  7,  
6610: 38 2c 20 20 39 2c 20 31 30 2c 20 31 31 2c 20 31  8,  9, 10, 11, 1
6620: 32 2c 20 31 33 2c 20 31 34 2c 20 31 35 2c 20 31  2, 13, 14, 15, 1
6630: 36 2c 20 31 37 2c 0a 20 20 20 20 20 31 38 2c 20  6, 17,.     18, 
6640: 31 39 2c 20 32 30 2c 20 32 31 2c 20 32 32 2c 20  19, 20, 21, 22, 
6650: 32 33 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20  23, 24, 25, 26, 
6660: 32 37 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20  27, 28, 29, 30, 
6670: 33 31 2c 20 33 32 2c 20 33 33 2c 20 33 34 2c 20  31, 32, 33, 34, 
6680: 33 35 2c 0a 20 20 20 20 20 33 36 2c 20 33 37 2c  35,.     36, 37,
6690: 20 33 38 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c   38, 39, 40, 41,
66a0: 20 34 32 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c   42, 43, 44, 45,
66b0: 20 34 36 2c 20 34 37 2c 20 34 38 2c 20 34 39 2c   46, 47, 48, 49,
66c0: 20 35 30 2c 20 35 31 2c 20 35 32 2c 20 35 33 2c   50, 51, 52, 53,
66d0: 0a 20 20 20 20 20 35 34 2c 20 35 35 2c 20 35 36  .     54, 55, 56
66e0: 2c 20 35 37 2c 20 35 38 2c 20 35 39 2c 20 36 30  , 57, 58, 59, 60
66f0: 2c 20 36 31 2c 20 36 32 2c 20 36 33 2c 20 36 34  , 61, 62, 63, 64
6700: 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30  , 97, 98, 99,100
6710: 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c 0a 20 20  ,101,102,103,.  
6720: 20 20 31 30 34 2c 31 30 35 2c 31 30 36 2c 31 30    104,105,106,10
6730: 37 2c 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31  7,108,109,110,11
6740: 31 2c 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31  1,112,113,114,11
6750: 35 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31  5,116,117,118,11
6760: 39 2c 31 32 30 2c 31 32 31 2c 0a 20 20 20 20 31  9,120,121,.    1
6770: 32 32 2c 20 39 31 2c 20 39 32 2c 20 39 33 2c 20  22, 91, 92, 93, 
6780: 39 34 2c 20 39 35 2c 20 39 36 2c 20 39 37 2c 20  94, 95, 96, 97, 
6790: 39 38 2c 20 39 39 2c 31 30 30 2c 31 30 31 2c 31  98, 99,100,101,1
67a0: 30 32 2c 31 30 33 2c 31 30 34 2c 31 30 35 2c 31  02,103,104,105,1
67b0: 30 36 2c 31 30 37 2c 0a 20 20 20 20 31 30 38 2c  06,107,.    108,
67c0: 31 30 39 2c 31 31 30 2c 31 31 31 2c 31 31 32 2c  109,110,111,112,
67d0: 31 31 33 2c 31 31 34 2c 31 31 35 2c 31 31 36 2c  113,114,115,116,
67e0: 31 31 37 2c 31 31 38 2c 31 31 39 2c 31 32 30 2c  117,118,119,120,
67f0: 31 32 31 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c  121,122,123,124,
6800: 31 32 35 2c 0a 20 20 20 20 31 32 36 2c 31 32 37  125,.    126,127
6810: 2c 31 32 38 2c 31 32 39 2c 31 33 30 2c 31 33 31  ,128,129,130,131
6820: 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35  ,132,133,134,135
6830: 2c 31 33 36 2c 31 33 37 2c 31 33 38 2c 31 33 39  ,136,137,138,139
6840: 2c 31 34 30 2c 31 34 31 2c 31 34 32 2c 31 34 33  ,140,141,142,143
6850: 2c 0a 20 20 20 20 31 34 34 2c 31 34 35 2c 31 34  ,.    144,145,14
6860: 36 2c 31 34 37 2c 31 34 38 2c 31 34 39 2c 31 35  6,147,148,149,15
6870: 30 2c 31 35 31 2c 31 35 32 2c 31 35 33 2c 31 35  0,151,152,153,15
6880: 34 2c 31 35 35 2c 31 35 36 2c 31 35 37 2c 31 35  4,155,156,157,15
6890: 38 2c 31 35 39 2c 31 36 30 2c 31 36 31 2c 0a 20  8,159,160,161,. 
68a0: 20 20 20 31 36 32 2c 31 36 33 2c 31 36 34 2c 31     162,163,164,1
68b0: 36 35 2c 31 36 36 2c 31 36 37 2c 31 36 38 2c 31  65,166,167,168,1
68c0: 36 39 2c 31 37 30 2c 31 37 31 2c 31 37 32 2c 31  69,170,171,172,1
68d0: 37 33 2c 31 37 34 2c 31 37 35 2c 31 37 36 2c 31  73,174,175,176,1
68e0: 37 37 2c 31 37 38 2c 31 37 39 2c 0a 20 20 20 20  77,178,179,.    
68f0: 31 38 30 2c 31 38 31 2c 31 38 32 2c 31 38 33 2c  180,181,182,183,
6900: 31 38 34 2c 31 38 35 2c 31 38 36 2c 31 38 37 2c  184,185,186,187,
6910: 31 38 38 2c 31 38 39 2c 31 39 30 2c 31 39 31 2c  188,189,190,191,
6920: 31 39 32 2c 31 39 33 2c 31 39 34 2c 31 39 35 2c  192,193,194,195,
6930: 31 39 36 2c 31 39 37 2c 0a 20 20 20 20 31 39 38  196,197,.    198
6940: 2c 31 39 39 2c 32 30 30 2c 32 30 31 2c 32 30 32  ,199,200,201,202
6950: 2c 32 30 33 2c 32 30 34 2c 32 30 35 2c 32 30 36  ,203,204,205,206
6960: 2c 32 30 37 2c 32 30 38 2c 32 30 39 2c 32 31 30  ,207,208,209,210
6970: 2c 32 31 31 2c 32 31 32 2c 32 31 33 2c 32 31 34  ,211,212,213,214
6980: 2c 32 31 35 2c 0a 20 20 20 20 32 31 36 2c 32 31  ,215,.    216,21
6990: 37 2c 32 31 38 2c 32 31 39 2c 32 32 30 2c 32 32  7,218,219,220,22
69a0: 31 2c 32 32 32 2c 32 32 33 2c 32 32 34 2c 32 32  1,222,223,224,22
69b0: 35 2c 32 32 36 2c 32 32 37 2c 32 32 38 2c 32 32  5,226,227,228,22
69c0: 39 2c 32 33 30 2c 32 33 31 2c 32 33 32 2c 32 33  9,230,231,232,23
69d0: 33 2c 0a 20 20 20 20 32 33 34 2c 32 33 35 2c 32  3,.    234,235,2
69e0: 33 36 2c 32 33 37 2c 32 33 38 2c 32 33 39 2c 32  36,237,238,239,2
69f0: 34 30 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32  40,241,242,243,2
6a00: 34 34 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32  44,245,246,247,2
6a10: 34 38 2c 32 34 39 2c 32 35 30 2c 32 35 31 2c 0a  48,249,250,251,.
6a20: 20 20 20 20 32 35 32 2c 32 35 33 2c 32 35 34 2c      252,253,254,
6a30: 32 35 35 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  255.#endif.#ifde
6a40: 66 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 0a  f SQLITE_EBCDIC.
6a50: 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 32 2c        0,  1,  2,
6a60: 20 20 33 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c    3,  4,  5,  6,
6a70: 20 20 37 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c    7,  8,  9, 10,
6a80: 20 31 31 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c   11, 12, 13, 14,
6a90: 20 31 35 2c 20 2f 2a 20 30 78 20 2a 2f 0a 20 20   15, /* 0x */.  
6aa0: 20 20 20 31 36 2c 20 31 37 2c 20 31 38 2c 20 31     16, 17, 18, 1
6ab0: 39 2c 20 32 30 2c 20 32 31 2c 20 32 32 2c 20 32  9, 20, 21, 22, 2
6ac0: 33 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20 32  3, 24, 25, 26, 2
6ad0: 37 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20 33  7, 28, 29, 30, 3
6ae0: 31 2c 20 2f 2a 20 31 78 20 2a 2f 0a 20 20 20 20  1, /* 1x */.    
6af0: 20 33 32 2c 20 33 33 2c 20 33 34 2c 20 33 35 2c   32, 33, 34, 35,
6b00: 20 33 36 2c 20 33 37 2c 20 33 38 2c 20 33 39 2c   36, 37, 38, 39,
6b10: 20 34 30 2c 20 34 31 2c 20 34 32 2c 20 34 33 2c   40, 41, 42, 43,
6b20: 20 34 34 2c 20 34 35 2c 20 34 36 2c 20 34 37 2c   44, 45, 46, 47,
6b30: 20 2f 2a 20 32 78 20 2a 2f 0a 20 20 20 20 20 34   /* 2x */.     4
6b40: 38 2c 20 34 39 2c 20 35 30 2c 20 35 31 2c 20 35  8, 49, 50, 51, 5
6b50: 32 2c 20 35 33 2c 20 35 34 2c 20 35 35 2c 20 35  2, 53, 54, 55, 5
6b60: 36 2c 20 35 37 2c 20 35 38 2c 20 35 39 2c 20 36  6, 57, 58, 59, 6
6b70: 30 2c 20 36 31 2c 20 36 32 2c 20 36 33 2c 20 2f  0, 61, 62, 63, /
6b80: 2a 20 33 78 20 2a 2f 0a 20 20 20 20 20 36 34 2c  * 3x */.     64,
6b90: 20 36 35 2c 20 36 36 2c 20 36 37 2c 20 36 38 2c   65, 66, 67, 68,
6ba0: 20 36 39 2c 20 37 30 2c 20 37 31 2c 20 37 32 2c   69, 70, 71, 72,
6bb0: 20 37 33 2c 20 37 34 2c 20 37 35 2c 20 37 36 2c   73, 74, 75, 76,
6bc0: 20 37 37 2c 20 37 38 2c 20 37 39 2c 20 2f 2a 20   77, 78, 79, /* 
6bd0: 34 78 20 2a 2f 0a 20 20 20 20 20 38 30 2c 20 38  4x */.     80, 8
6be0: 31 2c 20 38 32 2c 20 38 33 2c 20 38 34 2c 20 38  1, 82, 83, 84, 8
6bf0: 35 2c 20 38 36 2c 20 38 37 2c 20 38 38 2c 20 38  5, 86, 87, 88, 8
6c00: 39 2c 20 39 30 2c 20 39 31 2c 20 39 32 2c 20 39  9, 90, 91, 92, 9
6c10: 33 2c 20 39 34 2c 20 39 35 2c 20 2f 2a 20 35 78  3, 94, 95, /* 5x
6c20: 20 2a 2f 0a 20 20 20 20 20 39 36 2c 20 39 37 2c   */.     96, 97,
6c30: 20 36 36 2c 20 36 37 2c 20 36 38 2c 20 36 39 2c   66, 67, 68, 69,
6c40: 20 37 30 2c 20 37 31 2c 20 37 32 2c 20 37 33 2c   70, 71, 72, 73,
6c50: 31 30 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c  106,107,108,109,
6c60: 31 31 30 2c 31 31 31 2c 20 2f 2a 20 36 78 20 2a  110,111, /* 6x *
6c70: 2f 0a 20 20 20 20 31 31 32 2c 20 38 31 2c 20 38  /.    112, 81, 8
6c80: 32 2c 20 38 33 2c 20 38 34 2c 20 38 35 2c 20 38  2, 83, 84, 85, 8
6c90: 36 2c 20 38 37 2c 20 38 38 2c 20 38 39 2c 31 32  6, 87, 88, 89,12
6ca0: 32 2c 31 32 33 2c 31 32 34 2c 31 32 35 2c 31 32  2,123,124,125,12
6cb0: 36 2c 31 32 37 2c 20 2f 2a 20 37 78 20 2a 2f 0a  6,127, /* 7x */.
6cc0: 20 20 20 20 31 32 38 2c 31 32 39 2c 31 33 30 2c      128,129,130,
6cd0: 31 33 31 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c  131,132,133,134,
6ce0: 31 33 35 2c 31 33 36 2c 31 33 37 2c 31 33 38 2c  135,136,137,138,
6cf0: 31 33 39 2c 31 34 30 2c 31 34 31 2c 31 34 32 2c  139,140,141,142,
6d00: 31 34 33 2c 20 2f 2a 20 38 78 20 2a 2f 0a 20 20  143, /* 8x */.  
6d10: 20 20 31 34 34 2c 31 34 35 2c 31 34 36 2c 31 34    144,145,146,14
6d20: 37 2c 31 34 38 2c 31 34 39 2c 31 35 30 2c 31 35  7,148,149,150,15
6d30: 31 2c 31 35 32 2c 31 35 33 2c 31 35 34 2c 31 35  1,152,153,154,15
6d40: 35 2c 31 35 36 2c 31 35 37 2c 31 35 36 2c 31 35  5,156,157,156,15
6d50: 39 2c 20 2f 2a 20 39 78 20 2a 2f 0a 20 20 20 20  9, /* 9x */.    
6d60: 31 36 30 2c 31 36 31 2c 31 36 32 2c 31 36 33 2c  160,161,162,163,
6d70: 31 36 34 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c  164,165,166,167,
6d80: 31 36 38 2c 31 36 39 2c 31 37 30 2c 31 37 31 2c  168,169,170,171,
6d90: 31 34 30 2c 31 34 31 2c 31 34 32 2c 31 37 35 2c  140,141,142,175,
6da0: 20 2f 2a 20 41 78 20 2a 2f 0a 20 20 20 20 31 37   /* Ax */.    17
6db0: 36 2c 31 37 37 2c 31 37 38 2c 31 37 39 2c 31 38  6,177,178,179,18
6dc0: 30 2c 31 38 31 2c 31 38 32 2c 31 38 33 2c 31 38  0,181,182,183,18
6dd0: 34 2c 31 38 35 2c 31 38 36 2c 31 38 37 2c 31 38  4,185,186,187,18
6de0: 38 2c 31 38 39 2c 31 39 30 2c 31 39 31 2c 20 2f  8,189,190,191, /
6df0: 2a 20 42 78 20 2a 2f 0a 20 20 20 20 31 39 32 2c  * Bx */.    192,
6e00: 31 32 39 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c  129,130,131,132,
6e10: 31 33 33 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c  133,134,135,136,
6e20: 31 33 37 2c 32 30 32 2c 32 30 33 2c 32 30 34 2c  137,202,203,204,
6e30: 32 30 35 2c 32 30 36 2c 32 30 37 2c 20 2f 2a 20  205,206,207, /* 
6e40: 43 78 20 2a 2f 0a 20 20 20 20 32 30 38 2c 31 34  Cx */.    208,14
6e50: 35 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c 31 34  5,146,147,148,14
6e60: 39 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c 31 35  9,150,151,152,15
6e70: 33 2c 32 31 38 2c 32 31 39 2c 32 32 30 2c 32 32  3,218,219,220,22
6e80: 31 2c 32 32 32 2c 32 32 33 2c 20 2f 2a 20 44 78  1,222,223, /* Dx
6e90: 20 2a 2f 0a 20 20 20 20 32 32 34 2c 32 32 35 2c   */.    224,225,
6ea0: 31 36 32 2c 31 36 33 2c 31 36 34 2c 31 36 35 2c  162,163,164,165,
6eb0: 31 36 36 2c 31 36 37 2c 31 36 38 2c 31 36 39 2c  166,167,168,169,
6ec0: 32 33 32 2c 32 30 33 2c 32 30 34 2c 32 30 35 2c  232,203,204,205,
6ed0: 32 30 36 2c 32 30 37 2c 20 2f 2a 20 45 78 20 2a  206,207, /* Ex *
6ee0: 2f 0a 20 20 20 20 32 33 39 2c 32 34 30 2c 32 34  /.    239,240,24
6ef0: 31 2c 32 34 32 2c 32 34 33 2c 32 34 34 2c 32 34  1,242,243,244,24
6f00: 35 2c 32 34 36 2c 32 34 37 2c 32 34 38 2c 32 34  5,246,247,248,24
6f10: 39 2c 32 31 39 2c 32 32 30 2c 32 32 31 2c 32 32  9,219,220,221,22
6f20: 32 2c 32 35 35 2c 20 2f 2a 20 46 78 20 2a 2f 0a  2,255, /* Fx */.
6f30: 23 65 6e 64 69 66 0a 7d 3b 0a 23 64 65 66 69 6e  #endif.};.#defin
6f40: 65 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 20 73  e UpperToLower s
6f50: 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
6f60: 65 72 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 73  er../*.** Some s
6f70: 79 73 74 65 6d 73 20 68 61 76 65 20 73 74 72 69  ystems have stri
6f80: 63 6d 70 28 29 2e 20 20 4f 74 68 65 72 73 20 68  cmp().  Others h
6f90: 61 76 65 20 73 74 72 63 61 73 65 63 6d 70 28 29  ave strcasecmp()
6fa0: 2e 20 20 42 65 63 61 75 73 65 0a 2a 2a 20 74 68  .  Because.** th
6fb0: 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 69 73  ere is no consis
6fc0: 74 65 6e 63 79 2c 20 77 65 20 77 69 6c 6c 20 64  tency, we will d
6fd0: 65 66 69 6e 65 20 6f 75 72 20 6f 77 6e 2e 0a 2a  efine our own..*
6fe0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
6ff0: 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20  ICmp(const char 
7000: 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68  *zLeft, const ch
7010: 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 72  ar *zRight){.  r
7020: 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64  egister unsigned
7030: 20 63 68 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20   char *a, *b;.  
7040: 61 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  a = (unsigned ch
7050: 61 72 20 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20  ar *)zLeft;.  b 
7060: 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  = (unsigned char
7070: 20 2a 29 7a 52 69 67 68 74 3b 0a 20 20 77 68 69   *)zRight;.  whi
7080: 6c 65 28 20 2a 61 21 3d 30 20 26 26 20 55 70 70  le( *a!=0 && Upp
7090: 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55  erToLower[*a]==U
70a0: 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29  pperToLower[*b])
70b0: 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20  { a++; b++; }.  
70c0: 72 65 74 75 72 6e 20 55 70 70 65 72 54 6f 4c 6f  return UpperToLo
70d0: 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54  wer[*a] - UpperT
70e0: 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 69 6e  oLower[*b];.}.in
70f0: 74 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  t sqlite3StrNICm
7100: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c  p(const char *zL
7110: 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  eft, const char 
7120: 2a 7a 52 69 67 68 74 2c 20 69 6e 74 20 4e 29 7b  *zRight, int N){
7130: 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69  .  register unsi
7140: 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a 62  gned char *a, *b
7150: 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e 65  ;.  a = (unsigne
7160: 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b 0a  d char *)zLeft;.
7170: 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64 20    b = (unsigned 
7180: 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a 20  char *)zRight;. 
7190: 20 77 68 69 6c 65 28 20 4e 2d 2d 20 3e 20 30 20   while( N-- > 0 
71a0: 26 26 20 2a 61 21 3d 30 20 26 26 20 55 70 70 65  && *a!=0 && Uppe
71b0: 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 3d 3d 55 70  rToLower[*a]==Up
71c0: 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 29 7b  perToLower[*b]){
71d0: 20 61 2b 2b 3b 20 62 2b 2b 3b 20 7d 0a 20 20 72   a++; b++; }.  r
71e0: 65 74 75 72 6e 20 4e 3c 30 20 3f 20 30 20 3a 20  eturn N<0 ? 0 : 
71f0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d  UpperToLower[*a]
7200: 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b   - UpperToLower[
7210: 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  *b];.}../*.** Re
7220: 74 75 72 6e 20 54 52 55 45 20 69 66 20 7a 20 69  turn TRUE if z i
7230: 73 20 61 20 70 75 72 65 20 6e 75 6d 65 72 69 63  s a pure numeric
7240: 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75 72 6e   string.  Return
7250: 20 46 41 4c 53 45 20 69 66 20 74 68 65 0a 2a 2a   FALSE if the.**
7260: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73   string contains
7270: 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20 77   any character w
7280: 68 69 63 68 20 69 73 20 6e 6f 74 20 70 61 72 74  hich is not part
7290: 20 6f 66 20 61 20 6e 75 6d 62 65 72 2e 20 49 66   of a number. If
72a0: 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67 20 69  .** the string i
72b0: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 63 6f  s numeric and co
72c0: 6e 74 61 69 6e 73 20 74 68 65 20 27 2e 27 20 63  ntains the '.' c
72d0: 68 61 72 61 63 74 65 72 2c 20 73 65 74 20 2a 72  haracter, set *r
72e0: 65 61 6c 6e 75 6d 0a 2a 2a 20 74 6f 20 54 52 55  ealnum.** to TRU
72f0: 45 20 28 6f 74 68 65 72 77 69 73 65 20 46 41 4c  E (otherwise FAL
7300: 53 45 29 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 6d  SE)..**.** An em
7310: 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 63 6f  pty string is co
7320: 6e 73 69 64 65 72 65 64 20 6e 6f 6e 2d 6e 75 6d  nsidered non-num
7330: 65 72 69 63 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  eric..*/.int sql
7340: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e  ite3IsNumber(con
7350: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
7360: 2a 72 65 61 6c 6e 75 6d 2c 20 75 38 20 65 6e 63  *realnum, u8 enc
7370: 29 7b 0a 20 20 69 6e 74 20 69 6e 63 72 20 3d 20  ){.  int incr = 
7380: 28 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  (enc==SQLITE_UTF
7390: 38 3f 31 3a 32 29 3b 0a 20 20 69 66 28 20 65 6e  8?1:2);.  if( en
73a0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
73b0: 45 20 29 20 7a 2b 2b 3b 0a 20 20 69 66 28 20 2a  E ) z++;.  if( *
73c0: 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27 2b  z=='-' || *z=='+
73d0: 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20  ' ) z += incr;. 
73e0: 20 69 66 28 20 21 69 73 64 69 67 69 74 28 2a 28   if( !isdigit(*(
73f0: 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 72 65  u8*)z) ){.    re
7400: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 20  turn 0;.  }.  z 
7410: 2b 3d 20 69 6e 63 72 3b 0a 20 20 69 66 28 20 72  += incr;.  if( r
7420: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
7430: 6d 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20  m = 0;.  while( 
7440: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
7450: 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d   ){ z += incr; }
7460: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29  .  if( *z=='.' )
7470: 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b  {.    z += incr;
7480: 0a 20 20 20 20 69 66 28 20 21 69 73 64 69 67 69  .    if( !isdigi
7490: 74 28 2a 28 75 38 2a 29 7a 29 20 29 20 72 65 74  t(*(u8*)z) ) ret
74a0: 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65  urn 0;.    while
74b0: 28 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29  ( isdigit(*(u8*)
74c0: 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b  z) ){ z += incr;
74d0: 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e   }.    if( realn
74e0: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
74f0: 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d  1;.  }.  if( *z=
7500: 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20  ='e' || *z=='E' 
7510: 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63 72  ){.    z += incr
7520: 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b  ;.    if( *z=='+
7530: 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a  ' || *z=='-' ) z
7540: 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69 66   += incr;.    if
7550: 28 20 21 69 73 64 69 67 69 74 28 2a 28 75 38 2a  ( !isdigit(*(u8*
7560: 29 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  )z) ) return 0;.
7570: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
7580: 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 20 7a  it(*(u8*)z) ){ z
7590: 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20 20 20   += incr; }.    
75a0: 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72  if( realnum ) *r
75b0: 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a  ealnum = 1;.  }.
75c0: 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a    return *z==0;.
75d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 74 72  }../*.** The str
75e0: 69 6e 67 20 7a 5b 5d 20 69 73 20 61 6e 20 61 73  ing z[] is an as
75f0: 63 69 69 20 72 65 70 72 65 73 65 6e 74 61 74 69  cii representati
7600: 6f 6e 20 6f 66 20 61 20 72 65 61 6c 20 6e 75 6d  on of a real num
7610: 62 65 72 2e 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ber..** Convert 
7620: 74 68 69 73 20 73 74 72 69 6e 67 20 74 6f 20 61  this string to a
7630: 20 64 6f 75 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54   double..**.** T
7640: 68 69 73 20 72 6f 75 74 69 6e 65 20 61 73 73 75  his routine assu
7650: 6d 65 73 20 74 68 61 74 20 7a 5b 5d 20 72 65 61  mes that z[] rea
7660: 6c 6c 79 20 69 73 20 61 20 76 61 6c 69 64 20 6e  lly is a valid n
7670: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 0a 2a 2a  umber.  If it.**
7680: 20 69 73 20 6e 6f 74 2c 20 74 68 65 20 72 65 73   is not, the res
7690: 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ult is undefined
76a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
76b0: 74 69 6e 65 20 69 73 20 75 73 65 64 20 69 6e 73  tine is used ins
76c0: 74 65 61 64 20 6f 66 20 74 68 65 20 6c 69 62 72  tead of the libr
76d0: 61 72 79 20 61 74 6f 66 28 29 20 66 75 6e 63 74  ary atof() funct
76e0: 69 6f 6e 20 62 65 63 61 75 73 65 0a 2a 2a 20 74  ion because.** t
76f0: 68 65 20 6c 69 62 72 61 72 79 20 61 74 6f 66 28  he library atof(
7700: 29 20 6d 69 67 68 74 20 77 61 6e 74 20 74 6f 20  ) might want to 
7710: 75 73 65 20 22 2c 22 20 61 73 20 74 68 65 20 64  use "," as the d
7720: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 73  ecimal point ins
7730: 74 65 61 64 0a 2a 2a 20 6f 66 20 22 2e 22 20 64  tead.** of "." d
7740: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 68 6f 77 20  epending on how 
7750: 6c 6f 63 61 6c 65 20 69 73 20 73 65 74 2e 20 20  locale is set.  
7760: 42 75 74 20 74 68 61 74 20 77 6f 75 6c 64 20 63  But that would c
7770: 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 0a 2a 2a  ause problems.**
7780: 20 66 6f 72 20 53 51 4c 2e 20 20 53 6f 20 74 68   for SQL.  So th
7790: 69 73 20 72 6f 75 74 69 6e 65 20 61 6c 77 61 79  is routine alway
77a0: 73 20 75 73 65 73 20 22 2e 22 20 72 65 67 61 72  s uses "." regar
77b0: 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
77c0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .*/.int sqlite3A
77d0: 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
77e0: 7a 2c 20 64 6f 75 62 6c 65 20 2a 70 52 65 73 75  z, double *pResu
77f0: 6c 74 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  lt){.#ifndef SQL
7800: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
7810: 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 69  G_POINT.  int si
7820: 67 6e 20 3d 20 31 3b 0a 20 20 63 6f 6e 73 74 20  gn = 1;.  const 
7830: 63 68 61 72 20 2a 7a 42 65 67 69 6e 20 3d 20 7a  char *zBegin = z
7840: 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ;.  LONGDOUBLE_T
7850: 59 50 45 20 76 31 20 3d 20 30 2e 30 3b 0a 20 20  YPE v1 = 0.0;.  
7860: 77 68 69 6c 65 28 20 69 73 73 70 61 63 65 28 2a  while( isspace(*
7870: 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20 69 66 28 20  z) ) z++;.  if( 
7880: 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 73  *z=='-' ){.    s
7890: 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 7a 2b  ign = -1;.    z+
78a0: 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  +;.  }else if( *
78b0: 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 2b  z=='+' ){.    z+
78c0: 2b 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20  +;.  }.  while( 
78d0: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
78e0: 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 76 31 2a   ){.    v1 = v1*
78f0: 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30 27  10.0 + (*z - '0'
7900: 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a  );.    z++;.  }.
7910: 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b    if( *z=='.' ){
7920: 0a 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  .    LONGDOUBLE_
7930: 54 59 50 45 20 64 69 76 69 73 6f 72 20 3d 20 31  TYPE divisor = 1
7940: 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  .0;.    z++;.   
7950: 20 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28   while( isdigit(
7960: 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20  *(u8*)z) ){.    
7970: 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b    v1 = v1*10.0 +
7980: 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20   (*z - '0');.   
7990: 20 20 20 64 69 76 69 73 6f 72 20 2a 3d 20 31 30     divisor *= 10
79a0: 2e 30 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20  .0;.      z++;. 
79b0: 20 20 20 7d 0a 20 20 20 20 76 31 20 2f 3d 20 64     }.    v1 /= d
79c0: 69 76 69 73 6f 72 3b 0a 20 20 7d 0a 20 20 69 66  ivisor;.  }.  if
79d0: 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d  ( *z=='e' || *z=
79e0: 3d 27 45 27 20 29 7b 0a 20 20 20 20 69 6e 74 20  ='E' ){.    int 
79f0: 65 73 69 67 6e 20 3d 20 31 3b 0a 20 20 20 20 69  esign = 1;.    i
7a00: 6e 74 20 65 76 61 6c 20 3d 20 30 3b 0a 20 20 20  nt eval = 0;.   
7a10: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
7a20: 20 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20 20   scale = 1.0;.  
7a30: 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a    z++;.    if( *
7a40: 7a 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20  z=='-' ){.      
7a50: 65 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20 20 20  esign = -1;.    
7a60: 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65    z++;.    }else
7a70: 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a   if( *z=='+' ){.
7a80: 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d        z++;.    }
7a90: 0a 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69  .    while( isdi
7aa0: 67 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a  git(*(u8*)z) ){.
7ab0: 20 20 20 20 20 20 65 76 61 6c 20 3d 20 65 76 61        eval = eva
7ac0: 6c 2a 31 30 20 2b 20 2a 7a 20 2d 20 27 30 27 3b  l*10 + *z - '0';
7ad0: 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
7ae0: 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76 61  }.    while( eva
7af0: 6c 3e 3d 36 34 20 29 7b 20 73 63 61 6c 65 20 2a  l>=64 ){ scale *
7b00: 3d 20 31 2e 30 65 2b 36 34 3b 20 65 76 61 6c 20  = 1.0e+64; eval 
7b10: 2d 3d 20 36 34 3b 20 7d 0a 20 20 20 20 77 68 69  -= 64; }.    whi
7b20: 6c 65 28 20 65 76 61 6c 3e 3d 31 36 20 29 7b 20  le( eval>=16 ){ 
7b30: 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 31 36  scale *= 1.0e+16
7b40: 3b 20 65 76 61 6c 20 2d 3d 20 31 36 3b 20 7d 0a  ; eval -= 16; }.
7b50: 20 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e      while( eval>
7b60: 3d 34 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  =4 ){ scale *= 1
7b70: 2e 30 65 2b 34 3b 20 65 76 61 6c 20 2d 3d 20 34  .0e+4; eval -= 4
7b80: 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65  ; }.    while( e
7b90: 76 61 6c 3e 3d 31 20 29 7b 20 73 63 61 6c 65 20  val>=1 ){ scale 
7ba0: 2a 3d 20 31 2e 30 65 2b 31 3b 20 65 76 61 6c 20  *= 1.0e+1; eval 
7bb0: 2d 3d 20 31 3b 20 7d 0a 20 20 20 20 69 66 28 20  -= 1; }.    if( 
7bc0: 65 73 69 67 6e 3c 30 20 29 7b 0a 20 20 20 20 20  esign<0 ){.     
7bd0: 20 76 31 20 2f 3d 20 73 63 61 6c 65 3b 0a 20 20   v1 /= scale;.  
7be0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 76    }else{.      v
7bf0: 31 20 2a 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20  1 *= scale;.    
7c00: 7d 0a 20 20 7d 0a 20 20 2a 70 52 65 73 75 6c 74  }.  }.  *pResult
7c10: 20 3d 20 73 69 67 6e 3c 30 20 3f 20 2d 76 31 20   = sign<0 ? -v1 
7c20: 3a 20 76 31 3b 0a 20 20 72 65 74 75 72 6e 20 7a  : v1;.  return z
7c30: 20 2d 20 7a 42 65 67 69 6e 3b 0a 23 65 6c 73 65   - zBegin;.#else
7c40: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
7c50: 33 61 74 6f 69 36 34 28 7a 2c 20 70 52 65 73 75  3atoi64(z, pResu
7c60: 6c 74 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  lt);.#endif /* S
7c70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
7c80: 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f 0a 7d 0a 0a  ING_POINT */.}..
7c90: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  /*.** Return TRU
7ca0: 45 20 69 66 20 7a 4e 75 6d 20 69 73 20 61 20 36  E if zNum is a 6
7cb0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7cc0: 65 67 65 72 20 61 6e 64 20 77 72 69 74 65 0a 2a  eger and write.*
7cd0: 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
7ce0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20  he integer into 
7cf0: 2a 70 4e 75 6d 2e 20 20 49 66 20 7a 4e 75 6d 20  *pNum.  If zNum 
7d00: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
7d10: 72 0a 2a 2a 20 6f 72 20 69 73 20 61 6e 20 69 6e  r.** or is an in
7d20: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
7d30: 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 65 78  o large to be ex
7d40: 70 72 65 73 73 65 64 20 77 69 74 68 20 36 34 20  pressed with 64 
7d50: 62 69 74 73 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  bits,.** then re
7d60: 74 75 72 6e 20 66 61 6c 73 65 2e 20 20 49 66 20  turn false.  If 
7d70: 6e 3e 30 20 61 6e 64 20 74 68 65 20 69 6e 74 65  n>0 and the inte
7d80: 67 65 72 20 69 73 20 73 74 72 69 6e 67 20 69 73  ger is string is
7d90: 20 6e 6f 74 0a 2a 2a 20 65 78 61 63 74 6c 79 20   not.** exactly 
7da0: 6e 20 62 79 74 65 73 20 6c 6f 6e 67 2c 20 72 65  n bytes long, re
7db0: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a  turn false..**.*
7dc0: 2a 20 57 68 65 6e 20 74 68 69 73 20 72 6f 75 74  * When this rout
7dd0: 69 6e 65 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ine was original
7de0: 6c 79 20 77 72 69 74 74 65 6e 20 69 74 20 64 65  ly written it de
7df0: 61 6c 74 20 77 69 74 68 20 6f 6e 6c 79 0a 2a 2a  alt with only.**
7e00: 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72 73 2e   32-bit numbers.
7e10: 20 20 41 74 20 74 68 61 74 20 74 69 6d 65 2c 20    At that time, 
7e20: 69 74 20 77 61 73 20 6d 75 63 68 20 66 61 73 74  it was much fast
7e30: 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 61  er than the.** a
7e40: 74 6f 69 28 29 20 6c 69 62 72 61 72 79 20 72 6f  toi() library ro
7e50: 75 74 69 6e 65 20 69 6e 20 52 65 64 48 61 74 20  utine in RedHat 
7e60: 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  7.2..*/.int sqli
7e70: 74 65 33 61 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3atoi64(const 
7e80: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20  char *zNum, i64 
7e90: 2a 70 4e 75 6d 29 7b 0a 20 20 69 36 34 20 76 20  *pNum){.  i64 v 
7ea0: 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67 3b 0a  = 0;.  int neg;.
7eb0: 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 77 68    int i, c;.  wh
7ec0: 69 6c 65 28 20 69 73 73 70 61 63 65 28 2a 7a 4e  ile( isspace(*zN
7ed0: 75 6d 29 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20  um) ) zNum++;.  
7ee0: 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29  if( *zNum=='-' )
7ef0: 7b 0a 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20  {.    neg = 1;. 
7f00: 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c     zNum++;.  }el
7f10: 73 65 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b  se if( *zNum=='+
7f20: 27 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30  ' ){.    neg = 0
7f30: 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20  ;.    zNum++;.  
7f40: 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 65 67 20 3d  }else{.    neg =
7f50: 20 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   0;.  }.  for(i=
7f60: 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d  0; (c=zNum[i])>=
7f70: 27 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69  '0' && c<='9'; i
7f80: 2b 2b 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31  ++){.    v = v*1
7f90: 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 7d  0 + c - '0';.  }
7fa0: 0a 20 20 2a 70 4e 75 6d 20 3d 20 6e 65 67 20 3f  .  *pNum = neg ?
7fb0: 20 2d 76 20 3a 20 76 3b 0a 20 20 72 65 74 75 72   -v : v;.  retur
7fc0: 6e 20 63 3d 3d 30 20 26 26 20 69 3e 30 20 26 26  n c==0 && i>0 &&
7fd0: 20 0a 20 20 20 20 20 20 28 69 3c 31 39 20 7c 7c   .      (i<19 ||
7fe0: 20 28 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63 6d   (i==19 && memcm
7ff0: 70 28 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32 30  p(zNum,"92233720
8000: 33 36 38 35 34 37 37 35 38 30 37 22 2c 31 39 29  36854775807",19)
8010: 3c 3d 30 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  <=0));.}../*.** 
8020: 54 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20  The string zNum 
8030: 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e  represents an in
8040: 74 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69  teger.  There mi
8050: 67 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65  ght be some othe
8060: 72 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  r.** information
8070: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69   following the i
8080: 6e 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20  nteger too, but 
8090: 74 68 61 74 20 70 61 72 74 20 69 73 20 69 67 6e  that part is ign
80a0: 6f 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ored..** If the 
80b0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 74 68 65  integer that the
80c0: 20 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20   prefix of zNum 
80d0: 72 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20  represents will 
80e0: 66 69 74 20 69 6e 20 61 0a 2a 2a 20 33 32 2d 62  fit in a.** 32-b
80f0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
8100: 72 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20  r, return TRUE. 
8110: 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72   Otherwise retur
8120: 6e 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54  n FALSE..**.** T
8130: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
8140: 72 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68  rns FALSE for th
8150: 65 20 73 74 72 69 6e 67 20 2d 32 31 34 37 34 38  e string -214748
8160: 33 36 34 38 20 65 76 65 6e 20 74 68 61 74 0a 2a  3648 even that.*
8170: 2a 20 74 68 61 74 20 6e 75 6d 62 65 72 20 77 69  * that number wi
8180: 6c 6c 20 69 6e 20 66 61 63 74 20 66 69 74 20 69  ll in fact fit i
8190: 6e 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  n a 32-bit integ
81a0: 65 72 2e 20 20 42 75 74 20 70 6f 73 69 74 69 76  er.  But positiv
81b0: 65 0a 2a 2a 20 32 31 34 37 34 38 33 36 34 38 20  e.** 2147483648 
81c0: 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20  will not fit in 
81d0: 33 32 20 62 69 74 73 2e 20 20 53 6f 20 69 74 20  32 bits.  So it 
81e0: 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20 72  seems safer to r
81f0: 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a  eturn.** false..
8200: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
8210: 6c 69 74 65 33 46 69 74 73 49 6e 33 32 42 69 74  lite3FitsIn32Bit
8220: 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  s(const char *zN
8230: 75 6d 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b  um){.  int i, c;
8240: 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d  .  if( *zNum=='-
8250: 27 20 7c 7c 20 2a 7a 4e 75 6d 3d 3d 27 2b 27 20  ' || *zNum=='+' 
8260: 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72 28  ) zNum++;.  for(
8270: 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29  i=0; (c=zNum[i])
8280: 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 3b  >='0' && c<='9';
8290: 20 69 2b 2b 29 7b 7d 0a 20 20 72 65 74 75 72 6e   i++){}.  return
82a0: 20 69 3c 31 30 20 7c 7c 20 28 69 3d 3d 31 30 20   i<10 || (i==10 
82b0: 26 26 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22  && memcmp(zNum,"
82c0: 32 31 34 37 34 38 33 36 34 37 22 2c 31 30 29 3c  2147483647",10)<
82d0: 3d 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66  =0);.}../*.** If
82e0: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
82f0: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
8300: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 33 32 2d   will fit in 32-
8310: 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a  bits, then set.*
8320: 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61  * *pValue to tha
8330: 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65  t integer and re
8340: 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65  turn true.  Othe
8350: 72 77 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c  rwise return fal
8360: 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  se..*/.int sqlit
8370: 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
8380: 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74   char *zNum, int
8390: 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28   *pValue){.  if(
83a0: 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e 33 32   sqlite3FitsIn32
83b0: 42 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20  Bits(zNum) ){.  
83c0: 20 20 2a 70 56 61 6c 75 65 20 3d 20 61 74 6f 69    *pValue = atoi
83d0: 28 7a 4e 75 6d 29 3b 0a 20 20 20 20 72 65 74 75  (zNum);.    retu
83e0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
83f0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn 0;.}../*.** T
8400: 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72  he string zNum r
8410: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74  epresents an int
8420: 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69 67  eger.  There mig
8430: 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  ht be some other
8440: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
8450: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e  following the in
8460: 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20 74  teger too, but t
8470: 68 61 74 20 70 61 72 74 20 69 73 20 69 67 6e 6f  hat part is igno
8480: 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69  red..** If the i
8490: 6e 74 65 67 65 72 20 74 68 61 74 20 74 68 65 20  nteger that the 
84a0: 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72  prefix of zNum r
84b0: 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20 66  epresents will f
84c0: 69 74 20 69 6e 20 61 0a 2a 2a 20 36 34 2d 62 69  it in a.** 64-bi
84d0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
84e0: 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20 20  , return TRUE.  
84f0: 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e  Otherwise return
8500: 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68   FALSE..**.** Th
8510: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
8520: 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68 65  ns FALSE for the
8530: 20 73 74 72 69 6e 67 20 2d 39 32 32 33 33 37 32   string -9223372
8540: 30 33 36 38 35 34 37 37 35 38 30 38 20 65 76 65  036854775808 eve
8550: 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e  n that.** that n
8560: 75 6d 62 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74  umber will, in t
8570: 68 65 6f 72 79 20 66 69 74 20 69 6e 20 61 20 36  heory fit in a 6
8580: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 20 20  4-bit integer.  
8590: 50 6f 73 69 74 69 76 65 0a 2a 2a 20 39 32 32 33  Positive.** 9223
85a0: 33 37 33 30 33 36 38 35 34 37 37 35 38 30 38 20  373036854775808 
85b0: 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20  will not fit in 
85c0: 36 34 20 62 69 74 73 2e 20 20 53 6f 20 69 74 20  64 bits.  So it 
85d0: 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20 72  seems safer to r
85e0: 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a  eturn.** false..
85f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  */.int sqlite3Fi
8600: 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73 74  tsIn64Bits(const
8610: 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b 0a 20 20   char *zNum){.  
8620: 69 6e 74 20 69 2c 20 63 3b 0a 20 20 69 66 28 20  int i, c;.  if( 
8630: 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 7c 7c 20 2a 7a  *zNum=='-' || *z
8640: 4e 75 6d 3d 3d 27 2b 27 20 29 20 7a 4e 75 6d 2b  Num=='+' ) zNum+
8650: 2b 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63  +;.  for(i=0; (c
8660: 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27 20 26  =zNum[i])>='0' &
8670: 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d  & c<='9'; i++){}
8680: 0a 20 20 72 65 74 75 72 6e 20 69 3c 31 39 20 7c  .  return i<19 |
8690: 7c 20 28 69 3d 3d 31 39 20 26 26 20 6d 65 6d 63  | (i==19 && memc
86a0: 6d 70 28 7a 4e 75 6d 2c 22 39 32 32 33 33 37 32  mp(zNum,"9223372
86b0: 30 33 36 38 35 34 37 37 35 38 30 37 22 2c 31 39  036854775807",19
86c0: 29 3c 3d 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  )<=0);.}.../*.**
86d0: 20 43 68 61 6e 67 65 20 74 68 65 20 73 71 6c 69   Change the sqli
86e0: 74 65 2e 6d 61 67 69 63 20 66 72 6f 6d 20 53 51  te.magic from SQ
86f0: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
8700: 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  to SQLITE_MAGIC_
8710: 42 55 53 59 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  BUSY..** Return 
8720: 61 6e 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65  an error (non-ze
8730: 72 6f 29 20 69 66 20 74 68 65 20 6d 61 67 69 63  ro) if the magic
8740: 20 77 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f   was not SQLITE_
8750: 4d 41 47 49 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68  MAGIC_OPEN.** wh
8760: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
8770: 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a  is called..**.**
8780: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
8790: 20 61 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65   a attempt to de
87a0: 74 65 63 74 20 69 66 20 74 77 6f 20 74 68 72 65  tect if two thre
87b0: 61 64 73 20 75 73 65 20 74 68 65 0a 2a 2a 20 73  ads use the.** s
87c0: 61 6d 65 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e  ame sqlite* poin
87d0: 74 65 72 20 61 74 20 74 68 65 20 73 61 6d 65 20  ter at the same 
87e0: 74 69 6d 65 2e 20 20 54 68 65 72 65 20 69 73 20  time.  There is 
87f0: 61 20 72 61 63 65 20 0a 2a 2a 20 63 6f 6e 64 69  a race .** condi
8800: 74 69 6f 6e 20 73 6f 20 69 74 20 69 73 20 70 6f  tion so it is po
8810: 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20  ssible that the 
8820: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 64 65 74  error is not det
8830: 65 63 74 65 64 2e 0a 2a 2a 20 42 75 74 20 75 73  ected..** But us
8840: 75 61 6c 6c 79 20 74 68 65 20 70 72 6f 62 6c 65  ually the proble
8850: 6d 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 2e 20  m will be seen. 
8860: 20 54 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c   The result will
8870: 20 62 65 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20   be an.** error 
8880: 77 68 69 63 68 20 63 61 6e 20 62 65 20 75 73 65  which can be use
8890: 64 20 74 6f 20 64 65 62 75 67 20 74 68 65 20 61  d to debug the a
88a0: 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20  pplication that 
88b0: 69 73 0a 2a 2a 20 75 73 69 6e 67 20 53 51 4c 69  is.** using SQLi
88c0: 74 65 20 69 6e 63 6f 72 72 65 63 74 6c 79 2e 0a  te incorrectly..
88d0: 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 30  **.** Ticket #20
88e0: 32 3a 20 20 49 66 20 64 62 2d 3e 6d 61 67 69 63  2:  If db->magic
88f0: 20 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20   is not a valid 
8900: 6f 70 65 6e 20 76 61 6c 75 65 2c 20 74 61 6b 65  open value, take
8910: 20 63 61 72 65 20 6e 6f 74 0a 2a 2a 20 74 6f 20   care not.** to 
8920: 6d 6f 64 69 66 79 20 74 68 65 20 64 62 20 73 74  modify the db st
8930: 72 75 63 74 75 72 65 20 61 74 20 61 6c 6c 2e 20  ructure at all. 
8940: 20 49 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61   It could be tha
8950: 74 20 64 62 20 69 73 20 61 20 73 74 61 6c 65 0a  t db is a stale.
8960: 2a 2a 20 70 6f 69 6e 74 65 72 2e 20 20 49 6e 20  ** pointer.  In 
8970: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 20  other words, it 
8980: 63 6f 75 6c 64 20 62 65 20 74 68 61 74 20 74 68  could be that th
8990: 65 72 65 20 68 61 73 20 62 65 65 6e 20 61 20 70  ere has been a p
89a0: 72 69 6f 72 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20  rior.** call to 
89b0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
89c0: 29 20 61 6e 64 20 64 62 20 68 61 73 20 62 65 65  ) and db has bee
89d0: 6e 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20  n deallocated.  
89e0: 41 6e 64 20 77 65 20 64 6f 0a 2a 2a 20 6e 6f 74  And we do.** not
89f0: 20 77 61 6e 74 20 74 6f 20 77 72 69 74 65 20 69   want to write i
8a00: 6e 74 6f 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  nto deallocated 
8a10: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73  memory..*/.int s
8a20: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 73  qlite3SafetyOn(s
8a30: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
8a40: 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51  f( db->magic==SQ
8a50: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
8a60: 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
8a70: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
8a80: 42 55 53 59 3b 0a 20 20 20 20 72 65 74 75 72 6e  BUSY;.    return
8a90: 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   0;.  }else if( 
8aa0: 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54  db->magic==SQLIT
8ab0: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a  E_MAGIC_BUSY ){.
8ac0: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
8ad0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
8ae0: 4f 52 3b 0a 20 20 20 20 64 62 2d 3e 75 31 2e 69  OR;.    db->u1.i
8af0: 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d 20 31  sInterrupted = 1
8b00: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31  ;.  }.  return 1
8b10: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67  ;.}../*.** Chang
8b20: 65 20 74 68 65 20 6d 61 67 69 63 20 66 72 6f 6d  e the magic from
8b30: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
8b40: 53 59 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47  SY to SQLITE_MAG
8b50: 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20 52 65 74 75  IC_OPEN..** Retu
8b60: 72 6e 20 61 6e 20 65 72 72 6f 72 20 28 6e 6f 6e  rn an error (non
8b70: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 6d 61  -zero) if the ma
8b80: 67 69 63 20 77 61 73 20 6e 6f 74 20 53 51 4c 49  gic was not SQLI
8b90: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 0a 2a 2a  TE_MAGIC_BUSY.**
8ba0: 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   when this routi
8bb0: 6e 65 20 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ne is called..*/
8bc0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
8bd0: 74 79 4f 66 66 28 73 71 6c 69 74 65 33 20 2a 64  tyOff(sqlite3 *d
8be0: 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  b){.  if( db->ma
8bf0: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
8c00: 43 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 64 62  C_BUSY ){.    db
8c10: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
8c20: 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 20  _MAGIC_OPEN;.   
8c30: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c   return 0;.  }el
8c40: 73 65 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  se if( db->magic
8c50: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  ==SQLITE_MAGIC_O
8c60: 50 45 4e 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  PEN ){.    db->m
8c70: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
8c80: 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64  GIC_ERROR;.    d
8c90: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
8ca0: 74 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72  ted = 1;.  }.  r
8cb0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 1;.}../*.*
8cc0: 2a 20 43 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20  * Check to make 
8cd0: 73 75 72 65 20 77 65 20 68 61 76 65 20 61 20 76  sure we have a v
8ce0: 61 6c 69 64 20 64 62 20 70 6f 69 6e 74 65 72 2e  alid db pointer.
8cf0: 20 20 54 68 69 73 20 74 65 73 74 20 69 73 20 6e    This test is n
8d00: 6f 74 0a 2a 2a 20 66 6f 6f 6c 70 72 6f 6f 66 20  ot.** foolproof 
8d10: 62 75 74 20 69 74 20 64 6f 65 73 20 70 72 6f 76  but it does prov
8d20: 69 64 65 20 73 6f 6d 65 20 6d 65 61 73 75 72 65  ide some measure
8d30: 20 6f 66 20 70 72 6f 74 65 63 74 69 6f 6e 20 61   of protection a
8d40: 67 61 69 6e 73 74 0a 2a 2a 20 6d 69 73 75 73 65  gainst.** misuse
8d50: 20 6f 66 20 74 68 65 20 69 6e 74 65 72 66 61 63   of the interfac
8d60: 65 20 73 75 63 68 20 61 73 20 70 61 73 73 69 6e  e such as passin
8d70: 67 20 69 6e 20 64 62 20 70 6f 69 6e 74 65 72 73  g in db pointers
8d80: 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 4e 55 4c   that are.** NUL
8d90: 4c 20 6f 72 20 77 68 69 63 68 20 68 61 76 65 20  L or which have 
8da0: 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  been previously 
8db0: 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
8dc0: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
8dd0: 0a 2a 2a 20 54 52 55 45 20 69 74 20 6d 65 61 6e  .** TRUE it mean
8de0: 73 20 74 68 61 74 20 74 68 65 20 64 62 20 70 6f  s that the db po
8df0: 69 6e 74 65 72 20 69 73 20 69 6e 76 61 6c 69 64  inter is invalid
8e00: 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20   and should not 
8e10: 62 65 0a 2a 2a 20 64 65 72 65 66 65 72 65 6e 63  be.** dereferenc
8e20: 65 64 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f  ed for any reaso
8e30: 6e 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e 67 20  n.  The calling 
8e40: 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20  function should 
8e50: 69 6e 76 6f 6b 65 0a 2a 2a 20 53 51 4c 49 54 45  invoke.** SQLITE
8e60: 5f 4d 49 53 55 53 45 20 69 6d 6d 65 64 69 61 74  _MISUSE immediat
8e70: 65 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ely..*/.int sqli
8e80: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 73  te3SafetyCheck(s
8e90: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
8ea0: 6e 74 20 6d 61 67 69 63 3b 0a 20 20 69 66 28 20  nt magic;.  if( 
8eb0: 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  db==0 ) return 1
8ec0: 3b 0a 20 20 6d 61 67 69 63 20 3d 20 64 62 2d 3e  ;.  magic = db->
8ed0: 6d 61 67 69 63 3b 0a 20 20 69 66 28 20 6d 61 67  magic;.  if( mag
8ee0: 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic!=SQLITE_MAGIC
8ef0: 5f 43 4c 4f 53 45 44 20 26 26 0a 20 20 20 20 20  _CLOSED &&.     
8f00: 20 20 20 20 6d 61 67 69 63 21 3d 53 51 4c 49 54      magic!=SQLIT
8f10: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 26 26 0a  E_MAGIC_OPEN &&.
8f20: 20 20 20 20 20 20 20 20 20 6d 61 67 69 63 21 3d           magic!=
8f30: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
8f40: 59 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  Y ) return 1;.  
8f50: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
8f60: 2a 2a 20 54 68 65 20 76 61 72 69 61 62 6c 65 2d  ** The variable-
8f70: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 65  length integer e
8f80: 6e 63 6f 64 69 6e 67 20 69 73 20 61 73 20 66 6f  ncoding is as fo
8f90: 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59  llows:.**.** KEY
8fa0: 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 41 20 3d  :.**         A =
8fb0: 20 30 78 78 78 78 78 78 78 20 20 20 20 37 20 62   0xxxxxxx    7 b
8fc0: 69 74 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20  its of data and 
8fd0: 6f 6e 65 20 66 6c 61 67 20 62 69 74 0a 2a 2a 20  one flag bit.** 
8fe0: 20 20 20 20 20 20 20 20 42 20 3d 20 31 78 78 78          B = 1xxx
8ff0: 78 78 78 78 20 20 20 20 37 20 62 69 74 73 20 6f  xxxx    7 bits o
9000: 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66  f data and one f
9010: 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20  lag bit.**      
9020: 20 20 20 43 20 3d 20 78 78 78 78 78 78 78 78 20     C = xxxxxxxx 
9030: 20 20 20 38 20 62 69 74 73 20 6f 66 20 64 61 74     8 bits of dat
9040: 61 0a 2a 2a 0a 2a 2a 20 20 37 20 62 69 74 73 20  a.**.**  7 bits 
9050: 2d 20 41 0a 2a 2a 20 31 34 20 62 69 74 73 20 2d  - A.** 14 bits -
9060: 20 42 41 0a 2a 2a 20 32 31 20 62 69 74 73 20 2d   BA.** 21 bits -
9070: 20 42 42 41 0a 2a 2a 20 32 38 20 62 69 74 73 20   BBA.** 28 bits 
9080: 2d 20 42 42 42 41 0a 2a 2a 20 33 35 20 62 69 74  - BBBA.** 35 bit
9090: 73 20 2d 20 42 42 42 42 41 0a 2a 2a 20 34 32 20  s - BBBBA.** 42 
90a0: 62 69 74 73 20 2d 20 42 42 42 42 42 41 0a 2a 2a  bits - BBBBBA.**
90b0: 20 34 39 20 62 69 74 73 20 2d 20 42 42 42 42 42   49 bits - BBBBB
90c0: 42 41 0a 2a 2a 20 35 36 20 62 69 74 73 20 2d 20  BA.** 56 bits - 
90d0: 42 42 42 42 42 42 42 41 0a 2a 2a 20 36 34 20 62  BBBBBBBA.** 64 b
90e0: 69 74 73 20 2d 20 42 42 42 42 42 42 42 42 43 0a  its - BBBBBBBBC.
90f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  */../*.** Write 
9100: 61 20 36 34 2d 62 69 74 20 76 61 72 69 61 62 6c  a 64-bit variabl
9110: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
9120: 20 74 6f 20 6d 65 6d 6f 72 79 20 73 74 61 72 74   to memory start
9130: 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20  ing at p[0]..** 
9140: 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 64 61  The length of da
9150: 74 61 20 77 72 69 74 65 20 77 69 6c 6c 20 62 65  ta write will be
9160: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39   between 1 and 9
9170: 20 62 79 74 65 73 2e 20 20 54 68 65 20 6e 75 6d   bytes.  The num
9180: 62 65 72 0a 2a 2a 20 6f 66 20 62 79 74 65 73 20  ber.** of bytes 
9190: 77 72 69 74 74 65 6e 20 69 73 20 72 65 74 75 72  written is retur
91a0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61 72  ned..**.** A var
91b0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
91c0: 65 67 65 72 20 63 6f 6e 73 69 73 74 73 20 6f 66  eger consists of
91d0: 20 74 68 65 20 6c 6f 77 65 72 20 37 20 62 69 74   the lower 7 bit
91e0: 73 20 6f 66 20 65 61 63 68 20 62 79 74 65 0a 2a  s of each byte.*
91f0: 2a 20 66 6f 72 20 61 6c 6c 20 62 79 74 65 73 20  * for all bytes 
9200: 74 68 61 74 20 68 61 76 65 20 74 68 65 20 38 74  that have the 8t
9210: 68 20 62 69 74 20 73 65 74 20 61 6e 64 20 6f 6e  h bit set and on
9220: 65 20 62 79 74 65 20 77 69 74 68 20 74 68 65 20  e byte with the 
9230: 38 74 68 0a 2a 2a 20 62 69 74 20 63 6c 65 61 72  8th.** bit clear
9240: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 77 65  .  Except, if we
9250: 20 67 65 74 20 74 6f 20 74 68 65 20 39 74 68 20   get to the 9th 
9260: 62 79 74 65 2c 20 69 74 20 73 74 6f 72 65 73 20  byte, it stores 
9270: 74 68 65 20 66 75 6c 6c 0a 2a 2a 20 38 20 62 69  the full.** 8 bi
9280: 74 73 20 61 6e 64 20 69 73 20 74 68 65 20 6c 61  ts and is the la
9290: 73 74 20 62 79 74 65 2e 0a 2a 2f 0a 69 6e 74 20  st byte..*/.int 
92a0: 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
92b0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  (unsigned char *
92c0: 70 2c 20 75 36 34 20 76 29 7b 0a 20 20 69 6e 74  p, u64 v){.  int
92d0: 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 75 38 20 62   i, j, n;.  u8 b
92e0: 75 66 5b 31 30 5d 3b 0a 20 20 69 66 28 20 76 20  uf[10];.  if( v 
92f0: 26 20 28 28 28 75 36 34 29 30 78 66 66 30 30 30  & (((u64)0xff000
9300: 30 30 30 29 3c 3c 33 32 29 20 29 7b 0a 20 20 20  000)<<32) ){.   
9310: 20 70 5b 38 5d 20 3d 20 76 3b 0a 20 20 20 20 76   p[8] = v;.    v
9320: 20 3e 3e 3d 20 38 3b 0a 20 20 20 20 66 6f 72 28   >>= 8;.    for(
9330: 69 3d 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b  i=7; i>=0; i--){
9340: 0a 20 20 20 20 20 20 70 5b 69 5d 20 3d 20 28 76  .      p[i] = (v
9350: 20 26 20 30 78 37 66 29 20 7c 20 30 78 38 30 3b   & 0x7f) | 0x80;
9360: 0a 20 20 20 20 20 20 76 20 3e 3e 3d 20 37 3b 0a  .      v >>= 7;.
9370: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9380: 20 39 3b 0a 20 20 7d 20 20 20 20 0a 20 20 6e 20   9;.  }    .  n 
9390: 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 62  = 0;.  do{.    b
93a0: 75 66 5b 6e 2b 2b 5d 20 3d 20 28 76 20 26 20 30  uf[n++] = (v & 0
93b0: 78 37 66 29 20 7c 20 30 78 38 30 3b 0a 20 20 20  x7f) | 0x80;.   
93c0: 20 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69   v >>= 7;.  }whi
93d0: 6c 65 28 20 76 21 3d 30 20 29 3b 0a 20 20 62 75  le( v!=0 );.  bu
93e0: 66 5b 30 5d 20 26 3d 20 30 78 37 66 3b 0a 20 20  f[0] &= 0x7f;.  
93f0: 61 73 73 65 72 74 28 20 6e 3c 3d 39 20 29 3b 0a  assert( n<=9 );.
9400: 20 20 66 6f 72 28 69 3d 30 2c 20 6a 3d 6e 2d 31    for(i=0, j=n-1
9410: 3b 20 6a 3e 3d 30 3b 20 6a 2d 2d 2c 20 69 2b 2b  ; j>=0; j--, i++
9420: 29 7b 0a 20 20 20 20 70 5b 69 5d 20 3d 20 62 75  ){.    p[i] = bu
9430: 66 5b 6a 5d 3b 0a 20 20 7d 0a 20 20 72 65 74 75  f[j];.  }.  retu
9440: 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn n;.}../*.** R
9450: 65 61 64 20 61 20 36 34 2d 62 69 74 20 76 61 72  ead a 64-bit var
9460: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
9470: 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79  eger from memory
9480: 20 73 74 61 72 74 69 6e 67 20 61 74 20 70 5b 30   starting at p[0
9490: 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  ]..** Return the
94a0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
94b0: 20 72 65 61 64 2e 20 20 54 68 65 20 76 61 6c 75   read.  The valu
94c0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 2a  e is stored in *
94d0: 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  v..*/.int sqlite
94e0: 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
94f0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
9500: 70 2c 20 75 36 34 20 2a 76 29 7b 0a 20 20 75 33  p, u64 *v){.  u3
9510: 32 20 78 3b 0a 20 20 75 36 34 20 78 36 34 3b 0a  2 x;.  u64 x64;.
9520: 20 20 69 6e 74 20 6e 3b 0a 20 20 75 6e 73 69 67    int n;.  unsig
9530: 6e 65 64 20 63 68 61 72 20 63 3b 0a 20 20 69 66  ned char c;.  if
9540: 28 20 28 28 63 20 3d 20 70 5b 30 5d 29 20 26 20  ( ((c = p[0]) & 
9550: 30 78 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  0x80)==0 ){.    
9560: 2a 76 20 3d 20 63 3b 0a 20 20 20 20 72 65 74 75  *v = c;.    retu
9570: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 1;.  }.  x = 
9580: 63 20 26 20 30 78 37 66 3b 0a 20 20 69 66 28 20  c & 0x7f;.  if( 
9590: 28 28 63 20 3d 20 70 5b 31 5d 29 20 26 20 30 78  ((c = p[1]) & 0x
95a0: 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76  80)==0 ){.    *v
95b0: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20   = (x<<7) | c;. 
95c0: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
95d0: 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20  .  x = (x<<7) | 
95e0: 28 63 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20  (c&0x7f);.  if( 
95f0: 28 28 63 20 3d 20 70 5b 32 5d 29 20 26 20 30 78  ((c = p[2]) & 0x
9600: 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76  80)==0 ){.    *v
9610: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20   = (x<<7) | c;. 
9620: 20 20 20 72 65 74 75 72 6e 20 33 3b 0a 20 20 7d     return 3;.  }
9630: 0a 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20  .  x = (x<<7) | 
9640: 28 63 26 30 78 37 66 29 3b 0a 20 20 69 66 28 20  (c&0x7f);.  if( 
9650: 28 28 63 20 3d 20 70 5b 33 5d 29 20 26 20 30 78  ((c = p[3]) & 0x
9660: 38 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 76  80)==0 ){.    *v
9670: 20 3d 20 28 78 3c 3c 37 29 20 7c 20 63 3b 0a 20   = (x<<7) | c;. 
9680: 20 20 20 72 65 74 75 72 6e 20 34 3b 0a 20 20 7d     return 4;.  }
9690: 0a 20 20 78 36 34 20 3d 20 28 78 3c 3c 37 29 20  .  x64 = (x<<7) 
96a0: 7c 20 28 63 26 30 78 37 66 29 3b 0a 20 20 6e 20  | (c&0x7f);.  n 
96b0: 3d 20 34 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 63  = 4;.  do{.    c
96c0: 20 3d 20 70 5b 6e 2b 2b 5d 3b 0a 20 20 20 20 69   = p[n++];.    i
96d0: 66 28 20 6e 3d 3d 39 20 29 7b 0a 20 20 20 20 20  f( n==9 ){.     
96e0: 20 78 36 34 20 3d 20 28 78 36 34 3c 3c 38 29 20   x64 = (x64<<8) 
96f0: 7c 20 63 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  | c;.      break
9700: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 78 36 34 20  ;.    }.    x64 
9710: 3d 20 28 78 36 34 3c 3c 37 29 20 7c 20 28 63 26  = (x64<<7) | (c&
9720: 30 78 37 66 29 3b 0a 20 20 7d 77 68 69 6c 65 28  0x7f);.  }while(
9730: 20 28 63 20 26 20 30 78 38 30 29 21 3d 30 20 29   (c & 0x80)!=0 )
9740: 3b 0a 20 20 2a 76 20 3d 20 78 36 34 3b 0a 20 20  ;.  *v = x64;.  
9750: 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a  return n;.}../*.
9760: 2a 2a 20 52 65 61 64 20 61 20 33 32 2d 62 69 74  ** Read a 32-bit
9770: 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
9780: 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65   integer from me
9790: 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74  mory starting at
97a0: 20 70 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e   p[0]..** Return
97b0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
97c0: 79 74 65 73 20 72 65 61 64 2e 20 20 54 68 65 20  ytes read.  The 
97d0: 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20  value is stored 
97e0: 69 6e 20 2a 76 2e 0a 2a 2f 0a 69 6e 74 20 73 71  in *v..*/.int sq
97f0: 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
9800: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
9810: 63 68 61 72 20 2a 70 2c 20 75 33 32 20 2a 76 29  char *p, u32 *v)
9820: 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20 69 6e 74  {.  u32 x;.  int
9830: 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63   n;.  unsigned c
9840: 68 61 72 20 63 3b 0a 20 20 69 66 28 20 28 28 73  har c;.  if( ((s
9850: 69 67 6e 65 64 20 63 68 61 72 2a 29 70 29 5b 30  igned char*)p)[0
9860: 5d 3e 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d  ]>=0 ){.    *v =
9870: 20 70 5b 30 5d 3b 0a 20 20 20 20 72 65 74 75 72   p[0];.    retur
9880: 6e 20 31 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 70  n 1;.  }.  x = p
9890: 5b 30 5d 20 26 20 30 78 37 66 3b 0a 20 20 69 66  [0] & 0x7f;.  if
98a0: 28 20 28 28 73 69 67 6e 65 64 20 63 68 61 72 2a  ( ((signed char*
98b0: 29 70 29 5b 31 5d 3e 3d 30 20 29 7b 0a 20 20 20  )p)[1]>=0 ){.   
98c0: 20 2a 76 20 3d 20 28 78 3c 3c 37 29 20 7c 20 70   *v = (x<<7) | p
98d0: 5b 31 5d 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  [1];.    return 
98e0: 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20 28 78 3c  2;.  }.  x = (x<
98f0: 3c 37 29 20 7c 20 28 70 5b 31 5d 20 26 20 30 78  <7) | (p[1] & 0x
9900: 37 66 29 3b 0a 20 20 6e 20 3d 20 32 3b 0a 20 20  7f);.  n = 2;.  
9910: 64 6f 7b 0a 20 20 20 20 78 20 3d 20 28 78 3c 3c  do{.    x = (x<<
9920: 37 29 20 7c 20 28 28 63 20 3d 20 70 5b 6e 2b 2b  7) | ((c = p[n++
9930: 5d 29 26 30 78 37 66 29 3b 0a 20 20 7d 77 68 69  ])&0x7f);.  }whi
9940: 6c 65 28 20 28 63 20 26 20 30 78 38 30 29 21 3d  le( (c & 0x80)!=
9950: 30 20 26 26 20 6e 3c 39 20 29 3b 0a 20 20 2a 76  0 && n<9 );.  *v
9960: 20 3d 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 6e   = x;.  return n
9970: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
9980: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
9990: 62 79 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20  bytes that will 
99a0: 62 65 20 6e 65 65 64 65 64 20 74 6f 20 73 74 6f  be needed to sto
99b0: 72 65 20 74 68 65 20 67 69 76 65 6e 0a 2a 2a 20  re the given.** 
99c0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 0a  64-bit integer..
99d0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  */.int sqlite3Va
99e0: 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 7b 0a  rintLen(u64 v){.
99f0: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 64    int i = 0;.  d
9a00: 6f 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20  o{.    i++;.    
9a10: 76 20 3e 3e 3d 20 37 3b 0a 20 20 7d 77 68 69 6c  v >>= 7;.  }whil
9a20: 65 28 20 76 21 3d 30 20 26 26 20 69 3c 39 20 29  e( v!=0 && i<9 )
9a30: 3b 0a 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a  ;.  return i;.}.
9a40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
9a50: 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c  LITE_OMIT_BLOB_L
9a60: 49 54 45 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e  ITERAL) || defin
9a70: 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
9a80: 44 45 43 29 20 5c 0a 20 20 20 20 7c 7c 20 64 65  DEC) \.    || de
9a90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
9aa0: 54 29 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 6c 61  T)./*.** Transla
9ab0: 74 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  te a single byte
9ac0: 20 6f 66 20 48 65 78 20 69 6e 74 6f 20 61 6e 20   of Hex into an 
9ad0: 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74  integer..*/.stat
9ae0: 69 63 20 69 6e 74 20 68 65 78 54 6f 49 6e 74 28  ic int hexToInt(
9af0: 69 6e 74 20 68 29 7b 0a 20 20 69 66 28 20 68 3e  int h){.  if( h>
9b00: 3d 27 30 27 20 26 26 20 68 3c 3d 27 39 27 20 29  ='0' && h<='9' )
9b10: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d  {.    return h -
9b20: 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66   '0';.  }else if
9b30: 28 20 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d 27  ( h>='a' && h<='
9b40: 66 27 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  f' ){.    return
9b50: 20 68 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20   h - 'a' + 10;. 
9b60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
9b70: 72 74 28 20 68 3e 3d 27 41 27 20 26 26 20 68 3c  rt( h>='A' && h<
9b80: 3d 27 46 27 20 29 3b 0a 20 20 20 20 72 65 74 75  ='F' );.    retu
9b90: 72 6e 20 68 20 2d 20 27 41 27 20 2b 20 31 30 3b  rn h - 'A' + 10;
9ba0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  .  }.}.#endif /*
9bb0: 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c   !SQLITE_OMIT_BL
9bc0: 4f 42 5f 4c 49 54 45 52 41 4c 20 7c 7c 20 53 51  OB_LITERAL || SQ
9bd0: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 7c  LITE_HAS_CODEC |
9be0: 7c 20 53 51 4c 49 54 45 5f 54 45 53 54 20 2a 2f  | SQLITE_TEST */
9bf0: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
9c00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f  QLITE_OMIT_BLOB_
9c10: 4c 49 54 45 52 41 4c 29 20 7c 7c 20 64 65 66 69  LITERAL) || defi
9c20: 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
9c30: 4f 44 45 43 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ODEC)./*.** Conv
9c40: 65 72 74 20 61 20 42 4c 4f 42 20 6c 69 74 65 72  ert a BLOB liter
9c50: 61 6c 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  al of the form "
9c60: 78 27 68 68 68 68 68 68 27 22 20 69 6e 74 6f 20  x'hhhhhh'" into 
9c70: 69 74 73 20 62 69 6e 61 72 79 0a 2a 2a 20 76 61  its binary.** va
9c80: 6c 75 65 2e 20 20 52 65 74 75 72 6e 20 61 20 70  lue.  Return a p
9c90: 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 20 62 69  ointer to its bi
9ca0: 6e 61 72 79 20 76 61 6c 75 65 2e 20 20 53 70 61  nary value.  Spa
9cb0: 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 0a 2a  ce to hold the.*
9cc0: 2a 20 62 69 6e 61 72 79 20 76 61 6c 75 65 20 68  * binary value h
9cd0: 61 73 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64  as been obtained
9ce0: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64   from malloc and
9cf0: 20 6d 75 73 74 20 62 65 20 66 72 65 65 64 20 62   must be freed b
9d00: 79 0a 2a 2a 20 74 68 65 20 63 61 6c 6c 69 6e 67  y.** the calling
9d10: 20 72 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 76 6f 69   routine..*/.voi
9d20: 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
9d30: 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  lob(const char *
9d40: 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f  z){.  char *zBlo
9d50: 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  b;.  int i;.  in
9d60: 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b  t n = strlen(z);
9d70: 0a 20 20 69 66 28 20 6e 25 32 20 29 20 72 65 74  .  if( n%2 ) ret
9d80: 75 72 6e 20 30 3b 0a 0a 20 20 7a 42 6c 6f 62 20  urn 0;..  zBlob 
9d90: 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
9da0: 4d 61 6c 6c 6f 63 28 6e 2f 32 29 3b 0a 20 20 69  Malloc(n/2);.  i
9db0: 66 28 20 7a 42 6c 6f 62 20 29 7b 0a 20 20 20 20  f( zBlob ){.    
9dc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
9dd0: 3d 32 29 7b 0a 20 20 20 20 20 20 7a 42 6c 6f 62  =2){.      zBlob
9de0: 5b 69 2f 32 5d 20 3d 20 28 68 65 78 54 6f 49 6e  [i/2] = (hexToIn
9df0: 74 28 7a 5b 69 5d 29 3c 3c 34 29 20 7c 20 68 65  t(z[i])<<4) | he
9e00: 78 54 6f 49 6e 74 28 7a 5b 69 2b 31 5d 29 3b 0a  xToInt(z[i+1]);.
9e10: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
9e20: 72 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64  rn zBlob;.}.#end
9e30: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
9e40: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20  IT_BLOB_LITERAL 
9e50: 7c 7c 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  || SQLITE_HAS_CO
9e60: 44 45 43 20 2a 2f 0a 0a 23 69 66 20 64 65 66 69  DEC */..#if defi
9e70: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
9e80: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  ./*.** Convert t
9e90: 65 78 74 20 67 65 6e 65 72 61 74 65 64 20 62 79  ext generated by
9ea0: 20 74 68 65 20 22 25 70 22 20 63 6f 6e 76 65 72   the "%p" conver
9eb0: 73 69 6f 6e 20 66 6f 72 6d 61 74 20 62 61 63 6b  sion format back
9ec0: 20 69 6e 74 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74   into.** a point
9ed0: 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  er..*/.void *sql
9ee0: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 63 6f  ite3TextToPtr(co
9ef0: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
9f00: 76 6f 69 64 20 2a 70 3b 0a 20 20 75 36 34 20 76  void *p;.  u64 v
9f10: 3b 0a 20 20 75 33 32 20 76 32 3b 0a 20 20 69 66  ;.  u32 v2;.  if
9f20: 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a  ( z[0]=='0' && z
9f30: 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20  [1]=='x' ){.    
9f40: 7a 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 76 20  z += 2;.  }.  v 
9f50: 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a  = 0;.  while( *z
9f60: 20 29 7b 0a 20 20 20 20 76 20 3d 20 28 76 3c 3c   ){.    v = (v<<
9f70: 34 29 20 2b 20 68 65 78 54 6f 49 6e 74 28 2a 7a  4) + hexToInt(*z
9f80: 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a  );.    z++;.  }.
9f90: 20 20 69 66 28 20 73 69 7a 65 6f 66 28 70 29 3d    if( sizeof(p)=
9fa0: 3d 73 69 7a 65 6f 66 28 76 29 20 29 7b 0a 20 20  =sizeof(v) ){.  
9fb0: 20 20 70 20 3d 20 2a 28 76 6f 69 64 2a 2a 29 26    p = *(void**)&
9fc0: 76 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  v;.  }else{.    
9fd0: 61 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28 70  assert( sizeof(p
9fe0: 29 3d 3d 73 69 7a 65 6f 66 28 76 32 29 20 29 3b  )==sizeof(v2) );
9ff0: 0a 20 20 20 20 76 32 20 3d 20 28 75 33 32 29 76  .    v2 = (u32)v
a000: 3b 0a 20 20 20 20 70 20 3d 20 2a 28 76 6f 69 64  ;.    p = *(void
a010: 2a 2a 29 26 76 32 3b 0a 20 20 7d 0a 20 20 72 65  **)&v2;.  }.  re
a020: 74 75 72 6e 20 70 3b 0a 7d 0a 23 65 6e 64 69 66  turn p;.}.#endif
a030: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
a040: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
a050: 54 68 72 65 61 64 44 61 74 61 20 61 73 73 6f 63  ThreadData assoc
a060: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
a070: 61 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a 2a  alling thread..*
a080: 2f 0a 54 68 72 65 61 64 44 61 74 61 20 2a 73 71  /.ThreadData *sq
a090: 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28  lite3ThreadData(
a0a0: 29 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61 20  ){.  ThreadData 
a0b0: 2a 70 20 3d 20 28 54 68 72 65 61 64 44 61 74 61  *p = (ThreadData
a0c0: 2a 29 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61  *)sqlite3OsThrea
a0d0: 64 53 70 65 63 69 66 69 63 44 61 74 61 28 31 29  dSpecificData(1)
a0e0: 3b 0a 20 20 69 66 28 20 21 70 20 29 7b 0a 20 20  ;.  if( !p ){.  
a0f0: 20 20 73 71 6c 69 74 65 33 46 61 69 6c 65 64 4d    sqlite3FailedM
a100: 61 6c 6c 6f 63 28 29 3b 0a 20 20 7d 0a 20 20 72  alloc();.  }.  r
a110: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
a120: 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  * Return a point
a130: 65 72 20 74 6f 20 74 68 65 20 54 68 72 65 61 64  er to the Thread
a140: 44 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  Data associated 
a150: 77 69 74 68 20 74 68 65 20 63 61 6c 6c 69 6e 67  with the calling
a160: 20 74 68 72 65 61 64 2e 0a 2a 2a 20 49 66 20 6e   thread..** If n
a170: 6f 20 54 68 72 65 61 64 44 61 74 61 20 68 61 73  o ThreadData has
a180: 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
a190: 74 6f 20 74 68 69 73 20 74 68 72 65 61 64 20 79  to this thread y
a1a0: 65 74 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69  et, return a poi
a1b0: 6e 74 65 72 0a 2a 2a 20 74 6f 20 61 20 73 75 62  nter.** to a sub
a1c0: 73 74 69 74 75 74 65 20 54 68 72 65 61 64 44 61  stitute ThreadDa
a1d0: 74 61 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ta structure tha
a1e0: 74 20 69 73 20 61 6c 6c 20 7a 65 72 6f 73 2e 20  t is all zeros. 
a1f0: 0a 2a 2f 0a 63 6f 6e 73 74 20 54 68 72 65 61 64  .*/.const Thread
a200: 44 61 74 61 20 2a 73 71 6c 69 74 65 33 54 68 72  Data *sqlite3Thr
a210: 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28  eadDataReadOnly(
a220: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ){.  static cons
a230: 74 20 54 68 72 65 61 64 44 61 74 61 20 7a 65 72  t ThreadData zer
a240: 6f 44 61 74 61 20 3d 20 7b 30 7d 3b 20 20 2f 2a  oData = {0};  /*
a250: 20 49 6e 69 74 69 61 6c 69 7a 65 72 20 74 6f 20   Initializer to 
a260: 73 69 6c 65 6e 63 65 20 77 61 72 6e 69 6e 67 73  silence warnings
a270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
a2a0: 72 6f 6d 20 62 72 6f 6b 65 6e 20 63 6f 6d 70 69  rom broken compi
a2b0: 6c 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  lers */.  const 
a2c0: 54 68 72 65 61 64 44 61 74 61 20 2a 70 54 64 20  ThreadData *pTd 
a2d0: 3d 20 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61  = sqlite3OsThrea
a2e0: 64 53 70 65 63 69 66 69 63 44 61 74 61 28 30 29  dSpecificData(0)
a2f0: 3b 0a 20 20 72 65 74 75 72 6e 20 70 54 64 20 3f  ;.  return pTd ?
a300: 20 70 54 64 20 3a 20 26 7a 65 72 6f 44 61 74 61   pTd : &zeroData
a310: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  ;.}../*.** Check
a320: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 54   to see if the T
a330: 68 72 65 61 64 44 61 74 61 20 66 6f 72 20 74 68  hreadData for th
a340: 69 73 20 74 68 72 65 61 64 20 69 73 20 61 6c 6c  is thread is all
a350: 20 7a 65 72 6f 2e 20 20 49 66 20 69 74 0a 2a 2a   zero.  If it.**
a360: 20 69 73 2c 20 74 68 65 6e 20 64 65 61 6c 6c 6f   is, then deallo
a370: 63 61 74 65 20 69 74 2e 20 0a 2a 2f 0a 76 6f 69  cate it. .*/.voi
a380: 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
a390: 54 68 72 65 61 64 44 61 74 61 28 29 7b 0a 20 20  ThreadData(){.  
a3a0: 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61 64 53  sqlite3OsThreadS
a3b0: 70 65 63 69 66 69 63 44 61 74 61 28 2d 31 29 3b  pecificData(-1);
a3c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
a3d0: 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  unction must be 
a3e0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 65 78  called before ex
a3f0: 69 74 69 6e 67 20 61 6e 79 20 41 50 49 20 66 75  iting any API fu
a400: 6e 63 74 69 6f 6e 20 28 69 2e 65 2e 20 0a 2a 2a  nction (i.e. .**
a410: 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72   returning contr
a420: 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 29 20  ol to the user) 
a430: 74 68 61 74 20 68 61 73 20 63 61 6c 6c 65 64 20  that has called 
a440: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 20 6f 72  sqlite3Malloc or
a450: 0a 2a 2a 20 73 71 6c 69 74 65 33 52 65 61 6c 6c  .** sqlite3Reall
a460: 6f 63 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  oc..**.** The re
a470: 74 75 72 6e 65 64 20 76 61 6c 75 65 20 69 73 20  turned value is 
a480: 6e 6f 72 6d 61 6c 6c 79 20 61 20 63 6f 70 79 20  normally a copy 
a490: 6f 66 20 74 68 65 20 73 65 63 6f 6e 64 20 61 72  of the second ar
a4a0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 69 73 0a 2a  gument to this.*
a4b0: 2a 20 66 75 6e 63 74 69 6f 6e 2e 20 48 6f 77 65  * function. Howe
a4c0: 76 65 72 2c 20 69 66 20 61 20 6d 61 6c 6c 6f 63  ver, if a malloc
a4d0: 28 29 20 66 61 69 6c 75 72 65 20 68 61 73 20 6f  () failure has o
a4e0: 63 63 75 72 65 64 20 73 69 6e 63 65 20 74 68 65  ccured since the
a4f0: 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 69 6e 76   previous.** inv
a500: 6f 63 61 74 69 6f 6e 20 53 51 4c 49 54 45 5f 4e  ocation SQLITE_N
a510: 4f 4d 45 4d 20 69 73 20 72 65 74 75 72 6e 65 64  OMEM is returned
a520: 20 69 6e 73 74 65 61 64 2e 20 0a 2a 2a 0a 2a 2a   instead. .**.**
a530: 20 49 66 20 74 68 65 20 66 69 72 73 74 20 61 72   If the first ar
a540: 67 75 6d 65 6e 74 2c 20 64 62 2c 20 69 73 20 6e  gument, db, is n
a550: 6f 74 20 4e 55 4c 4c 20 61 6e 64 20 61 20 6d 61  ot NULL and a ma
a560: 6c 6c 6f 63 28 29 20 65 72 72 6f 72 20 68 61 73  lloc() error has
a570: 20 6f 63 63 75 72 65 64 2c 0a 2a 2a 20 74 68 65   occured,.** the
a580: 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
a590: 20 65 72 72 6f 72 2d 63 6f 64 65 20 28 74 68 65   error-code (the
a5a0: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
a5b0: 62 79 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  by sqlite3_errco
a5c0: 64 65 28 29 29 0a 2a 2a 20 69 73 20 73 65 74 20  de()).** is set 
a5d0: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e  to SQLITE_NOMEM.
a5e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6d  .*/.static int m
a5f0: 61 6c 6c 6f 63 48 61 73 46 61 69 6c 65 64 20 3d  allocHasFailed =
a600: 20 30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41   0;.int sqlite3A
a610: 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 2a 20  piExit(sqlite3* 
a620: 64 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69  db, int rc){.  i
a630: 66 28 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  f( sqlite3Malloc
a640: 46 61 69 6c 65 64 28 29 20 29 7b 0a 20 20 20 20  Failed() ){.    
a650: 6d 61 6c 6c 6f 63 48 61 73 46 61 69 6c 65 64 20  mallocHasFailed 
a660: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
a670: 4f 73 4c 65 61 76 65 4d 75 74 65 78 28 29 3b 0a  OsLeaveMutex();.
a680: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
a690: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  (db, SQLITE_NOME
a6a0: 4d 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  M, 0);.    rc = 
a6b0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
a6c0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 20 26 20  }.  return rc & 
a6d0: 28 64 62 20 3f 20 64 62 2d 3e 65 72 72 4d 61 73  (db ? db->errMas
a6e0: 6b 20 3a 20 30 78 66 66 29 3b 0a 7d 0a 0a 2f 2a  k : 0xff);.}../*
a6f0: 20 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65   .** Return true
a700: 20 69 73 20 61 20 6d 61 6c 6c 6f 63 20 68 61 73   is a malloc has
a710: 20 66 61 69 6c 65 64 20 69 6e 20 74 68 69 73 20   failed in this 
a720: 74 68 72 65 61 64 20 73 69 6e 63 65 20 74 68 65  thread since the
a730: 20 6c 61 73 74 20 63 61 6c 6c 0a 2a 2a 20 74 6f   last call.** to
a740: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
a750: 29 2c 20 6f 72 20 66 61 6c 73 65 20 6f 74 68 65  ), or false othe
a760: 72 77 69 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  rwise..*/.int sq
a770: 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65  lite3MallocFaile
a780: 64 28 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 6d  d(){.  return (m
a790: 61 6c 6c 6f 63 48 61 73 46 61 69 6c 65 64 20 26  allocHasFailed &
a7a0: 26 20 73 71 6c 69 74 65 33 4f 73 49 6e 4d 75 74  & sqlite3OsInMut
a7b0: 65 78 28 31 29 29 3b 0a 7d 0a 0a 2f 2a 20 0a 2a  ex(1));.}../* .*
a7c0: 2a 20 53 65 74 20 74 68 65 20 22 6d 61 6c 6c 6f  * Set the "mallo
a7d0: 63 20 68 61 73 20 66 61 69 6c 65 64 22 20 63 6f  c has failed" co
a7e0: 6e 64 69 74 69 6f 6e 20 74 6f 20 74 72 75 65 20  ndition to true 
a7f0: 66 6f 72 20 74 68 69 73 20 74 68 72 65 61 64 2e  for this thread.
a800: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
a810: 46 61 69 6c 65 64 4d 61 6c 6c 6f 63 28 29 7b 0a  FailedMalloc(){.
a820: 20 20 73 71 6c 69 74 65 33 4f 73 45 6e 74 65 72    sqlite3OsEnter
a830: 4d 75 74 65 78 28 29 3b 0a 20 20 61 73 73 65 72  Mutex();.  asser
a840: 74 28 20 6d 61 6c 6c 6f 63 48 61 73 46 61 69 6c  t( mallocHasFail
a850: 65 64 3d 3d 30 20 29 3b 0a 20 20 6d 61 6c 6c 6f  ed==0 );.  mallo
a860: 63 48 61 73 46 61 69 6c 65 64 20 3d 20 31 3b 0a  cHasFailed = 1;.
a870: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
a880: 5f 4d 45 4d 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  _MEMDEBUG./*.** 
a890: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 73 65  This function se
a8a0: 74 73 20 61 20 66 6c 61 67 20 69 6e 20 74 68 65  ts a flag in the
a8b0: 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 69 63   thread-specific
a8c0: 2d 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20  -data structure 
a8d0: 74 68 61 74 20 77 69 6c 6c 0a 2a 2a 20 63 61 75  that will.** cau
a8e0: 73 65 20 61 6e 20 61 73 73 65 72 74 20 74 6f 20  se an assert to 
a8f0: 66 61 69 6c 20 69 66 20 73 71 6c 69 74 65 4d 61  fail if sqliteMa
a900: 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65  lloc() or sqlite
a910: 52 65 61 6c 6c 6f 63 28 29 20 69 73 20 63 61 6c  Realloc() is cal
a920: 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  led..*/.void sql
a930: 69 74 65 33 4d 61 6c 6c 6f 63 44 69 73 61 6c 6c  ite3MallocDisall
a940: 6f 77 28 29 7b 0a 20 20 61 73 73 65 72 74 28 20  ow(){.  assert( 
a950: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69  sqlite3_mallocDi
a960: 73 61 6c 6c 6f 77 65 64 3e 3d 30 20 29 3b 0a 20  sallowed>=0 );. 
a970: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44   sqlite3_mallocD
a980: 69 73 61 6c 6c 6f 77 65 64 2b 2b 3b 0a 7d 0a 0a  isallowed++;.}..
a990: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
a9a0: 69 6f 6e 20 63 6c 65 61 72 73 20 74 68 65 20 66  ion clears the f
a9b0: 6c 61 67 20 73 65 74 20 69 6e 20 74 68 65 20 74  lag set in the t
a9c0: 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 2d 64  hread-specific-d
a9d0: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 73 65  ata structure se
a9e0: 74 0a 2a 2a 20 62 79 20 73 71 6c 69 74 65 33 4d  t.** by sqlite3M
a9f0: 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 28 29 2e  allocDisallow().
aa00: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
aa10: 4d 61 6c 6c 6f 63 41 6c 6c 6f 77 28 29 7b 0a 20  MallocAllow(){. 
aa20: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
aa30: 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 65  _mallocDisallowe
aa40: 64 3e 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  d>0 );.  sqlite3
aa50: 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 65  _mallocDisallowe
aa60: 64 2d 2d 3b 0a 7d 0a 23 65 6e 64 69 66 0a        d--;.}.#endif.