/ Hex Artifact Content
Login

Artifact f5d9aa5d0cb0c89af4030c5b5b0ff93d5ef1e9a3:


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 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e  include <intrin.
1ac0: 68 3e 0a 23 20 20 70 72 61 67 6d 61 20 69 6e 74  h>.#  pragma int
1ad0: 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70  rinsic(_byteswap
1ae0: 5f 75 73 68 6f 72 74 29 0a 23 20 20 70 72 61 67  _ushort).#  prag
1af0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
1b00: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 65  teswap_ulong).#e
1b10: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1b20: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
1b30: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
1b40: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
1b50: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
1b60: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
1b70: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
1b80: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
1b90: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
1ba0: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
1bb0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
1bc0: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
1bd0: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
1be0: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
1bf0: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
1c00: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
1c10: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
1c20: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
1c30: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
1c40: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
1c50: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
1c60: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
1c70: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
1c80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
1c90: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
1ca0: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
1cb0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
1cc0: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
1cd0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
1ce0: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
1cf0: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
1d00: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1d10: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1d20: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
1d30: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
1d40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1d50: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
1d60: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
1d70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
1d80: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
1d90: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
1da0: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
1db0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
1dc0: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
1dd0: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
1de0: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
1df0: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
1e00: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
1e10: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
1e20: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
1e30: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
1e40: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
1e50: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
1e60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
1e70: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
1e80: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
1e90: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
1ea0: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
1eb0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
1ec0: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
1ed0: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
1ee0: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
1ef0: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
1f00: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1f10: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
1f20: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
1f30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
1f40: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
1f50: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
1f60: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
1f70: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1f80: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1f90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1fa0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1fb0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1fc0: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1fd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1fe0: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1ff0: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2000: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2010: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2020: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2030: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2040: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2050: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2060: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2070: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
2080: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2090: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
20a0: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
20b0: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
20c0: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
20d0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
20e0: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
20f0: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2100: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2110: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2120: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2130: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2140: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2150: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2160: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2170: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2180: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
2190: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
21a0: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
21b0: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
21c0: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
21d0: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
21e0: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
21f0: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2200: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2210: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2220: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2230: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2240: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2250: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2260: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2270: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
2280: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
2290: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
22a0: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
22b0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
22c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22d0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
22e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
22f0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2300: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2310: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2320: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2330: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2340: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2350: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2360: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2370: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2380: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2390: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
23a0: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
23b0: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
23c0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
23d0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
23e0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
23f0: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2400: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2410: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2420: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2430: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2440: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2450: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2470: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2480: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2490: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
24a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
24b0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
24c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
24d0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
24e0: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
24f0: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2500: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2510: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2520: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2530: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2540: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2550: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2560: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2570: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
2580: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2590: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
25a0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
25b0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
25c0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
25d0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
25e0: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
25f0: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
2600: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
2610: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
2620: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
2630: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
2640: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
2650: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
2660: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
2670: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2680: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
2690: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
26a0: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
26b0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
26c0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
26d0: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
26e0: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
26f0: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
2700: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
2710: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
2720: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
2730: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
2740: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
2750: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
2760: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
2770: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
2780: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
2790: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
27a0: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
27b0: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
27c0: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
27d0: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
27e0: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
27f0: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
2800: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2810: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
2820: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
2830: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
2840: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
2850: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
2860: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
2870: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
2880: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
2890: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
28a0: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
28b0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
28c0: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
28d0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
28e0: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
28f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2900: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
2910: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
2920: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
2930: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
2940: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
2950: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
2960: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
2970: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2980: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
2990: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
29a0: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
29b0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(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 29 20 26 26 20  IN_COMMENTS) && 
29e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
29f0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
2a00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
2a10: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
2a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2a30: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
2a40: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
2a50: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
2a60: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
2a70: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
2a80: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
2a90: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
2aa0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
2ab0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
2ac0: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
2ad0: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
2ae0: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
2af0: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
2b00: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
2b10: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2b20: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
2b30: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
2b40: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
2b50: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
2b60: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
2b70: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2b80: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2b90: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2ba0: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2bb0: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2bc0: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2bd0: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2be0: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2bf0: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2c00: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2c10: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
2c20: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
2c30: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
2c40: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
2c50: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
2c60: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
2c70: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2c80: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2c90: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2ca0: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2cb0: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2cc0: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2cd0: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2ce0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2cf0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2d00: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2d10: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
2d20: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2d30: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
2d40: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
2d50: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
2d60: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
2d70: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2d80: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2d90: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2da0: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2db0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2dc0: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2dd0: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2de0: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2df0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2e00: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2e10: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
2e20: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
2e30: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
2e40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2e50: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2e60: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
2e70: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2e80: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2e90: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2ea0: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2eb0: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2ec0: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2ed0: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2ee0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2ef0: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2f00: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2f10: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
2f20: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
2f30: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
2f40: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
2f50: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
2f60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
2f70: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2f80: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2f90: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2fa0: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2fb0: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2fc0: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2fd0: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2fe0: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2ff0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
3000: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
3010: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
3020: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
3030: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
3040: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
3050: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
3060: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
3070: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
3080: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3090: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
30a0: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
30b0: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
30c0: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
30d0: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
30e0: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
30f0: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
3100: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
3110: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
3120: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
3130: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
3140: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
3150: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
3160: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
3170: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
3180: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
3190: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
31a0: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
31b0: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
31c0: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
31d0: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
31e0: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
31f0: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
3200: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
3210: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
3220: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
3230: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
3240: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
3250: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
3260: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
3270: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
3280: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
3290: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
32a0: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
32b0: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
32c0: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
32d0: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
32e0: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
32f0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
3300: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
3310: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
3320: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
3330: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
3340: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
3350: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
3360: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
3370: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
3380: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
3390: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
33a0: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
33b0: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
33c0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
33d0: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
33e0: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
33f0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
3400: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
3410: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
3420: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
3430: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
3440: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
3450: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3460: 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75 73 65  Declarations use
3470: 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20 74 68  d for tracing th
3480: 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  e operating syst
3490: 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a  em interfaces..*
34a0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
34b0: 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52  LITE_FORCE_OS_TR
34c0: 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  ACE) || defined(
34d0: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
34e0: 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
34f0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
3500: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20  SQLITE_OS_WIN). 
3510: 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
3520: 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20 64 65  te3OSTrace;.# de
3530: 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 20  fine OSTRACE(X) 
3540: 20 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c           if( sql
3550: 69 74 65 33 4f 53 54 72 61 63 65 20 29 20 73 71  ite3OSTrace ) sq
3560: 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
3570: 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   X.# define SQLI
3580: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
3590: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
35a0: 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75 6e 64  OSTRACE(X).# und
35b0: 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  ef  SQLITE_HAVE_
35c0: 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69 66 0a  OS_TRACE.#endif.
35d0: 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20 73 71  ./*.** Is the sq
35e0: 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29 20 66  lite3ErrName() f
35f0: 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64 20 69  unction needed i
3600: 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20 43 75  n the build?  Cu
3610: 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69  rrently,.** it i
3620: 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d 75 74  s needed by "mut
3630: 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65 6e 20  ex_w32.c" (when 
3640: 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f  debugging), "os_
3650: 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20  win.c" (when.** 
3660: 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61 62 6c  OSTRACE is enabl
3670: 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65 76 65  ed), and by seve
3680: 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20 66 69  ral "test*.c" fi
3690: 6c 65 73 20 28 77 68 69 63 68 20 61 72 65 0a 2a  les (which are.*
36a0: 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67  * compiled using
36b0: 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a   SQLITE_TEST)..*
36c0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
36d0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
36e0: 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  CE) || defined(S
36f0: 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c  QLITE_TEST) || \
3700: 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
3710: 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 53  LITE_DEBUG) && S
3720: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20  QLITE_OS_WIN).# 
3730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45  define SQLITE_NE
3740: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73  ED_ERR_NAME.#els
3750: 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54  e.# undef  SQLIT
3760: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
3770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3780: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3790: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
37a0: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
37b0: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
37c0: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
37d0: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
37e0: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
37f0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
3800: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
3810: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
3820: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
3830: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
3840: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3850: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3860: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3870: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3880: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3890: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
38a0: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
38b0: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
38c0: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
38d0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
38e0: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
38f0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
3900: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
3910: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
3920: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
3930: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
3940: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3950: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3960: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3970: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3980: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3990: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
39a0: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
39b0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
39c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
39d0: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
39e0: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
39f0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
3a00: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
3a10: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
3a20: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
3a30: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
3a40: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3a50: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3a60: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3a70: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3a80: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3a90: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3aa0: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3ab0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3ac0: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
3ad0: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
3ae0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
3af0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
3b00: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
3b10: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
3b20: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
3b30: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
3b40: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3b50: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3b60: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3b70: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3b80: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3b90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3ba0: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3bb0: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3bc0: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
3bd0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
3be0: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
3bf0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3c00: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
3c10: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
3c20: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
3c30: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
3c40: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3c50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3c60: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3c70: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3c80: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3c90: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3ca0: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3cb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3cc0: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
3cd0: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
3ce0: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
3cf0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
3d00: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
3d10: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
3d20: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
3d30: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
3d40: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3d50: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3d60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3d70: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3d80: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3d90: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3da0: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3db0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3dc0: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
3dd0: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
3de0: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
3df0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
3e00: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
3e10: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
3e20: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
3e30: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
3e40: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3e50: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3e60: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3e70: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3e80: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3e90: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3ea0: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3eb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3ec0: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
3ed0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3ee0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
3ef0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
3f00: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
3f10: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
3f20: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
3f30: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
3f40: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3f50: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3f60: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3f70: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3f80: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3f90: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3fa0: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3fb0: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3fc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3fd0: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
3fe0: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
3ff0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
4000: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
4010: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
4020: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
4030: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
4040: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
4050: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
4060: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
4070: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
4080: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4090: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
40a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
40b0: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
40c0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
40d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
40e0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
40f0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
4100: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4110: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
4120: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
4130: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
4140: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
4150: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
4160: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
4170: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
4180: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
4190: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
41a0: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
41b0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
41c0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
41d0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
41e0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
41f0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
4200: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4210: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4220: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4230: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
4240: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4250: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4260: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4270: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4280: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
4290: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
42a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
42b0: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
42c0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
42d0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
42e0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
42f0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4300: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4310: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
4320: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4330: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
4340: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
4350: 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61  t initial alloca
4360: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67  tion for the pag
4370: 65 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e  ecache when usin
4380: 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61  g separate.** pa
4390: 67 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63  gecaches for eac
43a0: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
43b0: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69  ction.  A positi
43c0: 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ve number is the
43d0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  .** number of pa
43e0: 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ges.  A negative
43f0: 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c   number N transl
4400: 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61  ations means tha
4410: 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66  t a buffer.** of
4420: 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69   -1024*N bytes i
4430: 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  s allocated and 
4440: 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79  used for as many
4450: 20 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c   pages as it wil
4460: 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64  l hold..*/.#ifnd
4470: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4480: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
4490: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
44a0: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
44b0: 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66  NITSZ 100.#endif
44c0: 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  .../*.** GCC doe
44d0: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
44e0: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
44f0: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
4500: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
4510: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
4520: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
4530: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
4540: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
4550: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
4560: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
4570: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
4580: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d  ** Macros to com
4590: 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64  pute minimum and
45a0: 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20   maximum of two 
45b0: 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  numbers..*/.#def
45c0: 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41  ine MIN(A,B) ((A
45d0: 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23  )<(B)?(A):(B)).#
45e0: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
45f0: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
4600: 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77  )../*.** Swap tw
4610: 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70  o objects of typ
4620: 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69  e TYPE..*/.#defi
4630: 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42  ne SWAP(TYPE,A,B
4640: 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42  ) {TYPE t=A; A=B
4650: 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ; B=t;}../*.** C
4660: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
4670: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
4680: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
4690: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
46a0: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
46b0: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
46c0: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
46d0: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
46e0: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
46f0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4700: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
4710: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
4720: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
4730: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
4740: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
4750: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
4760: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
4770: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
4780: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
4790: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
47a0: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
47b0: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
47c0: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
47d0: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
47e0: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
47f0: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
4800: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
4810: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
4820: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
4830: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
4840: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
4850: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
4860: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
4870: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
4880: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
4890: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
48a0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
48b0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
48c0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
48d0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
48e0: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
48f0: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
4900: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
4910: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4920: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
4930: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
4940: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4950: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
4960: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
4970: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
4980: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
4990: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
49a0: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
49b0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
49c0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
49d0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
49e0: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
49f0: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4a00: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
4a10: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
4a20: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
4a30: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
4a40: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
4a50: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
4a60: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
4a70: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
4a80: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4a90: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
4aa0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
4ab0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4ac0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4ad0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4ae0: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
4af0: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
4b00: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
4b10: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
4b20: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
4b30: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4b40: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
4b50: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
4b60: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
4b70: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4b80: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
4b90: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
4ba0: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
4bb0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4bc0: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
4bd0: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
4be0: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
4bf0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4c00: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
4c10: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
4c20: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
4c30: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4c40: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
4c50: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
4c60: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
4c70: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4c80: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
4c90: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
4ca0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
4cb0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
4cc0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
4cd0: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
4ce0: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
4cf0: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
4d00: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
4d10: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
4d20: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
4d30: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
4d40: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
4d50: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
4d60: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
4d70: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
4d80: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
4d90: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
4da0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
4db0: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
4dc0: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
4dd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4de0: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
4df0: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
4e00: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
4e10: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
4e20: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
4e30: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
4e40: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
4e50: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
4e60: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4e70: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
4e80: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
4e90: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
4ea0: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
4eb0: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
4ec0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
4ed0: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
4ee0: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
4ef0: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
4f00: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
4f10: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
4f20: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
4f30: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
4f40: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
4f50: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
4f60: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
4f70: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
4f80: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
4f90: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
4fa0: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
4fb0: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
4fc0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
4fd0: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
4fe0: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
4ff0: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
5000: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
5010: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
5020: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
5030: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
5040: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
5050: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
5060: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
5070: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
5080: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
5090: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
50a0: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
50b0: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
50c0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
50d0: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
50e0: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
50f0: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
5100: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
5110: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
5120: 45 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61  Est quantities a
5130: 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65  re suppose to be
5140: 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e   estimates,.** n
5150: 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c  ot exact values,
5160: 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f   this imprecisio
5170: 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c  n is not a probl
5180: 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73  em..**.** "LogEs
5190: 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20  t" is short for 
51a0: 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74  "Logarithmic Est
51b0: 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78  imate"..**.** Ex
51c0: 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20  amples:.**      
51d0: 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20  1 -> 0          
51e0: 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20      20 -> 43    
51f0: 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31        10000 -> 1
5200: 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20  32.**      2 -> 
5210: 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32  10             2
5220: 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20  5 -> 46         
5230: 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a   25000 -> 146.**
5240: 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20        3 -> 16   
5250: 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20           100 -> 
5260: 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30  66        100000
5270: 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20  0 -> 199.**     
5280: 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20   4 -> 20        
5290: 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20     1000 -> 99   
52a0: 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20       1048576 -> 
52b0: 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e  200.**     10 ->
52c0: 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30   33           10
52d0: 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39  24 -> 100    429
52e0: 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a  4967296 -> 320.*
52f0: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20  *.** The LogEst 
5300: 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20  can be negative 
5310: 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63  to indicate frac
5320: 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a  tional values. .
5330: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
5340: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
5350: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
5360: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
5370: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
5380: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5390: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
53a0: 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50  Set the SQLITE_P
53b0: 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20  TRSIZE macro to 
53c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
53d0: 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72  tes in a pointer
53e0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
53f0: 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20  TE_PTRSIZE.# if 
5400: 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46  defined(__SIZEOF
5410: 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20  _POINTER__).#   
5420: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
5430: 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50  RSIZE __SIZEOF_P
5440: 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20  OINTER__.# elif 
5450: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
5460: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
5470: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
5480: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
5490: 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69     \.       defi
54a0: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c  ned(_M_ARM)   ||
54b0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
54c0: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
54d0: 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e  __x86).#   defin
54e0: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
54f0: 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65   4.# else.#   de
5500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5510: 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 8.# endif.#e
5520: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
5530: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
5540: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
5550: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
5560: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
5570: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
5580: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
5590: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
55a0: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
55b0: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
55c0: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
55d0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
55e0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
55f0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
5600: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
5610: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
5620: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
5630: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
5640: 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  -DSQLITE_RUNTIME
5650: 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20  _BYTEORDER=1 is 
5660: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
5670: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
5680: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
5690: 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
56a0: 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
56b0: 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74  .const int sqlit
56c0: 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65  e3one = 1;.#else
56d0: 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e  .extern const in
56e0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65  t sqlite3one;.#e
56f0: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
5700: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
5710: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
5720: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
5730: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
5740: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
5750: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
5760: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
5770: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
5780: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
5790: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
57a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
57b0: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
57c0: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
57d0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
57e0: 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65  __arm__)) && !de
57f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
5800: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
5810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5820: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
5830: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
5840: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
5850: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5860: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
5870: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5880: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5890: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64  ITE_UTF16LE.#end
58a0: 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28  if.#if (defined(
58b0: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
58c0: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20  ined(__ppc__))  
58d0: 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65  \.    && !define
58e0: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
58f0: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
5900: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
5910: 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20  ORDER    4321.# 
5920: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5930: 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64  GENDIAN    1.# d
5940: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
5950: 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65  TLEENDIAN 0.# de
5960: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
5970: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
5980: 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23  UTF16BE.#endif.#
5990: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
59a0: 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  TE_BYTEORDER).# 
59b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
59c0: 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20 20  TEORDER    0    
59d0: 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b   /* 0 means "unk
59e0: 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d  nown at compile-
59f0: 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e  time" */.# defin
5a00: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
5a10: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
5a20: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
5a30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5a40: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
5a50: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
5a60: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
5a70: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5a80: 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f  NATIVE  (SQLITE_
5a90: 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45  BIGENDIAN?SQLITE
5aa0: 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f  _UTF16BE:SQLITE_
5ab0: 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a  UTF16LE).#endif.
5ac0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73  ./*.** Constants
5ad0: 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74   for the largest
5ae0: 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f   and smallest po
5af0: 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69  ssible 64-bit si
5b00: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a  gned integers..*
5b10: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61  * These macros a
5b20: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77  re designed to w
5b30: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
5b40: 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
5b50: 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69   64-bit.** compi
5b60: 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lers..*/.#define
5b70: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20   LARGEST_INT64  
5b80: 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69  (0xffffffff|(((i
5b90: 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
5ba0: 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41  32)).#define SMA
5bb0: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69  LLEST_INT64 (((i
5bc0: 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54  64)-1) - LARGEST
5bd0: 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20  _INT64)../* .** 
5be0: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
5bf0: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
5c00: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
5c10: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
5c20: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
5c30: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
5c40: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
5c50: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
5c60: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
5c70: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
5c80: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
5c90: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
5ca0: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
5cb0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
5cc0: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
5cd0: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
5ce0: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
5cf0: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
5d00: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
5d10: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
5d20: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
5d30: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
5d40: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
5d50: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
5d60: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
5d70: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
5d80: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
5d90: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
5da0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
5db0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
5dc0: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
5dd0: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
5de0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
5df0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
5e00: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
5e10: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
5e20: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
5e30: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
5e40: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
5e50: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
5e60: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
5e70: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
5e80: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
5e90: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
5ea0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
5eb0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
5ec0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
5ed0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
5ee0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
5ef0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
5f00: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
5f10: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
5f20: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
5f30: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
5f40: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
5f50: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
5f60: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
5f70: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
5f80: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5f90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5fa0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
5fb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
5fc0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
5fd0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
5fe0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
5ff0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
6000: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
6010: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
6020: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
6030: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
6040: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
6050: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
6060: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
6070: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6080: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
6090: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
60a0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
60b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
60c0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
60d0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
60e0: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
60f0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
6100: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
6110: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
6120: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
6130: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6140: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
6150: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
6160: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
6170: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6180: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6190: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
61a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
61b0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
61c0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
61d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
61e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
61f0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
6200: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
6210: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
6220: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
6230: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
6240: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
6250: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
6260: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
6270: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
6280: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
6290: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
62a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
62b0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
62c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
62d0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
62e0: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
62f0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6300: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
6310: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
6320: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
6330: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
6340: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
6350: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6360: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
6370: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
6380: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6390: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
63a0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
63b0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
63c0: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
63d0: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
63e0: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
63f0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
6400: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
6410: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
6420: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
6430: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
6440: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
6450: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
6460: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
6470: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
6480: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
6490: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
64a0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
64b0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
64c0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
64d0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
64e0: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
64f0: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
6500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
6510: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6520: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
6530: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
6540: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
6550: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6560: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
6570: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
6580: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
6590: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
65a0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
65b0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
65c0: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
65d0: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
65e0: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
65f0: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
6600: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6610: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
6620: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
6630: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
6640: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
6650: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
6660: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
6670: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
6680: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
6690: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
66a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
66b0: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
66c0: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
66d0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
66e0: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
66f0: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a  sqlite handle. .
6700: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
6710: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
6720: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
6730: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
6740: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
6750: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
6760: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
6770: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
6780: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
6790: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
67a0: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
67b0: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
67c0: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
67d0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
67e0: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
67f0: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
6800: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
6810: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
6820: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
6830: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
6840: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
6850: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
6860: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
6870: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
6880: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
6890: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
68a0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
68b0: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
68c0: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
68d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
68e0: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
68f0: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
6900: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
6910: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
6920: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
6930: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
6940: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
6950: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
6960: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
6970: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
6980: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
6990: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
69a0: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
69b0: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
69c0: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
69d0: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
69e0: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
69f0: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
6a00: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
6a10: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
6a20: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
6a30: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
6a40: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
6a50: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
6a60: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
6a70: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
6a80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
6a90: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
6aa0: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
6ab0: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
6ac0: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
6ad0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
6ae0: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
6af0: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
6b00: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
6b10: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
6b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
6b30: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
6b40: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
6b50: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
6b60: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20  ** Determine if 
6b70: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
6b80: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a  a power of two.*
6b90: 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65  /.#define IsPowe
6ba0: 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26  rOfTwo(X) (((X)&
6bb0: 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a  ((X)-1))==0)../*
6bc0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
6bd0: 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73  g value as a des
6be0: 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f  tructor means to
6bf0: 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72   use sqlite3DbFr
6c00: 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  ee()..** The sql
6c10: 69 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75  ite3DbFree() rou
6c20: 74 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77  tine requires tw
6c30: 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73  o parameters ins
6c40: 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20  tead of the .** 
6c50: 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74 68  one parameter th
6c60: 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e  at destructors n
6c70: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53  ormally want.  S
6c80: 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74  o we have to int
6c90: 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69 73 20  roduce .** this 
6ca0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
6cb0: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
6cc0: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
6cd0: 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20  ently.  Any .** 
6ce0: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
6cf0: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
6d00: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
6d10: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
6d20: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
6d30: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
6d40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
6d50: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
6d60: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
6d70: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
6d80: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
6d90: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
6da0: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
6db0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
6dc0: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
6dd0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
6de0: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
6df0: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
6e00: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
6e10: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
6e20: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
6e30: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
6e40: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
6e50: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
6e60: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
6e70: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
6e80: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
6e90: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
6ea0: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
6eb0: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
6ec0: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
6ed0: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
6ee0: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
6ef0: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
6f00: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
6f10: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
6f20: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
6f30: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
6f40: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
6f50: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
6f60: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
6f70: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
6f80: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
6f90: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
6fa0: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
6fb0: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
6fc0: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
6fd0: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
6fe0: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
6ff0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
7000: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
7010: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
7020: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
7030: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
7040: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
7050: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
7060: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
7070: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
7080: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
7090: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
70a0: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
70b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
70c0: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
70d0: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
70e0: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
70f0: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
7100: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
7110: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
7120: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
7130: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
7140: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
7150: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
7160: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
7170: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
7180: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
7190: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
71a0: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
71b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
71c0: 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  D .  #define GLO
71d0: 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65  BAL(t,v) v.  #de
71e0: 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62  fine sqlite3Glob
71f0: 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  alConfig sqlite3
7200: 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f  Config.#endif../
7210: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
7220: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
7230: 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63  ed to suppress c
7240: 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73  ompiler warnings
7250: 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20   and to.** make 
7260: 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61  it clear to huma
7270: 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61  n readers when a
7280: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
7290: 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74  ter is deliberat
72a0: 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  ely .** left unu
72b0: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
72c0: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
72d0: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
72e0: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
72f0: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
7300: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
7310: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
7320: 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a   example the .**
7330: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7340: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
7350: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
7360: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
7370: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
7380: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
7390: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
73a0: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
73b0: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
73c0: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
73d0: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
73e0: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
73f0: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
7400: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
7410: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
7420: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
7430: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
7440: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
7450: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
7460: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
7470: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
7480: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
7490: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
74a0: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
74b0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
74c0: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
74d0: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
74e0: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
74f0: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
7500: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
7510: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
7520: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
7530: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
7540: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
7550: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
7560: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
7570: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
7580: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
7590: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
75a0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
75b0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
75c0: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
75d0: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
75e0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
75f0: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
7600: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
7610: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
7620: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
7630: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
7640: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
7650: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
7660: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
7670: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
7680: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
7690: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
76a0: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
76b0: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
76c0: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
76d0: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
76e0: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
76f0: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
7700: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
7710: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
7720: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
7730: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
7740: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
7750: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
7760: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7770: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
7780: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7790: 74 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53  t ExprSpan ExprS
77a0: 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  pan;.typedef str
77b0: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
77c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
77d0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
77e0: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
77f0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
7800: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
7810: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
7820: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
7830: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
7840: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
7850: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7860: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
7870: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
7880: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
7890: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
78a0: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
78b0: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
78c0: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
78d0: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
78e0: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
78f0: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
7900: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
7910: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
7920: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
7930: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
7940: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
7950: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
7960: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
7970: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
7980: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
7990: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
79a0: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
79b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
79c0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
79d0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
79e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
79f0: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
7a00: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
7a10: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
7a20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7a30: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
7a40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
7a50: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
7a60: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
7a70: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
7a80: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
7a90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
7aa0: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
7ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
7ac0: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
7ad0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ae0: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
7af0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7b00: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
7b10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b20: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
7b30: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
7b40: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
7b50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7b60: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
7b70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7b80: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
7b90: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
7ba0: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
7bb0: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
7bc0: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
7bd0: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
7be0: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
7bf0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
7c00: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
7c10: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
7c20: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
7c30: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
7c40: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
7c50: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
7c60: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
7c70: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
7c80: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
7c90: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
7ca0: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
7cb0: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
7cc0: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
7cd0: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
7ce0: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
7cf0: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
7d00: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
7d10: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
7d20: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
7d30: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
7d40: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
7d50: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
7d60: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
7d70: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
7d80: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
7d90: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
7da0: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
7db0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7dc0: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
7dd0: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
7de0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
7df0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
7e00: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
7e10: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
7e20: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
7e30: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
7e40: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
7e50: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
7e60: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
7e70: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
7e80: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
7e90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7ea0: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
7eb0: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
7ec0: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
7ed0: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
7ee0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
7ef0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
7f00: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
7f10: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
7f20: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
7f30: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
7f40: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
7f50: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
7f60: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
7f70: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
7f80: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
7f90: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
7fa0: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
7fb0: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
7fc0: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
7fd0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
7fe0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
7ff0: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
8000: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
8010: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8020: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
8030: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
8040: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
8050: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
8060: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
8070: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
8080: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
8090: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
80a0: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
80b0: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
80c0: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
80d0: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
80e0: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
80f0: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
8100: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
8110: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
8120: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
8130: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
8140: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
8150: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
8160: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
8170: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
8180: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
8190: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
81a0: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
81b0: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
81c0: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
81d0: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
81e0: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
81f0: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
8200: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
8210: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
8220: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
8230: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
8240: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
8250: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
8260: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
8270: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
8280: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
8290: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
82a0: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
82b0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
82c0: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
82d0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
82e0: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
82f0: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
8300: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
8310: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
8320: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
8330: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
8340: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
8350: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
8360: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
8370: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
8380: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
8390: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
83a0: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
83b0: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
83c0: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
83d0: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
83e0: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
83f0: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
8400: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8410: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
8420: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
8430: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
8440: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
8450: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
8460: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
8470: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
8480: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
8490: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
84a0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
84b0: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
84c0: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
84d0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
84e0: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
84f0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
8500: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
8510: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
8520: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
8530: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
8540: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
8550: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
8560: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
8570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
8580: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
8590: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
85a0: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
85b0: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
85c0: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
85d0: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
85e0: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
85f0: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
8600: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
8610: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
8620: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
8630: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
8640: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
8650: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
8660: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
8670: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
8680: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
8690: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
86a0: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
86b0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
86c0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
86d0: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
86e0: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
86f0: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
8700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8720: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
8730: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
8740: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
8750: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
8760: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
8770: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
8780: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
8790: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
87a0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
87b0: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
87c0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
87d0: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
87e0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
87f0: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
8800: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
8810: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
8820: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
8830: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
8840: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
8850: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
8860: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
8870: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
8880: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
8890: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
88a0: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
88b0: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
88c0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
88d0: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
88e0: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
88f0: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
8900: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
8910: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
8920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
8930: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
8940: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
8950: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
8960: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
8970: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
8980: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
8990: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
89a0: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
89b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
89c0: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
89d0: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
89e0: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
89f0: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
8a00: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
8a10: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
8a20: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
8a30: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
8a40: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
8a50: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
8a60: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
8a70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
8a80: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
8a90: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
8aa0: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
8ab0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
8ac0: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
8ad0: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
8ae0: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
8af0: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
8b00: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
8b10: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
8b20: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
8b30: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
8b40: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8b50: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8b60: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
8b70: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
8b80: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
8b90: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
8ba0: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
8bb0: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
8bc0: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
8bd0: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
8be0: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
8bf0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8c00: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
8c10: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
8c20: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
8c30: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
8c40: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
8c50: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
8c60: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
8c70: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
8c80: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
8c90: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
8ca0: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
8cb0: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
8cc0: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
8cd0: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
8ce0: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
8cf0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
8d00: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
8d10: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
8d20: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
8d30: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
8d40: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8d50: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8d60: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
8d70: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
8d80: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
8d90: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
8da0: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
8db0: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
8dc0: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
8dd0: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
8de0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
8df0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8e00: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
8e10: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
8e20: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
8e30: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
8e40: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
8e50: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
8e60: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
8e70: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
8e80: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
8e90: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
8ea0: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
8eb0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8ec0: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8ee0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
8ef0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
8f00: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
8f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
8f20: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
8f30: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
8f40: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
8f50: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
8f60: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
8f70: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
8f80: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
8f90: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
8fa0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
8fb0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
8fc0: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
8fd0: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
8fe0: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
8ff0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
9000: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
9010: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
9020: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
9030: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
9040: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
9050: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
9060: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
9070: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
9080: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
9090: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
90a0: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
90b0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
90c0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
90d0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
90e0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
90f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
9100: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
9110: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
9120: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
9130: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
9140: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
9150: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
9160: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
9170: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
9180: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
9190: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
91a0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
91b0: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
91c0: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
91d0: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
91e0: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
91f0: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
9200: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
9210: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
9220: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
9230: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
9240: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
9250: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
9260: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
9270: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
9280: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
9290: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
92a0: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
92b0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
92c0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
92d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
92e0: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
92f0: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
9300: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
9310: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
9320: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9330: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
9340: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
9350: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
9360: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
9370: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
9380: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
9390: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
93a0: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
93b0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
93c0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
93d0: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
93e0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
93f0: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
9400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
9410: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
9420: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
9430: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
9440: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9450: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
9460: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
9470: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
9480: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
9490: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
94a0: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
94b0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
94c0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
94d0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
94e0: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
94f0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
9500: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
9510: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
9520: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
9530: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
9540: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
9550: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
9560: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
9570: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
9580: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
9590: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
95a0: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
95b0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
95c0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
95d0: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
95e0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
95f0: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
9600: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
9610: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
9620: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
9630: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
9640: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
9650: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
9660: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
9670: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
9680: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
9690: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
96a0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
96b0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
96c0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
96d0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
96e0: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
96f0: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
9700: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
9710: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
9720: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
9730: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
9740: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
9750: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
9760: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
9770: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9780: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97a0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
97b0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
97c0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
97d0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
97e0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
97f0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9800: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9810: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9830: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
9840: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ar*);.#endif.../
9850: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9860: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
9870: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
9880: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9890: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
98a0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
98b0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
98c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
98d0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
98e0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
98f0: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
9900: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
9910: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
9920: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
9930: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
9940: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
9950: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
9960: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
9970: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
9980: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
9990: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
99a0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
99b0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
99c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
99d0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
99e0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9a00: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
9a10: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
9a20: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
9a30: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9a40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
9a50: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
9a60: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
9a70: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a90: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
9aa0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
9ab0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
9ac0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
9ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
9ae0: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
9af0: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
9b00: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
9b10: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
9b20: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
9b30: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
9b40: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
9b50: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
9b60: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
9b70: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
9b80: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
9b90: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9bb0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
9bc0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
9bd0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
9be0: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9c00: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
9c10: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
9c20: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e  tions */.  u8 en
9c30: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9c40: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
9c50: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75   encoding */.  u
9c60: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9c80: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
9c90: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
9ca0: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
9cb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
9cc0: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
9cd0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
9ce0: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9d00: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
9d10: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
9d20: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
9d30: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
9d40: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
9d50: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
9d60: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
9d70: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
9d80: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
9d90: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
9da0: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
9db0: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
9dc0: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9de0: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
9df0: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
9e00: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
9e10: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
9e20: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
9e30: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
9e40: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
9e50: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
9e60: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
9e70: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
9e80: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
9e90: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
9ea0: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
9eb0: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
9ec0: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
9ed0: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
9ee0: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
9ef0: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
9f00: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
9f10: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
9f20: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
9f30: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
9f40: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
9f50: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
9f60: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
9f70: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
9f80: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
9f90: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
9fa0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
9fb0: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
9fc0: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
9fd0: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
9fe0: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
9ff0: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
a000: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
a010: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
a020: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
a030: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
a040: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
a050: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
a060: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
a070: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
a080: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
a090: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
a0a0: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
a0b0: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
a0c0: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
a0d0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
a0e0: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a100: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
a110: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
a120: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
a130: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
a140: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
a150: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
a160: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
a170: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
a180: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
a190: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
a1a0: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
a1b0: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
a1c0: 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62    u8 imposterTab
a1d0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
a1e0: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
a1f0: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
a200: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
a210: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
a220: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a230: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
a240: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
a250: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
a260: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a270: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a280: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a290: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
a2a0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
a2b0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a2c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a2d0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a2e0: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
a2f0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
a300: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
a310: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a320: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
a330: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
a340: 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20  nt nVDestroy;   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a360: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
a370: 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65   OP_VDestroy ope
a380: 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  rations */.  int
a390: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
a3a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a3b0: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
a3c0: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
a3d0: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
a3e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a3f0: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
a400: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
a410: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
a420: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
a430: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
a440: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
a450: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
a460: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
a490: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
a4a0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
a4b0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
a4c0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
a4d0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
a4e0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
a4f0: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a510: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a520: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
a530: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a540: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a560: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
a570: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
a580: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
a590: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
a5a0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
a5b0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a5c0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a5d0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
a5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a5f0: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
a600: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
a610: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
a620: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
a630: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
a640: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a650: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a660: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
a670: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
a680: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
a690: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
a6a0: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
a6b0: 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51  nt64);.#ifdef SQ
a6c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
a6d0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69  PDATE_HOOK.  voi
a6e0: 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67  d *pPreUpdateArg
a6f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
a700: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
a710: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
a720: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ck */.  void (*x
a730: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
a740: 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65  k)(   /* Registe
a750: 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  red using sqlite
a760: 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b  3_preupdate_hook
a770: 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c  () */.    void*,
a780: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61  sqlite3*,int,cha
a790: 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f  r const*,char co
a7a0: 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nst*,sqlite3_int
a7b0: 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  64,sqlite3_int64
a7c0: 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74  .  );.  PreUpdat
a7d0: 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20  e *pPreUpdate;  
a7e0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a7f0: 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d   for active pre-
a800: 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20  update callback 
a810: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
a820: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
a830: 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66  DATE_HOOK */.#if
a840: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a850: 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61  _WAL.  int (*xWa
a860: 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20  lCallback)(void 
a870: 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  *, sqlite3 *, co
a880: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
a890: 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72  ;.  void *pWalAr
a8a0: 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64  g;.#endif.  void
a8b0: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76  (*xCollNeeded)(v
a8c0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
a8d0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
a8e0: 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28   char*);.  void(
a8f0: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28  *xCollNeeded16)(
a900: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
a910: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
a920: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
a930: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
a940: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
a950: 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20  e *pErr;        
a960: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
a970: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
a980: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
a990: 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49  volatile int isI
a9a0: 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54  nterrupted; /* T
a9b0: 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  rue if sqlite3_i
a9c0: 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65  nterrupt has bee
a9d0: 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20  n called */.    
a9e0: 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b  double notUsed1;
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
aa00: 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b  pacer */.  } u1;
aa10: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f  .  Lookaside loo
aa20: 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
aa30: 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61   /* Lookaside ma
aa40: 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69  lloc configurati
aa50: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
aa60: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
aa70: 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  IZATION.  sqlite
aa80: 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20  3_xauth xAuth;  
aa90: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
aaa0: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
aab0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
aac0: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
aae0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
aaf0: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
ab00: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
ab10: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
ab20: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
ab30: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
ab40: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
ab50: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
ab60: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
ab70: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
ab80: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
ab90: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
aba0: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
abb0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e  callback */.  un
abc0: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
abd0: 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Ops;        /* N
abe0: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
abf0: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
ac00: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
ac10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ac20: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
ac30: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
ac60: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
ac70: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
ac80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ac90: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
aca0: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
acb0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
acc0: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
acd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ace0: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
acf0: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
ad00: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
ad10: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
ad20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
ad30: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
ad40: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
ad50: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
ad60: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
ad70: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
ad80: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
ad90: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
ada0: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
adb0: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
adc0: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
add0: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
ade0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
adf0: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
ae00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ae10: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
ae20: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
ae30: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
ae40: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
ae50: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
ae60: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
ae70: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
ae80: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
ae90: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
aea0: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
aeb0: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
aec0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
aed0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
aee0: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
aef0: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
af00: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
af10: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
af20: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
af30: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
af40: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
af50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
af60: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
af70: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
af80: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
af90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
afa0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
afb0: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
afc0: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
afd0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
afe0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
aff0: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
b000: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
b010: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
b020: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
b030: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
b040: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
b050: 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72  immediate constr
b060: 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a  aints */.  int *
b070: 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20  pnBytesFreed;   
b080: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
b090: 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65  ot NULL, increme
b0a0: 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65  nt this in DbFre
b0b0: 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  e() */.#ifdef SQ
b0c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
b0d0: 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54  CK_NOTIFY.  /* T
b0e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72  he following var
b0f0: 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70  iables are all p
b100: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
b110: 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20  STATIC_MASTER . 
b120: 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62   ** mutex, not b
b130: 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e  y sqlite3.mutex.
b140: 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62   They are used b
b150: 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79  y code in notify
b160: 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  .c. .  **.  ** W
b170: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
b180: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
b190: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
b1a0: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
b1b0: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
b1c0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
b1d0: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
b1e0: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
b1f0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
b200: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
b210: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
b220: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
b230: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
b240: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
b250: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
b260: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
b270: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
b280: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
b290: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
b2a0: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
b2b0: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
b2c0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
b2d0: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
b2e0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
b2f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
b300: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
b310: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
b320: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b340: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
b350: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
b360: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
b370: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
b380: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
b390: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
b3a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
b3b0: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
b3c0: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
b3d0: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
b3e0: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
b3f0: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
b400: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b410: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b420: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
b430: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
b440: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
b450: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
b460: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
b470: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
b480: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
b490: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
b4a0: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
b4b0: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
b4c0: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
b4d0: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
b4e0: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
b4f0: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
b500: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
b510: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
b520: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
b530: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b540: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
b550: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
b560: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
b570: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
b580: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
b590: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
b5a0: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
b5b0: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
b5c0: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
b5d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
b5e0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
b5f0: 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66  000004  /* Use f
b600: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
b610: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
b620: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
b630: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
b640: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
b650: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
b660: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
b670: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
b680: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
b690: 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  10  /* OK to spi
b6a0: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
b6b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b6c0: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
b6d0: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53  0x00000020  /* S
b6e0: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
b6f0: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
b700: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b710: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
b720: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
b730: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
b740: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
b750: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
b760: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
b770: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
b780: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
b790: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
b7d0: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
b7e0: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b810: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
b820: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
b830: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
b840: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
b850: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
b860: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
b870: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
b880: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
b8c0: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
b8d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
b8e0: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
b8f0: 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00200  /* Debug 
b900: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
b910: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
b920: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
b930: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
b940: 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0400  /* Debug l
b950: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
b960: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
b970: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
b980: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
b990: 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0800  /* OK to u
b9a0: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
b9b0: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
b9c0: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
b9d0: 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20  race 0x00001000 
b9e0: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
b9f0: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
ba00: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
ba10: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
ba20: 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20  s   0x00002000  
ba30: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
ba40: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
ba50: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
ba60: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
ba70: 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20  itted 0x0004000 
ba80: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
ba90: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
baa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
bab0: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
bac0: 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  08000  /* Create
bad0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
bae0: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
baf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
bb00: 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30  overyMode   0x00
bb10: 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72  010000  /* Ignor
bb20: 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20  e schema errors 
bb30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bb40: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
bb50: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
bb60: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
bb70: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
bb80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
bb90: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
bba0: 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  40000  /* Enable
bbb0: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
bbc0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
bbd0: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
bbe0: 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20  s    0x00080000 
bbf0: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
bc00: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
bc10: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
bc20: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
bc30: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
bc40: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
bc50: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
bc60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc70: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
bc80: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72  x00200000  /* Pr
bc90: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
bca0: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
bcb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
bcc0: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
bcd0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
bce0: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
bcf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bd00: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
bd10: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
bd20: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
bd30: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
bd40: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
bd50: 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30  FKs       0x0100
bd60: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
bd70: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
bd80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bd90: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
bda0: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
bdb0: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
bdc0: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
bdd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
bde0: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34  eEQP        0x04
bdf0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
be00: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
be10: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
be20: 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20  QLITE_Vacuum    
be30: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
be40: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
be50: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65   a VACUUM */.#de
be60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
be70: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31 30 30  SizeCk     0x100
be80: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
be90: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
bea0: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a 0a 2f 2a   on load */.../*
beb0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
bec0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
bed0: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
bee0: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
bef0: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
bf00: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
bf10: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
bf20: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
bf30: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
bf40: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
bf50: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
bf60: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
bf70: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
bf80: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
bf90: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
bfa0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
bfb0: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
bfc0: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
bfd0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
bfe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
bff0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
c000: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
c010: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
c020: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
c030: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
c040: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
c050: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
c060: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
c070: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
c080: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
c090: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
c0a0: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
c0b0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
c0c0: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
c0d0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
c0e0: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
c0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
c100: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
c110: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
c120: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
c130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c140: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
c150: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
c160: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
c170: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
c180: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
c190: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
c1a0: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
c1b0: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
c1c0: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
c1d0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
c1e0: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
c1f0: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
c200: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
c210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
c220: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
c230: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
c240: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
c250: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
c260: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
c270: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
c280: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
c290: 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  T4 data */.#defi
c2a0: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
c2b0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
c2c0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
c2d0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
c2e0: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
c2f0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
c300: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
c310: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
c320: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
c330: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c340: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
c350: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c360: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
c370: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
c380: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
c390: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
c3a0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
c3b0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
c3c0: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
c3d0: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
c3e0: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
c3f0: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
c400: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
c410: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c420: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
c430: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
c440: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
c450: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
c460: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
c470: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
c480: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
c490: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
c4a0: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
c4b0: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
c4c0: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
c4d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
c4e0: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
c4f0: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
c500: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
c510: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
c520: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
c530: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
c540: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
c550: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
c560: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
c570: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
c580: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
c590: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
c5a0: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
c5b0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
c5c0: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
c5d0: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
c5e0: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
c5f0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
c600: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
c610: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
c620: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
c630: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
c640: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
c650: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
c660: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
c670: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
c680: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
c690: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
c6a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
c6b0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
c6c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c6d0: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
c6e0: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
c6f0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
c700: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
c710: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c720: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
c730: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
c740: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
c750: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
c760: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
c770: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
c780: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
c790: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
c7a0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
c7b0: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
c7c0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
c7d0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
c7e0: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
c7f0: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
c800: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
c810: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
c820: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
c830: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
c840: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
c850: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
c860: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
c870: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
c880: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
c890: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c8a0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
c8b0: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
c8c0: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
c8d0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
c8e0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
c8f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
c900: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
c910: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
c920: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
c930: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
c940: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
c950: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
c960: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
c970: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
c980: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
c990: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
c9a0: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
c9b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c9c0: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
c9d0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
c9e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
c9f0: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
ca00: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
ca10: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
ca20: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ca40: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
ca50: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
ca60: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
ca70: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
ca80: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
ca90: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
caa0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
cab0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
cac0: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
cad0: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
cae0: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
caf0: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
cb00: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
cb10: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
cb20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
cb30: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
cb40: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
cb50: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
cb60: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
cb70: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
cb80: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
cb90: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
cba0: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
cbb0: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
cbc0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
cbd0: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
cbe0: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
cbf0: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
cc00: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
cc10: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
cc20: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
cc30: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
cc40: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
cc50: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
cc60: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
cc70: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
cc80: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
cc90: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
cca0: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
ccb0: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
ccc0: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
ccd0: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
cce0: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
ccf0: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
cd00: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
cd10: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
cd20: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
cd30: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
cd40: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
cd50: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
cd60: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
cd70: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
cd80: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
cd90: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
cda0: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
cdb0: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
cdc0: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
cdd0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
cde0: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
cdf0: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
ce00: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
ce10: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
ce20: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
ce30: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
ce40: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
ce50: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
ce60: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
ce70: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
ce80: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
ce90: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
cea0: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
ceb0: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
cec0: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
ced0: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
cee0: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
cef0: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
cf00: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
cf10: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
cf20: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
cf30: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
cf40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cf50: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
cf60: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
cf70: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
cf80: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
cf90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cfa0: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
cfb0: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
cfc0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
cfd0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
cfe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
cff0: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20  _CASE     0x008 
d000: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
d010: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type 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 45 50 48 45  SQLITE_FUNC_EPHE
d040: 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70  M    0x010 /* Ep
d050: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
d060: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
d070: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d080: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30  C_NEEDCOLL 0x020
d090: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
d0a0: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
d0b0: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
d0c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d0d0: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34  NC_LENGTH   0x04
d0e0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
d0f0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
d100: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d110: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
d120: 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x080 /* Built-i
d130: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
d140: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d150: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
d160: 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69      0x100 /* Bui
d170: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
d180: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
d190: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d1a0: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f  COALESCE 0x200 /
d1b0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
d1c0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
d1d0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
d1e0: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
d1f0: 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74  Y 0x400 /* Built
d200: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
d210: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
d220: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
d230: 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a  ONSTANT 0x800 /*
d240: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
d250: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
d260: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
d270: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
d280: 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f 2a  INMAX  0x1000 /*
d290: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
d2a0: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
d2b0: 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ates */../*.** T
d2c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
d2d0: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
d2e0: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
d2f0: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
d300: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
d310: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
d320: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
d330: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
d340: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
d350: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
d360: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
d370: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
d380: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
d390: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
d3a0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
d3b0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
d3c0: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
d3d0: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
d3e0: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
d3f0: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
d400: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
d410: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
d420: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
d430: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
d440: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
d450: 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
d460: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
d470: 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
d480: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20  unction. If .** 
d490: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
d4a0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
d4b0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
d4c0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
d4d0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
d4e0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d4f0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d500: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
d510: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
d520: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
d530: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d540: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
d550: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
d560: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d570: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
d580: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
d590: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
d5a0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
d5b0: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
d5c0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
d5d0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
d5e0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
d5f0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
d600: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
d610: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
d620: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
d630: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
d640: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
d650: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
d660: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
d670: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
d680: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
d690: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
d6a0: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
d6b0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
d6c0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
d6d0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
d6e0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
d6f0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
d700: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
d710: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
d720: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
d730: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
d740: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
d750: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
d760: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
d770: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
d780: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
d790: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
d7a0: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
d7b0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
d7c0: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
d7d0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
d7e0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
d7f0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
d800: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
d810: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
d820: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
d830: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
d840: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d850: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d860: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d870: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d880: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d890: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d8a0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d8b0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d8c0: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
d8d0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d8e0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d8f0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
d900: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d910: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d920: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d930: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d940: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d950: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d960: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
d970: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d980: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
d990: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
d9a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d9b0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d9c0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d9d0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d9e0: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
d9f0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
da00: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
da10: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
da20: 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
da30: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
da40: 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
da50: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
da60: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
da70: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
da80: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
da90: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
daa0: 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
dab0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
dac0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c   0, 0}.#define L
dad0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
dae0: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
daf0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
db00: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
db10: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
db20: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
db30: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
db40: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
db50: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
db60: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
db70: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
db80: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
db90: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dba0: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
dbb0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
dbc0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
dbd0: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
dbe0: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
dbf0: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66  #zName,0,0}.#def
dc00: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
dc10: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
dc20: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
dc30: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
dc40: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
dc50: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
dc60: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
dc70: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
dc80: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
dc90: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
dca0: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
dcb0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
dcc0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
dcd0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
dce0: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
dcf0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
dd00: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
dd10: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
dd20: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
dd30: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
dd40: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
dd50: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
dd60: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
dd70: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
dd80: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
dd90: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
dda0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
ddb0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
ddc0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
ddf0: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
de00: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
de10: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
de40: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
de50: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
de60: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
de80: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
de90: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
dea0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
deb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
dec0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
ded0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
dee0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
def0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
df00: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
df10: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
df20: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
df30: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
df40: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
df50: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
df60: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
df70: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
df80: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
df90: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
dfa0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
dfb0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
dfc0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
dfd0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
dfe0: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
dff0: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
e000: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
e010: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
e020: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
e030: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
e040: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
e050: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
e060: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
e070: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
e080: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
e090: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
e0a0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
e0b0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
e0c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
e0d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e0e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
e0f0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
e100: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
e110: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
e140: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
e150: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
e160: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
e170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
e180: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
e190: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
e1a0: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
e1b0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
e1c0: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
e1d0: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
e1e0: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
e1f0: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
e200: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
e210: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
e220: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
e230: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
e240: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
e250: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
e260: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
e270: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
e280: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
e290: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
e2a0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
e2b0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
e2c0: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
e2d0: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
e2e0: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
e2f0: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
e300: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
e310: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
e320: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
e330: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
e340: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
e350: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
e360: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
e370: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
e380: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
e390: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
e3a0: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
e3b0: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
e3c0: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
e3d0: 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  size of this col
e3e0: 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a  umn.  INT==1 */.
e3f0: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
e400: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
e410: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
e420: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
e430: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
e440: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
e450: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
e460: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
e470: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
e480: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
e490: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
e4a0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
e4b0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
e4c0: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
e4d0: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
e4e0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
e4f0: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
e500: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
e510: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
e520: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
e530: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
e540: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
e550: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
e560: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
e570: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
e580: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
e590: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
e5a0: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
e5b0: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
e5c0: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
e5d0: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
e5e0: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
e5f0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
e600: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
e610: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
e620: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
e630: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
e640: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
e650: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
e660: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
e670: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
e680: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
e690: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
e6a0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
e6b0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
e6c0: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
e6d0: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e6f0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
e700: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
e710: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
e720: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
e730: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
e740: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
e750: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
e760: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
e770: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
e780: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
e790: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
e7a0: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
e7b0: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
e7c0: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
e7d0: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
e7e0: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
e7f0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
e800: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
e810: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
e820: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
e830: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
e840: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
e850: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
e860: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
e870: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
e880: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
e890: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
e8a0: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
e8b0: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
e8c0: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
e8d0: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
e8e0: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
e8f0: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
e900: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
e910: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
e920: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
e930: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
e940: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
e950: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
e960: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
e970: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
e980: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
e990: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
e9a0: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
e9b0: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
e9c0: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
e9d0: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
e9e0: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
e9f0: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
ea00: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
ea10: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
ea20: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
ea30: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
ea40: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
ea50: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
ea60: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
ea70: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
ea80: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
ea90: 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
eaa0: 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
eab0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eac0: 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
ead0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eae0: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
eaf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eb00: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
eb10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eb20: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
eb30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eb40: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
eb50: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
eb60: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
eb70: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
eb80: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
eb90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
eba0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
ebb0: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
ebc0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
ebd0: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
ebe0: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
ebf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
ec00: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
ec10: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
ec20: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
ec30: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
ec40: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
ec50: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
ec60: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
ec70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
ec80: 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
ec90: 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
eca0: 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
ecb0: 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
ecc0: 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
ecd0: 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
ece0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
ecf0: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
ed00: 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
ed10: 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
ed20: 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
ed30: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
ed40: 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
ed50: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
ed60: 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
ed70: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
ed80: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
ed90: 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
eda0: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
edb0: 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
edc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
edd0: 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
ede0: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
edf0: 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
ee00: 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
ee10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
ee20: 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
ee30: 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
ee40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
ee50: 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
ee60: 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
ee70: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
ee80: 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
ee90: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
eea0: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
eeb0: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
eec0: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
eed0: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
eee0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
eef0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
ef00: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
ef10: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
ef20: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
ef30: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
ef40: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
ef50: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ef60: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
ef70: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
ef80: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
ef90: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
efa0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
efb0: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
efc0: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
efd0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
efe0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
eff0: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
f000: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
f010: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
f020: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
f030: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f040: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
f050: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
f060: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
f070: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
f080: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
f090: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
f0a0: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
f0b0: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
f0c0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
f0d0: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
f0e0: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
f0f0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
f100: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
f110: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
f120: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
f130: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
f140: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
f150: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
f160: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f170: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
f180: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
f190: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
f1a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
f1b0: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
f1c0: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
f1d0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
f1e0: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
f1f0: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
f200: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
f210: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
f220: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
f230: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
f240: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
f250: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
f260: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
f270: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
f280: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
f290: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
f2a0: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
f2b0: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
f2c0: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
f2d0: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
f2e0: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
f2f0: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
f300: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
f310: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
f320: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
f330: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
f340: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
f350: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
f360: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
f370: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
f380: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
f390: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
f3a0: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
f3b0: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
f3c0: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
f3d0: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
f3e0: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
f3f0: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
f400: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
f410: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
f420: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
f430: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
f440: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
f450: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
f460: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
f470: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
f480: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
f490: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
f4a0: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
f4b0: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
f4c0: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
f4d0: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
f4e0: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
f4f0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
f500: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
f510: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
f520: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
f530: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
f540: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
f550: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
f560: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
f570: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
f580: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
f590: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
f5a0: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
f5b0: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
f5c0: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
f5d0: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
f5e0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
f5f0: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
f600: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
f610: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
f620: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
f630: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
f640: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
f650: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
f660: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
f670: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
f680: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
f690: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
f6a0: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
f6b0: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
f6c0: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
f6d0: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
f6e0: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
f6f0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
f700: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
f710: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
f720: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
f730: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
f740: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
f750: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
f760: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
f770: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
f780: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
f790: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
f7a0: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
f7b0: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
f7c0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
f7d0: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
f7e0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
f7f0: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
f800: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
f810: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
f820: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
f830: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f850: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
f860: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
f870: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
f880: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
f890: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f8a0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
f8b0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
f8c0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
f8d0: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
f8e0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
f8f0: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
f900: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
f910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f920: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
f930: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
f940: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
f950: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
f960: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
f970: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
f980: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
f990: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
f9a0: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
f9b0: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
f9c0: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
f9d0: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
f9e0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
f9f0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
fa00: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
fa10: 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  /*.** The schema
fa20: 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61   for each SQL ta
fa30: 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20  ble and view is 
fa40: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
fa50: 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69  emory.** by an i
fa60: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
fa70: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
fa80: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  re..*/.struct Ta
fa90: 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
faa0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
fab0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
fac0: 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
fad0: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
fae0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
faf0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
fb00: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
fb10: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
fb20: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
fb30: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
fb40: 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
fb50: 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
fb60: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
fb70: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
fb80: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
fb90: 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
fba0: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
fbb0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
fbc0: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
fbd0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
fbe0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
fbf0: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
fc00: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
fc10: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
fc20: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
fc30: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
fc40: 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20  HECK.  ExprList 
fc50: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
fc60: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
fc70: 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ints */.#endif. 
fc80: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
fc90: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
fca0: 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
fcb0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36  s table */.  i16
fcc0: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
fcd0: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
fce0: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
fcf0: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
fd00: 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
fd10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fd20: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
fd30: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
fd40: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
fd50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
fd60: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
fd70: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
fd80: 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
fd90: 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
fda0: 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
fdb0: 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
fdc0: 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
fdd0: 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
fde0: 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
fdf0: 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
fe00: 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
fe10: 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
fe20: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
fe30: 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
fe40: 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
fe50: 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
fe60: 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
fe70: 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
fe80: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
fe90: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
fea0: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
feb0: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
fec0: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
fed0: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
fee0: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
fef0: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
ff00: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ff10: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
ff20: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
ff30: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
ff40: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
ff50: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
ff60: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
ff70: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
ff80: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
ff90: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
ffa0: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
ffb0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
ffc0: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
ffd0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
ffe0: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
fff0: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
10000 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
10010 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
10020 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
10030 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
10040 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
10050 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
10060 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
10070 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
10080 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
10090 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
100a0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
100b0 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
100c0 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
100d0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
100e0 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
100f0 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
10100 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
10110 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
10120 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
10130 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
10140 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
10150 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 76 69  en applies to vi
10160 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 68 61  rtual tables tha
10170 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
10180 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
10190 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
101a0 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
101b0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
101c0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
101d0 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
101e0 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
101f0 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
10200 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
10210 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
10220 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
10230 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
10240 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
10250 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
10260 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
10270 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
10280 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
10290 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
102a0 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
102b0 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
102c0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
102d0 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
102e0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
102f0 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
10300 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
10310 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
10320 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
10330 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
10340 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
10350 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
10360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
10370 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
10380 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
10390 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
103a0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
103b0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
103c0 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
103d0 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
103e0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
103f0 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
10400 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
10410 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
10420 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
10430 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
10440 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
10450 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e  id  0x40    /* N
10460 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
10470 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
10480 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
10490 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30  idden       0x80
104a0 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
104b0 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
104c0 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
104d0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
104e0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
104f0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
10500 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
10510 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
10520 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
10530 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
10540 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
10550 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
10560 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
10570 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
10580 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10590 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
105a0 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
105b0 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
105c0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
105d0 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20  Virtual)!=0).#  
105e0 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
105f0 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
10600 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
10610 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
10620 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
10630 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
10640 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48   0.#  define IsH
10650 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
10660 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73  .#endif../* Does
10670 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
10680 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
10690 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
106a0 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
106b0 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
106c0 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e  owid)==0).#defin
106d0 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58  e VisibleRowid(X
106e0 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67  ) (((X)->tabFlag
106f0 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  s & TF_NoVisible
10700 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
10710 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
10720 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
10730 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10740 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10750 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
10760 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
10770 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10780 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
10790 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
107a0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
107b0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
107c0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
107d0 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
107e0 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
107f0 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
10800 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
10810 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
10820 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
10830 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
10840 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
10850 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
10860 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
10870 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
10880 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
10890 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
108a0 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
108b0 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
108c0 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
108d0 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
108e0 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
108f0 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
10900 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
10910 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
10920 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
10930 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
10940 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
10950 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
10960 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
10970 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
10980 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
10990 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
109a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
109b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
109c0 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
109d0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
109e0 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
109f0 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
10a00 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
10a10 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
10a20 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
10a30 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
10a40 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
10a50 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
10a60 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
10a70 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
10a80 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
10a90 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
10aa0 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
10ab0 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
10ac0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
10ad0 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
10ae0 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
10af0 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
10b00 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
10b10 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
10b20 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
10b30 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
10b40 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
10b50 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
10b60 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
10b70 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
10b80 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
10b90 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
10ba0 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
10bb0 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
10bc0 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
10bd0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
10be0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10bf0 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
10c00 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
10c10 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
10c20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
10c30 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
10c40 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
10c50 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
10c60 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
10c70 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
10c80 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
10c90 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
10ca0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
10cb0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
10cc0 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
10cd0 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
10ce0 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
10cf0 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
10d00 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
10d10 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
10d20 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
10d30 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
10d40 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
10d50 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
10d60 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
10d70 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
10d80 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
10d90 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
10da0 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
10db0 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
10dc0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
10dd0 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
10de0 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
10df0 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
10e00 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
10e10 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
10e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
10e30 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
10e40 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
10e50 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
10e60 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
10e70 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
10e80 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
10e90 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
10ea0 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
10eb0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
10ec0 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
10ed0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
10ee0 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
10ef0 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
10f00 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
10f10 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
10f20 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
10f30 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
10f40 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
10f50 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
10f60 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
10f70 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
10f80 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
10f90 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
10fa0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
10fb0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
10fc0 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
10fd0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
10fe0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
10ff0 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
11000 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
11010 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
11020 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
11030 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
11040 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
11050 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
11060 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
11070 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
11080 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
11090 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
110a0 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
110b0 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
110c0 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
110d0 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
110e0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
110f0 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
11100 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
11110 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
11120 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
11130 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
11140 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
11150 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
11160 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
11170 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
11180 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
11190 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
111a0 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
111b0 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
111c0 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
111d0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
111e0 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
111f0 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
11200 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11210 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
11220 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
11230 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
11240 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
11250 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
11260 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
11270 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
11280 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
11290 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
112a0 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
112b0 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
112c0 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
112d0 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
112e0 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
112f0 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
11300 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
11310 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
11320 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
11330 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
11340 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
11350 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
11360 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
11370 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
11380 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
11390 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
113a0 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
113b0 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
113c0 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
113d0 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
113e0 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
113f0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
11400 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
11410 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
11420 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
11430 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
11440 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
11450 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
11460 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
11470 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
11480 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
11490 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
114a0 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
114b0 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
114c0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
114d0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
114e0 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
114f0 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
11500 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
11510 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
11520 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
11530 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
11540 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
11550 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
11560 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
11570 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
11580 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
11590 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
115a0 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
115b0 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
115c0 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
115d0 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
115e0 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
115f0 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
11600 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
11610 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
11620 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
11630 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
11640 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
11650 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
11660 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
11670 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
11680 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
11690 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
116a0 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
116b0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
116c0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
116d0 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
116e0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
116f0 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
11700 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
11710 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
11720 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
11730 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
11740 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
11750 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
11760 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11770 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11780 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
11790 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
117a0 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
117b0 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
117c0 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
117d0 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
117e0 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
117f0 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
11800 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
11810 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
11820 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
11830 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
11840 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
11850 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
11860 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
11870 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
11880 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
11890 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
118a0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
118b0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
118c0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
118d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
118e0 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
118f0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
11900 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
11910 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
11920 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
11930 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
11940 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
11950 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
11960 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11970 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
11980 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
11990 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
119a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
119b0 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
119c0 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
119d0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
119e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
119f0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11a00 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
11a10 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
11a20 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
11a30 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
11a40 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
11a50 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
11a60 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
11a70 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
11a80 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
11a90 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11aa0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11ab0 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
11ac0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a  rmation about a.
11ad0 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20  ** single index 
11ae0 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
11af0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72  already been par
11b00 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
11b10 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65  ividual.** value
11b20 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  s..**.** A recor
11b30 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
11b40 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
11b50 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
11b60 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
11b70 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
11b80 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
11b90 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
11ba0 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
11bb0 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
11bc0 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
11bd0 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
11be0 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
11bf0 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
11c00 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
11c10 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
11c20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
11c30 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
11c40 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
11c50 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f  his structure ho
11c60 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61  lds a record tha
11c70 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
11c80 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a  en disassembled.
11c90 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73  ** into its cons
11ca0 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a  tituent fields..
11cb0 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
11cc0 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61   r2 member varia
11cd0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
11ce0 65 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69  ed by the optimi
11cf0 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  zed comparison.*
11d00 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65  * functions vdbe
11d10 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74  RecordCompareInt
11d20 28 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72  () and vdbeRecor
11d30 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29  dCompareString()
11d40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
11d50 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
11d60 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
11d70 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
11d80 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
11d90 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
11da0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
11db0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11dc0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
11dd0 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
11de0 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
11df0 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
11e00 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
11e10 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
11e20 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
11e30 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
11e40 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
11e50 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
11e60 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  EM) */.  Mem *aM
11e70 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
11e80 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  Values */.  int 
11e90 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
11ea0 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
11eb0 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
11ec0 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20  ) */.  int r2;  
11ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
11ee0 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
11ef0 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a   (rhs < lhs) */.
11f00 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  };.../*.** Each 
11f10 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
11f20 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
11f30 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
11f40 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11f50 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
11f60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
11f70 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
11f80 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
11f90 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
11fa0 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
11fb0 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
11fc0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
11fd0 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
11fe0 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
11ff0 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
12000 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
12010 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
12020 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
12030 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
12040 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
12050 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
12060 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
12070 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
12080 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
12090 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
120a0 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
120b0 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
120c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
120d0 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
120e0 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
120f0 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
12100 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
12110 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
12120 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
12130 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
12140 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
12150 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
12160 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
12170 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
12180 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
12190 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
121a0 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
121b0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
121c0 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
121d0 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
121e0 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
121f0 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
12200 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
12210 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
12220 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
12230 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
12240 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
12250 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
12260 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
12270 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
12280 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
12290 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
122a0 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
122b0 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
122c0 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
122d0 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
122e0 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
122f0 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
12300 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
12310 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
12320 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
12330 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
12340 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
12350 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
12360 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
12370 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
12380 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
12390 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
123a0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
123b0 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
123c0 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
123d0 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
123e0 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
123f0 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
12400 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
12410 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
12420 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
12430 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
12440 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
12450 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
12460 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
12470 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
12480 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
12490 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
124a0 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
124b0 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
124c0 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
124d0 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
124e0 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
124f0 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
12500 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
12510 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
12520 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
12530 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
12540 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
12550 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
12560 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
12570 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
12580 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
12590 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
125a0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
125b0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
125c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
125d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
125e0 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
125f0 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
12600 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
12610 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
12620 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
12630 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
12640 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
12650 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
12660 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
12670 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
12680 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
12690 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
126a0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
126b0 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
126c0 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
126d0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
126e0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
126f0 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
12700 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
12710 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
12720 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
12730 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12740 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
12750 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
12760 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
12770 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
12780 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
12790 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
127a0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
127b0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
127c0 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
127d0 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
127e0 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
127f0 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  SC */.  char **a
12800 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  zColl;          
12810 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
12820 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
12830 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
12840 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
12850 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
12860 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
12870 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
12880 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
128b0 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
128c0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
128d0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
128e0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
128f0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
12900 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
12910 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
12920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12930 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12940 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
12950 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
12960 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12970 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12980 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
12990 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
129a0 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
129b0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
129c0 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
129d0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
129e0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
129f0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
12a00 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
12a10 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
12a20 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
12a30 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
12a40 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
12a50 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
12a60 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
12a70 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
12a80 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12a90 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12aa0 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12ab0 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12ac0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
12ad0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
12ae0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
12af0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
12b00 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
12b10 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
12b20 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
12b30 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12b40 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
12b50 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
12b60 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
12b70 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
12b80 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
12b90 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
12ba0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12bb0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12bc0 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12bd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12be0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
12bf0 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
12c00 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
12c10 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
12c20 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
12c30 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
12c40 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12c50 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12c60 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12c70 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12c80 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12c90 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12ca0 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12cb0 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12cc0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12cd0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12ce0 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
12cf0 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12d00 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
12d10 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12d20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
12d30 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
12d40 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
12d50 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
12d60 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
12d70 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
12d80 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12d90 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
12da0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12db0 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
12dc0 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
12dd0 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
12de0 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
12df0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
12e00 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
12e10 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
12e20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
12e30 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
12e40 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12e50 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
12e60 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
12e70 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
12e80 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
12e90 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
12ea0 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
12eb0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12ec0 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
12ed0 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
12ee0 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
12ef0 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
12f00 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
12f10 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
12f20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
12f30 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
12f40 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
12f50 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
12f60 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  None)../*.** Eac
12f70 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
12f80 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
12f90 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
12fa0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12fb0 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
12fc0 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
12fd0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
12fe0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
12ff0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
13000 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
13010 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
13020 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
13030 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
13040 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
13050 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
13060 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
13070 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
13080 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
13090 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
130a0 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
130b0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
130c0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
130d0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
130e0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
130f0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
13100 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
13110 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13120 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
13130 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
13140 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
13150 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
13160 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
13170 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
13180 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
13190 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
131a0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
131b0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
131c0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
131d0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
131e0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
131f0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
13200 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
13210 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
13220 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
13230 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
13240 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
13250 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
13260 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
13270 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
13280 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
13290 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
132a0 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
132b0 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
132c0 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
132d0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
132e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
132f0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
13300 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
13310 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
13320 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
13330 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
13340 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
13350 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
13360 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
13370 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
13380 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
13390 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
133a0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
133b0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
133c0 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
133d0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
133e0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
133f0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
13400 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
13410 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
13420 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
13430 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
13440 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
13450 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
13460 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
13470 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
13480 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
13490 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
134a0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
134b0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
134c0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
134d0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
134e0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
134f0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
13500 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
13510 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
13520 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
13530 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
13540 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
13550 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
13560 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
13570 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
13580 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
13590 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
135a0 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
135b0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
135c0 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
135d0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
135e0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
135f0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
13600 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
13610 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
13640 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
13650 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
13660 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
13670 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
13680 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
13690 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
136a0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
136b0 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
136e0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
136f0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
13700 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
13710 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
13720 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
13730 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
13740 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
13750 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13760 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
13770 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
13780 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
13790 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
137a0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
137b0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
137c0 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
137d0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
137e0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
137f0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
13800 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
13810 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
13820 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
13830 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
13840 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
13850 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
13860 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
13870 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
13880 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
13890 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
138a0 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
138b0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
138d0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
138e0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
138f0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
13900 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
13910 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
13920 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
13930 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13940 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
13950 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
13960 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
13970 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
13980 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
13990 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
139a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
139b0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
139c0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
139d0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
139e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
139f0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
13a00 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
13a10 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
13a20 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13a30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
13a40 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
13a50 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
13a60 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
13a70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13a80 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
13a90 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
13aa0 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
13ad0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
13ae0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
13af0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
13b20 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
13b30 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
13b40 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
13b50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13b60 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
13b70 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13b80 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
13b90 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
13ba0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
13bb0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
13bc0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
13bd0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13be0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
13bf0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
13c00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13c10 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
13c20 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
13c30 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
13c40 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
13c50 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13c60 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
13c70 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
13c80 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
13c90 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
13ca0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
13cb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13cc0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
13cd0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
13ce0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
13cf0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
13d00 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
13d10 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
13d20 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
13d30 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
13d40 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13d50 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
13d60 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
13d70 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
13d80 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
13d90 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
13da0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
13db0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
13dc0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
13dd0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
13de0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
13df0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
13e00 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
13e10 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
13e20 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
13e30 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
13e40 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
13e50 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
13e60 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
13e70 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
13e80 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
13e90 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13ea0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
13eb0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
13ec0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
13ed0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
13ee0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
13ef0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
13f00 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
13f10 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
13f20 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
13f30 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
13f40 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
13f50 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
13f60 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
13f70 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
13f80 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
13f90 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
13fa0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
13fb0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
13fc0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
13fd0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
13fe0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
13ff0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
14000 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
14010 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
14020 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
14030 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
14040 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
14050 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
14060 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
14070 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
14080 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
14090 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
140a0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
140b0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
140c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
140d0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
140e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
140f0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
14100 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
14110 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
14120 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
14130 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
14140 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
14150 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
14160 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
14170 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
14180 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
14190 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
141a0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
141b0 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
141c0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
141d0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
141e0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
141f0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
14200 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
14210 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14220 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
14230 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
14240 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
14250 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
14260 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
14270 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
14280 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
14290 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
142a0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
142b0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
142c0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
142d0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
142e0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
142f0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14300 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
14310 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
14320 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
14330 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14340 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
14350 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
14360 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
14370 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
14380 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
14390 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
143a0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
143b0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
143c0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
143d0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
143e0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
143f0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
14400 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14410 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
14420 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
14430 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
14440 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
14450 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
14460 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
14470 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
14480 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
14490 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
144a0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
144b0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
144c0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
144d0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
144e0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
144f0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
14500 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
14510 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
14520 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
14530 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
14540 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
14550 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
14560 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
14570 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
14580 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
14590 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
145a0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
145b0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
145c0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
145d0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
145e0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
145f0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
14600 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
14610 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
14620 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
14630 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
14640 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14650 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
14660 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
14670 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
14680 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
14690 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
146a0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
146b0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
146c0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
146d0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
146e0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
146f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14700 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
14710 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
14720 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
14730 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
14740 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
14750 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
14760 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
14770 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
14780 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
14790 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
147a0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
147b0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
147c0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
147d0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
147e0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
147f0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
14800 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
14810 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
14820 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
14830 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
14840 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
14850 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
14860 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
14870 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
14880 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
14890 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
148a0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
148b0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
148c0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
148d0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
148e0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
148f0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
14900 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
14910 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
14920 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
14930 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
14940 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
14950 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
14960 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
14970 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
14980 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
14990 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
149a0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
149b0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
149c0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
149d0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
149e0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
149f0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
14a00 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
14a10 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
14a20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
14a30 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
14a40 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
14a50 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
14a60 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
14a70 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
14a80 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
14a90 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
14aa0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
14ab0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
14ac0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
14ad0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
14ae0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
14af0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
14b00 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
14b10 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
14b20 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
14b30 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
14b40 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
14b50 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
14b60 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
14b70 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
14b80 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
14b90 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
14ba0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
14bb0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
14bc0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
14bd0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
14be0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
14bf0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
14c00 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
14c30 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
14c40 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
14c50 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
14c60 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
14c70 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
14c80 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
14c90 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
14ca0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
14cb0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
14cc0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
14cd0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
14ce0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
14cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
14d00 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
14d10 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
14d20 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
14d30 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
14d40 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
14d50 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
14d60 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
14d70 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
14d80 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
14d90 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
14da0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
14db0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
14dc0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
14dd0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
14de0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
14df0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
14e00 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
14e10 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
14e20 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14e30 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14e40 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
14e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
14e90 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
14ea0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
14eb0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
14ec0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
14ed0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
14ee0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
14ef0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
14f00 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
14f10 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
14f20 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
14f30 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
14f40 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
14f50 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
14f60 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
14f70 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
14f80 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
14f90 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
14fa0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
14fb0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
14fc0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
14fd0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
14fe0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
14ff0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
15000 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
15010 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
15020 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
15030 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
15040 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
15050 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
15060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
150a0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
150b0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
150c0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
150d0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
150e0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
150f0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
15100 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
15110 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
15120 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
15130 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
15140 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
15150 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
15180 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
151b0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
151c0 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
151f0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
15200 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
15210 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
15220 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
15230 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
15240 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
15250 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
15280 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
15290 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
152a0 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
152b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
152c0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
152d0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
152e0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
152f0 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
15300 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
15310 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
15320 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
15330 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
15340 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
15350 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
15360 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
15370 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
153a0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
153b0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
153c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
153d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
153e0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
153f0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
15400 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
15410 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
15420 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
15430 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
15440 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
15450 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
15460 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
15470 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
15480 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
15490 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
154a0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
154b0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
154c0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
154d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
154e0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
154f0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
15500 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
15510 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
15520 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15530 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
15540 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
15550 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
15560 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
15570 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
15580 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
15590 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
155a0 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
155b0 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
155c0 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
155d0 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
155e0 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
155f0 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
15600 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
15610 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
15620 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
15630 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
15640 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
15650 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
15660 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
15670 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
15680 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
15690 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
156a0 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
156b0 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
156c0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
156d0 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
156e0 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
156f0 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
15700 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
15710 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
15720 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
15730 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
15740 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
15750 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
15760 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
15770 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
15780 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
15790 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
157a0 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
157b0 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
157c0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
157d0 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
157e0 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
157f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
15800 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
15810 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
15820 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
15830 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
15840 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
15850 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
15860 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
15870 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
15880 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
15890 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
158a0 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
158b0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
158c0 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
158d0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
158e0 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
158f0 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
15900 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
15910 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
15920 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
15930 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
15940 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
15950 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
15960 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
15970 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
15980 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
15990 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
159a0 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
159b0 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
159c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
159d0 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
159e0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
159f0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
15a00 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
15a10 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
15a20 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
15a30 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
15a40 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
15a50 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
15a60 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
15a70 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49 54 45  Node is a SQLITE
15a80 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
15a90 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
15aa0 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
15ab0 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
15ac0 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
15ad0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
15ae0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
15af0 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
15b00 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
15b10 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
15b20 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f  T operator */../
15b30 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
15b40 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
15b50 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
15b60 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
15b70 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
15b80 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
15b90 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
15ba0 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
15bb0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15bc0 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
15bd0 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
15be0 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
15bf0 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
15c00 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15c10 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
15c20 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
15c30 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
15c40 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
15c50 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
15c60 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
15c70 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
15c80 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
15c90 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15ca0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15cb0 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15cc0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
15cd0 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
15ce0 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
15cf0 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
15d00 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
15d10 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
15d20 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
15d30 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
15d40 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
15d50 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
15d60 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
15d70 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
15d80 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
15d90 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
15da0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
15db0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15dc0 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
15dd0 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15de0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
15df0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15e00 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
15e10 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
15e20 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
15e30 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
15e40 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
15e50 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
15e60 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
15e70 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
15e80 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
15e90 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
15ea0 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
15eb0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15ec0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15ed0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
15ee0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
15ef0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
15f00 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
15f10 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
15f20 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
15f30 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
15f40 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
15f50 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
15f60 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
15f70 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
15f80 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
15f90 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
15fa0 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
15fb0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
15fc0 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
15fd0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
15fe0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
15ff0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
16000 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
16010 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
16020 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
16030 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
16040 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
16050 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
16060 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
16070 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
16080 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
16090 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
160a0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
160b0 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
160c0 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
160d0 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
160e0 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
160f0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
16100 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
16110 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
16120 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
16130 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
16140 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
16150 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
16160 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
16170 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
16180 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
16190 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
161a0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
161b0 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
161c0 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
161d0 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
161e0 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
161f0 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
16200 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
16210 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
16220 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
16230 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
16240 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
16250 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
16260 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
16270 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
16280 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
16290 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
162a0 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
162b0 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
162c0 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
162d0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
162e0 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
162f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16300 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
16310 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
16320 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
16330 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
16340 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
16350 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
16360 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
16370 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
16380 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
16390 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
163a0 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
163b0 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
163c0 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
163d0 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
163e0 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
163f0 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
16400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16410 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
16420 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
16430 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
16440 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
16450 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
16460 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
16470 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
16480 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
16490 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
164a0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
164b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
164c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
164d0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
164e0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
164f0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
16500 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
16510 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
16520 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
16530 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
16540 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
16550 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
16560 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
16570 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
16580 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
16590 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
165a0 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
165b0 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
165c0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
165d0 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
165e0 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
165f0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
16600 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
16610 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
16620 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
16630 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
16640 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
16650 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
16660 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
16670 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
16680 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
16690 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
166a0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
166b0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
166c0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
166d0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
166e0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
166f0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
16700 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
16710 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
16720 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
16730 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
16740 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
16750 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
16760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
16770 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
16780 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
16790 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
167a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
167b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
167c0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
167d0 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
167e0 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
167f0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
16800 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
16810 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
16820 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
16830 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
16840 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16850 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
16860 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
16870 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
16880 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
16890 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
168a0 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
168b0 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
168c0 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
168d0 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
168e0 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
168f0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
16900 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
16910 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16920 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16930 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
16940 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
16950 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
16960 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
16970 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
16980 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16990 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
169a0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
169b0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
169c0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
169d0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
169e0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
169f0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
16a00 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
16a10 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
16a20 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
16a30 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
16a40 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
16a50 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
16a60 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
16a70 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
16a80 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
16a90 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16aa0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16ab0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16ac0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
16ad0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
16ae0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
16af0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
16b00 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
16b10 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
16b20 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
16b30 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
16b40 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
16b50 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
16b60 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
16b70 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
16b80 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16b90 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16ba0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16bb0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16bc0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16bd0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16be0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16bf0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16c00 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16c10 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
16c20 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
16c30 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
16c40 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
16c50 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
16c60 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
16c70 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
16c80 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16c90 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16ca0 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16cb0 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16cc0 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16cd0 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16ce0 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16cf0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16d00 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16d10 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
16d20 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16d30 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
16d40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
16d50 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
16d60 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
16d70 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16d80 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16d90 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16da0 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16db0 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16dc0 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
16dd0 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
16de0 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
16df0 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
16e00 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
16e10 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
16e20 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16e30 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
16e40 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
16e50 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
16e60 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
16e70 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
16e80 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
16e90 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16ea0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16eb0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16ec0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
16ed0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
16ee0 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
16ef0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
16f00 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16f10 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
16f20 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
16f30 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
16f40 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
16f50 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
16f60 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
16f70 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
16f80 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
16f90 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16fa0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16fb0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
16fc0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
16fd0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
16fe0 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
16ff0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
17000 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
17010 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
17020 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
17030 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
17040 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
17050 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
17060 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
17070 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
17080 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
17090 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
170a0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
170b0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
170c0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
170d0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
170e0 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
170f0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
17100 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
17110 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
17120 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
17130 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
17140 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
17150 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
17160 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
17170 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
17180 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
17190 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
171a0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
171b0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
171c0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
171d0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
171e0 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
171f0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
17200 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
17210 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
17220 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
17230 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
17240 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
17250 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
17260 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
17270 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
17280 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
17290 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
172a0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
172b0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
172c0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
172d0 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
172e0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
172f0 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
17300 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
17310 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
17320 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
17330 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
17340 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17350 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
17360 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
17370 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
17380 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
17390 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
173a0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
173b0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
173c0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
173d0 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
173e0 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
173f0 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
17400 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
17410 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
17420 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
17430 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
17440 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
17450 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
17460 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
17470 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
17480 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
17490 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
174a0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
174b0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
174c0 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
174d0 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
174e0 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
174f0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
17500 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
17510 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
17520 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74   */.    u8 joint
17530 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
17540 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
17550 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20  n this able and 
17560 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
17570 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
17580 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
17590 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
175a0 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
175b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75   clause */.    u
175c0 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
175d0 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
175e0 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
175f0 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
17600 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
17610 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
17620 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
17630 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
17640 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
17650 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
17660 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
17670 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
17680 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64  in WITH */.#ifnd
17690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
176a0 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
176b0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
176c0 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
176d0 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
176e0 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
176f0 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
17700 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
17710 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
17720 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
17730 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
17740 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
17750 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
17760 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
17770 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
17780 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
17790 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
177a0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
177b0 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
177c0 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
177d0 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
177e0 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
177f0 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
17800 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
17810 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
17820 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
17830 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
17840 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
17850 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
17860 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
17870 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
17880 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
17890 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
178a0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
178b0 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
178c0 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
178d0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
178e0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
178f0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
17900 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
17910 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
17920 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
17930 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
17940 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
17950 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
17960 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
17970 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
17980 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
17990 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
179a0 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
179b0 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
179c0 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
179d0 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
179e0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
179f0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
17a00 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
17a10 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
17a20 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
17a30 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
17a40 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
17a50 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
17a60 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
17a70 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
17a80 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
17a90 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
17aa0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
17ab0 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
17ac0 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
17ad0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
17ae0 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
17af0 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
17b00 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
17b10 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
17b20 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
17b30 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
17b40 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66   member..*/.#def
17b50 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
17b60 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
17b70 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
17b80 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
17b90 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
17ba0 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
17bb0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17bc0 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
17bd0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
17be0 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
17bf0 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
17c00 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
17c10 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
17c20 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
17c30 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
17c40 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
17c50 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
17c60 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
17c70 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
17c80 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20  ES_OK    0x0008 
17c90 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
17ca0 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
17cb0 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
17cc0 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f  WHERE_OMIT_OPEN_
17cd0 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a  CLOSE  0x0010 /*
17ce0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61   Table cursors a
17cf0 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  re already open 
17d00 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17d10 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20  _FORCE_TABLE    
17d20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e    0x0020 /* Do n
17d30 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d  ot use an index-
17d40 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23  only search */.#
17d50 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
17d60 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78  TABLE_ONLY    0x
17d70 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64  0040 /* Only cod
17d80 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20  e the 1st table 
17d90 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23  in pTabList */.#
17da0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f  define WHERE_NO_
17db0 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78  AUTOINDEX     0x
17dc0 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77  0080 /* Disallow
17dd0 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
17de0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
17df0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
17e00 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
17e10 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
17e20 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
17e30 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17e40 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
17e50 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
17e60 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
17e70 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
17e80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
17e90 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
17ea0 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
17eb0 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
17ec0 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
17ed0 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
17ee0 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38  YGROUP      0x08
17ef0 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
17f00 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
17f10 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
17f20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58  WHERE_REOPEN_IDX
17f30 20 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a         0x1000 /*
17f40 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52   Try to use OP_R
17f50 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20  eopenIdx */../* 
17f60 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
17f70 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
17f80 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
17f90 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
17fa0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
17fb0 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
17fc0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
17fd0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
17fe0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
17ff0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
18000 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
18010 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18020 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
18030 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
18040 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
18050 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
18060 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
18070 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
18080 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
18090 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
180a0 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
180b0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
180c0 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
180d0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
180e0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
180f0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
18100 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
18110 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
18120 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
18130 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
18140 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
18150 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
18160 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
18170 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
18180 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
18190 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
181a0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
181b0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
181c0 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
181d0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
181e0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
181f0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
18200 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
18210 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
18220 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
18230 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
18240 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
18250 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
18260 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
18270 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
18280 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
18290 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
182a0 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
182b0 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
182c0 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
182d0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
182e0 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
182f0 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
18300 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
18310 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
18320 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
18330 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
18340 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
18350 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
18360 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
18370 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
18380 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
18390 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
183a0 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
183b0 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
183c0 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
183d0 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
183e0 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
183f0 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
18400 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
18410 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
18420 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
18430 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
18440 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
18450 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
18460 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
18470 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
18480 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
18490 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
184a0 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
184b0 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
184c0 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
184d0 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
184e0 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
184f0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
18500 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
18510 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
18520 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
18530 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
18540 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
18550 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
18560 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
18570 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
18580 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
18590 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
185a0 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
185b0 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
185c0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
185d0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
185e0 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
185f0 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
18600 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
18610 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
18620 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
18630 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
18640 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
18650 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
18660 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
18670 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
18680 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
18690 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
186a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
186b0 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
186c0 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
186d0 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
186e0 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
186f0 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
18700 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
18710 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
18720 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
18730 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
18740 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
18750 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
18760 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69  .** Note:  NC_Mi
18770 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61 76  nMaxAgg must hav
18780 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
18790 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   as SF_MinMaxAgg
187a0 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   and.** SQLITE_F
187b0 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a  UNC_MINMAX..** .
187c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
187d0 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
187e0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
187f0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
18800 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
18810 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
18820 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f  0x0002  /* One o
18830 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
18840 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
18850 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
18860 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
18870 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
18880 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
18890 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
188a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
188b0 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
188c0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
188d0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
188e0 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
188f0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
18900 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20 2f  tIdx   0x0010  /
18910 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
18920 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
18930 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
18940 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
18950 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
18960 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
18970 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
18980 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  above */../*.** 
18990 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
189a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
189b0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
189c0 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
189d0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
189e0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
189f0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
18a00 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
18a10 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
18a20 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
18a30 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
18a40 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
18a50 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
18a60 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
18a70 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
18a80 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
18a90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
18aa0 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
18ab0 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
18ac0 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
18ad0 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
18ae0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
18af0 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
18b00 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
18b10 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
18b20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
18b30 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
18b40 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
18b50 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
18b60 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
18b70 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
18b80 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
18b90 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
18ba0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
18bb0 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
18bc0 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
18bd0 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
18be0 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
18bf0 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
18c00 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
18c10 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
18c20 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
18c30 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
18c40 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
18c50 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
18c60 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
18c70 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
18c80 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
18c90 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
18ca0 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
18cb0 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
18cc0 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
18cd0 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
18ce0 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
18cf0 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
18d00 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
18d10 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
18d20 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
18d30 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
18d40 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
18d50 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
18d60 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
18d70 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
18d80 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
18d90 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
18da0 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
18db0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
18dc0 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
18dd0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
18de0 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
18df0 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
18e00 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18e20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
18e30 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
18e40 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
18e50 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73  /.  u16 selFlags
18e60 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
18e70 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
18e80 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
18e90 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
18ea0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
18eb0 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
18ec0 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
18ed0 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  s */.#if SELECTT
18ee0 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63  RACE_ENABLED.  c
18ef0 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d  har zSelName[12]
18f00 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69  ;     /* Symboli
18f10 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53  c name of this S
18f20 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65  ELECT use for de
18f30 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  bugging */.#endi
18f40 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  f.  int addrOpen
18f50 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[2];   /* OP
18f60 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
18f70 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
18f80 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75  is select */.  u
18f90 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  64 nSelectRow;  
18fa0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
18fb0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
18fc0 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72  ult rows */.  Sr
18fd0 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
18fe0 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
18ff0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
19000 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
19010 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
19020 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
19030 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
19040 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
19050 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
19060 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
19070 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
19080 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
19090 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
190a0 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
190b0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
190c0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
190d0 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
190e0 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
190f0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
19100 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
19110 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
19120 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
19130 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
19140 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
19150 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
19160 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
19170 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
19180 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
19190 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
191a0 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
191b0 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
191c0 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
191d0 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
191e0 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
191f0 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
19200 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
19210 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
19220 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
19230 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
19240 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
19250 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
19260 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
19270 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
19280 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69   Flag"..*/.#defi
19290 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
192a0 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
192b0 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
192c0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
192d0 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
192e0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20           0x0002 
192f0 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
19300 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
19310 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
19320 76 65 64 20 20 20 20 20 20 20 20 30 78 30 30 30  ved        0x000
19330 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
19340 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
19350 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
19360 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
19370 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 43 6f     0x0008  /* Co
19380 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
19390 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
193a0 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
193b0 65 6d 65 72 61 6c 20 20 20 30 78 30 30 31 30 20  emeral   0x0010 
193c0 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
193d0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
193e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
193f0 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 20  Expanded        
19400 30 78 30 30 32 30 20 20 2f 2a 20 73 71 6c 69 74  0x0020  /* sqlit
19410 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
19420 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
19430 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
19440 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78  sTypeInfo     0x
19450 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0040  /* FROM su
19460 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
19470 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
19480 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
19490 75 6e 64 20 20 20 20 20 20 20 20 30 78 30 30 38  und        0x008
194a0 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
194b0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
194c0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
194d0 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30  ues          0x0
194e0 31 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  100  /* Synthesi
194f0 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
19500 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
19510 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20  e SF_MultiValue 
19520 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20       0x0200  /* 
19530 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65  Single VALUES te
19540 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  rm with multiple
19550 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
19560 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
19570 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 50      0x0400  /* P
19580 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
19590 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
195a0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
195b0 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
195c0 20 30 78 30 38 30 30 20 20 2f 2a 20 4e 65 65 64   0x0800  /* Need
195d0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
195e0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
195f0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
19600 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
19610 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72   0x1000  /* Aggr
19620 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67  egate containing
19630 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20   min() or max() 
19640 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
19650 63 75 72 73 69 76 65 20 20 20 20 20 20 20 30 78  cursive       0x
19660 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  2000  /* The rec
19670 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
19680 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
19690 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
196a0 76 65 72 74 65 64 20 20 20 20 20 20 20 30 78 34  verted       0x4
196b0 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
196c0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
196d0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
196e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
196f0 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
19700 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
19710 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
19720 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
19730 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
19740 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
19750 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
19760 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
19770 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
19780 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19790 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
197a0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
197b0 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
197c0 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20  ry index .**    
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
197f0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
19800 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
19810 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
19820 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
19830 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
19840 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
19850 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
19860 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
19870 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
19880 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
19890 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
198a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
198b0 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
198c0 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
198d0 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
198e0 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
198f0 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
19900 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
19910 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
19920 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
19930 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
19940 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
19950 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
19980 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
19990 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
199a0 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
199b0 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
199c0 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
199d0 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
199e0 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
199f0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
19a00 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
19a10 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
19a20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
19a30 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
19a40 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
19a50 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
19a60 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
19a70 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
19a80 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
19a90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19aa0 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
19ab0 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
19ac0 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
19ad0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
19b00 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
19b10 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
19b20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19b30 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
19b40 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
19b50 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
19b60 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
19b80 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
19b90 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
19ba0 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
19bb0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
19bc0 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
19bd0 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
19be0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
19bf0 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
19c20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
19c30 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
19c40 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  rm. .**         
19c50 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
19c60 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
19c70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
19c80 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
19cb0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
19cc0 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
19cd0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19ce0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
19cf0 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
19d00 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
19d10 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
19d20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19d30 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
19d40 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
19d50 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
19d60 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19d80 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
19d90 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
19da0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
19dd0 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
19de0 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
19df0 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
19e00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19e10 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
19e20 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
19e30 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
19e40 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
19e50 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
19e60 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19e80 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
19e90 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
19ea0 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
19eb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19ec0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
19ed0 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
19ee0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
19ef0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
19f20 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
19f30 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
19f40 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
19f70 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
19f80 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
19f90 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
19fa0 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
19fb0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19fc0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
19fd0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
19fe0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
19ff0 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1a000 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1a010 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a020 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1a030 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1a040 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1a050 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1a060 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1a070 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1a080 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1a090 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1a0c0 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1a0d0 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1a0e0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1a0f0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1a100 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1a110 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1a120 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1a130 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1a140 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1a150 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1a180 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1a190 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1a1a0 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1a1d0 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1a1e0 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1a1f0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1a200 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1a210 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1a220 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1a230 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1a250 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1a260 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1a270 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1a280 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1a2a0 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1a2b0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1a2c0 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1a2d0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1a2e0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1a2f0 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1a320 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1a330 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1a340 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a360 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1a370 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1a380 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1a390 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1a3a0 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1a3b0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1a3c0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1a3d0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1a3e0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1a3f0 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1a400 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1a410 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1a420 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1a430 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1a440 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1a450 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1a460 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1a470 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1a480 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1a490 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1a4a0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1a4b0 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1a4c0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1a4d0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1a4e0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1a4f0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1a500 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1a510 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1a520 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1a530 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1a540 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1a550 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1a560 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1a570 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a580 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1a590 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1a5a0 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1a5b0 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1a5c0 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1a5d0 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1a5e0 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1a5f0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1a600 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1a610 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1a620 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1a630 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1a640 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1a650 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1a660 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1a670 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1a680 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1a690 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1a6a0 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1a6b0 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1a6c0 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1a6d0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1a6e0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1a6f0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1a700 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1a710 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1a720 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1a730 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1a740 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1a750 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1a760 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1a770 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1a780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a790 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1a7a0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1a7b0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1a7c0 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1a7d0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1a7e0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1a7f0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1a800 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1a810 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1a820 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1a830 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1a840 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1a850 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1a860 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1a870 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1a880 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1a890 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
1a8a0 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
1a8b0 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
1a8c0 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
1a8d0 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
1a8e0 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1a8f0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1a900 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1a910 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1a920 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1a930 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1a940 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1a950 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1a960 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1a970 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1a980 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1a990 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1a9a0 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
1a9b0 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1a9c0 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1a9d0 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1a9e0 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1a9f0 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1aa00 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1aa10 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1aa20 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1aa30 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1aa40 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
1aa50 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1aa60 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1aa70 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1aa80 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1aa90 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1aaa0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1aab0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1aac0 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1aad0 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1aae0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1aaf0 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1ab00 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1ab10 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1ab20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1ab30 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1ab40 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
1ab50 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1ab60 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1ab70 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1ab80 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1ab90 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1aba0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1abb0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1abc0 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1abd0 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1abe0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1abf0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1ac00 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1ac10 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1ac20 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1ac30 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1ac40 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1ac50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1ac60 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1ac70 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1ac80 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1ac90 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1aca0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1acb0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1acc0 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1acd0 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1ace0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1acf0 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1ad00 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1ad10 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1ad20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
1ad30 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
1ad40 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
1ad50 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
1ad60 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1ad70 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
1ad80 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1ad90 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1ada0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1adb0 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1adc0 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
1add0 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1ade0 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1adf0 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1ae00 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1ae10 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1ae20 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1ae30 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1ae40 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1ae50 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1ae60 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1ae70 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1ae80 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1ae90 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1aea0 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1aeb0 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1aec0 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1aed0 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1aee0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1aef0 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1af00 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1af10 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1af20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1af30 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1af40 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1af50 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1af60 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1af70 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1af80 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1af90 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1afa0 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1afb0 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1afc0 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1afd0 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1afe0 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1aff0 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1b000 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1b010 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1b020 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1b030 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1b040 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1b050 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1b060 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1b070 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
1b080 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1b090 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1b0a0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1b0b0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1b0c0 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1b0d0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1b0e0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1b0f0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1b100 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1b110 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1b120 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1b130 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1b140 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1b150 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1b160 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1b170 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1b180 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1b190 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1b1a0 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1b1b0 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1b1c0 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1b1d0 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1b1e0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1b1f0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1b200 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1b210 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1b220 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1b230 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1b240 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1b250 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1b260 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1b270 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1b280 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1b290 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1b2a0 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1b2b0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1b2c0 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1b2d0 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1b2e0 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1b2f0 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1b300 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1b310 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1b320 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1b330 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1b340 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1b350 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1b360 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1b370 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1b380 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1b390 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1b3a0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1b3b0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1b3c0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1b3d0 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1b3e0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1b3f0 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1b400 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1b410 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1b420 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1b430 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1b440 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1b450 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1b460 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1b470 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1b480 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1b490 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1b4a0 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1b4b0 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1b4c0 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1b4d0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1b4e0 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1b4f0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1b500 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1b510 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1b520 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1b530 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1b540 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1b550 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1b560 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1b570 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1b580 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1b590 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1b5a0 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1b5b0 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1b5c0 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1b5d0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1b5e0 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1b5f0 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1b600 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1b610 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1b620 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1b630 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1b640 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1b650 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1b660 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1b670 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1b680 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1b690 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1b6a0 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1b6b0 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1b6c0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1b6d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1b6e0 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1b6f0 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1b700 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1b710 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1b720 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20   .** feature is 
1b730 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1b740 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1b750 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1b760 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1b770 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1b780 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1b790 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1b7a0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1b7b0 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1b7c0 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1b7d0 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1b7e0 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1b7f0 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1b800 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1b810 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1b820 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1b830 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1b840 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1b850 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1b860 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1b870 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1b880 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1b890 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1b8a0 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1b8b0 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1b8c0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1b8d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1b8e0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1b8f0 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1b900 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1b910 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1b920 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1b930 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1b940 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1b950 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1b960 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1b970 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1b980 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1b990 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1b9a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b9b0 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1b9c0 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1b9d0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1b9e0 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1b9f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ba00 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1ba10 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1ba20 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1ba30 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1ba40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1ba50 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1ba60 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1ba70 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1ba80 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1ba90 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1baa0 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1bab0 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1bac0 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1bad0 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1bae0 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1baf0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1bb00 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1bb10 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1bb20 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1bb30 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1bb40 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e  onstants */.  in
1bb50 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
1bb60 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
1bb70 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
1bb80 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
1bb90 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1bba0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1bbb0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1bbc0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1bbd0 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1bbe0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1bbf0 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1bc00 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1bc10 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1bc20 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1bc30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1bc40 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1bc50 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1bc60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1bc70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1bc80 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1bc90 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1bca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bcb0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1bcc0 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1bcd0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
1bce0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bcf0 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
1bd00 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1bd10 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
1bd20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1bd30 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
1bd40 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
1bd50 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
1bd60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bd70 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
1bd80 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1bd90 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65  ] */.  int iFixe
1bda0 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dOp;        /* N
1bdb0 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70  ever back out op
1bdc0 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31  codes iFixedOp-1
1bdd0 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20   or earlier */. 
1bde0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1bdf0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1be00 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1be10 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1be20 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1be30 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20 20   iPartIdxTab;   
1be40 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65    /* Table corre
1be50 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61  sponding to a pa
1be60 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20  rtial index */. 
1be70 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
1be80 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
1be90 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
1bea0 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
1beb0 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
1bec0 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
1bed0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1bee0 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
1bef0 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
1bf00 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  ru values */.  i
1bf10 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
1bf20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bf30 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a   labels used */.
1bf40 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20    int *aLabel;  
1bf50 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
1bf60 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65  to hold the labe
1bf70 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  ls */.  struct y
1bf80 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
1bf90 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
1bfa0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
1bfb0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
1bfc0 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20     i16 iColumn; 
1bfd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1bfe0 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
1bff0 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
1c000 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
1c010 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
1c020 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
1c030 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
1c040 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
1c050 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1c060 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
1c070 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
1c080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1c090 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
1c0a0 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
1c0b0 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
1c0c0 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
1c0d0 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
1c0e0 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
1c0f0 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
1c100 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
1c110 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
1c120 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
1c130 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
1c140 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
1c150 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  try */.  ExprLis
1c160 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1c170 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1c180 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1c190 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1c1a0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1c1b0 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1c1c0 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1c1d0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1c1e0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1c1f0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1c200 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1c210 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1c220 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1c230 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1c240 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1c250 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1c260 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75    int cookieValu
1c270 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  e[SQLITE_MAX_ATT
1c280 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61  ACHED+2];  /* Va
1c290 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20  lues of cookies 
1c2a0 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69  to verify */.  i
1c2b0 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
1c2c0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1c2d0 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
1c2e0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
1c2f0 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
1c300 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
1c310 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1c320 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
1c330 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
1c340 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
1c350 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
1c360 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
1c370 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
1c380 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
1c390 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1c3a0 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74  CE_ENABLED.  int
1c3b0 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
1c3c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
1c3d0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1c3e0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1c3f0 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20  SelectIndent;   
1c400 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e  /* How far to in
1c410 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45  dent SELECTTRACE
1c420 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  () output */.#en
1c430 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1c440 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
1c450 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
1c460 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
1c470 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
1c480 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
1c490 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
1c4a0 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
1c4b0 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
1c4c0 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
1c4d0 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
1c4e0 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
1c4f0 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
1c500 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
1c510 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
1c520 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  nters */..  /* I
1c530 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1c540 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69  while coding tri
1c550 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a  gger programs. *
1c560 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
1c570 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
1c580 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
1c590 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
1c5a0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
1c5b0 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
1c5c0 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
1c5d0 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1c5e0 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
1c5f0 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
1c600 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
1c610 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1c620 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
1c630 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
1c640 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1c650 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1c660 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1c670 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1c680 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1c690 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1c6a0 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1c6b0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1c6c0 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1c6d0 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1c6e0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1c6f0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1c700 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1c710 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1c720 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1c730 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1c740 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1c750 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1c760 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1c770 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1c780 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1c790 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1c7a0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1c7b0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1c7c0 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1c7d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c7e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c7f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
1c810 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
1c820 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
1c830 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
1c840 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
1c850 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
1c860 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
1c870 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
1c880 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
1c890 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
1c8a0 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
1c8b0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e  offsetof(Parse,n
1c8c0 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72  Var) so the nVar
1c8d0 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
1c8e0 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20  he first field. 
1c8f0 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72   ** in the recur
1c900 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
1c910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c950 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20  *******/..  int 
1c960 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
1c970 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c980 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
1c990 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
1c9a0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1c9b0 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
1c9c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c9d0 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c   of available sl
1c9e0 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a  ots in azVar[] *
1c9f0 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72  /.  u8 iPkSortOr
1ca00 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
1ca10 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72   ASC or DESC for
1ca20 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1ca30 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72   KEY */.  u8 bFr
1ca40 65 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  eeWith;         
1ca50 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
1ca60 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66  With should be f
1ca70 72 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72  reed with parser
1ca80 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
1ca90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1caa0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
1cab0 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
1cac0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
1cad0 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
1cae0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1caf0 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
1cb00 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
1cb10 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
1cb20 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
1cb30 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
1cb40 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
1cb50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cb60 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
1cb70 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
1cb80 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
1cb90 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
1cba0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1cbb0 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
1cbc0 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1cbd0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
1cbe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1cbf0 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
1cc00 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
1cc10 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
1cc20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1cc30 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
1cc40 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
1cc50 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
1cc60 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
1cc70 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1cc80 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
1cc90 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
1cca0 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
1ccb0 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
1ccc0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
1ccd0 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
1cce0 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
1ccf0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
1cd00 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
1cd10 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
1cd20 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
1cd30 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
1cd40 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
1cd50 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
1cd60 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  )) */.  const ch
1cd70 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20  ar *zTail;      
1cd80 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
1cd90 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  t past the last 
1cda0 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64  semicolon parsed
1cdb0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
1cdc0 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  wTable;         
1cdd0 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
1cde0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1cdf0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1ce00 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
1ce10 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
1ce20 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
1ce30 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
1ce40 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
1ce50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
1ce60 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
1ce70 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
1ce80 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
1ce90 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  backs */.  Token
1cea0 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
1ceb0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
1cec0 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
1ced0 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
1cee0 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  e */.  Token sLa
1cef0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  stToken;        
1cf00 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
1cf10 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  en parsed */.#if
1cf20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1cf30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1cf40 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
1cf50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
1cf60 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
1cf70 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
1cf80 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
1cf90 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
1cfa0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
1cfb0 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
1cfc0 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
1cfd0 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
1cfe0 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
1cff0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
1d000 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
1d010 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
1d020 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
1d030 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
1d040 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
1d050 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
1d060 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
1d070 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1d080 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
1d090 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
1d0a0 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  LL */.};../*.** 
1d0b0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
1d0c0 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
1d0d0 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
1d0e0 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
1d0f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1d100 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1d110 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
1d120 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
1d130 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
1d140 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
1d150 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
1d160 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
1d170 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1d180 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1d190 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
1d1a0 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
1d1b0 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
1d1c0 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
1d1d0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1d1e0 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
1d1f0 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
1d200 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
1d210 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
1d220 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1d230 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
1d240 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
1d250 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
1d260 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
1d270 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1d280 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
1d290 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
1d2a0 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
1d2b0 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
1d2c0 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
1d2d0 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  pcodes..**.** No
1d2e0 74 65 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  te that the valu
1d2f0 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50 20 61 6e  es for ISNOOP an
1d300 64 20 4c 45 4e 47 54 48 41 52 47 20 61 72 65 20  d LENGTHARG are 
1d310 74 68 65 20 73 61 6d 65 2e 20 20 42 75 74 20 61  the same.  But a
1d320 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62 69 74 73  s .** those bits
1d330 20 61 72 65 20 6e 65 76 65 72 20 75 73 65 64 20   are never used 
1d340 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f 70 63 6f  on the same opco
1d350 64 65 2c 20 74 68 65 20 6f 76 65 72 6c 61 70 20  de, the overlap 
1d360 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a 2a 2f 0a  is harmless..*/.
1d370 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
1d380 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
1d390 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
1d3a0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1d3b0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
1d3c0 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
1d3d0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d3e0 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
1d3f0 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
1d400 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d410 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1d420 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1d430 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1d440 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1d450 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1d460 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1d470 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1d480 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1d490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d4a0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1d4b0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1d4c0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1d4d0 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1d4e0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1d4f0 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1d500 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1d510 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1d520 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1d530 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e  efine OPFLAG_ISN
1d540 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20  OOP        0x40 
1d550 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20     /* OP_Delete 
1d560 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d  does pre-update-
1d570 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  hook only */.#de
1d580 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
1d590 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
1d5a0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1d5b0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
1d5c0 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
1d5d0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
1d5e0 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
1d5f0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1d600 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
1d610 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1d620 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
1d630 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d640 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
1d650 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
1d660 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d670 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20  G_SEEKEQ        
1d680 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x02    /* OP_Op
1d690 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73  en** cursor uses
1d6a0 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f   EQ seek only */
1d6b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d6c0 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1d6d0 30 34 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  04    /* P2 to O
1d6e0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1d6f0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1d700 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d710 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1d720 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1d730 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1d740 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1d750 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1d760 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1d770 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1d780 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1d790 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1d7a0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1d7b0 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1d7c0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1d7d0 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1d7e0 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1d7f0 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1d800 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1d810 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1d820 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1d830 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1d840 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1d850 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1d860 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1d870 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1d880 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1d890 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1d8a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1d8b0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1d8c0 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1d8d0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1d8e0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1d8f0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d900 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1d910 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1d920 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1d930 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1d940 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1d950 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1d960 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1d970 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1d980 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1d990 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1d9a0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1d9b0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1d9c0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1d9d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1d9e0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1d9f0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1da00 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1da10 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1da20 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1da30 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1da40 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1da50 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1da80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1da90 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1daa0 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1dab0 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1dac0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dae0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1daf0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1db00 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1db10 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1db20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1db30 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1db40 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1db50 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1db60 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1db70 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1db80 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1db90 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1dba0 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1dbb0 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1dbc0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1dbd0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1dbe0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1dbf0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1dc20 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1dc30 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1dc40 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1dc50 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1dc60 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1dc70 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1dc80 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1dc90 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1dca0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1dcb0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1dcc0 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1dcd0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1dce0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1dcf0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1dd00 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1dd10 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1dd20 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1dd30 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1dd40 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1dd50 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1dd60 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1dd70 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1dd80 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1dd90 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1dda0 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1ddb0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1ddc0 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1ddd0 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1dde0 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1ddf0 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1de00 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1de10 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1de20 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1de30 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1de40 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1de50 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1de60 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1de70 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1de80 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1de90 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1dea0 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1deb0 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1dec0 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1ded0 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1dee0 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1def0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1df00 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1df10 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1df20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1df30 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1df40 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1df50 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1df60 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1df70 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1df80 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1df90 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1dfa0 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1dfb0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1dfc0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1dfd0 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1dfe0 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1dff0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1e000 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1e010 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1e020 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1e030 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1e040 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1e050 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1e060 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1e070 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1e080 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1e090 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1e0a0 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1e0b0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1e0c0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1e0d0 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1e0e0 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1e0f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1e100 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1e110 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1e120 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1e130 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1e140 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1e150 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1e160 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1e170 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1e180 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1e190 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1e1a0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1e1b0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1e1c0 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
1e1d0 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
1e1e0 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
1e1f0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1e200 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
1e210 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1e220 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1e230 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
1e240 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
1e250 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
1e260 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
1e270 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1e280 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1e290 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
1e2a0 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a  s>) VALUES ... .
1e2b0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1e2c0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
1e2d0 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
1e2e0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
1e2f0 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
1e300 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
1e310 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
1e320 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61  K_DELETE). * zTa
1e330 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
1e340 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1e350 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1e360 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1e370 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1e380 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1e390 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1e3a0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1e3b0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1e3c0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1e3d0 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1e3e0 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
1e3f0 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1e400 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1e410 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1e420 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1e430 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1e440 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
1e450 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1e460 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1e470 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1e480 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1e490 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1e4a0 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
1e4b0 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
1e4c0 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
1e4d0 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e4f0 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
1e500 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
1e510 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
1e520 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
1e530 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
1e540 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
1e550 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
1e560 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1e570 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1e580 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1e590 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
1e5a0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
1e5b0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
1e5c0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
1e5d0 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
1e5e0 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
1e5f0 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
1e600 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
1e610 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
1e620 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1e630 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
1e640 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
1e650 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
1e660 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1e670 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
1e680 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1e690 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1e6a0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1e6b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1e6c0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1e6d0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1e6e0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1e6f0 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1e700 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1e710 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1e720 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1e730 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1e740 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1e750 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1e760 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1e770 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1e780 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1e790 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1e7a0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1e7b0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1e7c0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1e7d0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1e7e0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1e7f0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1e800 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1e810 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1e820 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1e830 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1e840 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1e850 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1e860 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1e870 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1e880 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1e890 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1e8a0 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1e8b0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1e8c0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1e8d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1e8e0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1e8f0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1e900 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1e910 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1e920 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1e930 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1e940 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1e950 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1e960 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1e970 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1e980 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1e990 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1e9a0 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1e9b0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1e9c0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1e9d0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1e9e0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1e9f0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1ea00 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1ea10 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1ea20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1ea30 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1ea40 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1ea50 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1ea60 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1ea70 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1ea80 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1ea90 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1eaa0 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1eab0 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1eac0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1ead0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1eae0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1eaf0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1eb00 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1eb10 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1eb20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1eb30 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1eb40 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1eb50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1eb60 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1eb70 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1eb80 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1eb90 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1eba0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1ebb0 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1ebc0 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1ebd0 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1ebe0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1ebf0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1ec00 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1ec10 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1ec20 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1ec30 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1ec40 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1ec50 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1ec60 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1ec70 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
1ec80 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
1ec90 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61  sage */.  u8   a
1eca0 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1ecb0 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1ecc0 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1ecd0 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  BIG */.};.#defin
1ece0 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
1ecf0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
1ed00 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
1ed10 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
1ed20 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
1ed30 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
1ed40 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
1ed50 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
1ed60 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
1ed70 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
1ed80 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
1ed90 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
1eda0 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
1edb0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1edc0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
1edd0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
1ede0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
1edf0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
1ee00 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1ee10 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1ee20 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1ee30 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
1ee40 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
1ee50 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
1ee60 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
1ee70 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1ee80 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
1ee90 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
1eea0 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
1eeb0 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
1eec0 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
1eed0 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
1eee0 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
1eef0 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
1ef00 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
1ef10 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
1ef20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
1ef30 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1ef40 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
1ef50 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
1ef60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ef70 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1ef80 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
1ef90 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
1efa0 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1efc0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
1efd0 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
1efe0 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
1eff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f000 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1f010 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
1f020 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
1f030 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
1f040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1f050 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
1f060 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
1f070 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
1f080 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
1f090 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1f0a0 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
1f0b0 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
1f0c0 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
1f0d0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1f0e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1f0f0 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
1f100 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
1f110 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
1f120 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1f130 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
1f140 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
1f150 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1f180 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1f190 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1f1a0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1f1b0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1f1c0 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1f1d0 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1f1e0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1f1f0 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1f200 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1f210 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1f220 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1f230 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1f240 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1f250 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1f260 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1f270 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1f280 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1f290 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1f2a0 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1f2b0 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1f2c0 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f2e0 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1f2f0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1f300 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1f310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1f320 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1f330 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1f340 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1f350 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1f360 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1f370 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
1f380 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
1f390 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1f3a0 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
1f3b0 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
1f3c0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1f3d0 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
1f3e0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
1f3f0 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
1f400 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1f410 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1f420 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1f430 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1f440 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f460 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1f470 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1f480 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1f490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f4a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f4b0 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1f4c0 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1f4d0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1f4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1f4f0 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1f500 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1f530 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1f540 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1f550 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f570 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1f580 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1f590 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1f5a0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1f5b0 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1f5c0 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1f5d0 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1f5e0 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1f5f0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1f600 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1f610 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1f620 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
1f630 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
1f640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1f650 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
1f660 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
1f670 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1f680 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1f690 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1f6a0 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1f6b0 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1f6c0 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1f6d0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1f6e0 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f700 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1f710 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1f720 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1f730 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1f760 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1f770 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1f780 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1f7b0 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1f7c0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1f7d0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f7f0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1f800 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1f810 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1f820 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1f830 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f840 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1f850 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1f860 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1f870 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1f880 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f890 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1f8a0 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
1f8b0 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1f8c0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1f8d0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1f8e0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1f8f0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1f900 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1f910 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1f920 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1f930 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1f940 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f960 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1f970 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
1f980 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1f990 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1f9a0 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1f9b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1f9c0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1f9d0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1f9e0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1f9f0 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1fa00 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
1fa10 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
1fa20 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
1fa30 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
1fa40 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
1fa50 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
1fa60 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
1fa70 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
1fa80 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
1fa90 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
1faa0 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
1fab0 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
1fac0 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
1fad0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1fae0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
1faf0 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fb20 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
1fb30 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1fb40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
1fb50 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
1fb60 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
1fb70 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
1fb80 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
1fb90 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
1fba0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
1fbb0 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fbd0 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
1fbe0 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
1fbf0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
1fc00 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
1fc10 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
1fc20 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
1fc30 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
1fc40 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
1fc50 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
1fc60 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1fc70 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
1fc80 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1fc90 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
1fca0 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
1fcb0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
1fcc0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
1fcd0 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
1fce0 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
1fcf0 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
1fd00 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
1fd10 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
1fd20 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
1fd30 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
1fd40 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
1fd50 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
1fd60 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
1fd70 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
1fd80 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
1fd90 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
1fda0 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
1fdb0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1fdc0 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
1fdd0 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
1fde0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
1fdf0 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
1fe00 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
1fe10 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
1fe20 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1fe30 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
1fe40 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
1fe50 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
1fe60 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
1fe70 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1fe80 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1fe90 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1fea0 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1feb0 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1fec0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1fed0 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1fee0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1fef0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1ff00 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1ff10 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1ff20 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1ff30 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1ff40 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
1ff50 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
1ff60 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
1ff70 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
1ff80 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1ff90 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1ffa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ffc0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1ffd0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1ffe0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
20010 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
20020 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
20050 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
20060 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20090 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
200a0 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
200b0 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
200c0 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
200e0 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
200f0 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20  */.    int n;   
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
20130 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20160 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
20170 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
20180 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
201b0 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
201c0 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
201d0 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
201e0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
201f0 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
20200 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  nces */.  } u;.}
20210 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
20220 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
20230 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
20240 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
20250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
20260 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
20270 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
20280 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
20290 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
202a0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
202b0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
202c0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
202d0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
202e0 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
202f0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
20300 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  );../*.** Return
20310 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
20320 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
20330 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
20340 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
20350 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
20360 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
20370 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
20380 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
20390 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
203a0 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
203b0 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
203c0 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
203d0 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
203e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
203f0 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
20400 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
20410 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
20420 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
20430 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
20440 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
20450 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
20460 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
20470 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
20480 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
20490 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
204a0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
204b0 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
204c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
204d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
204e0 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
204f0 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
20500 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20520 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
20530 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
20540 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
20550 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
20560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
20570 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
20580 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
20590 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
205a0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
205b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
205c0 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
205d0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
205e0 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
205f0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
20600 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
20610 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
20620 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
20630 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
20640 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
20650 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
20660 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
20670 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20 20  har *zErr;      
20680 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
20690 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
206a0 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
206b0 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
206c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
206d0 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
206e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
206f0 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
20700 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
20710 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
20720 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
20730 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
20740 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
20750 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
20760 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
20770 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
20780 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
20790 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
207a0 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
207b0 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
207c0 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
207d0 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
207e0 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
207f0 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
20800 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
20810 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
20820 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
20830 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
20840 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
20850 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
20860 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
20870 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
20880 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
20890 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
208a0 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
208b0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
208c0 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
208d0 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
208f0 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
20900 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20920 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
20930 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
20940 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
20950 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
20960 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20990 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
209a0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
209b0 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
209c0 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
209d0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
209e0 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
209f0 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
20a00 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
20a10 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
20a20 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
20a30 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
20a40 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
20a50 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
20a60 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
20a70 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
20a80 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
20a90 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
20aa0 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
20ab0 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
20ac0 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
20ad0 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
20ae0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
20af0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
20b00 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
20b10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
20b20 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
20b30 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
20b40 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
20b50 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
20b60 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
20b70 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
20b80 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
20b90 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
20ba0 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
20bb0 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
20bc0 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
20bd0 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
20be0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
20bf0 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
20c00 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
20c10 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
20c20 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
20c30 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
20c40 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
20c50 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
20c60 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
20c70 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
20c80 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
20c90 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
20ca0 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
20cb0 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
20cc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
20cd0 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
20ce0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
20cf0 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
20d00 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
20d10 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
20d20 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
20d30 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
20d40 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
20d50 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
20d60 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
20d70 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
20d80 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
20d90 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
20da0 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
20db0 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
20dc0 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
20dd0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
20de0 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
20df0 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
20e00 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
20e10 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
20e20 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
20e30 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
20e40 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
20e50 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
20e60 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
20e70 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
20e80 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
20e90 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
20ea0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
20eb0 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
20ec0 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
20ed0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
20ee0 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
20ef0 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
20f00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
20f10 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
20f20 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
20f30 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
20f40 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20f50 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
20f60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20f70 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
20f80 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20f90 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20fa0 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
20fb0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
20fc0 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
20fd0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20fe0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
20ff0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21000 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
21010 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
21020 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21030 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
21040 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
21050 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
21060 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
21070 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
21080 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21090 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
210a0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
210b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
210c0 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
210d0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
210e0 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
210f0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
21100 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
21110 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
21120 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
21130 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
21140 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
21150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21160 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
21170 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
21180 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
21190 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
211a0 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
211b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
211c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
211d0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
211e0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
211f0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
21200 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
21210 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
21220 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21230 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
21240 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
21250 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
21260 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
21270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
21280 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
21290 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
212a0 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23 69  r)(x)).#endif.#i
212b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
212c0 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
212d0 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65  DIAGS.int sqlite
212e0 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23  3IsIdChar(u8);.#
212f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
21300 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
21310 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65  rototypes.*/.#de
21320 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49  fine sqlite3StrI
21330 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69  Cmp sqlite3_stri
21340 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  cmp.int sqlite3S
21350 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
21360 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
21370 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
21380 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
21390 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
213a0 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
213b0 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
213c0 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
213d0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
213e0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
213f0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
21400 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
21410 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
21420 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
21430 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
21440 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
21450 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
21460 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
21470 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
21480 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
21490 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
214a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
214b0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
214c0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
214d0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
214e0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
214f0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
21500 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
21510 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
21520 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
21530 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
21540 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
21550 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
21560 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
21570 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
21580 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
21590 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
215a0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
215b0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
215c0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
215d0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
215e0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
215f0 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
21600 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
21610 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
21620 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
21630 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
21640 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53  void);.#ifndef S
21650 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
21660 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c  IN_TEST.void sql
21670 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
21680 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
21690 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
216a0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
216b0 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
216c0 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
216d0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
216e0 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
216f0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
21700 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
21710 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
21720 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
21730 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
21740 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
21750 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
21760 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
21770 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
21780 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
21790 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
217a0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
217b0 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
217c0 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
217d0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
217e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
217f0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
21800 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
21810 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21820 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
21830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
21840 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
21850 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
21860 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
21870 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
21880 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
21890 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
218a0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
218b0 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23  ee(D,P)       .#
218c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
218d0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
218e0 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
218f0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
21900 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21910 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
21920 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
21930 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
21940 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21950 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
21960 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
21970 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
21980 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21990 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
219a0 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
219b0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
219c0 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
219d0 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
219e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
219f0 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
21a00 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
21a10 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
21a20 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
21a30 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
21a40 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
21a50 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
21a60 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
21a70 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
21a80 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
21a90 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
21aa0 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
21ab0 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
21ac0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
21ad0 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
21ae0 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
21af0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
21b00 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
21b10 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
21b20 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 73  void);.#endif..s
21b30 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
21b40 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
21b50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21b60 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
21b70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21b80 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
21b90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21ba0 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
21bb0 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63  t, int);../* Acc
21bc0 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
21bd0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
21be0 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
21bf0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
21c00 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
21c10 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
21c20 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
21c30 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
21c40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21c50 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
21c60 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
21c70 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
21c80 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
21c90 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
21ca0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
21cb0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
21cc0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
21cd0 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
21ce0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
21cf0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
21d00 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
21d10 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
21d20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
21d30 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
21d40 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
21d50 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
21d60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21d70 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
21d80 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
21d90 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
21da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21db0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
21dc0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
21dd0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
21de0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
21df0 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
21e00 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ues */.};..#defi
21e10 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
21e20 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23  _INTERNAL 0x01.#
21e30 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21e40 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
21e50 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  02.void sqlite3V
21e60 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
21e70 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
21e80 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
21e90 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
21ea0 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
21eb0 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
21ec0 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
21ed0 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
21ee0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
21ef0 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
21f00 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
21f10 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21f20 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
21f30 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21f40 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21f50 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
21f60 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73  _TRACE).  void s
21f70 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
21f80 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
21f90 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
21fa0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
21fb0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
21fc0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
21fd0 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
21fe0 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
21ff0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
22000 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
22010 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65  TreeViewExpr(Tre
22020 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
22030 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  pr*, u8);.  void
22040 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
22050 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
22060 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
22070 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
22080 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
22090 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
220a0 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
220b0 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
220c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  );.#endif...void
220d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
220e0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
220f0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
22100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22110 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
22120 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
22130 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
22140 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e  quote(char*);.in
22150 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
22160 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
22170 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
22180 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
22190 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
221a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
221b0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
221c0 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
221d0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
221e0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
221f0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22200 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
22210 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
22220 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
22230 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
22240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
22250 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
22260 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
22270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
22280 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
22290 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  arse*);.Expr *sq
222a0 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
222b0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
222c0 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
222d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
222e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
222f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
22300 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
22310 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
22320 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
22330 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
22340 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
22350 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
22360 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
22370 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
22380 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
22390 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
223a0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
223b0 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
223c0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
223d0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
223e0 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
223f0 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
22400 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22410 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
22420 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
22430 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
22440 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
22450 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
22460 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
22470 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
22480 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
22490 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
224a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
224b0 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
224c0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
224d0 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
224e0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
224f0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
22500 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
22510 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22520 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
22530 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
22540 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
22550 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
22560 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
22570 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
22580 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
22590 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
225a0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
225b0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
225c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
225d0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
225e0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
225f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22600 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
22610 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
22620 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
22630 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
22640 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
22650 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
22660 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
22670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22680 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
22690 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
226a0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
226b0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
226c0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
226d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
226e0 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
226f0 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
22700 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
22710 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
22720 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
22730 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
22740 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
22750 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
22760 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
22770 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
22780 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
22790 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
227a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
227b0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
227c0 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
227d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
227e0 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
227f0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
22800 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22810 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
22820 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
22830 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
22840 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
22850 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
22860 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22870 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
22880 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
22890 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
228a0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
228b0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
228c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
228d0 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
228e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
228f0 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
22900 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
22910 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
22920 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
22930 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
22940 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
22950 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
22960 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
22970 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
22980 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
22990 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
229a0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
229b0 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
229c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
229d0 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
229e0 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
229f0 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
22a00 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
22a10 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
22a20 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
22a30 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
22a40 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
22a50 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
22a60 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
22a70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
22a80 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
22a90 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
22aa0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
22ab0 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
22ac0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
22ad0 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
22ae0 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
22af0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
22b00 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
22b10 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
22b20 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
22b30 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
22b40 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
22b50 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
22b60 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
22b70 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
22b80 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
22b90 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
22ba0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
22bb0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
22bc0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
22bd0 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
22be0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
22bf0 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
22c00 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
22c10 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
22c20 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
22c30 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
22c40 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
22c50 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
22c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
22c70 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
22c80 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
22c90 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  en*,Select*,int,
22ca0 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
22cb0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22cc0 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
22cd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
22ce0 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
22cf0 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
22d00 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
22d10 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
22d20 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22d30 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
22d40 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
22d50 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
22d60 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
22d70 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
22d80 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
22d90 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
22da0 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
22db0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22dc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22dd0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
22de0 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
22df0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
22e00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
22e10 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
22e20 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
22e30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22e40 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
22e50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
22e60 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
22e70 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
22e80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22e90 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
22ea0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
22eb0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
22ec0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22ed0 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
22ee0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
22ef0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
22f00 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22f10 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
22f20 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
22f30 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
22f40 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
22f50 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
22f60 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
22f70 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
22f80 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
22f90 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
22fa0 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
22fb0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22fc0 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
22fd0 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
22fe0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22ff0 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
23000 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
23010 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
23020 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
23030 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
23040 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
23050 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
23060 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
23070 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
23080 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
23090 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
230a0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
230e0 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
230f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23100 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
23110 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
23120 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69  t *, Token *);.i
23130 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
23140 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
23150 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
23160 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
23170 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
23180 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
23190 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
231a0 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
231b0 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
231c0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
231d0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
231e0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
231f0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23200 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
23210 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
23220 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
23230 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64  lite3AllocateInd
23240 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33  exObject(sqlite3
23250 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a  *,i16,int,char**
23260 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
23270 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
23280 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
23290 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
232a0 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
232b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
232c0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
232d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
232e0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
232f0 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
23300 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
23310 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
23320 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
23330 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
23340 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
23350 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
23360 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
23370 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
233a0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70  xprList*,u16,Exp
233b0 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
233c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
233d0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
233e0 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
233f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
23400 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
23410 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
23420 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
23430 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
23440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
23450 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
23460 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
23470 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
23480 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
23490 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
234a0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
234b0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
234c0 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
234d0 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
234e0 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
234f0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
23500 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
23510 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
23520 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23530 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
23540 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
23550 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
23560 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
23570 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
23580 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
23590 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
235a0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
235b0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
235c0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
235d0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
235e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
235f0 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
23600 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74  nfo*);.u64 sqlit
23610 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
23620 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
23630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23640 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
23650 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
23660 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
23670 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
23680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
23690 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
236a0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
236b0 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
236c0 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
236d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
236e0 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
236f0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
23700 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
23710 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
23720 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
23730 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
23740 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
23750 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
23760 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
23770 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
23780 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
23790 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
237a0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
237b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
237c0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
237d0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
237e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
237f0 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
23800 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
23810 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23820 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
23830 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23840 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
23850 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
23860 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
23870 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
23880 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23890 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
238a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
238b0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
238c0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
238d0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
238e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
238f0 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
23900 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
23910 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
23920 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
23930 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
23940 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
23950 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
23960 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
23970 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23980 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
23990 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
239a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
239b0 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
239c0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
239d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
239e0 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
239f0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
23a00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23a10 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
23a20 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
23a30 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
23a40 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
23a50 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
23a60 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
23a70 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
23a80 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
23a90 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
23aa0 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
23ab0 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76  stant terms */.v
23ac0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
23ad0 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
23ae0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
23af0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23b00 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
23b10 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
23b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23b30 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
23b40 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
23b50 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
23b60 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
23b70 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23b80 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
23b90 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
23ba0 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
23bb0 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63  se*,int isView,c
23bc0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
23bd0 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
23be0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
23bf0 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69  bleItem(Parse*,i
23c00 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74  nt isView,struct
23c10 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
23c20 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
23c30 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
23c40 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
23c50 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
23c60 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
23c70 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
23c80 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
23c90 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
23ca0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
23cb0 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
23cc0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
23cd0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
23ce0 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29  e3Vacuum(Parse*)
23cf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
23d00 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
23d10 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a  qlite3*);.char *
23d20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
23d30 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
23d40 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
23d50 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
23d60 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
23d70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23d80 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
23d90 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
23da0 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
23db0 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
23dc0 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72  Expr(Expr*, Expr
23dd0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23de0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
23df0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
23e00 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
23e10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23e20 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
23e30 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
23e40 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
23e50 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
23e60 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
23e70 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
23e80 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
23e90 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
23ea0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
23eb0 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71  TIN_TEST.void sq
23ec0 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
23ed0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
23ee0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
23ef0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
23f00 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23f10 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
23f20 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
23f30 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
23f40 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
23f50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23f60 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
23f70 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
23f80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
23f90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23fa0 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
23fb0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
23fc0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
23fd0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
23fe0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23ff0 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
24000 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
24010 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
24020 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
24030 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24040 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
24050 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
24060 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
24070 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
24080 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
24090 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
240a0 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
240b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
240c0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
240d0 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
240e0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
240f0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
24100 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
24110 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
24120 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
24130 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
24140 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
24150 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
24160 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
24170 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
24180 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24190 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
241a0 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
241b0 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
241c0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
241d0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
241e0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
241f0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
24200 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
24210 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
24220 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a  ,i16,u8,u8,u8);.
24230 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
24240 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
24250 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
24260 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24270 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
24280 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
24290 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
242a0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
242b0 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
242c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
242d0 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
242e0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
242f0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
24300 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
24310 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
24320 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
24330 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
24360 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
24370 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
24380 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
24390 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
243a0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
243b0 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
243c0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
243d0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
243e0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
243f0 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
24400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
24410 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
24420 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
24430 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24440 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
24450 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
24460 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
24470 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24480 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
24490 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
244a0 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
244b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
244c0 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
244d0 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
244e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
244f0 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
24500 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
24510 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
24520 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
24530 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
24540 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
24550 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
24560 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
24570 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
24580 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
24590 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
245a0 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
245b0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
245c0 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
245d0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
245e0 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
245f0 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
24600 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54  nt);.#if SELECTT
24610 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69  RACE_ENABLED.voi
24620 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  d sqlite3SelectS
24630 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63  etName(Select*,c
24640 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
24650 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24660 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
24670 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
24680 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
24690 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
246a0 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
246b0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
246c0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
246d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
246e0 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
246f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24700 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
24710 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
24720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24730 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
24740 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
24750 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
24760 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
24770 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
24780 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
24790 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
247a0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
247b0 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
247c0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
247d0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
247e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
247f0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
24800 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
24810 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24820 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
24830 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
24840 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
24850 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
24860 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
24870 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24880 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
24890 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
248a0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
248b0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
248c0 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
248d0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
24900 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
24910 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
24920 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
24930 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
24940 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
24950 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
24960 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
24970 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
24980 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
24990 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
249a0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
249b0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
249c0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
249d0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
249e0 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
249f0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
24a00 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
24a10 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
24a20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
24a30 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
24a40 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
24a50 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
24a60 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
24a90 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
24aa0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
24ab0 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
24ac0 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
24ad0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
24ae0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
24af0 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
24b00 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
24b10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
24b20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
24b30 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
24b40 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
24b50 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
24b60 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
24b70 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
24b80 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
24b90 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
24ba0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
24bb0 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
24bc0 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
24bd0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
24be0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c00 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
24c10 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
24c20 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
24c30 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
24c40 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
24c50 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
24c60 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
24c70 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
24c80 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
24c90 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
24ca0 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
24cb0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
24cc0 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
24cd0 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
24ce0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
24cf0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
24d00 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
24d10 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
24d20 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
24d30 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
24d40 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
24d50 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
24d60 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
24d70 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
24d80 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
24d90 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
24da0 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73  evel : (p)).#els
24db0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24dc0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
24dd0 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
24de0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
24df0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
24e00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24e10 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
24e20 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
24e30 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
24e40 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
24e50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24e60 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
24e70 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
24e80 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
24e90 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
24ea0 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
24eb0 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
24ec0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
24ed0 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
24ee0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
24ef0 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
24f00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
24f10 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
24f20 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
24f30 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
24f40 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
24f50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
24f60 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24f70 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
24f80 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
24f90 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
24fa0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
24fb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
24fc0 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
24fd0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
24fe0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24ff0 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
25000 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
25010 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
25020 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
25030 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
25040 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
25050 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
25060 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25070 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
25080 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
25090 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
250a0 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
250b0 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
250c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
250d0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
250e0 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
250f0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
25100 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
25110 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
25120 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
25130 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25140 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
25150 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
25160 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
25170 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
25180 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
25190 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
251a0 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
251b0 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
251c0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
251d0 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
251e0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
251f0 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
25200 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
25210 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
25220 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
25230 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
25240 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
25250 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
25260 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
25270 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
25280 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
25290 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
252a0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
252b0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
252c0 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
252d0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
252e0 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
252f0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
25300 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
25310 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
25320 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
25330 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
25340 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
25350 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
25360 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
25370 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
25380 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
25390 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
253a0 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
253b0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
253c0 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
253d0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
253e0 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
253f0 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
25400 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
25410 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
25420 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
25430 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
25440 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
25450 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
25460 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
25470 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
25480 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
25490 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
254a0 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
254b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
254c0 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
254d0 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
254e0 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
254f0 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74  #endif.u64 sqlit
25500 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
25510 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  gEst);../*.** Ro
25520 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
25530 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
25540 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
25550 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
25560 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
25570 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
25580 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
25590 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
255a0 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
255b0 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
255c0 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
255d0 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
255e0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
255f0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
25600 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
25610 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
25620 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
25630 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
25640 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
25650 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
25660 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
25670 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
25680 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
25690 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
256a0 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
256b0 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
256c0 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
256d0 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
256e0 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
256f0 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
25700 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
25710 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
25720 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
25730 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
25740 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
25750 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
25760 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
25770 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
25780 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
25790 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
257a0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
257b0 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
257c0 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
257d0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
257e0 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
257f0 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
25800 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
25810 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
25820 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
25830 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
25840 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
25850 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
25860 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
25870 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20  r(Vdbe *, Index 
25880 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25890 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
258a0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
258b0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
258c0 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
258d0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
258e0 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
258f0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
25900 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
25910 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
25920 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
25930 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
25940 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
25950 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
25960 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
25970 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
25980 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
25990 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
259a0 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
259b0 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
259c0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
259d0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
259e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
259f0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
25a00 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
25a10 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
25a20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
25a30 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
25a40 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
25a50 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
25a60 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
25a70 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
25a80 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
25a90 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
25aa0 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
25ab0 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
25ac0 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
25ad0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
25ae0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
25af0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
25b00 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
25b10 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
25b20 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
25b30 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
25b40 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
25b50 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
25b60 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25b70 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
25b80 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
25b90 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
25ba0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25bb0 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
25bc0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
25bd0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
25be0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
25bf0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
25c00 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
25c10 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
25c20 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
25c30 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
25c40 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
25c50 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
25c60 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
25c70 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
25c80 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
25c90 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
25ca0 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
25cb0 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
25cc0 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
25cd0 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
25ce0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
25cf0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
25d00 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
25d10 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25d20 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
25d30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
25d40 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
25d50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
25d60 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
25d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
25d80 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
25d90 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25da0 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
25db0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
25dc0 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
25dd0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
25de0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
25df0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
25e00 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
25e10 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
25e20 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
25e30 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
25e40 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
25e50 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
25e60 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
25e70 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
25e80 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
25e90 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
25ea0 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
25eb0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
25ec0 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20  oid *,u8, .     
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ee0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
25ef0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
25f00 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
25f10 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
25f20 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
25f30 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
25f40 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
25f50 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
25f60 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
25f70 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
25f80 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
25f90 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
25fa0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
25fb0 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
25fc0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
25fd0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
25fe0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
25ff0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
26000 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
26010 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
26020 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
26030 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
26040 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
26050 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
26060 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
26070 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
26080 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
26090 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
260a0 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
260b0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
260c0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
260d0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
260e0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
260f0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
26100 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
26110 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
26120 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
26130 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
26140 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
26150 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
26160 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
26170 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
26180 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
26190 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
261a0 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
261b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
261c0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
261d0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
261e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
261f0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
26200 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
26210 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
26220 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
26230 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26240 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
26250 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
26260 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
26270 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
26280 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
26290 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
262a0 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
262b0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
262c0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
262d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
262e0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
262f0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
26300 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
26310 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
26320 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
26330 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26340 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
26350 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
26360 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
26370 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
26380 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
26390 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
263a0 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
263b0 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
263c0 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
263d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
263e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
263f0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
26400 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
26410 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
26420 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
26430 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
26440 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
26450 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
26460 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
26470 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
26480 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
26490 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
264a0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
264b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
264c0 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
264d0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
264e0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
264f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26500 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
26510 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
26520 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
26530 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
26540 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
26550 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
26560 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26570 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
26580 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
26590 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
265a0 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
265b0 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
265c0 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
265d0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
265e0 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
265f0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
26600 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
26610 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
26620 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
26630 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
26640 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
26650 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
26660 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
26670 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
26680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26690 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
266a0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
266b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
266c0 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
266d0 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
266e0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
266f0 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
26700 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
26710 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
26720 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
26730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
26740 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
26750 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
26760 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
26770 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
26780 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
26790 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
267a0 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
267b0 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
267c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
267d0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
267e0 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
267f0 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
26800 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
26810 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
26820 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
26830 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
26840 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
26850 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
26860 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
26870 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
26880 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
26890 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
268a0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
268b0 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
268c0 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
268d0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
268e0 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
268f0 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
26900 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
26910 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
26920 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
26930 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
26940 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
26950 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
26960 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
26970 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
26980 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
26990 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
269a0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
269b0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
269c0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
269d0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
269e0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
269f0 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
26a00 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
26a10 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
26a20 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
26a30 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
26a40 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
26a50 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
26a60 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
26a70 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
26a80 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
26a90 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
26aa0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26ab0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
26ac0 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
26ad0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
26ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26af0 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
26b00 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
26b10 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
26b20 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
26b30 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
26b40 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
26b50 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
26b60 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
26b70 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
26b80 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
26b90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
26ba0 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
26bb0 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
26bc0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26bd0 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
26be0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
26bf0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
26c00 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
26c10 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
26c20 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
26c30 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
26c40 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
26c50 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
26c60 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
26c70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26c80 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
26c90 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
26ca0 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
26cb0 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
26cc0 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
26cd0 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
26ce0 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
26cf0 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
26d00 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
26d10 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
26d20 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
26d30 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
26d40 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
26d50 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
26d60 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
26d70 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
26d80 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
26d90 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
26da0 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
26db0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
26dc0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
26dd0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
26de0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
26df0 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
26e00 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
26e10 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
26e20 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
26e30 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
26e40 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
26e50 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
26e60 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
26e70 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
26e80 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
26e90 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
26ea0 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
26eb0 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
26ec0 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
26ed0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
26ee0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
26ef0 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
26f00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
26f10 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
26f20 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
26f30 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
26f40 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
26f50 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
26f60 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
26f70 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
26f80 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
26f90 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
26fa0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
26fb0 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
26fc0 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
26fd0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
26fe0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
26ff0 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
27000 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
27010 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
27020 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
27030 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
27040 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
27050 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27060 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
27070 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
27080 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
27090 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
270a0 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
270b0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
270c0 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
270d0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
270e0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
270f0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
27100 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
27110 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
27120 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
27130 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
27140 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
27150 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
27160 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
27170 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
27180 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
27190 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
271a0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
271b0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
271c0 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
271d0 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
271e0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
271f0 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
27200 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
27210 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
27220 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
27230 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
27240 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
27250 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
27260 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
27270 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
27280 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
27290 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
272a0 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
272b0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
272c0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
272d0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
272e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
272f0 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
27300 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
27310 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
27320 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
27330 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
27340 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
27350 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
27360 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27370 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
27380 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
27390 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
273a0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
273b0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
273c0 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
273d0 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
273e0 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
273f0 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
27400 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
27410 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27420 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
27430 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
27440 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
27450 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
27460 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
27470 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
27480 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
27490 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
274a0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
274b0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
274c0 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
274d0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
274e0 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
274f0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
27500 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
27510 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
27520 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
27530 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
27540 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
27550 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
27560 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
27570 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
27580 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
27590 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
275a0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
275b0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
275c0 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
275d0 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
275e0 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
275f0 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
27600 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
27610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
27620 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
27630 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
27640 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
27650 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
27660 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
27670 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
27680 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
27690 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
276a0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
276b0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
276c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
276d0 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
276e0 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
276f0 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
27700 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27710 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
27720 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
27730 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
27740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27750 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
27760 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27770 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
27780 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
27790 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
277a0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
277b0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
277c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
277d0 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
277e0 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
277f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
27800 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
27810 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
27820 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
27830 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
27840 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
27850 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
27860 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
27870 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
27880 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
27890 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
278a0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
278b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
278c0 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
278d0 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
278e0 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
278f0 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
27900 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
27910 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
27920 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
27930 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
27940 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
27950 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
27960 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
27970 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
27980 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
27990 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
279a0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
279b0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
279c0 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
279d0 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
279e0 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
279f0 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
27a00 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
27a10 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
27a20 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
27a30 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
27a40 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
27a50 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
27a60 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
27a70 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
27a80 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
27a90 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
27aa0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
27ab0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
27ac0 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
27ad0 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
27ae0 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
27af0 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
27b00 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
27b10 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
27b20 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
27b30 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
27b40 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
27b50 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27b60 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
27b70 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
27b80 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
27b90 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
27ba0 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
27bb0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
27bc0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
27bd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
27be0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
27bf0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
27c00 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
27c10 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
27c20 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
27c30 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
27c40 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
27c50 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
27c60 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
27c70 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
27c80 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
27c90 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
27ca0 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
27cb0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
27cc0 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
27cd0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27ce0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
27cf0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
27d00 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
27d10 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
27d20 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27d30 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
27d40 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
27d50 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
27d60 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
27d70 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
27d80 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
27d90 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
27da0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27db0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
27dc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
27dd0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
27de0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
27df0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
27e00 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
27e10 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
27e20 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
27e30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27e40 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
27e50 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
27e60 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
27e70 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
27e80 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
27e90 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
27ea0 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
27eb0 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
27ec0 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
27ed0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
27ee0 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
27ef0 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
27f00 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
27f10 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
27f20 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
27f30 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
27f40 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
27f50 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
27f60 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
27f70 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
27f80 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
27f90 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
27fa0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
27fb0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
27fc0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
27fd0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
27fe0 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
27ff0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
28000 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
28010 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
28020 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
28030 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
28040 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
28050 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
28060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
28070 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
28080 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
28090 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
280a0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
280b0 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
280c0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
280d0 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
280e0 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
280f0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
28100 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
28110 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
28120 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
28130 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
28140 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
28150 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
28160 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
28170 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
28180 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
28190 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
281a0 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
281b0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
281c0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
281d0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
281e0 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
281f0 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
28200 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
28210 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
28220 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
28230 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
28240 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
28250 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
28260 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
28270 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
28280 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
28290 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
282a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
282b0 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
282c0 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
282d0 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
282e0 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
282f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
28300 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
28310 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
28320 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
28330 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
28340 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
28350 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
28360 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
28370 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28380 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
28390 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
283a0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
283b0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
283c0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
283d0 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
283e0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
283f0 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
28400 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
28410 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
28420 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
28430 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
28440 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
28450 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
28460 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
28470 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
28480 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
28490 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
284a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
284b0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
284c0 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
284d0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
284e0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
284f0 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
28500 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
28510 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
28520 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
28530 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
28540 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
28550 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
28560 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
28570 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
28580 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
28590 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
285a0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
285b0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
285c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
285d0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
285e0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
285f0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
28600 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
28610 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
28620 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
28630 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
28640 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
28650 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
28660 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
28670 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
28680 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
28690 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
286a0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
286b0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
286c0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
286d0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
286e0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
286f0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
28700 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
28710 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28720 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
28730 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
28740 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
28750 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
28760 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
28770 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
28780 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
28790 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
287a0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
287b0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
287c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
287d0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
287e0 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
287f0 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
28800 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
28810 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
28820 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
28830 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
28840 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
28850 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
28860 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
28870 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
28880 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
28890 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
288a0 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
288b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
288c0 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
288d0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
288e0 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
288f0 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
28900 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
28910 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
28920 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
28930 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
28940 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
28950 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
28960 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
28970 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
28980 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
28990 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
289a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
289b0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
289c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
289d0 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
289e0 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
289f0 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
28a00 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
28a10 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
28a20 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
28a30 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
28a40 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
28a50 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
28a60 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
28a70 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
28a80 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
28a90 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28aa0 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
28ab0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
28ac0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
28ad0 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
28ae0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
28af0 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
28b00 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
28b10 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
28b20 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
28b30 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
28b40 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
28b50 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
28b60 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
28b70 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
28b80 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
28b90 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
28ba0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
28bb0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
28bc0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
28bd0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
28be0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
28bf0 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
28c00 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
28c10 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
28c20 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
28c30 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
28c40 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
28c50 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
28c60 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
28c70 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
28c80 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
28c90 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
28ca0 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
28cb0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
28cc0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
28cd0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
28ce0 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
28cf0 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
28d00 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
28d10 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
28d20 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
28d30 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
28d40 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
28d50 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
28d60 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
28d70 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
28d80 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
28d90 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
28da0 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
28db0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
28dc0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
28dd0 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
28de0 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
28df0 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
28e00 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
28e10 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
28e20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
28e30 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
28e40 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
28e50 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
28e60 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
28e70 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
28e80 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
28e90 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
28ea0 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
28eb0 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
28ec0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
28ed0 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
28ee0 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
28ef0 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
28f00 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
28f10 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
28f20 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
28f30 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
28f40 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28f50 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
28f60 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
28f70 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
28f80 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
28f90 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
28fa0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
28fb0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
28fc0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
28fd0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28fe0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
28ff0 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
29000 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
29010 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
29020 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
29030 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
29040 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
29050 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
29060 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
29070 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
29080 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
29090 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
290a0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
290b0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
290c0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
290d0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
290e0 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
290f0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
29100 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
29110 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
29120 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
29130 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
29140 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
29150 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
29160 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
29170 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
29180 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
29190 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
291a0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
291b0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
291c0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
291d0 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
291e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
291f0 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
29200 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
29210 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
29220 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
29230 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
29240 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
29250 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
29260 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
29270 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
29280 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
29290 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.