/ Hex Artifact Content
Login

Artifact 12ec54454fc0f1c25f5c7057423ada1a363b6db0:


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 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
18f0: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
1900: 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65  P,S,E) macro che
1910: 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f  cks to see if po
1920: 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74  inter P points t
1930: 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62  o.** something b
1940: 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73  etween S (inclus
1950: 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c  ive) and E (excl
1960: 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e  usive)..**.** In
1970: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20   other words, S 
1980: 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20  is a buffer and 
1990: 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  E is a pointer t
19a0: 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
19b0: 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e   after.** the en
19c0: 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20  d of buffer S.  
19d0: 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72  This macro retur
19e0: 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69  ns true if P poi
19f0: 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  nts to something
1a00: 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  .** contained wi
1a10: 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20  thin the buffer 
1a20: 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  S..*/.#if define
1a30: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
1a40: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1a50: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 5c  _WITHIN(P,S,E) \
1a60: 0a 20 20 20 20 28 28 75 69 6e 74 70 74 72 5f 74  .    ((uintptr_t
1a70: 29 28 50 29 3e 3d 28 75 69 6e 74 70 74 72 5f 74  )(P)>=(uintptr_t
1a80: 29 28 53 29 20 26 26 20 28 75 69 6e 74 70 74 72  )(S) && (uintptr
1a90: 5f 74 29 28 50 29 3c 28 75 69 6e 74 70 74 72 5f  _t)(P)<(uintptr_
1aa0: 74 29 28 45 29 29 0a 23 65 6c 73 65 0a 23 20 64  t)(E)).#else.# d
1ab0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54  efine SQLITE_WIT
1ac0: 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 50 29 3e  HIN(P,S,E) ((P)>
1ad0: 3d 28 53 29 20 26 26 20 28 50 29 3c 28 45 29 29  =(S) && (P)<(E))
1ae0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1af0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
1b00: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
1b10: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
1b20: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
1b30: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1b40: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1b50: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1b60: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1b70: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1b80: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1b90: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1ba0: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30  & _MSC_VER>=1310
1bb0: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1bc0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65  E_NOINLINE  __de
1bd0: 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29  clspec(noinline)
1be0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
1bf0: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
1c10: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
1c20: 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69  e compiler intri
1c30: 6e 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20  nsics we desire 
1c40: 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e  are enabled when
1c50: 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69  .** compiling wi
1c60: 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  th an appropriat
1c70: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56  e version of MSV
1c80: 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74  C unless prevent
1c90: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c  ed by.** the SQL
1ca0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1cb0: 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f  INSIC define..*/
1cc0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1cd0: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54  LITE_DISABLE_INT
1ce0: 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65  RINSIC).#  if de
1cf0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
1d00: 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30  && _MSC_VER>=130
1d10: 30 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e  0.#    if !defin
1d20: 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23  ed(_WIN32_WCE).#
1d30: 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69        include <i
1d40: 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20  ntrin.h>.#      
1d50: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
1d60: 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72  (_byteswap_ushor
1d70: 74 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  t).#      pragma
1d80: 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65   intrinsic(_byte
1d90: 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20  swap_ulong).#   
1da0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1db0: 73 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61  sic(_ReadWriteBa
1dc0: 72 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65  rrier).#    else
1dd0: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
1de0: 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20  <cmnintrin.h>.# 
1df0: 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69     endif.#  endi
1e00: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1e10: 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  The SQLITE_THREA
1e20: 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74  DSAFE macro must
1e30: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30   be defined as 0
1e40: 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20  , 1, or 2..** 0 
1e50: 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72  means mutexes ar
1e60: 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69  e permanently di
1e70: 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69  sable and the li
1e80: 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a  brary is never.*
1e90: 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31  * threadsafe.  1
1ea0: 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61   means the libra
1eb0: 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64  ry is serialized
1ec0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69   which is the hi
1ed0: 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f  ghest.** level o
1ee0: 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20  f threadsafety. 
1ef0: 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62   2 means the lib
1f00: 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72  rary is multithr
1f10: 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65  eaded - multiple
1f20: 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20  .** threads can 
1f30: 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f  use SQLite as lo
1f40: 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72  ng as no two thr
1f50: 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20  eads try to use 
1f60: 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61  the same.** data
1f70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
1f80: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1f90: 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65  ..**.** Older ve
1fa0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
1fb0: 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61   used an optiona
1fc0: 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  l THREADSAFE mac
1fd0: 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72  ro..** We suppor
1fe0: 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63  t that for legac
1ff0: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
2000: 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ed(SQLITE_THREAD
2010: 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e  SAFE).# if defin
2020: 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23  ed(THREADSAFE).#
2030: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
2040: 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45  _THREADSAFE THRE
2050: 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20  ADSAFE.# else.# 
2060: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2070: 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20  THREADSAFE 1 /* 
2080: 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33  IMP: R-07272-223
2090: 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65  09 */.# endif.#e
20a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65  ndif../*.** Powe
20b0: 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20  rsafe overwrite 
20c0: 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  is on by default
20d0: 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75  .  But can be tu
20e0: 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a  rned off using.*
20f0: 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50  * the -DSQLITE_P
2100: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
2110: 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  TE=0 command-lin
2120: 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  e option..*/.#if
2130: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45  ndef SQLITE_POWE
2140: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a  RSAFE_OVERWRITE.
2150: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2160: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
2170: 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ITE 1.#endif../*
2180: 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  .** EVIDENCE-OF:
2190: 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d   R-25715-37072 M
21a0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
21b0: 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20   statistics are 
21c0: 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65  enabled by.** de
21d0: 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c  fault unless SQL
21e0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
21f0: 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41  with SQLITE_DEFA
2200: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20  ULT_MEMSTATUS=0 
2210: 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65  in.** which case
2220: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2230: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72  on statistics ar
2240: 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65  e disabled by de
2250: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64  fault..*/.#if !d
2260: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2270: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
2280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2290: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
22a0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
22b0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
22c0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
22d0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
22e0: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
22f0: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
2300: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
2310: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
2320: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
2330: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
2340: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2350: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
2360: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
2370: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
2380: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
2390: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
23a0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
23b0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
23c0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
23d0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
23e0: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
23f0: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
2400: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
2410: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
2420: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
2430: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
2440: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
2450: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
2460: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
2470: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
2480: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
2490: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
24a0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
24b0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
24c0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
24d0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
24e0: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
24f0: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
2500: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
2510: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
2520: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
2530: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
2540: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
2550: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f  red..**.** If no
2560: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
2570: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
2580: 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53  n set SQLITE_SYS
2590: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a  TEM_MALLOC as.**
25a0: 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f   the default..*/
25b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25c0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
25d0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
25e0: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
25f0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2600: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2610: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2620: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2630: 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72  DEBUG)>1.# error
2640: 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66   "Two or more of
2650: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
2660: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
2670: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
2680: 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20  s\. are defined 
2690: 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20  but at most one 
26a0: 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51  is allowed:\. SQ
26b0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
26c0: 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  OC, SQLITE_WIN32
26d0: 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f  _MALLOC, SQLITE_
26e0: 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49  MEMDEBUG,\. SQLI
26f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a  TE_ZERO_MALLOC".
2700: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2710: 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ed(SQLITE_SYSTEM
2720: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2730: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49  efined(SQLITE_WI
2740: 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  N32_MALLOC) \.  
2750: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2760: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  _ZERO_MALLOC) \.
2770: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a  TE_MEMDEBUG)==0.
2790: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27a0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a  SYSTEM_MALLOC 1.
27b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
27c0: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
27d0: 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74  OFT_LIMIT is not
27e0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20   zero, then try 
27f0: 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73  to keep the.** s
2800: 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61  izes of memory a
2810: 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77  llocations below
2820: 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72   this value wher
2830: 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23  e possible..*/.#
2840: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2850: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
2860: 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53  IMIT).# define S
2870: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2880: 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e  T_LIMIT 1024.#en
2890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65  dif../*.** We ne
28a0: 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f  ed to define _XO
28b0: 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f  PEN_SOURCE as fo
28c0: 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74  llows in order t
28d0: 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75  o enable.** recu
28e0: 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e  rsive mutexes on
28f0: 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65   most Unix syste
2900: 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20  ms and fchmod() 
2910: 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42  on OpenBSD..** B
2920: 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ut _XOPEN_SOURCE
2930: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
2940: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
2950: 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a  OS X, so omit.**
2960: 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   it..*/.#if !def
2970: 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52  ined(_XOPEN_SOUR
2980: 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
2990: 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21  __DARWIN__) && !
29a0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
29b0: 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f  _).#  define _XO
29c0: 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23  PEN_SOURCE 600.#
29d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45  endif../*.** NDE
29e0: 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44  BUG and SQLITE_D
29f0: 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74  EBUG are opposit
2a00: 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61  es.  It should a
2a10: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68  lways be true th
2a20: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44  at.** defined(ND
2a30: 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28  EBUG)==!defined(
2a40: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20  SQLITE_DEBUG).  
2a50: 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63  If this is not c
2a60: 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a  urrently true,.*
2a70: 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62  * make it true b
2a80: 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e  y defining or un
2a90: 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e  defining NDEBUG.
2aa0: 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e  .**.** Setting N
2ab0: 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20  DEBUG makes the 
2ac0: 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64  code smaller and
2ad0: 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62   faster by disab
2ae0: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65  ling the.** asse
2af0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
2b00: 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f  in the code.  So
2b10: 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66   we want the def
2b20: 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74  ault action.** t
2b30: 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20  o be for NDEBUG 
2b40: 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44  to be set and ND
2b50: 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66  EBUG to be undef
2b60: 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c  ined only if SQL
2b70: 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20  ITE_DEBUG.** is 
2b80: 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55  set.  Thus NDEBU
2b90: 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74  G becomes an opt
2ba0: 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20  -in rather than 
2bb0: 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65  an opt-out.** fe
2bc0: 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  ature..*/.#if !d
2bd0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
2be0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2bf0: 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69  E_DEBUG) .# defi
2c00: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
2c10: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
2c20: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
2c30: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
2c40: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
2c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
2c60: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
2c70: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2c80: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
2c90: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
2ca0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2cb0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
2cc0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
2cd0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2ce0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
2cf0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
2d00: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d10: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
2d20: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
2d30: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2d40: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
2d50: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
2d60: 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72   .** doing cover
2d70: 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65  age testing, the
2d80: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64   condition insid
2d90: 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  e the argument t
2da0: 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20  o.** testcase() 
2db0: 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65  must be evaluate
2dc0: 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20  d both true and 
2dd0: 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74  false in order t
2de0: 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72  o.** get full br
2df0: 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20  anch coverage.  
2e00: 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d  The testcase() m
2e10: 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64  acro is inserted
2e20: 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75  .** to help ensu
2e30: 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74  re adequate test
2e40: 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61   coverage in pla
2e50: 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65  ces where simple
2e60: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65  .** condition/de
2e70: 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20  cision coverage 
2e80: 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20  is inadequate.  
2e90: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73  For example, tes
2ea0: 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62  tcase().** can b
2eb0: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
2ec0: 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c  ure boundary val
2ed0: 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20  ues are tested. 
2ee0: 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20   For.** bitmask 
2ef0: 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28  tests, testcase(
2f00: 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ) can be used to
2f10: 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20   make sure each 
2f20: 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66  bit.** is signif
2f30: 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61  icant and used a
2f40: 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f  t least once.  O
2f50: 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  n switch stateme
2f60: 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c  nts.** where mul
2f70: 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74  tiple cases go t
2f80: 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b  o the same block
2f90: 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61   of code, testca
2fa0: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75  se().** can insu
2fb0: 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65  re that all case
2fc0: 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e  s are evaluated.
2fd0: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
2fe0: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2ff0: 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
3000: 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a  3Coverage(int);.
3010: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
3020: 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73  e(X)  if( X ){ s
3030: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f  qlite3Coverage(_
3040: 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73  _LINE__); }.#els
3050: 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  e.# define testc
3060: 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ase(X).#endif../
3070: 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c  *.** The TESTONL
3080: 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  Y macro is used 
3090: 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61  to enclose varia
30a0: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
30b0: 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74   or.** other bit
30c0: 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61  s of code that a
30d0: 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70  re needed to sup
30e0: 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e  port the argumen
30f0: 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73  ts.** within tes
3100: 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65  tcase() and asse
3110: 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a  rt() macros..*/.
3120: 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  #if !defined(NDE
3130: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
3140: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3150: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54  TEST).# define T
3160: 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  ESTONLY(X)  X.#e
3170: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53  lse.# define TES
3180: 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  TONLY(X).#endif.
3190: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73  ./*.** Sometimes
31a0: 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c   we need a small
31b0: 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20   amount of code 
31c0: 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62  such as a variab
31d0: 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
31e0: 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f  n.** to setup fo
31f0: 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74  r a later assert
3200: 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57  () statement.  W
3210: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68  e do not want th
3220: 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70  is code to.** ap
3230: 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74  pear when assert
3240: 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20  () is disabled. 
3250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
3260: 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72  acro is therefor
3270: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e  e.** used to con
3280: 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20  tain that setup 
3290: 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22  code.  The "VVA"
32a0: 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20   acronym stands 
32b0: 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61  for.** "Verifica
32c0: 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
32d0: 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  , and Accreditat
32e0: 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20  ion".  In other 
32f0: 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f  words, the.** co
3300: 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e  de within VVA_ON
3310: 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72  LY() will only r
3320: 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69  un during verifi
3330: 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73  cation processes
3340: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45  ..*/.#ifndef NDE
3350: 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41  BUG.# define VVA
3360: 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  _ONLY(X)  X.#els
3370: 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  e.# define VVA_O
3380: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
3390: 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20  *.** The ALWAYS 
33a0: 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73  and NEVER macros
33b0: 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61   surround boolea
33c0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68  n expressions wh
33d0: 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65  ich .** are inte
33e0: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
33f0: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
3400: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
3410: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
3420: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
3430: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
3440: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
3450: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3460: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3470: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3480: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3490: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
34a0: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
34b0: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
34c0: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
34d0: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
34e0: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
34f0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
3500: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
3510: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
3520: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
3530: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
3540: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
3550: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3560: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3570: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3580: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3590: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
35a0: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
35b0: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
35c0: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
35d0: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
35e0: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
35f0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
3600: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
3610: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
3620: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
3630: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
3640: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3650: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3660: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3670: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3680: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3690: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
36a0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
36b0: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
36c0: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
36d0: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
36e0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
36f0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
3700: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
3710: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
3720: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
3730: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3740: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
3750: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
3760: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
3770: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
3780: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3790: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
37a0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
37b0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
37c0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
37d0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
37e0: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
37f0: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
3800: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
3810: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
3820: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
3830: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
3840: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
3850: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
3860: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
3870: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
3880: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
3890: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
38a0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
38b0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
38c0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
38d0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
38e0: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
38f0: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3900: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3910: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
3920: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
3930: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3940: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3950: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3960: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3970: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3980: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3990: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
39a0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
39b0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
39c0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
39d0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
39e0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
39f0: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
3a00: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3a10: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3a20: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3a30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3a40: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3a50: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3a60: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3a70: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3a80: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3a90: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3aa0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3ab0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3ac0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3ad0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3ae0: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
3af0: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
3b00: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
3b10: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
3b20: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
3b30: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
3b40: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3b50: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3b60: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3b70: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3b80: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3b90: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3ba0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3bb0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3bc0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3bd0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3be0: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
3bf0: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
3c00: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3c10: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3c20: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
3c30: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
3c40: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3c50: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3c60: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3c70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3c80: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3c90: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3ca0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3cb0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3cc0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3cd0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3ce0: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3cf0: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
3d00: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
3d10: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
3d20: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
3d30: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
3d40: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
3d50: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3d60: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3d70: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3d80: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3d90: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3da0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3db0: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3dc0: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3dd0: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3de0: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3df0: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
3e00: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
3e10: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
3e20: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
3e30: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
3e40: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
3e50: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3e60: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3e70: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3e80: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3e90: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3ea0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3eb0: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3ec0: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3ed0: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3ee0: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3ef0: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
3f00: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
3f10: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
3f20: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
3f30: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
3f40: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
3f50: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
3f60: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
3f70: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
3f80: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
3f90: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
3fa0: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
3fb0: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
3fc0: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
3fd0: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
3fe0: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
3ff0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
4000: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
4010: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
4020: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
4030: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4040: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4050: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4060: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4070: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4080: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4090: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
40a0: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
40b0: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
40c0: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
40d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
40e0: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
40f0: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
4100: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4110: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
4120: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
4130: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
4140: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
4150: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4160: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4170: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4180: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4190: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
41a0: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
41b0: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
41c0: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
41d0: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
41e0: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
41f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
4200: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
4210: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
4220: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
4230: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
4240: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
4250: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
4260: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
4270: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
4280: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
4290: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
42a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
42b0: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
42c0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
42d0: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
42e0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
42f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
4300: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
4310: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
4320: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
4330: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
4340: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
4350: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
4360: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
4370: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
4380: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
4390: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
43a0: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
43b0: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
43c0: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
43d0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
43e0: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
43f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4400: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
4410: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
4420: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
4430: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
4440: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
4450: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
4460: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
4470: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
4480: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
4490: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
44a0: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
44b0: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
44c0: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
44d0: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
44e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
44f0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
4500: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4510: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
4520: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
4530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
4540: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
4550: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
4560: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
4570: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
4580: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
4590: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
45a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
45b0: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
45c0: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
45d0: 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53  ORE 1.# define S
45e0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
45f0: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
4600: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
4610: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
4620: 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20  If no value has 
4630: 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f  been provided fo
4640: 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  r SQLITE_MAX_WOR
4650: 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20  KER_THREADS, or 
4660: 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d  if.** SQLITE_TEM
4670: 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74  P_STORE is set t
4680: 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74  o 3 (never use t
4690: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c  emporary files),
46a0: 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a   set it .** to z
46b0: 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ero..*/.#if SQLI
46c0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33  TE_TEMP_STORE==3
46d0: 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41   || SQLITE_THREA
46e0: 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66  DSAFE==0.# undef
46f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
4700: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
4710: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
4720: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
4730: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4740: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
4750: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4760: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
4770: 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65  KER_THREADS 8.#e
4780: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
4790: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
47a0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
47b0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
47c0: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
47d0: 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  S 0.#endif.#if S
47e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
47f0: 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c  RKER_THREADS>SQL
4800: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4810: 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53  HREADS.# undef S
4820: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
4830: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4840: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
4850: 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49  KER_THREADS SQLI
4860: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
4870: 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66  R_THREADS.#endif
4880: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
4890: 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f  ult initial allo
48a0: 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70  cation for the p
48b0: 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75 73  agecache when us
48c0: 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20  ing separate.** 
48d0: 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20 65  pagecaches for e
48e0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
48f0: 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69  nection.  A posi
4900: 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74  tive number is t
4910: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
4920: 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69  pages.  A negati
4930: 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e  ve number N tran
4940: 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74  slations means t
4950: 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20  hat a buffer.** 
4960: 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73  of -1024*N bytes
4970: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e   is allocated an
4980: 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61  d used for as ma
4990: 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20 77  ny pages as it w
49a0: 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66  ill hold..*/.#if
49b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
49c0: 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53  ULT_PCACHE_INITS
49d0: 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  Z.# define SQLIT
49e0: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
49f0: 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64  _INITSZ 100.#end
4a00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
4a10: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
4a20: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
4a30: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
4a40: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
4a50: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
4a60: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
4a70: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
4a80: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
4a90: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
4aa0: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
4ab0: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
4ac0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
4ad0: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
4ae0: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
4af0: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
4b00: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
4b10: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
4b20: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
4b30: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
4b40: 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74  ))../*.** Swap t
4b50: 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79  wo objects of ty
4b60: 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66  pe TYPE..*/.#def
4b70: 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c  ine SWAP(TYPE,A,
4b80: 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d  B) {TYPE t=A; A=
4b90: 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  B; B=t;}../*.** 
4ba0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4bb0: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65  this machine use
4bc0: 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c  s EBCDIC.  (Yes,
4bd0: 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a   believe it or.*
4be0: 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65  * not, there are
4bf0: 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20   still machines 
4c00: 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75  out there that u
4c10: 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23  se EBCDIC.).*/.#
4c20: 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27  if 'A' == '\301'
4c30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4c40: 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a  _EBCDIC 1.#else.
4c50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4c60: 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a  ASCII 1.#endif..
4c70: 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f  /*.** Integers o
4c80: 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20  f known sizes.  
4c90: 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d  These typedefs m
4ca0: 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20  ight change for 
4cb0: 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a  architectures.**
4cc0: 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73   where the sizes
4cd0: 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65   very.  Preproce
4ce0: 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20  ssor macros are 
4cf0: 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61  available so tha
4d00: 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63  t the.** types c
4d10: 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74  an be convenient
4d20: 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20  ly redefined at 
4d30: 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c  compile-type.  L
4d40: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
4d50: 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49          cc '-DUI
4d60: 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20  NTPTR_TYPE=long 
4d70: 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f  long int' ....*/
4d80: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f  .#ifndef UINT32_
4d90: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4da0: 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65  E_UINT32_T.#  de
4db0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
4dc0: 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65   uint32_t.# else
4dd0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
4de0: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
4df0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4e00: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31  if.#ifndef UINT1
4e10: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
4e20: 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20  AVE_UINT16_T.#  
4e30: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
4e40: 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c  PE uint16_t.# el
4e50: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4e60: 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T16_TYPE unsigne
4e70: 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  d short int.# en
4e80: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4e90: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  ef INT16_TYPE.# 
4ea0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36  ifdef HAVE_INT16
4eb0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
4ec0: 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a  16_TYPE int16_t.
4ed0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4ee0: 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72   INT16_TYPE shor
4ef0: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
4f00: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4f10: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
4f20: 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20  HAVE_UINT8_T.#  
4f30: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
4f40: 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  E uint8_t.# else
4f50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4f60: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63  _TYPE unsigned c
4f70: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
4f80: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f  if.#ifndef INT8_
4f90: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4fa0: 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  E_INT8_T.#  defi
4fb0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74  ne INT8_TYPE int
4fc0: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
4fd0: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
4fe0: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4ff0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
5000: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
5010: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
5020: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
5030: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
5040: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
5050: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
5060: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
5070: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5080: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
5090: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
50a0: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
50b0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
50c0: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
50d0: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
50e0: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
50f0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5100: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
5110: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
5120: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
5130: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5140: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
5150: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
5160: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
5170: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5180: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
5190: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
51a0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
51b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
51c0: 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50  typedef INT8_TYP
51d0: 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20  E i8;           
51e0: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
51f0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
5200: 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58  /*.** SQLITE_MAX
5210: 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f  _U32 is a u64 co
5220: 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74  nstant that is t
5230: 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76  he maximum u64 v
5240: 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e  alue.** that can
5250: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
5260: 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  u32 without loss
5270: 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76   of data.  The v
5280: 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30  alue.** is 0x000
5290: 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20  00000ffffffff.  
52a0: 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71  But because of q
52b0: 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f  uirks of some co
52c0: 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68  mpilers, we.** h
52d0: 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74  ave to specify t
52e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  he value in the 
52f0: 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d  less intuitive m
5300: 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a  anner shown:.*/.
5310: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
5320: 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29  AX_U32  ((((u64)
5330: 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a  1)<<32)-1)../*.*
5340: 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75  * The datatype u
5350: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74  sed to store est
5360: 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75  imates of the nu
5370: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
5380: 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  a.** table or in
5390: 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e  dex.  This is an
53a0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
53b0: 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e  r type.  For 99.
53c0: 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72  9% of.** the wor
53d0: 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74  ld, a 32-bit int
53e0: 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65  eger is sufficie
53f0: 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69  nt.  But a 64-bi
5400: 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e  t integer.** can
5410: 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70   be used at comp
5420: 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69  ile-time if desi
5430: 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  red..*/.#ifdef S
5440: 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54  QLITE_64BIT_STAT
5450: 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74  S. typedef u64 t
5460: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34  Rowcnt;    /* 64
5470: 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71  -bit only if req
5480: 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c  uested at compil
5490: 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a  e-time */.#else.
54a0: 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f   typedef u32 tRo
54b0: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62  wcnt;    /* 32-b
54c0: 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  it is the defaul
54d0: 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  t */.#endif../*.
54e0: 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61  ** Estimated qua
54f0: 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72  ntities used for
5500: 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20   query planning 
5510: 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36  are stored as 16
5520: 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68  -bit.** logarith
5530: 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74  ms.  For quantit
5540: 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73  y X, the value s
5550: 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32  tored is 10*log2
5560: 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69  (X).  This.** gi
5570: 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72  ves a possible r
5580: 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f  ange of values o
5590: 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  f approximately 
55a0: 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38  1.0e986 to 1e-98
55b0: 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c  6..** But the al
55c0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65  lowed values are
55d0: 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20   "grainy".  Not 
55e0: 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72  every value is r
55f0: 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a  epresentable..**
5600: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75   For example, qu
5610: 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20  antities 16 and 
5620: 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72  17 are both repr
5630: 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67  esented by a Log
5640: 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48  Est.** of 40.  H
5650: 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f  owever, since Lo
5660: 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73 20  gEst quantities 
5670: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
5680: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
5690: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
56a0: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
56b0: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
56c0: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
56d0: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
56e0: 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73   "Logarithmic Es
56f0: 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45  timate"..**.** E
5700: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20  xamples:.**     
5710: 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20   1 -> 0         
5720: 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20       20 -> 43   
5730: 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20         10000 -> 
5740: 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e  132.**      2 ->
5750: 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20   10             
5760: 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20  25 -> 46        
5770: 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a    25000 -> 146.*
5780: 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20  *      3 -> 16  
5790: 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e            100 ->
57a0: 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30   66        10000
57b0: 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20  00 -> 199.**    
57c0: 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20    4 -> 20       
57d0: 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20      1000 -> 99  
57e0: 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e        1048576 ->
57f0: 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d   200.**     10 -
5800: 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31  > 33           1
5810: 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32  024 -> 100    42
5820: 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a  94967296 -> 320.
5830: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74  **.** The LogEst
5840: 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65   can be negative
5850: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61   to indicate fra
5860: 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20  ctional values. 
5870: 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a  .** Examples:.**
5880: 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31  .**    0.5 -> -1
5890: 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20  0           0.1 
58a0: 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e  -> -33        0.
58b0: 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74  0625 -> -40.*/.t
58c0: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
58d0: 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a  E LogEst;../*.**
58e0: 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f   Set the SQLITE_
58f0: 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f  PTRSIZE macro to
5900: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
5910: 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65  ytes in a pointe
5920: 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
5930: 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66  ITE_PTRSIZE.# if
5940: 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f   defined(__SIZEO
5950: 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20  F_POINTER__).#  
5960: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
5970: 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f  TRSIZE __SIZEOF_
5980: 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66  POINTER__.# elif
5990: 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20   defined(i386)  
59a0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
59b0: 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66  i386__)   || def
59c0: 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c  ined(_M_IX86) ||
59d0: 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66      \.       def
59e0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c  ined(_M_ARM)   |
59f0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f  | defined(__arm_
5a00: 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  _)    || defined
5a10: 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69  (__x86).#   defi
5a20: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
5a30: 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  E 4.# else.#   d
5a40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
5a50: 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23  SIZE 8.# endif.#
5a60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
5a70: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
5a80: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
5a90: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
5aa0: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
5ab0: 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
5ac0: 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69  not that determi
5ad0: 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69  nation is run-ti
5ae0: 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69  me or compile-ti
5af0: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65  me..**.** For be
5b00: 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  st performance, 
5b10: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
5b20: 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74  de to guess at t
5b30: 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a  he byte-order.**
5b40: 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63   using C-preproc
5b50: 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49  essor macros.  I
5b60: 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63  f that is unsucc
5b70: 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a  essful, or if.**
5b80: 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d   -DSQLITE_RUNTIM
5b90: 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73  E_BYTEORDER=1 is
5ba0: 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d   set, then byte-
5bb0: 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69  order is determi
5bc0: 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69  ned.** at run-ti
5bd0: 6d 65 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69  me..*/.#if (defi
5be0: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
5bf0: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
5c00: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
5c10: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
5c20: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
5c30: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
5c40: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
5c50: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
5c60: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
5c70: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
5c80: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
5c90: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
5ca0: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
5cb0: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
5cc0: 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21  d(__arm__)) && !
5cd0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
5ce0: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
5cf0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5d00: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31  E_BYTEORDER    1
5d10: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
5d20: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
5d30: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
5d40: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
5d50: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5d60: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
5d70: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
5d80: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
5d90: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
5da0: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29  efined(__ppc__))
5db0: 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69    \.    && !defi
5dc0: 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49  ned(SQLITE_RUNTI
5dd0: 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  ME_BYTEORDER).# 
5de0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
5df0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
5e00: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5e10: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23  BIGENDIAN    1.#
5e20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
5e30: 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20  ITTLEENDIAN 0.# 
5e40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5e50: 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54  F16NATIVE  SQLIT
5e60: 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66  E_UTF16BE.#endif
5e70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
5e80: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  LITE_BYTEORDER).
5e90: 23 20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  # ifdef SQLITE_A
5ea0: 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f  MALGAMATION.  co
5eb0: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
5ec0: 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20  ne = 1;.# else. 
5ed0: 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e   extern const in
5ee0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20  t sqlite3one;.# 
5ef0: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
5f00: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5f10: 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65     0     /* 0 me
5f20: 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20  ans "unknown at 
5f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f  compile-time" */
5f40: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5f50: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
5f60: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
5f70: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
5f80: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5f90: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
5fa0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5fb0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
5fc0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5fd0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
5fe0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
5ff0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
6000: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
6010: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
6020: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
6030: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
6040: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
6050: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
6060: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
6070: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
6080: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
6090: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
60a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
60b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
60c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
60d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
60e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
60f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
6100: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
6110: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
6120: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
6130: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
6140: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
6150: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
6160: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
6170: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
6180: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
6190: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
61a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
61b0: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
61c0: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
61d0: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
61e0: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
61f0: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
6200: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
6210: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
6220: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
6230: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
6240: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
6250: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
6260: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
6270: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
6280: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
6290: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
62a0: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
62b0: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
62c0: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
62d0: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
62e0: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
62f0: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
6300: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
6310: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
6320: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  c() implementati
6330: 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20  on might return 
6340: 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  us 4-byte aligne
6350: 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20  d.** pointers.  
6360: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e  In that case, on
6370: 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65  ly verify 4-byte
6380: 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23   alignment..*/.#
6390: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42  ifdef SQLITE_4_B
63a0: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
63b0: 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  OC.# define EIGH
63c0: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
63d0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
63e0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
63f0: 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  3)==0).#else.# d
6400: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
6410: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
6420: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
6430: 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29  (char*)0)&7)==0)
6440: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
6450: 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70  isable MMAP on p
6460: 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69  latforms where i
6470: 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f  t is known to no
6480: 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65  t work.*/.#if de
6490: 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f  fined(__OpenBSD_
64a0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  _) || defined(__
64b0: 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65  QNXNTO__).# unde
64c0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
64d0: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
64e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
64f0: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SIZE 0.#endif../
6500: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78  *.** Default max
6510: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d  imum size of mem
6520: 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f  ory used by memo
6530: 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e  ry-mapped I/O in
6540: 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64   the VFS.*/.#ifd
6550: 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69  ef __APPLE__.# i
6560: 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f  nclude <TargetCo
6570: 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65  nditionals.h>.#e
6580: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
6590: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
65a0: 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f  E.# if defined(_
65b0: 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c  _linux__) \.  ||
65c0: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
65d0: 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64   \.  || (defined
65e0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64  (__APPLE__) && d
65f0: 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29  efined(__MACH__)
6600: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6610: 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64  (__sun) \.  || d
6620: 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44  efined(__FreeBSD
6630: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
6640: 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f  ed(__DragonFly__
6650: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
6660: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6670: 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a  E 0x7fff0000  /*
6680: 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23   2147418112 */.#
6690: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
66a0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
66b0: 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a  _SIZE 0.# endif.
66c0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
66d0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  MAX_MMAP_SIZE_xc
66e0: 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72   1 /* exclude fr
66f0: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
6700: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
6710: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
6720: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
6730: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
6740: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
6750: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
6760: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
6770: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
6780: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
6790: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
67a0: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
67b0: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
67c0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
67d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
67e0: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
67f0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
6800: 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e  P_SIZE 0.# defin
6810: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
6820: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
6830: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
6840: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
6850: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
6860: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
6870: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6880: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
6890: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
68a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
68b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
68c0: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
68d0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
68e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
68f0: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
6900: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
6910: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6920: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
6930: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
6940: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
6950: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
6960: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
6970: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
6980: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
6990: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
69a0: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
69b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
69c0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
69d0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
69e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
69f0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6a00: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
6a10: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
6a20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
6a30: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
6a40: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
6a50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6a60: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
6a70: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6a80: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
6a90: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
6aa0: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6ab0: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
6ac0: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
6ad0: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
6ae0: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
6af0: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
6b00: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
6b10: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
6b20: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
6b30: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
6b40: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
6b50: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
6b60: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
6b70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
6b80: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
6b90: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
6ba0: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
6bb0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6bc0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6bd0: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
6be0: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
6bf0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
6c00: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
6c10: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
6c20: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
6c30: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
6c40: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
6c50: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
6c60: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
6c70: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
6c80: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
6c90: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
6ca0: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
6cb0: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
6cc0: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
6cd0: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
6ce0: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
6cf0: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
6d00: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
6d10: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
6d20: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
6d30: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
6d40: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
6d50: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
6d60: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
6d70: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
6d80: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
6d90: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
6da0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
6db0: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
6dc0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
6dd0: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
6de0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
6df0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
6e00: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
6e10: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
6e20: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
6e30: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
6e40: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
6e50: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
6e60: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
6e70: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
6e80: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
6e90: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
6ea0: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
6eb0: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
6ec0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
6ed0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6ee0: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
6ef0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
6f00: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
6f10: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
6f20: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
6f30: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
6f40: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
6f50: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
6f60: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6f70: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
6f80: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
6f90: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
6fa0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
6fb0: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
6fc0: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
6fd0: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
6fe0: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
6ff0: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
7000: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
7010: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
7020: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
7030: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
7040: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
7050: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
7060: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
7070: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
7080: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
7090: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
70a0: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
70b0: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
70c0: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
70d0: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
70e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
70f0: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
7100: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
7110: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
7120: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
7130: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
7140: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
7150: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
7160: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
7170: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
7180: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
7190: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
71a0: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
71b0: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
71c0: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
71d0: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
71e0: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
71f0: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
7200: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
7210: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
7220: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
7230: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
7240: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
7250: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
7260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
7270: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
7280: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
7290: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
72a0: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
72b0: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
72c0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
72d0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
72e0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
72f0: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
7300: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
7310: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
7320: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
7330: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
7340: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
7350: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
7360: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
7370: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
7380: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
7390: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
73a0: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
73b0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
73c0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
73d0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
73e0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
73f0: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
7400: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
7410: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
7420: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
7430: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
7440: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
7450: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
7460: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
7470: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
7480: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
7490: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
74a0: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
74b0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
74c0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
74d0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
74e0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
74f0: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
7500: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
7510: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
7520: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
7530: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
7540: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
7550: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
7560: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
7570: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
7580: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
7590: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
75a0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
75b0: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
75c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
75d0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
75e0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
75f0: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
7600: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
7610: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
7620: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
7630: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
7640: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
7650: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
7660: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
7670: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
7680: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
7690: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
76a0: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
76b0: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
76c0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
76d0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
76e0: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
76f0: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
7700: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
7710: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
7720: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
7730: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
7740: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
7750: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
7760: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
7770: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
7780: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
7790: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
77a0: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
77b0: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
77c0: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
77d0: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
77e0: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
77f0: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
7800: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
7810: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
7820: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
7830: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
7840: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
7850: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
7860: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
7870: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
7880: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
7890: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
78a0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
78b0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
78c0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
78d0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
78e0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
78f0: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
7900: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
7910: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
7920: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7930: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
7940: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
7950: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
7960: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
7970: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
7980: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
7990: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
79a0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
79b0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
79c0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
79d0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
79e0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
79f0: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
7a00: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
7a10: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
7a20: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
7a30: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
7a40: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
7a50: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
7a60: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
7a70: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
7a80: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
7a90: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
7aa0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
7ab0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
7ac0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
7ad0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
7ae0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
7af0: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
7b00: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7b10: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
7b20: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
7b30: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
7b40: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
7b50: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
7b60: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
7b70: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
7b80: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
7b90: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
7ba0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
7bb0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7bc0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
7bd0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
7be0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
7bf0: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
7c00: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
7c10: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
7c20: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
7c30: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
7c40: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
7c50: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
7c60: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
7c70: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
7c80: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
7c90: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
7ca0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7cb0: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
7cc0: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
7cd0: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
7ce0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7cf0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
7d00: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
7d10: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7d20: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
7d30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7d40: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
7d50: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
7d60: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
7d70: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7d80: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
7d90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7da0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
7db0: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
7dc0: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
7dd0: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
7de0: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
7df0: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
7e00: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
7e10: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
7e20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
7e30: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
7e40: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
7e50: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
7e60: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
7e70: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
7e80: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
7e90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7ea0: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
7eb0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
7ec0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
7ed0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
7ee0: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
7ef0: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
7f00: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
7f10: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
7f20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7f30: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
7f40: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
7f50: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
7f60: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
7f70: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
7f80: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
7f90: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
7fa0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
7fb0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
7fc0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
7fd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7fe0: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
7ff0: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
8000: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
8010: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8020: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
8030: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
8040: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
8050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8060: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
8070: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8080: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
8090: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
80a0: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
80b0: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
80c0: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
80d0: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
80e0: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
80f0: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
8100: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
8110: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
8120: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
8130: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
8140: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
8150: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
8160: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
8170: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
8180: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
8190: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
81a0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
81b0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
81c0: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
81d0: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
81e0: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
81f0: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
8200: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
8210: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
8220: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
8230: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
8240: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
8250: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
8260: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
8270: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
8280: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
8290: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
82a0: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
82b0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
82c0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
82d0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
82e0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
82f0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
8300: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
8310: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
8320: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
8330: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
8340: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
8350: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
8360: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
8370: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
8380: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
8390: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
83a0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
83b0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
83c0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
83d0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
83e0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
83f0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
8400: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
8410: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
8420: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
8430: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
8440: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
8450: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
8460: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
8470: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
8480: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
8490: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
84a0: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
84b0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
84c0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
84d0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
84e0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
84f0: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
8500: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
8510: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
8520: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8530: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
8540: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
8550: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
8560: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
8570: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
8580: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
8590: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
85a0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
85b0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
85c0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
85d0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
85e0: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
85f0: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
8600: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
8610: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
8620: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
8630: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
8640: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
8650: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
8660: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
8670: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
8680: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
8690: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
86a0: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
86b0: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
86c0: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
86d0: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
86e0: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
86f0: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
8700: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
8710: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
8720: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
8730: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
8740: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
8750: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
8760: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
8770: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
8780: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
8790: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
87a0: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
87b0: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
87c0: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
87d0: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
87e0: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
87f0: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
8800: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
8810: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
8820: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
8830: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
8840: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
8850: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
8860: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
8870: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
8880: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
8890: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
88a0: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
88b0: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
88c0: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
88d0: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
88e0: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
88f0: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
8900: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
8910: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
8920: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
8930: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
8940: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8950: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
8960: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
8970: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
8980: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8990: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
89a0: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
89b0: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
89c0: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
89d0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
89e0: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
89f0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
8a00: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
8a10: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
8a20: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
8a30: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
8a40: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
8a50: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
8a60: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
8a70: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
8a80: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
8a90: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
8aa0: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
8ab0: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
8ac0: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
8ad0: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
8ae0: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
8af0: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
8b00: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
8b10: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
8b20: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
8b30: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
8b40: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
8b50: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
8b60: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
8b70: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
8b80: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
8b90: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
8ba0: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
8bb0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8bc0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8bd0: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
8be0: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
8bf0: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
8c00: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8c10: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
8c20: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
8c30: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
8c40: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
8c50: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
8c60: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
8c70: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
8c80: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
8c90: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8ca0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
8cb0: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
8cc0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
8cd0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
8ce0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
8cf0: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
8d00: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
8d10: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
8d20: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
8d30: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
8d40: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
8d50: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
8d60: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
8d70: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
8d80: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
8d90: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
8da0: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
8db0: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
8dc0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
8dd0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
8de0: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
8df0: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
8e00: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
8e10: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
8e20: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
8e30: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
8e40: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
8e50: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
8e60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
8e70: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
8e80: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
8e90: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
8ea0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
8eb0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
8ec0: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
8ed0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
8ee0: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
8ef0: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
8f00: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
8f10: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
8f20: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
8f30: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
8f40: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
8f50: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
8f60: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
8f70: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
8f80: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
8f90: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
8fa0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
8fb0: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
8fc0: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
8fd0: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
8fe0: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
8ff0: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
9000: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
9010: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
9020: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
9030: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
9040: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
9050: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9060: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
9070: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
9080: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
9090: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
90a0: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
90b0: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
90c0: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
90d0: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
90e0: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
90f0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
9100: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
9110: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
9120: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
9130: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
9140: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
9150: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
9160: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
9170: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
9180: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
9190: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
91a0: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
91b0: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
91c0: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
91d0: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
91e0: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
91f0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
9200: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
9210: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
9220: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
9230: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
9240: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
9250: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9260: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
9270: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
9280: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
9290: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
92a0: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
92b0: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
92c0: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
92d0: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
92e0: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
92f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9300: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
9310: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9320: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
9330: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
9340: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
9350: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
9360: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
9370: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
9380: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
9390: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
93a0: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
93b0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
93c0: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
93d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
93e0: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
93f0: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
9400: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
9410: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
9420: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
9430: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
9440: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
9450: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
9460: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
9470: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
9480: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
9490: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
94a0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
94b0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
94c0: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
94d0: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
94e0: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
94f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
9500: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
9510: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
9520: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
9530: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
9540: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
9550: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
9560: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9570: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
9580: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
9590: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
95a0: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
95b0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
95c0: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
95d0: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
95e0: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
95f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
9600: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
9610: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
9620: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
9630: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
9640: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9650: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
9660: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
9670: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
9680: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
9690: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
96a0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
96b0: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
96c0: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
96d0: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
96e0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
96f0: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
9700: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
9710: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
9720: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
9730: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
9740: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
9750: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
9760: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
9770: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
9780: 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
9790: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
97a0: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
97b0: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
97c0: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
97d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
97e0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
97f0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
9800: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
9810: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
9820: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
9830: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
9840: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
9850: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9860: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
9870: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
9880: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
9890: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
98a0: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
98b0: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
98c0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
98d0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
98e0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
98f0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
9900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
9910: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
9920: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
9930: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9950: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
9960: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
9970: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
9980: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
9990: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
99a0: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
99b0: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
99c0: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
99d0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
99e0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
99f0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
9a00: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
9a10: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
9a20: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
9a30: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
9a40: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
9a50: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
9a60: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
9a70: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
9a80: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
9a90: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
9aa0: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
9ab0: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
9ac0: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
9ad0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
9ae0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
9af0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
9b00: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
9b10: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
9b20: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
9b30: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
9b40: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
9b50: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
9b60: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
9b70: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
9b80: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
9b90: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
9ba0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
9bb0: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
9bc0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9bd0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
9be0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
9bf0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
9c00: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
9c10: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
9c20: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9c30: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
9c40: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
9c50: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
9c60: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
9c70: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9c80: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ca0: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
9cb0: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
9cc0: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
9cd0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
9ce0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
9cf0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
9d00: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9d10: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
9d40: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  r*);.#endif.../*
9d50: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
9d60: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
9d70: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
9d80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9d90: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
9da0: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
9db0: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
9dd0: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
9de0: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
9df0: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
9e00: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
9e10: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
9e20: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
9e30: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
9e40: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
9e50: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
9e60: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
9e70: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
9e80: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
9e90: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
9ea0: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
9eb0: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
9ec0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9ed0: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
9ee0: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9f00: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
9f10: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
9f20: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
9f30: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
9f40: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
9f50: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
9f60: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
9f70: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
9f90: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
9fa0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
9fb0: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
9fc0: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
9fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9fe0: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
9ff0: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
a000: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
a010: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
a020: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
a030: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
a040: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
a050: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a060: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
a070: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
a080: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
a090: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
a0b0: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
a0c0: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
a0d0: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
a0e0: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
a100: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
a110: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
a120: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
a130: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a140: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a150: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
a160: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
a170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a180: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
a190: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
a1a0: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
a1b0: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
a1c0: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
a1d0: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
a1e0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
a1f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
a200: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
a210: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
a220: 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  ure */.  u8 dflt
a230: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
a240: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
a250: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
a260: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
a270: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
a280: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
a290: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
a2a0: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
a2b0: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
a2c0: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a2e0: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
a2f0: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
a300: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
a310: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
a320: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a330: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
a340: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
a350: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
a360: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
a370: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
a380: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
a390: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
a3a0: 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  S */.  int nextP
a3b0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
a3c0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
a3d0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
a3e0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
a3f0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
a400: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
a410: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
a420: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
a430: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
a440: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a450: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
a460: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
a470: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
a480: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
a490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
a4a0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
a4b0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
a4c0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
a4d0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
a4e0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
a4f0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
a500: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
a510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
a520: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
a530: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
a540: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
a550: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
a560: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
a570: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
a580: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
a590: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
a5a0: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
a5b0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
a5c0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
a5d0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
a5e0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a600: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
a610: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
a620: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
a630: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
a640: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
a650: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
a660: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
a670: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
a680: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
a690: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
a6a0: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
a6b0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
a6c0: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
a6d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a6e0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
a6f0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
a700: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
a710: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
a720: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a730: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
a740: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
a750: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
a760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a770: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a780: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
a790: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
a7a0: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
a7b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a7c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a7d0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
a7e0: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
a7f0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
a800: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a810: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
a820: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
a830: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
a840: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
a850: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a860: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
a870: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
a880: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
a890: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
a8a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a8b0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
a8c0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
a8d0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a8f0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
a900: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
a910: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
a920: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
a930: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
a940: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
a950: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
a960: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
a970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a980: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a990: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
a9a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
a9b0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
a9c0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
a9d0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
a9e0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a9f0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa10: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
aa20: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
aa30: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
aa40: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
aa60: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
aa70: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
aa80: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
aa90: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
aaa0: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
aab0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
aac0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
aad0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
aae0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
aaf0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
ab00: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
ab10: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
ab20: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
ab30: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
ab40: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
ab50: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
ab60: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
ab70: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
ab80: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
ab90: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
aba0: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
abb0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
abc0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
abd0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
abe0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
abf0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
ac00: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
ac10: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
ac20: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
ac30: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
ac40: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
ac50: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
ac60: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
ac70: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
ac80: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
ac90: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
aca0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
acb0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
acc0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
acd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
ace0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
acf0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
ad00: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
ad10: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
ad20: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
ad30: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
ad40: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
ad50: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
ad60: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
ad70: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
ad80: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
ad90: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
ada0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
adb0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
adc0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
add0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ade0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
adf0: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
ae00: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
ae10: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
ae20: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
ae30: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
ae40: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
ae50: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
ae60: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
ae70: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
ae80: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
ae90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
aea0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
aeb0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
aec0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
aed0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
aee0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
aef0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
af00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
af10: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
af20: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
af30: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
af40: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
af50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
af60: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
af70: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
af80: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
af90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
afa0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
afb0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
afc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
afd0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
afe0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
aff0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
b000: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
b010: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
b020: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
b030: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
b040: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
b050: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
b060: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
b070: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
b080: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
b090: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
b0a0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
b0b0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
b0c0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
b0d0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
b0e0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
b0f0: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
b100: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
b110: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
b120: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
b130: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
b140: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
b150: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
b160: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
b170: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
b180: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
b190: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b1a0: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
b1b0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
b1c0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
b1d0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
b1e0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
b200: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
b210: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
b220: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
b230: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
b240: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
b250: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
b260: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
b270: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
b280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
b290: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
b2a0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
b2b0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b2d0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
b2e0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
b2f0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
b300: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
b310: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b320: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
b330: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
b340: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
b350: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
b360: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
b370: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
b380: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
b390: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
b3a0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
b3b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
b3c0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
b3d0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
b3e0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
b3f0: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
b400: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
b410: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
b420: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
b430: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
b440: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
b450: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
b460: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
b470: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
b480: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
b490: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
b4a0: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
b4b0: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
b4c0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
b4d0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
b4e0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
b4f0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
b500: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
b510: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
b520: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
b530: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
b540: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
b550: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
b560: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
b570: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
b580: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
b590: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
b5a0: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
b5b0: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
b5c0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
b5d0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
b5e0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
b5f0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
b600: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
b610: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
b620: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
b630: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
b640: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
b650: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
b660: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
b670: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
b680: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
b690: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
b6a0: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b6c0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
b6d0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
b6e0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
b6f0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
b700: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
b710: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
b720: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
b730: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
b740: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
b750: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
b760: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
b770: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
b780: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b790: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
b7a0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
b7b0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
b7c0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b7d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
b7e0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
b7f0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
b800: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
b810: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
b820: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
b830: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
b840: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
b850: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
b860: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
b870: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
b880: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
b890: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
b8a0: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
b8b0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
b8c0: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
b8d0: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
b8e0: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
b8f0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
b900: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
b910: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
b920: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
b930: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
b940: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b950: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
b960: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20       0x00000004 
b970: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
b980: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
b990: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
b9a0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
b9b0: 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f  c  0x00000008  /
b9c0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
b9d0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
b9e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b9f0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
ba00: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
ba10: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
ba20: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
ba30: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
ba40: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
ba50: 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  020  /* Show ful
ba60: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
ba70: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
ba80: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
ba90: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
baa0: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
bab0: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
bac0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bad0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
bae0: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
baf0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
bb00: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
bb10: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bb40: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
bb50: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
bb60: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
bb90: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
bba0: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
bbb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
bbc0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
bbd0: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
bbe0: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
bbf0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
bc30: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
bc40: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
bc50: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
bc60: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
bc70: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
bc80: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
bc90: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bca0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
bcb0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
bcc0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
bcd0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
bce0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bcf0: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
bd00: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
bd10: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
bd20: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
bd30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
bd40: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
bd50: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
bd60: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
bd70: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
bd80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
bd90: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
bda0: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
bdb0: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
bdc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
bdd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
bde0: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
bdf0: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
be00: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
be10: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
be20: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
be30: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
be40: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
be50: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
be60: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
be70: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
be80: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
be90: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
bea0: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
beb0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
bec0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
bed0: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
bee0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
bef0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
bf00: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
bf10: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
bf20: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
bf30: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
bf40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
bf50: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
bf60: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
bf70: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
bf80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
bf90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bfa0: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
bfb0: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
bfc0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
bfd0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
bfe0: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
bff0: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
c000: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
c010: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
c020: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
c030: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
c040: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
c050: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
c060: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
c070: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
c080: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
c090: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
c0a0: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
c0b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c0c0: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
c0d0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
c0e0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
c0f0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
c100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
c110: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
c120: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
c130: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
c140: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
c150: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
c160: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
c170: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
c180: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
c190: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
c1a0: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
c1b0: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  08000000  /* Cur
c1c0: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
c1d0: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
c1e0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
c1f0: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
c200: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
c210: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
c220: 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  d */.../*.** Bit
c230: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
c240: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
c250: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
c260: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
c270: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
c280: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
c290: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
c2a0: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
c2b0: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
c2c0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
c2d0: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
c2e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
c2f0: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
c300: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
c310: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
c320: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
c330: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
c340: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
c350: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
c360: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
c370: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
c380: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
c390: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
c3a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
c3b0: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
c3c0: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
c3d0: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
c400: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
c410: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
c420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c430: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
c440: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
c450: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
c460: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
c470: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
c480: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
c490: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
c4a0: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
c4b0: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
c4c0: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
c4d0: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
c4e0: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
c4f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c500: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
c510: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
c520: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
c530: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
c540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c550: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
c560: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
c570: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
c580: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
c590: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
c5a0: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
c5b0: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
c5c0: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
c5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
c5e0: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
c5f0: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
c600: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
c610: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c620: 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20  TE_CursorHints  
c630: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64    0x2000   /* Ad
c640: 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20  d OP_CursorHint 
c650: 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69  opcodes */.#defi
c660: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
c670: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
c680: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
c690: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
c6a0: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
c6b0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
c6c0: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
c6d0: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
c6e0: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
c6f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c700: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
c710: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c720: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
c730: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
c740: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
c750: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
c760: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
c770: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
c780: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
c790: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
c7a0: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
c7b0: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
c7c0: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
c7d0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c7e0: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
c7f0: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
c800: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
c810: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
c820: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
c830: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
c840: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
c850: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
c860: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
c870: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
c880: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
c890: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
c8a0: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
c8b0: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
c8c0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
c8d0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
c8e0: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
c8f0: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
c900: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
c910: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
c920: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
c930: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
c940: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
c950: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
c960: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
c970: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
c980: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
c990: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
c9a0: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
c9b0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
c9c0: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
c9d0: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
c9e0: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
c9f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
ca00: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
ca10: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
ca20: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
ca30: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
ca40: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
ca50: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
ca60: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
ca70: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
ca80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
ca90: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
caa0: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
cab0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
cac0: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
cad0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
cae0: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
caf0: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
cb00: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
cb10: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
cb20: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
cb30: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
cb40: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
cb50: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
cb60: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
cb70: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
cb80: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
cb90: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
cba0: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
cbb0: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
cbc0: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
cbd0: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
cbe0: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
cbf0: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
cc00: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
cc10: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
cc20: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
cc30: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
cc40: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
cc50: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cc60: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
cc70: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
cc80: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
cc90: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
cca0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
ccb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
ccc0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
ccd0: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
cce0: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
ccf0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
cd00: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
cd10: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
cd20: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
cd30: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
cd40: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
cd50: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
cd60: 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61  *); /* func or a
cd70: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  gg-step */.  voi
cd80: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
cd90: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
cda0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cdb0: 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69     /* Agg finali
cdc0: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
cdd0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
cde0: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
cdf0: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
ce00: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
ce10: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
ce20: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
ce30: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
ce40: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
ce50: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
ce60: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
ce70: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
ce80: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
ce90: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
cea0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
ceb0: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
cec0: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
ced0: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
cee0: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
cef0: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
cf00: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
cf10: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
cf20: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
cf30: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
cf40: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
cf50: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
cf60: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
cf70: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
cf80: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
cf90: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
cfa0: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
cfb0: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
cfc0: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
cfd0: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
cfe0: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
cff0: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
d000: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
d010: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
d020: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
d030: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
d040: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
d050: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
d060: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
d070: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
d080: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
d090: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
d0a0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
d0b0: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
d0c0: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
d0d0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
d0e0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
d0f0: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
d100: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
d110: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
d120: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
d130: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
d140: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
d150: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
d160: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
d170: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
d180: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
d190: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
d1a0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
d1b0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
d1c0: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
d1d0: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
d1e0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
d1f0: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
d200: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
d210: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
d220: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
d230: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
d240: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
d250: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
d260: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
d270: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
d280: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
d290: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
d2a0: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
d2b0: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
d2c0: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
d2d0: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
d2e0: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
d2f0: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
d300: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
d310: 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53  ASK  0x0003 /* S
d320: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
d330: 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54  TE_UTF16BE or UT
d340: 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65  F16LE */.#define
d350: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b   SQLITE_FUNC_LIK
d360: 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20  E     0x0004 /* 
d370: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
d380: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
d390: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d3a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
d3b0: 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61      0x0008 /* Ca
d3c0: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
d3d0: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
d3e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d3f0: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
d400: 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65  0x0010 /* Epheme
d410: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
d420: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
d430: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
d440: 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a  EDCOLL 0x0020 /*
d450: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
d460: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
d470: 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69  e called*/.#defi
d480: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
d490: 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f  ENGTH   0x0040 /
d4a0: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
d4b0: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
d4c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d4d0: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
d4e0: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
d4f0: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
d500: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d510: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
d520: 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c    0x0100 /* Buil
d530: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
d540: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
d550: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
d560: 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f  OALESCE 0x0200 /
d570: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
d580: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
d590: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
d5a0: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
d5b0: 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c  Y 0x0400 /* Buil
d5c0: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
d5d0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
d5e0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d5f0: 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20  CONSTANT 0x0800 
d600: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d610: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d620: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d630: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d640: 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30  _MINMAX   0x1000
d650: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
d660: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
d670: 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  regates */.#defi
d680: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  ne SQLITE_FUNC_S
d690: 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f  LOCHNG  0x2000 /
d6a0: 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e  * "Slow Change".
d6b0: 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20   Value constant 
d6c0: 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20  during a.       
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
d6f0: 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d  single query - m
d700: 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72  ight change over
d710: 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   time */../*.** 
d720: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
d730: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
d740: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
d750: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
d760: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
d770: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
d780: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
d790: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
d7a0: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
d7b0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d7c0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d7d0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
d7e0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
d7f0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
d800: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
d810: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
d820: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
d830: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
d840: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
d850: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
d860: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
d870: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
d880: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
d890: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
d8a0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
d8b0: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
d8c0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
d8d0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
d8e0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
d8f0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
d900: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
d910: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
d920: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
d930: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
d940: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d950: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d960: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
d970: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
d980: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
d990: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
d9a0: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
d9b0: 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     DFUNCTION(zNa
d9c0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d9d0: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
d9e0: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
d9f0: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
da00: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
da10: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61  _CONSTANT flag a
da20: 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74  nd.**     adds t
da30: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  he SQLITE_FUNC_S
da40: 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73  LOCHNG flag.  Us
da50: 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69  ed for date & ti
da60: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  me functions.** 
da70: 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e      and function
da80: 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65  s like sqlite_ve
da90: 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e  rsion() that can
daa0: 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74   change, but not
dab0: 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61   during.**     a
dac0: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a   single query..*
dad0: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
dae0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
daf0: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
db00: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
db10: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
db20: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
db30: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
db40: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
db50: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
db60: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
db70: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
db80: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
db90: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
dba0: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
dbb0: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
dbc0: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
dbd0: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
dbe0: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
dbf0: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
dc00: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
dc10: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
dc20: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
dc30: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
dc40: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
dc50: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
dc60: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
dc70: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
dc80: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
dc90: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
dca0: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
dcb0: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
dcc0: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
dcd0: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
dce0: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
dcf0: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
dd00: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
dd10: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
dd20: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
dd30: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
dd40: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
dd50: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
dd60: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
dd70: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
dd80: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
dd90: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
dda0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
ddb0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ddc0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
ddd0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
dde0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
ddf0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
de00: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
de10: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
de20: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
de30: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
de40: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
de50: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
de60: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
de70: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
de80: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
de90: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
dea0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
deb0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
dec0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
ded0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 44   0, 0}.#define D
dee0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
def0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
df00: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
df10: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
df20: 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
df30: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
df40: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
df50: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
df60: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
df70: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
df80: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
df90: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
dfa0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
dfb0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
dfc0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
dfd0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
dfe0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
dff0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
e000: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
e010: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
e020: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
e030: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
e040: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
e050: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
e060: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
e070: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
e080: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
e090: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
e0a0: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  G|SQLITE_UTF8|(b
e0b0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
e0c0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
e0d0: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
e0e0: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
e0f0: 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
e100: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
e110: 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
e120: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
e130: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
e140: 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20  _UTF8|flags, \. 
e150: 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30    (void *)arg, 0
e160: 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23  , likeFunc, 0, #
e170: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
e180: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
e190: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
e1a0: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
e1b0: 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
e1c0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
e1d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
e1e0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
e1f0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
e200: 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
e210: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23  al,#zName,0,0}.#
e220: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
e230: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
e240: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
e250: 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
e260: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
e270: 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
e280: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
e290: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
e2a0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
e2b0: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
e2c0: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
e2d0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
e2e0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
e2f0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
e300: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
e310: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
e320: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
e330: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
e340: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
e350: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
e360: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
e370: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
e380: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
e390: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
e3a0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
e3b0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
e3c0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
e3d0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
e3e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
e410: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
e420: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
e430: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
e460: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
e470: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
e480: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e4a0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
e4b0: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
e4c0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
e4d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e4e0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
e4f0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
e500: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
e510: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
e520: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
e530: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
e540: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
e550: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
e560: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
e570: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
e580: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
e590: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
e5a0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
e5b0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
e5c0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
e5d0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
e5e0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
e5f0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
e600: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
e610: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
e620: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
e630: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
e640: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
e650: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
e660: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
e670: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
e680: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
e690: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
e6a0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
e6b0: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
e6c0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
e6d0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
e6e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
e6f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e700: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
e710: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
e720: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
e730: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e750: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
e760: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
e770: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
e780: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
e790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
e7a0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
e7b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
e7c0: 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20  able *pEpoTab;  
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7e0: 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73      /* Eponymous
e7f0: 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20   table for this 
e800: 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  module */.};../*
e810: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
e820: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
e830: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
e840: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
e850: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
e860: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
e870: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
e880: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
e890: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
e8a0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
e8b0: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
e8c0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
e8d0: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
e8e0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
e8f0: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
e900: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
e910: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
e920: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
e930: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
e940: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
e950: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
e960: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
e970: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
e980: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
e990: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
e9a0: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
e9b0: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
e9c0: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
e9d0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
e9e0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
e9f0: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
ea00: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
ea10: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
ea20: 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
ea30: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
ea40: 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68  e of value in th
ea50: 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f  is column. sizeo
ea60: 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75  f(INT)==1 */.  u
ea70: 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
ea80: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
ea90: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
eaa0: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
eab0: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
eac0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
ead0: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
eae0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
eaf0: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
eb00: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
eb10: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
eb20: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
eb30: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
eb40: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
eb50: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
eb60: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
eb70: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
eb80: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
eb90: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
eba0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
ebb0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
ebc0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
ebd0: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
ebe0: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
ebf0: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
ec00: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
ec10: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
ec20: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
ec30: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
ec40: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
ec50: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
ec60: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
ec70: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
ec80: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ec90: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
eca0: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
ecb0: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
ecc0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
ecd0: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
ece0: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
ecf0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
ed00: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
ed10: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
ed20: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
ed30: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ed40: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
ed50: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
ed60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
ed70: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
ed80: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
ed90: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
eda0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
edb0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
edc0: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
edd0: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
ede0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
edf0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
ee00: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
ee10: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
ee20: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
ee30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
ee40: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
ee50: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
ee60: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
ee70: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
ee80: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
ee90: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
eea0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
eeb0: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
eec0: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
eed0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
eee0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eef0: 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d  E_SO_UNDEFINED -
ef00: 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64  1 /* No sort ord
ef10: 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  er specified */.
ef20: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
ef30: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
ef40: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
ef50: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
ef60: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
ef70: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
ef80: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
ef90: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
efa0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
efb0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
efc0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
efd0: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
efe0: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
eff0: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
f000: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
f010: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
f020: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
f030: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
f040: 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
f050: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
f060: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
f070: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
f080: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
f090: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
f0a0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
f0b0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
f0c0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
f0d0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
f0e0: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
f0f0: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
f100: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
f110: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
f120: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
f130: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
f140: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
f150: 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
f160: 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
f170: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
f180: 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
f190: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
f1a0: 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
f1b0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
f1c0: 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
f1d0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
f1e0: 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
f1f0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
f200: 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
f210: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
f220: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
f230: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
f240: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
f250: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
f260: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
f270: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
f280: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
f290: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
f2a0: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
f2b0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
f2c0: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
f2d0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
f2e0: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
f2f0: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
f300: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
f310: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
f320: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
f330: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
f340: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
f350: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
f360: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
f370: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
f380: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
f390: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
f3a0: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
f3b0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
f3c0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
f3d0: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
f3e0: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
f3f0: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
f400: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
f410: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
f420: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
f430: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
f440: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
f450: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
f460: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f470: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
f480: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
f490: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
f4a0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
f4b0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
f4c0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
f4d0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
f4e0: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
f4f0: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
f500: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
f510: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
f520: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
f530: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
f540: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
f550: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
f560: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
f570: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
f580: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
f590: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
f5a0: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
f5b0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
f5c0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
f5d0: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
f5e0: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
f5f0: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
f600: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
f610: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
f620: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
f630: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
f640: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
f650: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
f660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f670: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
f680: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
f690: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
f6a0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f6b0: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
f6c0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
f6d0: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
f6e0: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
f6f0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
f700: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
f710: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
f720: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
f730: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
f740: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
f750: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
f760: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
f770: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
f780: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
f790: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
f7a0: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
f7b0: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
f7c0: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
f7d0: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
f7e0: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
f7f0: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
f800: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
f810: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
f820: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
f830: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
f840: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
f850: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
f860: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
f870: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
f880: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
f890: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
f8a0: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
f8b0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
f8c0: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
f8d0: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
f8e0: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
f8f0: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
f900: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
f910: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
f920: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
f930: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
f940: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
f950: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
f960: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
f970: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
f980: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
f990: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
f9a0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
f9b0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
f9c0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
f9d0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
f9e0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
f9f0: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
fa00: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
fa10: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
fa20: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
fa30: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
fa40: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
fa50: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
fa60: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
fa70: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
fa80: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
fa90: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
faa0: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
fab0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
fac0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
fad0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
fae0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
faf0: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
fb00: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
fb10: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
fb20: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
fb30: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
fb40: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
fb50: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
fb60: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
fb70: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
fb80: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
fb90: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
fba0: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
fbb0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
fbc0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
fbd0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
fbe0: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
fbf0: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
fc00: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
fc10: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
fc20: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
fc30: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
fc40: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
fc50: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
fc60: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
fc70: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
fc80: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
fc90: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
fca0: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
fcb0: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
fcc0: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
fcd0: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
fce0: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
fcf0: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
fd00: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
fd10: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
fd20: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
fd30: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
fd40: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
fd50: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
fd60: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
fd70: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
fd80: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
fd90: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
fda0: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
fdb0: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
fdc0: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
fdd0: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
fde0: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
fdf0: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
fe00: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
fe10: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
fe20: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
fe30: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
fe40: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
fe50: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
fe60: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
fe70: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
fe80: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
fe90: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
fea0: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
feb0: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
fec0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
fed0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
fee0: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
fef0: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
ff00: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
ff10: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
ff20: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
ff30: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
ff40: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
ff50: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
ff60: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
ff70: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
ff80: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
ff90: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
ffa0: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
ffb0: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
ffc0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
ffd0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ffe0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
fff0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
10000 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
10010 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10020 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
10030 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
10040 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
10050 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
10060 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
10070 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
10080 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
10090 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
100a0 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
100b0 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
100c0 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
100d0 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
100e0 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
100f0 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
10100 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
10110 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
10120 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10130 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
10140 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
10150 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
10160 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10170 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
10180 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
10190 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
101a0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
101b0 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
101c0 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
101d0 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
101e0 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
101f0 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
10200 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
10210 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
10220 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
10230 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
10240 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
10250 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
10260 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
10270 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
10280 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
10290 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
102a0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
102b0 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
102c0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
102d0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
102e0 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
102f0 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
10300 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
10310 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10330 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
10340 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
10350 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
10360 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
10370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
10380 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
10390 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
103a0 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
103b0 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
103c0 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
103d0 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
103e0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20   rowid */.  i16 
103f0 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
10400 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
10410 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
10420 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65  ble */.  u16 nRe
10430 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
10440 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
10450 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
10460 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52  e */.  LogEst nR
10470 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
10480 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
10490 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
104a0 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
104b0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
104c0 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
104d0 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
104e0 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
104f0 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
10500 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
10510 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
10520 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
10530 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
10540 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
10550 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
10560 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  f.  u8 tabFlags;
10570 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
10580 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
10590 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
105a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
105b0 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
105c0 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
105d0 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
105e0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
105f0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
10600 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
10610 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
10620 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
10630 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
10640 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
10650 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
10660 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
10670 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
10680 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
10690 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
106a0 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
106b0 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
106c0 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
106d0 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
106e0 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
106f0 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
10700 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
10710 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
10720 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
10730 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
10740 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
10750 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
10760 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
10770 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
10780 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
10790 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
107a0 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
107b0 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
107c0 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
107d0 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
107e0 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
107f0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
10800 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
10810 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
10820 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
10830 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
10840 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77  o tables or view
10850 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
10860 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
10870 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
10880 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
10890 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
108a0 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
108b0 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
108c0 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
108d0 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
108e0 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
108f0 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
10900 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
10910 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
10920 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
10930 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
10940 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
10950 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
10960 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
10970 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
10980 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
10990 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
109a0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
109b0 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
109c0 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
109d0 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
109e0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
109f0 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
10a00 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
10a10 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
10a20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
10a30 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
10a40 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
10a50 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
10a60 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
10a70 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
10a80 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
10a90 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
10aa0 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
10ab0 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
10ac0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
10ad0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
10ae0 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
10af0 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
10b00 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  .  PRIMARY KEY i
10b10 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65  s the key */.#de
10b20 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c  fine TF_NoVisibl
10b30 65 52 6f 77 69 64 20 20 30 78 34 30 20 20 20 20  eRowid  0x40    
10b40 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
10b50 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
10b60 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
10b70 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
10b80 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f  0x80    /* Out-o
10b90 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63  f-Order hidden c
10ba0 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  olumns */.../*.*
10bb0 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
10bc0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
10bd0 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
10be0 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
10bf0 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
10c00 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
10c10 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
10c20 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
10c30 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
10c40 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
10c50 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
10c60 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
10c70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
10c80 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
10c90 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
10ca0 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
10cb0 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
10cc0 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
10cd0 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
10ce0 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     0.#endif../*.
10cf0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
10d00 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75  ermine if a colu
10d10 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49  mn is hidden.  I
10d20 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
10d30 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20  olumn().** only 
10d40 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69  works for non-vi
10d50 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72  rtual tables (or
10d60 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e  dinary tables an
10d70 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a  d views) and is.
10d80 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20  ** always false 
10d90 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e  unless SQLITE_EN
10da0 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
10db0 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20  MNS is defined. 
10dc0 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e   The.** IsHidden
10dd0 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69  Column() macro i
10de0 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73  s general purpos
10df0 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  e..*/.#if define
10e00 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
10e10 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a  HIDDEN_COLUMNS).
10e20 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
10e30 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
10e40 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
10e50 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
10e60 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
10e70 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
10e80 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
10e90 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
10ea0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
10eb0 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  =0).#elif !defin
10ec0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
10ed0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20  IRTUALTABLE).#  
10ee0 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
10ef0 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
10f00 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
10f10 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
10f20 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
10f30 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
10f40 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c  nColumn(X) 0.#el
10f50 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  se.#  define IsH
10f60 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
10f70 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69         0.#  defi
10f80 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
10f90 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
10fa0 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20  endif.../* Does 
10fb0 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
10fc0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
10fd0 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
10fe0 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
10ff0 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
11000 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65  wid)==0).#define
11010 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29   VisibleRowid(X)
11020 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
11030 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52   & TF_NoVisibleR
11040 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
11050 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
11060 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
11070 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
11080 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
11090 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
110a0 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
110b0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
110c0 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
110d0 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
110e0 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
110f0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
11100 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
11110 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
11120 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
11130 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
11140 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
11150 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
11160 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
11170 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
11180 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
11190 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
111a0 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
111b0 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
111c0 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
111d0 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
111e0 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
111f0 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
11200 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
11210 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
11220 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
11230 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
11240 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
11250 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
11260 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
11270 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
11280 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
11290 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
112a0 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
112b0 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
112c0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
112d0 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
112e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
112f0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11300 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
11310 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
11320 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
11330 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
11340 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
11350 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
11360 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
11370 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
11380 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
11390 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
113a0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
113b0 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
113c0 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
113d0 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
113e0 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
113f0 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
11400 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
11410 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
11420 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
11430 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
11440 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
11450 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
11460 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
11470 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
11480 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
11490 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
114a0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
114b0 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
114c0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
114d0 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
114e0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
114f0 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
11500 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
11510 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
11520 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11530 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
11540 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
11550 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
11560 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
11570 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
11580 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
11590 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
115a0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
115b0 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
115c0 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
115d0 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
115e0 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
115f0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
11600 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
11610 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
11620 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
11630 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
11640 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
11650 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
11660 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
11670 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
11680 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
11690 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
116a0 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
116b0 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
116c0 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
116d0 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
116e0 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
116f0 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
11700 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
11710 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
11720 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
11730 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
11740 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
11750 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
11760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
11770 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
11780 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
11790 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
117a0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
117b0 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
117c0 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
117d0 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
117e0 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
117f0 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
11800 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
11810 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
11820 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
11830 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
11840 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
11850 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
11860 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
11870 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
11880 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
11890 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
118a0 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
118b0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
118c0 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
118d0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
118e0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
118f0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
11900 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
11910 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
11920 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
11930 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
11940 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
11950 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
11960 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
11970 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
11980 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
11990 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
119a0 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
119b0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
119c0 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
119d0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
119e0 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
119f0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
11a00 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
11a10 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
11a20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
11a30 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
11a40 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
11a50 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
11a60 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
11a70 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
11a80 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
11a90 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
11aa0 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
11ab0 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
11ac0 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
11ad0 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
11ae0 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
11af0 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
11b00 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
11b10 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
11b20 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
11b30 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
11b40 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
11b50 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
11b60 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
11b70 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
11b80 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
11b90 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
11ba0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
11bb0 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
11bc0 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
11bd0 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
11be0 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
11bf0 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
11c00 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
11c10 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
11c20 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
11c30 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
11c40 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
11c50 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
11c60 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
11c70 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
11c80 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
11c90 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
11ca0 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
11cb0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
11cc0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
11cd0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
11ce0 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
11cf0 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
11d00 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
11d10 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
11d20 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20  ign key..** .** 
11d30 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
11d40 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72  mbolic values ar
11d50 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64  e used to record
11d60 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f   which type.** o
11d70 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65  f action to take
11d80 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  ..*/.#define OE_
11d90 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20  None     0   /* 
11da0 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  There is no cons
11db0 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20  traint to check 
11dc0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f  */.#define OE_Ro
11dd0 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61  llback 1   /* Fa
11de0 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  il the operation
11df0 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68   and rollback th
11e00 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  e transaction */
11e10 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72  .#define OE_Abor
11e20 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b  t    2   /* Back
11e30 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74   out changes but
11e40 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20   do no rollback 
11e50 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
11e60 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20  define OE_Fail  
11e70 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74     3   /* Stop t
11e80 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  he operation but
11e90 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72   leave all prior
11ea0 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
11eb0 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20  ine OE_Ignore   
11ec0 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68  4   /* Ignore th
11ed0 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20  e error. Do not 
11ee0 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72  do the INSERT or
11ef0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
11f00 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35  ne OE_Replace  5
11f10 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69     /* Delete exi
11f20 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68  sting record, th
11f30 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20  en do INSERT or 
11f40 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69  UPDATE */..#defi
11f50 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36  ne OE_Restrict 6
11f60 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
11f70 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
11f80 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
11f90 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
11fa0 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20  e OE_SetNull  7 
11fb0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
11fc0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
11fd0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
11fe0 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20  e OE_SetDflt  8 
11ff0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
12000 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
12010 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
12020 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
12030 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63  ade  9   /* Casc
12040 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
12050 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44  */..#define OE_D
12060 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44  efault  10  /* D
12070 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64  o whatever the d
12080 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73  efault action is
12090 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69   */.../*.** An i
120a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
120b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
120c0 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20  re is passed as 
120d0 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
120e0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
120f0 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61  VdbeKeyCompare a
12100 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  nd is used to co
12110 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f  ntrol the .** co
12120 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
12130 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
12140 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
12150 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
12160 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
12170 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
12180 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
12190 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
121a0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
121b0 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
121c0 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
121d0 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
121e0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
121f0 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
12200 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
12210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
12220 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
12230 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
12240 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
12250 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
12260 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
12270 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
12280 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
12290 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
122a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
122b0 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
122c0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
122d0 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20   nXField;       
122e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
122f0 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65  lumns beyond the
12300 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   key columns */.
12310 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
12320 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
12330 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12340 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
12350 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
12360 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
12370 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
12380 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
12390 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
123a0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
123b0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
123c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
123d0 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
123e0 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
123f0 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
12400 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
12410 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
12420 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
12430 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
12440 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
12450 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
12460 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
12470 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
12480 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
12490 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
124a0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
124b0 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
124c0 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
124d0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
124e0 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
124f0 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
12500 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
12510 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
12520 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
12530 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
12540 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
12550 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
12560 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
12570 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
12580 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
12590 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
125a0 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
125b0 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
125c0 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
125d0 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
125e0 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
125f0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
12600 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
12610 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
12620 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
12630 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
12640 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
12650 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
12660 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
12670 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
12680 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
12690 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
126a0 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
126b0 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
126c0 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
126d0 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
126e0 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
126f0 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
12700 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
12710 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
12720 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
12730 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
12740 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
12750 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
12760 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
12770 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
12780 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
12790 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
127a0 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
127b0 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
127c0 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
127d0 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
127e0 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
127f0 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
12800 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
12810 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
12820 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
12830 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
12840 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
12850 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
12860 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
12870 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
12880 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
12890 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
128a0 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
128b0 74 6f 20 0a 2a 2a 20 63 61 75 73 65 20 74 68 65  to .** cause the
128c0 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20   search to find 
128d0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20  the last match, 
128e0 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74  or +1 to cause t
128f0 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20  he search to.** 
12900 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d  find the first m
12910 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  atch..**.** The 
12920 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
12930 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65  unctions will se
12940 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65  t eqSeen to true
12950 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a   if they ever.**
12960 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72   get and equal r
12970 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70  esults when comp
12980 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63  aring this struc
12990 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65  ture to a b-tree
129a0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e   record..** When
129b0 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20   default_rc!=0, 
129c0 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74  the search might
129d0 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72   end up on the r
129e0 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
129f0 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20  y.** before the 
12a00 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69  first match or i
12a10 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
12a20 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e   the last match.
12a30 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20    The.** eqSeen 
12a40 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63  field will indic
12a50 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ate whether or n
12a60 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63  ot an exact matc
12a70 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  h exists in the.
12a80 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74  ** b-tree..*/.st
12a90 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
12aa0 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
12ab0 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
12ac0 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
12ad0 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
12ae0 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  ion */.  Mem *aM
12af0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
12b00 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  Values */.  u16 
12b10 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
12b20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
12b30 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
12b40 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
12b50 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
12b60 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
12b70 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
12b80 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
12b90 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
12ba0 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
12bb0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
12bc0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
12bd0 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20  */.  i8 r1;     
12be0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
12bf0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
12c00 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20  lhs > rhs) */.  
12c10 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  i8 r2;          
12c20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
12c30 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c  return if (rhs <
12c40 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71   lhs) */.  u8 eq
12c50 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  Seen;          /
12c60 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75  * True if an equ
12c70 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e  ality comparison
12c80 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
12c90 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
12ca0 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
12cb0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
12cc0 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
12cd0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
12ce0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12cf0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
12d00 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
12d10 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
12d20 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
12d30 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
12d40 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
12d50 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
12d60 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
12d70 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
12d80 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
12d90 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
12da0 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
12db0 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
12dc0 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
12dd0 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
12de0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
12df0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
12e00 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
12e10 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
12e20 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
12e30 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
12e40 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
12e50 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
12e60 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
12e70 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
12e80 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
12e90 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
12ea0 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
12eb0 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
12ec0 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
12ed0 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
12ee0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
12ef0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
12f00 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
12f10 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
12f20 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
12f30 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
12f40 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
12f50 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
12f60 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
12f70 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
12f80 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
12f90 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
12fa0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
12fb0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
12fc0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
12fd0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
12fe0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
12ff0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
13000 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
13010 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
13020 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
13030 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
13040 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
13050 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
13060 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
13070 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
13080 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
13090 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
130a0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
130b0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
130c0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
130d0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
130e0 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
130f0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
13100 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
13110 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
13120 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
13130 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68  lement..**.** Wh
13140 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52  ile parsing a CR
13150 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
13160 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
13170 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  ment in order to
13180 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42  .** generate VDB
13190 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73  E code (as oppos
131a0 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e  ed to parsing on
131b0 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73  e read from an s
131c0 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20  qlite_master.** 
131d0 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66  table as part of
131e0 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73   parsing an exis
131f0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  ting database sc
13200 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74  hema), transient
13210 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66   instances.** of
13220 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
13230 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20  may be created. 
13240 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
13250 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69   Index.tnum vari
13260 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20  able is.** used 
13270 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64  to store the add
13280 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69  ress of a VDBE i
13290 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20  nstruction, not 
132a0 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
132b0 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61  ** number (it ca
132c0 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62  nnot - the datab
132d0 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20  ase page is not 
132e0 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20  allocated until 
132f0 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67  the VDBE.** prog
13300 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29  ram is executed)
13310 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57  . See convertToW
13320 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65  ithoutRowidTable
13330 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
13340 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
13350 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13370 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
13380 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
13390 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
133a0 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
133b0 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
133c0 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
133d0 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
133e0 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
133f0 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
13400 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
13410 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
13420 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
13430 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
13440 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
13450 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
13460 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
13470 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
13480 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
13490 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
134a0 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
134b0 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
134c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
134d0 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
134e0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
134f0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
13500 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
13510 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
13520 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
13530 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
13540 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
13550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
13560 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
13570 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
13580 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  =ASC */.  const 
13590 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
135a0 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
135b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
135c0 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
135d0 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
135e0 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
135f0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
13600 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
13610 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ces */.  ExprLis
13620 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20  t *aColExpr;    
13630 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72    /* Column expr
13640 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
13650 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
13660 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
13670 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
13680 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
13690 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
136a0 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
136b0 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
136c0 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
136d0 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
136e0 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
136f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13700 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
13710 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
13720 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
13730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13740 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
13750 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
13760 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
13770 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13780 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
13790 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
137a0 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
137b0 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65  unsigned idxType
137c0 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55  :2;      /* 1==U
137d0 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
137e0 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
137f0 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
13800 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
13810 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
13820 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
13830 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
13840 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
13850 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
13860 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
13870 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
13880 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
13890 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
138a0 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
138b0 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
138c0 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
138d0 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
138e0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
138f0 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
13900 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
13910 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
13920 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69    unsigned noSki
13930 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f  pScan:1;   /* Do
13940 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20   not try to use 
13950 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75  skip-scan if tru
13960 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  e */.#ifdef SQLI
13970 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
13980 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
13990 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
139a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
139b0 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
139c0 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
139d0 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
139e0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
139f0 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
13a00 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
13a10 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
13a20 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
13a30 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
13a40 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
13a50 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
13a60 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
13a70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
13a80 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
13a90 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
13aa0 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
13ab0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
13ac0 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
13ad0 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
13ae0 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
13af0 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
13b00 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
13b10 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
13b20 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
13b30 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
13b40 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
13b50 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
13b60 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
13b70 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
13b80 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
13b90 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
13ba0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
13bb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
13bc0 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
13bd0 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
13be0 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
13bf0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
13c00 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
13c10 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
13c20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
13c30 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
13c40 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74  table */../* Ret
13c50 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
13c60 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
13c70 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
13c80 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
13c90 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
13ca0 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
13cb0 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
13cc0 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
13cd0 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
13ce0 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
13cf0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
13d00 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
13d10 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
13d20 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20  r!=OE_None)../* 
13d30 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75  The Index.aiColu
13d40 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20  mn[] values are 
13d50 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76  normally positiv
13d60 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a  e integer.  But.
13d70 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ** there are som
13d80 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  e negative value
13d90 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63  s that have spec
13da0 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a  ial meaning:.*/.
13db0 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44  #define XN_ROWID
13dc0 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a       (-1)     /*
13dd0 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
13de0 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  is the rowid */.
13df0 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20  #define XN_EXPR 
13e00 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a       (-2)     /*
13e10 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
13e20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
13e30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
13e40 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
13e50 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
13e60 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
13e70 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
13e80 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72   .** using a str
13e90 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
13ea0 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
13eb0 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
13ec0 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
13ed0 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
13ee0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
13ef0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
13f00 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
13f10 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
13f20 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
13f30 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
13f40 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
13f50 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
13f60 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
13f70 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
13f80 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
13f90 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
13fa0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
13fb0 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
13fc0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
13fd0 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
13fe0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
13ff0 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
14000 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
14010 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
14020 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
14030 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
14040 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
14050 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
14060 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
14070 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
14080 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
14090 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
140a0 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
140b0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
140c0 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
140d0 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
140e0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
140f0 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
14100 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
14110 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
14120 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
14130 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
14140 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
14150 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
14160 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
14170 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
14180 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
14190 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
141a0 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
141b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
141c0 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
141d0 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
141e0 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
141f0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
14200 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
14210 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
14220 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
14230 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
14240 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
14250 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
14260 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
14270 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
14280 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
14290 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
142a0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
142b0 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
142c0 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
142d0 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
142e0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
142f0 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
14300 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
14310 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
14320 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
14330 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
14340 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
14350 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
14360 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
14370 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
14380 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
14390 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
143a0 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
143b0 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
143c0 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
143d0 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
143e0 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
143f0 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
14400 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
14410 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
14420 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
14430 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
14440 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
14450 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
14460 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
14470 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
14480 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
14490 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
144a0 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
144b0 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
144c0 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
144d0 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
144e0 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
14510 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
14520 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
14530 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
14540 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
14550 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
14560 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
14570 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
14580 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
145b0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
145c0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
145d0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
145e0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
145f0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
14600 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
14610 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
14620 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
14630 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
14640 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
14650 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
14660 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14670 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
14680 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
14690 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
146a0 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
146b0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
146c0 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
146d0 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
146e0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
146f0 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
14700 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
14710 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
14720 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
14730 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
14740 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
14750 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
14760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14770 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
14780 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
14790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
147a0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
147b0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
147c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
147d0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
147e0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
147f0 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
14800 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
14810 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
14820 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
14830 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
14840 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
14850 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
14880 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
14890 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
148a0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
148b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
148c0 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
148d0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
148e0 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
148f0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
14900 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
14910 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
14920 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
14930 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
14940 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
14950 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
14960 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
14970 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
149a0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
149b0 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
149c0 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
149e0 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
149f0 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
14a00 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
14a10 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
14a20 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
14a30 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
14a40 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
14a50 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
14a60 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
14a70 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
14a80 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
14a90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
14aa0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
14ab0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
14ac0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14ae0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
14af0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
14b00 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
14b10 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
14b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
14b30 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
14b40 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
14b50 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
14b60 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
14b70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
14b80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
14b90 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
14ba0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
14bb0 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
14bc0 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
14bd0 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
14be0 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
14bf0 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
14c00 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
14c10 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
14c20 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
14c30 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
14c40 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
14c50 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
14c60 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
14c70 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
14c80 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
14c90 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
14ca0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
14cb0 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
14cc0 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
14cd0 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
14ce0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
14cf0 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
14d00 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
14d10 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
14d20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
14d30 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
14d40 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
14d50 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
14d60 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
14d70 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
14d80 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
14d90 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
14da0 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
14db0 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
14dc0 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
14dd0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
14de0 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
14df0 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
14e00 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
14e10 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
14e20 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
14e30 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
14e40 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
14e50 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
14e60 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
14e70 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14e80 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
14e90 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
14ea0 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
14eb0 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
14ec0 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
14ed0 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
14ee0 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
14ef0 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
14f00 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
14f10 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
14f20 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
14f30 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
14f40 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
14f50 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
14f60 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
14f70 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
14f80 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
14f90 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
14fa0 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
14fb0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14fc0 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
14fd0 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
14fe0 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
14ff0 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
15000 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
15010 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
15020 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
15030 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
15040 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
15050 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
15060 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
15070 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
15080 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
15090 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
150a0 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
150b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
150c0 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
150d0 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
150e0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
150f0 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
15100 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
15110 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
15120 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
15130 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
15140 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
15150 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
15160 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
15170 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
15180 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
15190 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
151a0 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
151b0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
151c0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
151d0 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
151e0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
151f0 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
15200 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
15210 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
15220 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
15230 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
15240 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
15250 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
15260 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
15270 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
15280 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
15290 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
152a0 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
152b0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
152c0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
152d0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
152e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
152f0 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
15300 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
15310 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
15320 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
15330 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
15340 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
15350 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
15360 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
15370 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
15380 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
15390 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
153a0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
153b0 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
153c0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
153d0 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
153e0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
153f0 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
15400 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
15410 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
15420 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
15430 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
15440 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
15450 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
15460 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
15470 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
15480 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
15490 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
154a0 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
154b0 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
154c0 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
154d0 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
154e0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
154f0 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
15500 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
15510 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
15520 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
15530 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
15540 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
15550 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
15560 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
15570 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
15580 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
15590 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
155a0 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
155b0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
155c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
155d0 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
155e0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
155f0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
15600 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
15610 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15620 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
15630 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
15640 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
15650 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
15660 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
15670 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
15680 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
15690 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
156a0 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
156b0 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
156c0 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
156d0 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
156e0 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
156f0 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
15700 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
15710 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
15720 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
15730 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
15740 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
15750 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
15760 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
15770 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
15780 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
15790 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
157a0 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
157b0 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
157c0 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
157d0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
157e0 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
157f0 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
15800 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
15810 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
15820 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
15830 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
15840 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
15850 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
15860 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
15870 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
15880 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
15890 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
158a0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
158b0 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
158c0 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
158d0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
158e0 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
158f0 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
15900 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
15910 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
15920 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
15930 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
15940 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
15950 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15960 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
15970 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
15980 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
15990 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
159a0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
159b0 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
159c0 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
159d0 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
159e0 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
159f0 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
15a00 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
15a10 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
15a20 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
15a30 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
15a40 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
15a50 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
15a60 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
15a70 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
15a80 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
15a90 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
15aa0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
15ab0 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
15ac0 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
15ad0 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15af0 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
15b00 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
15b10 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
15b20 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
15b30 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
15b40 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
15b50 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
15b60 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
15b70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15b80 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
15b90 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
15ba0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
15bb0 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
15bc0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
15bd0 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
15be0 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
15bf0 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
15c00 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
15c10 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
15c20 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
15c30 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
15c40 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
15c50 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
15c60 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
15c70 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
15c80 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
15c90 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
15ca0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
15cb0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
15cc0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
15cd0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
15ce0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
15cf0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
15d00 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
15d10 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  . .  ***********
15d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
15d60 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
15d70 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
15d80 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
15d90 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
15da0 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
15db0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
15dc0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
15dd0 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
15de0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
15df0 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
15e00 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
15e10 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
15e20 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
15e30 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
15e40 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
15e50 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
15e60 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
15e70 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
15e80 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
15e90 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
15ea0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
15eb0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
15ec0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
15ed0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
15ee0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
15ef0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
15f00 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
15f10 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
15f20 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
15f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
15f70 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
15f80 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
15f90 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
15fa0 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
15fb0 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
15fc0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
15fd0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
15fe0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
15ff0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
16000 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16010 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
16020 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16040 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
16050 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
16080 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
16090 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
160c0 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
160d0 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f  es likelihood */
160e0 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
160f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
16100 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
16110 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
16120 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16140 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
16150 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
16160 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
16170 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
16180 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
16190 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
161a0 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
161b0 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
161c0 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
161d0 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
161e0 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
161f0 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
16200 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
16230 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
16240 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
16270 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
16280 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
162b0 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
162c0 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
162d0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
162e0 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
162f0 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
16300 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
16310 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
16320 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
16330 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
16340 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
16350 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  s. */.};../*.** 
16360 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
16370 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
16380 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
16390 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
163a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
163b0 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
163c0 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
163d0 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
163e0 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
163f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
16400 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
16410 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
16420 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
16430 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
16440 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
16450 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a  ved  0x000004 /*
16460 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
16470 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
16480 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
16490 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30  _Error     0x000
164a0 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  008 /* Expressio
164b0 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
164c0 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
164d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
164e0 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
164f0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
16500 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
16510 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
16520 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
16530 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
16540 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
16550 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
16560 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
16570 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
16580 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
16590 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
165a0 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
165b0 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
165c0 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
165d0 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
165e0 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
165f0 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
16600 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
16610 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
16620 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
16630 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
16640 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
16650 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
16660 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
16670 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
16680 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
16690 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
166a0 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
166b0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
166c0 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
166d0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
166e0 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
166f0 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
16700 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
16710 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
16720 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
16730 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
16740 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
16750 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
16760 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
16770 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
16780 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
16790 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
167a0 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
167b0 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
167c0 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
167d0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
167e0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
167f0 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
16800 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
16810 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
16820 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
16830 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
16840 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
16850 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
16860 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
16870 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
16880 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
16890 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
168a0 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
168b0 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
168c0 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
168d0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
168e0 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
168f0 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
16900 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
16910 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
16920 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e  fine EP_ConstFun
16930 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20  c 0x080000 /* A 
16940 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
16950 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47  TANT or _SLOCHNG
16960 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
16970 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
16980 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
16990 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
169a0 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
169b0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
169c0 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
169d0 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
169e0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
169f0 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
16a00 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73  #define EP_Alias
16a10 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a       0x400000 /*
16a20 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   Is an alias for
16a30 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f   a result set co
16a40 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  lumn */../*.** C
16a50 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
16a60 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
16a70 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
16a80 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
16a90 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
16aa0 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
16ab0 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
16ac0 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
16ad0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
16ae0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
16af0 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
16b00 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
16b10 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
16b20 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
16b30 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
16b40 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
16b50 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
16b60 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
16b70 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
16b80 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
16b90 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
16ba0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
16bb0 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
16bc0 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
16bd0 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
16be0 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
16bf0 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
16c00 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
16c10 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
16c20 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
16c30 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
16c40 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
16c50 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
16c60 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
16c70 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
16c80 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
16c90 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
16ca0 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
16cb0 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
16cc0 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
16cd0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
16ce0 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
16cf0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
16d00 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
16d10 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
16d20 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
16d30 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
16d40 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
16d50 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
16d60 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
16d70 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  pr .** struct, a
16d80 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
16d90 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
16da0 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
16db0 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64  pr.flags .** and
16dc0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
16dd0 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
16de0 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
16df0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
16e00 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
16e10 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
16e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
16e30 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
16e40 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
16e50 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
16e60 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
16e70 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
16e80 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
16e90 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
16ea0 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
16eb0 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
16ec0 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
16ed0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
16ee0 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
16ef0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
16f00 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
16f10 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
16f20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
16f30 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
16f40 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
16f50 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
16f60 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
16f70 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
16f80 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
16f90 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69  s */../*.** A li
16fa0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
16fb0 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
16fc0 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
16fd0 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
16fe0 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
16ff0 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
17000 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
17010 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
17020 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
17030 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
17040 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
17050 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
17060 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
17070 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
17080 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
17090 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
170a0 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
170b0 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
170c0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
170d0 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
170e0 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
170f0 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
17100 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
17110 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
17120 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
17130 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
17140 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
17150 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
17160 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
17170 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
17180 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
17190 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
171a0 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
171b0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
171c0 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
171d0 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
171e0 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
171f0 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
17200 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
17210 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
17220 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
17230 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
17240 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
17250 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
17260 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
17270 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
17280 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
17290 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
172a0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
172b0 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
172c0 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
172d0 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
172e0 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
172f0 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
17300 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
17310 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
17320 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17330 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
17340 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
17350 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
17360 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
17370 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
17380 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
17390 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
173a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
173b0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
173c0 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ons */.    char 
173d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
173e0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
173f0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
17400 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
17410 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
17420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
17430 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
17440 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
17450 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
17460 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
17470 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
17480 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
17490 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
174a0 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
174b0 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
174c0 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
174d0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
174e0 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
174f0 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
17500 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
17510 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
17520 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
17530 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
17540 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
17550 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
17560 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
17570 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
17580 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
17590 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
175a0 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
175b0 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
175c0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
175d0 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
175e0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
175f0 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
17600 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
17610 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
17620 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
17630 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
17640 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
17650 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
17660 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
17670 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *a;             
17680 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20       /* Alloc a 
17690 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65  power of two gre
176a0 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f  ater or equal to
176b0 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   nExpr */.};../*
176c0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
176d0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
176e0 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
176f0 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
17700 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
17710 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
17720 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
17730 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
17740 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
17750 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
17760 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
17770 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
17780 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17790 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
177a0 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
177b0 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
177c0 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
177d0 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
177e0 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
177f0 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
17800 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
17810 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
17820 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
17830 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17840 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17850 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
17860 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
17870 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
17880 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
17890 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
178a0 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
178b0 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
178c0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
178d0 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
178e0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
178f0 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
17900 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
17910 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
17920 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
17930 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
17940 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
17950 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
17960 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
17970 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
17980 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
17990 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
179a0 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
179b0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
179c0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
179d0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
179e0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
179f0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
17a00 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
17a10 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
17a20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
17a30 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
17a40 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
17a50 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
17a60 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
17a70 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17a80 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
17a90 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
17aa0 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
17ab0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
17ac0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
17ad0 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
17ae0 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
17af0 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
17b00 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
17b10 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
17b20 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
17b30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
17b40 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
17b50 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
17b60 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
17b70 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
17b80 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
17b90 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
17ba0 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
17bb0 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
17bc0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
17bd0 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
17be0 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
17bf0 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
17c00 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
17c10 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
17c20 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
17c30 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
17c40 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
17c50 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  ;../*.** The num
17c60 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
17c70 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
17c80 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
17c90 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
17ca0 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
17cb0 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
17cc0 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
17cd0 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
17ce0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
17cf0 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
17d00 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
17d10 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
17d20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
17d30 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  <(n))../*.** The
17d40 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
17d50 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
17d60 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
17d70 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
17d80 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
17d90 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
17da0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
17db0 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
17dc0 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
17dd0 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
17de0 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
17df0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
17e00 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
17e10 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
17e20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
17e30 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
17e40 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
17e50 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
17e60 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
17e70 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
17e80 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
17e90 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
17ea0 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
17eb0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
17ec0 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
17ed0 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
17ee0 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
17ef0 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
17f00 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
17f10 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
17f20 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
17f30 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
17f40 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
17f50 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
17f60 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
17f70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
17f80 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
17f90 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
17fa0 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
17fb0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
17fc0 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
17fd0 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
17fe0 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
17ff0 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
18000 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
18010 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
18020 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
18030 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
18040 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
18050 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
18060 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
18070 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
18080 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
18090 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
180a0 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
180b0 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
180c0 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
180d0 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
180e0 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
180f0 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
18100 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
18110 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
18120 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
18130 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
18140 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18150 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
18160 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
18170 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
18180 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
18190 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
181a0 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
181b0 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
181c0 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
181d0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
181e0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
181f0 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
18200 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
18210 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
18220 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
18230 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
18240 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
18250 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
18260 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
18270 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
18280 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
18290 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
182a0 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
182b0 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
182c0 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
182d0 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
182e0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
182f0 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
18300 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
18310 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
18320 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
18330 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
18340 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
18350 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
18360 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
18370 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
18380 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
18390 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
183a0 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
183b0 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
183c0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
183d0 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
183e0 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
183f0 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
18400 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
18410 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
18420 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
18430 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
18440 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
18450 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
18460 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
18470 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
18480 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
18490 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
184a0 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
184b0 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
184c0 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
184d0 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
184e0 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
184f0 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
18500 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
18510 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
18520 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
18530 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18540 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
18550 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
18560 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
18570 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
18580 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
18590 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
185a0 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
185b0 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
185c0 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
185d0 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
185e0 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
185f0 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
18600 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
18610 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
18620 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
18630 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
18640 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
18650 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23  H */.    } fg;.#
18660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18670 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
18680 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
18690 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
186a0 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
186b0 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
186c0 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
186d0 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
186e0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
186f0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
18700 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
18710 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
18720 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
18730 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
18740 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
18750 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
18760 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
18770 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
18780 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
18790 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
187a0 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
187b0 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
187c0 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
187d0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
187e0 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
187f0 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
18800 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
18810 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
18820 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
18830 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
18840 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
18850 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
18860 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
18870 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
18880 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
18890 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
188a0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
188b0 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
188c0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
188d0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
188e0 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
188f0 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
18900 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
18910 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
18920 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
18930 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
18940 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
18950 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
18960 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
18970 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
18980 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
18990 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
189a0 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
189b0 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
189c0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
189d0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
189e0 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
189f0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
18a00 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
18a10 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
18a20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
18a30 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
18a40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
18a50 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
18a60 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
18a70 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
18a80 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
18a90 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
18aa0 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
18ab0 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
18ac0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
18ad0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
18ae0 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
18af0 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
18b00 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
18b10 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
18b20 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
18b30 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
18b40 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
18b50 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
18b60 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
18b70 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
18b80 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
18b90 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
18ba0 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
18bb0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
18bc0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
18bd0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
18be0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
18bf0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
18c00 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
18c10 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
18c20 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
18c30 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
18c40 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
18c50 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
18c60 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
18c70 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
18c80 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
18c90 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
18ca0 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
18cb0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
18cc0 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
18cd0 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
18ce0 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
18cf0 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
18d00 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
18d10 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
18d20 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
18d30 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
18d40 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
18d50 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
18d60 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
18d70 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
18d80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
18d90 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
18da0 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
18db0 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
18dc0 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
18dd0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e  .#define WHERE_N
18de0 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20  O_AUTOINDEX     
18df0 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c  0x0080 /* Disall
18e00 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  ow automatic ind
18e10 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
18e20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
18e30 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
18e40 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
18e50 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
18e60 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18e70 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
18e80 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
18e90 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
18ea0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
18eb0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18ec0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
18ed0 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
18ee0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
18ef0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
18f00 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
18f10 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
18f20 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
18f30 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
18f40 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
18f50 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
18f60 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
18f70 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
18f80 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64  _ReopenIdx */.#d
18f90 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
18fa0 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32  ASS_MULTIROW 0x2
18fb0 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  000 /* ONEPASS i
18fc0 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
18fd0 6c 65 20 72 6f 77 73 20 2a 2f 0a 0a 2f 2a 20 41  le rows */../* A
18fe0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
18ff0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
19000 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
19010 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
19020 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
19030 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
19040 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
19050 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
19060 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
19070 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
19080 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
19090 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
190a0 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
190b0 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
190c0 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
190d0 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
190e0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
190f0 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
19100 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
19110 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
19120 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
19130 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
19140 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
19150 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
19160 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
19170 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
19180 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
19190 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
191a0 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
191b0 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
191c0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
191d0 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
191e0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
191f0 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
19200 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
19210 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
19220 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
19230 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
19240 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
19250 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
19260 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
19270 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
19280 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
19290 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
192a0 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
192b0 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
192c0 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
192d0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
192e0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
192f0 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
19300 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
19310 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
19320 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74  most .** context
19330 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
19340 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
19350 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
19360 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
19370 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
19380 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
19390 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
193a0 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
193b0 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
193c0 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
193d0 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
193e0 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
193f0 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
19400 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
19410 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
19420 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
19430 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
19440 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
19450 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
19460 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
19470 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62   .**.** Each sub
19480 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
19490 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
194a0 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
194b0 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
194c0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
194d0 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
194e0 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
194f0 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
19500 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
19510 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
19520 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
19530 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
19540 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
19550 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
19560 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
19570 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
19580 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
19590 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
195a0 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
195b0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
195c0 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
195d0 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
195e0 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
195f0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
19600 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
19610 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
19620 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
19630 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  s */.  AggInfo *
19640 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
19650 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
19660 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
19670 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
19680 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
19690 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
196a0 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
196b0 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
196c0 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
196d0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
196e0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
196f0 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
19700 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
19710 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
19720 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19730 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
19740 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
19750 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
19760 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  16 ncFlags;     
19770 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
19780 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
19790 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
197a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
197b0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
197c0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
197d0 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
197e0 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e  ** Note:  NC_Min
197f0 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61 76 65  MaxAgg must have
19800 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
19810 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  as SF_MinMaxAgg 
19820 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55  and.** SQLITE_FU
19830 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a  NC_MINMAX..** .*
19840 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
19850 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f  owAgg  0x0001  /
19860 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
19870 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
19880 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
19890 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
198a0 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0002  /* One or
198b0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
198c0 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
198d0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
198e0 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
198f0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
19900 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
19910 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
19920 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
19930 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
19940 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
19950 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
19960 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
19970 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
19980 49 64 78 20 20 20 30 78 30 30 31 30 20 20 2f 2a  Idx   0x0010  /*
19990 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
199a0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
199b0 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
199c0 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
199d0 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65   0x0020  /* True
199e0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f   if resolving co
199f0 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20  lumns of CREATE 
19a00 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
19a10 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
19a20 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
19a30 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
19a40 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
19a50 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
19a60 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
19a70 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19a80 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
19a90 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
19aa0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
19ab0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
19ac0 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
19ad0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
19ae0 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
19af0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
19b00 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
19b10 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
19b20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
19b30 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
19b40 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
19b50 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
19b60 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
19b70 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
19b80 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
19b90 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
19ba0 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
19bb0 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
19bc0 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
19bd0 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
19be0 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
19bf0 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
19c00 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
19c10 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
19c20 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
19c30 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
19c40 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
19c50 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
19c60 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
19c70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
19c80 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
19c90 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
19ca0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
19cb0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
19cc0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
19cd0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
19ce0 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
19cf0 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
19d00 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
19d10 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
19d20 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
19d30 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
19d40 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
19d50 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
19d60 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
19d70 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
19d80 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
19d90 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
19da0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
19db0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
19dc0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
19dd0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
19de0 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
19df0 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
19e00 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
19e10 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
19e20 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
19e30 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
19e40 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
19e50 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
19e60 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
19e70 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
19e80 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
19e90 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
19ea0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
19eb0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
19ec0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
19ed0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
19ef0 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
19f00 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
19f10 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
19f20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
19f30 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
19f40 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
19f50 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
19f60 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
19f70 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
19f80 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
19f90 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
19fa0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
19fb0 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20  _ENABLED.  char 
19fc0 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20  zSelName[12];   
19fd0 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61    /* Symbolic na
19fe0 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43  me of this SELEC
19ff0 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67  T use for debugg
1a000 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1a010 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
1a020 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
1a030 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
1a040 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
1a050 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e  elect */.  u64 n
1a060 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20  SelectRow;      
1a070 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
1a080 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
1a090 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
1a0a0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
1a0b0 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
1a0c0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1a0d0 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
1a0e0 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1a0f0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1a100 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
1a110 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
1a120 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1a130 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
1a140 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
1a150 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1a160 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1a170 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
1a180 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1a190 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
1a1a0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
1a1b0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
1a1c0 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
1a1d0 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
1a1e0 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
1a1f0 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
1a200 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
1a210 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
1a220 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
1a230 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
1a240 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
1a250 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
1a260 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
1a270 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
1a280 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
1a290 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1a2a0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
1a2b0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1a2c0 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
1a2d0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
1a2e0 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
1a2f0 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ULL. */.};../*.*
1a300 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1a310 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
1a320 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
1a330 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
1a340 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
1a350 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
1a360 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1a370 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
1a380 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1a390 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1a3a0 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1a3b0 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
1a3c0 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1a3d0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1a3e0 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1a3f0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
1a400 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1a410 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1a420 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1a430 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30  ggregate       0
1a440 78 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  x0008  /* Contai
1a450 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1a460 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1a470 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1a480 61 6c 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  al   0x0010  /* 
1a490 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1a4a0 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1a4b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1a4c0 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30  nded        0x00
1a4d0 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  20  /* sqlite3Se
1a4e0 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1a4f0 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1a500 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1a510 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 34 30  eInfo     0x0040
1a520 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1a530 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1a540 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1a550 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1a560 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f         0x0080  /
1a570 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1a580 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1a590 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1a5a0 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
1a5b0 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1a5c0 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1a5d0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1a5e0 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1a5f0 20 30 78 30 32 30 30 20 20 2f 2a 20 53 69 6e 67   0x0200  /* Sing
1a600 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1a610 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1a620 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1a630 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20  NestedFrom      
1a640 30 78 30 34 30 30 20 20 2f 2a 20 50 61 72 74 20  0x0400  /* Part 
1a650 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1a660 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1a670 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1a680 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30  beConvert    0x0
1a690 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  800  /* Need con
1a6a0 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1a6b0 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1a6c0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1a6d0 4d 61 78 41 67 67 20 20 20 20 20 20 20 30 78 31  MaxAgg       0x1
1a6e0 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1a6f0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1a700 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1a710 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1a720 69 76 65 20 20 20 20 20 20 20 30 78 32 30 30 30  ive       0x2000
1a730 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1a740 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1a750 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1a760 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74  efine SF_Convert
1a770 65 64 20 20 20 20 20 20 20 30 78 34 30 30 30 20  ed       0x4000 
1a780 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f   /* By convertCo
1a790 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1a7a0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1a7b0 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69  ine SF_IncludeHi
1a7c0 64 64 65 6e 20 20 20 30 78 38 30 30 30 20 20 2f  dden   0x8000  /
1a7d0 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e  * Include hidden
1a7e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70   columns in outp
1a7f0 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  ut */.../*.** Th
1a800 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
1a810 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
1a820 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
1a830 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
1a840 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
1a850 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1a860 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
1a870 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
1a880 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
1a890 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
1a8a0 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
1a8b0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1a8c0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
1a8d0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
1a8e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a8f0 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
1a900 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
1a910 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1a920 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
1a930 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
1a940 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
1a950 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
1a960 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1a970 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1a980 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
1a990 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
1a9a0 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
1a9b0 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1a9d0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
1a9e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1a9f0 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
1aa00 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
1aa10 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
1aa20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
1aa50 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
1aa60 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
1aa70 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1aa80 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
1aa90 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
1aaa0 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
1aab0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
1aac0 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
1aad0 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
1aae0 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
1aaf0 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
1ab00 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
1ab10 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1ab20 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
1ab30 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
1ab40 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
1ab50 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
1ab60 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
1ab90 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
1aba0 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
1abb0 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
1abc0 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
1abd0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
1abe0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
1abf0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ac00 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
1ac10 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
1ac20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
1ac30 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
1ac50 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
1ac60 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
1ac70 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
1aca0 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
1acb0 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
1acc0 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
1acd0 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1ace0 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
1acf0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
1ad00 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
1ad10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ad20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
1ad30 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
1ad40 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
1ad50 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad70 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1ad80 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1ad90 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1ada0 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1adb0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1adc0 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1add0 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1ade0 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1adf0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1ae00 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1ae10 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1ae20 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1ae30 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1ae50 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1ae60 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1ae70 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1aea0 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1aeb0 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1aec0 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1aed0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1aee0 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1aef0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1af00 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1af30 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1af40 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1af50 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1af60 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1af70 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1afa0 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1afb0 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1afc0 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1afe0 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1aff0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1b000 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1b010 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1b020 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1b030 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1b040 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1b050 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1b060 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1b070 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1b080 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1b090 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1b0a0 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1b0b0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1b0c0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1b0d0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1b0e0 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1b0f0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1b100 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1b110 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1b120 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1b140 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1b150 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1b160 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1b190 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1b1a0 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1b1b0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1b1c0 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1b1d0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1b1e0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1b1f0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1b200 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1b210 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1b220 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b240 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1b250 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1b260 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1b270 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1b280 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1b290 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1b2a0 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1b2b0 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1b2c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b2d0 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1b2e0 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1b2f0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1b300 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1b310 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1b320 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1b330 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1b340 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1b370 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
1b380 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
1b390 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
1b3c0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1b3d0 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
1b3e0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1b3f0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1b400 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
1b410 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
1b420 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1b430 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
1b440 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
1b450 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
1b480 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
1b490 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
1b4a0 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
1b4b0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1b4c0 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
1b4d0 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
1b4e0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1b4f0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
1b500 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
1b510 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
1b520 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
1b530 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
1b540 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
1b550 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
1b560 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
1b570 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b580 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
1b590 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
1b5a0 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
1b5b0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
1b5c0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
1b5d0 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
1b5e0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1b5f0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1b600 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
1b610 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
1b620 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
1b630 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
1b640 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
1b650 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
1b660 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
1b670 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
1b680 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
1b690 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
1b6a0 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
1b6b0 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
1b6c0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1b6d0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1b6e0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1b6f0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1b700 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1b710 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1b720 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1b730 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1b740 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1b750 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1b760 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1b770 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1b780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b790 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1b7a0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1b7b0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1b7c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b7d0 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1b7e0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1b7f0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1b800 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1b810 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1b820 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1b830 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1b840 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1b850 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1b860 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1b870 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1b880 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1b890 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1b8a0 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1b8b0 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1b8c0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1b8d0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1b8e0 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1b8f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1b900 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1b910 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1b920 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1b930 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1b940 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1b950 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1b960 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1b970 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1b980 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1b990 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1b9a0 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1b9b0 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
1b9c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
1b9d0 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1b9e0 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1b9f0 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
1ba00 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
1ba10 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
1ba20 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
1ba30 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
1ba40 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
1ba50 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1ba60 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
1ba70 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
1ba80 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
1ba90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1baa0 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
1bab0 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
1bac0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1bad0 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1bae0 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1baf0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1bb00 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1bb10 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1bb20 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1bb30 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1bb40 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1bb50 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
1bb60 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1bb70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1bb80 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1bb90 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1bba0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1bbb0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1bbc0 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1bbd0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1bbe0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1bbf0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1bc00 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1bc10 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1bc20 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1bc30 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1bc40 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1bc50 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
1bc60 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1bc70 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1bc80 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1bc90 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1bca0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1bcb0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1bcc0 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1bcd0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1bce0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1bcf0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1bd00 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1bd10 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1bd20 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1bd30 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1bd40 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1bd50 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1bd60 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1bd70 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1bd80 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1bd90 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bdb0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1bdc0 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1bdd0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1bde0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1bdf0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1be00 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1be10 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1be20 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1be30 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1be40 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1be50 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1be60 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1be70 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1be80 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1be90 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1bea0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1beb0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1bec0 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1bed0 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
1bee0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1bef0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1bf00 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1bf10 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1bf20 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1bf30 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1bf40 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1bf50 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1bf60 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1bf70 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1bf80 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1bf90 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1bfa0 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1bfb0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1bfc0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1bfd0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1bfe0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1bff0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1c000 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1c010 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1c020 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1c030 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1c040 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1c050 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1c060 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1c070 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1c080 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1c090 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1c0a0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1c0b0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1c0c0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1c0d0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1c0e0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1c0f0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1c100 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1c110 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1c120 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1c130 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1c140 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1c150 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1c160 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1c170 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1c180 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
1c190 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1c1a0 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1c1b0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1c1c0 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1c1d0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1c1e0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1c1f0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1c200 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1c210 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1c220 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1c230 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1c240 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1c250 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1c260 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1c270 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1c280 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1c290 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1c2a0 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1c2b0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1c2c0 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1c2d0 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1c2e0 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1c2f0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1c300 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1c310 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1c320 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1c330 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1c340 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1c350 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1c360 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1c370 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1c380 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1c390 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1c3a0 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1c3b0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1c3c0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1c3d0 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1c3e0 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1c3f0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1c400 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1c410 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1c420 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1c430 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1c440 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1c450 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1c460 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1c470 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1c480 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1c490 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1c4a0 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1c4b0 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1c4c0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1c4d0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1c4e0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1c4f0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1c500 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1c510 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1c520 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1c530 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1c540 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1c550 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1c560 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1c570 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1c580 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1c590 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1c5a0 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1c5b0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1c5c0 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1c5d0 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1c5e0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1c5f0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1c600 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1c610 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1c620 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1c630 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1c640 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1c650 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1c660 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1c670 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1c680 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1c690 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1c6a0 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1c6b0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1c6c0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1c6d0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1c6e0 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1c6f0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1c700 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1c710 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1c720 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1c730 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1c740 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1c750 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1c760 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1c770 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1c780 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1c790 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1c7a0 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1c7b0 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1c7c0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1c7d0 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1c7e0 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1c7f0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1c800 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1c810 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1c820 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1c830 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1c840 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1c850 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1c860 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1c870 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1c880 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1c890 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1c8a0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1c8b0 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1c8c0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1c8d0 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1c8e0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1c8f0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1c900 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1c910 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1c920 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1c930 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1c940 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1c950 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1c960 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1c970 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1c980 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1c990 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1c9a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1c9b0 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1c9c0 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1c9d0 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1c9e0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1c9f0 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1ca00 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1ca10 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1ca20 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1ca30 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1ca40 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1ca50 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1ca60 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1ca70 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1ca80 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1ca90 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1caa0 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1cab0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1cac0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1cad0 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1cae0 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1caf0 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1cb00 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1cb10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1cb20 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1cb30 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1cb40 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1cb50 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1cb60 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1cb70 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1cb80 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1cb90 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1cba0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1cbb0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1cbc0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1cbd0 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1cbe0 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1cbf0 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1cc00 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1cc10 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1cc20 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1cc30 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1cc40 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1cc50 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1cc60 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1cc70 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1cc80 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1cc90 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1cca0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1ccb0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1ccc0 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1ccd0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1cce0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1ccf0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1cd00 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1cd10 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1cd20 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1cd30 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1cd40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1cd50 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1cd60 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1cd70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1cd80 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1cd90 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1cda0 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1cdb0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1cdc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1cdd0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1cde0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1cdf0 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1ce00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1ce10 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1ce20 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1ce30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ce40 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1ce50 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1ce60 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1ce70 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1ce80 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1ce90 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1cea0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1ceb0 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
1cec0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
1ced0 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
1cee0 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1cef0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69  p[] */.  int iFi
1cf00 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a  xedOp;        /*
1cf10 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20   Never back out 
1cf20 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70  opcodes iFixedOp
1cf30 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f  -1 or earlier */
1cf40 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
1cf50 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1cf60 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
1cf70 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
1cf80 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
1cf90 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20  nt iSelfTab;    
1cfa0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20      /* Table of 
1cfb0 61 6e 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65  an index whose e
1cfc0 78 70 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  xprs are being c
1cfd0 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43  oded */.  int iC
1cfe0 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1cff0 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1d000 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1d010 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1d020 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1d030 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1d040 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1d050 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1d060 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1d070 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1d080 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1d090 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1d0a0 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1d0b0 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1d0c0 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1d0d0 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1d0e0 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1d0f0 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1d100 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1d110 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1d120 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1d130 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1d140 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1d150 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1d160 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1d170 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1d180 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1d190 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1d1a0 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1d1b0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1d1c0 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1d1d0 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1d1e0 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1d1f0 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1d200 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1d210 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1d220 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1d230 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1d240 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1d250 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1d260 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1d270 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1d280 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1d290 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1d2a0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1d2b0 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1d2c0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1d2d0 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1d2e0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1d2f0 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1d300 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1d310 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1d320 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1d330 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1d340 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1d350 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1d360 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1d370 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1d380 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1d390 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1d3a0 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1d3b0 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1d3c0 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
1d3d0 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
1d3e0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
1d3f0 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
1d400 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
1d410 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
1d420 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1d430 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1d440 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1d450 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1d460 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1d470 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1d480 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1d490 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1d4a0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1d4b0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1d4c0 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1d4d0 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1d4e0 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1d4f0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20  -program */.#if 
1d500 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1d510 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63  LED.  int nSelec
1d520 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
1d530 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
1d540 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a  tatements seen *
1d550 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49  /.  int nSelectI
1d560 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20  ndent;   /* How 
1d570 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45  far to indent SE
1d580 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70  LECTTRACE() outp
1d590 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ut */.#endif.#if
1d5a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1d5b0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1d5c0 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1d5d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d5e0 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1d5f0 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1d600 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1d610 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1d620 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1d630 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1d640 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1d650 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1d660 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1d670 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1d680 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1d690 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
1d6a0 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
1d6b0 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
1d6c0 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
1d6d0 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
1d6e0 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
1d6f0 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
1d700 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
1d710 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
1d720 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
1d730 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
1d740 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
1d750 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
1d760 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
1d770 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
1d780 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e  eTable opcode on
1d790 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1d7a0 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
1d7b0 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
1d7c0 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
1d7d0 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
1d7e0 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
1d7f0 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
1d800 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1d810 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
1d820 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1d830 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
1d840 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
1d850 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
1d860 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
1d870 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
1d880 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
1d890 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
1d8a0 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
1d8b0 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
1d8c0 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1d8d0 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
1d8e0 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
1d8f0 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1d900 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
1d910 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
1d920 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
1d930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d970 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1d980 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1d990 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1d9a0 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1d9b0 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1d9c0 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1d9d0 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1d9e0 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1d9f0 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1da00 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1da10 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1da20 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f  f(Parse,nVar) so
1da30 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20   the nVar field 
1da40 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73  must be the firs
1da50 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20  t field.  ** in 
1da60 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
1da70 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
1da80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1da90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1daa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dac0 2f 0a 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  /..  ynVar nVar;
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dae0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
1daf0 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
1db00 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
1db10 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
1db40 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
1db50 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
1db60 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1db70 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1db80 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1db90 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1dba0 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dbc0 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
1dbd0 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
1dbe0 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
1dbf0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1dc00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1dc10 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
1dc20 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
1dc30 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
1dc40 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1dc50 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
1dc60 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
1dc70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1dc80 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
1dc90 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
1dca0 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61  ndif.  int nAlia
1dcb0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1dcc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
1dcd0 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74  iased result set
1dce0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e   columns */.  in
1dcf0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
1dd00 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
1dd10 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
1dd20 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
1dd30 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
1dd40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
1dd50 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65  XPLAIN.  int iSe
1dd60 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20  lectId;         
1dd70 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72     /* ID of curr
1dd80 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45  ent select for E
1dd90 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1dda0 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65  .  int iNextSele
1ddb0 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ctId;        /* 
1ddc0 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  Next available s
1ddd0 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50  elect ID for EXP
1dde0 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  LAIN output */.#
1ddf0 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61  endif.  char **a
1de00 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1de10 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f    /* Pointers to
1de20 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65   names of parame
1de30 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  ters */.  Vdbe *
1de40 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
1de50 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
1de60 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
1de70 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
1de80 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1de90 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f  *zTail;        /
1dea0 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
1deb0 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
1dec0 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
1ded0 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
1dee0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ble;         /* 
1def0 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f  A table being co
1df00 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45  nstructed by CRE
1df10 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54  ATE TABLE */.  T
1df20 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
1df30 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
1df40 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
1df50 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
1df60 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
1df70 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
1df80 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
1df90 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
1dfa0 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
1dfb0 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  ks */.  Token sN
1dfc0 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
1dfd0 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
1dfe0 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
1dff0 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
1e000 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  /.  Token sLastT
1e010 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1e020 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
1e030 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65  parsed */.#ifnde
1e040 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1e050 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
1e060 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
1e070 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
1e080 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
1e090 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
1e0a0 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
1e0b0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
1e0c0 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
1e0d0 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
1e0e0 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
1e0f0 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
1e100 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
1e110 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
1e120 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
1e130 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
1e140 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1e150 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
1e160 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
1e170 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
1e180 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1e190 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1e1a0 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
1e1b0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1e1c0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1e1d0 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
1e1e0 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
1e1f0 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
1e200 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
1e210 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  */.};../*.** Ret
1e220 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
1e230 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
1e240 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1e250 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
1e260 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1e270 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1e280 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1e290 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
1e2a0 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
1e2b0 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
1e2c0 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
1e2d0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1e2e0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1e2f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1e300 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
1e310 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
1e320 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
1e330 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
1e340 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
1e350 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
1e360 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
1e370 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
1e380 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
1e390 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1e3a0 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
1e3b0 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
1e3c0 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
1e3d0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1e3e0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1e3f0 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
1e400 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
1e410 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
1e420 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
1e430 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
1e440 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  des..*/.#define 
1e450 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
1e460 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1e470 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74  OP_Insert: Set t
1e480 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1e490 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ange */.        
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e4c0 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20  Also used in P2 
1e4d0 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44  (not P5) of OP_D
1e4e0 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  elete */.#define
1e4f0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1e500 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1e510 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1e520 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1e530 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1e540 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1e550 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1e560 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1e570 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1e580 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1e590 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1e5a0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1e5b0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1e5c0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1e5d0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1e5e0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1e5f0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1e600 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1e610 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e620 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1e630 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1e640 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1e650 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1e660 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e670 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1e680 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1e690 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1e6a0 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1e6b0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1e6c0 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1e6d0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1e6e0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1e6f0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1e700 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1e710 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1e720 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1e730 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1e740 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1e750 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1e760 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1e770 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1e780 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1e790 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1e7a0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1e7b0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
1e7c0 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65  _Open should use
1e7d0 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
1e7e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e7f0 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
1e800 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74   0x10    /* P2 t
1e810 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
1e820 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
1e830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e840 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
1e850 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1e860 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
1e870 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23  permutation */.#
1e880 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41  define OPFLAG_SA
1e890 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32  VEPOSITION  0x02
1e8a0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
1e8b0 3a 20 6b 65 65 70 20 63 75 72 73 6f 72 20 70 6f  : keep cursor po
1e8c0 73 69 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  sition */.#defin
1e8d0 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
1e8e0 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
1e8f0 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
1e900 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
1e910 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  p */../*. * Each
1e920 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
1e930 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1e940 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
1e950 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
1e960 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
1e970 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
1e980 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
1e990 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1e9a0 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
1e9b0 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
1e9c0 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
1e9d0 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
1e9e0 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
1e9f0 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
1ea00 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
1ea10 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
1ea20 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
1ea30 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
1ea40 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
1ea50 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
1ea60 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1ea70 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
1ea80 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
1ea90 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
1eaa0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
1eab0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
1eac0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
1ead0 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
1eae0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1eaf0 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
1eb00 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
1eb10 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
1eb20 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
1eb30 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
1eb40 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
1eb50 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
1eb60 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
1eb70 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1eb80 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
1eb90 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
1eba0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
1ebb0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
1ebc0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
1ebd0 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
1ebe0 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
1ebf0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1ec00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1ec10 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
1ec20 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
1ec30 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
1ec40 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
1ec50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
1ec60 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
1ec70 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
1ec80 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
1ec90 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1eca0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1ecb0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1ecc0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1ecd0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
1ece0 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
1ecf0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1ed00 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
1ed10 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
1ed20 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
1ed30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1ed40 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1ed50 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
1ed60 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
1ed70 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
1ed80 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
1ed90 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
1eda0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
1edb0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
1ede0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
1edf0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
1ee00 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1ee10 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
1ee20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1ee30 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
1ee40 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
1ee50 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1ee60 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1ee70 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
1ee80 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
1ee90 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
1eea0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1eeb0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
1eec0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1eed0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1eee0 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1eef0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1ef00 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1ef10 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1ef20 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1ef30 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1ef40 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1ef50 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1ef60 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1ef70 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1ef80 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1ef90 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1efa0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1efb0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1efc0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1efd0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1efe0 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1eff0 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1f000 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1f010 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1f020 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1f030 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1f040 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1f050 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1f060 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1f070 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1f080 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1f090 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1f0a0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1f0b0 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1f0c0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1f0d0 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1f0e0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1f0f0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1f100 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1f110 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1f120 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1f130 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1f140 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1f150 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1f160 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1f170 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1f180 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1f190 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1f1a0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1f1b0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1f1c0 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1f1d0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1f1e0 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1f1f0 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1f200 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1f210 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1f220 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1f230 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1f240 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1f250 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1f260 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1f270 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1f280 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1f290 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1f2a0 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1f2b0 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1f2c0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1f2d0 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1f2e0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1f2f0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1f300 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1f310 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1f320 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1f330 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1f340 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1f350 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1f360 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65   NULL.. * zTarge
1f370 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
1f380 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1f390 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
1f3a0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1f3b0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1f3c0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1f3d0 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
1f3e0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1f3f0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1f400 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
1f410 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
1f420 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1f430 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
1f440 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1f450 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
1f460 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
1f470 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20  UES ... . *     
1f480 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1f490 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
1f4a0 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
1f4b0 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
1f4d0 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
1f4e0 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
1f4f0 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
1f500 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
1f510 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1f520 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
1f530 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1f540 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1f550 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
1f560 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1f570 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1f580 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1f590 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a  rwise NULL.. * .
1f5a0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
1f5b0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
1f5c0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
1f5d0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1f5e0 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
1f5f0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1f600 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1f610 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1f620 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1f630 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1f640 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1f650 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1f660 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1f670 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1f680 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1f690 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1f6a0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1f6b0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1f6c0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1f6d0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1f6e0 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1f6f0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1f700 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1f710 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1f720 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f740 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1f750 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1f760 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1f770 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1f780 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1f790 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1f7a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1f7b0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1f7c0 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1f7d0 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1f7e0 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1f7f0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1f800 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1f810 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
1f820 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
1f830 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
1f840 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
1f850 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1f860 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1f870 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1f880 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1f890 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1f8a0 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1f8b0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1f8c0 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1f8d0 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1f8e0 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1f8f0 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
1f900 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
1f910 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
1f920 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
1f930 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
1f940 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
1f950 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
1f960 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1f970 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
1f980 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
1f990 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
1f9a0 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
1f9b0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1f9c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1f9d0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
1f9e0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
1f9f0 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
1fa00 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
1fa10 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
1fa20 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
1fa30 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
1fa40 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
1fa50 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20  t.  .*/.typedef 
1fa60 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
1fa70 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
1fa80 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
1fa90 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
1faa0 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
1fab0 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
1fac0 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
1fad0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1fae0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
1faf0 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
1fb00 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
1fb10 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
1fb20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
1fb30 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
1fb40 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
1fb50 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
1fb60 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
1fb70 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
1fb80 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
1fb90 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
1fba0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
1fbb0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
1fbc0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1fbd0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1fbe0 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
1fbf0 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
1fc00 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1fc10 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1fc20 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1fc30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1fc40 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
1fc50 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
1fc60 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
1fc70 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
1fc80 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
1fc90 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
1fca0 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
1fcb0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
1fcc0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
1fcd0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1fce0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
1fcf0 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
1fd00 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
1fd10 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
1fd20 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
1fd30 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
1fd40 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
1fd50 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
1fd60 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
1fd70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
1fd80 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
1fd90 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
1fda0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
1fdb0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
1fdc0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
1fdd0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
1fde0 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
1fdf0 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
1fe00 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
1fe10 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
1fe20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1fe30 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
1fe40 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
1fe50 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
1fe60 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1fe70 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1fe80 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1fe90 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1fea0 20 20 75 38 20 20 20 62 4d 61 6c 6c 6f 63 65 64    u8   bMalloced
1feb0 3b 20 20 20 20 20 20 2f 2a 20 7a 54 65 78 74 20  ;      /* zText 
1fec0 70 6f 69 6e 74 73 20 74 6f 20 61 6c 6c 6f 63 61  points to alloca
1fed0 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ted space */.};.
1fee0 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1fef0 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69  _NOMEM   1.#defi
1ff00 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  ne STRACCUM_TOOB
1ff10 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  IG  2../*.** A p
1ff20 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
1ff30 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
1ff40 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
1ff50 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
1ff60 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
1ff70 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
1ff80 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
1ff90 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
1ffa0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1ffb0 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
1ffc0 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
1ffd0 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
1ffe0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1fff0 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
20000 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
20010 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
20020 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
20030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
20040 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
20050 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
20060 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
20070 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
20080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
20090 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
200a0 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
200b0 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
200c0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
200d0 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
200e0 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
200f0 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
20100 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
20110 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
20120 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
20130 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
20140 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
20150 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
20160 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
20170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20180 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
20190 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
201a0 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
201b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201c0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
201d0 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
201e0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
201f0 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
20200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20210 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
20220 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
20230 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20250 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
20260 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
20270 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
20280 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
202a0 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
202b0 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
202c0 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d  scans */.  int m
202d0 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
202e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
202f0 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
20300 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e  ength */.  int n
20310 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20  everCorrupt;    
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20330 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61  Database is alwa
20340 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a  ys well-formed *
20350 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73  /.  int szLookas
20360 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
20370 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
20380 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
20390 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  r size */.  int 
203a0 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  nLookaside;     
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
203c0 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
203d0 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20  de buffer count 
203e0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
203f0 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
20400 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
20410 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
20420 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
20430 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
20440 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
20450 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
20460 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
20470 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
20480 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
20490 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
204a0 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
204b0 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
204c0 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204e0 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
204f0 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
20500 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20520 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
20530 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
20540 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
20550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
20560 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
20570 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
20580 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
20590 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
205a0 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
205b0 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
205c0 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
205d0 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
205e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
205f0 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
20600 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
20610 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  *pScratch;      
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20630 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a  Scratch memory *
20640 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63  /.  int szScratc
20650 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
20660 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
20670 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75   each scratch bu
20680 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ffer */.  int nS
20690 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
206a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
206b0 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68  umber of scratch
206c0 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
206d0 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206f0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
20700 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
20710 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
20720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
20730 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
20740 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
20750 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
20760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20770 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20780 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
20790 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
207a0 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
207b0 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
207c0 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
207d0 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
207e0 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
207f0 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
20800 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
20810 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
20820 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
20830 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20850 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
20860 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
20870 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
20880 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
20890 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
208a0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
208b0 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
208c0 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
208d0 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
208e0 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20900 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
20910 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
20920 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
20930 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
20940 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
20950 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
20960 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
20970 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
20980 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
20990 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
209a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
209b0 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
209c0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
209d0 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
209e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
209f0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
20a00 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
20a10 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
20a20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20a40 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
20a50 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
20a60 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
20a70 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
20a80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20a90 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
20aa0 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
20ab0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
20ac0 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
20ad0 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
20ae0 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
20af0 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
20b00 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
20b10 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
20b20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
20b30 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
20b40 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
20b70 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
20b80 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20b90 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
20ba0 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
20bb0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
20bc0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
20bd0 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
20be0 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
20bf0 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
20c00 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
20c10 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
20c20 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
20c30 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
20c40 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
20c50 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
20c60 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
20c70 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
20c80 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
20c90 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
20ca0 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
20cb0 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53  ch)(void*,int iS
20cc0 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c  rcLine,u8 eThis,
20cd0 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c  u8 eMx);  /* Cal
20ce0 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
20cf0 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b  *pVdbeBranchArg;
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
20d30 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ment */.#endif.#
20d40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20d50 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
20d60 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
20d70 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
20d80 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
20d90 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
20da0 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
20db0 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
20dc0 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
20dd0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
20de0 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
20df0 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  lls */.};../*.**
20e00 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
20e10 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
20e20 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
20e30 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
20e40 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
20e50 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
20e60 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
20e70 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
20e80 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
20e90 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
20ea0 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
20eb0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
20ec0 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
20ed0 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
20ee0 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
20ef0 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
20f00 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
20f10 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
20f20 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
20f30 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
20f40 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
20f50 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
20f60 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
20f70 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
20f80 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
20f90 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
20fa0 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
20fb0 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
20fc0 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
20fd0 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
20fe0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
20ff0 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
21000 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
21010 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
21020 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
21030 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
21040 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
21050 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
21060 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
21070 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
21080 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
21090 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
210a0 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
210b0 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  lker {.  Parse *
210c0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
210f0 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
21100 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
21110 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
21120 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
21130 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
21140 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
21150 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
21160 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
21170 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
21180 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
21190 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
211a0 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
211b0 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
211c0 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
211d0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20  ELECTs */.  int 
211e0 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21210 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
21220 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
21230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21250 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
21260 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
21270 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
21280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21290 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
212a0 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
212b0 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
212c0 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
212f0 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
21300 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21320 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75          /* A cou
21330 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
21340 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
21370 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
21380 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
21390 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
213a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
213b0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
213c0 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
213d0 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
213f0 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
21400 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
21410 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e    struct CCurHin
21420 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20  t *pCCurHint;   
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21440 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
21450 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 7d 20  orHint() */.  } 
21460 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
21470 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
21480 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
21490 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
214a0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
214b0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
214c0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
214d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
214e0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
214f0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
21500 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
21510 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
21520 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
21530 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
21540 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
21550 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
21560 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
21570 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
21580 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
21590 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
215a0 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
215b0 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
215c0 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
215d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
215e0 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
215f0 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
21600 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
21610 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
21620 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
21630 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
21640 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
21650 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
21660 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
21670 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
21680 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
21690 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
216a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
216b0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
216c0 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
216d0 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
216e0 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
216f0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
21700 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
21710 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
21720 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
21730 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
21740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21750 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21760 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
21770 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
21780 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
217a0 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
217b0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
217c0 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
217d0 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
217e0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
217f0 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
21800 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
21810 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
21820 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21830 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
21840 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
21850 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21870 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
21880 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
21890 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
218a0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
218b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
218c0 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
218d0 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
218e0 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
218f0 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20   *zCteErr;      
21900 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
21910 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
21920 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
21930 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
21940 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21950 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
21960 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
21970 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
21980 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
21990 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
219a0 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
219b0 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
219c0 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
219d0 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
219e0 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
219f0 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
21a00 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
21a10 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
21a20 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
21a30 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
21a40 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
21a50 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
21a60 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
21a70 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
21a80 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
21a90 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
21aa0 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  UG */../*.** Ass
21ab0 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
21ac0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
21ad0 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
21ae0 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
21af0 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
21b00 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
21b10 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
21b20 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
21b30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
21b40 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
21b50 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
21b60 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
21b70 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
21b80 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ba0 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
21bb0 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
21bc0 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
21be0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c10 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
21c20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
21c30 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
21c40 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
21c50 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
21c60 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
21c70 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
21c80 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
21c90 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
21ca0 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
21cb0 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
21cc0 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
21cd0 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
21ce0 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
21cf0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
21d00 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
21d10 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
21d20 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
21d30 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
21d40 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
21d50 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
21d60 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
21d70 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
21d80 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
21d90 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
21da0 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
21db0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
21dc0 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
21dd0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
21de0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
21df0 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
21e00 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
21e10 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
21e20 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
21e30 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
21e40 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
21e50 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
21e60 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
21e70 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
21e80 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
21e90 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
21ea0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
21eb0 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
21ec0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
21ed0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
21ee0 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
21ef0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
21f00 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
21f10 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
21f20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
21f30 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
21f40 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
21f50 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
21f60 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
21f70 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
21f80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
21f90 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
21fa0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
21fb0 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
21fc0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
21fd0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
21fe0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
21ff0 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
22000 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
22010 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
22020 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
22030 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
22040 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
22050 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22060 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
22070 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
22080 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
22090 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
220a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
220b0 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
220c0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
220d0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
220e0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
220f0 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
22100 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
22110 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
22120 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
22130 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
22140 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
22150 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
22160 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
22170 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
22180 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
22190 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
221a0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
221b0 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
221c0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
221d0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
221e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
221f0 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
22200 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
22210 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22220 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
22230 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
22240 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
22250 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
22260 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
22270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22280 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
22290 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
222a0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
222b0 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
222c0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
222d0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
222e0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
222f0 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
22300 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22310 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
22320 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
22330 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22340 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
22350 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
22360 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
22370 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
22380 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
22390 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
223a0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
223b0 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
223c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
223d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
223e0 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
223f0 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
22400 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
22410 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
22420 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
22430 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
22440 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22450 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
22460 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
22470 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
22480 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
22490 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
224a0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
224b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
224c0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
224d0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
224e0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
224f0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
22500 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
22510 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22520 78 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  x)).#endif.#ifnd
22530 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
22540 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
22550 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  GS.int sqlite3Is
22560 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64  IdChar(u8);.#end
22570 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  if../*.** Intern
22580 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
22590 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
225a0 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
225b0 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
225c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
225d0 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
225e0 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
225f0 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
22600 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
22610 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
22620 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
22630 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
22640 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
22650 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
22660 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
22670 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
22680 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
22690 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
226a0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
226b0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
226c0 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
226d0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
226e0 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
226f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
22700 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
22710 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
22720 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
22730 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
22740 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
22750 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
22760 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
22770 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
22780 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
22790 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
227a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
227b0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
227c0 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
227d0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
227e0 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
227f0 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
22800 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
22810 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
22820 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
22830 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
22840 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
22850 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
22860 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
22870 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
22880 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22890 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
228a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
228b0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
228c0 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d);.#ifndef SQLI
228d0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
228e0 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65  TEST.void sqlite
228f0 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
22900 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
22910 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
22920 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
22930 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
22940 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
22950 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
22960 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
22970 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
22980 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
22990 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
229a0 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
229b0 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
229c0 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
229d0 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
229e0 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
229f0 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
22a00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
22a10 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
22a20 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
22a30 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
22a40 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
22a50 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
22a60 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
22a70 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
22a80 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
22a90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
22aa0 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
22ab0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
22ac0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
22ad0 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
22ae0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
22af0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
22b00 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
22b10 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
22b20 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
22b30 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
22b40 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22b50 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
22b60 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
22b70 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
22b80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
22b90 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
22ba0 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
22bb0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
22bc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
22bd0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
22be0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
22bf0 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
22c00 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
22c10 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
22c20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
22c30 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
22c40 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
22c50 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
22c60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
22c70 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
22c80 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
22c90 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
22ca0 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
22cb0 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
22cc0 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
22cd0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
22ce0 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
22cf0 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
22d00 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
22d10 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
22d20 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
22d30 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
22d40 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
22d50 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
22d60 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
22d70 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
22d80 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
22d90 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
22da0 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  d);.#endif.#if !
22db0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
22dc0 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64  UTEX_OMIT) && !d
22dd0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
22de0 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64  TEX_NOOP).  void
22df0 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
22e00 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c  rrier(void);.#el
22e10 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
22e20 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
22e30 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74  ().#endif..sqlit
22e40 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
22e50 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29  StatusValue(int)
22e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
22e70 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29  atusUp(int, int)
22e80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
22e90 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e  atusDown(int, in
22ea0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22eb0 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28  StatusHighwater(
22ec0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41  int, int);../* A
22ed0 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73  ccess to mutexes
22ee0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
22ef0 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c  _status() */.sql
22f00 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
22f10 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28  te3Pcache1Mutex(
22f20 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d  void);.sqlite3_m
22f30 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c  utex *sqlite3Mal
22f40 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  locMutex(void);.
22f50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22f60 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
22f70 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
22f80 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
22f90 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
22fa0 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
22fb0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
22fc0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
22fd0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
22fe0 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
22ff0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
23000 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
23010 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
23020 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
23030 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
23040 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
23050 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
23060 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
23070 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
23080 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
23090 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
230a0 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
230c0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
230d0 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
230e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
230f0 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
23100 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
23110 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65  alues */.};..#de
23120 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
23130 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
23140 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23150 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
23160 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65  0x02.void sqlite
23170 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
23180 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
23190 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
231a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
231b0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
231c0 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
231d0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
231e0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
231f0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
23200 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
23210 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
23220 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23230 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
23240 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
23250 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
23260 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
23270 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
23280 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
23290 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
232a0 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
232b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
232c0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
232d0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
232e0 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
232f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
23300 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
23310 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
23320 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
23330 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
23340 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
23350 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
23360 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
23370 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
23380 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
23390 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
233a0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
233b0 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
233c0 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
233d0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
233e0 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
233f0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
23400 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e   With*, u8);.#en
23410 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
23420 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
23430 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
23440 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23450 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
23460 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
23470 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
23480 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
23490 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
234a0 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
234b0 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
234c0 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
234d0 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
234e0 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
234f0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
23500 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
23510 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
23520 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23530 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
23540 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
23550 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
23560 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23570 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
23580 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
23590 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
235a0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
235b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
235c0 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
235d0 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
235e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
235f0 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
23600 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  rse*);.Expr *sql
23610 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
23620 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
23630 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
23640 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
23650 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23660 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23670 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
23680 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
23690 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
236a0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
236b0 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
236c0 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
236d0 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
236e0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
236f0 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33  3ExprAnd(sqlite3
23700 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  *,Expr*, Expr*);
23710 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
23720 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65  prFunction(Parse
23730 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  *,ExprList*, Tok
23740 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
23750 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e  e3ExprAssignVarN
23760 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78  umber(Parse*, Ex
23770 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
23780 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
23790 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
237a0 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
237b0 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
237c0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
237d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
237e0 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
237f0 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73  ortOrder(ExprLis
23800 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
23810 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
23820 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
23830 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
23840 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23850 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
23860 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
23870 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
23880 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
23890 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
238a0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
238b0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
238c0 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
238d0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
238e0 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
238f0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
23900 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
23910 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
23920 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
23930 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
23940 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
23950 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
23960 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23970 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
23980 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
23990 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
239a0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
239b0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
239c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
239d0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
239e0 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
239f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
23a00 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
23a10 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
23a20 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
23a30 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
23a40 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
23a50 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
23a60 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
23a70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
23a80 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c  ,Column**);.Tabl
23a90 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
23aa0 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
23ab0 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
23ac0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
23ad0 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
23ae0 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
23af0 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
23b00 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
23b10 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
23b20 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
23b30 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
23b40 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
23b50 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
23b60 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
23b70 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
23b80 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
23b90 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
23ba0 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
23bb0 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
23bc0 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
23bd0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
23be0 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
23bf0 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
23c00 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
23c10 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23c20 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
23c30 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
23c40 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
23c50 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
23c60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
23c70 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
23c80 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
23c90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23ca0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
23cb0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
23cc0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
23cd0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
23ce0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
23cf0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
23d00 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
23d10 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
23d20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23d30 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
23d40 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
23d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
23d60 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
23d70 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
23d80 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
23d90 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
23da0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
23db0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
23dc0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23dd0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
23de0 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
23df0 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
23e00 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
23e10 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
23e20 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
23e30 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
23e40 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  se *);..#ifdef S
23e50 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
23e60 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65  IN_TEST.# define
23e70 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23e80 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
23e90 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
23ea0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
23eb0 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
23ec0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
23ed0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
23ee0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
23ef0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
23f00 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
23f10 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
23f20 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
23f30 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
23f40 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
23f50 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
23f60 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
23f70 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
23f80 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
23f90 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
23fa0 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
23fb0 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
23fc0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23fd0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
23fe0 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  T.int sqlite3Bit
23ff0 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
24000 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66  nt,int*);.#endif
24010 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
24020 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
24030 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73  te3*, void*, uns
24040 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64  igned int);.void
24050 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
24060 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f  ear(RowSet*);.vo
24070 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
24080 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
24090 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
240a0 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
240b0 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c  et*, int iBatch,
240c0 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
240d0 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77  e3RowSetNext(Row
240e0 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f  Set*, i64*);..vo
240f0 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
24100 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65  View(Parse*,Toke
24110 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
24120 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
24130 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
24140 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
24150 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
24160 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
24170 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24180 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
24190 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
241a0 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
241b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
241c0 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
241d0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
241e0 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   0.#endif..#if S
241f0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
24200 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69  ED>30.  int sqli
24210 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
24220 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69  (yDbMask);.#endi
24230 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  f.void sqlite3Dr
24240 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
24250 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
24260 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24270 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
24280 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
24290 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
242a0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
242b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
242c0 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
242d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
242e0 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
242f0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
24300 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
24310 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
24320 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
24330 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
24340 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
24350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
24360 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
24370 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
24380 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
24390 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f  End(X).#endif.vo
243a0 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
243b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
243c0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
243d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
243e0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
243f0 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
24400 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
24410 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
24420 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
24430 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
24440 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
24450 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
24460 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
24470 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
24480 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
24490 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
244a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
244b0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
244c0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
244d0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
244e0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
244f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
24500 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
24510 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
24520 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
24530 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
24540 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24560 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
24570 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
24580 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
24590 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
245a0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
245b0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
245c0 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
245d0 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
245e0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
245f0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
24600 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
24610 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
24620 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
24630 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
24640 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
24650 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
24660 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
24670 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
24680 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
24690 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
246a0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
246b0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
246c0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
246d0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
246e0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
246f0 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
24700 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
24710 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
24720 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
24730 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
24740 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
24750 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
24760 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
24770 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
24780 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24790 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
247a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
247b0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
247c0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
247d0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
247e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
247f0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
24800 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
24810 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
24820 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
24830 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
24840 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
24850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24860 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
24870 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
24880 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
24890 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
248a0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
248b0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
248c0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
248d0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
248e0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
248f0 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
24900 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
24910 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24920 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
24930 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
24940 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
24950 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
24960 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
24970 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
24980 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
24990 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
249a0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
249b0 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
249c0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
249d0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
249e0 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
249f0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
24a00 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
24a10 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
24a20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
24a30 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
24a40 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
24a50 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
24a60 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
24a70 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
24a80 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
24a90 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
24aa0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
24ab0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24ac0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
24ad0 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
24ae0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
24af0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
24b00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24b10 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
24b20 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
24b30 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
24b40 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
24b50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
24b60 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
24b70 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
24b80 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
24b90 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
24ba0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24bb0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
24bc0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
24bd0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
24be0 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
24bf0 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
24c00 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
24c10 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
24c20 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
24c30 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
24c40 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
24c50 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
24c60 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
24c70 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
24c80 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
24c90 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
24ca0 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
24cb0 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
24cc0 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
24cd0 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
24ce0 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
24cf0 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
24d00 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
24d10 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
24d20 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
24d30 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
24d40 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
24d50 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
24d60 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
24d70 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72  tColumnToReg(Par
24d80 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
24d90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24da0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
24db0 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
24dc0 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
24dd0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
24de0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24df0 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
24e00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
24e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24e20 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
24e30 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
24e40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24e50 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
24e60 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
24e70 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
24e80 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
24e90 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
24ea0 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
24eb0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24ec0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
24ed0 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
24ee0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
24ef0 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
24f00 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
24f10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24f20 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
24f30 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
24f40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
24f50 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
24f60 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
24f70 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24f80 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
24f90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
24fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24fb0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
24fc0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
24fd0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
24fe0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
24ff0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
25000 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25010 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
25020 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
25030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25040 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
25050 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
25060 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25070 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
25080 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
25090 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
250a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
250b0 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
250c0 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
250d0 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
250e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
250f0 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
25100 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
25110 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
25120 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
25130 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
25140 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
25150 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
25160 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64  derByCol */.void
25170 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
25180 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
25190 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
251a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
251b0 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
251c0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
251d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
251e0 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a  fFalseDup(Parse*
251f0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
25200 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
25210 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
25220 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
25230 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25240 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
25250 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
25260 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73  ,int isView,cons
25270 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
25280 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
25290 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
252a0 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20  Item(Parse*,int 
252b0 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72  isView,struct Sr
252c0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
252d0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
252e0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
252f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25300 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25310 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
25320 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
25330 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
25340 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25350 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
25360 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
25370 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
25380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25390 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
253a0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
253b0 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
253c0 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
253d0 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
253e0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
253f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25400 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72  ExprCompare(Expr
25410 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
25420 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
25430 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
25440 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
25450 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25460 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
25470 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  r(Expr*, Expr*, 
25480 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25490 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
254a0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
254b0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
254c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
254d0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
254e0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
254f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
25500 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
25510 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
25520 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
25530 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
25540 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
25550 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
25560 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
25570 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
25580 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
25590 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
255a0 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
255b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
255c0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
255d0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
255e0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
255f0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
25600 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25610 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
25620 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
25630 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
25640 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
25650 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
25660 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
25670 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
25680 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
25690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
256a0 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
256b0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
256c0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
256d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
256e0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
256f0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
25700 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
25710 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
25720 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
25730 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
25740 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
25750 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
25760 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25770 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
25780 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
25790 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
257a0 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
257b0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
257c0 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
257d0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
257e0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
257f0 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
25800 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74  _HINTS.int sqlit
25810 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75  e3ExprContainsSu
25820 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23  bquery(Expr*);.#
25830 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
25840 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
25850 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
25860 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
25870 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
25880 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
25890 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
258a0 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
258b0 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
258c0 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
258d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
258e0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
258f0 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20  teRowDelete(.   
25900 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54   Parse*,Table*,T
25910 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
25920 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
25930 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25940 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
25950 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
25960 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
25970 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
25980 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
25990 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
259a0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
259b0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
259c0 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
259d0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
259e0 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
259f0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
25a00 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
25a10 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
25a20 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
25a30 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
25a40 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
25a70 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  t,int*);.void sq
25a80 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
25a90 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
25aa0 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
25ab0 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
25ac0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
25ad0 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
25ae0 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
25af0 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c  *, int, u8, int,
25b00 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
25b10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25b20 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
25b30 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
25b40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25b50 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
25b60 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25b70 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
25b80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25b90 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
25ba0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
25bb0 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
25bc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
25bd0 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
25be0 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
25bf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25c00 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
25c10 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
25c20 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
25c30 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
25c40 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
25c50 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
25c60 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
25c70 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
25c80 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
25c90 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
25ca0 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
25cb0 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
25cc0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
25cd0 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
25ce0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
25cf0 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
25d00 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
25d10 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54  nt);.#if SELECTT
25d20 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69  RACE_ENABLED.voi
25d30 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  d sqlite3SelectS
25d40 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63  etName(Select*,c
25d50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
25d60 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25d70 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
25d80 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
25d90 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
25da0 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
25db0 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
25dc0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
25dd0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
25de0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
25df0 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
25e00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25e10 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
25e20 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
25e30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25e40 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
25e50 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
25e60 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
25e70 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
25e80 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
25e90 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
25ea0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
25eb0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
25ec0 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
25ed0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
25ee0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
25ef0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
25f00 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
25f10 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
25f20 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
25f30 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
25f40 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
25f50 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
25f60 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
25f70 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
25f80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25f90 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
25fa0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
25fb0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
25fc0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
25fd0 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
25fe0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26000 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
26010 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
26020 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
26030 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
26040 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
26050 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
26060 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
26070 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
26080 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
26090 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
260a0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
260b0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
260c0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
260d0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
260e0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
260f0 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
26100 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
26110 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
26120 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
26130 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
26140 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
26150 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
26160 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
26170 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
261a0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
261b0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
261c0 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
261d0 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
261e0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
261f0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
26200 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
26210 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
26220 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
26230 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
26240 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26250 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
26260 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
26270 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
26280 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
26290 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
262a0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
262b0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
262c0 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
262d0 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
262e0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
262f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26310 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
26320 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
26330 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
26340 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
26350 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
26360 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
26370 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
26380 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
26390 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
263a0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
263b0 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
263c0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
263d0 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
263e0 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
263f0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
26400 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
26410 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
26420 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
26430 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
26440 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
26450 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
26460 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
26470 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
26480 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
26490 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
264a0 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
264b0 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
264c0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
264d0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
264e0 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
264f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26500 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
26510 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
26520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
26530 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
26540 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26550 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
26560 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
26570 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
26580 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
26590 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
265a0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
265b0 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
265c0 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
265d0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
265e0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
265f0 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
26600 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
26610 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
26620 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
26630 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
26640 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26650 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
26660 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
26670 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
26680 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
26690 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
266a0 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
266b0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
266c0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
266d0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
266e0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
266f0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
26700 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
26710 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26720 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
26730 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
26740 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26750 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
26760 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
26770 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
26780 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
26790 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
267a0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
267b0 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
267c0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
267d0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
267e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
267f0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
26800 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
26810 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
26820 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
26830 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
26840 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
26850 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
26860 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
26870 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
26880 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
26890 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
268a0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
268b0 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
268c0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
268d0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
268e0 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
268f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
26900 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
26910 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
26920 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
26930 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
26940 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
26950 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
26960 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
26970 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
26980 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
26990 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
269a0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
269b0 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
269c0 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
269d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
269e0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
269f0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
26a00 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
26a10 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
26a20 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
26a30 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
26a40 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
26a50 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
26a60 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
26a70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
26a80 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
26a90 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
26aa0 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
26ab0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
26ac0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
26ad0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
26ae0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
26af0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
26b00 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
26b10 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
26b20 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
26b30 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
26b40 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
26b50 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
26b60 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
26b70 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
26b80 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
26b90 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
26ba0 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
26bb0 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
26bc0 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
26bd0 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
26be0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
26bf0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
26c00 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
26c10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26c20 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
26c30 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
26c40 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
26c50 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c  ;.#endif.u64 sql
26c60 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
26c70 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  LogEst);../*.** 
26c80 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
26c90 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
26ca0 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
26cb0 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
26cc0 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
26cd0 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
26ce0 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
26cf0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
26d00 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
26d10 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
26d20 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
26d30 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
26d40 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
26d50 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
26d60 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
26d70 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
26d80 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
26d90 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
26da0 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
26db0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
26dc0 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
26dd0 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
26de0 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
26df0 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
26e00 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
26e10 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
26e20 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
26e30 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
26e40 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
26e50 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
26e60 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
26e70 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
26e80 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
26e90 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
26ea0 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
26eb0 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
26ec0 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
26ed0 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
26ee0 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
26ef0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
26f00 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
26f10 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
26f20 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
26f30 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
26f40 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
26f50 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
26f60 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
26f70 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
26f80 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
26f90 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
26fa0 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
26fb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
26fc0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
26fd0 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  Str(sqlite3*, In
26fe0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
26ff0 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
27000 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
27010 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
27020 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
27030 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
27040 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
27050 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
27060 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
27070 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
27080 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
27090 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
270a0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
270b0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
270c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
270d0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
270e0 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
270f0 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72  ToI64(const char
27100 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
27110 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
27120 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  sg(sqlite3*, int
27130 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
27140 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
27150 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
27160 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
27170 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
27180 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
27190 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
271a0 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
271b0 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
271c0 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
271d0 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
271e0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
271f0 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
27200 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
27210 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
27220 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
27230 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
27240 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
27250 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
27260 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
27270 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
27280 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
27290 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
272a0 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
272b0 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
272c0 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
272d0 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
272e0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
272f0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
27300 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
27310 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
27320 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
27330 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
27340 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
27350 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
27360 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
27370 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
27380 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
27390 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
273a0 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
273b0 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
273c0 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
273d0 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
273e0 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
273f0 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
27400 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
27410 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
27420 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
27430 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
27440 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
27450 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
27460 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
27470 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27480 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
27490 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
274a0 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
274b0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
274c0 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
274d0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
274e0 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
274f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27500 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
27510 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
27520 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
27530 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
27540 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27550 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
27560 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
27570 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
27580 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
27590 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
275a0 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
275b0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
275c0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
275d0 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
275e0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
275f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
27600 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
27610 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
27620 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27640 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
27650 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
27660 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
27670 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
27680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
27690 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
276a0 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
276b0 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
276c0 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
276d0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
276e0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
276f0 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
27700 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
27710 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
27720 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
27730 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
27740 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
27750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
27760 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
27770 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
27780 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
27790 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
277a0 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
277b0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
277c0 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
277d0 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
277e0 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  n const char sql
277f0 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b  ite3StrBINARY[];
27800 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
27810 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
27820 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
27830 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
27840 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
27850 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
27860 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
27870 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
27880 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
27890 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
278a0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
278b0 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
278c0 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
278d0 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
278e0 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  te3GlobalFunctio
278f0 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
27900 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
27910 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
27920 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
27930 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
27940 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
27950 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
27960 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27970 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
27980 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
27990 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
279a0 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
279b0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
279c0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
279d0 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
279e0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
279f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
27a00 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
27a10 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
27a20 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
27a30 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
27a40 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
27a50 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
27a60 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
27a70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
27a80 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
27a90 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
27aa0 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ct(Parse *, Expr
27ab0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
27ac0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
27ad0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
27ae0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
27af0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
27b00 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
27b10 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
27b20 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
27b30 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
27b40 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
27b50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27b60 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
27b70 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
27b80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
27b90 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
27ba0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
27bb0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
27bc0 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
27bd0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
27be0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
27bf0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
27c00 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
27c10 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
27c20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
27c30 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
27c40 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
27c50 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
27c60 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
27c70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
27c80 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
27c90 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
27ca0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
27cb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
27cc0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
27cd0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
27ce0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
27cf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
27d00 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
27d10 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
27d20 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
27d30 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
27d40 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
27d50 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
27d60 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
27d70 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
27d80 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
27d90 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
27da0 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
27db0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
27dc0 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
27dd0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
27de0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
27df0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
27e00 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
27e10 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
27e20 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
27e30 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
27e40 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
27e50 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
27e60 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
27e70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
27e80 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
27e90 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
27ea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
27eb0 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
27ec0 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
27ed0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
27ee0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
27ef0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
27f00 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
27f10 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
27f20 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27f30 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
27f40 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
27f50 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
27f60 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
27f70 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
27f80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27f90 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
27fa0 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
27fb0 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
27fc0 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
27fd0 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
27fe0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
27ff0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
28000 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
28010 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
28020 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
28030 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
28040 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
28050 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
28060 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
28070 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
28080 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
28090 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
280a0 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
280b0 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
280c0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
280d0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
280e0 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
280f0 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
28100 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
28110 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
28120 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
28130 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
28140 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
28150 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
28160 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
28170 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
28180 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
28190 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
281a0 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
281b0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
281c0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
281d0 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
281e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
281f0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
28200 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28210 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
28220 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
28230 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
28240 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
28250 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
28260 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
28270 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
28280 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
28290 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
282a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
282b0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
282c0 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  ll(StrAccum*,con
282d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
282e0 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61  sqlite3AppendCha
282f0 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c  r(StrAccum*,int,
28300 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c  char);.char *sql
28310 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
28320 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  sh(StrAccum*);.v
28330 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
28340 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
28350 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
28360 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28  3SelectDestInit(
28370 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c  SelectDest*,int,
28380 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
28390 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45  te3CreateColumnE
283a0 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53  xpr(sqlite3 *, S
283b0 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69  rcList *, int, i
283c0 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  nt);..void sqlit
283d0 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28  e3BackupRestart(
283e0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
283f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
28400 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69  ackupUpdate(sqli
28410 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67  te3_backup *, Pg
28420 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b  no, const u8 *);
28430 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
28440 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
28450 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
28460 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
28470 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
28480 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
28490 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49  etValue(Parse*,I
284a0 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
284b0 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c  cord**,Expr*,u8,
284c0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
284d0 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
284e0 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
284f0 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
28500 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
28510 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
28520 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
28530 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
28540 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
28550 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
28560 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
28570 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
28580 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  **);.#endif../*.
28590 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
285a0 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
285b0 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
285c0 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
285d0 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
285e0 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20  (*)(u64));.void 
285f0 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65  sqlite3ParserFre
28600 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29  e(void*, void(*)
28610 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
28620 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
28630 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
28640 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
28650 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
28660 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
28670 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
28680 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
28690 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
286a0 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
286b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
286c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
286d0 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
286e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
286f0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
28700 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
28710 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
28720 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
28730 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
28740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
28750 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
28760 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
28770 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
28780 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
28790 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
287a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
287b0 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
287c0 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
287d0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
287e0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
287f0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
28800 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
28810 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28820 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
28830 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
28840 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
28850 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
28860 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
28870 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
28880 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
28890 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
288a0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
288b0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
288c0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
288d0 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
288e0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
288f0 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71  X) .#  define sq
28900 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
28910 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
28920 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
28930 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
28940 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
28950 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
28960 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
28970 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
28980 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
28990 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
289a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
289b0 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
289c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
289d0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
289e0 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
289f0 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
28a00 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
28a10 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
28a20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
28a30 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
28a40 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
28a50 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
28a60 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
28a70 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
28a80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28a90 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
28aa0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
28ab0 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
28ac0 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
28ad0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
28ae0 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
28af0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
28b00 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
28b10 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
28b20 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
28b30 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
28b40 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
28b50 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
28b60 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
28b70 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
28b80 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20  le*);.#  define 
28b90 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
28ba0 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
28bb0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
28bc0 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
28bd0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
28be0 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
28bf0 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
28c00 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
28c10 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
28c20 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
28c30 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
28c40 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
28c50 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
28c60 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
28c70 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
28c80 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
28c90 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
28ca0 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
28cb0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
28cc0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
28cd0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
28ce0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
28cf0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
28d00 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
28d10 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
28d20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
28d30 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
28d40 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
28d50 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
28d60 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
28d70 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
28d80 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
28d90 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
28da0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
28db0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
28dc0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
28dd0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
28de0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
28df0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
28e00 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
28e10 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
28e20 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
28e30 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
28e40 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
28e50 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
28e60 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
28e70 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
28e80 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
28e90 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
28ea0 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
28eb0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
28ec0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
28ed0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
28ee0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
28ef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
28f00 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
28f10 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
28f20 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
28f30 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
28f40 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
28f50 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
28f60 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
28f70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
28f80 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
28f90 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
28fa0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
28fb0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
28fc0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
28fd0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
28fe0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
28ff0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
29000 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
29010 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
29020 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
29030 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
29040 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29050 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
29060 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
29070 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
29080 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
29090 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
290a0 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
290b0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
290c0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
290d0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
290e0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
290f0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
29100 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
29110 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
29120 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
29130 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
29140 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
29150 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
29160 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
29170 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
29180 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
29190 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
291a0 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
291b0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
291c0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
291d0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
291e0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
291f0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
29200 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
29210 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
29220 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
29230 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
29240 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
29250 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
29260 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
29270 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
29280 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
29290 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
292a0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
292b0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
292c0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
292d0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
292e0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
292f0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
29300 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
29310 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
29320 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76  lity is .** prov
29330 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
29340 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
29350 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
29360 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
29370 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
29380 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
29390 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
293a0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
293b0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
293c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
293d0 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
293e0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
293f0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
29400 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
29410 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
29420 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
29430 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29440 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
29450 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
29460 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
29470 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
29480 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
29490 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
294a0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
294b0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
294c0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
294d0 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
294e0 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
294f0 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
29500 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29510 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
29520 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
29530 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
29540 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
29550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
29560 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
29570 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29580 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
29590 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
295a0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
295b0 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
295c0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
295d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
295e0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
295f0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
29600 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
29610 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
29620 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
29630 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
29640 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
29650 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
29660 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
29670 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
29680 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
29690 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
296a0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
296b0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
296c0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
296d0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
296e0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
296f0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
29700 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
29710 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
29720 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
29730 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
29740 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
29750 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
29760 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
29770 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
29780 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
29790 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
297a0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
297b0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
297c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
297d0 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
297e0 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
297f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29800 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
29810 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
29820 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
29830 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
29840 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
29850 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
29860 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29870 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
29880 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
29890 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
298a0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
298b0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
298c0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
298d0 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
298e0 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
298f0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
29900 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
29910 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
29920 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
29930 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
29940 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
29950 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
29960 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
29970 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
29980 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
29990 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
299a0 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
299b0 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
299c0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
299d0 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
299e0 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
299f0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
29a00 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
29a10 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
29a20 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
29a30 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
29a40 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
29a50 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
29a60 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
29a70 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
29a80 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
29a90 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
29aa0 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
29ab0 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
29ac0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
29ad0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
29ae0 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
29af0 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
29b00 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
29b10 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
29b20 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
29b30 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
29b40 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
29b50 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
29b60 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
29b70 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
29b80 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
29b90 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64  32, int*);..#ifd
29ba0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
29bb0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
29bc0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
29bd0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
29be0 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
29bf0 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
29c00 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
29c10 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
29c20 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
29c30 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
29c40 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
29c50 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
29c60 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
29c70 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
29c80 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
29c90 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
29ca0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
29cb0 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
29cc0 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
29cd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
29ce0 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
29cf0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
29d00 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
29d10 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
29d20 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
29d30 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
29d40 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
29d50 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
29d60 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
29d70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29d80 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67  SetHeightAndFlag
29d90 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  s(Parse *pParse,
29da0 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53   Expr *p);.#if S
29db0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
29dc0 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c  EPTH>0.  int sql
29dd0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
29de0 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
29df0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
29e00 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
29e10 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
29e20 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29e30 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
29e40 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
29e50 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
29e60 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
29e70 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
29e80 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
29e90 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
29ea0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
29eb0 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
29ec0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
29ed0 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
29ee0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
29ef0 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
29f00 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
29f10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29f20 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
29f30 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
29f40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29f50 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
29f60 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
29f70 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
29f80 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
29f90 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
29fa0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
29fb0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
29fc0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
29fd0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
29fe0 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
29ff0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2a000 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
2a010 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
2a020 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
2a030 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
2a040 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
2a050 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
2a060 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
2a070 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
2a080 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
2a090 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
2a0a0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
2a0b0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
2a0c0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
2a0d0 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
2a0e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2a0f0 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
2a100 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
2a110 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2a120 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
2a130 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
2a140 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2a150 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
2a160 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58  TE_API SQLITE_EX
2a170 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54  TERN void (SQLIT
2a180 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
2a190 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
2a1a0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
2a1b0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2a1c0 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
2a1d0 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2a1e0 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
2a1f0 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
2a200 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
2a210 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
2a220 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
2a230 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
2a240 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
2a250 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
2a260 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
2a270 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
2a280 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
2a290 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
2a2a0 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
2a2b0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2a2c0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2a2d0 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
2a2e0 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
2a2f0 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
2a300 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
2a310 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
2a320 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
2a330 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
2a340 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
2a350 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
2a360 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2a370 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
2a380 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
2a390 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
2a3a0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
2a3b0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
2a3c0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
2a3d0 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
2a3e0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
2a3f0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2a400 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
2a410 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
2a420 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
2a430 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
2a440 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2a450 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
2a460 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
2a470 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2a480 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2a490 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2a4a0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2a4b0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2a4c0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2a4d0 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
2a4e0 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
2a4f0 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
2a500 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2a510 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
2a520 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
2a530 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
2a540 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
2a550 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
2a560 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
2a570 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2a580 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
2a590 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
2a5a0 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
2a5b0 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
2a5c0 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
2a5d0 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
2a5e0 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
2a5f0 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
2a600 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
2a610 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2a620 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
2a630 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
2a640 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
2a650 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
2a660 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2a670 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
2a680 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
2a690 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
2a6a0 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
2a6b0 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
2a6c0 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
2a6d0 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
2a6e0 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41  traint. .**.** A
2a6f0 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
2a700 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
2a710 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
2a720 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
2a730 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
2a740 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
2a750 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
2a760 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
2a770 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
2a780 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
2a790 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2a7a0 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
2a7b0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2a7c0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
2a7d0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2a7e0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
2a7f0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2a800 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2a810 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2a820 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
2a830 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
2a840 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2a850 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
2a860 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a870 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
2a880 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
2a890 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
2a8a0 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
2a8b0 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
2a8c0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
2a8d0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
2a8e0 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
2a8f0 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67  /* Heap that mig
2a900 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
2a910 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e  kaside */.#defin
2a920 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43  e MEMTYPE_SCRATC
2a930 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63  H    0x04  /* Sc
2a940 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e  ratch allocation
2a950 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
2a960 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
2a970 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61  0x08  /* Page ca
2a980 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
2a990 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
2a9a0 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
2a9b0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2a9c0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
2a9d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2a9e0 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
2a9f0 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
2aa00 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
2aa10 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
2aa20 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
2aa30 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
2aa40 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
2aa50 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2aa60 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20  DBSTAT_VTAB) || 
2aa70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
2aa80 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
2aa90 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73  DbstatRegister(s
2aaa0 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
2aab0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c  ..#endif /* _SQL
2aac0 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a           ITEINT_H_ */.