/ Hex Artifact Content
Login

Artifact f14033fa6da3ca70f7dde5ba19dc1ed58055a2d7:


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 41 20  #endif../*.** A 
18f0: 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f  macro to hint to
1900: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
1910: 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68  at a function sh
1920: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69  ould not be.** i
1930: 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  nlined..*/.#if d
1940: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1950: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1960: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74  E_NOINLINE  __at
1970: 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c  tribute__((noinl
1980: 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69  ine)).#elif defi
1990: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
19a0: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a   _MSC_VER>=1310.
19b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
19c0: 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63  _NOINLINE  __dec
19d0: 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a  lspec(noinline).
19e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
19f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a  SQLITE_NOINLINE.
1a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a10: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
1a20: 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e   compiler intrin
1a30: 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20 61  sics we desire a
1a40: 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a  re enabled when.
1a50: 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74  ** compiling wit
1a60: 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  h an appropriate
1a70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43   version of MSVC
1a80: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
1a90: 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d  (_MSC_VER) && _M
1aa0: 53 43 5f 56 45 52 3e 3d 31 33 30 30 0a 23 20 20  SC_VER>=1300.#  
1ab0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
1ac0: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 69 6e 63  32_WCE).#    inc
1ad0: 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a  lude <intrin.h>.
1ae0: 23 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72  #    pragma intr
1af0: 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f  insic(_byteswap_
1b00: 75 73 68 6f 72 74 29 0a 23 20 20 20 20 70 72 61  ushort).#    pra
1b10: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
1b20: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
1b30: 20 20 65 6c 73 65 0a 23 20 20 20 20 69 6e 63 6c    else.#    incl
1b40: 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68  ude <cmnintrin.h
1b50: 3e 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69  >.#  endif.#endi
1b60: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
1b70: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d  ITE_THREADSAFE m
1b80: 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66  acro must be def
1b90: 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72  ined as 0, 1, or
1ba0: 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d   2..** 0 means m
1bb0: 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d 61  utexes are perma
1bc0: 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61  nently disable a
1bd0: 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  nd the library i
1be0: 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61  s never.** threa
1bf0: 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20  dsafe.  1 means 
1c00: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 73  the library is s
1c10: 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20  erialized which 
1c20: 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a  is the highest.*
1c30: 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61  * level of threa
1c40: 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e  dsafety.  2 mean
1c50: 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  s the library is
1c60: 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d   multithreaded -
1c70: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72   multiple.** thr
1c80: 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c  eads can use SQL
1c90: 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e  ite as long as n
1ca0: 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74 72  o two threads tr
1cb0: 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  y to use the sam
1cc0: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
1cd0: 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20  nnection at the 
1ce0: 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  same time..**.**
1cf0: 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20   Older versions 
1d00: 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20 61  of SQLite used a
1d10: 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41  n optional THREA
1d20: 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20  DSAFE macro..** 
1d30: 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74 20  We support that 
1d40: 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23  for legacy..*/.#
1d50: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1d60: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
1d70: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
1d80: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
1d90: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
1da0: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
1db0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
1dc0: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
1dd0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
1de0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
1df0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
1e00: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
1e10: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
1e20: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
1e30: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
1e40: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
1e50: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
1e60: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
1e70: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
1e80: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
1e90: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
1ea0: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
1eb0: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
1ec0: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
1ed0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
1ee0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
1ef0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
1f00: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
1f10: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
1f20: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
1f30: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
1f40: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
1f50: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
1f60: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
1f70: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
1f80: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
1f90: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
1fa0: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
1fb0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1fc0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1fd0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
1fe0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
1ff0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2000: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2010: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2020: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2030: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2040: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2050: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2060: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2070: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2080: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2090: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
20a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
20b0: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
20c0: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
20d0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20e0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
20f0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2100: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2110: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2120: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2130: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2140: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2150: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2160: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2180: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2190: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
21a0: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
21b0: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
21c0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
21d0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
21e0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
21f0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2200: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2210: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2220: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2230: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2240: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2250: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2260: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2270: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2280: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2290: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
22a0: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
22b0: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
22c0: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
22d0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
22e0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
22f0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2300: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2310: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2320: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2330: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2340: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2350: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2360: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2370: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2380: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2390: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
23a0: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
23b0: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
23c0: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
23d0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
23e0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
23f0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2400: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2410: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2420: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2430: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2440: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2450: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2460: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2470: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2480: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2490: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
24a0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
24b0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
24c0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
24d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
24e0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
24f0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2500: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2510: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2520: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
2530: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
2540: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
2550: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
2560: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2570: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
2580: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
2590: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
25a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
25b0: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
25c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
25d0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
25e0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
25f0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
2600: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
2610: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
2620: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
2630: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
2640: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
2650: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
2660: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
2670: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
2680: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
2690: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
26a0: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
26b0: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
26c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
26d0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
26e0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
26f0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
2700: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
2710: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
2720: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
2730: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
2740: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
2750: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
2760: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
2770: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
2780: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
2790: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27a0: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
27b0: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
27c0: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
27d0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
27e0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
27f0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
2800: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
2810: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
2820: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
2830: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
2840: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
2850: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
2860: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
2870: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
2880: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
2890: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
28a0: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
28b0: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
28c0: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
28d0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
28e0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
28f0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
2900: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
2910: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
2920: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2930: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
2940: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2950: 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42  ) .# define NDEB
2960: 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20  UG 1.#endif.#if 
2970: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
2980: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
2990: 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66  E_DEBUG).# undef
29a0: 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a   NDEBUG.#endif..
29b0: 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c  /*.** Enable SQL
29c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
29d0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53  IN_COMMENTS if S
29e0: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74  QLITE_DEBUG is t
29f0: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
2a00: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a10: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
2a20: 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66  COMMENTS) && def
2a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
2a40: 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  G).# define SQLI
2a50: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
2a60: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e  N_COMMENTS 1.#en
2a70: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74  dif../*.** The t
2a80: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
2a90: 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69  is used to aid i
2aa0: 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  n coverage testi
2ab0: 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64 6f  ng.  When .** do
2ac0: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
2ad0: 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74  ting, the condit
2ae0: 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61  ion inside the a
2af0: 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65  rgument to.** te
2b00: 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62 65  stcase() must be
2b10: 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20   evaluated both 
2b20: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69  true and false i
2b30: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
2b40: 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f  t full branch co
2b50: 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65 73  verage.  The tes
2b60: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
2b70: 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20   inserted.** to 
2b80: 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71  help ensure adeq
2b90: 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61  uate test covera
2ba0: 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65  ge in places whe
2bb0: 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e  re simple.** con
2bc0: 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20  dition/decision 
2bd0: 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64  coverage is inad
2be0: 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61  equate.  For exa
2bf0: 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29  mple, testcase()
2c00: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
2c10: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75  to make sure bou
2c20: 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72 65  ndary values are
2c30: 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a   tested.  For.**
2c40: 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20   bitmask tests, 
2c50: 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20 62  testcase() can b
2c60: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
2c70: 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20  ure each bit.** 
2c80: 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61  is significant a
2c90: 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73 74  nd used at least
2ca0: 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63   once.  On switc
2cb0: 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  h statements.** 
2cc0: 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63  where multiple c
2cd0: 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73  ases go to the s
2ce0: 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ame block of cod
2cf0: 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  e, testcase().**
2d00: 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74   can insure that
2d10: 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65   all cases are e
2d20: 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a  valuated..**.*/.
2d30: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f  #ifdef SQLITE_CO
2d40: 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f  VERAGE_TEST.  vo
2d50: 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  id sqlite3Covera
2d60: 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  ge(int);.# defin
2d70: 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20 69  e testcase(X)  i
2d80: 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43  f( X ){ sqlite3C
2d90: 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f  overage(__LINE__
2da0: 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66  ); }.#else.# def
2db0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 0a  ine testcase(X).
2dc0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2dd0: 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f  e TESTONLY macro
2de0: 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c   is used to encl
2df0: 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65 63  ose variable dec
2e00: 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  larations or.** 
2e10: 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f  other bits of co
2e20: 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65 64  de that are need
2e30: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68  ed to support th
2e40: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77  e arguments.** w
2e50: 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28 29  ithin testcase()
2e60: 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61   and assert() ma
2e70: 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  cros..*/.#if !de
2e80: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c  fined(NDEBUG) ||
2e90: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ea0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
2eb0: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
2ec0: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
2ed0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
2ee0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2ef0: 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65  Sometimes we nee
2f00: 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  d a small amount
2f10: 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61 73   of code such as
2f20: 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74   a variable init
2f30: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f  ialization.** to
2f40: 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74   setup for a lat
2f50: 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61 74  er assert() stat
2f60: 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f  ement.  We do no
2f70: 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65  t want this code
2f80: 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68   to.** appear wh
2f90: 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20 64  en assert() is d
2fa0: 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f  isabled.  The fo
2fb0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
2fc0: 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73   therefore.** us
2fd0: 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
2fe0: 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20  at setup code.  
2ff0: 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79  The "VVA" acrony
3000: 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  m stands for.** 
3010: 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56  "Verification, V
3020: 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41  alidation, and A
3030: 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20  ccreditation".  
3040: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3050: 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68  the.** code with
3060: 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69  in VVA_ONLY() wi
3070: 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69  ll only run duri
3080: 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20  ng verification 
3090: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69  processes..*/.#i
30a0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64  fndef NDEBUG.# d
30b0: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
30c0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
30d0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a  ine VVA_ONLY(X).
30e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
30f0: 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  e ALWAYS and NEV
3100: 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75  ER macros surrou
3110: 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  nd boolean expre
3120: 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a 2a  ssions which .**
3130: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3140: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3150: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3160: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3170: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3180: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3190: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
31a0: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
31b0: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
31c0: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
31d0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
31e0: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
31f0: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
3200: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
3210: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
3220: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3230: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3240: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3250: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3260: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3270: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3280: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3290: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
32a0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
32b0: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
32c0: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
32d0: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
32e0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
32f0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3300: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
3310: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
3320: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3330: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3340: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3350: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3360: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3370: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3380: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3390: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
33a0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
33b0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41  TEST).# define A
33c0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31  LWAYS(X)      (1
33d0: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
33e0: 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65  (X)       (0).#e
33f0: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  lif !defined(NDE
3400: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c  BUG).# define AL
3410: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28 58  WAYS(X)      ((X
3420: 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30  )?1:(assert(0),0
3430: 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  )).# define NEVE
3440: 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29 3f  R(X)       ((X)?
3450: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
3460: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3470: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3480: 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  X).# define NEVE
3490: 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a 23  R(X)       (X).#
34a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
34b0: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
34c0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
34d0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
34e0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
34f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3500: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
3510: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
3520: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
3530: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
3540: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
3550: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
3560: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
3570: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
3580: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
3590: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
35a0: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
35b0: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
35c0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
35d0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
35e0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
35f0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
3600: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
3610: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
3620: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
3630: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
3640: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
3650: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
3660: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
3670: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
3680: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
3690: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
36a0: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
36b0: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
36c0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
36d0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
36e0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
36f0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
3700: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
3710: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3720: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
3730: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
3740: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
3750: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
3760: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
3770: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
3780: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
3790: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
37a0: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
37b0: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
37c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
37d0: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
37e0: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
37f0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
3800: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
3810: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
3820: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
3830: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
3840: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
3850: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
3860: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
3870: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
3880: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
3890: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
38a0: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
38b0: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
38c0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
38d0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
38e0: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
38f0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
3900: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
3910: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
3920: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
3930: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
3940: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
3950: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
3960: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3970: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
3980: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
3990: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
39a0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
39b0: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
39c0: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
39d0: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
39e0: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
39f0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
3a00: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
3a10: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
3a20: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
3a30: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
3a40: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
3a50: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
3a60: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
3a70: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
3a80: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
3a90: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
3aa0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
3ab0: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
3ac0: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
3ad0: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
3ae0: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
3af0: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
3b00: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
3b10: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
3b20: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
3b30: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
3b40: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
3b50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3b60: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
3b70: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
3b80: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
3b90: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
3ba0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
3bb0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
3bc0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
3bd0: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
3be0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
3bf0: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
3c00: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
3c10: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
3c20: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
3c30: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
3c40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
3c50: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
3c60: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
3c70: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
3c80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
3c90: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
3ca0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
3cb0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
3cc0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
3cd0: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
3ce0: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
3cf0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
3d00: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
3d10: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
3d20: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
3d30: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
3d40: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
3d50: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
3d60: 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63  er .** to omit c
3d70: 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50  ode used by TEMP
3d80: 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20   tables without 
3d90: 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74  messy #ifndef st
3da0: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66  atements..*/.#if
3db0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3dc0: 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f  TEMPDB.#define O
3dd0: 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c  MIT_TEMPDB 1.#el
3de0: 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  se.#define OMIT_
3df0: 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a  TEMPDB 0.#endif.
3e00: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65  ./*.** The "file
3e10: 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20   format" number 
3e20: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
3e30: 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  at is incremente
3e40: 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68  d whenever.** th
3e50: 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c  e VDBE-level fil
3e60: 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73  e format changes
3e70: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
3e80: 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74   macros define t
3e90: 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c  he.** the defaul
3ea0: 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f  t file format fo
3eb0: 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  r new databases 
3ec0: 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  and the maximum 
3ed0: 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74  file format.** t
3ee0: 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20  hat the library 
3ef0: 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65  can read..*/.#de
3f00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
3f10: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69  FILE_FORMAT 4.#i
3f20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3f30: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
3f40: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3f50: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3f60: 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f  RMAT 4.#endif../
3f70: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77  *.** Determine w
3f80: 68 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20  hether triggers 
3f90: 61 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79  are recursive by
3fa0: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20   default.  This 
3fb0: 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65  can be.** change
3fc0: 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73  d at run-time us
3fd0: 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f  ing a pragma..*/
3fe0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3ff0: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
4000: 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66  E_TRIGGERS.# def
4010: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4020: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
4030: 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a  GGERS 0.#endif..
4040: 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20  /*.** Provide a 
4050: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
4060: 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  r SQLITE_TEMP_ST
4070: 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69  ORE in case it i
4080: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a  s not specified.
4090: 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  ** on the comman
40a0: 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65  d-line.*/.#ifnde
40b0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
40c0: 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ORE.# define SQL
40d0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31  ITE_TEMP_STORE 1
40e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
40f0: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31  _TEMP_STORE_xc 1
4100: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
4110: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4120: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f  dif../*.** If no
4130: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
4140: 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c  provided for SQL
4150: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4160: 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a  HREADS, or if.**
4170: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4180: 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20 28  RE is set to 3 (
4190: 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72  never use tempor
41a0: 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20  ary files), set 
41b0: 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a  it .** to zero..
41c0: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
41d0: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
41e0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
41f0: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
4200: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4210: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
4220: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
4230: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
4240: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
4250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4260: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
4270: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4280: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
4290: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
42a0: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
42b0: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
42c0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
42d0: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
42e0: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
42f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4300: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
4310: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4320: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
4330: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4340: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
4350: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4360: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
4370: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4380: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
4390: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
43a0: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
43b0: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
43c0: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
43d0: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
43e0: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
43f0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4400: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
4410: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
4420: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
4430: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
4440: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
4450: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
4460: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
4470: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
4480: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
4490: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
44a0: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
44b0: 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  old..*/.#ifndef 
44c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50  SQLITE_DEFAULT_P
44d0: 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64  CACHE_INITSZ.# d
44e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
44f0: 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54  AULT_PCACHE_INIT
4500: 53 5a 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 0a  SZ 100.#endif...
4510: 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e  /*.** GCC does n
4520: 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66  ot define the of
4530: 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73  fsetof() macro s
4540: 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20  o we'll have to 
4550: 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76  do it.** ourselv
4560: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f  es..*/.#ifndef o
4570: 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20  ffsetof.#define 
4580: 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55  offsetof(STRUCTU
4590: 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29  RE,FIELD) ((int)
45a0: 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43  ((char*)&((STRUC
45b0: 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29  TURE*)0)->FIELD)
45c0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
45d0: 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74  Macros to comput
45e0: 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61  e minimum and ma
45f0: 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d  ximum of two num
4600: 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  bers..*/.#define
4610: 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28   MIN(A,B) ((A)<(
4620: 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66  B)?(A):(B)).#def
4630: 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41  ine MAX(A,B) ((A
4640: 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a  )>(B)?(A):(B))..
4650: 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f  /*.** Swap two o
4660: 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 54  bjects of type T
4670: 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  YPE..*/.#define 
4680: 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20 7b  SWAP(TYPE,A,B) {
4690: 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42  TYPE t=A; A=B; B
46a0: 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  =t;}../*.** Chec
46b0: 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73  k to see if this
46c0: 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42   machine uses EB
46d0: 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c  CDIC.  (Yes, bel
46e0: 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f  ieve it or.** no
46f0: 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69  t, there are sti
4700: 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20  ll machines out 
4710: 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45  there that use E
4720: 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27  BCDIC.).*/.#if '
4730: 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64  A' == '\301'.# d
4740: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43  efine SQLITE_EBC
4750: 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  DIC 1.#else.# de
4760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49  fine SQLITE_ASCI
4770: 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  I 1.#endif../*.*
4780: 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e  * Integers of kn
4790: 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73  own sizes.  Thes
47a0: 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74  e typedefs might
47b0: 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68   change for arch
47c0: 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65  itectures.** whe
47d0: 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72  re the sizes ver
47e0: 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72  y.  Preprocessor
47f0: 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69   macros are avai
4800: 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68  lable so that th
4810: 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62  e.** types can b
4820: 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72  e conveniently r
4830: 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70  edefined at comp
4840: 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20  ile-type.  Like 
4850: 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  this:.**.**     
4860: 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54      cc '-DUINTPT
4870: 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67  R_TYPE=long long
4880: 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66   int' ....*/.#if
4890: 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  ndef UINT32_TYPE
48a0: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
48b0: 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT32_T.#  define
48c0: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e   UINT32_TYPE uin
48d0: 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t32_t.# else.#  
48e0: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
48f0: 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a  PE unsigned int.
4900: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
4910: 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ifndef UINT16_TY
4920: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4930: 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  UINT16_T.#  defi
4940: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
4950: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
4960: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
4970: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68  TYPE unsigned sh
4980: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4990: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
49a0: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
49b0: 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23  f HAVE_INT16_T.#
49c0: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
49d0: 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c  YPE int16_t.# el
49e0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
49f0: 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e  16_TYPE short in
4a00: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
4a10: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54  .#ifndef UINT8_T
4a20: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
4a30: 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  _UINT8_T.#  defi
4a40: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69  ne UINT8_TYPE ui
4a50: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4a60: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
4a70: 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a  E unsigned char.
4a80: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
4a90: 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ifndef INT8_TYPE
4aa0: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
4ab0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  T8_T.#  define I
4ac0: 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a  NT8_TYPE int8_t.
4ad0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4ae0: 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65   INT8_TYPE signe
4af0: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
4b00: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f  endif.#ifndef LO
4b10: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20  NGDOUBLE_TYPE.# 
4b20: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4b30: 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62  E_TYPE long doub
4b40: 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65  le.#endif.typede
4b50: 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69  f sqlite_int64 i
4b60: 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  64;          /* 
4b70: 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  8-byte signed in
4b80: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
4b90: 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75   sqlite_uint64 u
4ba0: 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38  64;         /* 8
4bb0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
4bc0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4bd0: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33  f UINT32_TYPE u3
4be0: 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2;           /* 
4bf0: 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  4-byte unsigned 
4c00: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4c10: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ef UINT16_TYPE u
4c20: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  16;           /*
4c30: 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   2-byte unsigned
4c40: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4c50: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69  def INT16_TYPE i
4c60: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  16;            /
4c70: 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 2-byte signed 
4c80: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4c90: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38  ef UINT8_TYPE u8
4ca0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4cb0: 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   1-byte unsigned
4cc0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4cd0: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38  def INT8_TYPE i8
4ce0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
4cf0: 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 1-byte signed 
4d00: 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  integer */../*.*
4d10: 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  * SQLITE_MAX_U32
4d20: 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61   is a u64 consta
4d30: 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d  nt that is the m
4d40: 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65  aximum u64 value
4d50: 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20  .** that can be 
4d60: 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20  stored in a u32 
4d70: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
4d80: 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65  data.  The value
4d90: 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30  .** is 0x0000000
4da0: 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20  0ffffffff.  But 
4db0: 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b  because of quirk
4dc0: 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c  s of some compil
4dd0: 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20  ers, we.** have 
4de0: 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76  to specify the v
4df0: 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73  alue in the less
4e00: 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65   intuitive manne
4e10: 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66  r shown:.*/.#def
4e20: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  ine SQLITE_MAX_U
4e30: 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c  32  ((((u64)1)<<
4e40: 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  32)-1)../*.** Th
4e50: 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20  e datatype used 
4e60: 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74  to store estimat
4e70: 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  es of the number
4e80: 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a   of rows in a.**
4e90: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
4ea0: 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73    This is an uns
4eb0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79  igned integer ty
4ec0: 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f  pe.  For 99.9% o
4ed0: 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20  f.** the world, 
4ee0: 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  a 32-bit integer
4ef0: 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20   is sufficient. 
4f00: 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e   But a 64-bit in
4f10: 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20  teger.** can be 
4f20: 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  used at compile-
4f30: 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e  time if desired.
4f40: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4f50: 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74  E_64BIT_STATS. t
4f60: 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63  ypedef u64 tRowc
4f70: 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  nt;    /* 64-bit
4f80: 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74   only if request
4f90: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4fa0: 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70  me */.#else. typ
4fb0: 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74  edef u32 tRowcnt
4fc0: 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69  ;    /* 32-bit i
4fd0: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  s the default */
4fe0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
4ff0: 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74  stimated quantit
5000: 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65  ies used for que
5010: 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20  ry planning are 
5020: 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74  stored as 16-bit
5030: 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20  .** logarithms. 
5040: 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c   For quantity X,
5050: 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
5060: 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e  d is 10*log2(X).
5070: 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20    This.** gives 
5080: 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65  a possible range
5090: 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70   of values of ap
50a0: 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65  proximately 1.0e
50b0: 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a  986 to 1e-986..*
50c0: 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65  * But the allowe
50d0: 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72  d values are "gr
50e0: 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72  ainy".  Not ever
50f0: 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65  y value is repre
5100: 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72  sentable..** For
5110: 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69   example, quanti
5120: 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61  ties 16 and 17 a
5130: 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e  re both represen
5140: 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a  ted by a LogEst.
5150: 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76  ** of 40.  Howev
5160: 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74  er, since LogEst
5170: 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65 20   quantities are 
5180: 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73  suppose to be es
5190: 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20  timates,.** not 
51a0: 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68  exact values, th
51b0: 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69  is imprecision i
51c0: 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e  s not a problem.
51d0: 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20  .**.** "LogEst" 
51e0: 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f  is short for "Lo
51f0: 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61  garithmic Estima
5200: 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70  te"..**.** Examp
5210: 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d  les:.**      1 -
5220: 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20  > 0             
5230: 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20   20 -> 43       
5240: 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a     10000 -> 132.
5250: 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20  **      2 -> 10 
5260: 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d              25 -
5270: 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35  > 46          25
5280: 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20  000 -> 146.**   
5290: 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20     3 -> 16      
52a0: 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20        100 -> 66 
52b0: 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d         1000000 -
52c0: 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20  > 199.**      4 
52d0: 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20  -> 20           
52e0: 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20  1000 -> 99      
52f0: 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30    1048576 -> 200
5300: 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33  .**     10 -> 33
5310: 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20             1024 
5320: 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36  -> 100    429496
5330: 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a  7296 -> 320.**.*
5340: 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e  * The LogEst can
5350: 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20   be negative to 
5360: 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f  indicate fractio
5370: 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20  nal values. .** 
5380: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
5390: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
53a0: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
53b0: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
53c0: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
53d0: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
53e0: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  gEst;../*.** Set
53f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53   the SQLITE_PTRS
5400: 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65  IZE macro to the
5410: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5420: 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f   in a pointer.*/
5430: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5440: 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66  PTRSIZE.# if def
5450: 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f  ined(__SIZEOF_PO
5460: 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66  INTER__).#   def
5470: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
5480: 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ZE __SIZEOF_POIN
5490: 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66  TER__.# elif def
54a0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
54b0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
54c0: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
54d0: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
54e0: 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65 64  \.       defined
54f0: 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65  (_M_ARM)   || de
5500: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20  fined(__arm__)  
5510: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
5520: 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  86).#   define S
5530: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a  QLITE_PTRSIZE 4.
5540: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
5550: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5560: 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69   8.# endif.#endi
5570: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
5580: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  to determine whe
5590: 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65  ther the machine
55a0: 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c   is big or littl
55b0: 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64  e endian,.** and
55c0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
55d0: 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69  that determinati
55e0: 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f  on is run-time o
55f0: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a  r compile-time..
5600: 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70  **.** For best p
5610: 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61  erformance, an a
5620: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
5630: 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62  o guess at the b
5640: 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69  yte-order.** usi
5650: 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  ng C-preprocesso
5660: 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68  r macros.  If th
5670: 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66  at is unsuccessf
5680: 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53  ul, or if.** -DS
5690: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
56a0: 54 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74  TEORDER=1 is set
56b0: 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65  , then byte-orde
56c0: 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a  r is determined.
56d0: 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a  ** at run-time..
56e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
56f0: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f  _AMALGAMATION.co
5700: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
5710: 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78  ne = 1;.#else.ex
5720: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
5730: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69  qlite3one;.#endi
5740: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69  f.#if (defined(i
5750: 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69  386)     || defi
5760: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20  ned(__i386__)   
5770: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
5780: 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  86) ||    \.    
5790: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
57a0: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  4) || defined(__
57b0: 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66  x86_64__) || def
57c0: 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c  ined(_M_X64)  ||
57d0: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
57e0: 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20  ed(_M_AMD64) || 
57f0: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20  defined(_M_ARM) 
5800: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5810: 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a  _x86)   ||    \.
5820: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61       defined(__a
5830: 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e  rm__)) && !defin
5840: 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d  ed(SQLITE_RUNTIM
5850: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64  E_BYTEORDER).# d
5860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
5870: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
5880: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5890: 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20  IGENDIAN    0.# 
58a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
58b0: 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64  TTLEENDIAN 1.# d
58c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
58d0: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
58e0: 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a  _UTF16LE.#endif.
58f0: 23 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61  #if (defined(spa
5900: 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  rc)    || define
5910: 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20  d(__ppc__))  \. 
5920: 20 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53     && !defined(S
5930: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
5940: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
5950: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
5960: 45 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66  ER    4321.# def
5970: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
5980: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
5990: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
59a0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
59b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
59c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
59d0: 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16BE.#endif.#if 
59e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
59f0: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5a00: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5a10: 52 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a  RDER    0     /*
5a20: 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77   0 means "unknow
5a30: 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  n at compile-tim
5a40: 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  e" */.# define S
5a50: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5a60: 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73     (*(char *)(&s
5a70: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23  qlite3one)==0).#
5a80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
5a90: 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63  ITTLEENDIAN (*(c
5aa0: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
5ab0: 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65  ne)==1).# define
5ac0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5ad0: 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47  IVE  (SQLITE_BIG
5ae0: 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54  ENDIAN?SQLITE_UT
5af0: 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46  F16BE:SQLITE_UTF
5b00: 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  16LE).#endif../*
5b10: 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f  .** Constants fo
5b20: 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e  r the largest an
5b30: 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69  d smallest possi
5b40: 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  ble 64-bit signe
5b50: 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  d integers..** T
5b60: 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20  hese macros are 
5b70: 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b  designed to work
5b80: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f   correctly on bo
5b90: 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
5ba0: 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  -bit.** compiler
5bb0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41  s..*/.#define LA
5bc0: 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78  RGEST_INT64  (0x
5bd0: 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29  ffffffff|(((i64)
5be0: 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
5bf0: 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45  ).#define SMALLE
5c00: 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29  ST_INT64 (((i64)
5c10: 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e  -1) - LARGEST_IN
5c20: 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75  T64)../* .** Rou
5c30: 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74  nd up a number t
5c40: 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65  o the next large
5c50: 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e  r multiple of 8.
5c60: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a    This is used.*
5c70: 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74  * to force 8-byt
5c80: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36  e alignment on 6
5c90: 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75  4-bit architectu
5ca0: 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
5cb0: 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28  ROUND8(x)     ((
5cc0: 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  (x)+7)&~7)../*.*
5cd0: 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20  * Round down to 
5ce0: 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74  the nearest mult
5cf0: 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65  iple of 8.*/.#de
5d00: 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28  fine ROUNDDOWN8(
5d10: 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a  x) ((x)&~7)../*.
5d20: 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  ** Assert that t
5d30: 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20  he pointer X is 
5d40: 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d  aligned to an 8-
5d50: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20  byte boundary.  
5d60: 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  This.** macro is
5d70: 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69   used only withi
5d80: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65  n assert() to ve
5d90: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
5da0: 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61  de gets.** all a
5db0: 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63  lignment restric
5dc0: 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a  tions correct..*
5dd0: 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20  *.** Except, if 
5de0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
5df0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20  IGNED_MALLOC is 
5e00: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68  defined, then th
5e10: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
5e20: 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65  malloc() impleme
5e30: 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65  ntation might re
5e40: 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61  turn us 4-byte a
5e50: 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65  ligned.** pointe
5e60: 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73  rs.  In that cas
5e70: 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34  e, only verify 4
5e80: 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e  -byte alignment.
5e90: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
5ea0: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
5eb0: 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65  _MALLOC.# define
5ec0: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
5ed0: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
5ee0: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
5ef0: 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73  *)0)&3)==0).#els
5f00: 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  e.# define EIGHT
5f10: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
5f20: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
5f30: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37  X) - (char*)0)&7
5f40: 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )==0).#endif../*
5f50: 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50  .** Disable MMAP
5f60: 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68   on platforms wh
5f70: 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20  ere it is known 
5f80: 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23  to not work.*/.#
5f90: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
5fa0: 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  nBSD__) || defin
5fb0: 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23  ed(__QNXNTO__).#
5fc0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5fd0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  X_MMAP_SIZE.# de
5fe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5ff0: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64  MMAP_SIZE 0.#end
6000: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
6010: 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  t maximum size o
6020: 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79  f memory used by
6030: 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49   memory-mapped I
6040: 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f  /O in the VFS.*/
6050: 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f  .#ifdef __APPLE_
6060: 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72  _.# include <Tar
6070: 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e  getConditionals.
6080: 68 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f  h>.# if TARGET_O
6090: 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64  S_IPHONE.#   und
60a0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
60b0: 41 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69  AP_SIZE.#   defi
60c0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
60d0: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
60e0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
60f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6100: 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e  _SIZE.# if defin
6110: 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a  ed(__linux__) \.
6120: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49    || defined(_WI
6130: 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66  N32) \.  || (def
6140: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20  ined(__APPLE__) 
6150: 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43  && defined(__MAC
6160: 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66  H__)) \.  || def
6170: 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20  ined(__sun) \.  
6180: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65  || defined(__Fre
6190: 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  eBSD__) \.  || d
61a0: 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46  efined(__DragonF
61b0: 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65  ly__).#   define
61c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
61d0: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
61e0: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
61f0: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
6200: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6210: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
6220: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
6230: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6240: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
6250: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
6260: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
6270: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
6280: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
6290: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
62a0: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
62b0: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
62c0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
62d0: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
62e0: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
62f0: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
6300: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
6310: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
6320: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
6330: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
6340: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
6350: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
6360: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
6370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
6380: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
6390: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
63a0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
63b0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
63c0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
63d0: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
63e0: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
63f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6400: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
6410: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
6420: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
6430: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6440: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
6450: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
6460: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
6470: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
6480: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
6490: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
64a0: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
64b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
64c0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
64d0: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
64e0: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
64f0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
6500: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
6510: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6520: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
6530: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6540: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6550: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
6560: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
6570: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6580: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
6590: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
65a0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
65b0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
65c0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
65d0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
65e0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
65f0: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
6600: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
6610: 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74  BLED will be eit
6620: 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e  her 1 or 0 depen
6630: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
6640: 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65  or not.** the Se
6650: 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65 72  lect query gener
6660: 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67  ator tracing log
6670: 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  ic is turned on.
6680: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6690: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
66a0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
66b0: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
66c0: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
66d0: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
66e0: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
66f0: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
6700: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
6710: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
6720: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
6730: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
6740: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
6750: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
6760: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
6770: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
6780: 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65  ndle. .**.** The
6790: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
67a0: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
67b0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
67c0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
67d0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
67e0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
67f0: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
6800: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
6810: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
6820: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
6830: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
6840: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
6850: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
6860: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
6870: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
6880: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
6890: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
68a0: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
68b0: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
68c0: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
68d0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
68e0: 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69  *xFunc)(void *,i
68f0: 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73  nt);  /* The bus
6900: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
6910: 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20  void *pArg;     
6920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
6930: 72 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20  rst arg to busy 
6940: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
6950: 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20  t nBusy;        
6960: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
6970: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6980: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d  h busy call */.}
6990: 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66  ;../*.** Name of
69a0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
69b0: 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65  base table.  The
69c0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
69d0: 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73   table.** is a s
69e0: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61  pecial table tha
69f0: 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
6a00: 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73  s and attributes
6a10: 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20   of all.** user 
6a20: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
6a30: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
6a40: 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20  ASTER_NAME      
6a50: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
6a60: 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41  .#define TEMP_MA
6a70: 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69  STER_NAME  "sqli
6a80: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a  te_temp_master".
6a90: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d  ./*.** The root-
6aa0: 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74  page of the mast
6ab0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6ac0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  e..*/.#define MA
6ad0: 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20  STER_ROOT       
6ae0: 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d  1../*.** The nam
6af0: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  e of the schema 
6b00: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
6b10: 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78  e SCHEMA_TABLE(x
6b20: 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44  )  ((!OMIT_TEMPD
6b30: 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f  B)&&(x==1)?TEMP_
6b40: 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54  MASTER_NAME:MAST
6b50: 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20  ER_NAME)../*.** 
6b60: 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61  A convenience ma
6b70: 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73  cro that returns
6b80: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
6b90: 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e  lements in.** an
6ba0: 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69   array..*/.#defi
6bb0: 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20  ne ArraySize(X) 
6bc0: 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66     ((int)(sizeof
6bd0: 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29  (X)/sizeof(X[0])
6be0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  ))../*.** Determ
6bf0: 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d  ine if the argum
6c00: 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f  ent is a power o
6c10: 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65  f two.*/.#define
6c20: 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29   IsPowerOfTwo(X)
6c30: 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d   (((X)&((X)-1))=
6c40: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  =0)../*.** The f
6c50: 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61  ollowing value a
6c60: 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d  s a destructor m
6c70: 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69  eans to use sqli
6c80: 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20  te3DbFree()..** 
6c90: 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  The sqlite3DbFre
6ca0: 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75  e() routine requ
6cb0: 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74  ires two paramet
6cc0: 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74  ers instead of t
6cd0: 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  he .** one param
6ce0: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
6cf0: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
6d00: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
6d10: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a   to introduce .*
6d20: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
6d30: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
6d40: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
6d50: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
6d60: 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  ny .** pointer w
6d70: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
6d80: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
6d90: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
6da0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
6db0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
6dc0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
6dd0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
6de0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
6df0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
6e00: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
6e10: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
6e20: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
6e30: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
6e40: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
6e50: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
6e60: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
6e70: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
6e80: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
6e90: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
6ea0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
6eb0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
6ec0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
6ed0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
6ee0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
6ef0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
6f00: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
6f10: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
6f20: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
6f30: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
6f40: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
6f50: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
6f60: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
6f70: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
6f80: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
6f90: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
6fa0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
6fb0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
6fc0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
6fd0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
6fe0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
6ff0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
7000: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
7010: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
7020: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
7030: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
7040: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
7050: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
7060: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
7070: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
7080: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
7090: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
70a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
70b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
70c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
70d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
70e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
70f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
7100: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
7110: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
7120: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
7130: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
7140: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
7150: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
7160: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
7170: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
7180: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
7190: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
71a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
71b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
71c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
71d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
71e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
71f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
7200: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
7210: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
7220: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
7230: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
7240: 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66  LITE_WSD .  #def
7250: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
7260: 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  v.  #define sqli
7270: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
7280: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65  sqlite3Config.#e
7290: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
72a0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
72b0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70   are used to sup
72c0: 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77  press compiler w
72d0: 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a  arnings and to.*
72e0: 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20  * make it clear 
72f0: 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  to human readers
7300: 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   when a function
7310: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65   parameter is de
7320: 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c  liberately .** l
7330: 65 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69  eft unused withi
7340: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
7350: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75  function. This u
7360: 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77  sually happens w
7370: 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f  hen.** a functio
7380: 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20  n is called via 
7390: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
73a0: 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  er. For example 
73b0: 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  the .** implemen
73c0: 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  tation of an SQL
73d0: 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20   aggregate step 
73e0: 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74  callback may not
73f0: 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61   use the.** para
7400: 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67  meter indicating
7410: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
7420: 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
7430: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
7440: 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73  ,.** if it knows
7450: 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e   that this is en
7460: 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65  forced elsewhere
7470: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66  ..**.** When a f
7480: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
7490: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74  r is not used at
74a0: 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20   all within the 
74b0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
74c0: 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e  on,.** it is gen
74d0: 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f  erally named "No
74e0: 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73  tUsed" or "NotUs
74f0: 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69  ed2" to make thi
7500: 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72  ngs even clearer
7510: 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68  ..** However, th
7520: 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61  ese macros may a
7530: 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73  lso be used to s
7540: 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73  uppress warnings
7550: 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70   related to.** p
7560: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d  arameters that m
7570: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ay or may not be
7580: 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20   used depending 
7590: 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  on compilation o
75a0: 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65  ptions..** For e
75b0: 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72  xample those par
75c0: 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65  ameters only use
75d0: 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74  d in assert() st
75e0: 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65  atements. In the
75f0: 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20  se.** cases the 
7600: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e  parameters are n
7610: 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20  amed as per the 
7620: 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e  usual convention
7630: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  s..*/.#define UN
7640: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78  USED_PARAMETER(x
7650: 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66  ) (void)(x).#def
7660: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
7670: 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45  ETER2(x,y) UNUSE
7680: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55  D_PARAMETER(x),U
7690: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
76a0: 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72  y)../*.** Forwar
76b0: 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  d references to 
76c0: 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79  structures.*/.ty
76d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67  pedef struct Agg
76e0: 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79  Info AggInfo;.ty
76f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
7700: 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e  hContext AuthCon
7710: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
7720: 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
7730: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79   AutoincInfo;.ty
7740: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74  pedef struct Bit
7750: 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65  vec Bitvec;.type
7760: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53  def struct CollS
7770: 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65  eq CollSeq;.type
7780: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d  def struct Colum
7790: 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65  n Column;.typede
77a0: 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a  f struct Db Db;.
77b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
77c0: 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79  chema Schema;.ty
77d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
77e0: 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20  r Expr;.typedef 
77f0: 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
7800: 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65  ExprList;.typede
7810: 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61  f struct ExprSpa
7820: 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65  n ExprSpan;.type
7830: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
7840: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
7850: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
7860: 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74  tor FuncDestruct
7870: 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  or;.typedef stru
7880: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
7890: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
78a0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46  ct FuncDefHash F
78b0: 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65  uncDefHash;.type
78c0: 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73  def struct IdLis
78d0: 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65  t IdList;.typede
78e0: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49  f struct Index I
78f0: 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74  ndex;.typedef st
7900: 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
7910: 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79   IndexSample;.ty
7920: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
7930: 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a  Class KeyClass;.
7940: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
7950: 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a  eyInfo KeyInfo;.
7960: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
7970: 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69  ookaside Lookasi
7980: 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  de;.typedef stru
7990: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
79a0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a   LookasideSlot;.
79b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d  typedef struct M
79c0: 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79  odule Module;.ty
79d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d  pedef struct Nam
79e0: 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e  eContext NameCon
79f0: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
7a00: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
7a10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7a20: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
7a30: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
7a40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7a50: 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a   RowSet RowSet;.
7a60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7a70: 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69  avepoint Savepoi
7a80: 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  nt;.typedef stru
7a90: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
7aa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7ab0: 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51   SQLiteThread SQ
7ac0: 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65  LiteThread;.type
7ad0: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
7ae0: 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74  tDest SelectDest
7af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7b00: 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74   SrcList SrcList
7b10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7b20: 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63   StrAccum StrAcc
7b30: 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  um;.typedef stru
7b40: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
7b50: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7b60: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
7b70: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
7b80: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
7b90: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7ba0: 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77  reeView TreeView
7bb0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7bc0: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
7bd0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7be0: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
7bf0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
7c00: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
7c10: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
7c20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
7c30: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
7c40: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
7c50: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
7c60: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
7c70: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
7c80: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
7c90: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
7ca0: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
7cb0: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e  f struct WhereIn
7cc0: 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79  fo WhereInfo;.ty
7cd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74  pedef struct Wit
7ce0: 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44  h With;../*.** D
7cf0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
7d00: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
7d10: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
7d20: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
7d30: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
7d40: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
7d50: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
7d60: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
7d70: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
7d80: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
7d90: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
7da0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
7db0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
7dc0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
7dd0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
7de0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
7df0: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
7e00: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
7e10: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
7e20: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
7e30: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
7e40: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
7e50: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
7e60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
7e70: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
7e80: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
7e90: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
7ea0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
7eb0: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
7ec0: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
7ed0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
7ee0: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
7ef0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
7f00: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
7f10: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
7f20: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
7f30: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
7f40: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
7f50: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
7f60: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
7f70: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
7f80: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
7f90: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
7fa0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
7fb0: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
7fc0: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
7fd0: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
7fe0: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
7ff0: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
8000: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
8010: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
8020: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
8030: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
8040: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
8050: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
8060: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
8070: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
8080: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
8090: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
80a0: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
80b0: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
80c0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
80d0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
80e0: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
80f0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
8100: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
8110: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
8120: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
8130: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
8140: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
8150: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8160: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
8170: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
8180: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
8190: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
81a0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
81b0: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
81c0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
81d0: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
81e0: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
81f0: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
8200: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
8210: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
8220: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
8230: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
8240: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
8250: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
8260: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
8270: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
8280: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
8290: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
82a0: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
82b0: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
82c0: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
82d0: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
82e0: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
82f0: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
8300: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
8310: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
8320: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
8330: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
8340: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
8350: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
8360: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
8370: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
8380: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
8390: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
83a0: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
83b0: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
83c0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
83d0: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
83e0: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
83f0: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
8400: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
8410: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
8420: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
8430: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
8440: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
8450: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
8460: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
8470: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
8480: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
8490: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
84a0: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
84b0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
84c0: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
84d0: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
84e0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
84f0: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
8500: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
8510: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
8520: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
8530: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
8540: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
8550: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
8560: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
8570: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
8580: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
8590: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
85a0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
85b0: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
85c0: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85e0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
85f0: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
8600: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68  ase */.  u16 sch
8610: 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  emaFlags;     /*
8620: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
8630: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
8640: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
8650: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
8660: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
8670: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
8680: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
8690: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
86a0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
86b0: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
86c0: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
86d0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
86e0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
86f0: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
8700: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
8710: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8720: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8730: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
8740: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
8750: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
8760: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8770: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8780: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
8790: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
87a0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
87b0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
87c0: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
87d0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
87e0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
87f0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
8800: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
8810: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
8820: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
8830: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
8840: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
8850: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
8860: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
8870: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
8880: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
8890: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
88a0: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
88b0: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
88c0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
88d0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
88e0: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
88f0: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
8900: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
8910: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
8920: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
8930: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
8940: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
8950: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
8960: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
8970: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
8980: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
8990: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
89a0: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
89b0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
89c0: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
89d0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
89e0: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
89f0: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
8a00: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
8a10: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
8a20: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
8a30: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
8a40: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
8a50: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
8a60: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  /../*.** The num
8a70: 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ber of different
8a80: 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73   kinds of things
8a90: 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d   that can be lim
8aa0: 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68  ited.** using th
8ab0: 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  e sqlite3_limit(
8ac0: 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  ) interface..*/.
8ad0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
8ae0: 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c  _LIMIT (SQLITE_L
8af0: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
8b00: 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f  ADS+1)../*.** Lo
8b10: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69  okaside malloc i
8b20: 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64  s a set of fixed
8b30: 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68  -size buffers th
8b40: 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  at can be used.*
8b50: 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61  * to satisfy sma
8b60: 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d  ll transient mem
8b70: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
8b80: 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65  equests for obje
8b90: 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  cts.** associate
8ba0: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
8bb0: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
8bc0: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73  nection.  The us
8bd0: 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  e of.** lookasid
8be0: 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65  e malloc provide
8bf0: 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  s a significant 
8c00: 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61  performance enha
8c10: 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72  ncement.** (appr
8c20: 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64  ox 10%) by avoid
8c30: 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c  ing numerous mal
8c40: 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74  loc/free request
8c50: 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  s while parsing.
8c60: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
8c70: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f  s..**.** The Loo
8c80: 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65  kaside structure
8c90: 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61   holds configura
8ca0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
8cb0: 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f   about the.** lo
8cc0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73  okaside malloc s
8cd0: 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20  ubsystem.  Each 
8ce0: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
8cf0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a   allocation in.*
8d00: 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  * the lookaside 
8d10: 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f  subsystem is sto
8d20: 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  red on a linked 
8d30: 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64  list of Lookasid
8d40: 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73  eSlot.** objects
8d50: 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ..**.** Lookasid
8d60: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
8d70: 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66  e only allowed f
8d80: 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  or objects that 
8d90: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  are associated.*
8da0: 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  * with a particu
8db0: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
8dc0: 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c  nection.  Hence,
8dd0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8de0: 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65  ion cannot.** be
8df0: 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61   stored in looka
8e00: 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20  side because in 
8e10: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
8e20: 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  e the schema inf
8e30: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73  ormation.** is s
8e40: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
8e50: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
8e60: 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f  ctions.  Therefo
8e70: 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e  re, while parsin
8e80: 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f  g.** schema info
8e90: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f  rmation, the Loo
8ea0: 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20  kaside.bEnabled 
8eb0: 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20  flag is cleared 
8ec0: 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61  so that.** looka
8ed0: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8ee0: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f   are not used to
8ef0: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
8f00: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a  chema objects..*
8f10: 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  /.struct Lookasi
8f20: 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20  de {.  u16 sz;  
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8f40: 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62  * Size of each b
8f50: 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a  uffer in bytes *
8f60: 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b  /.  u8 bEnabled;
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
8f80: 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20  alse to disable 
8f90: 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  new lookaside al
8fa0: 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  locations */.  u
8fb0: 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20  8 bMalloced;    
8fc0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
8fd0: 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65  f pStart obtaine
8fe0: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
8ff0: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74  alloc() */.  int
9000: 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20   nOut;          
9010: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9020: 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e  f buffers curren
9030: 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
9040: 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20  */.  int mxOut; 
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9060: 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66  Highwater mark f
9070: 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74  or nOut */.  int
9080: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
9090: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
90a0: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
90b0: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
90c0: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
90d0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
90e0: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
90f0: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
9100: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
9110: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9120: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
9130: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
9140: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
9150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9160: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
9170: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
9180: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
9190: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
91a0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
91b0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
91c0: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
91d0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
91e0: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
91f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
9200: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
9210: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a  n definitions..*
9220: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
9230: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
9240: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
9250: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
9260: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
9270: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
9280: 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63   FuncDef.pHash c
9290: 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  hain..*/.struct 
92a0: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
92b0: 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20  FuncDef *a[23]; 
92c0: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
92d0: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
92e0: 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  s */.};..#ifdef 
92f0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
9300: 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a  ENTICATION./*.**
9310: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c   Information hel
9320: 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65  d in the "sqlite
9330: 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  3" database conn
9340: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e  ection object an
9350: 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e  d used.** to man
9360: 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74  age user authent
9370: 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65  ication..*/.type
9380: 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74  def struct sqlit
9390: 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69  e3_userauth sqli
93a0: 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74  te3_userauth;.st
93b0: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
93c0: 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74  rauth {.  u8 aut
93d0: 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  hLevel;         
93e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
93f0: 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  nt authenticatio
9400: 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  n level */.  int
9410: 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20   nAuthPW;       
9420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
9430: 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50  ze of the zAuthP
9440: 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  W in bytes */.  
9450: 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20  char *zAuthPW;  
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9470: 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74   Password used t
9480: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
9490: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55  /.  char *zAuthU
94a0: 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ser;            
94b0: 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75    /* User name u
94c0: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
94d0: 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  ate */.};../* Al
94e0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
94f0: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9500: 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23  h.authLevel */.#
9510: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b  define UAUTH_Unk
9520: 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f  nown     0     /
9530: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  * Authentication
9540: 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64   not yet checked
9550: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
9560: 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20  H_Fail        1 
9570: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
9580: 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65  entication faile
9590: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
95a0: 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32  TH_User        2
95b0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
95c0: 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61  cated as a norma
95d0: 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e  l user */.#defin
95e0: 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20  e UAUTH_Admin   
95f0: 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74      3     /* Aut
9600: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e  henticated as an
9610: 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a   administrator *
9620: 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20  /../* Functions 
9630: 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65  used only by use
9640: 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  r authorization 
9650: 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c  logic */.int sql
9660: 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c  ite3UserAuthTabl
9670: 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  e(const char*);.
9680: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
9690: 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71  uthCheckLogin(sq
96a0: 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
96b0: 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  r*,u8*);.void sq
96c0: 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69  lite3UserAuthIni
96d0: 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
96e0: 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75  d sqlite3CryptFu
96f0: 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  nc(sqlite3_conte
9700: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
9710: 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69  value**);..#endi
9720: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52  f /* SQLITE_USER
9730: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20  _AUTHENTICATION 
9740: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65  */../*.** typede
9750: 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72  f for the author
9760: 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b  ization callback
9770: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69   function..*/.#i
9780: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
9790: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
97a0: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
97b0: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
97c0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
97d0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
97e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
9810: 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
9820: 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  char*);.#else.  
9830: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
9840: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
9850: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
9860: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
9870: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9890: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
98a0: 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
98b0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
98c0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
98d0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
98e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
98f0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
9900: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
9910: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
9920: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
9930: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
9940: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
9950: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
9960: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
9970: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
9980: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
9990: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
99a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
99b0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
99c0: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
99d0: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
99e0: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
99f0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
9a00: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
9a10: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9a30: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
9a40: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
9a70: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
9a80: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74   in use */.  int
9a90: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
9aa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
9ab0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67  scellaneous flag
9ac0: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
9ad0: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
9b00: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
9b10: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
9b20: 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  i64 szMmap;     
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b40: 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69   Default mmap_si
9b50: 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  ze setting */.  
9b60: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
9b70: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
9b80: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
9b90: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
9ba0: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
9bb0: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
9bc0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
9bd0: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
9be0: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
9bf0: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c10: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
9c20: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
9c30: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
9c40: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
9c50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9c60: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
9c70: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
9c80: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
9c90: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9cb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
9cc0: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
9cf0: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
9d00: 20 62 55 6e 6c 6f 63 6b 65 64 3b 20 20 20 20 20   bUnlocked;     
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
9d20: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
9d30: 6f 6e 20 69 73 20 22 55 4e 4c 4f 43 4b 45 44 22  on is "UNLOCKED"
9d40: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
9d50: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
9d60: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
9d70: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
9d80: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
9d90: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
9da0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
9db0: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
9dc0: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
9dd0: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
9de0: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
9df0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
9e00: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
9e10: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
9e20: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
9e30: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
9e40: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
9e50: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
9e60: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
9e70: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
9e80: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
9e90: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
9ea0: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
9eb0: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
9ec0: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
9ed0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
9ee0: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
9ef0: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
9f00: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
9f10: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
9f20: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
9f30: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
9f40: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
9f50: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
9f60: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
9f70: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
9f80: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
9f90: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fb0: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
9fc0: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
9fd0: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
9fe0: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
9ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a000: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
a010: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
a020: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
a030: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
a040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
a050: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
a060: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
a070: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
a080: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
a090: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
a0a0: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
a0b0: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
a0c0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
a0d0: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
a0e0: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
a0f0: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
a100: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
a110: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
a120: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
a130: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
a140: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
a150: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
a160: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
a170: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
a180: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
a190: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a1b0: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
a1c0: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
a1d0: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
a1e0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
a1f0: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
a200: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
a210: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
a220: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
a230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
a240: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
a250: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
a260: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  igger */.    u8 
a270: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20  imposterTable;  
a280: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c           /* Buil
a290: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
a2a0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e   table */.  } in
a2b0: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
a2c0: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
a2d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a2e0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
a2f0: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
a300: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
a310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a320: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
a330: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
a340: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
a350: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
a360: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a370: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
a380: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
a390: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
a3a0: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a3c0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
a3d0: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
a3e0: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
a3f0: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
a400: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a410: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
a420: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
a430: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
a440: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
a450: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a460: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
a470: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
a480: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
a490: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
a4a0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
a4b0: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
a4c0: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
a4d0: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
a4e0: 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61  );        /* Tra
a4f0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
a500: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
a510: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a530: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
a540: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
a550: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
a560: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
a570: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
a580: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
a590: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
a5a0: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5c0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
a5d0: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
a5e0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
a5f0: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
a600: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a610: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
a620: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
a630: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
a640: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
a650: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
a660: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
a670: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
a680: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
a690: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a6a0: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
a6b0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
a6c0: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
a6d0: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
a6e0: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
a6f0: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
a700: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
a710: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
a720: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
a730: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
a740: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
a750: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
a760: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
a770: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
a780: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
a790: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
a7a0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
a7b0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
a7c0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
a7d0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
a7e0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
a7f0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
a800: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
a810: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
a820: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
a830: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
a840: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
a850: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
a860: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
a870: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
a880: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
a890: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
a8a0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
a8b0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
a8c0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
a8d0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
a8e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
a8f0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
a900: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
a910: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
a920: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
a930: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
a940: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
a950: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
a960: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
a970: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
a980: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
a990: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
a9a0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
a9b0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
a9c0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
a9d0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
a9e0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
a9f0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
aa00: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
aa10: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
aa20: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
aa30: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
aa40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
aa50: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
aa60: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
aa70: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
aa80: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
aa90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
aaa0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
aab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
aac0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
aad0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
aae0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
aaf0: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
ab00: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
ab10: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
ab20: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
ab30: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
ab40: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
ab50: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
ab60: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
ab70: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
ab80: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
ab90: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
aba0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
abb0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
abc0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
abd0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
abe0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
abf0: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
ac00: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
ac10: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
ac20: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
ac30: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
ac40: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
ac50: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
ac60: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
ac70: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
ac80: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
ac90: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
aca0: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
acb0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
acc0: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  () */.#endif.  F
acd0: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
ace0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
acf0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
ad00: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
ad10: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
ad20: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
ad30: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
ad40: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
ad50: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
ad60: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
ad70: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
ad80: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
ad90: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
ada0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
adb0: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
adc0: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
add0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
ade0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
adf0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
ae00: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
ae10: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
ae20: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
ae30: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
ae40: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
ae50: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
ae60: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
ae70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ae80: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
ae90: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
aea0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
aeb0: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
aec0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
aed0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
aee0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
aef0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
af00: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
af10: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
af20: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
af30: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
af40: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
af50: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
af60: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
af70: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
af80: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
af90: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
afa0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
afb0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
afc0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
afd0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
afe0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
aff0: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
b000: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
b010: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
b020: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
b030: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
b040: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
b050: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
b060: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
b070: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
b080: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
b090: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
b0a0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
b0b0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b0c0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
b0d0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
b0e0: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
b0f0: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
b100: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
b110: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
b120: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
b130: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
b140: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
b150: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
b160: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
b170: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
b180: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
b190: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
b1a0: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
b1b0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
b1c0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
b1d0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
b1e0: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
b1f0: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
b200: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
b210: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
b220: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
b230: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
b240: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
b250: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
b260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b270: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
b280: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
b290: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
b2a0: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
b2b0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
b2c0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
b2d0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
b2e0: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
b2f0: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
b300: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
b310: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
b320: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
b330: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b340: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
b350: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
b360: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
b370: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
b380: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
b390: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
b3a0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
b3b0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
b3c0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
b3d0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
b3e0: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
b3f0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
b400: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
b410: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
b420: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
b430: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
b440: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
b450: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
b460: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
b470: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
b480: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
b490: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
b4a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b4b0: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
b4c0: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
b4d0: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
b4e0: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
b4f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b500: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
b510: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
b520: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
b530: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
b540: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b550: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
b560: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
b570: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
b580: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
b590: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
b5a0: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
b5b0: 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74  0000010  /* OK t
b5c0: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
b5d0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
b5e0: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
b5f0: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
b600: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
b610: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
b620: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
b630: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
b640: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
b650: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
b660: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
b670: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b680: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
b690: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
b6a0: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
b6b0: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
b6f0: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
b700: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b730: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
b740: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
b750: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
b760: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
b770: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
b780: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
b790: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
b7a0: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
b7e0: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
b7f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b800: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
b810: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
b820: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
b830: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
b840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b850: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
b860: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
b870: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
b880: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
b890: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b8a0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
b8b0: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
b8c0: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
b8d0: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
b8e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
b8f0: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
b900: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
b910: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
b920: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
b930: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
b940: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
b950: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
b960: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
b970: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
b980: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
b990: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
b9a0: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
b9b0: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
b9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b9d0: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
b9e0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
b9f0: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
ba00: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
ba10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba20: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
ba30: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
ba40: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
ba50: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
ba60: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
ba70: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
ba80: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
ba90: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
baa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bab0: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
bac0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
bad0: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
bae0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
baf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
bb00: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
bb10: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
bb20: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
bb30: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
bb40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
bb50: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
bb60: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
bb70: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
bb80: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bb90: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
bba0: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
bbb0: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
bbc0: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
bbd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bbe0: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
bbf0: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
bc00: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
bc10: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
bc20: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
bc30: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
bc40: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
bc50: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
bc60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc70: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
bc80: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
bc90: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
bca0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
bcb0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
bcc0: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
bcd0: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
bce0: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
bcf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bd00: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
bd10: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
bd20: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
bd30: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
bd40: 69 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75  ine SQLITE_Vacuu
bd50: 6d 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  m         0x0800
bd60: 30 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74  0000  /* Current
bd70: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
bd80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bd90: 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20  _CellSizeCk     
bda0: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
bdb0: 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20  heck btree cell 
bdc0: 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f  sizes on load */
bdd0: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
bde0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
bdf0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
be00: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
be10: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
be20: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
be30: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
be40: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
be50: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
be60: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
be70: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
be80: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
be90: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
bea0: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
beb0: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
bec0: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
bed0: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
bee0: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
bef0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
bf00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bf10: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
bf20: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
bf30: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
bf40: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
bf50: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
bf60: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
bf70: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
bf80: 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20  toring */./*    
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20              not 
bfa0: 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20  used    0x0010  
bfb0: 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f   // Was: SQLITE_
bfc0: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a  IdxRealAsInt */.
bfd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
bfe0: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
bff0: 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0020   /* DISTIN
c000: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
c010: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c020: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
c030: 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f    0x0040   /* Co
c040: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
c050: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
c060: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
c070: 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20  oin 0x0080   /* 
c080: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
c090: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
c0a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75  define SQLITE_Su
c0b0: 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30  bqCoroutine  0x0
c0c0: 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74  100   /* Evaluat
c0d0: 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20  e subqueries as 
c0e0: 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64  coroutines */.#d
c0f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
c100: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32  nsitive     0x02
c110: 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  00   /* Transiti
c120: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
c130: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c140: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
c150: 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0400   /* Omit
c160: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
c170: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
c180: 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34  ne SQLITE_Stat34
c190: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20           0x0800 
c1a0: 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f    /* Use STAT3 o
c1b0: 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a  r STAT4 data */.
c1c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c1d0: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
c1e0: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
c1f0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
c200: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
c210: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
c220: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
c230: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
c240: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
c250: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c260: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
c270: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
c280: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
c290: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
c2a0: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
c2b0: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
c2c0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
c2d0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
c2e0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
c2f0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
c300: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
c310: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
c320: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
c330: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
c340: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
c350: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
c360: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
c370: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
c380: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
c390: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
c3a0: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
c3b0: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
c3c0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
c3d0: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
c3e0: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
c3f0: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
c400: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
c410: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
c420: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
c430: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
c440: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
c450: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
c460: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
c470: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
c480: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
c490: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
c4a0: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
c4b0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
c4c0: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
c4d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c4e0: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
c4f0: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
c500: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
c510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
c520: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
c530: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
c540: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
c550: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c560: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
c570: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
c580: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
c590: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
c5a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c5b0: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
c5c0: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
c5d0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
c5e0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
c5f0: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
c600: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
c610: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
c620: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
c630: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c640: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
c650: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
c660: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
c670: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
c680: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
c690: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
c6a0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
c6b0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
c6c0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
c6d0: 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65  cture.  A pointe
c6e0: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
c6f0: 75 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ure is stored in
c700: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e   the sqlite.aFun
c710: 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  c.** hash table.
c720: 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20    When multiple 
c730: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74  functions have t
c740: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68  he same name, th
c750: 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20  e hash table.** 
c760: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b  points to a link
c770: 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65  ed list of these
c780: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a   structures..*/.
c790: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
c7a0: 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20  .  i16 nArg;    
c7b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7c0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
c7d0: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
c7e0: 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e  ted */.  u16 fun
c7f0: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
c800: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
c810: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
c820: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
c830: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
c840: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
c850: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
c860: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
c870: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
c880: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
c890: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
c8a0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
c8b0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
c8c0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c  lue**); /* Regul
c8d0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ar function */. 
c8e0: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
c8f0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
c900: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
c910: 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61  e**); /* Aggrega
c920: 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  te step */.  voi
c930: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
c940: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
c950: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c960: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69   /* Aggregate fi
c970: 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61  nalizer */.  cha
c980: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
c990: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
c9a0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
c9b0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61  /.  FuncDef *pHa
c9c0: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
c9d0: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
c9e0: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
c9f0: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75  ame hash */.  Fu
ca00: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
ca10: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
ca20: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
ca30: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
ca40: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
ca50: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
ca60: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
ca70: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
ca80: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
ca90: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
caa0: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
cab0: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
cac0: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
cad0: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
cae0: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
caf0: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
cb00: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
cb10: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
cb20: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
cb30: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
cb40: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
cb50: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
cb60: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
cb70: 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d  t to .** the num
cb80: 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f  ber of FuncDef o
cb90: 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28  bjects created (
cba0: 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64  either 1 or 3, d
cbb0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
cbc0: 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68  her.** or not th
cbd0: 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f  e specified enco
cbe0: 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41  ding is SQLITE_A
cbf0: 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66  NY). The FuncDef
cc00: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
cc10: 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f  member of each o
cc20: 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65  f the new FuncDe
cc30: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74  f objects is set
cc40: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
cc50: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75   allocated.** Fu
cc60: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a  ncDestructor..**
cc70: 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20  .** Thereafter, 
cc80: 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  when one of the 
cc90: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
cca0: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
ccb0: 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75  reference.** cou
ccc0: 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63  nt on this objec
ccd0: 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64  t is decremented
cce0: 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65  . When it reache
ccf0: 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63  s 0, the destruc
cd00: 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  tor.** is invoke
cd10: 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65  d and the FuncDe
cd20: 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75  structor structu
cd30: 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72  re freed..*/.str
cd40: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
cd50: 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b  or {.  int nRef;
cd60: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
cd70: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76  oy)(void *);.  v
cd80: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a  oid *pUserData;.
cd90: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
cda0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
cdb0: 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f  ncDef.flags.  No
cdc0: 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e  te that the _LEN
cdd0: 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a  GTH and _TYPEOF.
cde0: 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63  ** values must c
cdf0: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46  orrespond to OPF
ce00: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
ce10: 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
ce20: 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  RG.  There.** ar
ce30: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
ce40: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
ce50: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
ce60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
ce70: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
ce80: 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54    0x003 /* SQLIT
ce90: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
cea0: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
ceb0: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
cec0: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
ced0: 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69    0x004 /* Candi
cee0: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
cef0: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
cf00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cf10: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
cf20: 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  x008 /* Case-sen
cf30: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
cf40: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
cf50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
cf60: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31 30 20  _EPHEM    0x010 
cf70: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
cf80: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
cf90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cfa0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
cfb0: 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33  0x020 /* sqlite3
cfc0: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
cfd0: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
cfe0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cff0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
d000: 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d   0x040 /* Built-
d010: 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63  in length() func
d020: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
d030: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
d040: 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75  OF   0x080 /* Bu
d050: 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20  ilt-in typeof() 
d060: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
d070: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d080: 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f  COUNT    0x100 /
d090: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
d0a0: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
d0b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d0c0: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
d0d0: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
d0e0: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
d0f0: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
d100: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
d110: 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20  LIKELY 0x400 /* 
d120: 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c  Built-in unlikel
d130: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
d140: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d150: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38  UNC_CONSTANT 0x8
d160: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
d170: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
d180: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
d190: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d1a0: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30  UNC_MINMAX  0x10
d1b0: 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
d1c0: 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
d1d0: 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a  ggregates */../*
d1e0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
d1f0: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
d200: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
d210: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
d220: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
d230: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
d240: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
d250: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
d260: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
d270: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
d280: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
d290: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
d2a0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
d2b0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
d2c0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
d2d0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
d2e0: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
d2f0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
d300: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
d310: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
d320: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
d330: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
d340: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
d350: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
d360: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
d370: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
d380: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
d390: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
d3a0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
d3b0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
d3c0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
d3d0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
d3e0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
d3f0: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
d400: 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    VFUNCTION(zNam
d410: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d420: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
d430: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
d440: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
d450: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
d460: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a  CONSTANT flag..*
d470: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
d480: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d490: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
d4a0: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
d4b0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
d4c0: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
d4d0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
d4e0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
d4f0: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
d500: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
d510: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
d520: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
d530: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
d540: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
d550: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
d560: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
d570: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
d580: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
d590: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
d5a0: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
d5b0: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
d5c0: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
d5d0: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
d5e0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
d5f0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
d600: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
d610: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
d620: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
d630: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
d640: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
d650: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
d660: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
d670: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
d680: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
d690: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
d6a0: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
d6b0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
d6c0: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
d6d0: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
d6e0: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
d6f0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
d700: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
d710: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
d720: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
d730: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
d740: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d750: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d760: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
d770: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
d780: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
d790: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
d7a0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
d7b0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
d7c0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
d7d0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
d7e0: 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
d7f0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d800: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
d810: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d820: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
d830: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
d840: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
d850: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
d860: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
d870: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
d880: 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a  fine FUNCTION2(z
d890: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d8a0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78  , bNC, xFunc, ex
d8b0: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
d8c0: 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f  Arg,SQLITE_FUNC_
d8d0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
d8e0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
d8f0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
d900: 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20  extraFlags,\.   
d910: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
d920: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
d930: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
d940: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53   0, 0}.#define S
d950: 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  TR_FUNCTION(zNam
d960: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62  e, nArg, pArg, b
d970: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
d980: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d990: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d9a0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
d9b0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d9c0: 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
d9d0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
d9e0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d9f0: 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
da00: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
da10: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
da20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
da30: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
da40: 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
da50: 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
da60: 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a  keFunc, 0, 0, #z
da70: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
da80: 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
da90: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
daa0: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
dab0: 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  l) \.  {nArg, SQ
dac0: 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
dad0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
dae0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
daf0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
db00: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
db10: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
db20: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
db30: 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  TE2(zName, nArg,
db40: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
db50: 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c   xFinal, extraFl
db60: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
db70: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
db80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
db90: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
dba0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
dbb0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
dbc0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
dbd0: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f  l,#zName,0,0}../
dbe0: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
dbf0: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
dc00: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
dc10: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
dc20: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
dc30: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
dc40: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
dc50: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
dc60: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
dc70: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
dc80: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
dc90: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
dca0: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
dcb0: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
dcc0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
dcd0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
dce0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
dcf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
dd00: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
dd10: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
dd20: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
dd30: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
dd40: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
dd50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
dd60: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
dd70: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
dd80: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
dd90: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
dda0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
ddb0: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
ddc0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
ddd0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
dde0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
ddf0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
de00: 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
de10: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
de20: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
de30: 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
de40: 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
de50: 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
de60: 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
de70: 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
de80: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
de90: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
dea0: 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
deb0: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
dec0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
ded0: 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
dee0: 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
def0: 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
df00: 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
df10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
df20: 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
df30: 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
df40: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
df50: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
df60: 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
df70: 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
df80: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
df90: 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
dfa0: 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
dfb0: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
dfc0: 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
dfd0: 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
dfe0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
dff0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
e000: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
e010: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
e020: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
e030: 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
e060: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
e070: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
e080: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
e090: 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
e0a0: 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
e0b0: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
e0c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
e0d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
e0e0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
e0f0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
e100: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
e110: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
e120: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
e130: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
e140: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
e150: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
e160: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
e170: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
e180: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
e190: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e1a0: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
e1b0: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
e1c0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
e1d0: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
e1e0: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
e1f0: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
e200: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
e210: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
e220: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e230: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
e240: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
e250: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
e260: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
e270: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
e280: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
e290: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
e2a0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
e2b0: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
e2c0: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
e2d0: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
e2e0: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
e2f0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
e300: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
e310: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
e320: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
e330: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
e340: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
e350: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
e360: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
e370: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
e380: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
e390: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
e3a0: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
e3b0: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
e3c0: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
e3d0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
e3e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
e3f0: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
e400: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
e410: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
e420: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
e430: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
e440: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e450: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e460: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e470: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
e480: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
e490: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
e4a0: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
e4b0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
e4c0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
e4d0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
e4e0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
e4f0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
e500: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
e510: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
e520: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
e530: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
e540: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
e550: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
e560: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
e570: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
e580: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
e590: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
e5a0: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
e5b0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e5c0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
e5d0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
e5e0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
e5f0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
e600: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
e610: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
e620: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
e630: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
e640: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
e650: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
e660: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
e670: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
e680: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
e690: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
e6a0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
e6b0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
e6c0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
e6d0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
e6e0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
e6f0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
e700: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
e710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e720: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
e730: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
e740: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
e750: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
e760: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
e770: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
e780: 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  g order */../*.*
e790: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
e7a0: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
e7b0: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
e7c0: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
e7d0: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
e7e0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e7f0: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
e800: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
e810: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
e820: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
e830: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
e840: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
e850: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
e860: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
e870: 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a  utively.  .**.**
e880: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
e890: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
e8a0: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
e8b0: 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79  h 'A'.  That way
e8c0: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
e8d0: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
e8e0: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
e8f0: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
e900: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
e910: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
e920: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
e930: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
e940: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
e950: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
e960: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
e970: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
e980: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
e990: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
e9a0: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
e9b0: 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42  ison.  And the B
e9c0: 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73  LOB type is firs
e9d0: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  t..*/.#define SQ
e9e0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20  LITE_AFF_BLOB   
e9f0: 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51    'A'.#define SQ
ea00: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
ea10: 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51    'B'.#define SQ
ea20: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
ea30: 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51    'C'.#define SQ
ea40: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ea50: 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51    'D'.#define SQ
ea60: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
ea70: 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73    'E'..#define s
ea80: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
ea90: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
eaa0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
eab0: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
eac0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
ead0: 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
eae0: 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
eaf0: 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
eb00: 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20  affinity value. 
eb10: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
eb20: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
eb30: 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
eb40: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
eb50: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
eb60: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
eb70: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
eb80: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
eb90: 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
eba0: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
ebb0: 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
ebc0: 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
ebd0: 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
ebe0: 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
ebf0: 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
ec00: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
ec10: 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
ec20: 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
ec30: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
ec40: 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
ec50: 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
ec60: 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
ec70: 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
ec80: 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
ec90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
eca0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
ecb0: 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
ecc0: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
ecd0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
ece0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ecf0: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
ed00: 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
ed10: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
ed20: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
ed30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ed40: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
ed50: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
ed60: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
ed70: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
ed80: 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
ed90: 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
eda0: 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
edb0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
edc0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
edd0: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
ede0: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
edf0: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
ee00: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
ee10: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
ee20: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
ee30: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
ee40: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
ee50: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
ee60: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
ee70: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
ee80: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
ee90: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
eea0: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
eeb0: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
eec0: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
eed0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
eee0: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
eef0: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
ef00: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
ef10: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
ef20: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
ef30: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
ef40: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
ef50: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
ef60: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
ef70: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
ef80: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
ef90: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
efa0: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
efb0: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
efc0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
efd0: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
efe0: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
eff0: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
f000: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
f010: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
f020: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
f030: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
f040: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
f050: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
f060: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
f070: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
f080: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
f090: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
f0a0: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
f0b0: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
f0c0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
f0d0: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
f0e0: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
f0f0: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
f100: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
f110: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
f120: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
f130: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
f140: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
f150: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
f160: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
f170: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
f180: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
f190: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
f1a0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
f1b0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
f1c0: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
f1d0: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
f1e0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
f1f0: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
f200: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
f210: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
f220: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
f230: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
f240: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
f250: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
f260: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
f270: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
f280: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
f290: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
f2a0: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
f2b0: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
f2c0: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
f2d0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
f2e0: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
f2f0: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
f300: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
f310: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
f320: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
f330: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
f340: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
f350: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
f360: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
f370: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f380: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
f390: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
f3a0: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
f3b0: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
f3c0: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
f3d0: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
f3e0: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
f3f0: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
f400: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
f410: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
f420: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
f430: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
f440: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
f450: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
f460: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
f470: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
f480: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
f490: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
f4a0: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
f4b0: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
f4c0: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
f4d0: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
f4e0: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
f4f0: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
f500: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
f510: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
f520: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
f530: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
f540: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
f550: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
f560: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
f570: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
f580: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
f590: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
f5a0: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
f5b0: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
f5c0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
f5d0: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
f5e0: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
f5f0: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
f600: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
f610: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
f620: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
f630: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
f640: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
f650: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
f660: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
f670: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
f680: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
f690: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
f6a0: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
f6b0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
f6c0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
f6d0: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
f6e0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
f6f0: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
f700: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
f710: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
f720: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
f730: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
f740: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
f750: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
f760: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
f770: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
f780: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
f790: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
f7a0: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
f7b0: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
f7c0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
f7d0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
f7e0: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
f7f0: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
f800: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
f810: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
f820: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
f850: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
f860: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
f870: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
f880: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
f890: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
f8a0: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
f8b0: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
f8c0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
f8d0: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
f8e0: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
f8f0: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
f900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
f910: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
f920: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
f930: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
f940: 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
f950: 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
f960: 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
f970: 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
f980: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f990: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f9a0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
f9b0: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
f9c0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
f9d0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
f9e0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
f9f0: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
fa00: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
fa10: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
fa20: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
fa30: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
fa40: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
fa50: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
fa60: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
fa70: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
fa80: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
fa90: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
faa0: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
fab0: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
fac0: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
fad0: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
fae0: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
faf0: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
fb00: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
fb10: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
fb20: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
fb30: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
fb40: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
fb50: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
fb60: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
fb70: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
fb80: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
fb90: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
fba0: 64 69 66 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20  dif.  int tnum; 
fbb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
fbc0: 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
fbd0: 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
fbe0: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
fbf0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
fc00: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
fc10: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
fc20: 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
fc30: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
fc40: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
fc50: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
fc60: 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52  able */.  u16 nR
fc70: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
fc80: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
fc90: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
fca0: 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
fcb0: 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
fcc0: 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
fcd0: 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
fce0: 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
fcf0: 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
fd00: 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
fd10: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
fd20: 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
fd30: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
fd40: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
fd50: 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
fd60: 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
fd70: 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
fd80: 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
fd90: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
fda0: 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  if.  u8 tabFlags
fdb0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
fdc0: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
fdd0: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
fde0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
fdf0: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
fe00: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
fe10: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
fe20: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
fe30: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
fe40: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
fe50: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
fe60: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
fe70: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
fe80: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
fe90: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
fea0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
feb0: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
fec0: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
fed0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
fee0: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
fef0: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
ff00: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
ff10: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
ff20: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
ff30: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
ff40: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
ff50: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
ff60: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
ff70: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
ff80: 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
ff90: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
ffa0: 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
ffb0: 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
ffc0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
ffd0: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
ffe0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
fff0: 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
10000 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
10010 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
10020 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
10030 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
10040 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
10050 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
10060 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
10070 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
10080 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
10090 73 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  s that have hidd
100a0 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
100b0 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
100c0 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
100d0 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
100e0 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
100f0 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
10100 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
10110 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
10120 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
10130 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
10140 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
10150 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
10160 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
10170 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
10180 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
10190 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
101a0 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
101b0 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
101c0 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
101d0 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
101e0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
101f0 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
10200 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
10210 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
10220 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
10230 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  * An ephemeral t
10240 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
10250 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
10260 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61     0x04    /* Ta
10270 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
10280 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
10290 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
102a0 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49  t   0x08    /* I
102b0 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
102c0 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d  ey is autoincrem
102d0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ent */.#define T
102e0 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20  F_Virtual       
102f0 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20    0x10    /* Is 
10300 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
10310 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69  */.#define TF_Wi
10320 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78  thoutRowid    0x
10330 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
10340 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
10350 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
10360 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
10370 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20 20 20  leRowid  0x40   
10380 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
10390 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
103a0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
103b0 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
103c0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d   0x80    /* Out-
103d0 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
103e0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a  columns */.../*.
103f0 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
10400 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
10410 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
10420 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
10430 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
10440 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
10450 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
10460 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
10470 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
10480 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
10490 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
104a0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
104b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
104c0 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
104d0 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
104e0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
104f0 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
10500 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
10510 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
10520 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
10530 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
10540 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
10550 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
10560 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
10570 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
10580 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
10590 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20   Does the table 
105a0 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a  have a rowid */.
105b0 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64  #define HasRowid
105c0 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74  (X)     (((X)->t
105d0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74  abFlags & TF_Wit
105e0 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23  houtRowid)==0).#
105f0 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f  define VisibleRo
10600 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61  wid(X) (((X)->ta
10610 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69  bFlags & TF_NoVi
10620 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a  sibleRowid)==0).
10630 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
10640 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
10650 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
10660 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10670 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
10680 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
10690 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
106a0 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
106b0 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
106c0 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
106d0 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
106e0 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
106f0 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
10700 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
10710 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
10720 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
10730 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
10740 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
10750 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
10760 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
10770 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
10780 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
10790 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
107a0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
107b0 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
107c0 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
107d0 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
107e0 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
107f0 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
10800 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
10810 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10820 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
10830 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
10840 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
10850 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
10860 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
10870 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
10880 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
10890 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
108a0 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
108b0 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
108c0 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
108d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
108e0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
108f0 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
10900 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
10910 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
10920 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
10930 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
10940 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
10950 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
10960 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
10970 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
10980 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
10990 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
109a0 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
109b0 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
109c0 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
109d0 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
109e0 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
109f0 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
10a00 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
10a10 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
10a20 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
10a30 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
10a40 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
10a50 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
10a60 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
10a70 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
10a80 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10a90 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
10aa0 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
10ab0 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
10ac0 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
10ad0 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
10ae0 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
10af0 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
10b00 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
10b10 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
10b20 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
10b30 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
10b40 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10b50 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
10b60 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
10b70 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
10b80 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
10b90 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
10ba0 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
10bb0 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
10bc0 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
10bd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10be0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
10bf0 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
10c00 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
10c10 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
10c20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
10c30 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
10c40 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
10c50 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
10c60 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
10c70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
10c80 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
10c90 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
10ca0 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
10cb0 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
10cc0 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
10cd0 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
10ce0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
10cf0 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
10d00 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
10d10 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
10d20 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
10d30 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
10d40 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
10d50 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
10d60 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
10d70 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
10d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10d90 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
10da0 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
10db0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
10dc0 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
10dd0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
10de0 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
10df0 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
10e00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
10e10 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
10e20 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
10e30 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
10e40 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
10e50 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
10e60 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
10e70 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
10e80 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
10e90 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
10ea0 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
10eb0 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
10ec0 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
10ed0 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
10ee0 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
10ef0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10f00 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
10f10 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
10f20 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
10f30 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
10f40 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
10f50 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
10f60 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
10f70 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
10f80 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
10f90 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
10fa0 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
10fb0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
10fc0 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
10fd0 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
10fe0 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
10ff0 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
11000 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
11010 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
11020 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
11030 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
11040 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
11050 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
11060 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
11070 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
11080 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
11090 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
110a0 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
110b0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
110c0 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
110d0 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
110e0 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
110f0 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
11100 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
11110 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
11120 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
11130 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
11140 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
11150 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
11160 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
11170 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
11180 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
11190 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
111a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
111b0 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
111c0 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
111d0 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
111e0 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
111f0 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
11200 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
11210 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
11220 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
11230 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
11240 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
11250 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
11260 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
11270 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
11280 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
11290 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
112a0 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
112b0 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
112c0 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
112d0 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
112e0 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
112f0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
11300 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
11310 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
11320 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
11330 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
11340 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
11350 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
11360 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
11370 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
11380 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
11390 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
113a0 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
113b0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
113c0 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
113d0 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
113e0 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
113f0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
11400 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
11410 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
11420 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
11430 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
11440 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
11450 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
11460 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
11470 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
11480 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
11490 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
114a0 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
114b0 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
114c0 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
114d0 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
114e0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
114f0 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
11500 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
11510 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
11520 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
11530 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
11540 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
11550 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
11560 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
11570 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
11580 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
11590 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
115a0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
115b0 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
115c0 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
115d0 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
115e0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
115f0 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
11600 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
11610 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
11620 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
11630 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
11640 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
11650 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
11660 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
11670 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
11680 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11690 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
116a0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
116b0 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
116c0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
116d0 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
116e0 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
116f0 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
11700 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
11710 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
11720 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
11730 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
11740 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
11750 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
11760 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
11770 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
11780 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
11790 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
117a0 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
117b0 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
117c0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
117d0 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
117e0 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
117f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11800 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
11810 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
11820 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
11830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11840 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
11850 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
11860 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
11870 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
11880 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11890 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
118a0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
118b0 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20  .  u16 nXField; 
118c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
118d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f   of columns beyo
118e0 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d  nd the key colum
118f0 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ns */.  sqlite3 
11900 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
11910 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
11920 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
11930 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
11940 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
11950 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
11960 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
11970 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
11980 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
11990 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
119a0 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
119b0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
119c0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
119d0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
119e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
119f0 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69  ut a.** single i
11a00 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74  ndex record that
11a10 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
11a20 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
11a30 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
11a40 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  values..**.** A 
11a50 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
11a60 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
11a70 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
11a80 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
11a90 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
11aa0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
11ab0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
11ac0 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
11ad0 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
11ae0 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
11af0 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
11b00 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
11b10 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
11b20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
11b30 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
11b40 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
11b50 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
11b60 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
11b70 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
11b80 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  re holds a recor
11b90 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
11ba0 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d  dy been disassem
11bb0 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73  bled.** into its
11bc0 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65   constituent fie
11bd0 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  lds..**.** The r
11be0 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20  1 and r2 member 
11bf0 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
11c00 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20 6f  ly used by the o
11c10 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69  ptimized compari
11c20 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  son.** functions
11c30 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
11c40 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65  reInt() and vdbe
11c50 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72  RecordCompareStr
11c60 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74  ing()..*/.struct
11c70 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
11c80 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
11c90 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
11ca0 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
11cb0 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
11cc0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
11cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11ce0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
11cf0 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
11d00 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
11d10 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
11d20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
11d30 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
11d40 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
11d50 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
11d60 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
11d70 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
11d80 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65  r NOMEM) */.  Me
11d90 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
11da0 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
11db0 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20   int r1;        
11dc0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
11dd0 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
11de0 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20  > rhs) */.  int 
11df0 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
11e00 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
11e10 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
11e20 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  ) */.};.../*.** 
11e30 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
11e40 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
11e50 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
11e60 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11e70 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11e80 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
11e90 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
11ea0 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
11eb0 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
11ec0 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
11ed0 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
11ee0 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
11ef0 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
11f00 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
11f10 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
11f20 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
11f30 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
11f40 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
11f50 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
11f60 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
11f70 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
11f80 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
11f90 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
11fa0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
11fb0 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
11fc0 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
11fd0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
11fe0 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
11ff0 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
12000 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
12010 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
12020 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
12030 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
12040 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
12050 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
12060 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
12070 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
12080 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
12090 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a   because the .**
120a0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
120b0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
120c0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
120d0 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
120e0 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
120f0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
12100 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
12110 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
12120 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
12130 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
12140 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
12150 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
12160 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
12170 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
12180 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
12190 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
121a0 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
121b0 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
121c0 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
121d0 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
121e0 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
121f0 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
12200 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
12210 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
12220 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
12230 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
12240 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
12250 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
12260 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
12270 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  ion .** algorith
12280 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
12290 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
122a0 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
122b0 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
122c0 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  * element..**.**
122d0 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   While parsing a
122e0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72   CREATE TABLE or
122f0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
12300 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72  atement in order
12310 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20   to.** generate 
12320 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70  VDBE code (as op
12330 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67  posed to parsing
12340 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61   one read from a
12350 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  n sqlite_master.
12360 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74  ** table as part
12370 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65   of parsing an e
12380 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
12390 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69   schema), transi
123a0 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a  ent instances.**
123b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
123c0 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  re may be create
123d0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
123e0 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76  the Index.tnum v
123f0 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73  ariable is.** us
12400 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
12410 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42  address of a VDB
12420 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e  E instruction, n
12430 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61  ot a database pa
12440 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74  ge.** number (it
12450 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61   cannot - the da
12460 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e  tabase page is n
12470 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74  ot allocated unt
12480 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70  il the VDBE.** p
12490 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74  rogram is execut
124a0 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74  ed). See convert
124b0 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61  ToWithoutRowidTa
124c0 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c  ble() for detail
124d0 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  s..*/.struct Ind
124e0 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
124f0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
12500 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
12510 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
12520 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
12530 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
12540 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
12550 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
12560 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
12570 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
12580 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
12590 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
125a0 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
125b0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
125c0 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
125d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
125e0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
125f0 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
12600 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
12610 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
12620 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
12630 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
12640 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
12650 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
12660 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
12670 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
12680 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
12690 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
126a0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
126b0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
126c0 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
126d0 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
126e0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
126f0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
12700 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
12710 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
12720 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
12730 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
12740 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
12750 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
12760 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
12770 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
12780 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
12790 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
127a0 6e 64 69 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20  ndices */.  int 
127b0 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
127c0 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
127d0 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
127e0 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
127f0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
12800 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
12810 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
12820 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
12830 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
12840 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
12850 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12860 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
12870 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
12880 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
12890 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
128a0 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
128b0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
128c0 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
128d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
128e0 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
128f0 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
12900 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
12910 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
12920 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
12930 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
12940 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
12950 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
12960 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
12970 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
12980 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
12990 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
129a0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
129b0 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
129c0 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
129d0 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
129e0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
129f0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
12a00 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
12a10 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
12a20 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
12a30 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
12a40 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
12a50 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
12a60 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
12a70 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
12a80 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
12a90 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
12aa0 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
12ab0 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
12ac0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
12ad0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
12ae0 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
12af0 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
12b00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12b10 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
12b20 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
12b30 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
12b40 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
12b50 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
12b60 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
12b70 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
12b80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
12b90 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
12ba0 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
12bb0 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
12bc0 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
12bd0 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
12be0 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
12bf0 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
12c00 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
12c10 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
12c20 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
12c30 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
12c40 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
12c50 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
12c60 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12c70 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
12c80 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
12c90 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
12ca0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
12cb0 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
12cc0 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
12cd0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
12ce0 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
12cf0 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
12d00 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
12d10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
12d20 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
12d30 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
12d40 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
12d50 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
12d60 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
12d70 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
12d80 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
12d90 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
12da0 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
12db0 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
12dc0 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
12dd0 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
12de0 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
12df0 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
12e00 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
12e10 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
12e20 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
12e30 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
12e40 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
12e50 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
12e60 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
12e70 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
12e80 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a  !=OE_None)../*.*
12e90 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
12ea0 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
12eb0 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
12ec0 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
12ed0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
12ee0 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
12ef0 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
12f00 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
12f10 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
12f20 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
12f30 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
12f40 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
12f50 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
12f60 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
12f70 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
12f80 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
12f90 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
12fa0 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
12fb0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
12fc0 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
12fd0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12fe0 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
12ff0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
13000 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
13010 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
13020 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
13030 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
13040 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
13050 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
13060 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
13070 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13080 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
13090 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
130a0 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
130b0 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
130c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
130d0 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
130e0 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
130f0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
13100 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
13110 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
13120 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
13130 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
13140 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
13150 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
13160 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
13170 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
13180 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
13190 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
131a0 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
131b0 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
131c0 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
131d0 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
131e0 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
131f0 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
13200 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
13210 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
13220 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
13230 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
13240 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
13250 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
13260 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
13270 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
13280 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
13290 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
132a0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
132b0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
132c0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
132d0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
132e0 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
132f0 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
13300 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
13310 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
13320 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
13330 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
13340 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
13350 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
13360 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
13370 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
13380 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
13390 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
133a0 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
133b0 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
133c0 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
133d0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
133e0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
133f0 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
13400 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
13410 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
13420 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
13430 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
13440 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
13450 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
13460 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
13470 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
13480 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
13490 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
134a0 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
134b0 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
134c0 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
134d0 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
134e0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
134f0 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
13500 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
13510 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
13520 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
13530 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
13560 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
13570 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
13580 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
13590 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
135a0 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
135b0 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
135c0 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
135d0 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
13600 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
13610 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
13620 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
13630 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
13640 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
13650 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
13660 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
13670 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
13680 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
13690 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
136a0 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
136b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
136c0 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
136d0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
136e0 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
136f0 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
13700 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
13710 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
13720 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
13730 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
13740 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
13750 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
13760 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
13770 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
13780 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
13790 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
137a0 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
137b0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
137c0 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
137d0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
137e0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
137f0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
13800 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
13810 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
13820 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
13830 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
13840 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
13850 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
13860 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
13870 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
13880 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
13890 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
138a0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
138b0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
138c0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
138d0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
138e0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
138f0 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
13900 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
13910 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
13920 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
13930 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
13940 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
13950 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13960 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
13970 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
13980 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
13990 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
139a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
139b0 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
139c0 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
139f0 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
13a00 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
13a10 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
13a40 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
13a50 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
13a60 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
13a70 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
13a80 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
13a90 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
13aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
13ab0 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
13ac0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
13ad0 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
13ae0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
13af0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
13b00 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
13b10 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
13b20 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
13b30 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
13b40 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
13b50 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
13b60 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
13b70 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
13b80 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
13b90 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
13ba0 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
13bb0 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
13bc0 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
13bd0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13be0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
13bf0 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
13c00 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
13c10 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
13c20 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
13c30 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
13c40 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
13c50 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
13c60 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
13c70 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
13c80 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
13c90 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
13ca0 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
13cb0 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
13cc0 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
13cd0 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
13ce0 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
13cf0 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
13d00 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
13d10 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
13d20 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
13d30 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
13d40 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
13d50 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
13d60 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
13d70 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
13d80 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
13d90 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
13da0 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
13db0 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
13dc0 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
13dd0 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
13de0 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
13df0 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
13e00 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
13e10 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
13e20 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
13e30 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
13e40 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
13e50 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
13e60 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
13e70 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
13e80 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
13e90 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
13ea0 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
13eb0 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
13ec0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13ed0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
13ee0 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
13ef0 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
13f00 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
13f10 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
13f20 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
13f30 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
13f40 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
13f50 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
13f60 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
13f70 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
13f80 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
13f90 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
13fa0 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
13fb0 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
13fc0 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
13fd0 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
13fe0 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
13ff0 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
14000 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
14010 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
14020 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
14030 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
14040 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54  K_BLOB, .** or T
14050 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
14060 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
14070 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
14080 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
14090 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
140a0 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
140b0 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
140c0 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
140d0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
140e0 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
140f0 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
14100 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14110 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
14120 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
14130 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
14140 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
14150 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
14160 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
14170 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
14180 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
14190 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
141a0 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
141b0 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
141c0 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
141d0 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
141e0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
141f0 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
14200 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
14210 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14220 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
14230 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
14240 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
14250 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
14260 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
14270 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
14280 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
14290 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
142a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
142b0 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
142c0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
142d0 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
142e0 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
142f0 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
14300 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
14310 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
14320 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
14330 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
14340 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
14350 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
14360 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c  pList is .** val
14370 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
14380 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
14390 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
143a0 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
143b0 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
143c0 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
143d0 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
143e0 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
143f0 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
14400 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
14410 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
14420 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
14430 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
14440 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
14450 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
14460 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
14470 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
14480 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
14490 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
144a0 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
144b0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
144c0 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
144d0 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
144e0 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
144f0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
14500 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
14510 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
14520 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
14530 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
14540 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
14550 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
14560 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
14570 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
14580 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
14590 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
145a0 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  k .** character 
145b0 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
145c0 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
145d0 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
145e0 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  lds the index .*
145f0 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
14600 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
14610 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
14620 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
14630 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
14640 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
14650 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
14660 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
14670 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
14680 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
14690 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
146a0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
146b0 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
146c0 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
146d0 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
146e0 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
146f0 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
14700 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
14710 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
14720 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
14730 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
14740 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
14750 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
14760 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
14770 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
14780 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
14790 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
147a0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
147b0 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
147c0 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
147d0 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
147e0 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
147f0 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
14800 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
14810 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
14820 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
14830 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
14840 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
14850 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
14860 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
14870 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
14880 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
14890 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
148a0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
148b0 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
148c0 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
148d0 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
148e0 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
148f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
14900 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
14910 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
14920 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
14930 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
14940 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
14950 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
14960 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
14970 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
14980 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
14990 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
149a0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
149b0 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
149c0 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
149d0 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
149e0 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
149f0 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
14a00 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
14a10 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
14a20 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
14a30 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
14a40 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
14a50 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
14a60 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
14a70 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
14a80 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
14a90 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
14aa0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
14ab0 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
14ac0 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
14ad0 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
14ae0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
14af0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
14b00 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
14b10 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
14b20 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
14b30 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
14b40 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
14b50 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
14b60 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
14b70 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
14b80 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
14b90 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
14ba0 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
14bb0 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
14bc0 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
14bd0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
14be0 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
14bf0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
14c00 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
14c10 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
14c20 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
14c30 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
14c40 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
14c50 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
14c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
14c70 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
14c80 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
14c90 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
14ca0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
14cb0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
14cc0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
14cd0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
14ce0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
14cf0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
14d00 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
14d10 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
14d20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
14d30 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
14d40 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
14d50 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
14d60 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a  unction. .  ****
14d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14db0 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
14dc0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14dd0 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
14de0 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
14df0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
14e00 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
14e10 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
14e20 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
14e30 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
14e40 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
14e50 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
14e60 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
14e70 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
14e80 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
14e90 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
14ea0 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
14eb0 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
14ec0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
14ed0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
14ee0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
14ef0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
14f00 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
14f10 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
14f20 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
14f30 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
14f40 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
14f50 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
14f60 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
14f70 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
14f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14fc0 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
14fd0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
14fe0 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
14ff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
15000 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
15010 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
15020 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
15030 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
15040 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
15050 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
15060 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
15070 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
150a0 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
150b0 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
150d0 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
150e0 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15100 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
15110 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
15120 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
15130 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  hood */.  ynVar 
15140 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
15150 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
15160 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
15170 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
151a0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
151b0 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
151c0 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
151d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
151e0 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
151f0 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
15200 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
15210 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
15220 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
15230 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
15240 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
15250 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
15260 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
15270 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
15280 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20  ISTER: original 
15290 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
152a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
152b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
152c0 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
152d0 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
152e0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15300 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
15310 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
15320 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
15330 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
15340 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
15350 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
15360 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54  _FUNCTION */.  T
15370 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
15380 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
15390 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70  or TK_COLUMN exp
153a0 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a  ressions. */.};.
153b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
153c0 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61  wing are the mea
153d0 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e  nings of bits in
153e0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
153f0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
15400 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
15410 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
15420 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
15430 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
15440 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
15450 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
15460 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
15470 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
15480 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15490 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
154a0 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30  P_Resolved  0x00
154b0 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65  0004 /* IDs have
154c0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74   been resolved t
154d0 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65  o COLUMNs */.#de
154e0 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20  fine EP_Error   
154f0 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78    0x000008 /* Ex
15500 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e  pression contain
15510 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72  s one or more er
15520 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
15530 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
15540 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
15550 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
15560 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
15570 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
15580 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
15590 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
155a0 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
155b0 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
155c0 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
155d0 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
155e0 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
155f0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
15600 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
15610 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
15620 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
15630 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
15640 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
15650 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
15660 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
15670 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
15680 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
15690 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
156a0 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
156b0 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
156c0 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
156d0 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
156e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
156f0 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
15700 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
15710 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
15720 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
15730 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
15740 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
15750 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
15760 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
15770 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
15780 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
15790 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
157a0 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
157b0 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
157c0 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
157d0 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
157e0 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
157f0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
15800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
15810 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
15820 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
15830 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
15840 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
15850 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
15860 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
15870 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
15880 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
15890 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
158a0 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
158b0 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
158c0 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
158d0 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
158e0 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
158f0 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
15900 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
15910 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
15920 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
15930 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
15940 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
15950 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
15960 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
15970 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
15980 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
15990 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20 53  0 /* Node is a S
159a0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
159b0 41 4e 54 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ANT function */.
159c0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
159d0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
159e0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
159f0 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
15a00 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15a10 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
15a20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
15a30 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
15a40 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
15a50 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e  */../*.** Combin
15a60 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72  ations of two or
15a70 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73   more EP_* flags
15a80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
15a90 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
15aa0 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
15ab0 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74  ) /* Propagate t
15ac0 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72 65  hese bits up tre
15ad0 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  e */../*.** Thes
15ae0 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
15af0 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
15b00 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
15b10 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72   in the .** Expr
15b20 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
15b30 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
15b40 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15b50 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
15b60 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
15b70 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
15b80 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
15b90 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
15ba0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
15bb0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15bc0 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15bd0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
15be0 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
15bf0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
15c00 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
15c10 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
15c20 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
15c30 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
15c40 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
15c50 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
15c60 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
15c70 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
15c80 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
15c90 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
15ca0 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
15cb0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
15cc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
15cd0 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
15ce0 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
15cf0 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
15d00 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
15d10 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
15d20 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
15d30 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
15d40 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
15d50 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
15d60 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
15d70 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
15d80 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
15d90 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
15da0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
15db0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
15dc0 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
15dd0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
15de0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
15df0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
15e00 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
15e10 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
15e20 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
15e30 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
15e40 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
15e50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
15e60 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
15e70 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
15e80 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
15e90 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
15ea0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
15eb0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
15ec0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
15ed0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
15ee0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
15ef0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
15f00 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
15f10 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
15f20 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
15f30 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
15f40 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
15f50 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
15f60 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
15f70 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
15f80 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
15f90 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
15fa0 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
15fb0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
15fc0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
15fd0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
15fe0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
15ff0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
16000 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
16010 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
16020 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
16030 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
16040 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
16050 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
16060 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
16070 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
16080 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
16090 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
160a0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
160b0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
160c0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
160d0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
160e0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
160f0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
16100 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
16110 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
16120 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
16130 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
16140 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
16150 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
16160 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
16170 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
16180 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
16190 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
161a0 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
161b0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
161c0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
161d0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
161e0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
161f0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
16200 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
16210 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
16220 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
16230 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
16240 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
16250 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
16260 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
16270 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
16280 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
16290 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
162a0 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
162b0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
162c0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
162d0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
162e0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
162f0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
16300 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
16310 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
16320 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
16330 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
16340 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
16350 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
16360 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
16370 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
16380 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
16390 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
163a0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
163b0 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
163c0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
163d0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
163e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
163f0 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
16400 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
16410 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
16420 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
16430 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
16440 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
16450 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
16460 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
16470 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
16480 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
16490 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
164a0 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
164b0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
164c0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
164d0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
164e0 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
164f0 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
16500 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
16510 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
16520 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
16530 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
16540 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
16550 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
16560 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
16570 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
16580 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
16590 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
165a0 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
165b0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
165c0 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
165d0 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
165e0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
165f0 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
16600 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
16610 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
16620 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
16630 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
16640 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
16650 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
16660 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
16670 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
166a0 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
166b0 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
166c0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
166d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
166e0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
166f0 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
16700 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
16710 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
16720 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
16730 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
16740 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
16750 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
16760 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
16770 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
16780 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
16790 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
167a0 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
167b0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
167c0 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
167d0 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
167e0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
167f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
16800 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
16810 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
16820 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
16830 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
16840 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
16850 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
16860 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
16870 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
16880 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
16890 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
168a0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
168b0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
168c0 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
168d0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
168e0 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
168f0 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
16900 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
16910 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
16920 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
16930 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
16940 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
16950 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
16960 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
16970 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
16980 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
16990 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
169a0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
169b0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
169c0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
169d0 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
169e0 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
169f0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
16a00 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
16a10 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
16a20 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
16a30 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
16a40 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
16a50 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
16a60 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
16a70 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
16a80 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
16a90 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
16aa0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
16ab0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
16ac0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
16ad0 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
16ae0 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
16af0 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
16b00 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
16b10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16b20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
16b30 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
16b40 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
16b50 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
16b60 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
16b70 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
16b80 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
16b90 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
16ba0 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
16bb0 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
16bc0 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
16bd0 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
16be0 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
16bf0 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
16c00 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
16c10 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
16c20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
16c30 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
16c40 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
16c50 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
16c60 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
16c70 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
16c80 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
16c90 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
16ca0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
16cb0 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
16cc0 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
16cd0 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
16ce0 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
16cf0 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
16d00 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
16d10 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
16d20 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
16d30 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
16d40 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
16d50 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
16d60 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
16d70 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
16d80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
16d90 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
16da0 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
16db0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
16dc0 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
16dd0 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
16de0 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
16df0 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
16e00 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
16e10 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
16e20 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
16e30 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
16e40 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
16e50 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
16e60 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
16e70 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
16e80 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
16e90 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
16ea0 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
16eb0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
16ec0 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
16ed0 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
16ee0 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
16ef0 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
16f00 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
16f10 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
16f20 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
16f30 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
16f40 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
16f50 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
16f60 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
16f70 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
16f80 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
16f90 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
16fa0 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
16fb0 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
16fc0 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
16fd0 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
16fe0 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
16ff0 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
17000 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
17010 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
17020 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
17030 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
17040 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
17050 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
17060 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
17070 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
17080 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
17090 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
170a0 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
170b0 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
170c0 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
170d0 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
170e0 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
170f0 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
17100 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
17110 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
17120 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
17130 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
17140 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
17150 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
17160 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
17170 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
17180 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
17190 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
171a0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
171b0 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
171c0 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
171d0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
171e0 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
171f0 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
17200 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
17210 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
17220 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
17230 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
17240 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
17250 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
17260 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
17270 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
17280 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
17290 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
172a0 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
172b0 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
172c0 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
172d0 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
172e0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
172f0 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
17300 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
17310 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
17320 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
17330 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
17340 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
17350 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
17360 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
17370 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
17380 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
17390 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
173a0 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
173b0 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
173c0 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
173d0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
173e0 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
173f0 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
17400 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
17410 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
17420 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
17430 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
17440 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20  utine */.    u8 
17450 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
17460 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
17470 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65  etween this able
17480 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
17490 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  s */.    unsigne
174a0 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
174b0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
174c0 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
174d0 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
174e0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
174f0 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
17500 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
17510 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
17520 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
17530 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
17540 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
17550 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
17560 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ne */.    unsign
17570 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
17580 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
17590 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
175a0 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
175b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
175c0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
175d0 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
175e0 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
175f0 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
17600 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
17610 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
17620 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
17630 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
17640 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
17650 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
17660 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
17670 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
17680 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
17690 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
176a0 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
176b0 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
176c0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
176d0 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
176e0 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
176f0 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
17700 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
17710 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
17720 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
17730 64 42 79 3b 20 2f 2a 20 49 64 65 6e 74 69 66 69  dBy; /* Identifi
17740 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
17750 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
17760 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ause */.    Inde
17770 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a  x *pIndex;    /*
17780 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
17790 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
177a0 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79  o zIndex, if any
177b0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
177c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
177d0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
177e0 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
177f0 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
17800 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
17810 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
17820 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
17830 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
17840 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
17850 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
17860 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
17870 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
17880 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
17890 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
178a0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
178b0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
178c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
178d0 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
178e0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
178f0 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
17900 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
17910 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
17920 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
17930 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
17940 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
17950 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
17960 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
17970 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
17980 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
17990 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
179a0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
179b0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
179c0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
179d0 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
179e0 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
179f0 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
17a00 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
17a10 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
17a20 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
17a30 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
17a40 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
17a50 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
17a60 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
17a70 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17a80 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
17a90 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
17aa0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17ab0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
17ac0 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
17ad0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
17ae0 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
17af0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17b00 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
17b10 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
17b20 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
17b30 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
17b40 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17b50 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
17b60 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
17b70 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
17b80 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
17b90 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
17ba0 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
17bb0 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
17bc0 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
17bd0 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
17be0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
17bf0 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30  OPEN_CLOSE  0x00
17c00 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
17c10 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
17c20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
17c30 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
17c40 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  E      0x0020 /*
17c50 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
17c60 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
17c70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17c80 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
17c90 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c     0x0040 /* Onl
17ca0 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
17cb0 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
17cc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17cd0 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20  E_NO_AUTOINDEX  
17ce0 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73     0x0080 /* Dis
17cf0 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20  allow automatic 
17d00 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
17d10 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
17d20 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
17d30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
17d40 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
17d50 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
17d60 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
17d70 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f      0x0200 /* pO
17d80 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
17d90 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
17da0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
17db0 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
17dc0 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41  T    0x0400 /* A
17dd0 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
17de0 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
17df0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17e00 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
17e10 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f   0x0800 /* Suppo
17e20 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
17e30 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
17e40 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45  fine WHERE_REOPE
17e50 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30  N_IDX       0x10
17e60 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65  00 /* Try to use
17e70 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f   OP_ReopenIdx */
17e80 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
17e90 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
17ea0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
17eb0 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
17ec0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17ed0 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
17ee0 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
17ef0 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
17f00 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17f10 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
17f20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
17f30 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
17f40 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
17f50 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
17f60 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
17f70 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
17f80 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17f90 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
17fa0 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
17fb0 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
17fc0 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
17fd0 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
17fe0 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
17ff0 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
18000 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
18010 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
18020 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
18030 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
18040 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
18050 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
18060 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
18070 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
18080 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
18090 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
180a0 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
180b0 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
180c0 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
180d0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
180e0 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
180f0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
18100 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
18110 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
18120 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
18130 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
18140 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
18150 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
18160 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
18170 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
18180 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
18190 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
181a0 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
181b0 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
181c0 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63  inner-most .** c
181d0 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
181e0 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
181f0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
18200 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
18210 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
18220 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
18230 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
18240 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
18250 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
18260 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
18270 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
18280 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
18290 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
182a0 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
182b0 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
182c0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
182d0 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
182e0 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
182f0 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
18300 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
18310 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61  ented. .**.** Ea
18320 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
18330 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
18340 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
18350 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
18360 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
18370 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
18380 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
18390 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
183a0 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
183b0 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
183c0 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
183d0 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
183e0 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
183f0 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
18400 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
18410 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
18420 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
18430 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
18440 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
18450 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
18460 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
18470 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
18480 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
18490 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
184a0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
184b0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
184c0 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
184d0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
184e0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
184f0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
18500 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
18510 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
18520 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
18530 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
18540 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
18550 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
18560 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
18570 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
18580 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18590 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
185a0 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
185b0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
185c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
185d0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
185e0 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
185f0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
18600 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
18610 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
18620 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
18630 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
18640 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
18650 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
18660 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
18670 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
18680 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20  d..**.** Note:  
18690 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73  NC_MinMaxAgg mus
186a0 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t have the same 
186b0 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d  value as SF_MinM
186c0 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c  axAgg and.** SQL
186d0 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e  ITE_FUNC_MINMAX.
186e0 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  .** .*/.#define 
186f0 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
18700 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
18710 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
18720 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
18730 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
18740 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  g    0x0002  /* 
18750 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
18760 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18770 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
18780 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
18790 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  004  /* True if 
187a0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
187b0 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
187c0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
187d0 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
187e0 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66  0008  /* True if
187f0 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
18800 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
18810 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
18820 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
18830 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  10  /* True if r
18840 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
18850 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
18860 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
18870 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
18880 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
18890 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
188a0 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
188b0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
188c0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
188d0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
188e0 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
188f0 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
18900 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
18910 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
18920 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
18930 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
18940 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
18950 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
18960 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
18970 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
18980 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
18990 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
189a0 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
189b0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
189c0 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
189d0 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
189e0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
189f0 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
18a00 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
18a10 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
18a20 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
18a30 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
18a40 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
18a50 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
18a60 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
18a70 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
18a80 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
18a90 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
18aa0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
18ab0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
18ac0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
18ad0 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
18ae0 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
18af0 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
18b00 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
18b10 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
18b20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
18b30 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
18b40 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
18b50 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
18b60 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
18b70 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18b80 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
18b90 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
18ba0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
18bb0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
18bc0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
18bd0 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
18be0 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
18bf0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
18c00 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
18c10 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
18c20 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
18c30 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
18c40 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
18c50 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
18c60 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
18c70 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
18c80 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
18c90 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
18ca0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
18cb0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
18cc0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
18cd0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
18ce0 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
18cf0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
18d00 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
18d10 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
18d20 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
18d30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18d40 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
18d50 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
18d60 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
18d70 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
18d80 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
18d90 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
18da0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
18db0 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
18dc0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
18dd0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
18de0 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
18df0 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
18e00 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
18e10 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
18e20 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
18e30 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
18e40 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
18e50 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
18e60 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
18e70 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
18e80 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
18e90 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
18ea0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
18eb0 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52  /.  u64 nSelectR
18ec0 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  ow;        /* Es
18ed0 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
18ee0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
18ef0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
18f00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18f10 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
18f20 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
18f30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18f40 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
18f50 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
18f60 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
18f70 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
18f80 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
18f90 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
18fa0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
18fb0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18fc0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
18fd0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
18fe0 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
18ff0 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
19000 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
19010 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
19020 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
19030 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
19040 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
19050 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
19060 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
19070 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
19080 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
19090 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
190a0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
190b0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
190c0 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
190d0 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
190e0 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
190f0 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
19100 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
19110 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
19120 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
19130 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
19140 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
19150 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
19160 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
19170 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
19180 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
19190 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
191a0 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
191b0 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
191c0 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
191d0 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
191e0 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
191f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
19200 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78  l             0x
19210 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
19220 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
19230 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
19240 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
19250 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  0x0004  /* Ident
19260 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
19270 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
19280 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
19290 65 20 20 20 20 20 20 20 30 78 30 30 30 38 20 20  e       0x0008  
192a0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
192b0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
192c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
192d0 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
192e0 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68  0010  /* Uses th
192f0 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
19300 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
19310 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
19320 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
19330 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
19340 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
19350 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
19360 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
19370 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46 52     0x0040  /* FR
19380 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
19390 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
193a0 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
193b0 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20  Compound        
193c0 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20  0x0080  /* Part 
193d0 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  of a compound qu
193e0 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ery */.#define S
193f0 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
19400 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79 6e    0x0100  /* Syn
19410 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
19420 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
19430 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56  define SF_MultiV
19440 61 6c 75 65 20 20 20 20 20 20 30 78 30 32 30 30  alue      0x0200
19450 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55    /* Single VALU
19460 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c  ES term with mul
19470 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
19480 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
19490 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30 20  rom      0x0400 
194a0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
194b0 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
194c0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
194d0 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
194e0 72 74 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a  rt    0x0800  /*
194f0 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
19500 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
19510 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
19520 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
19530 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
19540 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
19550 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
19560 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ax() */.#define 
19570 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
19580 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 68     0x2000  /* Th
19590 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
195a0 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
195b0 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
195c0 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
195d0 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79 20    0x4000  /* By 
195e0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
195f0 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
19600 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
19610 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
19620 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
19630 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
19640 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
19650 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
19660 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
19670 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
19680 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
19690 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
196a0 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
196b0 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
196c0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
196d0 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
196e0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a  mporary index .*
196f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19700 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
19710 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
19720 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
19730 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
19740 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
19750 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
19760 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
19770 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
19780 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
19790 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
197a0 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
197b0 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
197c0 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
197e0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
197f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
19800 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
19810 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
19820 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
19830 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
19860 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
19870 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
19880 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19890 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
198a0 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
198b0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
198c0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
198d0 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
198e0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
198f0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
19900 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
19910 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
19920 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
19930 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
19940 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
19950 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
19960 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
19970 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19990 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
199a0 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
199b0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
199c0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
199d0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
199e0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
199f0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
19a20 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
19a30 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
19a40 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
19a50 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
19a60 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
19a70 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
19a80 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
19ab0 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
19ac0 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
19ad0 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
19ae0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
19af0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
19b00 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
19b10 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
19b20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19b30 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
19b40 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
19b50 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
19b60 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20  iSDParm. .**    
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
19b90 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
19ba0 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
19bb0 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
19bc0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
19bd0 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
19be0 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
19bf0 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
19c00 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
19c10 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
19c20 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
19c30 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
19c40 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
19c50 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19c60 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
19c70 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
19c80 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
19cb0 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
19cc0 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
19cd0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
19ce0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
19cf0 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
19d00 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
19d10 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
19d40 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19d50 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
19d60 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
19d70 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
19d80 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
19db0 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
19dc0 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
19dd0 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
19de0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
19df0 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
19e00 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
19e10 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
19e20 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
19e30 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
19e40 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
19e50 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
19e60 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
19e70 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19e80 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
19e90 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
19ea0 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
19eb0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
19ec0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
19ed0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19ee0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
19ef0 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
19f00 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
19f10 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
19f20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
19f30 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
19f50 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
19f60 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
19f70 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
19fa0 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
19fb0 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
19fc0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19fd0 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
19fe0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
19ff0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
1a000 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
1a010 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
1a020 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1a030 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
1a060 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1a070 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
1a080 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1a090 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
1a0a0 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
1a0b0 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
1a0c0 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
1a0d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a0e0 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
1a0f0 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
1a100 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
1a110 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
1a120 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1a130 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1a140 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1a150 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
1a180 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
1a190 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
1a1a0 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
1a1d0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1a1e0 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
1a1f0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1a200 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1a210 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
1a220 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
1a230 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
1a240 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
1a250 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
1a260 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a280 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
1a290 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
1a2a0 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
1a2b0 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
1a2c0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1a2d0 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
1a2e0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
1a2f0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1a300 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
1a310 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
1a320 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
1a330 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
1a340 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
1a350 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
1a360 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
1a370 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
1a380 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1a390 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
1a3a0 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
1a3b0 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
1a3c0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
1a3d0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
1a3e0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a3f0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1a400 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1a410 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
1a420 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
1a430 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
1a440 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
1a450 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
1a460 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
1a470 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
1a480 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
1a490 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
1a4a0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1a4b0 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
1a4c0 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
1a4d0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1a4e0 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
1a4f0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
1a500 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
1a510 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
1a520 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
1a530 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
1a540 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
1a550 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
1a560 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
1a570 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
1a580 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
1a590 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
1a5a0 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
1a5b0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1a5c0 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
1a5d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
1a5e0 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
1a5f0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
1a600 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1a610 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1a620 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
1a630 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
1a640 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
1a650 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
1a660 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
1a670 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
1a680 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
1a690 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
1a6a0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1a6b0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a6c0 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
1a6d0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a6e0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a6f0 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
1a700 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1a710 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
1a720 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
1a730 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1a740 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
1a750 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
1a760 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
1a770 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
1a780 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
1a790 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
1a7a0 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
1a7b0 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
1a7c0 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
1a7d0 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e          /* Affin
1a7e0 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1a7f0 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1a800 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1a810 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1a820 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1a830 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1a840 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1a850 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1a860 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1a870 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1a880 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1a890 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1a8a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a8b0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1a8c0 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70  located */.  Exp
1a8d0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1a8e0 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
1a8f0 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
1a900 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
1a910 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
1a920 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
1a930 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
1a940 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
1a950 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
1a960 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
1a970 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1a980 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1a990 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1a9a0 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1a9b0 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1a9c0 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1a9d0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1a9e0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1a9f0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1aa00 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1aa10 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1aa20 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1aa30 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1aa40 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1aa50 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1aa60 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
1aa70 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1aa80 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1aa90 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1aaa0 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1aab0 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1aac0 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1aad0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1aae0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1aaf0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1ab00 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1ab10 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1ab20 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1ab30 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1ab40 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1ab50 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1ab60 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1ab70 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1ab80 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1ab90 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1aba0 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1abc0 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1abd0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1abe0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1abf0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1ac00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1ac10 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1ac20 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1ac30 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1ac40 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1ac50 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1ac60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ac70 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1ac80 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1ac90 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1aca0 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1acb0 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1acc0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1acd0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1ace0 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
1acf0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1ad00 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1ad10 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1ad20 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1ad30 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1ad40 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1ad50 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1ad60 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1ad70 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1ad80 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ad90 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1ada0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1adb0 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1adc0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1add0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1ade0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1adf0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1ae00 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1ae10 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1ae20 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1ae30 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1ae40 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1ae50 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1ae60 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1ae70 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1ae80 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1ae90 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1aea0 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1aeb0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1aec0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1aed0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1aee0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1aef0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1af00 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1af10 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1af20 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1af30 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1af40 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1af50 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1af60 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1af70 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1af80 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1af90 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
1afa0 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1afb0 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1afc0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1afd0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1afe0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1aff0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1b000 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1b010 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1b020 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1b030 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1b040 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1b050 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1b060 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1b070 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1b080 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1b090 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1b0a0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1b0b0 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1b0c0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1b0d0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1b0e0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1b0f0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1b100 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1b110 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1b120 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1b130 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1b140 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1b150 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1b160 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1b170 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1b180 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1b190 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1b1a0 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1b1b0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1b1c0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1b1d0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1b1e0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1b1f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1b200 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1b210 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1b220 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1b230 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1b240 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1b250 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1b260 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1b270 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1b280 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1b290 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1b2a0 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1b2b0 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1b2c0 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1b2d0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1b2e0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1b2f0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1b300 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1b310 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1b320 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1b330 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1b340 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1b350 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1b360 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1b370 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1b380 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1b390 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1b3a0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1b3b0 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1b3c0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1b3d0 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1b3e0 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1b3f0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1b400 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1b410 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1b420 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1b430 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1b440 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1b450 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1b460 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1b470 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1b480 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1b490 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1b4a0 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1b4b0 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1b4c0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1b4d0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1b4e0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1b4f0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1b500 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1b510 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1b520 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1b530 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1b540 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1b550 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1b560 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1b570 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1b580 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1b590 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1b5a0 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1b5b0 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1b5c0 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1b5d0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1b5e0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1b5f0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1b600 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1b610 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1b620 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1b630 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1b640 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
1b650 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1b660 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1b670 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1b680 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1b690 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1b6a0 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1b6b0 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1b6c0 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1b6d0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1b6e0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1b6f0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1b700 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1b710 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1b720 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1b730 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1b740 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1b750 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1b760 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1b770 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1b780 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1b790 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1b7a0 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1b7b0 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1b7c0 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1b7d0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1b7e0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1b7f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b800 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1b810 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1b820 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1b830 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1b840 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1b850 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1b860 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1b870 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1b880 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1b890 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1b8a0 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1b8b0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1b8c0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1b8d0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1b8e0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1b8f0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1b900 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1b910 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1b920 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1b930 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1b940 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1b950 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1b960 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1b970 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1b980 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1b990 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1b9a0 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1b9b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1b9c0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1b9d0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1b9e0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1b9f0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1ba00 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1ba10 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1ba20 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1ba30 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1ba40 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1ba50 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1ba60 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1ba70 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1ba80 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
1ba90 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1baa0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1bab0 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1bac0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1bad0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1bae0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1baf0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1bb00 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1bb10 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1bb20 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1bb30 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1bb40 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1bb50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bb60 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1bb70 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1bb80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bb90 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1bba0 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1bbb0 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1bbc0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1bbd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1bbe0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1bbf0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1bc00 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
1bc10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
1bc20 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1bc30 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
1bc40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bc50 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
1bc60 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
1bc70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1bc80 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1bc90 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1bca0 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1bcb0 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1bcc0 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
1bcd0 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
1bce0 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
1bcf0 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
1bd00 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1bd10 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1bd20 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1bd30 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1bd40 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1bd50 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
1bd60 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
1bd70 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1bd80 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1bd90 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1bda0 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1bdb0 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1bdc0 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1bdd0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1bde0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1bdf0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1be00 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1be10 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1be20 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1be30 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1be40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1be50 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1be60 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1be70 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1be80 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1be90 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1bea0 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1beb0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1bec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1bed0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1bee0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1bef0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1bf00 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1bf10 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1bf20 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1bf30 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1bf40 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1bf50 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1bf60 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1bf70 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1bf80 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1bf90 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1bfa0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1bfb0 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1bfc0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1bfd0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1bfe0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1c000 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1c010 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1c020 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1c030 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1c040 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1c050 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1c060 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1c070 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1c080 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1c090 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1c0a0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1c0b0 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1c0c0 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1c0d0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1c0e0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1c0f0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1c100 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1c110 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1c120 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1c130 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1c140 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1c150 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1c160 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1c170 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1c180 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1c190 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1c1a0 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1c1b0 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1c1c0 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1c1d0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1c1e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1c1f0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1c200 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1c210 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1c220 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1c230 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1c240 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1c250 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1c260 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1c270 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1c280 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1c290 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1c2a0 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1c2b0 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1c2c0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1c2d0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1c2e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c2f0 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1c300 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1c310 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1c320 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1c330 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1c340 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1c350 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1c360 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1c370 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1c380 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1c390 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c3a0 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1c3b0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1c3c0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1c3d0 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1c3e0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1c3f0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1c400 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1c410 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1c420 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1c430 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1c440 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1c450 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1c460 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1c470 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1c480 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1c490 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1c4a0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1c4b0 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1c4c0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1c4d0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1c4e0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1c4f0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1c500 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1c510 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1c520 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1c530 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1c540 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1c550 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1c560 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1c570 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1c580 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1c590 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1c5a0 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1c5b0 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1c5c0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1c5d0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1c5e0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1c5f0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1c600 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1c610 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1c620 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1c630 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1c640 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1c650 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1c660 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1c670 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1c680 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1c690 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1c6a0 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1c6b0 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1c6c0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1c6d0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1c6e0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1c6f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c730 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
1c740 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
1c750 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
1c760 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
1c770 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
1c780 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
1c790 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
1c7a0 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
1c7b0 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
1c7c0 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
1c7d0 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
1c7e0 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65  rse,nVar) so the
1c7f0 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74   nVar field must
1c800 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69   be the first fi
1c810 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20  eld.  ** in the 
1c820 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
1c830 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1c840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1c880 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
1c890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c8a0 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1c8b0 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1c8c0 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1c8d0 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20    int nzVar;    
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c8f0 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62  umber of availab
1c900 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61  le slots in azVa
1c910 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  r[] */.  u8 iPkS
1c920 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
1c930 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
1c940 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
1c950 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
1c960 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20 20  8 bFreeWith;    
1c970 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1c980 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64   if pWith should
1c990 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20 70   be freed with p
1c9a0 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78  arser */.  u8 ex
1c9b0 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
1c9c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1c9d0 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
1c9e0 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
1c9f0 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65   query */.#ifnde
1ca00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1ca10 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
1ca20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20  declareVtab;    
1ca30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1ca40 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33  f inside sqlite3
1ca50 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1ca60 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  */.  int nVtabLo
1ca70 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
1ca80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
1ca90 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
1caa0 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
1cab0 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20  nt nAlias;      
1cac0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cad0 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65  er of aliased re
1cae0 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73  sult set columns
1caf0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68   */.  int nHeigh
1cb00 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1cb10 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72  /* Expression tr
1cb20 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72  ee height of cur
1cb30 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20  rent sub-select 
1cb40 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1cb50 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
1cb60 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20   int iSelectId; 
1cb70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44             /* ID
1cb80 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65   of current sele
1cb90 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ct for EXPLAIN o
1cba0 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69  utput */.  int i
1cbb0 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20  NextSelectId;   
1cbc0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61       /* Next ava
1cbd0 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44  ilable select ID
1cbe0 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1cbf0 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  put */.#endif.  
1cc00 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20  char **azVar;   
1cc10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
1cc20 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f  nters to names o
1cc30 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  f parameters */.
1cc40 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
1cc50 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
1cc60 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
1cc70 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
1cc80 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
1cc90 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
1cca0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
1ccb0 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
1ccc0 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
1ccd0 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
1cce0 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
1ccf0 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
1cd00 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
1cd10 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
1cd20 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
1cd30 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
1cd40 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
1cd50 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
1cd60 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1cd70 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1cd80 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
1cd90 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
1cda0 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
1cdb0 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20   callbacks */.  
1cdc0 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
1cdd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  ;         /* Tok
1cde0 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
1cdf0 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
1ce00 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  t name */.  Toke
1ce10 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
1ce20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
1ce30 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
1ce40 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1ce50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1ce60 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ce80 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
1ce90 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
1cea0 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
1ceb0 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
1cec0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
1ced0 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
1cee0 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
1cef0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
1cf00 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
1cf10 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1cf20 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
1cf30 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
1cf40 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
1cf50 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
1cf60 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
1cf70 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
1cf80 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
1cf90 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
1cfa0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
1cfb0 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
1cfc0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f  or NULL */.};../
1cfd0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
1cfe0 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
1cff0 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
1d000 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
1d010 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
1d020 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1d030 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
1d040 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1d050 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
1d060 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1d070 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
1d080 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
1d090 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1d0a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d0b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1d0c0 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
1d0d0 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
1d0e0 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
1d0f0 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
1d100 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
1d110 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
1d120 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
1d130 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
1d140 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
1d150 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1d160 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
1d170 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1d180 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
1d190 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1d1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d1b0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1d1c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
1d1d0 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
1d1e0 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
1d1f0 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a  ous opcodes..*/.
1d200 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
1d210 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
1d220 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
1d230 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1d240 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
1d250 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
1d260 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d270 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
1d280 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
1d290 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d2a0 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1d2b0 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1d2c0 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1d2d0 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1d2e0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1d2f0 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1d300 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1d310 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1d320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d330 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1d340 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1d350 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1d360 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1d370 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1d380 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1d390 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1d3a0 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1d3b0 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1d3c0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
1d3d0 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
1d3e0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1d3f0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
1d400 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
1d410 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
1d420 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
1d430 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
1d440 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
1d450 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1d460 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
1d470 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1d480 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
1d490 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
1d4a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d4b0 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
1d4c0 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
1d4d0 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
1d4e0 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
1d4f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d500 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
1d510 78 30 34 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x04    /* P2 to 
1d520 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
1d530 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
1d540 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d550 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
1d560 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
1d570 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
1d580 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
1d590 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
1d5a0 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
1d5b0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1d5c0 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
1d5d0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
1d5e0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
1d5f0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
1d600 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
1d610 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
1d620 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
1d630 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
1d640 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
1d650 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
1d660 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
1d670 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
1d680 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
1d690 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
1d6a0 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
1d6b0 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
1d6c0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
1d6d0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
1d6e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1d6f0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
1d700 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
1d710 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
1d720 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
1d730 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1d740 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
1d750 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1d760 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
1d770 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
1d780 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
1d790 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
1d7a0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
1d7b0 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
1d7c0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
1d7d0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1d7e0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
1d7f0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1d800 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
1d810 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1d820 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
1d830 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1d840 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
1d850 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1d860 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
1d870 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1d880 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
1d890 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
1d8c0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
1d8d0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
1d8e0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
1d8f0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
1d900 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d920 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1d930 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1d940 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
1d950 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d970 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
1d980 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
1d990 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
1d9a0 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
1d9b0 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
1d9c0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
1d9d0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
1d9e0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
1d9f0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
1da00 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
1da10 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
1da20 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
1da30 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
1da60 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
1da70 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1da80 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
1da90 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1daa0 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
1dab0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
1dac0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
1dad0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1dae0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
1daf0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
1db00 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
1db10 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
1db20 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
1db30 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1db40 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
1db50 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1db60 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
1db70 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
1db80 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
1db90 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
1dba0 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
1dbb0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
1dbc0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1dbd0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
1dbe0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
1dbf0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
1dc00 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
1dc10 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
1dc20 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
1dc30 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
1dc40 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
1dc50 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
1dc60 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
1dc70 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
1dc80 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
1dc90 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
1dca0 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
1dcb0 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
1dcc0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
1dcd0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
1dce0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
1dcf0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
1dd00 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
1dd10 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
1dd20 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
1dd30 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
1dd40 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1dd50 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
1dd60 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
1dd70 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
1dd80 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
1dd90 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
1dda0 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
1ddb0 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
1ddc0 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
1ddd0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
1dde0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
1ddf0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1de00 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
1de10 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
1de20 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
1de30 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1de40 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
1de50 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
1de60 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
1de70 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
1de80 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
1de90 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
1dea0 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
1deb0 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
1dec0 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
1ded0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1dee0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
1def0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
1df00 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
1df10 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
1df20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
1df30 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1df40 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
1df50 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1df60 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1df70 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
1df80 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1df90 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1dfa0 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
1dfb0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
1dfc0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
1dfd0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1dfe0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
1dff0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
1e000 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73  the table to ins
1e010 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78  ert into.. * pEx
1e020 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69  prList -> If thi
1e030 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1e040 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e  NTO ... VALUES .
1e050 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1e060 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1e070 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76     this stores v
1e080 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65  alues to be inse
1e090 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20  rted. Otherwise 
1e0a0 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74  NULL.. * pIdList
1e0b0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1e0c0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1e0d0 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  ... (<column-nam
1e0e0 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20  es>) VALUES ... 
1e0f0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e100 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1e110 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
1e120 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
1e130 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
1e140 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
1e150 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
1e160 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
1e170 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
1e180 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1e190 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
1e1a0 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
1e1b0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1e1c0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
1e1d0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
1e1e0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1e1f0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1e200 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1e210 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d  LL.. * . * (op =
1e220 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
1e230 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1e240 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1e250 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1e260 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
1e270 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1e280 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
1e290 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1e2a0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1e2b0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e2c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1e2d0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1e2e0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
1e2f0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
1e300 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
1e310 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
1e320 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1e330 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
1e340 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
1e350 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
1e360 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
1e370 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
1e380 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
1e390 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
1e3a0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1e3b0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1e3c0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1e3d0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
1e3e0 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
1e3f0 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
1e400 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
1e410 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
1e420 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
1e430 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
1e440 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
1e450 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
1e460 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
1e470 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
1e480 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
1e490 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1e4a0 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
1e4b0 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
1e4c0 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1e4d0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1e4e0 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1e4f0 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1e500 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1e510 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1e520 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1e530 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1e540 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1e550 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1e560 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a  se for UPDATE. *
1e570 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
1e580 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
1e590 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
1e5a0 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
1e5b0 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
1e5c0 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
1e5d0 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
1e5e0 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
1e5f0 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
1e600 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
1e610 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
1e620 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
1e630 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1e640 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1e650 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
1e660 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
1e670 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
1e680 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
1e690 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
1e6a0 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
1e6b0 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
1e6c0 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
1e6d0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
1e6e0 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
1e6f0 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
1e700 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1e710 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
1e720 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
1e730 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
1e740 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
1e750 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1e760 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
1e770 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
1e780 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
1e790 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
1e7a0 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
1e7b0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
1e7c0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1e7d0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1e7e0 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1e7f0 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1e800 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1e810 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1e820 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1e830 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1e840 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1e850 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1e860 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1e870 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1e880 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1e890 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1e8a0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1e8b0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1e8c0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1e8d0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1e8e0 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1e8f0 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1e900 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1e910 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1e920 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1e930 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1e940 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1e950 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1e960 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1e970 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1e980 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1e990 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1e9a0 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1e9b0 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1e9c0 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1e9d0 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1e9e0 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1e9f0 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1ea00 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1ea10 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1ea20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1ea30 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1ea40 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1ea50 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1ea60 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1ea70 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1ea80 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1ea90 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1eaa0 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1eab0 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ed allocation.  
1eac0 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20  0 for no malloc 
1ead0 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20  usage */.  u8   
1eae0 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
1eaf0 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
1eb00 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
1eb10 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  OBIG */.};.#defi
1eb20 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  ne STRACCUM_NOME
1eb30 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54  M   1.#define ST
1eb40 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32  RACCUM_TOOBIG  2
1eb50 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
1eb60 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
1eb70 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
1eb80 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
1eb90 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
1eba0 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
1ebb0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
1ebc0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
1ebd0 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
1ebe0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
1ebf0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1ec00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
1ec10 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
1ec20 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
1ec30 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
1ec40 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1ec50 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1ec60 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1ec70 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
1ec80 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1ec90 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
1eca0 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
1ecb0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1ecc0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1ecd0 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
1ece0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
1ecf0 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
1ed00 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
1ed10 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
1ed20 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
1ed30 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
1ed40 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
1ed50 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
1ed60 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
1ed70 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1ed80 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
1ed90 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
1eda0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1edb0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1edc0 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
1edd0 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
1ede0 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ee00 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1ee10 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
1ee20 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
1ee30 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1ee40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1ee50 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
1ee60 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
1ee70 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ee90 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
1eea0 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
1eeb0 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
1eec0 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
1eed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1eee0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
1eef0 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
1ef00 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
1ef10 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
1ef20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1ef30 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
1ef40 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
1ef50 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
1ef60 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
1ef70 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
1ef80 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
1ef90 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1efc0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1efd0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1efe0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1eff0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1f000 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1f010 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1f020 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1f030 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1f040 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1f050 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1f060 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1f070 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1f080 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1f090 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1f0a0 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1f0b0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1f0c0 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1f0d0 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1f0e0 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1f0f0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1f100 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f120 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1f130 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1f140 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1f150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1f160 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1f170 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1f180 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1f190 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1f1a0 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1f1b0 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1f1c0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1f1d0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1f1e0 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1f1f0 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1f200 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1f210 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1f220 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1f230 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1f240 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1f250 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1f260 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1f270 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1f280 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2a0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1f2b0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1f2c0 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1f2d0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1f2e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f2f0 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1f300 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1f310 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1f320 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1f330 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1f340 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f360 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1f370 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1f380 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1f390 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f3b0 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1f3c0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1f3d0 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1f3e0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1f3f0 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1f400 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1f410 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1f420 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1f430 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1f440 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1f450 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1f460 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50  led */.  u32 szP
1f470 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ma;             
1f480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1f490 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41  ximum Sorter PMA
1f4a0 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68   size */.  /* Th
1f4b0 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
1f4c0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
1f4d0 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
1f4e0 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
1f4f0 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
1f500 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
1f510 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
1f520 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
1f550 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
1f560 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
1f570 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
1f5a0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
1f5b0 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
1f5c0 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1f5f0 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
1f600 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1f610 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f630 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1f640 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1f650 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
1f660 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
1f670 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f680 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1f690 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1f6a0 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
1f6b0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1f6c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f6d0 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
1f6e0 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
1f6f0 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
1f700 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
1f710 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
1f720 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1f730 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
1f740 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
1f750 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
1f760 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
1f770 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
1f780 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f7a0 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
1f7b0 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
1f7c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1f7d0 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
1f7e0 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
1f7f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1f800 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
1f810 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
1f820 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1f830 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
1f840 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
1f850 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
1f860 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
1f870 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
1f880 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
1f890 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
1f8a0 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
1f8b0 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
1f8c0 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
1f8d0 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
1f8e0 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
1f8f0 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e  oid*,int iSrcLin
1f900 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
1f910 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
1f920 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
1f930 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
1f970 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1f980 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
1f990 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74  ILTIN_TEST.  int
1f9a0 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
1f9b0 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
1f9c0 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
1f9d0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
1f9e0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
1f9f0 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fa10 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
1fa20 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
1fa30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
1fa40 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
1fa50 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
1fa60 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
1fa70 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
1fa80 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
1fa90 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
1faa0 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1fab0 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
1fac0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1fad0 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
1fae0 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
1faf0 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
1fb00 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
1fb10 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
1fb20 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
1fb30 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
1fb40 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
1fb50 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
1fb60 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
1fb70 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
1fb80 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
1fb90 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
1fba0 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
1fbb0 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
1fbc0 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
1fbd0 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
1fbe0 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
1fbf0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1fc00 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
1fc10 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
1fc20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
1fc30 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
1fc40 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
1fc50 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
1fc60 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1fc70 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
1fc80 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
1fc90 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
1fca0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
1fcb0 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
1fcc0 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
1fcd0 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
1fce0 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
1fcf0 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  {.  int (*xExprC
1fd00 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1fd10 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
1fd20 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
1fd30 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
1fd40 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
1fd50 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
1fd60 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
1fd70 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1fd80 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
1fd90 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
1fda0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
1fdb0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
1fdc0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1fdd0 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1fde0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fe00 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1fe10 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65    */.  int walke
1fe20 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
1fe50 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
1fe60 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20   eCode;         
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe80 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61          /* A sma
1fe90 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f  ll processing co
1fea0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  de */.  union { 
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
1fee0 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
1fef0 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
1ff00 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ff20 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
1ff30 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
1ff70 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffa0 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75    /* A cursor nu
1ffb0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c  mber */.    SrcL
1ffc0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
1fff0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
20000 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
20010 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
20020 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
20030 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
20040 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ences */.  } u;.
20050 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
20060 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
20070 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
20080 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
20090 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
200a0 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
200b0 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
200c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
200d0 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
200e0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
200f0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
20100 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
20110 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
20120 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
20130 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
20140 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
20150 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
20160 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
20170 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
20180 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
20190 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
201a0 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
201b0 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
201c0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
201d0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
201e0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
201f0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
20200 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
20210 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
20220 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
20230 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
20240 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
20250 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
20260 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
20270 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
20280 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
20290 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
202a0 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
202b0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
202c0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
202d0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
202e0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
202f0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
20300 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20310 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20320 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
20330 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
20340 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
20370 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
20380 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
20390 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
203a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
203b0 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
203c0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
203d0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
203e0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
203f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
20400 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
20410 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
20420 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
20430 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
20440 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
20450 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
20460 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
20470 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
20480 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
20490 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
204a0 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
204b0 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20  char *zErr;     
204c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
204d0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
204e0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
204f0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
20500 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
20510 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
20520 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
20530 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
20540 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
20550 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
20560 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
20570 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
20580 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
20590 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
205a0 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
205b0 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
205c0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
205d0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
205e0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
205f0 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
20600 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
20610 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
20620 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
20630 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
20640 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
20650 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
20660 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
20670 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
20680 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
20690 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
206a0 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
206b0 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
206c0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
206d0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
206e0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
206f0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
20700 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
20710 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
20720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
20730 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
20740 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
20770 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
20780 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
20790 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
207a0 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207d0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
207e0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
207f0 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
20800 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
20810 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
20820 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
20830 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
20840 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
20850 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
20860 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
20870 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
20880 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
20890 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
208a0 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
208b0 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
208c0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
208d0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
208e0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
208f0 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
20900 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
20910 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
20920 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
20930 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
20940 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
20950 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20960 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
20970 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
20980 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
20990 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
209a0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
209b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
209c0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
209d0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
209e0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
209f0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
20a00 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
20a10 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
20a20 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
20a30 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
20a40 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
20a50 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
20a60 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
20a70 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
20a80 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
20a90 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
20aa0 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68   also call.** th
20ab0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
20ac0 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
20ad0 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20  rve as an alias 
20ae0 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
20af0 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
20b00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20b10 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
20b20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20b30 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
20b40 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
20b50 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a  E_FTS3 1.#endif.
20b60 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
20b70 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
20b80 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
20b90 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
20ba0 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
20bb0 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
20bc0 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
20bd0 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
20be0 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
20bf0 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
20c00 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
20c10 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
20c20 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
20c30 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
20c40 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
20c50 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
20c60 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
20c70 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
20c80 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
20c90 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
20ca0 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
20cb0 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
20cc0 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
20cd0 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
20ce0 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
20cf0 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
20d00 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
20d10 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
20d20 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
20d30 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
20d40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
20d50 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
20d60 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
20d70 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
20d80 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20d90 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
20da0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20db0 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
20dc0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20dd0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20de0 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
20df0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
20e00 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
20e10 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20e20 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20e30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
20e40 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
20e50 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20e60 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20e70 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
20e80 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
20e90 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
20ea0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20eb0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20ec0 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
20ed0 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
20ee0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20ef0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20f00 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
20f10 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
20f20 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
20f30 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
20f40 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
20f50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
20f60 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
20f70 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
20f80 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20f90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20fa0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
20fb0 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
20fc0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20fd0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
20fe0 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
20ff0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21000 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
21010 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
21020 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
21030 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
21040 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
21050 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
21060 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
21070 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
21080 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
21090 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
210a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
210b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
210c0 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
210d0 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
210e0 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23  ar)(x)).#endif.#
210f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21100 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
21110 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74  _DIAGS.int sqlit
21120 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
21130 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
21140 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
21150 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64  prototypes.*/.#d
21160 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
21170 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
21180 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33  icmp.int sqlite3
21190 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
211a0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
211b0 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
211c0 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
211d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
211e0 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
211f0 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
21200 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
21210 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75  *sqlite3Malloc(u
21220 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
21230 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34  e3MallocZero(u64
21240 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
21250 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
21260 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
21270 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
21280 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
21290 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
212a0 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
212b0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
212c0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
212d0 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
212e0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
212f0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
21300 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
21310 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
21320 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
21330 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
21340 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
21350 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
21360 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
21370 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
21380 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
21390 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
213a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
213b0 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
213c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
213d0 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
213e0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
213f0 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d  *sqlite3ScratchM
21400 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
21410 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46   sqlite3ScratchF
21420 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
21430 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
21440 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
21450 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
21460 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
21470 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
21480 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
21490 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
214a0 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71  TIN_TEST.void sq
214b0 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
214c0 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
214d0 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
214e0 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
214f0 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
21500 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
21510 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
21520 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
21530 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
21540 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
21550 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
21560 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
21570 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
21580 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
21590 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
215a0 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
215b0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
215c0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
215d0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
215e0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
215f0 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
21600 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
21610 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
21620 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
21630 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
21640 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
21650 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
21660 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
21670 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21680 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
21690 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
216a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
216b0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
216c0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
216d0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
216e0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
216f0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
21700 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21710 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
21720 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
21730 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
21740 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
21750 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
21760 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
21770 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
21780 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21790 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
217a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
217b0 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
217c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
217d0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
217e0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
217f0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
21800 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
21810 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
21820 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
21830 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
21840 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
21850 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
21860 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
21870 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
21880 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
21890 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
218a0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
218b0 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
218c0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
218d0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
218e0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
218f0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
21900 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
21910 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
21920 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
21930 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
21940 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
21950 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
21960 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
21970 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
21980 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
21990 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
219a0 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
219b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
219c0 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
219d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
219e0 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
219f0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63  nt, int);../* Ac
21a00 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20  cess to mutexes 
21a10 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
21a20 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69  status() */.sqli
21a30 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
21a40 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76  e3Pcache1Mutex(v
21a50 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75  oid);.sqlite3_mu
21a60 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  tex *sqlite3Mall
21a70 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a  ocMutex(void);..
21a80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21a90 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
21aa0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
21ab0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
21ac0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21ad0 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
21ae0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
21af0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
21b00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
21b10 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
21b20 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
21b30 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
21b40 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
21b50 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
21b60 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
21b70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
21b80 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
21b90 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
21ba0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
21bb0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
21bc0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
21bd0 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21bf0 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
21c00 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
21c10 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
21c20 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
21c30 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
21c40 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66  lues */.};..#def
21c50 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
21c60 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a  F_INTERNAL 0x01.
21c70 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21c80 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
21c90 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  x02.void sqlite3
21ca0 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
21cb0 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63  m*, u32, const c
21cc0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
21cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
21ce0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
21cf0 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
21d00 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
21d10 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
21d20 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21d30 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
21d40 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
21d50 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21d60 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
21d70 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21d80 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
21d90 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
21da0 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
21db0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
21dc0 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
21dd0 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
21de0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21df0 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
21e00 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
21e10 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
21e20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
21e30 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
21e40 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
21e50 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
21e60 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
21e70 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
21e80 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21e90 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
21ea0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
21eb0 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
21ec0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
21ed0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
21ee0 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
21ef0 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
21f00 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  8);.#endif...voi
21f10 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
21f20 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
21f30 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
21f40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21f50 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
21f60 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
21f70 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  .);.int sqlite3D
21f80 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69  equote(char*);.i
21f90 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
21fa0 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
21fb0 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
21fc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
21fd0 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
21fe0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
21ff0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
22000 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
22010 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
22020 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
22030 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22040 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
22050 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
22060 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
22070 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
22080 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22090 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
220a0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
220b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
220c0 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
220d0 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Parse*);.Expr *s
220e0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
220f0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
22100 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
22110 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
22120 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
22130 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22140 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
22150 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
22160 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
22170 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
22180 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
22190 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
221a0 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
221b0 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
221c0 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
221d0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
221e0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
221f0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
22200 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
22210 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
22220 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
22230 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
22240 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
22250 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
22260 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
22270 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
22280 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
22290 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
222a0 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
222b0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
222c0 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
222d0 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
222e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
222f0 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
22300 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
22310 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
22320 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
22330 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
22340 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
22350 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
22360 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
22370 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
22380 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
22390 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
223a0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
223b0 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
223c0 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
223d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
223e0 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
223f0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22400 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22410 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
22420 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
22430 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
22440 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
22450 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
22460 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22470 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
22480 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
22490 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
224a0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
224b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
224c0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
224d0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
224e0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
224f0 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
22500 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
22510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
22520 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
22530 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64  rse *, int);.Ind
22540 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61  ex *sqlite3Prima
22550 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65  ryKeyIndex(Table
22560 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43  *);.i16 sqlite3C
22570 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64  olumnOfIndex(Ind
22580 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20  ex*, i16);.void 
22590 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
225a0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
225b0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
225c0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
225d0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
225e0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
225f0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
22600 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
22610 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22620 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
22630 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
22640 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
22650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22660 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
22670 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
22680 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
22690 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
226a0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
226b0 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
226c0 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
226d0 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
226e0 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
226f0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
22700 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
22710 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
22720 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
22730 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
22740 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
22750 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
22760 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
22770 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
22780 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
22790 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
227a0 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
227b0 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
227c0 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
227d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
227e0 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
227f0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64  (Parse *);..#ifd
22800 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
22810 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65  UILTIN_TEST.# de
22820 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
22830 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
22840 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
22850 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
22860 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
22870 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
22880 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
22890 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
228a0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
228b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
228c0 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
228d0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
228e0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
228f0 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
22900 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
22910 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
22920 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
22930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
22940 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
22950 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
22960 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
22970 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
22980 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22990 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
229a0 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
229b0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
229c0 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
229d0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
229e0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
229f0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
22a00 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
22a10 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
22a20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22a30 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
22a40 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
22a50 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
22a60 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
22a70 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
22a80 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
22a90 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
22aa0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
22ab0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
22ac0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
22ad0 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
22ae0 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
22af0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22b00 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
22b10 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22b20 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
22b30 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
22b40 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
22b50 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
22b60 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
22b70 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
22b80 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
22b90 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
22ba0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
22bb0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
22bc0 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
22bd0 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
22be0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
22bf0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
22c00 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
22c10 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
22c20 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
22c30 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22c40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22c50 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
22c60 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
22c70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22c80 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
22c90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22ca0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
22cb0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
22cc0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22cd0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
22ce0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
22cf0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22d00 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22d10 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
22d20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
22d30 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
22d40 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22d50 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
22d60 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
22d70 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
22d80 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
22d90 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
22da0 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
22db0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
22dc0 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
22dd0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
22de0 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
22df0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
22e00 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
22e10 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
22e20 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
22e30 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
22e40 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
22e50 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
22e60 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
22e70 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
22e80 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
22e90 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
22ea0 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
22eb0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
22ec0 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
22ed0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
22ee0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f10 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
22f20 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
22f30 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22f40 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
22f50 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
22f60 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
22f70 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
22f80 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
22f90 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
22fa0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
22fb0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
22fc0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
22fd0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
22fe0 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
22ff0 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
23000 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
23010 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
23020 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
23030 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
23040 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
23050 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
23060 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
23070 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
23080 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
23090 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
230a0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
230b0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
230c0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
230d0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
230e0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
230f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23100 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
23110 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
23120 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
23130 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
23140 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
23150 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
23160 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
23170 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
23180 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
23190 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
231a0 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
231b0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
231c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231d0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
231e0 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
231f0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
23200 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
23210 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
23220 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
23230 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
23240 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
23250 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23260 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
23270 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23280 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23290 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
232a0 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
232b0 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
232c0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
232d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
232e0 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
232f0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
23300 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
23310 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
23320 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
23330 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
23340 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
23350 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
23360 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23370 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
23380 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23390 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
233a0 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
233b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
233c0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
233d0 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
233e0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
233f0 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
23400 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
23410 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
23420 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23430 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
23440 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
23450 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
23460 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
23470 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23480 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
23490 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
234a0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
234b0 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
234c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
234d0 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
234e0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
234f0 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
23500 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
23510 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23520 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
23530 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
23540 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
23550 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
23560 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
23570 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
23580 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
23590 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
235a0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
235b0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
235c0 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
235d0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
235e0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
235f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
23600 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
23610 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
23620 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23630 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
23640 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
23650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23660 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
23670 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23680 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
23690 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
236a0 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
236b0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
236c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
236d0 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
236e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
236f0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
23700 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
23710 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
23720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23730 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
23740 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23750 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
23760 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
23770 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23780 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23790 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
237a0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
237b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
237c0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
237d0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
237e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
237f0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
23800 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23810 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23820 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
23830 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
23840 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23850 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
23860 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
23870 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
23880 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
23890 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
238a0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
238b0 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
238c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
238d0 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
238e0 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
238f0 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
23900 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23910 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
23920 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
23930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23940 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
23950 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
23960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23970 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
23980 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
23990 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
239a0 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
239b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
239c0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
239d0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
239e0 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
239f0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
23a00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23a10 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
23a20 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
23a30 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
23a40 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
23a50 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
23a60 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
23a70 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
23a80 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23a90 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
23aa0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
23ab0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
23ac0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23ad0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23ae0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23af0 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
23b00 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23b10 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23b20 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
23b30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
23b40 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
23b50 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
23b60 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
23b70 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
23b80 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
23b90 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
23ba0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
23bb0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
23bc0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
23bd0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
23be0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
23bf0 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
23c00 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
23c10 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
23c20 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
23c30 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
23c40 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
23c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23c60 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
23c70 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
23c80 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
23c90 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
23ca0 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
23cb0 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
23cc0 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
23cd0 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
23ce0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
23cf0 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
23d00 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
23d10 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
23d20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
23d30 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
23d40 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23d50 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
23d60 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
23d70 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
23d80 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
23d90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23da0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
23db0 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
23dc0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
23dd0 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
23de0 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
23df0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
23e00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
23e10 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
23e20 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
23e30 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
23e40 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
23e50 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
23e60 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
23e70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
23e80 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
23e90 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
23ea0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
23eb0 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
23ec0 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
23ed0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23ee0 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
23ef0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23f00 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
23f10 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
23f20 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
23f30 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
23f40 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
23f50 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
23f60 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
23f70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
23f80 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
23f90 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
23fa0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23fb0 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
23fc0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
23fd0 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
23fe0 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
23ff0 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
24000 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
24010 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
24020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
24030 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
24040 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
24050 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
24060 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b  t,i16,u8,u8,u8);
24070 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
24080 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
24090 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
240a0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
240b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
240c0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
240d0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
240e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
240f0 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
24100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24110 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
24120 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
24130 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
24140 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
24150 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
24160 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
24170 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
241a0 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
241b0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
241c0 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
241d0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
241e0 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
241f0 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
24200 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
24210 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
24220 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
24230 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
24240 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24250 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
24260 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
24270 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24280 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
24290 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
242a0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
242b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
242c0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
242d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
242e0 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
242f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
24300 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
24310 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
24320 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
24330 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
24340 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
24350 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
24360 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
24370 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
24380 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
24390 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
243a0 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
243b0 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
243c0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
243d0 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
243e0 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
243f0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
24400 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
24410 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
24420 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
24430 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
24440 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
24450 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
24460 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
24470 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
24480 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
24490 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
244a0 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
244b0 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
244c0 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
244d0 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
244e0 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
244f0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
24500 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
24510 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
24520 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
24530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24540 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
24550 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
24560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24570 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
24580 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
24590 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
245a0 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
245b0 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
245c0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
245d0 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
245e0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
245f0 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
24600 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
24610 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
24620 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
24630 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
24640 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
24650 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24660 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
24670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
24680 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
24690 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
246a0 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
246b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
246c0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
246d0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
246e0 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
246f0 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
24700 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
24710 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
24740 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
24750 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
24760 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
24770 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
24780 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
24790 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
247a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
247b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
247c0 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
247d0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
247e0 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
247f0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
24800 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
24810 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
24820 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
24830 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
24840 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
24850 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
24860 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
24870 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
24880 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
24890 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
248a0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
248d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
248e0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
248f0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
24900 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
24910 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
24920 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
24930 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
24940 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
24950 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
24960 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
24970 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
24980 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
24990 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
249a0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
249b0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
249c0 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
249d0 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
249e0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
249f0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
24a00 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
24a10 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
24a20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
24a50 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
24a60 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
24a70 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
24a80 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
24a90 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
24aa0 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
24ab0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
24ac0 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
24ad0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
24ae0 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
24af0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
24b00 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
24b10 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
24b20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
24b30 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
24b40 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
24b50 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
24b60 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
24b70 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
24b80 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
24b90 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
24ba0 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
24bb0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
24bc0 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
24bd0 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
24be0 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c  level : (p)).#el
24bf0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24c00 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
24c10 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
24c20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
24c30 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
24c40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24c50 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
24c60 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
24c70 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24c80 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
24c90 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
24ca0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
24cb0 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
24cc0 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
24cd0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24ce0 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
24cf0 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
24d00 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
24d10 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
24d20 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
24d30 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
24d40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
24d50 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
24d60 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
24d70 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
24d80 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
24d90 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
24da0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
24db0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
24dc0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
24dd0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
24de0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
24df0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24e00 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
24e10 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
24e20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24e30 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
24e40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24e50 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
24e60 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
24e70 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
24e80 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
24e90 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
24ea0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24eb0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
24ec0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24ed0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
24ee0 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
24ef0 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
24f00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24f10 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
24f20 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
24f30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
24f40 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
24f50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
24f60 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
24f70 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
24f80 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
24f90 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
24fa0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
24fb0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
24fc0 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
24fd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
24fe0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
24ff0 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
25000 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
25010 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
25020 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
25030 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
25040 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
25050 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
25060 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
25070 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
25080 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
25090 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
250a0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
250b0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
250c0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
250d0 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
250e0 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
250f0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
25100 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
25110 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
25120 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
25130 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
25140 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
25150 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
25160 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25170 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
25180 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
25190 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
251a0 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
251b0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
251c0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
251d0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
251e0 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
251f0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
25200 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
25210 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
25220 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
25230 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
25240 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
25250 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
25260 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
25270 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
25280 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
25290 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
252a0 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
252b0 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
252c0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
252d0 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
252e0 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
252f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25300 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
25310 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
25320 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
25330 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
25340 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
25350 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
25360 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
25370 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
25380 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
25390 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
253a0 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
253b0 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
253c0 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
253d0 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
253e0 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
253f0 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
25400 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
25410 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
25420 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
25430 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
25440 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
25450 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
25460 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
25470 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
25480 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
25490 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
254a0 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
254b0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
254c0 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
254d0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
254e0 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
254f0 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
25500 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
25510 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
25520 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
25530 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
25540 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
25550 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
25560 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
25570 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
25580 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
25590 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
255a0 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
255b0 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
255c0 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
255d0 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
255e0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
255f0 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
25600 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
25610 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
25620 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
25630 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
25640 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
25650 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
25660 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
25670 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
25680 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
25690 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
256a0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
256b0 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
256c0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
256d0 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
256e0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
256f0 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
25700 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
25710 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
25720 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
25730 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
25740 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
25750 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
25760 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
25770 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
25780 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
25790 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
257a0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
257b0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
257c0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
257d0 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
257e0 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
257f0 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
25800 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
25810 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
25820 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
25830 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
25840 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25850 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
25860 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
25870 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
25880 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
25890 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
258a0 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
258b0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
258c0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
258d0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
258e0 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
258f0 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
25900 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
25910 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
25920 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
25930 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
25940 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
25950 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
25960 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
25970 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
25980 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
25990 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
259a0 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
259b0 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
259c0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
259d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
259e0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
259f0 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
25a00 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
25a10 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
25a20 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
25a30 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
25a40 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
25a50 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
25a60 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
25a70 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
25a80 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
25a90 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
25aa0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
25ab0 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
25ac0 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
25ad0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
25ae0 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
25af0 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
25b00 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
25b10 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
25b20 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
25b30 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
25b40 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
25b50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25b60 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
25b70 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
25b80 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
25b90 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
25ba0 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
25bb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
25bc0 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
25bd0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25be0 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
25bf0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
25c00 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
25c10 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
25c20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
25c30 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
25c40 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
25c50 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
25c60 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
25c70 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
25c80 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
25c90 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
25ca0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
25cb0 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
25cc0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
25cd0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
25ce0 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
25cf0 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
25d00 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
25d30 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
25d40 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
25d50 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
25d60 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
25d70 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
25d80 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
25d90 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
25da0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
25db0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
25dc0 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
25dd0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
25de0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
25df0 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
25e00 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
25e10 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
25e20 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
25e30 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25e40 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
25e50 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
25e60 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
25e70 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
25e80 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
25e90 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
25ea0 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
25eb0 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
25ec0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25ed0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
25ee0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
25ef0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
25f00 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
25f10 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
25f20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
25f30 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
25f40 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
25f50 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
25f60 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
25f70 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
25f80 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
25f90 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
25fa0 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
25fb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25fc0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
25fd0 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
25fe0 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
25ff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
26000 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
26010 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
26020 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26030 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
26040 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
26050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
26060 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
26070 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
26080 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
26090 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
260a0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
260b0 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
260c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
260d0 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
260e0 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
260f0 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
26100 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
26110 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26120 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
26130 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
26140 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
26150 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
26160 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
26170 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26180 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
26190 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
261a0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
261b0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
261c0 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
261d0 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
261e0 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
261f0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
26200 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
26210 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
26220 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
26230 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
26240 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
26250 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
26260 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
26270 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
26280 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
26290 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
262a0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
262b0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
262c0 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
262d0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
262e0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
262f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
26300 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
26310 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
26320 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
26330 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
26340 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
26350 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
26360 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
26370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
26380 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
26390 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
263a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
263b0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
263c0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
263d0 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
263e0 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
263f0 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
26400 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
26410 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
26420 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
26430 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
26440 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
26450 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
26460 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
26470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26480 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
26490 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
264a0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
264b0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
264c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
264d0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
264e0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
264f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
26500 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
26510 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
26520 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
26530 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
26540 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
26550 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
26560 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
26570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26580 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
26590 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
265a0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
265b0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
265c0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
265d0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
265e0 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
265f0 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
26600 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26610 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
26620 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
26630 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
26640 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
26650 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
26660 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
26670 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
26680 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
26690 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
266a0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
266b0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
266c0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
266d0 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
266e0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
266f0 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
26700 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
26710 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
26720 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
26730 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
26740 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
26750 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
26760 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
26770 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
26780 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
26790 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
267a0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
267b0 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f  t, void *, .  vo
267c0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
267d0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
267e0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
267f0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
26800 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
26810 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
26820 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
26830 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
26840 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
26850 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69  pDestructor.);.i
26860 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
26870 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
26880 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26890 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
268a0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
268b0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
268c0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
268d0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
268e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
268f0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
26900 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
26910 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
26920 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26930 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
26940 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
26950 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
26960 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28  lite3AppendChar(
26970 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68  StrAccum*,int,ch
26980 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ar);.char *sqlit
26990 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
269a0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
269b0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
269c0 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
269d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
269e0 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
269f0 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
26a00 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
26a10 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
26a20 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
26a30 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
26a40 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
26a50 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
26a60 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
26a70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
26a80 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
26a90 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
26aa0 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
26ab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
26ac0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
26ad0 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
26ae0 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
26af0 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
26b00 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
26b10 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64  Value(Parse*,Ind
26b20 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f  ex*,UnpackedReco
26b30 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e  rd**,Expr*,u8,in
26b40 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  t,int*);.int sql
26b50 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72  ite3Stat4ValueFr
26b60 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45  omExpr(Parse*, E
26b70 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65  xpr*, u8, sqlite
26b80 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64  3_value**);.void
26b90 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
26ba0 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52  beFree(UnpackedR
26bb0 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ecord*);.int sql
26bc0 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28  ite3Stat4Column(
26bd0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
26be0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  void*, int, int,
26bf0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
26c00 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
26c10 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
26c20 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
26c30 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
26c40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
26c50 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
26c60 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71  )(u64));.void sq
26c70 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
26c80 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
26c90 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
26ca0 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
26cb0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
26cc0 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
26cd0 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
26ce0 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
26cf0 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
26d00 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
26d10 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
26d20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
26d30 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
26d40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
26d50 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
26d60 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
26d70 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
26d80 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
26d90 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
26da0 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
26db0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
26dc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
26dd0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
26de0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
26df0 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
26e00 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
26e10 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
26e20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
26e30 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
26e40 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
26e50 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
26e60 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
26e70 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
26e80 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
26e90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
26ea0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
26eb0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26ec0 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
26ed0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
26ee0 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
26ef0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
26f00 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
26f10 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26f20 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
26f30 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26f40 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
26f50 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
26f60 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
26f70 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
26f80 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
26f90 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26fa0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
26fb0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
26fc0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
26fd0 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
26fe0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
26ff0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
27000 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
27010 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
27020 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
27030 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
27040 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
27050 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
27060 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
27070 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
27080 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
27090 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
270a0 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
270b0 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
270c0 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
270d0 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
270e0 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
270f0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
27100 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
27110 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
27120 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
27130 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
27140 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
27150 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
27160 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
27170 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
27180 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
27190 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
271a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
271b0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
271c0 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
271d0 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
271e0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
271f0 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
27200 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
27210 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
27220 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
27230 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
27240 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
27250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
27260 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
27270 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
27280 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
27290 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
272a0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
272b0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
272c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
272d0 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
272e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
272f0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
27300 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
27310 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
27320 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
27330 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27340 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
27350 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
27360 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
27370 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
27380 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
27390 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
273a0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
273b0 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
273c0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
273d0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
273e0 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
273f0 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
27400 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
27410 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
27420 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
27430 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
27440 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
27450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27460 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
27470 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
27480 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
27490 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
274a0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
274b0 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
274c0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
274d0 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
274e0 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
274f0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
27500 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27510 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
27520 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
27530 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
27540 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27550 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
27560 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
27570 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
27580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27590 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
275a0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
275b0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
275c0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
275d0 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
275e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
275f0 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
27600 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
27610 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
27620 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
27630 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
27640 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
27650 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
27660 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
27670 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
27680 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
27690 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
276a0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
276b0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
276c0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
276d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
276e0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
276f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
27700 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
27710 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
27720 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
27730 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
27740 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
27750 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
27760 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
27770 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
27780 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
27790 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
277a0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
277b0 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
277c0 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
277d0 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
277e0 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
277f0 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
27800 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
27810 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
27820 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
27830 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
27840 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
27850 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
27860 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
27870 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
27880 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
27890 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
278a0 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
278b0 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
278c0 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
278d0 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
278e0 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
278f0 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
27900 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
27910 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
27920 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
27930 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20  ionality is .** 
27940 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
27950 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
27960 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
27970 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
27980 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
27990 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
279a0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
279b0 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
279c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
279d0 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
279e0 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
279f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27a00 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
27a10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27a20 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
27a30 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
27a40 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
27a50 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
27a60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
27a70 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
27a80 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
27a90 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
27aa0 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
27ab0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
27ac0 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
27ad0 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
27ae0 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
27af0 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
27b00 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
27b10 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27b20 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
27b30 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
27b40 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
27b50 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
27b60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27b70 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
27b80 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
27b90 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
27ba0 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
27bb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27bc0 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
27bd0 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a  ,d)    0.#endif.
27be0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27bf0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
27c00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
27c10 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
27c20 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
27c30 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
27c40 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
27c50 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
27c60 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
27c70 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27c80 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
27c90 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27ca0 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
27cb0 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
27cc0 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
27cd0 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
27ce0 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
27cf0 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
27d00 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
27d10 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
27d20 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
27d30 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
27d40 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
27d50 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
27d60 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
27d70 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
27d80 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
27d90 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
27da0 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
27db0 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
27dc0 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
27dd0 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49  nt if SQLITE_OMI
27de0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a  T_BUILTIN_TEST.*
27df0 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
27e00 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
27e10 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
27e20 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
27e30 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
27e40 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
27e50 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
27e60 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
27e70 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
27e80 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
27e90 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
27ea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
27eb0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
27ec0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
27ed0 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
27ee0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
27ef0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
27f00 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27f10 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
27f20 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
27f30 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
27f40 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
27f50 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
27f60 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
27f70 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
27f80 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
27f90 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
27fa0 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
27fb0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
27fc0 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
27fd0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
27fe0 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
27ff0 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
28000 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
28010 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
28020 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
28030 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
28040 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
28050 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
28060 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
28070 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
28080 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
28090 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
280a0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
280b0 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
280c0 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
280d0 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
280e0 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
280f0 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
28100 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
28110 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
28120 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
28130 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
28140 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
28150 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
28160 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
28170 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
28180 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
28190 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
281a0 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a  *, u32, int*);..
281b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
281c0 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
281d0 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
281e0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
281f0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
28200 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
28210 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
28220 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28230 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
28240 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
28250 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
28260 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
28270 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
28280 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
28290 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
282a0 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
282b0 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
282c0 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
282d0 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
282e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
282f0 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
28300 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
28310 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
28320 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
28330 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
28340 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
28350 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
28360 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
28370 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
28380 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
28390 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
283a0 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
283b0 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
283c0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
283d0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
283e0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
283f0 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
28400 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
28410 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
28420 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
28430 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
28440 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
28450 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
28460 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
28470 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
28480 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
28490 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
284a0 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
284b0 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
284c0 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
284d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
284e0 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
284f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
28500 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
28510 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
28520 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
28530 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
28540 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
28550 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
28560 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
28570 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
28580 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
28590 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
285a0 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
285b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
285c0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
285d0 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
285e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
285f0 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
28600 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
28610 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
28620 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
28630 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
28640 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
28650 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
28660 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
28670 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
28680 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
28690 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
286a0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
286b0 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
286c0 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
286d0 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
286e0 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23   messages. .*/.#
286f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28700 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
28710 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
28720 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
28730 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
28740 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
28750 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
28760 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
28770 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
28780 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
28790 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
287a0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
287b0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
287c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
287d0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
287e0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
287f0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
28800 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
28810 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
28820 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
28830 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
28840 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
28850 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
28860 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
28870 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
28880 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
28890 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
288a0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
288b0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
288c0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
288d0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
288e0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
288f0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
28900 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
28910 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
28920 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
28930 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
28940 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
28950 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
28960 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
28970 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
28980 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
28990 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
289a0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
289b0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
289c0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
289d0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
289e0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
289f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
28a00 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
28a10 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
28a20 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
28a30 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
28a40 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
28a50 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
28a60 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
28a70 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
28a80 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
28a90 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
28aa0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
28ab0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
28ac0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
28ad0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28ae0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
28af0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
28b00 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
28b10 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
28b20 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
28b30 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
28b40 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
28b50 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
28b60 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
28b70 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
28b80 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
28b90 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
28ba0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
28bb0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
28bc0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
28bd0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
28be0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
28bf0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
28c00 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
28c10 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
28c20 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
28c30 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
28c40 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
28c50 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
28c60 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
28c70 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
28c80 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
28c90 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
28ca0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
28cb0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
28cc0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
28cd0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
28ce0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
28cf0 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
28d00 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
28d10 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
28d20 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
28d30 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
28d40 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
28d50 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
28d60 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
28d70 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
28d80 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
28d90 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
28da0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
28db0 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
28dc0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
28dd0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
28de0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
28df0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
28e00 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
28e10 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
28e20 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
28e30 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
28e40 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
28e50 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
28e60 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
28e70 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
28e80 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
28e90 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
28ea0 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
28eb0 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
28ec0 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
28ed0 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
28ee0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
28ef0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
28f00 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74  02  /* Heap that
28f10 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
28f20 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64   lookaside */.#d
28f30 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
28f40 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
28f50 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
28f60 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
28f70 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
28f80 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
28f90 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
28fa0 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
28fb0 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
28fc0 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
28fd0 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
28fe0 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
28ff0 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
29000 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
29010 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
29020 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
29030 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
29040 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
29050 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
29060 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
29070 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29  BLE_DBSTAT_VTAB)
29080 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
29090 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
290a0 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74  ite3DbstatRegist
290b0 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
290c0 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
290d0 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
290e0 0a                                               .